Scripting/Storm Peaks: Quest 13285 "Forging the Keystone" now scripted.

Closes #6921
This commit is contained in:
Malcrom
2013-12-09 03:28:40 -03:30
parent f33023b853
commit 755283ac8d
2 changed files with 230 additions and 1 deletions

View File

@@ -413,6 +413,181 @@ class npc_hyldsmeet_protodrake : public CreatureScript
}
};
/*#####
# npc_brann_bronzebeard for Quest 13285 "Forging the Keystone"
#####*/
enum BrannBronzebeard
{
NPC_BRANN_BRONZEBEARD = 31810,
NPC_A_DISTANT_VOICE = 31814,
OBJECT_TOL_SIGNAL_1 = 193590,
OBJECT_TOL_SIGNAL_2 = 193591,
OBJECT_TOL_SIGNAL_3 = 193592,
OBJECT_TOL_SIGNAL_4 = 193593,
OBJECT_TOL_SIGNAL_5 = 193594,
SPELL_RESURRECTION = 58854,
SAY_BRANN_1 = 0,
SAY_BRANN_2 = 1,
SAY_BRANN_3 = 2,
SAY_VOICE_1 = 0,
SAY_VOICE_2 = 1,
SAY_VOICE_3 = 2,
SAY_VOICE_4 = 3,
SAY_VOICE_5 = 4,
EVENT_SCRIPT_1 = 1,
EVENT_SCRIPT_2 = 2,
EVENT_SCRIPT_3 = 3,
EVENT_SCRIPT_4 = 4,
EVENT_SCRIPT_5 = 5,
EVENT_SCRIPT_6 = 6,
EVENT_SCRIPT_7 = 7,
EVENT_SCRIPT_8 = 8,
EVENT_SCRIPT_9 = 9,
EVENT_SCRIPT_10 = 10,
EVENT_SCRIPT_11 = 11,
EVENT_SCRIPT_12 = 12,
EVENT_SCRIPT_13 = 13
};
class npc_brann_bronzebeard : public CreatureScript
{
public:
npc_brann_bronzebeard() : CreatureScript("npc_brann_bronzebeard") { }
struct npc_brann_bronzebeardAI : public ScriptedAI
{
npc_brann_bronzebeardAI(Creature* creature) : ScriptedAI(creature) { }
void Reset() OVERRIDE
{
memset(&objectGUID, 0, sizeof(objectGUID));
playerGUID = 0;
voiceGUID = 0;
objectCounter = 0;
}
void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) OVERRIDE
{
player->CLOSE_GOSSIP_MENU();
playerGUID = player->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_1, 100);
}
void UpdateAI(uint32 diff) OVERRIDE
{
events.Update(diff);
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_SCRIPT_1:
Talk(SAY_BRANN_1, playerGUID);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
if (Creature* voice = me->SummonCreature(NPC_A_DISTANT_VOICE, 7863.43f, -1396.585f, 1538.076f, 2.949606f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 49000))
voiceGUID = voice->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_2, 4000);
break;
case EVENT_SCRIPT_2:
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(0, 7861.488f, -1396.376f, 1534.059f, false);
events.ScheduleEvent(EVENT_SCRIPT_3, 6000);
break;
case EVENT_SCRIPT_3:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_WORK_MINING);
events.ScheduleEvent(EVENT_SCRIPT_4, 6000);
break;
case EVENT_SCRIPT_4:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID))
{
voice->AI()->DoCast(voice, SPELL_RESURRECTION);
voice->AI()->Talk(SAY_VOICE_1, playerGUID);
}
if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_1, 7860.273f, -1383.622f, 1538.302f, -1.658062f, 0, 0, -0.737277f, 0.6755905f, 0))
objectGUID[objectCounter++] = go->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_5, 6000);
break;
case EVENT_SCRIPT_5:
if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID))
voice->AI()->Talk(SAY_VOICE_2, playerGUID);
if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_2, 7875.67f, -1387.266f, 1538.323f, -2.373644f, 0, 0, -0.9271832f, 0.3746083f, 0))
objectGUID[objectCounter++] = go->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_6, 6000);
break;
case EVENT_SCRIPT_6:
if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID))
voice->AI()->Talk(SAY_VOICE_3, playerGUID);
if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_3, 7879.212f, -1401.175f, 1538.279f, 2.967041f, 0, 0, 0.9961939f, 0.08716504f, 0))
objectGUID[objectCounter++] = go->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_7, 6000);
break;
case EVENT_SCRIPT_7:
if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID))
voice->AI()->Talk(SAY_VOICE_4, playerGUID);
if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_4, 7868.944f, -1411.18f, 1538.213f, 2.111848f, 0, 0, 0.8703556f, 0.4924237f, 0))
objectGUID[objectCounter++] = go->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_8, 6000);
break;
case EVENT_SCRIPT_8:
if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID))
voice->AI()->Talk(SAY_VOICE_5, playerGUID);
if (GameObject* go = me->SummonGameObject(OBJECT_TOL_SIGNAL_5, 7855.11f, -1406.839f, 1538.42f, 1.151916f, 0, 0, 0.5446386f, 0.8386708f, 0))
objectGUID[objectCounter] = go->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_9, 6000);
break;
case EVENT_SCRIPT_9:
if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID))
voice->AI()->DoCast(voice, SPELL_RESURRECTION);
events.ScheduleEvent(EVENT_SCRIPT_10, 6000);
break;
case EVENT_SCRIPT_10:
Talk(SAY_BRANN_2, playerGUID);
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
player->KilledMonsterCredit(me->GetEntry());
events.ScheduleEvent(EVENT_SCRIPT_11, 6000);
break;
case EVENT_SCRIPT_11:
me->SetOrientation(2.932153f);
me->SendMovementFlagUpdate(true);
Talk(SAY_BRANN_3, playerGUID);
for (uint8 i = 0; i < 5; ++i)
{
if (GameObject* go = ObjectAccessor::GetGameObject(*me, objectGUID[i]))
go->Delete();
}
events.ScheduleEvent(EVENT_SCRIPT_12, 6000);
break;
case EVENT_SCRIPT_12:
me->GetMotionMaster()->Clear();
me->SetWalk(false);
me->GetMotionMaster()->MovePoint(0, 7799.908f, -1413.561f, 1534.829f, false);
events.ScheduleEvent(EVENT_SCRIPT_13, 10000);
break;
case EVENT_SCRIPT_13:
me->DisappearAndDie();
break;
}
}
}
private:
EventMap events;
uint64 playerGUID;
uint64 objectGUID[5];
uint64 voiceGUID;
uint8 objectCounter;
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_brann_bronzebeardAI(creature);
}
};
enum CloseRift
{
SPELL_DESPAWN_RIFT = 61665
@@ -467,7 +642,7 @@ class spell_close_rift : public SpellScriptLoader
enum JokkumScriptcast
{
SPELL_JOKKUM_KILL_CREDIT = 56545,
SPELL_JOKKUM_SUMMON = 56541
SPELL_JOKKUM_SUMMON = 56541,
};
class spell_jokkum_scriptcast : public SpellScriptLoader
@@ -514,6 +689,7 @@ void AddSC_storm_peaks()
new npc_freed_protodrake();
new npc_icefang();
new npc_hyldsmeet_protodrake();
new npc_brann_bronzebeard();
new spell_close_rift();
new spell_jokkum_scriptcast();
}