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);
        }