From c77bf62645f1faba4eba4246fb73e7939bc110df Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 25 Feb 2023 09:33:14 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 18 ++++++++++++++++++ server/gameserver/creature.h | 1 + 2 files changed, 19 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index af045f72..37040391 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2743,6 +2743,24 @@ std::weak_ptr Creature::AddEffect(int effect_id) return effect; } +std::weak_ptr Creature::AddEffectAndSetTime(int effect_id, int time) +{ + auto p = AddEffect(effect_id); + room->xtimer.SetTimeoutEx + ( + time / FRAME_RATE_MS, + [this, p] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + if (!p.expired()) { + p.lock()->RemoveFromOwner(); + } + } + }, + &xtimer_attacher); + return p; +} + void Creature::RemoveEffect(int effect_uniid) { effect_hash_.erase(effect_uniid); diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 7c72785e..b012b7bb 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -182,6 +182,7 @@ class Creature : public MoveableEntity Team* GetTeam() { return team_; } void SetTeam(Team* team) { team_ = team; } std::weak_ptr AddEffect(int effect_id); + std::weak_ptr AddEffectAndSetTime(int effect_id, int time); void RemoveEffect(std::weak_ptr effect); void RemoveEffect(int effect_uniid); void RemoveEffects(std::vector effect_uniids);