This commit is contained in:
aozhiwei 2021-07-01 03:51:17 +00:00
parent ed676e4678
commit 211ab7a7e1
2 changed files with 52 additions and 23 deletions

View File

@ -1737,6 +1737,9 @@ void Creature::SetCurrWeapon(Weapon* weapon)
abort(); abort();
} }
#endif #endif
if (curr_weapon_ != weapon) {
GetTrigger()->TakeonWeapon(curr_weapon_, weapon);
}
curr_weapon_ = weapon; curr_weapon_ = weapon;
} }

View File

@ -19,31 +19,57 @@ void Trigger::UnInit()
void Trigger::TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon) void Trigger::TakeonWeapon(Weapon* old_weapon, Weapon* new_weapon)
{ {
MetaData::Equip* new_weapon_meta = new_weapon->meta; {
for (int cond = kCondBuffUpdateWeaponId; cond <= kCondBuffUpdateWeaponType; cond++) { MetaData::Equip* weapon_meta = new_weapon->meta;
TraverseCondBuffs for (int cond = kCondBuffUpdateWeaponId; cond <= kCondBuffUpdateWeaponType; cond++) {
(cond, TraverseCondBuffs
[this, cond, new_weapon_meta] (Buff* buff, bool& stop) (cond,
{ [this, cond, weapon_meta] (Buff* buff, bool& stop)
if (new_weapon_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) { {
switch (buff->meta->int_param3) { if (weapon_meta->Match((CondAddBuff_e)cond, buff->meta->int_param2)) {
case kWeaponOptTakeon: switch (buff->meta->int_param3) {
{ case kWeaponOptTakeoff:
AddBuffs(buff->meta->int_param1, buff->meta->param4_int_list); 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;
}
}
});
}
} }
} }