/// <summary> /// /// </summary> /// <param name="timer"></param> public void RemoveTimer(UpdatableTimer timer) { AddMessage(() => { m_timerList.Remove(timer); }); }
/// <summary> /// /// </summary> /// <param name="delay"></param> /// <param name="callback"></param> public UpdatableTimer AddTimer(int delay, Action callback, bool oneshot = false) { var timer = new UpdatableTimer(delay, callback, oneshot); AddTimer(timer); return(timer); }
/// <summary> /// /// </summary> /// <param name="timer"></param> public void AddTimer(UpdatableTimer timer) { AddMessage(() => { timer.LastActivated = LastUpdate; m_timerList.Add(timer); }); }
/// <summary> /// /// </summary> /// <param name="timer"></param> public void AddTimer(UpdatableTimer timer) { AddMessage(() => { timer.LastActivated = UpdateTime; m_timerList.Add(timer); }); }
/// <summary> /// /// </summary> /// <param name="delay"></param> /// <param name="callback"></param> /// <param name="oneshot"></param> public UpdatableTimer AddTimer(int delay, Action callback, bool oneshot = false) { var timer = new UpdatableTimer(delay, callback, oneshot); AddTimer(timer); return timer; }
/// <summary> /// /// </summary> private void EndLoop(int reason) { Character.Dispatch(WorldMessage.CRAFT_LOOP_END(reason)); base.RemoveTimer(m_loopTimer); m_loopTimer = null; }
/// <summary> /// /// </summary> /// <param name="count"></param> public void Retry(int count) { if (m_loopTimer != null) return; m_loopCount = count; m_loopTimer = base.AddTimer(1100, Loop); }
/// <summary> /// /// </summary> /// <param name="id"></param> public MonsterGroupEntity(long id, int mapId, int cellId, IEnumerable<MonsterSpawnDAO> monsters, int maxSize = 6) : this(id, mapId, cellId) { var size = 1; if (monsters.All(monster => monster.Probability == 1)) { size = monsters.Count(); } else { var rand = Util.Next(0, 100); if (rand < 10) // 10% size = 1; else if (rand < 25) size = 2; else if (rand < 50) size = 3; else if (rand < 75) size = 4; else if (rand < 90) size = 5; else size = 6; } if (size > maxSize) size = maxSize; if (monsters.Count() > 0) { while (m_monsters.Count < size) { foreach(var spawn in monsters) { if (AlignmentId == -2 || spawn.Grade.Template.Alignment == AlignmentId) { var chance = Util.Next(0, 100); if (chance < spawn.Probability * 100) { m_monsters.Add(new MonsterEntity(m_nextMonsterId--, spawn.Grade)); if (AlignmentId == -2) AlignmentId = spawn.Grade.Template.Alignment; if (m_monsters.Count == size) break; } } } } AggressionRange = m_monsters.Max(monster => monster.Grade.Template.AggressionRange); } base.AddTimer(m_ageTimer = new UpdatableTimer(1000 * WorldConfig.PVM_STAR_BONUS_PERCENT_SECONDS, UpdateAge)); }
/// <summary> /// /// </summary> /// <param name="character"></param> /// <param name="skill"></param> private void Harvest(CharacterEntity character, SkillIdEnum skill) { if(!character.CanGameAction(GameActionTypeEnum.SKILL_HARVEST)) { character.Dispatch(WorldMessage.IM_ERROR_MESSAGE(InformationEnum.ERROR_YOU_ARE_AWAY)); return; } if (!IsActive) return; m_currentJob = character.CharacterJobs.GetJob(skill); if (m_currentJob == null) return; var duration = m_currentJob.HarvestDuration; m_quantityFarmed = Util.Next(m_currentJob.HarvestMinQuantity, m_currentJob.HarvestMaxQuantity); character.HarvestStart(this, duration); m_currentHarvester = character; Deactivate(); m_harvestTimer = base.AddTimer(duration, StopHarvest, true); }