diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index ac64c2b..7b933c8 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -1535,4 +1535,19 @@ namespace MetaData } + void GunTalentGrow::Init() + { + std::vector tmp_strs1; + a8::Split(i->addattr(), tmp_strs1, '|'); + for (std::string& str : tmp_strs1) { + std::vector tmp_strs2; + a8::Split(str, tmp_strs2, ':'); + if (tmp_strs2.size() >= 2) { + addattr.push_back( + std::make_tuple(a8::XValue(tmp_strs2[0]), a8::XValue(tmp_strs2[1])) + ); + } + } + } + } diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 89feb22..019d679 100644 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -327,6 +327,15 @@ namespace MetaData const metatable::KillPoint* i = nullptr; }; + struct GunTalentGrow + { + const metatable::GunTalentGrow* i = nullptr; + + std::vector> addattr; + + void Init(); + }; + struct AI { const metatable::AI* i = nullptr; diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index f531658..be2f5dd 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -191,6 +191,7 @@ public: std::list ai_list; std::list text_meta_list; std::list terrain_meta_list; + std::list talent_meta_list; std::map parameter_hash; std::map gamemap_hash; @@ -227,6 +228,7 @@ public: std::map android_ai_hash; std::map ai_hash; std::map text_hash; + std::map> talent_hash; std::map>> text_element_hash; int curr_group_id = 1001; @@ -278,6 +280,7 @@ public: f8::ReadCsvMetaFile(res_path + "robot@robot.csv", robot_meta_list); f8::ReadCsvMetaFile(res_path + "ai@ai.csv", ai_meta_list); f8::ReadCsvMetaFile(res_path + "text@text.csv", text_meta_list); + f8::ReadCsvMetaFile(res_path + "gunTalentGrow@gunTalentGrow.csv", talent_meta_list); f8::ReadJsonMetaFile(res_path + "terrain.json", terrain_meta_list); BindToMetaData(); #if 1 @@ -900,6 +903,13 @@ private: } } + for (auto& meta : talent_meta_list) { + std::shared_ptr item = std::make_shared(); + item->i = &meta; + item->Init(); + talent_hash[a8::MakeInt64(meta.talent_id(), meta.talent_lv())] = item; + } + } private: @@ -1224,3 +1234,9 @@ std::vector>* MetaMgr::GetTextElements(const std::s auto itr = loader_->text_element_hash.find(textid); return itr != loader_->text_element_hash.end() ? &itr->second : nullptr; } + +MetaData::GunTalentGrow* MetaMgr::GetTalent(int talent_id, int talent_lv) +{ + auto itr = loader_->talent_hash.find(a8::MakeInt64(talent_id, talent_lv)); + return itr != loader_->talent_hash.end() ? itr->second.get() : nullptr; +} diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index ee7ed95..fec06c7 100644 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -52,6 +52,7 @@ class MetaMgr : public a8::Singleton MetaData::Dress* GetDress(int dress_id); MetaData::Dress* RandDress(); MetaData::RankReward* GetRankReward(int rank); + MetaData::GunTalentGrow* GetTalent(int talent_id, int talent_lv); float GetRankRewardParam(int rank); float GetKillRewardParam(int kill_num); int GetRankPointParam1(int rank); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 13b5b8a..1f96c90 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -416,6 +416,15 @@ message Text optional string text = 2; } +message GunTalentGrow +{ + optional int32 id = 1; + optional int32 talent_id = 2; + optional int32 talent_lv = 3; + optional int32 addtype = 4; + optional string addattr = 5; +} + //end message DoorObjJson