From 6a40f89ea4620166d9474ffe5696c6b76de13f9f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 4 Dec 2020 19:28:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=88=98=E5=88=A9=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/constant.h | 1 + server/gameserver/human.cc | 23 +++++++++++++++++++++-- server/gameserver/human.h | 2 ++ server/gameserver/player.cc | 5 +++++ server/tools/protobuild/cs_proto.proto | 1 + 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 26210d6..475bbb3 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -226,6 +226,7 @@ enum EquipType_e EQUIP_TYPE_CAR = 9, EQUIP_TYPE_SKIN = 10, EQUIP_TYPE_CAMOUFLAGE = 11, + EQUIP_TYPE_SPOILS = 12, EQUIP_TYPE_End }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 803ed5e..96d1e5a 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -962,8 +962,17 @@ void Human::FillSMGameOver(cs::SMGameOver& msg) } } } - cs::MFPlayerStats* p = msg.add_player_stats(); - FillMFPlayerStats(p); + { + cs::MFPlayerStats* p = msg.add_player_stats(); + FillMFPlayerStats(p); + } + { + for (auto& pair : spoils_items) { + auto p = msg.add_spoils_items(); + p->add_values(pair.first); + p->add_values(pair.second); + } + } } void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) @@ -2670,6 +2679,16 @@ void Human::ProcCamoutflage(Loot* entity, MetaData::Equip* item_meta) AddItem(item_meta->i->id(), 1); } +void Human::ProcSpoils(Loot* entity, MetaData::Equip* item_meta) +{ + if (spoils_items.find(item_meta->i->id()) != + spoils_items.end()) { + spoils_items[item_meta->i->id()] += entity->count; + } else { + spoils_items[item_meta->i->id()] = entity->count; + } +} + void Human::FindLocationWithTarget(Entity* target) { a8::Vec2 old_pos = GetPos(); diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 2799aac..b6b32d5 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -134,6 +134,7 @@ class Human : public MoveableEntity Weapon grow_weapon; std::map weapon_configs; std::map skin_configs; + std::map spoils_items; bool use_skill = false; size_t curr_skill_phase = 0; @@ -299,6 +300,7 @@ protected: void ProcLootSkin(Loot* entity, MetaData::Equip* item_meta); void ProcLootCar(Loot* entity, MetaData::Equip* item_meta); void ProcCamoutflage(Loot* entity, MetaData::Equip* item_meta); + void ProcSpoils(Loot* entity, MetaData::Equip* item_meta); void SelectSkillTargets(const a8::Vec2& target_pos, std::set& target_list); Buff* GetBuffById(int buff_id); void ProcSkillPhase(MetaData::SkillPhase* phase); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 95dff57..7f7763c 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -604,6 +604,11 @@ void Player::LootInteraction(Loot* entity) ProcCamoutflage(entity, item_meta); } break; + case EQUIP_TYPE_SPOILS: + { + ProcSpoils(entity, item_meta); + } + break; default: { if (item_meta->i->_inventory_slot() >= 0 && diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 2944ecd..845a2bb 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -968,6 +968,7 @@ message SMGameOver repeated MFPlayerStats player_stats = 6; //玩家信息统计 optional string room_uuid = 7; //房间唯一id repeated MFTeamData team_data = 10; //队伍数据 + repeated MFTuple spoils_items = 11; //战利品 0: 道具id 1:道具数量 } //离开