Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*######
- ## npc_anchorite_barada
- ######*/
- enum
- {
- SAY_EXORCISM_1 = 0,
- SAY_EXORCISM_2 = 1,
- SAY_EXORCISM_3 = 2,
- SAY_EXORCISM_4 = 3,
- SAY_EXORCISM_5 = 4,
- SAY_EXORCISM_6 = 5,
- ANCHORITE_TEXTS = 6,
- CONEL_TEXTS = 7,
- SPELL_BARADA_COMMANDS = 39277,
- SPELL_BARADA_FALTERS = 39278,
- SPELL_JULES_THREATENS = 39284,
- SPELL_JULES_GOES_UPRIGHT = 39294,
- SPELL_JULES_VOMITS = 39295,
- SPELL_JULES_RELEASE_DARKNESS = 39306, // periodic trigger missing spell 39305
- NPC_ANCHORITE_BARADA = 22431,
- NPC_COLONEL_JULES = 22432,
- NPC_DARKNESS_RELEASED = 22507, // summoned by missing spell 39305
- QUEST_ID_EXORCISM = 10935,
- TEXT_ID_CLEANSED = 10706,
- TEXT_ID_POSSESSED = 10707,
- TEXT_ID_ANCHORITE = 10683,
- EVENT_SAY_EXORCISM_1 = 1,
- EVENT_SAY_EXORCISM_2 = 2,
- EVENT_QUEST_ID_EXORCISM = 3,
- EVENT_KNEEL_DOWN = 5,
- EVENT_SAY_EXORCISM_3 = 6,
- EVENT_SPELL_BARADA_COMMANDS = 7,
- EVENT_SAY_EXORCISM_4 = 8,
- EVENT_SAY_EXORCISM_5 = 9,
- EVENT_SPELL_BARADA_FALTERS = 10,
- EVENT_SPELL_JULES_THREATENS = 11,
- EVENT_NPC_COLONEL_JULES1 = 12,
- EVENT_NPC_ANCHORITE_BARADA1 = 13,
- EVENT_NPC_COLONEL_JULES2 = 14,
- EVENT_NPC_ANCHORITE_BARADA2 = 15,
- EVENT_SPELL_JULES_GOES_UPRIGHT = 16,
- EVENT_SPELL_JULES_VOMITS = 17,
- EVENT_NPC_COLONEL_JULES3 = 18,
- EVENT_NPC_ANCHORITE_BARADA3 = 19,
- EVENT_NPC_COLONEL_JULES4 = 20,
- EVENT_NPC_ANCHORITE_BARADA4 = 21,
- EVENT_NPC_COLONEL_JULES5 = 22,
- EVENT_NPC_ANCHORITE_BARADA5 = 23,
- EVENT_NPC_COLONEL_JULES6 = 24,
- EVENT_NPC_ANCHORITE_BARADA6 = 25,
- EVENT_NPC_DARKNESS_RELEASED = 26,
- EVENT_SAY_EXORCISM_6 = 27,
- EVENT_TEXT_ID_CLEANSED = 28,
- ACTION_START_EVENT = 0
- };
- class npc_anchorite_barada : public CreatureScript
- {
- public:
- npc_anchorite_barada() : CreatureScript("npc_anchorite_barada") { }
- struct npc_anchorite_baradaAI : public ScriptedAI
- {
- npc_anchorite_baradaAI(Creature* creature) : ScriptedAI(creature)
- {
- Reset();
- }
- void Reset()
- {
- me->SetReactState(REACT_PASSIVE);
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
- events.Reset();
- }
- void sGossipSelect(Player* player, uint32 sender, uint32 action)
- {
- if (player->GetQuestStatus(QUEST_ID_EXORCISM) == QUEST_STATUS_INCOMPLETE)
- {
- if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
- {
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- me->SetStandState(UNIT_STAND_STATE_STAND);
- me->AI()->DoAction(ACTION_START_EVENT);
- me->setActive(true);
- }
- }
- }
- void DoAction(int32 action)
- {
- if (action == ACTION_START_EVENT)
- {
- events.ScheduleEvent(EVENT_SAY_EXORCISM_1, 2*IN_MILLISECONDS);
- }
- }
- void UpdateAI(uint32 diff)
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_SAY_EXORCISM_1:
- Talk(SAY_EXORCISM_1);
- events.ScheduleEvent(EVENT_SAY_EXORCISM_2, 3*IN_MILLISECONDS);
- events.CancelEvent(EVENT_SAY_EXORCISM_1);
- break;
- case EVENT_SAY_EXORCISM_2:
- Talk(SAY_EXORCISM_2);
- events.ScheduleEvent(EVENT_QUEST_ID_EXORCISM, 2*IN_MILLISECONDS);
- events.CancelEvent(EVENT_SAY_EXORCISM_2);
- break;
- case EVENT_QUEST_ID_EXORCISM:
- me->GetMotionMaster()->MovePath(NPC_ANCHORITE_BARADA * 10, false);
- events.ScheduleEvent(EVENT_KNEEL_DOWN, 5*IN_MILLISECONDS);
- events.CancelEvent(EVENT_QUEST_ID_EXORCISM);
- break;
- case EVENT_KNEEL_DOWN:
- me->SetStandState(UNIT_STAND_STATE_KNEEL);
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- me->SetFacingToObject(Colonel);
- }
- events.ScheduleEvent(EVENT_SAY_EXORCISM_3, 1*IN_MILLISECONDS);
- events.CancelEvent(EVENT_KNEEL_DOWN);
- break;
- case EVENT_SAY_EXORCISM_3:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(SAY_EXORCISM_3);
- }
- events.ScheduleEvent(EVENT_SPELL_BARADA_COMMANDS, 3*IN_MILLISECONDS);
- break;
- case EVENT_SPELL_BARADA_COMMANDS:
- DoCast(me, SPELL_BARADA_COMMANDS, true);
- events.ScheduleEvent(EVENT_SAY_EXORCISM_4, 10*IN_MILLISECONDS);
- break;
- case EVENT_SAY_EXORCISM_4:
- Talk(SAY_EXORCISM_4);
- events.ScheduleEvent(EVENT_SAY_EXORCISM_5, 10*IN_MILLISECONDS);
- break;
- case EVENT_SAY_EXORCISM_5:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(SAY_EXORCISM_5);
- }
- events.ScheduleEvent(EVENT_SPELL_BARADA_FALTERS, 10*IN_MILLISECONDS);
- break;
- case EVENT_SPELL_BARADA_FALTERS:
- DoCast(me, SPELL_BARADA_FALTERS, true);
- // start levitating
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->SetCanFly(true);
- Colonel->SetDisableGravity(true);
- Colonel->GetMotionMaster()->MovePoint(0, Colonel->GetPositionX(), Colonel->GetPositionY(), Colonel->GetPositionZ() + 2.0f);
- }
- events.ScheduleEvent(EVENT_SPELL_JULES_THREATENS, 2*IN_MILLISECONDS);
- break;
- case EVENT_SPELL_JULES_THREATENS:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->CastSpell(Colonel, SPELL_JULES_THREATENS, true);
- Colonel->CastSpell(Colonel, SPELL_JULES_RELEASE_DARKNESS, true);
- Colonel->SetFacingTo(0);
- }
- events.ScheduleEvent(EVENT_NPC_COLONEL_JULES1, 15*IN_MILLISECONDS);
- break;
- case EVENT_NPC_COLONEL_JULES1:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(CONEL_TEXTS);
- }
- events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA1, 15*IN_MILLISECONDS);
- break;
- case EVENT_NPC_ANCHORITE_BARADA1:
- Talk(ANCHORITE_TEXTS);
- events.ScheduleEvent(EVENT_NPC_COLONEL_JULES2, 15*IN_MILLISECONDS);
- break;
- case EVENT_NPC_COLONEL_JULES2:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(CONEL_TEXTS);
- }
- events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA2, 15*IN_MILLISECONDS);
- break;
- case EVENT_NPC_ANCHORITE_BARADA2:
- Talk(ANCHORITE_TEXTS);
- events.ScheduleEvent(EVENT_SPELL_JULES_GOES_UPRIGHT, 15*IN_MILLISECONDS);
- break;
- case EVENT_SPELL_JULES_GOES_UPRIGHT:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->InterruptNonMeleeSpells(false);
- Colonel->CastSpell(Colonel, SPELL_JULES_GOES_UPRIGHT, false);
- }
- events.ScheduleEvent(EVENT_SPELL_JULES_VOMITS, 3*IN_MILLISECONDS);
- break;
- case EVENT_SPELL_JULES_VOMITS:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->CastSpell(Colonel, SPELL_JULES_VOMITS, true);
- Colonel->GetMotionMaster()->MovePath(NPC_COLONEL_JULES * 10, true);
- }
- events.ScheduleEvent(EVENT_NPC_COLONEL_JULES3, 7*IN_MILLISECONDS);
- break;
- case EVENT_NPC_COLONEL_JULES3:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(CONEL_TEXTS);
- }
- events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA3, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_ANCHORITE_BARADA3:
- Talk(ANCHORITE_TEXTS);
- events.ScheduleEvent(EVENT_NPC_COLONEL_JULES4, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_COLONEL_JULES4:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(CONEL_TEXTS);
- }
- events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA4, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_ANCHORITE_BARADA4:
- Talk(ANCHORITE_TEXTS);
- events.ScheduleEvent(EVENT_NPC_COLONEL_JULES5, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_COLONEL_JULES5:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(CONEL_TEXTS);
- }
- events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA5, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_ANCHORITE_BARADA5:
- Talk(ANCHORITE_TEXTS);
- events.ScheduleEvent(EVENT_NPC_COLONEL_JULES6, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_COLONEL_JULES6:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->AI()->Talk(CONEL_TEXTS);
- }
- events.ScheduleEvent(EVENT_NPC_ANCHORITE_BARADA6, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_ANCHORITE_BARADA6:
- Talk(ANCHORITE_TEXTS);
- events.ScheduleEvent(EVENT_NPC_DARKNESS_RELEASED, 10*IN_MILLISECONDS);
- break;
- case EVENT_NPC_DARKNESS_RELEASED:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->RemoveAurasDueToSpell(SPELL_JULES_THREATENS);
- Colonel->RemoveAurasDueToSpell(SPELL_JULES_RELEASE_DARKNESS);
- Colonel->RemoveAurasDueToSpell(SPELL_JULES_VOMITS);
- Colonel->GetMotionMaster()->MoveTargetedHome();
- Colonel->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- }
- events.ScheduleEvent(EVENT_SAY_EXORCISM_6, 5*IN_MILLISECONDS);
- break;
- case EVENT_SAY_EXORCISM_6:
- Talk(SAY_EXORCISM_6);
- events.ScheduleEvent(EVENT_TEXT_ID_CLEANSED, 3*IN_MILLISECONDS);
- break;
- case EVENT_TEXT_ID_CLEANSED:
- if (Creature * Colonel = me->FindNearestCreature(NPC_COLONEL_JULES, 50.0f, true))
- {
- Colonel->RemoveAurasDueToSpell(SPELL_JULES_GOES_UPRIGHT);
- Colonel->SetCanFly(false);
- Colonel->SetDisableGravity(false);
- }
- // resume wp movemnet
- me->RemoveAllAuras();
- me->SetStandState(UNIT_STAND_STATE_STAND);
- break;
- default:
- break;
- }
- }
- // does not melee
- }
- private:
- EventMap events;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_anchorite_baradaAI(creature);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement