void UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING)) return; if (_banished) { // If all three shades are dead, OR it has taken too long, end the current event and get Taerar back into business if (_banishedTimer <= diff || !_shades) { _banished = false; me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE); me->RemoveAurasDueToSpell(SPELL_SHADE); me->SetReactState(REACT_AGGRESSIVE); } // _banishtimer has not expired, and we still have active shades: else _banishedTimer -= diff; return; } while (uint32 eventId = events.ExecuteEvent()) ExecuteEvent(eventId); DoMeleeAttackIfReady(); }
void ExclusivePoolMgr::CheckEvents() { for (std::pair<const uint32, ExclusivePool>& poolPair : m_pools) { ExclusivePool& pool = poolPair.second; if (pool.currentRespawnTime <= time(nullptr)) ExecuteEvent(pool); } }
void WorldBossAI::UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) ExecuteEvent(eventId); }
void BossAI::UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) ExecuteEvent(eventId); DoMeleeAttackIfReady(); }
void UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) ExecuteEvent(eventId); if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, -50.0f, true)) DoCast(target, SPELL_SUMMON_PLAYER); DoMeleeAttackIfReady(); }
void UpdateAI(auint32 diff) // (uint32 diff) { if(!UbdateVictim()) // !UpdateVictim return; event.Update(diff); //events.Update(diff) while(uint32 eventID = events* ExecuteEvent()) // events.ExecuteEvent() { switch(eventID) { case DRAIN_ESENCE; // case EVENT_DRAIN_ESENCE: if (!me->isInCombat()) if(Unit* target = me->FindNearestCreature(npcID, distance)) // a jeje... distance v yardech for example 100.0f DoCast (target, SPELL_DRAIN_ESENCE); return false; // wtf? break; case EVENT_DARK_COMMAND; if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { if(!Heroic()) //If(!IsHeroic()) DoCast(target, SPELL_DARK_COMMAND); else DoCast(target, DARK_COMMAND_H); } events.RescheduleEvent(EVENT_DARK_COMMAND, 20000); break; case EVENT_AURA_OF_ACCELERATION; DoCast(SPELL_AURA_OF_ACCELERATION) break; } } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim() && !events.IsInPhase(PHASE_EVENT)) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) { ExecuteEvent(eventId); if (me->HasUnitState(UNIT_STATE_CASTING)) return; } DoMeleeAttackIfReady(); }
void UpdateAI(uint32 diff) override { if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) { ExecuteEvent(eventId); if (me->HasUnitState(UNIT_STATE_CASTING)) return; } DoSpellAttackIfReady(SPELL_EMPOWERED_SMITE); }
void UpdateAI(uint32 const diff) { if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STAT_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) ExecuteEvent(eventId); std::list<HostileReference*> threats = me->getThreatManager().getThreatList(); if (Unit* target = threats.front()->getTarget()) if ((target->GetTypeId() == TYPEID_PLAYER) && (me->GetDistance(target) > 20.0f)) DoCast(target, SPELL_SUMMON_PLAYER); DoMeleeAttackIfReady(); }
void UpdateAdventure(void) { if(!adventureWindowVisible) return; if(IsBattleForced()) { INFO_LOG("Triggering forced battle."); ShowBattleWindow(); return; } #if EVENT_CHANCE_SCALING ++ticksSinceLastEvent; #endif if(updateDelay > 0 && !GetFastMode()) { --updateDelay; return; } ExecuteEvent(ComputeRandomEvent_inline(baseChanceOfEvent, ticksSinceLastEvent, chances, sizeof(chances), GetFastMode())); LoadRandomDungeonImage(); }
bool NFActorModule::Execute() { ExecuteEvent(); return true; }
void IICHANEventAllocator::Process() { if(current_time - _tick >= 1000) { _time++; _tick = current_time; } int i = 0; while(i < _count) { if(events[i]->solved) { delete events[i]; events.erase(events.begin() + i); _count--; continue; } else { EVENT* e = events[i]; if(e) { if(e->condition == EVENT_CONDITION_TIME_ELAPSED) { if(e->condition_param == _time) { ExecuteEvent(e); e->solved = true; } } else if(e->condition == EVENT_CONDITION_HERO_X_GR) { if(GetItemAllocator()) { if(GetItemAllocator()->GetFirstPlayer()) { if(GetItemAllocator()->GetFirstPlayer()->GetSprite()) { if(GetItemAllocator()->GetFirstPlayer()-> GetSprite()->GetX() > e->condition_param) { ExecuteEvent(e); e->solved = true; } } else WriteToLog("Event error: Player sprite does not exist"); } else WriteToLog("Event error: Player does not exist"); } else WriteToLog("Event error: Item Allocator does not exist"); } else if(e->condition == EVENT_CONDITION_ID_X_GR) { if(GetItemAllocator()) { int id = e->action_param_int; CHARACTER* enemy = (CHARACTER*)GetItemAllocator()->GetItem(id); if(enemy) { ANIMATEDSPRITE* sprite = enemy->GetSprite(); if(sprite) if(sprite->GetX() > e->condition_param) { ExecuteEvent(e); e->solved = true; } } else WriteToLog("Event error: Character sprite does not exist"); } else WriteToLog("Event error: Item Allocator does not exist"); } else if(e->condition == EVENT_CONDITION_ID_X_EQ) { if(GetItemAllocator()) { int id = e->action_param_int; CHARACTER* enemy = (CHARACTER*)GetItemAllocator()->GetItem(id); if(enemy) { ANIMATEDSPRITE* sprite = enemy->GetSprite(); if(sprite) if(sprite->GetX() == e->condition_param) { ExecuteEvent(e); e->solved = true; } } else WriteToLog("Event error: Character sprite does not exist"); } else WriteToLog("Event error: Item Allocator does not exist"); } } i++; } } }
void ForceEvent(void) { PopMenu(); ExecuteEvent(ComputeRandomEvent_inline(baseChanceOfEvent, ticksSinceLastEvent, chances, sizeof(chances), true)); }