void UpdateAI(uint32 diff) override { if (Repair_Timer <= diff) { if (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == IN_PROGRESS) { if (Creature* mekgineer = instance->GetCreature(DATA_MEKGINEER_STEAMRIGGER)) { if (me->IsWithinDistInMap(mekgineer, MAX_REPAIR_RANGE)) { //are we already channeling? Doesn't work very well, find better check? if (!me->GetUInt32Value(UNIT_CHANNEL_SPELL)) { //me->GetMotionMaster()->MovementExpired(); //me->GetMotionMaster()->MoveIdle(); DoCast(me, SPELL_REPAIR, true); } Repair_Timer = 5000; } else { //me->GetMotionMaster()->MovementExpired(); //me->GetMotionMaster()->MoveFollow(pMekgineer, 0, 0); } } } else Repair_Timer = 5000; } else Repair_Timer -= diff; if (!UpdateVictim()) return; DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (pInstance->GetBossState(DATA_BETHTILAC) != IN_PROGRESS) me->DespawnOrUnsummon(); if (!UpdateVictim()) return; events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_BURNING_ACID: DoCastAOE(SPELL_BURNING_ACID); events.ScheduleEvent(EVENT_BURNING_ACID, urand(7000, 15000)); break; case EVENT_FIERY_WEB_SPIN: if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, PositionSelector(true, SPELL_FIERY_WEB_SPIN))) DoCast(pTarget, SPELL_FIERY_WEB_SPIN); events.ScheduleEvent(EVENT_FIERY_WEB_SPIN, urand(25000, 30000)); break; } } DoMeleeAttackIfReady(); }
bool GossipHello_keeper_norgannon(Player* pPlayer, Creature* pCreature) { InstanceScript *pInstance = pCreature->GetInstanceScript(); if (pInstance && pPlayer) if (pInstance->GetBossState(BOSS_LEVIATHAN) != DONE) if (pInstance->GetBossState(BOSS_LEVIATHAN) != SPECIAL) { pPlayer->PrepareQuestMenu(pCreature->GetGUID()); pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT,GOSSIP_ITEM_1,GOSSIP_SENDER_MAIN,GOSSIP_ACTION_INFO_DEF); pPlayer->SEND_GOSSIP_MENU(13910, pCreature->GetGUID()); } else pPlayer->SEND_GOSSIP_MENU(1, pCreature->GetGUID()); return true; }
void UpdateAI(const uint32 diff) { if (pInstance) if (pInstance->GetBossState(DATA_STONE_GUARD) != IN_PROGRESS) me->DespawnOrUnsummon(); if (preparationTimer) { if (preparationTimer <= diff) { isReady = true; preparationTimer = 0; } else preparationTimer -= diff; } if (isReady && !isExploded) if (me->SelectNearestPlayerNotGM(5.0f)) { me->CastSpell(me, SPELL_COBALT_MINE_EXPLOSION, false); me->DespawnOrUnsummon(700); isExploded = true; } }
bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) { InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) return true; player->TeleportTo(631, 4126.35f, 2769.23f, 350.963f, 0.0f); if (instance->GetData(DATA_COLDFLAME_JETS) == NOT_STARTED) { // Process relocation now, to preload the grid and initialize traps player->GetMap()->PlayerRelocation(player, 4126.35f, 2769.23f, 350.963f, 0.0f); instance->SetData(DATA_COLDFLAME_JETS, IN_PROGRESS); std::list<Creature*> traps; GetCreatureListWithEntryInGrid(traps, player, NPC_FROST_FREEZE_TRAP, 120.0f); traps.sort(Voragine::ObjectDistanceOrderPred(player)); bool instant = false; for (std::list<Creature*>::iterator itr = traps.begin(); itr != traps.end(); ++itr) { (*itr)->AI()->DoAction(instant ? 1000 : 11000); instant = !instant; } } return true; }
void AttackStart(Unit* who) override { if (instance->GetBossState(DATA_MOGRAINE_AND_WHITE_EVENT) == NOT_STARTED) return; ScriptedAI::AttackStart(who); }
void AttackStart(Unit* victim) override { if ((instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !victim) return; ScriptedAI::AttackStart(victim); }
void MoveInLineOfSight(Unit* who) override { if (!instance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER)) return; if (!bPreDone && who->GetTypeId() == TYPEID_PLAYER && me->GetDistance(who) < 100.0f) { Talk(TEXT_PREACHING); bPreDone = true; } if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS || !bOnGround) return; if (!me->GetVictim() && me->CanCreatureAttack(who)) { float attackRadius = me->GetAttackDistance(who); if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who)) { if (!me->GetVictim()) { who->RemoveAurasByType(SPELL_AURA_MOD_STEALTH); AttackStart(who); } else { who->SetInCombatWith(me); me->AddThreat(who, 0.0f); } } } }
bool OnGossipHello(Player *player, Creature *npc) { InstanceScript* instance = npc->GetInstanceScript(); if (player->IsInCombat()) { player->CLOSE_GOSSIP_MENU(); npc->MonsterWhisper("You are in combat!", player, true); return true; } if (instance->GetBossState(DATA_LORD_MARROWGAR) == DONE) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Lord Marrowgar is dead.", GOSSIP_SENDER_MAIN, 6); player->SEND_GOSSIP_MENU(GOSSIP, npc->GetGUID()); return true; } if ((!player->GetGroup() || !player->GetGroup()->IsLeader(player->GetGUID())) && !player->IsGameMaster()) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I'm not the raid leader...", GOSSIP_SENDER_MAIN, 6); player->SEND_GOSSIP_MENU(GOSSIP, npc->GetGUID()); return true; } player->ADD_GOSSIP_ITEM(0, "Zrusit buff", GOSSIP_SENDER_MAIN, 1); player->ADD_GOSSIP_ITEM(0, "5% buff", GOSSIP_SENDER_MAIN, 2); player->ADD_GOSSIP_ITEM(0, "10% buff", GOSSIP_SENDER_MAIN, 3); player->ADD_GOSSIP_ITEM(0, "15% buff", GOSSIP_SENDER_MAIN, 4); player->ADD_GOSSIP_ITEM(0, "30% buff", GOSSIP_SENDER_MAIN, 5); player->ADD_GOSSIP_ITEM(0, "Close", GOSSIP_SENDER_MAIN, 6); player->SEND_GOSSIP_MENU(GOSSIP, npc->GetGUID()); return true; }
void DamageTaken(Unit* /*killer*/, uint32 &damage) override { if (damage < me->GetHealth()) return; //Prevent glitch if in fake death if (FakeDeath) { damage = 0; return; } //Don't really die in all phases of Kael'Thas if (instance->GetBossState(DATA_KAELTHAS) == 0) { //prevent death damage = 0; FakeDeath = true; me->InterruptNonMeleeSpells(false); me->SetHealth(0); me->StopMoving(); me->ClearComboPointHolders(); me->RemoveAllAurasOnDeath(); me->ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false); me->ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->ClearAllReactives(); me->SetTarget(ObjectGuid::Empty); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); me->SetStandState(UNIT_STAND_STATE_DEAD); } }
void UpdateAI(const uint32 diff) { if (pInstance && pInstance->GetBossState(DATA_SILVERLAINE) != IN_PROGRESS) me->DespawnOrUnsummon(); DoMeleeAttackIfReady(); }
void UpdateAI(const uint32 diff) { if (pInstance->GetBossState(DATA_GARAJAL) != DONE) return; events.Update(diff); while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_GROWTH: if (me->GetFloatValue(OBJECT_FIELD_SCALE_X) < ghostScale) { me->SetObjectScale(me->GetFloatValue(OBJECT_FIELD_SCALE_X) + (ghostScale / 10.0f)); events.ScheduleEvent(EVENT_GROWTH, 200); } break; case EVENT_TALK_DEATH: Talk(TALK_DEATH); break; case EVENT_SUMMON_PORTAL: me->CastSpell(me, SPELL_SPIRITUAL_PORTAL, true); break; case EVENT_DISAPPEAR: if (Creature* spiritualPortal = me->FindNearestCreature(NPC_SPIRITUAL_PORTAL, 50.0f)) spiritualPortal->DespawnOrUnsummon(5000); me->DespawnOrUnsummon(500); break; default: break; } } }
void Reset() { _Reset(); if (pInstance->GetBossState(DATA_GARAJAL) != DONE) pInstance->SetBossState(DATA_GARAJAL, NOT_STARTED); pInstance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_VOODOO_DOLL_VISUAL); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_VOODOO_DOLL_SHARE); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_CLONE_VISUAL); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_CROSSED_OVER); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_LIFE_FRAGILE_THREAD); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SOUL_CUT_DAMAGE); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_SOUL_CUT_SUICIDE); pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BANISHMENT); events.ScheduleEvent(EVENT_SECONDARY_ATTACK, urand(5000, 10000)); events.ScheduleEvent(EVENT_SUMMON_TOTEM, urand(27500, 32500)); events.ScheduleEvent(EVENT_SUMMON_SHADOWY_MINION, urand(10000, 15000)); events.ScheduleEvent(EVENT_BANISHMENT, 90000); events.ScheduleEvent(EVENT_VOODOO_DOLL, 2500); events.ScheduleEvent(EVENT_FINAL_DESTINATION, 361000); // 6 min & 10s me->AddAura(SPELL_STRONG_MOJO, me); me->CastSpell(me, SPELL_TAP_THE_SPIRIT_WORLD, true); }
void UpdateAI(uint32 uiDiff) override { // Despawn if the encounter is not running if (instance->GetBossState(DATA_IONAR) != IN_PROGRESS) { me->DespawnOrUnsummon(); return; } // Prevent them to follow players through the whole instance if (uiCheckTimer <= uiDiff) { Creature* ionar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_IONAR)); if (ionar && ionar->IsAlive()) { if (me->GetDistance(ionar) > DATA_MAX_SPARK_DISTANCE) { Position pos = ionar->GetPosition(); me->SetSpeed(MOVE_RUN, 2.0f); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MovePoint(DATA_POINT_CALLBACK, pos); } } else me->DespawnOrUnsummon(); uiCheckTimer = 2*IN_MILLISECONDS; } else uiCheckTimer -= uiDiff; // No melee attack at all! }
void MoveDown() { bOpFerokFail = false; instance->SetData(DATA_JEDOGA_TRIGGER_SWITCH, 0); me->GetMotionMaster()->MovePoint(1, JedogaPosition[1]); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL); bOnGround = true; if (UpdateVictim()) { AttackStart(me->GetVictim()); me->GetMotionMaster()->MoveChase(me->GetVictim()); } else { if (Unit* target = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_PL_JEDOGA_TARGET))) { AttackStart(target); instance->SetData(DATA_JEDOGA_RESET_INITIANDS, 0); if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) != IN_PROGRESS) EnterCombat(target); } else if (!me->IsInCombat()) EnterEvadeMode(); } }
void MoveInLineOfSight(Unit* who) override { if ((instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS) || !who) return; ScriptedAI::MoveInLineOfSight(who); }
bool OnGossipHello(Player* /*player*/, GameObject* go) override { InstanceScript* instance = go->GetInstanceScript(); if (!instance) return false; if (go->GetEntry() == GO_ACCESS_PANEL_HYDRO && (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE || instance->GetBossState(DATA_HYDROMANCER_THESPIA) == SPECIAL)) instance->SetBossState(DATA_HYDROMANCER_THESPIA, SPECIAL); if (go->GetEntry() == GO_ACCESS_PANEL_MEK && (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE || instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL)) instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, SPECIAL); go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_ACTIVE); return true; }
void Reset() { bPhase = false; events.Reset(); summons.DespawnAll(); if (pInstance) if (pInstance->GetBossState(DATA_MINDBENDER_GHURSHA) == DONE || bPhase) me->setFaction(35); }
bool OnTrigger(Player* player, const AreaTriggerEntry* /*at*/) { if (player->isGameMaster()) return false; InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->IsEncounterInProgress() || instance->GetBossState(BOSS_KELTHUZAD) == DONE) return false; Creature* pKelthuzad = Unit::GetCreature(*player, instance->GetData64(DATA_KELTHUZAD)); if (!pKelthuzad) return false; boss_kelthuzad::boss_kelthuzadAI* pKelthuzadAI = CAST_AI(boss_kelthuzad::boss_kelthuzadAI, pKelthuzad->AI()); if (!pKelthuzadAI) return false; pKelthuzadAI->AttackStart(player); if (GameObject* trigger = instance->instance->GetGameObject(instance->GetData64(DATA_KELTHUZAD_TRIGGER))) { if (trigger->getLootState() == GO_READY) trigger->UseDoorOrButton(); // Note: summon must be done by trigger and not by KT. // Otherwise, they attack immediately as KT is in combat. for (uint8 i = 0; i < MAX_ABOMINATIONS; ++i) { if (Creature* sum = trigger->SummonCreature(NPC_ABOMINATION, PosAbominations[i])) { pKelthuzadAI->spawns.Summon(sum); sum->GetMotionMaster()->MoveRandom(9.0f); sum->SetReactState(REACT_DEFENSIVE); } } for (uint8 i = 0; i < MAX_WASTES; ++i) { if (Creature* sum = trigger->SummonCreature(NPC_WASTE, PosWastes[i])) { pKelthuzadAI->spawns.Summon(sum); sum->GetMotionMaster()->MoveRandom(5.0f); sum->SetReactState(REACT_DEFENSIVE); } } for (uint8 i = 0; i < MAX_WEAVERS; ++i) { if (Creature* sum = trigger->SummonCreature(NPC_WEAVER, PosWeavers[i])) { pKelthuzadAI->spawns.Summon(sum); sum->GetMotionMaster()->MoveRandom(9.0f); sum->SetReactState(REACT_DEFENSIVE); } } } return true; }
void Reset() override { Initialize(); if (instance->GetData(DATA_WARDEN_2) == DONE) Init = true; if (instance->GetBossState(DATA_HARBINGER_SKYRISS) == DONE) Talk(SAY_COMPLETE); }
bool CanProgress() { if (Phase == 7 && instance->GetData(DATA_WARDEN_4) == DONE) return true; if (Phase == 6 && instance->GetData(DATA_WARDEN_3) == DONE) return true; if (Phase == 5 && instance->GetData(DATA_WARDEN_2) == DONE) return true; if (Phase == 4) return true; if (Phase == 3 && instance->GetData(DATA_WARDEN_1) == DONE) return true; if (Phase == 2 && instance->GetBossState(DATA_HARBINGER_SKYRISS) == IN_PROGRESS) return true; if (Phase == 1 && instance->GetBossState(DATA_HARBINGER_SKYRISS) == IN_PROGRESS) return true; return false; }
bool OnGossipHello(Player* player, Creature* creature) override { InstanceScript* instance = creature->GetInstanceScript(); if (!instance) return true; // What gossip menu shall we send? uint32 gossipMenuId = GOSSIP_MENU_NO_TIME_TO_WASTE; if (instance->GetBossState(DATA_VAULT_OF_LIGHTS) == NOT_STARTED) // gossipMenuId already set, only add gossip option AddGossipItemFor(player, gossipMenuId, GOSSIP_OPTION_WE_ARE_READY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); else if (instance->GetBossState(DATA_VAULT_OF_LIGHTS) != DONE) gossipMenuId = GOSSIP_MENU_DESTROY_ELEMENTAL; else // To-do: There might be another gossip text before and while fighting Anraphet. Check retail. gossipMenuId = GOSSIP_MENU_OCH_ITS_NOT_EASY; SendGossipMenuFor(player, player->GetGossipTextId(gossipMenuId, creature), creature->GetGUID()); return true; }
bool MuradinBronzebeard::OnGossipHello(Player* player, Creature* creature) { InstanceScript* instance = creature->GetInstanceScript(); if (instance && instance->GetBossState(DATA_DEATHBRINGER_SAURFANG) != DONE) { player->ADD_GOSSIP_ITEM(0, "Lasst es beginnen...", 631, -ACTION_START_EVENT + 1); player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); } return true; }
bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->GetBossState(BOSS_ANUBREKHAN) != NOT_STARTED) return true; if (Creature* anub = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_ANUBREKHAN))) anub->AI()->Talk(SAY_GREET); return true; }
bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { InstanceScript* instance = player->GetInstanceScript(); if (!instance || instance->GetData(DATA_HAD_FAERLINA_GREET) || instance->GetBossState(BOSS_FAERLINA) != NOT_STARTED) return true; if (Creature* faerlina = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_FAERLINA))) faerlina->AI()->Talk(SAY_GREET); instance->SetData(DATA_HAD_FAERLINA_GREET, 1u); return true; }
bool OnGossipHello(Player *pPlayer, GameObject *pGO) { InstanceScript* pInstance = pGO->GetInstanceScript(); if (!pInstance) return false; pPlayer->ADD_GOSSIP_ITEM(0, "Expedition Base Camp", GOSSIP_SENDER_MAIN, BASE_CAMP); //pPlayer->ADD_GOSSIP_ITEM(0, "Formation Grounds", GOSSIP_SENDER_MAIN, GROUNDS); //if (pInstance->GetBossState(BOSS_LEVIATHAN) == DONE || pPlayer->isGameMaster()) { pPlayer->ADD_GOSSIP_ITEM(0, "Colossal Forge", GOSSIP_SENDER_MAIN, FORGE); if (pInstance->GetBossState(BOSS_XT002) == DONE || pPlayer->isGameMaster()) { pPlayer->ADD_GOSSIP_ITEM(0, "Scrapyard", GOSSIP_SENDER_MAIN, SCRAPYARD); pPlayer->ADD_GOSSIP_ITEM(0, "Antechamber of Ulduar", GOSSIP_SENDER_MAIN, ANTECHAMBER); if (pInstance->GetBossState(BOSS_KOLOGARN) == DONE || pPlayer->isGameMaster()) { pPlayer->ADD_GOSSIP_ITEM(0, "Shattered Walkway", GOSSIP_SENDER_MAIN, WALKWAY); if (pInstance->GetBossState(BOSS_AURIAYA) == DONE || pPlayer->isGameMaster()) { pPlayer->ADD_GOSSIP_ITEM(0, "Conservatory of Life", GOSSIP_SENDER_MAIN, CONSERVATORY); if (pInstance->GetBossState(BOSS_MIMIRON) == FAIL || pInstance->GetBossState(BOSS_MIMIRON) == DONE || pPlayer->isGameMaster()) { pPlayer->ADD_GOSSIP_ITEM(0, "Spark of Imagination", GOSSIP_SENDER_MAIN, SPARK_IMAGINATION); if (pInstance->GetBossState(BOSS_VEZAX) == DONE || pPlayer->isGameMaster()) pPlayer->ADD_GOSSIP_ITEM(0, "Descent into Madness", GOSSIP_SENDER_MAIN, DESCENT_MADNESS); } } } } } pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pGO->GetGUID()); return true; }
bool OnGossipHello(Player* player, GameObject* /*go*/) { InstanceScript* Instance = player->GetInstanceScript(); if (!Instance) return false; Creature* Ossirian = player->FindNearestCreature(NPC_OSSIRIAN, 30.0f); if (!Ossirian || Instance->GetBossState(DATA_OSSIRIAN) != IN_PROGRESS) return false; Ossirian->AI()->DoAction(ACTION_TRIGGER_WEAKNESS); return true; }
bool OnGossipHello(Player* pPlayer, Creature* pCreature) { InstanceScript* pInstance = pCreature->GetInstanceScript(); if (pInstance && pInstance->GetBossState(TYPE_RAZORSCALE) == NOT_STARTED && pPlayer) { pPlayer->PrepareGossipMenu(pCreature); pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); pPlayer->SEND_GOSSIP_MENU(13853, pCreature->GetGUID()); } else pPlayer->SEND_GOSSIP_MENU(13910, pCreature->GetGUID()); return true; }
void Reset() override { Initialize(); me->GetMotionMaster()->MoveTargetedHome(); if (instance->GetBossState(DATA_GORTOK_PALEHOOF) == IN_PROGRESS) { Creature* palehoof = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_GORTOK_PALEHOOF)); if (palehoof && palehoof->IsAlive()) palehoof->AI()->Reset(); } }
void Reset() { if (instance->GetBossState(DATA_SHADE_OF_AKAMA) == DONE) { me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); return; } me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->CastSpell(me, SPELL_STEALTH, true); events.Reset(); events2.Reset(); }