diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 00375e5d..201cdafd 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1169,10 +1169,11 @@ void Creature::Initialize() } if (IsHuman()) { a8::XTimerWp nature_recover_hp_timer; + auto battling_state = std::make_shared(true); nature_recover_hp_idle_timer = room->xtimer.SetIntervalWpEx ( SERVER_FRAME_RATE * mt::Param::s().nature_recover_hp_idletime, - [this, nature_recover_hp_timer] (int event, const a8::Args* args) mutable + [this, nature_recover_hp_timer, battling_state] (int event, const a8::Args* args) mutable { if (a8::TIMER_EXEC_EVENT == event) { if (nature_recover_hp_timer.expired() && !HasBuffEffect(kBET_Dive)) { @@ -1193,7 +1194,10 @@ void Creature::Initialize() }, &xtimer_attacher); } - GetTrigger()->LeaveBattleMode(); + if (*battling_state) { + *battling_state = false; + GetTrigger()->LeaveBattleMode(); + } } else if (kRemoveNatureRecoverTimerEvent == event) { room->xtimer.ModifyTime (nature_recover_hp_idle_timer, @@ -1201,6 +1205,7 @@ void Creature::Initialize() if (!nature_recover_hp_timer.expired()) { room->xtimer.Delete(nature_recover_hp_timer); } + *battling_state = true; GetTrigger()->EnterBattleMode(); } },