diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 7af1e8a2..9024c821 100644 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -467,7 +467,8 @@ A8_DECLARE_ENUM(TimerUserEvent_e, kCheckShotHoldStateTimerEvent = 100, kShenBaoAddTimeTimerEvent, kActiveDjsSkillTimerEvent, - kDeactiveDjsSkillTimerEvent + kDeactiveDjsSkillTimerEvent, + kRemoveNatureRecoverTimerEvent, ); A8_DECLARE_CLASS_ENUM(GraspBuffTrigger_e, int, diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index a6652313..6407405d 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1111,6 +1111,28 @@ void Creature::Initialize() for (auto& node : cond_buffs_) { INIT_LIST_HEAD(&node); } + if (IsHuman()) { + a8::XTimerWp nature_recover_hp_timer; + 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 + { + if (a8::TIMER_EXEC_EVENT == event) { + if (nature_recover_hp_timer.expired()) { + + } else { + + } + } else if (kRemoveNatureRecoverTimerEvent == event) { + room->xtimer.ModifyTime + (nature_recover_hp_idle_timer, + SERVER_FRAME_RATE * mt::Param::s().nature_recover_hp_idletime); + room->xtimer.Delete(nature_recover_hp_timer); + } + }, + &xtimer_attacher); + } } void Creature::SetMoveDir(const glm::vec3& move_dir) diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index bb48c469..0053e9f4 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -127,6 +127,7 @@ class Creature : public MoveableEntity bool shot_hold = false; a8::XTimerWp craze_mode_timer; + a8::XTimerWp nature_recover_hp_idle_timer; Creature(); virtual ~Creature() override;