Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.93 KB | None | 0 0
  1. /*#####
  2. # npc_anachronos_quest_trigger
  3. #####*/
  4.  
  5. class npc_anachronos_quest_trigger : public CreatureScript
  6. {
  7. public:
  8. npc_anachronos_quest_trigger() : CreatureScript("npc_anachronos_quest_trigger") { }
  9.  
  10. CreatureAI* GetAI(Creature* c) const
  11. {
  12. return new npc_anachronos_quest_triggerAI(c);
  13. }
  14.  
  15. struct npc_anachronos_quest_triggerAI : public ScriptedAI
  16. {
  17. npc_anachronos_quest_triggerAI(Creature* c) : ScriptedAI(c) {}
  18.  
  19. uint64 PlayerGUID;
  20.  
  21. uint32 WaveTimer;
  22. uint32 AnnounceTimer;
  23.  
  24. int8 LiveCount;
  25. uint8 WaveCount;
  26.  
  27. bool EventStarted;
  28. bool Announced;
  29. bool Failed;
  30.  
  31. void Reset()
  32. {
  33. PlayerGUID = 0;
  34.  
  35. WaveTimer = 2000;
  36. AnnounceTimer = 1000;
  37. LiveCount = 0;
  38. WaveCount = 0;
  39.  
  40. EventStarted = false;
  41. Announced = false;
  42. Failed = false;
  43.  
  44. me->SetVisible(false);
  45. }
  46.  
  47. void SummonNextWave()
  48. {
  49. //uint8 count = WavesInfo[WaveCount].SpawnCount;
  50. uint8 locIndex = WavesInfo[WaveCount].UsedSpawnPoint;
  51. //uint8 KaldoreiSoldierCount = 0;
  52. //uint8 AnubisathConquerorCount = 0;
  53. //uint8 QirajiWaspCount = 0;
  54. for (uint8 i = 0; i < 67; ++i)
  55. {
  56. if (Creature* spawn = me->SummonCreature(WavesInfo[WaveCount].CreatureId, SpawnLocation[locIndex + i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, WavesInfo[WaveCount].DespTimer))
  57. {
  58. spawn->LoadCreaturesAddon();
  59. if (spawn->GetEntry() == 15423)
  60. spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID, 15427+rand()%4);
  61. if (i >= 30) WaveCount = 1;
  62. if (i >= 33) WaveCount = 2;
  63. if (i >= 45) WaveCount = 3;
  64. if (i >= 51) WaveCount = 4;
  65.  
  66. if (WaveCount < 5) //1-4 Wave
  67. {
  68. mob_qiraj_war_spawn::mob_qiraj_war_spawnAI* spawnAI = CAST_AI(mob_qiraj_war_spawn::mob_qiraj_war_spawnAI, spawn->AI());
  69. spawnAI->MobGUID = me->GetGUID();
  70. spawnAI->PlayerGUID = PlayerGUID;
  71. }
  72. }
  73. }
  74. WaveTimer = WavesInfo[WaveCount].SpawnTimer;
  75. AnnounceTimer = WavesInfo[WaveCount].YellTimer;
  76. }
  77.  
  78. void CheckEventFail()
  79. {
  80. Player* pPlayer = Unit::GetPlayer(*me, PlayerGUID);
  81.  
  82. if (!pPlayer)
  83. return;
  84.  
  85. if (Group *EventGroup = pPlayer->GetGroup())
  86. {
  87. Player* GroupMember;
  88.  
  89. uint8 GroupMemberCount = 0;
  90. uint8 DeadMemberCount = 0;
  91. uint8 FailedMemberCount = 0;
  92.  
  93. const Group::MemberSlotList members = EventGroup->GetMemberSlots();
  94.  
  95. for (Group::member_citerator itr = members.begin(); itr!= members.end(); ++itr)
  96. {
  97. GroupMember = (Unit::GetPlayer(*me, itr->guid));
  98. if (!GroupMember)
  99. continue;
  100. if (!GroupMember->IsWithinDistInMap(me, EVENT_AREA_RADIUS) && GroupMember->GetQuestStatus(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD) == QUEST_STATUS_INCOMPLETE)
  101. {
  102. GroupMember->FailQuest(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD);
  103. GroupMember->SetQuestStatus(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD, QUEST_STATUS_NONE);
  104. ++FailedMemberCount;
  105. }
  106. ++GroupMemberCount;
  107.  
  108. if (GroupMember->isDead())
  109. ++DeadMemberCount;
  110. }
  111.  
  112. if (GroupMemberCount == FailedMemberCount || !pPlayer->IsWithinDistInMap(me, EVENT_AREA_RADIUS))
  113. Failed = true; //only so event can restart
  114. }
  115. }
  116.  
  117. void LiveCounter()
  118. {
  119. --LiveCount;
  120. if (!LiveCount)
  121. Announced = false;
  122. }
  123.  
  124. void UpdateAI(const uint32 diff)
  125. {
  126. if (!PlayerGUID || !EventStarted)
  127. return;
  128.  
  129. if (WaveCount < 4)
  130. {
  131. if (!Announced && AnnounceTimer <= diff)
  132. {
  133. DoScriptText(WavesInfo[WaveCount].WaveTextId, me);
  134. Announced = true;
  135. } else AnnounceTimer -= diff;
  136.  
  137. if (WaveTimer <= diff)
  138. SummonNextWave();
  139. else WaveTimer -= diff;
  140. }
  141. CheckEventFail();
  142. if (WaveCount == 4 || Failed)
  143. EnterEvadeMode();
  144. };
  145. };
  146.  
  147. };
  148.  
  149. void mob_qiraj_war_spawn::mob_qiraj_war_spawnAI::JustDied(Unit* /*slayer*/)
  150. {
  151. me->RemoveCorpse();
  152. if (Creature* Mob = (Unit::GetCreature(*me, MobGUID)))
  153. CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, Mob->AI())->LiveCounter();
  154.  
  155. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement