From c941bd2c59de02c4240e0c125623abd6a13b600b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 4 Aug 2021 05:46:49 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=90=E5=BC=B9=E6=8E=89?= =?UTF-8?q?=E8=90=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index d744f54..9674a67 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2223,6 +2223,13 @@ void Human::DeadDrop() ) { a8::Vec2 drop_pos = GetPos(); room->DropItem(drop_pos, weapon.weapon_id, 1, weapon.weapon_lv); + if (weapon.ammo > 0 && weapon.bullet_meta && weapon.ammo < 200) { + if (IsPlayer() && + weapon.bullet_meta && + IsValidSlotId(weapon.bullet_meta->i->_inventory_slot())) { + AddInventory(weapon.bullet_meta->i->_inventory_slot(), weapon.ammo); + } + } weapon.Clear(); } } @@ -2276,6 +2283,7 @@ void Human::DeadDrop() if (GetInventory(slot) > 0) { MetaData::Equip* equip_meta = MetaMgr::Instance()->GetEquipBySlotId(slot); if (equip_meta) { + int drop_num = equip_meta->i->group_num(); if (equip_meta->i->equip_type() == EQUIP_TYPE_BULLET) { switch (equip_meta->i->_inventory_slot()) { case IS_FRAG: @@ -2284,18 +2292,41 @@ void Human::DeadDrop() case IS_MOLOTOR_COCKTAIL: case IS_TRAP: case IS_MINE: + case IS_C4: + case IS_SHIELD_WALL: + case IS_SINGAL_GUN: + case IS_OIL_BUCKET: { - a8::Vec2 drop_pos = GetPos(); - room->DropItem(drop_pos, equip_meta->i->id(), GetInventory(slot), 1); - DecInventory(slot, GetInventory(slot)); + if (drop_num > 0) { + a8::Vec2 drop_pos = GetPos(); + if (IsPlayer()) { + room->DropItem(drop_pos, equip_meta->i->id(), GetInventory(slot), 1); + } else { + room->DropItem(drop_pos, equip_meta->i->id(), drop_num, 1); + } + DecInventory(slot, GetInventory(slot)); + } } break; default: + { + if (drop_num > 0) { + a8::Vec2 drop_pos = GetPos(); + if (IsPlayer()) { + room->DropItem(drop_pos, equip_meta->i->id(), GetInventory(slot), 1); + } else { + room->DropItem(drop_pos, equip_meta->i->id(), drop_num, 1); + } + DecInventory(slot, GetInventory(slot)); + } + } break; } } else { + #if 0 a8::Vec2 drop_pos = GetPos(); room->DropItem(drop_pos, equip_meta->i->id(), GetInventory(slot), 1); + #endif } } }