Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*#####
- # npc_anachronos_quest_trigger
- #####*/
- class npc_anachronos_quest_trigger : public CreatureScript
- {
- public:
- npc_anachronos_quest_trigger() : CreatureScript("npc_anachronos_quest_trigger") { }
- CreatureAI* GetAI(Creature* c) const
- {
- return new npc_anachronos_quest_triggerAI(c);
- }
- struct npc_anachronos_quest_triggerAI : public ScriptedAI
- {
- npc_anachronos_quest_triggerAI(Creature* c) : ScriptedAI(c) {}
- uint64 PlayerGUID;
- uint32 WaveTimer;
- uint32 AnnounceTimer;
- int8 LiveCount;
- uint8 WaveCount;
- bool EventStarted;
- bool Announced;
- bool Failed;
- void Reset()
- {
- PlayerGUID = 0;
- WaveTimer = 2000;
- AnnounceTimer = 1000;
- LiveCount = 0;
- WaveCount = 0;
- EventStarted = false;
- Announced = false;
- Failed = false;
- me->SetVisible(false);
- }
- void SummonNextWave()
- {
- //uint8 count = WavesInfo[WaveCount].SpawnCount;
- uint8 locIndex = WavesInfo[WaveCount].UsedSpawnPoint;
- //uint8 KaldoreiSoldierCount = 0;
- //uint8 AnubisathConquerorCount = 0;
- //uint8 QirajiWaspCount = 0;
- for (uint8 i = 0; i < 67; ++i)
- {
- if (Creature* spawn = me->SummonCreature(WavesInfo[WaveCount].CreatureId, SpawnLocation[locIndex + i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, WavesInfo[WaveCount].DespTimer))
- {
- spawn->LoadCreaturesAddon();
- if (spawn->GetEntry() == 15423)
- spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID, 15427+rand()%4);
- if (i >= 30) WaveCount = 1;
- if (i >= 33) WaveCount = 2;
- if (i >= 45) WaveCount = 3;
- if (i >= 51) WaveCount = 4;
- if (WaveCount < 5) //1-4 Wave
- {
- mob_qiraj_war_spawn::mob_qiraj_war_spawnAI* spawnAI = CAST_AI(mob_qiraj_war_spawn::mob_qiraj_war_spawnAI, spawn->AI());
- spawnAI->MobGUID = me->GetGUID();
- spawnAI->PlayerGUID = PlayerGUID;
- }
- }
- }
- WaveTimer = WavesInfo[WaveCount].SpawnTimer;
- AnnounceTimer = WavesInfo[WaveCount].YellTimer;
- }
- void CheckEventFail()
- {
- Player* pPlayer = Unit::GetPlayer(*me, PlayerGUID);
- if (!pPlayer)
- return;
- if (Group *EventGroup = pPlayer->GetGroup())
- {
- Player* GroupMember;
- uint8 GroupMemberCount = 0;
- uint8 DeadMemberCount = 0;
- uint8 FailedMemberCount = 0;
- const Group::MemberSlotList members = EventGroup->GetMemberSlots();
- for (Group::member_citerator itr = members.begin(); itr!= members.end(); ++itr)
- {
- GroupMember = (Unit::GetPlayer(*me, itr->guid));
- if (!GroupMember)
- continue;
- if (!GroupMember->IsWithinDistInMap(me, EVENT_AREA_RADIUS) && GroupMember->GetQuestStatus(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD) == QUEST_STATUS_INCOMPLETE)
- {
- GroupMember->FailQuest(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD);
- GroupMember->SetQuestStatus(QUEST_A_PAWN_ON_THE_ETERNAL_BOARD, QUEST_STATUS_NONE);
- ++FailedMemberCount;
- }
- ++GroupMemberCount;
- if (GroupMember->isDead())
- ++DeadMemberCount;
- }
- if (GroupMemberCount == FailedMemberCount || !pPlayer->IsWithinDistInMap(me, EVENT_AREA_RADIUS))
- Failed = true; //only so event can restart
- }
- }
- void LiveCounter()
- {
- --LiveCount;
- if (!LiveCount)
- Announced = false;
- }
- void UpdateAI(const uint32 diff)
- {
- if (!PlayerGUID || !EventStarted)
- return;
- if (WaveCount < 4)
- {
- if (!Announced && AnnounceTimer <= diff)
- {
- DoScriptText(WavesInfo[WaveCount].WaveTextId, me);
- Announced = true;
- } else AnnounceTimer -= diff;
- if (WaveTimer <= diff)
- SummonNextWave();
- else WaveTimer -= diff;
- }
- CheckEventFail();
- if (WaveCount == 4 || Failed)
- EnterEvadeMode();
- };
- };
- };
- void mob_qiraj_war_spawn::mob_qiraj_war_spawnAI::JustDied(Unit* /*slayer*/)
- {
- me->RemoveCorpse();
- if (Creature* Mob = (Unit::GetCreature(*me, MobGUID)))
- CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, Mob->AI())->LiveCounter();
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement