From d5e50db1c50dba7e44ff77359838d53c108a9d5f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 28 Sep 2021 12:36:55 +0000 Subject: [PATCH] 1 --- server/gameserver/matchteam.cc | 17 ++++++++++++++++- server/gameserver/metadata.cc | 5 +++++ server/gameserver/metadata.h | 7 +++++++ server/gameserver/metamgr.cc | 24 +++++++++++++++++++++++- server/gameserver/metamgr.h | 2 ++ server/tools/protobuild/cs_proto.proto | 1 + server/tools/protobuild/metatable.proto | 9 +++++++++ 7 files changed, 63 insertions(+), 2 deletions(-) diff --git a/server/gameserver/matchteam.cc b/server/gameserver/matchteam.cc index ae77ef3..204696f 100644 --- a/server/gameserver/matchteam.cc +++ b/server/gameserver/matchteam.cc @@ -25,6 +25,7 @@ void RawTeamMember::FillMFMatchTeamMember(cs::MFMatchTeamMember* p) p->set_is_leader(is_leader); p->set_state(state); p->set_head(msg.head()); + p->set_hero_skin(msg.hero_skin()); } void RawTeamMember::InitRobot() @@ -36,13 +37,26 @@ void RawTeamMember::InitRobot() std::set refreshed_robot_set; robot_meta = MetaMgr::Instance()->RandRobot(refreshed_robot_set); if (robot_meta) { + #if 1 + msg.set_hero_id(30100); + #else msg.set_hero_id(robot_meta->i->hero_id()); + #endif msg.set_name(robot_meta->i->name()); auto skin = msg.add_skins(); if (!robot_meta->skin_id.empty()) { skin->set_skin_id(robot_meta->skin_id[0]); skin->set_skin_lv(1); } + { + MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(msg.hero_id()); + if (hero_meta) { + MetaData::PlayerSkin* skin_meta = MetaMgr::Instance()->GetPlayerSkin(hero_meta->i->skinlist()); + if (skin_meta) { + msg.set_hero_skin(skin_meta->i->id()); + } + } + } } else { abort(); } @@ -85,7 +99,8 @@ void MatchTeam::_CMMatchChoose(f8::MsgHdr& hdr, const cs::CMMatchChoose& msg) *member->msg.mutable_weapons() = msg.weapons(); *member->msg.mutable_skins() = msg.skins(); *member->msg.mutable_skill_list() = msg.skill_list(); - *member->msg.mutable_baseskin() = msg.baseskin(); + *member->msg.mutable_baseskin() = msg.baseskin(); + member->msg.set_hero_skin(msg.hero_skin()); ++member->choose_hero_times; } } diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 6bf968f..1e90f5c 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -535,6 +535,11 @@ namespace MetaData } } + void PlayerSkin::Init() + { + + } + void Robot::Init() { { diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index dac5177..cb33e8d 100644 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -128,6 +128,13 @@ namespace MetaData void Init(); }; + struct PlayerSkin + { + const metatable::PlayerSkin* i = nullptr; + + void Init(); + }; + struct Robot { const metatable::Robot* i = nullptr; diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 1be103c..e7e8908 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -153,6 +153,8 @@ public: std::list equip_list; std::list player_meta_list; std::list player_list; + std::list playerskin_meta_list; + std::list playerskin_list; std::list mapthing_meta_list; std::list mapthing_list; std::list building_meta_list; @@ -200,6 +202,7 @@ public: std::map equip_hash; std::map equip_slot_hash; std::map player_hash; + std::map playerskin_hash; std::map mapthing_hash; std::map building_hash; std::map drop_hash; @@ -256,7 +259,7 @@ public: f8::ReadCsvMetaFile(res_path + "buff@buff.csv", buff_meta_list); f8::ReadCsvMetaFile(res_path + "equip@equip.csv", equip_meta_list); f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list); - f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list); + f8::ReadCsvMetaFile(res_path + "playerskin@playerskin.csv", playerskin_meta_list); f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list); f8::ReadCsvMetaFile(res_path + "drop@drop.csv", drop_meta_list); f8::ReadCsvMetaFile(res_path + "airdrop@airdrop.csv", airdrop_meta_list); @@ -748,6 +751,13 @@ private: player_hash[item.i->id()] = &item; } + for (auto& meta : playerskin_meta_list) { + MetaData::PlayerSkin& item = a8::FastAppend(playerskin_list); + item.i = &meta; + item.Init(); + playerskin_hash[item.i->id()] = &item; + } + for (auto& meta : mapthing_meta_list) { MetaData::MapThing& item = a8::FastAppend(mapthing_list); item.i = &meta; @@ -945,6 +955,18 @@ MetaData::Player* MetaMgr::GetPlayer(int id) return itr != loader_->player_hash.end() ? itr->second : nullptr; } +MetaData::PlayerSkin* MetaMgr::GetPlayerSkin(int id) +{ + auto itr = loader_->playerskin_hash.find(id); + return itr != loader_->playerskin_hash.end() ? itr->second : nullptr; +} + +std::shared_ptr> MetaMgr::GetHeroSkins(int hero_id) +{ + std::shared_ptr> p; + return p; +} + MetaData::Equip* MetaMgr::GetEquip(int id) { auto itr = loader_->equip_hash.find(id); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 990a052..10e8b6f 100644 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -25,6 +25,8 @@ class MetaMgr : public a8::Singleton std::list* GetMaps(); MetaData::MapThing* GetMapThing(int mapthing_id); MetaData::Player* GetPlayer(int id); + MetaData::PlayerSkin* GetPlayerSkin(int id); + std::shared_ptr> GetHeroSkins(int hero_id); MetaData::Equip* GetEquip(int id); MetaData::Equip* GetEquipBySlotId(int slot_id); MetaData::EquipUpgrade* GetEquipUpgrade(int equip_id); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index be898de..00c4f2c 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -948,6 +948,7 @@ message CMJoin 当服务器判断确实需要显示组队UI时回复SMShowTeamUI,否则正常进游戏 */ optional int32 show_team_ui = 62; + optional int32 hero_skin = 63; //英雄皮肤 } //断线重连 diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index ad1048b..0e76cb3 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -220,6 +220,15 @@ message Player optional int32 delay_delete = 39; optional int32 ai = 46; optional int32 delay_remove = 47; + optional int32 skinlist = 48; +} + +message PlayerSkin +{ + optional int32 id = 1; + optional int32 itemid = 2; + optional int32 playerid = 3; + optional int32 skinid = 4; } message Robot