Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*########
- ## npc_tur_ragepaw
- ## http://www.wowhead.com/npc=27328
- ##########*/
- #define GOSSIP_ITEM_HEAL "We could use a healer."
- #define GOSSIP_ITEM_DPS "Help us subdue him."
- #define GOSSIP_ITEM_TANK "Assume your druidic bear form, Tur."
- #define GOSSIP_ITEM_MAIN "We have the purified ashes of Vordrassil\'s sapling. If we can subdue Ursoc, we might be able to heal his soul."
- #define SPEED_WALK (2.2f)
- //#define SPEED_RUN (1.5f)
- enum eTurRagepaw
- {
- ENTRY_URSOC = 26633,
- ENTRY_SPIRIT_URSOC = 27373,
- QUEST_A_URSOC_THE_BEAR_GOD = 12249,
- QUEST_H_URSOC_THE_BEAR_GOD = 12236,
- SAY_HEAL = -1999970,
- SAY_DPS = -1999971,
- SAY_TANK = -1999972,
- SAY_END = -1999973,
- SPELL_Q_ITEM = 48549,
- SPELL_DIRE_BEAR_FORM = 48368,
- SPELL_RAGEPAW_PRESENCE = 52507,
- SPELL_LACERATE = 52504,
- SPELL_MAUL = 52506,
- SPELL_MOONKIN_FORM = 48369,
- SPELL_MOONKIN_AURA = 52503,
- SPELL_MOONFIRE = 52502,
- SPELL_WRATH = 52501,
- SPELL_TREE_OF_LIFE_FORM = 48371,
- //SPELL_TREE_OF_LIFE_AURA = 52553,
- SPELL_NOVIUSH = 52554,
- SPELL_LIFEBLOOM = 52551
- };
- class npc_tur_ragepaw : public CreatureScript
- {
- public:
- npc_tur_ragepaw() : CreatureScript("npc_tur_ragepaw") { }
- struct npc_tur_ragepawAI : public npc_escortAI
- {
- npc_tur_ragepawAI(Creature *c) : npc_escortAI(c)
- {
- me->SetSpeed(MOVE_WALK, SPEED_WALK);
- SetDespawnAtEnd(false);
- SetDespawnAtFar(false);
- }
- uint64 pUrsocGUID;
- uint64 pUrsocSpiritGUID;
- uint8 Phase;
- uint32 MoonfireTimer;
- uint32 MaulTimer;
- uint32 LacerateTimer;
- uint32 LifebloomTimer;
- uint32 LifebloomTimer1;
- uint32 NoviushTimer;
- void Reset()
- {
- Phase = 0;
- pUrsocSpiritGUID = 0;
- pUrsocGUID = 0;
- LifebloomTimer = 5100;
- LifebloomTimer1 = 1500;
- NoviushTimer = 1500;
- LacerateTimer = 2000;
- MaulTimer = 1500;
- MoonfireTimer = 12000;
- }
- void EnterEvadeMode()
- {
- me->DeleteThreatList();
- me->CombatStop(true);
- me->SetLootRecipient(NULL);
- if (HasEscortState(STATE_ESCORT_ESCORTING))
- {
- ReturnToLastPoint();
- }
- else
- {
- me->GetMotionMaster()->MoveTargetedHome();
- Reset();
- }
- }
- void WaypointReached(uint32 id)
- {
- Player* pPlayer = GetPlayerForEscort();
- if (!pPlayer)
- return;
- switch(id)
- {
- case 0:
- me->SetSpeed(MOVE_WALK, SPEED_WALK);
- break;
- case 14:
- DoScriptText(SAY_END, me, pPlayer);
- if (Creature* pUrsoc = me->SummonCreature(ENTRY_URSOC, 4899.3388f, -3843.9853f, 337.6063f, 3.0097f, TEMPSUMMON_TIMED_DESPAWN, 300000))
- pUrsocGUID = pUrsoc->GetGUID();
- me->SetOrientation(2.835960f);
- break;
- /*case 33:
- me->SetOrientation(5.858011f);
- DoScriptText(SAY_END2, me, pPlayer);
- Unit* CaptainHelios = me->FindNearestCreature(NPC_CAPTAIN_HELIOS, 50);
- if (CaptainHelios)
- DoScriptText(SAY_CAPTAIN_ANSWER, CaptainHelios, pPlayer);
- break;*/
- }
- }
- void UpdateAI(const uint32 diff)
- {
- Player* pPlayer = GetPlayerForEscort();
- //Unit *pTarget = pUrsocGUID->getVictim();
- npc_escortAI::UpdateAI(diff);
- if (!UpdateVictim())
- return;
- // bear form => phase 1
- if (me->HasAura(SPELL_RAGEPAW_PRESENCE))
- Phase = 1;
- // dps => phase 2
- if (me->HasAura(SPELL_MOONKIN_AURA))
- Phase = 2;
- // heal => phase 3
- if (me->HasAura(SPELL_TREE_OF_LIFE_FORM))
- Phase = 3;
- if (Phase == 1)
- {
- if (MaulTimer <= diff)
- {
- DoCast(me->getVictim(), SPELL_MAUL);
- MaulTimer = 1500;
- }else MaulTimer -= diff;
- if (LacerateTimer <= diff)
- {
- DoCast(me->getVictim(), SPELL_LACERATE);
- LacerateTimer = 2000;
- }else LacerateTimer -= 1500;
- }
- if (Phase == 2)
- {
- if (MoonfireTimer <= diff)
- {
- DoCast(me->getVictim(),SPELL_MOONFIRE, true);
- MoonfireTimer = 12000;
- } else MoonfireTimer -= diff;
- DoCast(me->getVictim(), SPELL_WRATH);
- }
- Map::PlayerList const &players = me->GetMap()->GetPlayers();
- for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
- {
- if (Player* pAllPlayers = i->getSource())
- {
- if (pAllPlayers->GetQuestStatus(QUEST_A_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE || pAllPlayers->GetQuestStatus(QUEST_H_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE)
- {
- if (Phase == 3)
- {
- if(pAllPlayers->HealthBelowPct(80))
- {
- if (pAllPlayers->HasAura(SPELL_LIFEBLOOM, true, 3))
- {
- if (LifebloomTimer <= diff)
- {
- DoCast(pAllPlayers, SPELL_LIFEBLOOM, false);
- LifebloomTimer = 5100;
- } else LifebloomTimer -= diff;
- }
- else
- {
- if (LifebloomTimer1 <= diff)
- {
- DoCast(pAllPlayers, SPELL_LIFEBLOOM, false);
- LifebloomTimer1 = 1500;
- } else LifebloomTimer1 -= diff;
- }
- }
- if(pAllPlayers->HealthBelowPct(60))
- {
- if (NoviushTimer <= diff)
- {
- DoCast(pAllPlayers, SPELL_NOVIUSH, false);
- NoviushTimer = 1500;
- } else NoviushTimer -= diff;
- }
- if(me->HealthBelowPct(80))
- {
- if (me->HasAura(SPELL_LIFEBLOOM, true, 3))
- {
- if (LifebloomTimer <= diff)
- {
- DoCast(me, SPELL_LIFEBLOOM, false);
- LifebloomTimer = 5100;
- } else LifebloomTimer -= diff;
- }
- else
- {
- if (LifebloomTimer1 <= diff)
- {
- DoCast(me, SPELL_LIFEBLOOM, true);
- LifebloomTimer1 = 1500;
- } else LifebloomTimer1 -= diff;
- }
- }
- if(me->HealthBelowPct(60))
- {
- if (NoviushTimer <= diff)
- {
- DoCast(me, SPELL_NOVIUSH, true);
- NoviushTimer = 1500;
- } else NoviushTimer -= diff;
- }
- }
- }
- }
- }
- }
- };
- bool OnGossipHello(Player* pPlayer, Creature* pCreature)
- {
- if (pCreature->isQuestGiver())
- pPlayer->PrepareQuestMenu(pCreature->GetGUID());
- if (pPlayer->GetQuestStatus(QUEST_A_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_H_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE)
- {
- pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
- }
- return true;
- }
- void SendAction(Player* pPlayer, Creature* pCreature, uint32 uiAction)
- {
- switch(uiAction)
- {
- case GOSSIP_ACTION_INFO_DEF+1:
- pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TANK, GOSSIP_SENDER_MAIN+1, GOSSIP_ACTION_INFO_DEF);
- pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_DPS, GOSSIP_SENDER_MAIN+2, GOSSIP_ACTION_INFO_DEF);
- pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_HEAL, GOSSIP_SENDER_MAIN+3, GOSSIP_ACTION_INFO_DEF);
- pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
- break;
- }
- }
- bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
- {
- pPlayer->PlayerTalkClass->ClearMenus();
- if (npc_escortAI* pEscortAI = CAST_AI(npc_tur_ragepaw::npc_tur_ragepawAI, pCreature->AI()))
- {
- switch (uiSender)
- {
- case GOSSIP_SENDER_MAIN:
- SendAction(pPlayer, pCreature, uiAction);
- break;
- case GOSSIP_SENDER_MAIN+1:
- pPlayer->CLOSE_GOSSIP_MENU();
- DoScriptText(SAY_TANK, pCreature, pPlayer);
- pCreature->CastSpell(pCreature, SPELL_DIRE_BEAR_FORM, false);
- pCreature->AddAura(SPELL_RAGEPAW_PRESENCE, pCreature);
- pCreature->SetReactState(REACT_AGGRESSIVE);
- pEscortAI->Start(true, false, pPlayer->GetGUID());
- break;
- case GOSSIP_SENDER_MAIN+2:
- pPlayer->CLOSE_GOSSIP_MENU();
- DoScriptText(SAY_DPS, pCreature, pPlayer);
- pCreature->CastSpell(pCreature, SPELL_MOONKIN_FORM, false);
- pCreature->AddAura(SPELL_MOONKIN_AURA, pCreature);
- pCreature->SetReactState(REACT_AGGRESSIVE);
- pEscortAI->Start(true, false, pPlayer->GetGUID());
- break;
- case GOSSIP_SENDER_MAIN+3:
- pPlayer->CLOSE_GOSSIP_MENU();
- DoScriptText(SAY_HEAL, pCreature, pPlayer);
- pCreature->CastSpell(pPlayer,SPELL_TREE_OF_LIFE_FORM, false);
- //pCreature->AddAura(SPELL_TREE_OF_LIFE_AURA, pCreature);
- pEscortAI->Start(true, false, pPlayer->GetGUID());
- break;
- }
- }
- return true;
- }
- CreatureAI *GetAI(Creature *creature) const
- {
- return new npc_tur_ragepawAI(creature);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement