diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 0b41f7e5..c74b9264 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -1043,6 +1043,12 @@ namespace MetaData } } } + { + number_meta = MetaMgr::Instance()->GetSkillNumber(i->skill_id()); + if (!number_meta) { + abort(); + } + } } void Skill::Init2() diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 4d8a9839..b2cc29af 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -173,6 +173,8 @@ public: std::list dress_list; std::list skill_meta_list; std::list skill_list; + std::list skill_number_meta_list; + std::list skill_number_list; std::list buff_meta_list; std::list buff_list; std::list attr_meta_list; @@ -224,6 +226,7 @@ public: std::map dress_hash; std::vector dress_vec; std::map skill_hash; + std::map skill_number_hash; std::map buff_hash; std::map attr_id_hash; std::map attr_name_hash; @@ -284,6 +287,7 @@ public: f8::ReadJsonMetaFile(res_path + "maps.json", building_meta_list); f8::ReadCsvMetaFile(res_path + "dress@dress.csv", dress_meta_list); f8::ReadCsvMetaFile(res_path + "skill@skill.csv", skill_meta_list); + f8::ReadCsvMetaFile(res_path + "skillNumber@skillNumber.csv", skill_number_meta_list); f8::ReadCsvMetaFile(res_path + "attr@attr.csv", attr_meta_list); f8::ReadCsvMetaFile(res_path + "rankReward@rankReward.csv", rankreward_meta_list); f8::ReadCsvMetaFile(res_path + "killReward@killReward.csv", killreward_meta_list); @@ -857,6 +861,13 @@ private: attr_name_hash[item.i->attr_ename()] = &item; } + for (auto& meta : skill_number_meta_list) { + MetaData::SkillNumber& item = a8::FastAppend(skill_number_list); + item.pb = &meta; + item.Init(); + skill_number_hash[item.pb->skill_id()] = &item; + } + for (auto& meta : skill_meta_list) { MetaData::Skill& item = a8::FastAppend(skill_list); item.i = &meta; @@ -1153,6 +1164,12 @@ MetaData::AirLine* MetaMgr::RandAirLine(int map_id) } } +MetaData::SkillNumber* MetaMgr::GetSkillNumber(int skill_id) +{ + auto itr = loader_->skill_number_hash.find(skill_id); + return itr != loader_->skill_number_hash.end() ? itr->second : nullptr; +} + MetaData::Skill* MetaMgr::GetSkill(int skill_id) { auto itr = loader_->skill_hash.find(skill_id); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 89bff725..ccdbd2e3 100644 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -46,6 +46,7 @@ class MetaMgr : public a8::Singleton MetaData::AirRaid* GetAirRaid(int airraid_id); MetaData::AirLine* RandAirLine(int map_id); MetaData::Skill* GetSkill(int skill_id); + MetaData::SkillNumber* GetSkillNumber(int skill_id); MetaData::Buff* GetBuff(int buff_id); MetaData::Attr* GetAttrById(int attr_id); MetaData::Attr* GetAttrByName(const std::string& attr_name);