Advertisement
Guest User

Untitled

a guest
Dec 20th, 2010
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.09 KB | None | 0 0
  1. /*########
  2. ## npc_tur_ragepaw
  3. ## http://www.wowhead.com/npc=27328
  4. ##########*/
  5. #define GOSSIP_ITEM_HEAL "We could use a healer."
  6. #define GOSSIP_ITEM_DPS "Help us subdue him."
  7. #define GOSSIP_ITEM_TANK "Assume your druidic bear form, Tur."
  8. #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."
  9.  
  10. #define SPEED_WALK              (2.2f)
  11. //#define SPEED_RUN               (1.5f)
  12.  
  13. enum eTurRagepaw
  14. {
  15.     ENTRY_URSOC                         = 26633,
  16.     ENTRY_SPIRIT_URSOC                  = 27373,
  17.  
  18.     QUEST_A_URSOC_THE_BEAR_GOD          = 12249,
  19.     QUEST_H_URSOC_THE_BEAR_GOD          = 12236,
  20.  
  21.     SAY_HEAL                            = -1999970,
  22.     SAY_DPS                             = -1999971,
  23.     SAY_TANK                            = -1999972,
  24.     SAY_END                             = -1999973,
  25.  
  26.     SPELL_Q_ITEM                        = 48549,
  27.  
  28.     SPELL_DIRE_BEAR_FORM                = 48368,
  29.     SPELL_RAGEPAW_PRESENCE              = 52507,
  30.     SPELL_LACERATE                      = 52504,
  31.     SPELL_MAUL                          = 52506,
  32.  
  33.     SPELL_MOONKIN_FORM                  = 48369,
  34.     SPELL_MOONKIN_AURA                  = 52503,
  35.     SPELL_MOONFIRE                      = 52502,
  36.     SPELL_WRATH                         = 52501,
  37.  
  38.     SPELL_TREE_OF_LIFE_FORM             = 48371,
  39.     //SPELL_TREE_OF_LIFE_AURA               = 52553,
  40.     SPELL_NOVIUSH                       = 52554,
  41.     SPELL_LIFEBLOOM                     = 52551
  42. }; 
  43.  
  44. class npc_tur_ragepaw : public CreatureScript
  45. {
  46. public:
  47.     npc_tur_ragepaw() : CreatureScript("npc_tur_ragepaw") { }
  48.  
  49.     struct npc_tur_ragepawAI : public npc_escortAI
  50.     {      
  51.         npc_tur_ragepawAI(Creature *c) : npc_escortAI(c)
  52.         {          
  53.             me->SetSpeed(MOVE_WALK, SPEED_WALK);
  54.             SetDespawnAtEnd(false);
  55.             SetDespawnAtFar(false);
  56.         }
  57.         uint64 pUrsocGUID;
  58.         uint64 pUrsocSpiritGUID;
  59.         uint8 Phase;       
  60.         uint32 MoonfireTimer;
  61.         uint32 MaulTimer;
  62.         uint32 LacerateTimer;
  63.         uint32 LifebloomTimer;
  64.         uint32 LifebloomTimer1;
  65.         uint32 NoviushTimer;
  66.  
  67.         void Reset()
  68.         {                              
  69.             Phase = 0;
  70.             pUrsocSpiritGUID = 0;
  71.             pUrsocGUID = 0;
  72.             LifebloomTimer = 5100;
  73.             LifebloomTimer1 = 1500;
  74.             NoviushTimer = 1500;
  75.             LacerateTimer = 2000;
  76.             MaulTimer = 1500;
  77.             MoonfireTimer = 12000;
  78.         }
  79.         void EnterEvadeMode()
  80.         {  
  81.             me->DeleteThreatList();
  82.             me->CombatStop(true);
  83.             me->SetLootRecipient(NULL);
  84.  
  85.             if (HasEscortState(STATE_ESCORT_ESCORTING))
  86.             {
  87.                 ReturnToLastPoint();
  88.             }
  89.             else
  90.             {
  91.                 me->GetMotionMaster()->MoveTargetedHome();
  92.                 Reset();
  93.             }
  94.         }
  95.  
  96.         void WaypointReached(uint32 id)
  97.         {
  98.             Player* pPlayer = GetPlayerForEscort();
  99.  
  100.             if (!pPlayer)
  101.                 return;
  102.  
  103.             switch(id)
  104.             {
  105.                 case 0:
  106.                     me->SetSpeed(MOVE_WALK, SPEED_WALK);
  107.                 break;
  108.                 case 14:                   
  109.                     DoScriptText(SAY_END, me, pPlayer);                
  110.                     if (Creature* pUrsoc = me->SummonCreature(ENTRY_URSOC, 4899.3388f, -3843.9853f, 337.6063f, 3.0097f, TEMPSUMMON_TIMED_DESPAWN, 300000))
  111.                         pUrsocGUID = pUrsoc->GetGUID();
  112.                     me->SetOrientation(2.835960f);
  113.                     break;
  114.  
  115.             /*case 33:
  116.                 me->SetOrientation(5.858011f);
  117.                 DoScriptText(SAY_END2, me, pPlayer);
  118.                 Unit* CaptainHelios = me->FindNearestCreature(NPC_CAPTAIN_HELIOS, 50);
  119.                 if (CaptainHelios)
  120.                 DoScriptText(SAY_CAPTAIN_ANSWER, CaptainHelios, pPlayer);
  121.                 break;*/
  122.             }                  
  123.         }
  124.         void UpdateAI(const uint32 diff)
  125.         {
  126.             Player* pPlayer = GetPlayerForEscort();
  127.             //Unit *pTarget = pUrsocGUID->getVictim();
  128.             npc_escortAI::UpdateAI(diff);
  129.             if (!UpdateVictim())
  130.                 return;
  131.             // bear form => phase 1
  132.             if (me->HasAura(SPELL_RAGEPAW_PRESENCE))
  133.                 Phase = 1;
  134.             // dps => phase 2
  135.             if (me->HasAura(SPELL_MOONKIN_AURA))
  136.                 Phase = 2;
  137.             // heal => phase 3
  138.             if (me->HasAura(SPELL_TREE_OF_LIFE_FORM))
  139.                 Phase = 3;
  140.             if (Phase == 1)
  141.             {
  142.                 if (MaulTimer <= diff)
  143.                 {
  144.                     DoCast(me->getVictim(), SPELL_MAUL);
  145.                     MaulTimer = 1500;
  146.                 }else MaulTimer -= diff;
  147.                 if (LacerateTimer <= diff)
  148.                 {
  149.                     DoCast(me->getVictim(), SPELL_LACERATE);
  150.                     LacerateTimer = 2000;
  151.                 }else LacerateTimer -= 1500;
  152.             }
  153.             if (Phase == 2)
  154.             {
  155.                 if (MoonfireTimer <= diff)
  156.                 {
  157.                     DoCast(me->getVictim(),SPELL_MOONFIRE, true);
  158.  
  159.                     MoonfireTimer = 12000;
  160.                 } else MoonfireTimer -= diff;
  161.                 DoCast(me->getVictim(), SPELL_WRATH);
  162.             }
  163.             Map::PlayerList const &players = me->GetMap()->GetPlayers();
  164.             for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
  165.             {
  166.                 if (Player* pAllPlayers = i->getSource())
  167.                 {
  168.                     if (pAllPlayers->GetQuestStatus(QUEST_A_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE || pAllPlayers->GetQuestStatus(QUEST_H_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE)
  169.                     {
  170.                         if (Phase == 3)
  171.                         {
  172.                             if(pAllPlayers->HealthBelowPct(80))                    
  173.                             {
  174.                                 if (pAllPlayers->HasAura(SPELL_LIFEBLOOM, true, 3))
  175.                                 {
  176.                                     if (LifebloomTimer <= diff)
  177.                                     {
  178.                                         DoCast(pAllPlayers, SPELL_LIFEBLOOM, false);
  179.                                         LifebloomTimer = 5100;
  180.                                     } else LifebloomTimer -= diff;
  181.                                 }
  182.                                 else
  183.                                 {
  184.                                     if (LifebloomTimer1 <= diff)
  185.                                     {
  186.                                         DoCast(pAllPlayers, SPELL_LIFEBLOOM, false);
  187.                                         LifebloomTimer1 = 1500;
  188.                                     } else LifebloomTimer1 -= diff;
  189.                                 }                              
  190.                             }
  191.                             if(pAllPlayers->HealthBelowPct(60))
  192.                             {
  193.                                 if (NoviushTimer <= diff)
  194.                                 {
  195.                                     DoCast(pAllPlayers, SPELL_NOVIUSH, false);
  196.                                     NoviushTimer = 1500;
  197.                                 } else NoviushTimer -= diff;
  198.                             }
  199.                             if(me->HealthBelowPct(80))                     
  200.                             {
  201.                                 if (me->HasAura(SPELL_LIFEBLOOM, true, 3))
  202.                                 {
  203.                                     if (LifebloomTimer <= diff)
  204.                                     {
  205.                                         DoCast(me, SPELL_LIFEBLOOM, false);
  206.                                         LifebloomTimer = 5100;
  207.                                     } else LifebloomTimer -= diff;
  208.                                 }
  209.                                 else
  210.                                 {
  211.                                     if (LifebloomTimer1 <= diff)
  212.                                     {
  213.                                         DoCast(me, SPELL_LIFEBLOOM, true);
  214.                                         LifebloomTimer1 = 1500;
  215.                                     } else LifebloomTimer1 -= diff;
  216.                                 }
  217.                             }
  218.                             if(me->HealthBelowPct(60))
  219.                             {
  220.                                 if (NoviushTimer <= diff)
  221.                                 {
  222.                                     DoCast(me, SPELL_NOVIUSH, true);
  223.                                     NoviushTimer = 1500;
  224.                                 } else NoviushTimer -= diff;
  225.                             }
  226.                         }
  227.                     }
  228.                 }
  229.             }
  230.         }
  231.     };
  232.     bool OnGossipHello(Player* pPlayer, Creature* pCreature)
  233.     {
  234.         if (pCreature->isQuestGiver())
  235.             pPlayer->PrepareQuestMenu(pCreature->GetGUID());
  236.  
  237.         if (pPlayer->GetQuestStatus(QUEST_A_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_H_URSOC_THE_BEAR_GOD) == QUEST_STATUS_INCOMPLETE)
  238.         {
  239.             pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
  240.             pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());            
  241.         }
  242.         return true;
  243.     }
  244.     void SendAction(Player* pPlayer, Creature* pCreature, uint32 uiAction)
  245.     {
  246.         switch(uiAction)
  247.         {
  248.             case GOSSIP_ACTION_INFO_DEF+1:
  249.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TANK,            GOSSIP_SENDER_MAIN+1, GOSSIP_ACTION_INFO_DEF);
  250.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_DPS,             GOSSIP_SENDER_MAIN+2, GOSSIP_ACTION_INFO_DEF);
  251.                 pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_HEAL,            GOSSIP_SENDER_MAIN+3, GOSSIP_ACTION_INFO_DEF);
  252.                 pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
  253.                 break;
  254.         }
  255.     }
  256.     bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
  257.     {
  258.        
  259.         pPlayer->PlayerTalkClass->ClearMenus();
  260.         if (npc_escortAI* pEscortAI = CAST_AI(npc_tur_ragepaw::npc_tur_ragepawAI, pCreature->AI()))
  261.         {
  262.         switch (uiSender)
  263.         {
  264.             case GOSSIP_SENDER_MAIN:
  265.                 SendAction(pPlayer, pCreature, uiAction);
  266.                 break;
  267.             case GOSSIP_SENDER_MAIN+1:
  268.                 pPlayer->CLOSE_GOSSIP_MENU();
  269.                 DoScriptText(SAY_TANK, pCreature, pPlayer);
  270.                 pCreature->CastSpell(pCreature, SPELL_DIRE_BEAR_FORM, false);
  271.                 pCreature->AddAura(SPELL_RAGEPAW_PRESENCE, pCreature);
  272.                 pCreature->SetReactState(REACT_AGGRESSIVE);
  273.                 pEscortAI->Start(true, false, pPlayer->GetGUID());
  274.                 break;
  275.             case GOSSIP_SENDER_MAIN+2:
  276.                 pPlayer->CLOSE_GOSSIP_MENU();
  277.                 DoScriptText(SAY_DPS, pCreature, pPlayer);
  278.                 pCreature->CastSpell(pCreature, SPELL_MOONKIN_FORM, false);
  279.                 pCreature->AddAura(SPELL_MOONKIN_AURA, pCreature);     
  280.                 pCreature->SetReactState(REACT_AGGRESSIVE);
  281.                 pEscortAI->Start(true, false, pPlayer->GetGUID());
  282.                 break;
  283.             case GOSSIP_SENDER_MAIN+3:
  284.                 pPlayer->CLOSE_GOSSIP_MENU();
  285.                 DoScriptText(SAY_HEAL, pCreature, pPlayer);
  286.                 pCreature->CastSpell(pPlayer,SPELL_TREE_OF_LIFE_FORM, false);
  287.                 //pCreature->AddAura(SPELL_TREE_OF_LIFE_AURA, pCreature);
  288.                 pEscortAI->Start(true, false, pPlayer->GetGUID());
  289.                 break;
  290.         }
  291.         }
  292.         return true;
  293.     }
  294.    
  295.     CreatureAI *GetAI(Creature *creature) const
  296.     {
  297.         return new npc_tur_ragepawAI(creature);
  298.     }
  299. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement