public override void Use(Unit caster, Doodad owner, uint skillId) { _log.Debug("DoodadFuncTimer : NextPhase {0}, SkillId {1}", NextPhase, skillId); //This is a temporary fix. We need to find how to properly call the next function. // var nextFunc = DoodadManager.Instance.GetFunc(owner.FuncGroupId, skillId); // if (nextFunc != null) nextFunc.Use(caster, owner, skillId); if (Delay > 0) { owner.GrowthTime = DateTime.Now.AddMilliseconds(Delay); // TODO ... need here? owner.BroadcastPacket(new SCDoodadPhaseChangedPacket(owner), false); // TODO door, windows with delay of this timer... owner.FuncTask = new DoodadFuncTimerTask(caster, owner, skillId, NextPhase); TaskManager.Instance.Schedule(owner.FuncTask, TimeSpan.FromMilliseconds(Delay)); } }
public override async void Use(Unit caster, Doodad owner, uint skillId) { _log.Debug("DoodadFuncClimateReact"); if (owner.FuncTask != null) { await owner.FuncTask.Cancel(); owner.FuncTask = null; } owner.FuncGroupId = NextPhase; var funcs = DoodadManager.Instance.GetPhaseFunc(owner.FuncGroupId); foreach (var func in funcs) { func.Use(caster, owner, skillId); } owner.BroadcastPacket(new SCDoodadPhaseChangedPacket(owner), true); }