diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 04a8b28..037395e 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -127,6 +127,10 @@ void Buff::InternalTimerAddBuff() Creature* receiver = (Creature*)param.sender.GetUserData(); SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData(); if (caster_state->caster.Get()) { + std::shared_ptr old_context_ability = receiver->context_ability; + a8::Vec2 old_context_pos = receiver->context_pos; + receiver->context_pos = receiver->GetPos(); + int buff_id = param.param2; MetaData::Skill* skill = (MetaData::Skill*)param.param3.GetUserData(); MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff(buff_id); @@ -137,6 +141,9 @@ void Buff::InternalTimerAddBuff() receiver->AddBuff(caster_state->caster.Get(), buff_meta, 1, skill); caster_state->caster.Get()->RecoverSkillCasterState(&old_caster_state); } + + receiver->context_pos = old_context_pos; + receiver->context_ability = old_context_ability; } }; auto timer_after_func = diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index a321d2e..80fb5b3 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3190,7 +3190,7 @@ void Human::OnBuffRemove(Buff& buff) --camouflage_move_addition_; } if (buff.meta->int_param3 != 0) { - -camouflage_aiming_addition_; + --camouflage_aiming_addition_; } camouflage_move_addition_ = std::max(camouflage_move_addition_, 0); camouflage_aiming_addition_ = std::max(camouflage_aiming_addition_, 0);