From 18d3baff8322e0f71859f5dedaa4b6829cee3f6f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Apr 2021 13:47:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AD=BB=E4=BA=A1=E6=8E=89?= =?UTF-8?q?=E8=90=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 12 +++++++++++- server/gameserver/types.cc | 10 ++++++++++ server/gameserver/types.h | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index dce71c8..db19815 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2294,12 +2294,16 @@ void Human::DeadDrop() !HasBuffEffect(kBET_Terminator) && !(HasBuffEffect(kBET_Become) && GetBuffByEffectId(kBET_Become)->FreezeOperate())) { for (auto& weapon : weapons) { - if (weapon.weapon_id != 0 && weapon.weapon_id != default_weapon.weapon_id) { + if (weapon.weapon_id != 0 && + weapon.weapon_id != default_weapon.weapon_id + ) { a8::Vec2 drop_pos = GetPos(); room->DropItem(drop_pos, weapon.weapon_id, 1, weapon.weapon_lv); + weapon.Clear(); } } { + weapons[0] = default_weapon; SetCurrWeapon(&weapons[0]); } } @@ -2352,9 +2356,14 @@ void Human::DeadDrop() switch (equip_meta->i->_inventory_slot()) { case IS_FRAG: case IS_SMOKE: + case IS_POSION_GAS_BOMB: + case IS_MOLOTOR_COCKTAIL: + case IS_TRAP: + case IS_MINE: { a8::Vec2 drop_pos = GetPos(); room->DropItem(drop_pos, equip_meta->i->id(), GetInventoryData()[slot], 1); + DecInventory(slot, GetInventoryData()[slot]); } break; default: @@ -2367,6 +2376,7 @@ void Human::DeadDrop() } } } + need_sync_active_player = true; } void Human::SendBattleReport() diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index 8e5f606..d7cb3a0 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -4,6 +4,16 @@ #include "metamgr.h" +void Weapon::Clear() +{ + weapon_id = 0; + weapon_lv = 0; + ammo = 0; + meta = 0; + bullet_meta = nullptr; + upgrade_meta = nullptr; +} + void Weapon::ToPB(cs::MFWeapon* pb_obj) { pb_obj->set_weapon_id(weapon_id); diff --git a/server/gameserver/types.h b/server/gameserver/types.h index fbff66c..12c81f9 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -41,6 +41,7 @@ struct Weapon MetaData::Equip* meta = nullptr; MetaData::Equip* bullet_meta = nullptr; + void Clear(); void ToPB(cs::MFWeapon* pb_obj); void Recalc(); int GetClipVolume();