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; }
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; }
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); }
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; }
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; }
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; }
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; }
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); }
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(); }
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; }
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; }
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); }
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); }
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; }
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(); }
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; }
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); }
/* 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]); }
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); }
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); }
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; }