Exemple #1
0
void
s_reject_dest(char *m, MESG *md)
{
	char			*destination,
				*reason;
	ushort			status;
	register PSTATUS	*pps;
	register CSTATUS	*pcs;


	getmessage (m, S_REJECT_DEST, &destination, &reason);
	syslog(LOG_DEBUG, "s_reject_dest(%s, %s)",
	       (destination ? destination : "NULL"),
	       (reason ? reason : "NULL"));

	/*
	 * Have we seen this destination as a printer?
	 */
	if ((pps = search_ptable(destination)))
		if (pps->status & PS_REJECTED)
			status = MERRDEST;
		else {
			pps->status |= PS_REJECTED;
			(void) time (&pps->rej_date);
			load_str (&pps->rej_reason, reason);
			dump_pstatus ();
			status = MOK;
		}

	/*
	 * Have we seen this destination as a class?
	 */
	else if ((pcs = search_ctable(destination)))
		if (pcs->status & CS_REJECTED)
			status = MERRDEST;
		else {
			pcs->status |= CS_REJECTED;
			(void) time (&pcs->rej_date);
			load_str (&pcs->rej_reason, reason);
			dump_cstatus ();
			status = MOK;
		}

	else
		status = MNODEST;

	mputm (md, R_REJECT_DEST, status);
	return;
}
Exemple #2
0
static tbc_sym_t *decode_symbols (const tenc_element_t *stb_element)
{
	tenc_element_t	element;
	tbc_sym_t	*head	= NULL;
	tbc_sym_t	*sym	= NULL;
	BYTE 		*data	= stb_element->data.bytes;
	unsigned int 	length	= stb_element->length;

	while (length > 0) {
		unsigned int	s_length;
		BYTE 		*s_data;

		if (tenc_walk_to_element (data, &length, "symL", &element) < 0)
			return NULL;

		if (head == NULL) {
			head 		= (tbc_sym_t *) data;
			sym		= head;
		} else {
			sym->next	= (tbc_sym_t *) data;
			sym		= sym->next;
		}

		s_data		= element.data.bytes;
		s_length	= element.length;
		data		= element.next;

		if (load_uint (&s_data, &s_length, "offU", &(sym->offset)) < 0)
			return NULL;
		if (load_str (&s_data, &s_length, "symS", &(sym->name)) < 0)
			return NULL;

		sym->ws		= 0;
		sym->vs		= 0;
		sym->definition	= NULL;
		sym->next	= NULL;

		if (s_length > 0) {
			if (load_str (&s_data, &s_length, "defS", &(sym->definition)) < 0)
				continue;
			if (load_uint (&s_data, &s_length, "ws U", &(sym->ws)) < 0)
				continue;
			if (load_uint (&s_data, &s_length, "vs U", &(sym->vs)) < 0)
				continue;
		}
	}

	return head;
}
Exemple #3
0
void GameData::readQuestDlgsDataFile()
{
	std::string jsonPath = QDLGS_DATA_PATH;
	rapidjson::Document _doc;
	ssize_t size = 0;
	unsigned char *pBytes = NULL;
	do {
		pBytes = FileUtils::getInstance()->getFileData(jsonPath, "r", &size);
		CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
		std::string load_str((const char*)pBytes, size);
		CC_SAFE_DELETE_ARRAY(pBytes);
		_doc.Parse<0>(load_str.c_str());
		CC_BREAK_IF(_doc.HasParseError());
		// 判断是否为一个数组
		if (!_doc.IsArray())
			return;
		const rapidjson::Value& pArray = _doc;
		for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)
		{
			QuestDlgsData* data = new QuestDlgsData();
			const rapidjson::Value &value = pArray[i];  // value为一个对象
			data->id = value["id"].GetInt();
			data->start = value["start"].GetString();
			data->active = value["active"].GetString();
			data->finish = value["finish"].GetString();
			addDataToQuestDlgsData(data);
		}
	} while (0);
}
Exemple #4
0
static tbc_tlp_t *decode_tlp (BYTE *head, tbc_tlp_t *tlp, const tenc_element_t *tlp_element)
{
	BYTE *data		= tlp_element->data.bytes;
	unsigned int length 	= tlp_element->length;

	if (tlp == NULL)
		tlp = (tbc_tlp_t *) head;

	if (load_str (&data, &length, "fmtS", &(tlp->fmt)) < 0)
		return NULL;
	
	if (load_str (&data, &length, "symS", &(tlp->symbol)) < 0)
		return NULL;
	
	return tlp;
}
Exemple #5
0
static tenc_str_t *decode_strs (BYTE *data, unsigned int length, const char *id)
{
	tenc_str_t	*head	= NULL;
	tenc_str_t	*tail	= NULL;

	while (length > 0) {
		tenc_str_t *curr = (tenc_str_t *) data;
		char *str;

		if (load_str (&data, &length, id, &str) < 0)
			return head;
		
		curr->next	= NULL;
		curr->str	= str;

		if (tail == NULL) {
			head = tail = curr;
		} else {
			tail->next	= curr;
			tail		= curr;
		}
	}

	return head;
}
Exemple #6
0
static int avr_tbc_debug_file_and_line (const prog_char *data, UWORD length, UWORD offset, const prog_char **file, UWORD *line)
{
    avr_tenc_element_t element, files;
    UWORD bc_off, line_off;
    int file_off;
    const prog_char *str;
    int ret;

    *file = NULL;
    *line = 0;

    if ((ret = avr_tenc_walk_to_element (data, &length, "dbgL", &element)) < 0)
        return ret;

    data = element.data.bytes;
    length = element.length;

    if (avr_tenc_walk_to_element (data, &length, "fn L", &files) < 0)
        return -1;

    data = files.next;

    if (avr_tenc_walk_to_element (data, &length, "lndB", &element) < 0)
        return -1;

    data = element.data.bytes;
    length = element.length;

    while (length >= (sizeof (UWORD) * 3)) {
        bc_off = avr_tenc_decode_int (data);
        data += sizeof (UWORD);

        if (bc_off > offset)
            break;

        file_off = (int) avr_tenc_decode_int (data);
        data += sizeof (UWORD);
        line_off = avr_tenc_decode_int (data);
        data += sizeof (UWORD);

        length -= sizeof (UWORD) * 3;
    }

    data = files.data.bytes;
    length = files.length;

    while (file_off >= 0) {
        if ((ret = load_str (&data, &length, "fn S", &str)) < 0)
            return ret;
        file_off--;
    }

    *file = str;
    *line = line_off;

    return 0;
}
Exemple #7
0
int tbc_debug_file_and_line (BYTE *data, unsigned int length, unsigned int offset, char **file, unsigned int *line)
{
	tenc_element_t 	element, files;
	unsigned int	bc_off, file_off, line_off;
	char		*str;
	int		ret;

	*file = NULL;
	*line = 0;

	if ((ret = tenc_walk_to_element (data, &length, "dbgL", &element)) < 0)
		return ret;
	
	data 		= element.data.bytes;

	if (tenc_walk_to_element (data, &length, "fn L", &files) < 0)
		return -1;

	data		= files.next;
	
	if (tenc_walk_to_element (data, &length, "lndB", &element) < 0)
		return -1;

	data		= element.data.bytes;
	length		= element.length;

	while (length >= (sizeof (unsigned int) * 3)) {
		bc_off		= (unsigned int) tenc_decode_int (data);
		data += sizeof (unsigned int);

		if (bc_off > offset)
			break;

		file_off	= (unsigned int) tenc_decode_int (data);
		data += sizeof (unsigned int);
		line_off	= (unsigned int) tenc_decode_int (data);
		data += sizeof (unsigned int);

		length -= sizeof (unsigned int) * 3;
	}

	data		= files.data.bytes;
	length		= files.length;

	while (file_off >= 0) {
		if ((ret = load_str (&data, &length, "fn S", &str)) < 0)
			return ret;
		file_off--;
	}
	
	*file = str;
	*line = line_off;

	return 0;
}
Exemple #8
0
void GameData::readPlayerDataFile()
{
	playerData = NULL;
	std::string jsonPath = PLAYER_DATA_PATH;
	rapidjson::Document _doc;
	ssize_t size = 0;
	unsigned char *pBytes = NULL;
	do {
		pBytes = FileUtils::getInstance()->getFileData(jsonPath, "r", &size);
		CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
		std::string load_str((const char*)pBytes, size);
		CC_SAFE_DELETE_ARRAY(pBytes);
		_doc.Parse<0>(load_str.c_str());
		CC_BREAK_IF(_doc.HasParseError());
		if (!_doc.IsObject())
			return;
		const rapidjson::Value& value = _doc;
		PlayerData* data = new PlayerData();
		data->sceneId = value["sceneId"].GetInt();
		data->posX = value["posX"].GetDouble();
		data->posY = value["posY"].GetDouble();
		data->direction = value["direction"].GetInt();
		data->level = value["level"].GetInt();
		data->hp = value["hp"].GetDouble();
		data->mp = value["mp"].GetDouble();
		data->exp = value["exp"].GetDouble();
		playerData = data;

		// 读取玩家对话数据
		if (value.HasMember("taskDlgsStatus"))
		{
			const rapidjson::Value& taskDlgs = value["taskDlgsStatus"];
			for (int i = 0, size = taskDlgs.Size(); i < size; i++)
			{
				const rapidjson::Value& object = taskDlgs[i];
				auto taskData = m_mapPlayerTaskDlgs.at(object["taskId"].GetInt());
				taskData->isSaidAcTsDlgs = object["isSaidAcTsDlgs"].GetBool();
				taskData->isSaidFiTsDlgs = object["isSaidFiTsDlgs"].GetBool();
			}
		}
		// 读取玩家进入地图对话数据
		if (value.HasMember("etSceneDlgsStatus"))
		{
			const rapidjson::Value& dlgs = value["etSceneDlgsStatus"];
			for (int i = 0, size = dlgs.Size(); i < size; i++)
			{
				const rapidjson::Value& object = dlgs[i];
				auto data = m_mapEnterSceneDlgs.at(object["sceneId"].GetInt());
				data->isSaid = object["isSaid"].GetBool();
			}
		}
	} while (0);
}
Exemple #9
0
void master_conf::load(const char* path)
{
	if (cfg_loaded_)
		return;
	if (path)
		cfg_ = acl_xinetd_cfg_load(path);
	cfg_loaded_ = true;

	load_bool();
	load_int();
	load_int64();
	load_str();
}
Exemple #10
0
bool CCComAttribute::parse(const std::string &jsonPath)
{
    bool bRet = false;
    unsigned long size = 0;
    unsigned char *pBytes = NULL;
    do {
          pBytes = cocos2d::CCFileUtils::sharedFileUtils()->getFileData(jsonPath.c_str(), "r", &size);
          CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
          std::string load_str((const char*)pBytes, size);
          CC_SAFE_DELETE_ARRAY(pBytes);
          _doc.Parse<0>(load_str.c_str());
          CC_BREAK_IF(_doc.HasParseError());
          bRet = true;
        } while (0);
    return bRet;
}
Exemple #11
0
bool CCComRender::readJson(const char *pszFileName, rapidjson::Document &doc)
{
    bool bRet = false;
    unsigned long size = 0;
    unsigned char *pBytes = NULL;
    do {
        CC_BREAK_IF(pszFileName == NULL);
        std::string jsonpath = CCFileUtils::sharedFileUtils()->fullPathForFilename(pszFileName);
        pBytes = cocos2d::CCFileUtils::sharedFileUtils()->getFileData(jsonpath.c_str(), "r", &size);
        CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
        std::string load_str((const char*)pBytes, size);
        CC_SAFE_DELETE_ARRAY(pBytes);
        doc.Parse<0>(load_str.c_str());
        CC_BREAK_IF(doc.HasParseError());
        bRet = true;
    } while (0);
    return bRet;
}
Exemple #12
0
void GameData::readQuestsDataFile()
{
	std::string jsonPath = QUESTS_DATA_PATH;
	rapidjson::Document _doc;
	ssize_t size = 0;
	unsigned char *pBytes = NULL;
	do {
		pBytes = FileUtils::getInstance()->getFileData(jsonPath, "r", &size);
		CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
		std::string load_str((const char*)pBytes, size);
		CC_SAFE_DELETE_ARRAY(pBytes);
		_doc.Parse<0>(load_str.c_str());
		CC_BREAK_IF(_doc.HasParseError());
		// 判断是否为一个数组
		if (!_doc.IsArray())
			return;
		const rapidjson::Value& pArray = _doc;
		for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)
		{
			QuestListData* data = new QuestListData();
			const rapidjson::Value &value = pArray[i];  // value为一个对象
			data->id = value["id"].GetInt();
			data->level = value["level"].GetInt();
			data->mapID = value["mapID"].GetInt();
			data->title = value["title"].GetString();
			data->instruct = value["instruct"].GetString();
			data->type = value["type"].GetInt();
			data->status = value["status"].GetInt();
			const rapidjson::Value &mArray = value["mons_id"];
			for (int i = 0; i < mArray.Size(); i++) {
				data->mons_id.push_back(mArray[i].GetInt());
			}

			const rapidjson::Value &fArray = value["forgeID"];
			for (int i = 0; i < fArray.Size(); i++) {
				data->forgeID.push_back(fArray[i].GetInt());
			}

			data->targetNpc = value["targetNpc"].GetString();
			data->launchNpc = value["launchNpc"].GetString();
			addDataToQuestsData(data);
		}
	} while (0);
}
Exemple #13
0
MPpar::MPpar(MPtag *mptag)
{
	alloc_workmem();

	num_nodes = 0;
	nodes = NULL;
	owner = NULL;

	option_parens = 0;
	option_conj = 0;
	option_gerund = 0;
	option_rev = 0;
	option_postmod = 0;
	option_subparse = 0;
	option_printnull = 0;
	option_prep = 1;

	load_str(mptag);
}
Exemple #14
0
int chkVersionChange() {
    char keySaved[14]   = {0};
    char keyNew[14]     = {0};
    struct tm tm        = {0};
    char* verTime       = versionDateString();

    if (verTime) {
        strptime(verTime, "%a %b %d %T PDT %Y", &tm);
        strftime(keyNew, sizeof(keyNew), "%s", &tm);

        load_str(MAND_CONF,  "MAGIC_KEY", keySaved, sizeof(keySaved), NULL);
        g_first_run = strcmp(keySaved, keyNew);
        if (g_first_run != 0)
            save_str(MAND_CONF, "MAGIC_KEY", keyNew);
    } else {
        g_first_run = 0;
    }
    return g_first_run;
}
Exemple #15
0
void master_conf::set_cfg_str(master_str_tbl* table)
{
	if (table == NULL || str_cfg_)
		return;

	int  i = 0;
	for (; table[i].name != NULL; i++);
	str_cfg_ = (ACL_CFG_STR_TABLE*) acl_mycalloc(i + 1,
		sizeof(ACL_CFG_STR_TABLE));

	for (i = 0; table[i].name != NULL; i++)
	{
		str_cfg_[i].name = table[i].name;
		str_cfg_[i].defval = table[i].defval;
		str_cfg_[i].target = table[i].target;
	}
	str_cfg_[i].name = NULL;
	load_str();
}
Exemple #16
0
int ss_conf_getnstr(const ss_conf_data_t *conf, const char *conf_name, char *conf_value, const size_t n, const char *comment, const char *default_value)
{
	if (NULL == conf || NULL == conf_name || NULL == conf_value || 0 == n) {
		return SS_CONF_NULL;
	}

	if (conf->build != SS_CONF_READCONF) {
		if (write_comment(conf->conf_file, comment) == SS_CONF_SUCCESS) {
			if (default_value != NULL) {
				fprintf(conf->conf_file, "#[default configure(string), %s : %s]\n%s : %s", conf_name, conf_value, conf_name, conf_value);
			} else {
				fprintf(conf->conf_file, "%s : ", conf_name);
			}
			return SS_CONF_SUCCESS;
		}
		return SS_CONF_NULL;
	}

	int ret;

	ret = load_str(conf, conf_name, conf_value, n);

	if (ret == SS_CONF_LOST) {
		if (default_value != NULL) {
			snprintf(conf_value, n, "%s", default_value);
			SS_LOG_WARNING("load string [%s] fail, use default value [%s]", conf_name, default_value);
			return SS_CONF_DEFAULT;
		}
		SS_LOG_WARNING("load string fail, not found[%s]", conf_name);
		return SS_CONF_LOST;
	}

	if (check_str(conf, conf_name, conf_value) != SS_CONF_CHECKSUCCESS) {
		return SS_CONF_CHECKFAIL;
	}

	SS_LOG_TRACE("get string value [%s : %s]", conf_name, conf_value);

	return ret;

}
Exemple #17
0
void GameData::readNpcsDataFile()
{
	std::string jsonPath = NPCS_DATA_PATH;
	rapidjson::Document _doc;
	ssize_t size = 0;
	unsigned char *pBytes = NULL;
	do {
		pBytes = FileUtils::getInstance()->getFileData(jsonPath, "r", &size);
		CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
		std::string load_str((const char*)pBytes, size);
		CC_SAFE_DELETE_ARRAY(pBytes);
		_doc.Parse<0>(load_str.c_str());
		CC_BREAK_IF(_doc.HasParseError());
		// 判断是否为一个数组
		if (!_doc.IsArray())
			return;
		const rapidjson::Value& pArray = _doc;
		log("%d", pArray.Size());
		for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)
		{
			// 读取对象属性
			NpcsData* data = new NpcsData();
			const rapidjson::Value &value = pArray[i];  // value为一个对象
			data->id = value["id"].GetInt();
			data->name = value["name"].GetString();
			data->status = value["status"].GetInt();
			data->mapID = value["mapID"].GetInt();
			data->imagePath = value["imagePath"].GetString();
			const rapidjson::Value &intArray = value["quest_id"];
			for (int i = 0; i < intArray.Size(); i++) {
				data->quest_id.push_back(intArray[i].GetInt());
			}
			const rapidjson::Value &strArray = value["dlgs"];
			for (int i = 0; i < strArray.Size(); i++) {
				data->dlgs.push_back(strArray[i].GetString());
			}
			//data->imagePath = value["imagePath"].GetString();
			addDataToNpcsData(data);
		}
	} while (0);
}
Exemple #18
0
/* Code for leaf nodes in the expression parse tree: constants, strings,
 * identifers, and so on.  */
