From 87da45520fb9ced1ce201ead0b1fde251030dd43 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 30 Nov 2020 15:05:56 +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 | 2 +- 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(+), 3 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 26210d6b..a15e9ac4 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 }; @@ -384,4 +385,3 @@ const int ZOMBIE_RACE_META_START_ID = 6001; const int TERMINATOR_BUFF_ID = 1033; const int TURN_OVER_SKILL_ID = 41001; - diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 371ce445..aba92561 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -981,8 +981,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) @@ -2689,6 +2698,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 f4b85db5..664ca4ae 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -136,6 +136,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; @@ -301,6 +302,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 95dff57c..7f7763c3 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 08f4c78e..3afc5728 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -979,6 +979,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:道具数量 } //离开