From 3d6d17d0d93e2413df921fb8af0a12907a0cd678 Mon Sep 17 00:00:00 2001
From: w1sht0l1v3 <[email protected]>
Date: Wed, 22 Feb 2012 18:14:37 +0200
Subject: [PATCH 2/2] Core/Scripts: Add posibility for players to restart
fight with Apothecary Trio in case of a wipe.
Corrected some AI texts.
---
.../ShadowfangKeep/boss_apothecary_trio.cpp | 34 ++++++--
.../ShadowfangKeep/instance_shadowfang_keep.cpp | 87 ++++++++++---------
.../ShadowfangKeep/shadowfang_keep.h | 18 ++--
3 files changed, 83 insertions(+), 56 deletions(-)
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_trio.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_trio.cpp
index 0ee1270..17d5182 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_trio.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/boss_apothecary_trio.cpp
@@ -15,7 +15,6 @@
#include "ScriptPCH.h"
#include "shadowfang_keep.h"
-#include "LFGMgr.h"
/*######
## apothecary hummel
@@ -98,19 +97,42 @@ class npc_apothecary_hummel : public CreatureScript
bool OnGossipHello(Player* player, Creature* creature)
{
+ InstanceScript* instanceScript = creature->GetInstanceScript();
+ if (!instanceScript)
+ return true;
+
if (creature->isQuestGiver())
player->PrepareQuestMenu(creature->GetGUID());
- // player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_START, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ if (instanceScript->GetData(TYPE_BATTLE) == IN_PROGRESS)
+ player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_START, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
return true;
}
bool OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 /*opt*/)
- // bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
{
+ InstanceScript* instanceScript = creature->GetInstanceScript();
+ if (!instanceScript)
+ return true;
+
if (quest->GetQuestId() == 14488)
- // if (action == GOSSIP_ACTION_INFO_DEF + 1)
+ {
+ instanceScript->SetData(TYPE_BATTLE, IN_PROGRESS);
+ creature->AI()->DoAction(START_INTRO);
+ }
+ player->CLOSE_GOSSIP_MENU();
+ return true;
+ }
+
+ bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action)
+ {
+ InstanceScript* instanceScript = creature->GetInstanceScript();
+ if (!instanceScript)
+ return true;
+
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
creature->AI()->DoAction(START_INTRO);
player->CLOSE_GOSSIP_MENU();
@@ -384,7 +406,7 @@ class npc_apothecary_baxter : public CreatureScript
case START_FIGHT:
{
if (Creature* hummel = ObjectAccessor::GetCreature(*me, _instance ? _instance->GetData64(DATA_HUMMEL) : 0))
- DoScriptText(SAY_CALL_BAXTER, hummel);
+ hummel->AI()->Talk(SAY_CALL_BAXTER);
_phase = PHASE_NORMAL;
me->setFaction(FACTION_HOSTILE);
@@ -512,7 +534,7 @@ class npc_apothecary_frye : public CreatureScript
case START_FIGHT:
{
if (Creature* hummel = ObjectAccessor::GetCreature(*me, _instance ? _instance->GetData64(DATA_HUMMEL) : 0))
- DoScriptText(SAY_CALL_FRYE, hummel);
+ hummel->AI()->Talk(SAY_CALL_FRYE);
_phase = PHASE_NORMAL;
me->setFaction(FACTION_HOSTILE);
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
index db86b35..00072ac 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
@@ -26,7 +26,7 @@ EndScriptData */
#include "ScriptPCH.h"
#include "shadowfang_keep.h"
-#define MAX_ENCOUNTER 5
+#define MAX_ENCOUNTER 6
enum Shadowfang
{
@@ -44,7 +44,7 @@ enum Shadowfang
GO_ARUGAL_DOOR = 18971, //door to open when Wolf Master Nandos
SPELL_ASHCROMBE_TELEPORT = 15742,
- ACTION_SPAWN_CRAZED = 3
+ ACTION_SPAWN_CRAZED = 3
};
const Position SpawnLocation[] =
@@ -77,9 +77,9 @@ public:
uint64 uiAdaGUID;
uint64 uiArchmageArugalGUID;
- uint64 fryeGUID;
- uint64 hummelGUID;
- uint64 baxterGUID;
+ uint64 fryeGUID;
+ uint64 hummelGUID;
+ uint64 baxterGUID;
uint64 DoorCourtyardGUID;
uint64 DoorSorcererGUID;
@@ -87,7 +87,7 @@ public:
uint8 uiPhase;
uint16 uiTimer;
- uint32 spawnCrazedTimer;
+ uint32 spawnCrazedTimer;
void Initialize()
{
@@ -97,9 +97,9 @@ public:
uiAdaGUID = 0;
uiArchmageArugalGUID = 0;
- fryeGUID = 0;
- hummelGUID = 0;
- baxterGUID = 0;
+ fryeGUID = 0;
+ hummelGUID = 0;
+ baxterGUID = 0;
DoorCourtyardGUID = 0;
DoorSorcererGUID = 0;
@@ -116,9 +116,9 @@ public:
case NPC_ASH: uiAshGUID = creature->GetGUID(); break;
case NPC_ADA: uiAdaGUID = creature->GetGUID(); break;
case NPC_ARCHMAGE_ARUGAL: uiArchmageArugalGUID = creature->GetGUID(); break;
- case NPC_FRYE: fryeGUID = creature->GetGUID(); break;
- case NPC_HUMMEL: hummelGUID = creature->GetGUID(); break;
- case NPC_BAXTER: baxterGUID = creature->GetGUID(); break;
+ case NPC_FRYE: fryeGUID = creature->GetGUID(); break;
+ case NPC_HUMMEL: hummelGUID = creature->GetGUID(); break;
+ case NPC_BAXTER: baxterGUID = creature->GetGUID(); break;
}
}
@@ -188,11 +188,14 @@ public:
DoUseDoorOrButton(DoorArugalGUID);
m_auiEncounter[3] = data;
break;
- case TYPE_CROWN:
- if (data == NOT_STARTED)
- spawnCrazedTimer = urand(7000, 14000);
- m_auiEncounter[4] = data;
- break;
+ case TYPE_CROWN:
+ if (data == NOT_STARTED)
+ spawnCrazedTimer = urand(7000, 14000);
+ m_auiEncounter[4] = data;
+ break;
+ case TYPE_BATTLE:
+ m_auiEncounter[5] = data;
+ break;
}
if (data == DONE)
@@ -221,23 +224,25 @@ public:
return m_auiEncounter[2];
case TYPE_NANDOS:
return m_auiEncounter[3];
- case TYPE_CROWN:
- return m_auiEncounter[4];
+ case TYPE_CROWN:
+ return m_auiEncounter[4];
+ case TYPE_BATTLE:
+ return m_auiEncounter[5];
}
return 0;
}
- uint64 GetData64(uint32 id)
- {
- switch(id)
- {
- case DATA_DOOR: return DoorCourtyardGUID;
- case DATA_FRYE: return fryeGUID;
- case DATA_HUMMEL: return hummelGUID;
- case DATA_BAXTER: return baxterGUID;
- }
- return 0;
- }
+ uint64 GetData64(uint32 id)
+ {
+ switch(id)
+ {
+ case DATA_DOOR: return DoorCourtyardGUID;
+ case DATA_FRYE: return fryeGUID;
+ case DATA_HUMMEL: return hummelGUID;
+ case DATA_BAXTER: return baxterGUID;
+ }
+ return 0;
+ }
std::string GetSaveData()
{
@@ -268,17 +273,17 @@ public:
void Update(uint32 diff)
{
- if (GetData(TYPE_CROWN) == IN_PROGRESS)
- {
- if (spawnCrazedTimer <= diff)
- {
- if (Creature* hummel = instance->GetCreature(hummelGUID))
- hummel->AI()->DoAction(ACTION_SPAWN_CRAZED);
- spawnCrazedTimer = urand(2000, 5000);
- }
- else
- spawnCrazedTimer -= diff;
- }
+ if (GetData(TYPE_CROWN) == IN_PROGRESS)
+ {
+ if (spawnCrazedTimer <= diff)
+ {
+ if (Creature* hummel = instance->GetCreature(hummelGUID))
+ hummel->AI()->DoAction(ACTION_SPAWN_CRAZED);
+ spawnCrazedTimer = urand(2000, 5000);
+ }
+ else
+ spawnCrazedTimer -= diff;
+ }
if (GetData(TYPE_FENRUS) != DONE)
return;
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h
index 4b72728..96eca33 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h
@@ -25,23 +25,23 @@ enum Data
TYPE_RETHILGORE = 2,
TYPE_FENRUS = 3,
TYPE_NANDOS = 4,
- TYPE_CROWN = 5
+ TYPE_CROWN = 5,
+ TYPE_BATTLE = 6
};
enum Creatures
{
- NPC_FRYE = 36272,
- NPC_HUMMEL = 36296,
- NPC_BAXTER = 36565
+ NPC_FRYE = 36272,
+ NPC_HUMMEL = 36296,
+ NPC_BAXTER = 36565
};
enum Data64
{
- DATA_DOOR,
- DATA_FRYE,
- DATA_HUMMEL,
- DATA_BAXTER
+ DATA_DOOR,
+ DATA_FRYE,
+ DATA_HUMMEL,
+ DATA_BAXTER
};
#endif
-
--
1.7.9.msysgit.0