static
leaf_code(stream, node, need_lval) {
    if ( node[0] == 'num' || node[0] == 'chr' || node[0] == 'str' ) {
        if (node[0] == 'num') load_num(stream, node[3]);
        else if (node[0] == 'chr') load_chr(stream, &node[3]);
        else if (node[0] == 'str') {
            auto lc = new_clabel();
            defn_str(stream, &node[3], lc);
            load_str(stream, lc);
        }
    }

    else if ( node[0] == 'id' ) {
        auto off, is_lval = lookup_sym( &node[3], &off );
        auto need_addr = (is_lval == need_lval);

        if (!off) load_symbol(stream, &node[3], need_addr);
        else load_local(stream, off, need_addr);
    }

    else int_error("Unknown token '%Mc' in parse tree", node[0]);
}
Exemple #19
0
void GameData::readPlayerDlgsDataFile()
{
	std::string jsonPath = PLAYER_DLGS_DATA_PATH;
	rapidjson::Document _doc;
	ssize_t size = 0;
	unsigned char *pBytes = NULL;
	do {
		pBytes = FileUtils::getInstance()->getFileData(jsonPath, "r", &size);
		CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
		std::string load_str((const char*)pBytes, size);
		CC_SAFE_DELETE_ARRAY(pBytes);
		_doc.Parse<0>(load_str.c_str());
		CC_BREAK_IF(_doc.HasParseError());
		// 获取玩家任务对话
		const rapidjson::Value& taskDlgs = _doc["TaskDlgs"];
		for (int i = 0, size = taskDlgs.Size(); i < size; i++)
		{
			const rapidjson::Value& value = taskDlgs[i];
			PlayerTaskDlgsData* data = new PlayerTaskDlgsData();
			data->taskId = value["TaskId"].GetInt();
			if (value.HasMember("AcceptTaskDlgs"))
			{
				const rapidjson::Value& acTaskDlgs = value["AcceptTaskDlgs"];
				for (int j = 0, size = acTaskDlgs.Size(); j < size; j++)
					data->acceptTaskDlgs.push_back(acTaskDlgs[j].GetString());
			}
			if (value.HasMember("CommitTaskDlgs"))
			{
				const rapidjson::Value& cmTaskDlgs = value["CommitTaskDlgs"];
				for (int j = 0, size = cmTaskDlgs.Size(); j < size; j++)
					data->commitTaskDlgs.push_back(cmTaskDlgs[j].GetString());
			}
			if (value.HasMember("FinishTaskDlgs"))
			{
				const rapidjson::Value& fiTaskDlgs = value["FinishTaskDlgs"];
				for (int j = 0, size = fiTaskDlgs.Size(); j < size; j++)
					data->finishTaskDlgs.push_back(fiTaskDlgs[j].GetString());
			}
			data->isSaidAcTsDlgs = false;
			data->isSaidCmTsDlgs = false;
			data->isSaidFiTsDlgs = false;
			data->isSaying = false;
			addDataToPlayerTaskDlgsData(data);
		}
		// 获取进入场景对话
		const rapidjson::Value& sceneDlgs = _doc["EnterSceneDlgs"];
		for (int i = 0, size = sceneDlgs.Size(); i < size; i++)
		{
			const rapidjson::Value& value = sceneDlgs[i];
			EnterSceneDlgsData* data = new EnterSceneDlgsData();
			data->sceneId = value["SceneId"].GetInt();
			// 无法进入场景时对话
			if (value.HasMember("CannotEnterDlgs"))
			{
				const rapidjson::Value& cannotEnterDlgs = value["CannotEnterDlgs"];
				for (int j = 0, size = cannotEnterDlgs.Size(); j < size; j++)
					data->cannotEnterDlgs.push_back(cannotEnterDlgs[j].GetString());
			}
			// 进入场景时对话
			if (value.HasMember("EnterSceneDlgs"))
			{
				const rapidjson::Value& etSceneDlgs = value["EnterSceneDlgs"];
				for (int j = 0, size = etSceneDlgs.Size(); j < size; j++)
					data->enterSceneDlgs.push_back(etSceneDlgs[j].GetString());
				data->isSaid = false;
				addDataToEnterSceneDlgsData(data);
			}
			data->isSaid = false;
		}
	} while (0);
}
Exemple #20
0
void GameData::readMonsDataFile()
{
	std::string jsonPath = MONS_DATA_PATH;
	rapidjson::Document _doc;
	ssize_t size = 0;
	unsigned char *pBytes = NULL;
	do {
		pBytes = FileUtils::getInstance()->getFileData(jsonPath, "r", &size);
		CC_BREAK_IF(pBytes == NULL || strcmp((char*)pBytes, "") == 0);
		std::string load_str((const char*)pBytes, size);
		CC_SAFE_DELETE_ARRAY(pBytes);
		_doc.Parse<0>(load_str.c_str());
		CC_BREAK_IF(_doc.HasParseError());
		// 判断是否为一个数组
		if (!_doc.IsArray())
			return;
		const rapidjson::Value& pArray = _doc;
		for (rapidjson::SizeType i = 0; i < pArray.Size(); i++)
		{
			//读取对象属性
			MonsData* data = new MonsData();
			const rapidjson::Value& value = pArray[i]; //value为一个对象
			data->id = value["id"].GetInt();
			data->name = value["name"].GetString();
			data->hp = value["hp"].GetDouble();
			data->moveSpeed = value["moveSpeed"].GetDouble();
			data->eyeRange = value["eyeRange"].GetDouble();
			data->perceptionRange = value["perceptionRange"].GetDouble();
			data->attackedrestoretime = value["attackedrestoretime"].GetDouble();
			data->imagePath = value["imagePath"].GetString();
			data->exp = value["exp"].GetDouble();
			const rapidjson::Value& baseskillArray = value["baseskill"];
			if (baseskillArray.Size() > 0)
			{
				const rapidjson::Value& baseskill = baseskillArray[0];//获取数组对象
				MonSkill skill;
				skill.skilltype = baseskill["skilltype"].GetString();
				skill.attackRange = baseskill["attackRange"].GetDouble();
				skill.beforeattacktimes = baseskill["beforeattacktimes"].GetDouble();
				skill.attackAnimatetimePer = baseskill["attackAnimatetimePer"].GetDouble();
				skill.attackInter = baseskill["attackInter"].GetDouble();
				skill.attackEnd = baseskill["attackEnd"].GetDouble();
				skill.Isinter = baseskill["Isinter"].GetBool();
				skill.damage = baseskill["damage"].GetDouble();
				skill.attackNums = baseskill["attackNums"].GetInt();
				skill.attackNumsInter = baseskill["attackNumsInter"].GetDouble();
				skill.hAnimateName = baseskill["hAnimateName"].GetString();
				skill.dAnimateName = baseskill["dAnimateName"].GetString();
				skill.uAnimateName = baseskill["uAnimateName"].GetString();
				data->skillmap[skill.skilltype] = skill;
			}
			const rapidjson::Value& bigskillArray = value["bigskill"];
			if (bigskillArray.Size() > 0)
			{
				const rapidjson::Value& bigskill = bigskillArray[0];//获取数组对象
				MonSkill skill;
				skill.skilltype = bigskill["skilltype"].GetString();
				skill.attackRange = bigskill["attackRange"].GetDouble();
				skill.beforeattacktimes = bigskill["beforeattacktimes"].GetDouble();
				skill.attackAnimatetimePer = bigskill["attackAnimatetimePer"].GetDouble();
				skill.attackInter = bigskill["attackInter"].GetDouble();
				skill.attackEnd = bigskill["attackEnd"].GetDouble();
				skill.Isinter = bigskill["Isinter"].GetBool();
				skill.damage = bigskill["damage"].GetDouble();
				skill.attackNums = bigskill["attackNums"].GetInt();
				skill.attackNumsInter = bigskill["attackNumsInter"].GetDouble();
				skill.hAnimateName = bigskill["hAnimateName"].GetString();
				skill.dAnimateName = bigskill["dAnimateName"].GetString();
				skill.uAnimateName = bigskill["uAnimateName"].GetString();
				data->skillmap[skill.skilltype] = skill;
			}
			const rapidjson::Value& remoteskillArray = value["remoteskill"];
			if (remoteskillArray.Size() > 0)
			{
				const rapidjson::Value& remoteskill = remoteskillArray[0];//获取数组对象
				MonRemoteSkill skill;
				skill.skilltype = remoteskill["skilltype"].GetString();
				skill.projectileName = remoteskill["projectileName"].GetString();
				skill.projectileAnimateName = remoteskill["projectileAnimateName"].GetString();
				skill.skillwidth = remoteskill["skillwidth"].GetDouble();
				skill.skillheight = remoteskill["skillheight"].GetDouble();
				skill.projmovespeed = remoteskill["projmovespeed"].GetDouble();
				skill.eyeRangeForstartskill = remoteskill["eyeRangeForstartskill"].GetDouble();
				skill.beforeattacktimes = remoteskill["beforeattacktimes"].GetDouble();
				skill.attackAnimatetimePer = remoteskill["attackAnimatetimePer"].GetDouble();
				skill.attackInter = remoteskill["attackInter"].GetDouble();
				skill.attackEnd = remoteskill["attackEnd"].GetDouble();
				skill.Isinter = remoteskill["Isinter"].GetBool();
				skill.damage = remoteskill["damage"].GetDouble();
				skill.duration = remoteskill["duration"].GetDouble();
				skill.hAnimateName = remoteskill["hAnimateName"].GetString();
				skill.dAnimateName = remoteskill["dAnimateName"].GetString();
				skill.uAnimateName = remoteskill["uAnimateName"].GetString();
				data->remoteskillmap[skill.skilltype] = skill;
			}
			addDataToMonsData(data);
		}
	} while (0);
}
Exemple #21
0
int  ss_conf_getfloat(const ss_conf_data_t *conf, const char *name, float *value, const char *comment, const float *default_value)
{
	if (NULL == conf || NULL == name || NULL == value) {
		return SS_CONF_NULL;
	}

	if (conf->build != SS_CONF_READCONF) {
		if (write_comment(conf->conf_file, comment) != SS_CONF_SUCCESS) {
			if (default_value != NULL) {
				fprintf(conf->conf_file, "#[default configure[float], [%s : %f]\n%s : %f", name, *default_value, name, *default_value);
				return SS_CONF_DEFAULT;
			} else {
				fprintf(conf->conf_file, "%s : ", name);
			}
			return SS_CONF_SUCCESS;
		}
		return SS_CONF_NULL;
	}

	*value = 0;
	char conf_value_str[WORD_SIZE];

	int ret;

	ret = load_str(conf, name, conf_value_str, sizeof(conf_value_str));
	if (SS_CONF_LOST == ret) {
		if (default_value != NULL) {
			*value = *default_value;
			SS_LOG_WARNING("int [%s] no found, use default value [%f]", name, *default_value);
			return SS_CONF_DEFAULT;
		}
		SS_LOG_WARNING("load uint fail, no found[%s]", name);
		return SS_CONF_LOST;
	}

	if (is_blank_str(conf_value_str, sizeof(conf_value_str))) {
		SS_LOG_WARNING("int [%s] is empty", name);
		return SS_CONF_CHECKFAIL;
	}

	float num;
	char *endptr;
	errno = 0;
	num = strtod(conf_value_str, &endptr);
	if (errno == ERANGE || num < INT_MIN || num > INT_MAX) {
		SS_LOG_WARNING("int [%s] load error, [%s] overflow", name, conf_value_str);
		return SS_CONF_OVERFLOW;
	}

	if (!is_blank_str(endptr, sizeof(conf_value_str))) {
		SS_LOG_WARNING("int [%s] load error, [%s] is invalid", name, conf_value_str);
		return SS_CONF_CHECKFAIL;
	}
	
	if (check_uint64_range(conf, name, num) != SS_CONF_CHECKSUCCESS) {
		return SS_CONF_OVERFLOW;
	}

	*value = num;
	SS_LOG_TRACE("get int value [%s : %f]", name, *value);
	return SS_CONF_SUCCESS;

}