From 1f80cc086ebf11798467ffe47ea4ba4a280f0809 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 30 Jul 2019 17:26:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A5=96=E6=9D=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/android.cc | 2 ++ server/gameserver/human.cc | 7 ++++++- server/gameserver/metadata.h | 5 +++++ server/gameserver/metamgr.cc | 16 ++++++++++++++++ server/gameserver/metamgr.h | 1 + server/tools/protobuild/metatable.proto | 7 +++++++ 6 files changed, 37 insertions(+), 1 deletion(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 16464cc..51df78f 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -6,6 +6,8 @@ #include "room.h" #include "app.h" +#include "framework/cpp/utils.h" + Android::Android():Human() { entity_type = kET_Player; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 90de112..eb1ab70 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2218,7 +2218,12 @@ void Human::FillSMGameOver(cs::SMGameOver& msg) p->set_player_avatar_url(avatar_url); p->set_account_id(account_id); p->set_kills(stats.kills); - p->set_cup(11 - stats.rank); + MetaData::Cup* cup_meta = MetaMgr::Instance()->GetCup(stats.rank); + if (cup_meta) { + p->set_cup(cup_meta->i->icon()); + } else { + p->set_cup(11 - stats.rank); + } p->set_gold(stats.gold); p->set_dead_times(stats.dead_times); diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index d030207..0c10df0 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -203,4 +203,9 @@ namespace MetaData const metatable::TankSkin* i = nullptr; }; + struct Cup + { + const metatable::Cup* i = nullptr; + }; + } diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 8c27166..bef853a 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -35,6 +35,8 @@ public: std::list tank_list; std::list tanktank_meta_list; std::list tankskin_list; + std::list cup_meta_list; + std::list cup_list; std::list driver_meta_list; std::list driver_list; std::list skill_meta_list; @@ -68,6 +70,7 @@ public: std::map> maptpl_size_hash; std::map tank_hash; std::map tankskin_hash; + std::map cup_hash; std::vector tankid_list; std::map driver_hash; std::map skill_hash; @@ -100,6 +103,7 @@ public: f8::ReadCsvMetaFile(res_path + "safearea@safearea.csv", safearea_meta_list); f8::ReadCsvMetaFile(res_path + "tank@tank.csv", tank_meta_list); f8::ReadCsvMetaFile(res_path + "tankskin@tankskin.csv", tanktank_meta_list); + f8::ReadCsvMetaFile(res_path + "cup@cup.csv", cup_meta_list); f8::ReadCsvMetaFile(res_path + "driver@driver.csv", driver_meta_list); f8::ReadCsvMetaFile(res_path + "item@item.csv", item_meta_list); f8::ReadCsvMetaFile(res_path + "equip@equip.csv", equip_meta_list); @@ -238,6 +242,12 @@ private: tankskin_hash[item.i->tank_id()] = &item; } + for (auto& meta : cup_meta_list) { + MetaData::Cup& item = a8::FastAppend(cup_list); + item.i = &meta; + cup_hash[item.i->rank()] = &item; + } + for (auto& meta : driver_meta_list) { MetaData::Driver& item = a8::FastAppend(driver_list); item.i = &meta; @@ -538,6 +548,12 @@ MetaData::TankSkin* MetaMgr::GetTankSkin(int tank_id) return itr != loader_->tankskin_hash.end() ? itr->second : nullptr; } +MetaData::Cup* MetaMgr::GetCup(int rank) +{ + auto itr = loader_->cup_hash.find(rank); + return itr != loader_->cup_hash.end() ? itr->second : nullptr; +} + int MetaMgr::RandTank() { return !loader_->tankid_list.empty() ? loader_->tankid_list[rand() % loader_->tankid_list.size()] : 0; diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index cd92ba0..3138e47 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -40,6 +40,7 @@ class MetaMgr : public a8::Singleton MetaData::Driver* GetDriver(int driver_id); MetaData::Tank* GetTank(int tank_id); MetaData::TankSkin* GetTankSkin(int tank_id); + MetaData::Cup* GetCup(int rank); int RandTank(); float GetRankRewardParam(int rank); float GetKillRewardParam(int kill_num); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index dbd74a9..5b37a4b 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -229,6 +229,13 @@ message TankSkin required int32 id = 1; optional int32 tank_id = 2; } + +message Cup +{ + required int32 rank = 1; + optional int32 icon = 2; +} + //end message DoorObjJson