From 0cf71b1d2543a8561189388bcecf928eee6f3def Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 19 May 2023 11:17:31 +0800 Subject: [PATCH] 1 --- server/gameserver/compose.h | 3 ++- server/gameserver/creature.h | 1 + server/gameserver/human.cc | 23 +++++++++++++++++++++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/server/gameserver/compose.h b/server/gameserver/compose.h index 4f5003de..ea0f423d 100644 --- a/server/gameserver/compose.h +++ b/server/gameserver/compose.h @@ -11,12 +11,13 @@ class Compose ~Compose(); void Init(); + void IncNum(); + int GetNum() { return num_; } private: void Clear(); void TakeOnWeapon(Weapon* weapon); - void IncNum(); private: Creature* owner_ = nullptr; diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 86aa63e7..8817fc9b 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -353,6 +353,7 @@ class Creature : public MoveableEntity bool CanShot(bool try_reload); void AdjustPos(); void OnLand(); + std::shared_ptr GetCompose() { return compose_; } protected: virtual void OnBuffRemove(Buff& buff); diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 90455bb3..3eac896a 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -43,6 +43,7 @@ #include "stats.h" #include "hero.h" #include "guide.h" +#include "compose.h" #include "buff/sprint.h" @@ -2636,9 +2637,27 @@ void Human::ProcLootWeaponNew(AddItemDTO& dto) if (GetCurrWeapon()->weapon_idx == GUN_SLOT1 || GetCurrWeapon()->weapon_idx == GUN_SLOT2) { if (GetCurrWeapon()->weapon_id == dto.item_meta->id()) { - + if (GetCompose()->GetNum() >= 9) { + return; + } + GetCompose()->IncNum(); + MarkSyncActivePlayer(__FILE__, __LINE__, __func__); + SyncAroundPlayers(__FILE__, __LINE__, __func__); + dto.handled = true; } else { - + int old_weapon_idx = GetCurrWeapon()->weapon_idx; + DropWeapon(GetCurrWeapon()->weapon_idx, 1); + Weapon* weapon = &weapons[old_weapon_idx]; + weapon->weapon_id = dto.item_id; + weapon->meta = dto.item_meta; + weapon->ammo = 0; + weapon->Recalc(); + weapon->ammo = weapon->GetClipVolume(this); + AutoLoadingBullet(); + SetCurrWeapon(weapon); + MarkSyncActivePlayer(__FILE__, __LINE__, __func__); + SyncAroundPlayers(__FILE__, __LINE__, __func__); + dto.handled = true; } } }