From 5954ead5b5cdffa78d5adb253382c4dc4c9566a3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 29 Jun 2021 11:58:03 +0000 Subject: [PATCH] =?UTF-8?q?=E6=8A=95=E6=8E=B7=E7=89=A9=EF=BC=8C=E6=8C=81?= =?UTF-8?q?=E6=9C=89=E4=B8=8A=E9=99=90+1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/constant_export.h | 1 + server/gameserver/creature.cc | 7 +++++++ server/gameserver/creature.h | 1 + server/gameserver/human.cc | 11 +++++++++++ server/gameserver/roomobstacle.cc | 4 ++-- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/server/gameserver/constant_export.h b/server/gameserver/constant_export.h index e2ad39b..846a956 100644 --- a/server/gameserver/constant_export.h +++ b/server/gameserver/constant_export.h @@ -57,6 +57,7 @@ enum BuffEffectType_e kBET_ShotCharge = 39, //射击蓄力 kBET_SelectTargetWithSelfPos = 40, //已自己坐标为中心范围内选取目标,并且批量添加buff kBET_CondAddBuff = 41, //条件添加buff + kBET_AddInventory = 42, //扩充库存 kBET_FollowMaster = 49, //跟随主人 kBET_ThroughWall = 50, //穿墙 diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index d313e15..e0466cf 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -991,6 +991,13 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) list_add_tail(&buff->cond_entry, &cond_buffs_[buff->meta->int_param1]); } break; + case kBET_AddInventory: + { + if (IsValidSlotId(buff->meta->int_param1)) { + buff_inventory_[buff->meta->int_param1].num += buff->meta->int_param2; + } + } + break; default: { } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 2974a93..ad636e5 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -231,6 +231,7 @@ protected: long long cell_flags_ = 0; CircleCollider* self_collider_ = nullptr; Entity* last_collision_door_ = nullptr; + std::array buff_inventory_ = {}; private: CreatureWeakPtr weak_ptr_; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 101fc87..8f9eeb6 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3144,7 +3144,18 @@ void Human::OnBuffRemove(Buff& buff) buff.ProcRemovePassenger(); } break; + case kBET_AddInventory: + { + if (IsValidSlotId(buff.meta->int_param1)) { + buff_inventory_[buff.meta->int_param1].num -= buff.meta->int_param2; + buff_inventory_[buff.meta->int_param1].num = + std::max(0, buff_inventory_[buff.meta->int_param1].num); + } + } + break; default: + { + } break; } if (!buff.meta->i->only_server()) { diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 1c13d12..1cafa50 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -197,8 +197,8 @@ void RoomObstacle::SpecExplosion() } int total_explosion_times = meta->i->explosion_times(); if (context_ability && context_ability->GetAttrAbs(kHAT_WeaponExplosionTime) > 0.001f) { - total_explosion_times + = context_ability->GetAttrAbs(kHAT_WeaponExplosionTime) / - obstacle->meta->i->explosion_interval(); + total_explosion_times += context_ability->GetAttrAbs(kHAT_WeaponExplosionTime) / + meta->i->explosion_interval(); } if (explosion_times_ >= total_explosion_times) { room->xtimer.DeleteTimer(room->xtimer.GetRunningTimer());