diff options
author | Blaymoira <none@none> | 2008-12-31 15:55:11 +0100 |
---|---|---|
committer | Blaymoira <none@none> | 2008-12-31 15:55:11 +0100 |
commit | 2a4ef556e4552209950fe1faf0b18e74842f4d9d (patch) | |
tree | f79f5d0d7a3c71c5338b2192fdda177e925a7053 | |
parent | d22e91d92e8543ccd98bc016e7912bfdd5db25c2 (diff) |
*Support for quest 8488
--HG--
branch : trunk
-rw-r--r-- | sql/updates/728_world_scripts.sql | 1 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp | 217 |
2 files changed, 217 insertions, 1 deletions
diff --git a/sql/updates/728_world_scripts.sql b/sql/updates/728_world_scripts.sql new file mode 100644 index 00000000000..5b042ee40a1 --- /dev/null +++ b/sql/updates/728_world_scripts.sql @@ -0,0 +1 @@ +update creature_template set scriptname='npc_apprentice_mirveda' where entry=15402;
\ No newline at end of file diff --git a/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp b/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp index 30292d37c72..bfd8a5d51ce 100644 --- a/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp +++ b/src/bindings/scripts/scripts/zone/eversong_woods/eversong_woods.cpp @@ -17,13 +17,15 @@ /* ScriptData SDName: Eversong_Woods SD%Complete: 100 -SDComment: Quest support: 8346, 8483 +SDComment: Quest support: 8346, 8483, 8488, 8490 SDCategory: Eversong Woods EndScriptData */ /* ContentData mobs_mana_tapped npc_prospector_anvilward +npc_apprentice_mirveda +npc_infused_crystal EndContentData */ #include "precompiled.h" @@ -547,6 +549,208 @@ bool GOHello_go_second_trial(Player *player, GameObject* _GO) return true; } +/*###### +## npc_apprentice_mirveda +######*/ + +#define QUEST_UNEXPECTED_RESULT 8488 +#define MOB_GHARZUL 15958 +#define MOB_ANGERSHADE 15656 + +struct TRINITY_DLL_DECL npc_apprentice_mirvedaAI : public ScriptedAI +{ + npc_apprentice_mirvedaAI(Creature* c) : ScriptedAI(c), Summons(m_creature) {Reset();} + + uint32 KillCount; + uint64 PlayerGUID; + bool Summon; + SummonList Summons; + + void Reset() + { + KillCount = 0; + PlayerGUID = 0; + Summons.DespawnAll(); + Summon = false; + } + + void Aggro(Unit* who){} + + void JustSummoned(Creature *summoned) + { + summoned->AI()->AttackStart(m_creature); + Summons.Summon(summoned); + } + + void SummonedCreatureDespawn(Creature* summoned) + { + Summons.Despawn(summoned); + ++KillCount; + } + + void JustDied(Unit* killer) + { + if (PlayerGUID) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + if (player) + ((Player*)player)->FailQuest(QUEST_UNEXPECTED_RESULT); + } + } + + void UpdateAI(const uint32 diff) + { + if(KillCount >= 3) + { + if (PlayerGUID) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + ((Player*)player)->GroupEventHappens(QUEST_UNEXPECTED_RESULT, m_creature); + } + } + + if(Summon) + { + m_creature->SummonCreature(MOB_GHARZUL, 8745, -7134.32, 35.22, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000); + m_creature->SummonCreature(MOB_ANGERSHADE, 8745, -7134.32, 35.22, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000); + m_creature->SummonCreature(MOB_ANGERSHADE, 8745, -7134.32, 35.22, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000); + Summon = false; + } + } +}; + +bool QuestAccept_npc_apprentice_mirveda(Player* player, Creature* creature, Quest const* quest) +{ + if (quest->GetQuestId() == QUEST_UNEXPECTED_RESULT) + { + ((npc_apprentice_mirvedaAI*)creature->AI())->Summon = true; + ((npc_apprentice_mirvedaAI*)creature->AI())->PlayerGUID = player->GetGUID(); + } + return true; +} + +CreatureAI* GetAI_npc_apprentice_mirvedaAI(Creature *_Creature) +{ + return new npc_apprentice_mirvedaAI (_Creature); +} + +/*###### +## npc_infused_crystal not working yet. +######*/ + +#define MOB_ENRAGED_WRAITH 17086 +#define EMOTE "releases the last of its energies into the nerarby runestone, succesfully reactivating it." +#define QUEST_POWERING_OUR_DEFENSES 8490 + +struct Location +{ + float x, y, z; +}; + +static Location SpawnLocations[]= +{ + {8270.68, -7188.53, 139.619}, + {8284.27, -7187.78, 139.603}, + {8297.43, -7193.53, 139.603}, + {8303.5, -7201.96, 139.577}, + {8273.22, -7241.82, 139.382}, + {8254.89, -7222.12, 139.603}, + {8278.51, -7242.13, 139.162}, + {8267.97, -7239.17, 139.517} +}; + +struct TRINITY_DLL_DECL npc_infused_crystalAI : public Scripted_NoMovementAI +{ + npc_infused_crystalAI(Creature* c) : Scripted_NoMovementAI(c) {Reset();} + + uint32 EndTimer; + uint32 WaveTimer; + bool Completed; + bool Progress; + uint64 PlayerGUID; + + void Reset() + { + EndTimer = 0; + WaveTimer = 0; + PlayerGUID = 0; + Completed = false; + Progress = false; + } + + void Aggro(Unit* who){} + + void JustSummoned(Creature *summoned) + { + summoned->AI()->AttackStart(m_creature); + } + + void MoveInLineOfSight(Unit* who) + { + error_log("MoveLos"); + if( who->GetTypeId() == TYPEID_PLAYER && !m_creature->canStartAttack(who) ) + { + error_log("TypeId check"); + if( ((Player*)who)->GetQuestStatus(QUEST_POWERING_OUR_DEFENSES) == QUEST_STATUS_INCOMPLETE ) + { + error_log("Queststaus"); + float Radius = 10.0; + if( m_creature->IsWithinDistInMap(who, Radius) ) + { + PlayerGUID = who->GetGUID(); + WaveTimer = 1000; + EndTimer = 60000; + Progress = true; + error_log("Event started"); + } + } + } + } + + void JustDied(Unit* killer) + { + if (PlayerGUID && !Completed) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + if (player) + ((Player*)player)->FailQuest(QUEST_POWERING_OUR_DEFENSES); + } + } + + void UpdateAI(const uint32 diff) + { + if(EndTimer < diff && Progress) + { + DoTextEmote(EMOTE, NULL); + Completed = true; + if (PlayerGUID) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + ((Player*)player)->GroupEventHappens(QUEST_POWERING_OUR_DEFENSES, m_creature); + } + m_creature->DealDamage(m_creature,m_creature->GetHealth(),NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); + m_creature->RemoveCorpse(); + error_log("EndTimer done"); + }else EndTimer -= diff; + + if(WaveTimer < diff && !Completed && Progress) + { + uint32 ran = rand()%8; + DoSpawnCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran].x, SpawnLocations[ran].y, SpawnLocations[ran].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000); + DoSpawnCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran].x, SpawnLocations[ran].y, SpawnLocations[ran].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000); + DoSpawnCreature(MOB_ENRAGED_WRAITH, SpawnLocations[ran].x, SpawnLocations[ran].y, SpawnLocations[ran].z, 0, TEMPSUMMON_CORPSE_DESPAWN, 4000); + WaveTimer = 30000; + error_log("Wave summon"); + }else WaveTimer -= diff; + } +}; + + +CreatureAI* GetAI_npc_infused_crystalAI(Creature *_Creature) +{ + return new npc_infused_crystalAI (_Creature); +} + void AddSC_eversong_woods() { Script *newscript; @@ -579,4 +783,15 @@ void AddSC_eversong_woods() newscript->Name="go_second_trial"; newscript->pGOHello = &GOHello_go_second_trial; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_apprentice_mirveda"; + newscript->GetAI = &GetAI_npc_apprentice_mirvedaAI; + newscript->pQuestAccept = &QuestAccept_npc_apprentice_mirveda; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_infused_crystal"; + newscript->GetAI = &GetAI_npc_infused_crystalAI; + newscript->RegisterSelf(); } |