From 211ab7a7e15c1b30cd928c4c9e845ec1e4f7e113 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 1 Jul 2021 03:51:17 +0000 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 3 ++ server/gameserver/trigger.cc | 72 ++++++++++++++++++++++++----------- 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 03d6ceb..0db23d0 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1737,6 +1737,9 @@ void Creature::SetCurrWeapon(Weapon* weapon) abort(); } #endif + if (curr_weapon_ != weapon) { + GetTrigger()->TakeonWeapon(curr_weapon_, weapon); + } curr_weapon_ = weapon; } diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index 59b8ca1..6b04c17 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -19,31 +19,57 @@ void Trigger::UnInit() void Trigger::TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon) { - MetaData::Equip* new_weapon_meta = new_weapon->meta; - for (int cond = kCondBuffUpdateWeaponId; cond <= kCondBuffUpdateWeaponType; cond++) { - TraverseCondBuffs - (cond, - [this, cond, new_weapon_meta] (Buff* buff, bool& stop) - { - if (new_weapon_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) { - switch (buff->meta->int_param3) { - case kWeaponOptTakeon: - { - AddBuffs(buff->meta->int_param1, buff->meta->param4_int_list); + { + MetaData::Equip* weapon_meta = new_weapon->meta; + for (int cond = kCondBuffUpdateWeaponId; cond <= kCondBuffUpdateWeaponType; cond++) { + TraverseCondBuffs + (cond, + [this, cond, weapon_meta] (Buff* buff, bool& stop) + { + if (weapon_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) { + switch (buff->meta->int_param3) { + case kWeaponOptTakeoff: + case kWeaponOptKeep: + { + RemoveBuffs(buff->meta->int_param1, buff->meta->param4_int_list); + } + break; + default: + { + } + break; } - break; - case kWeaponOptKeep: - { - TryAddBuffs(buff->meta->int_param1, buff->meta->param4_int_list); - } - break; - default: - { - } - break; } - } - }); + }); + } + } + { + MetaData::Equip* weapon_meta = new_weapon->meta; + for (int cond = kCondBuffUpdateWeaponId; cond <= kCondBuffUpdateWeaponType; cond++) { + TraverseCondBuffs + (cond, + [this, cond, weapon_meta] (Buff* buff, bool& stop) + { + if (weapon_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) { + switch (buff->meta->int_param3) { + case kWeaponOptTakeon: + { + AddBuffs(buff->meta->int_param1, buff->meta->param4_int_list); + } + break; + case kWeaponOptKeep: + { + TryAddBuffs(buff->meta->int_param1, buff->meta->param4_int_list); + } + break; + default: + { + } + break; + } + } + }); + } } }