Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.74 KB | None | 0 0
  1. class npc_announcer_toc10 : public CreatureScript
  2. {
  3. public:
  4.  
  5. npc_announcer_toc10() : CreatureScript("npc_announcer_toc10") { }
  6.  
  7. struct npc_announcer_toc10AI : public ScriptedAI
  8. {
  9. npc_announcer_toc10AI(Creature* pCreature) : ScriptedAI(pCreature)
  10. {
  11. m_pInstance = (InstanceScript*)pCreature->GetInstanceScript();
  12. }
  13.  
  14. InstanceScript* m_pInstance;
  15.  
  16. void Reset()
  17. {
  18. me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
  19. if (Creature *pAlly = GetClosestCreatureWithEntry(me, NPC_THRALL, 300.0f))
  20. pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
  21. if (Creature *pAlly = GetClosestCreatureWithEntry(me, NPC_PROUDMOORE, 300.0f))
  22. pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
  23. }
  24.  
  25. void AttackStart(Unit* /*pWho*/) {}
  26. };
  27.  
  28. bool OnGossipHello(Player* pPlayer, Creature* pCreature)
  29. {
  30. InstanceScript* m_pInstance;
  31. m_pInstance = (InstanceScript*)pCreature->GetInstanceScript();
  32. if (!m_pInstance) return false;
  33.  
  34. char const* _message = "We are ready!";
  35.  
  36. if (!pPlayer->getAttackers().empty() || m_pInstance->IsEncounterInProgress() || m_pInstance->GetData(TYPE_EVENT))
  37. return true;
  38.  
  39. uint8 i;
  40. for (i = 0; i < NUM_MESSAGES; i++)
  41. {
  42. if ((!_GossipMessage[i].state && m_pInstance->GetData(_GossipMessage[i].encounter) != DONE)
  43. || (_GossipMessage[i].state && m_pInstance->GetData(_GossipMessage[i].encounter) == DONE))
  44. {
  45. pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, _message, GOSSIP_SENDER_MAIN,_GossipMessage[i].id);
  46. break;
  47. }
  48. }
  49.  
  50. pPlayer->SEND_GOSSIP_MENU(_GossipMessage[i].msgnum, pCreature->GetGUID());
  51. return true;
  52. }
  53.  
  54. bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
  55. {
  56. InstanceScript* m_pInstance;
  57. m_pInstance = (InstanceScript*)pCreature->GetInstanceScript();
  58. if (!m_pInstance) return false;
  59.  
  60. pPlayer->CLOSE_GOSSIP_MENU();
  61.  
  62. switch(uiAction) {
  63. case GOSSIP_ACTION_INFO_DEF+1:
  64. if (m_pInstance->GetData(TYPE_BEASTS) != DONE)
  65. {
  66. m_pInstance->SetData(TYPE_EVENT,110);
  67. m_pInstance->SetData(TYPE_NORTHREND_BEASTS,NOT_STARTED);
  68. m_pInstance->SetData(TYPE_BEASTS,NOT_STARTED);
  69. }
  70. break;
  71. case GOSSIP_ACTION_INFO_DEF+2:
  72. if (Creature* pJaraxxus = Unit::GetCreature(*pCreature,m_pInstance->GetData64(NPC_JARAXXUS)))
  73. {
  74. pJaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS);
  75. pJaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
  76. pJaraxxus->SetReactState(REACT_AGGRESSIVE);
  77. pJaraxxus->SetInCombatWithZone();
  78. }
  79. else
  80. {
  81. if (m_pInstance->GetData(TYPE_JARAXXUS) != DONE)
  82. {
  83. m_pInstance->SetData(TYPE_EVENT,1010);
  84. m_pInstance->SetData(TYPE_JARAXXUS,NOT_STARTED);
  85. }
  86. }
  87. break;
  88. case GOSSIP_ACTION_INFO_DEF+3:
  89. if (m_pInstance->GetData(TYPE_CRUSADERS) != DONE)
  90. {
  91. if (pPlayer->GetTeam() == ALLIANCE) m_pInstance->SetData(TYPE_EVENT,3000);
  92. else m_pInstance->SetData(TYPE_EVENT,3001);
  93. m_pInstance->SetData(TYPE_CRUSADERS,NOT_STARTED);
  94. }
  95. break;
  96. case GOSSIP_ACTION_INFO_DEF+4:
  97. if (m_pInstance->GetData(TYPE_VALKIRIES) != DONE)
  98. {
  99. m_pInstance->SetData(TYPE_EVENT,4000);
  100. m_pInstance->SetData(TYPE_VALKIRIES,NOT_STARTED);
  101. }
  102. break;
  103. case GOSSIP_ACTION_INFO_DEF+5:
  104. {
  105. if (m_pInstance->GetData(TYPE_LICH_KING) != DONE && !pPlayer->isGameMaster())
  106. return false;
  107.  
  108. if (GameObject* pGoFloor = m_pInstance->instance->GetGameObject(m_pInstance->GetData64(GO_ARGENT_COLISEUM_FLOOR)))
  109. pGoFloor->TakenDamage(1000000);
  110.  
  111. pCreature->CastSpell(pCreature,69016,false);
  112.  
  113. Creature* pTemp = Unit::GetCreature((*pCreature),m_pInstance->GetData64(NPC_ANUBARAK));
  114. if (!pTemp || !pTemp->isAlive())
  115. pTemp = pCreature->SummonCreature(NPC_ANUBARAK, AnubarakLoc[0].GetPositionX(), AnubarakLoc[0].GetPositionY(), AnubarakLoc[0].GetPositionZ(), 3, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME);
  116.  
  117. m_pInstance->SetData(TYPE_ANUBARAK,NOT_STARTED);
  118.  
  119. if (pCreature->GetVisibility() == VISIBILITY_ON)
  120. pCreature->SetVisibility(VISIBILITY_OFF);
  121. break;
  122. }
  123. }
  124. pCreature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
  125. return true;
  126. }
  127.  
  128. CreatureAI* GetAI(Creature* pCreature) const
  129. {
  130. return new npc_announcer_toc10AI(pCreature);
  131. }
  132. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement