Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_tomb_of_seven.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
ScriptMgr.h
"
7
#include "
ScriptedCreature.h
"
8
#include "
ScriptedGossip.h
"
9
#include "
blackrock_depths.h
"
10
#include "
Player.h
"
11
12
enum
Spells
13
{
14
SPELL_SMELT_DARK_IRON
= 14891,
15
SPELL_LEARN_SMELT
= 14894,
16
};
17
18
enum
Quests
19
{
20
QUEST_SPECTRAL_CHALICE
= 4083
21
};
22
23
enum
Misc
24
{
25
DATA_SKILLPOINT_MIN
= 230
26
};
27
28
#define GOSSIP_ITEM_TEACH_1 "Teach me the art of smelting dark iron"
29
#define GOSSIP_ITEM_TEACH_2 "Continue..."
30
#define GOSSIP_ITEM_TEACH_3 "[PH] Continue..."
31
#define GOSSIP_ITEM_TRIBUTE "I want to pay tribute"
32
33
class
boss_gloomrel
:
public
CreatureScript
34
{
35
public
:
36
boss_gloomrel
() :
CreatureScript
(
"boss_gloomrel"
) { }
37
38
bool
OnGossipSelect
(
Player
* player,
Creature
* creature,
uint32
/*sender*/
,
uint32
action)
OVERRIDE
39
{
40
player->PlayerTalkClass->ClearMenus();
41
switch
(action)
42
{
43
case
GOSSIP_ACTION_INFO_DEF
+1:
44
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_ITEM_TEACH_2
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+ 11);
45
player->SEND_GOSSIP_MENU(2606, creature->GetGUID());
46
break
;
47
case
GOSSIP_ACTION_INFO_DEF
+11:
48
player->CLOSE_GOSSIP_MENU();
49
player->CastSpell(player,
SPELL_LEARN_SMELT
,
false
);
50
break
;
51
case
GOSSIP_ACTION_INFO_DEF
+2:
52
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_ITEM_TEACH_3
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+ 22);
53
player->SEND_GOSSIP_MENU(2604, creature->GetGUID());
54
break
;
55
case
GOSSIP_ACTION_INFO_DEF
+22:
56
player->CLOSE_GOSSIP_MENU();
57
if
(
InstanceScript
* instance = creature->GetInstanceScript())
58
{
59
//are 5 minutes expected? go template may have data to despawn when used at quest
60
instance->DoRespawnGameObject(instance->GetData64(
DATA_GO_CHALICE
),
MINUTE
*5);
61
}
62
break
;
63
}
64
return
true
;
65
}
66
67
bool
OnGossipHello
(
Player
* player,
Creature
* creature)
OVERRIDE
68
{
69
if
(player->GetQuestRewardStatus(
QUEST_SPECTRAL_CHALICE
) == 1 && player->GetSkillValue(
SKILL_MINING
) >=
DATA_SKILLPOINT_MIN
&& !player->HasSpell(
SPELL_SMELT_DARK_IRON
))
70
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_ITEM_TEACH_1
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+ 1);
71
72
if
(player->GetQuestRewardStatus(
QUEST_SPECTRAL_CHALICE
) == 0 && player->GetSkillValue(
SKILL_MINING
) >=
DATA_SKILLPOINT_MIN
)
73
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_ITEM_TRIBUTE
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+ 2);
74
75
player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
76
return
true
;
77
}
78
};
79
80
enum
DoomrelSpells
81
{
82
SPELL_SHADOWBOLTVOLLEY
= 15245,
83
SPELL_IMMOLATE
= 12742,
84
SPELL_CURSEOFWEAKNESS
= 12493,
85
SPELL_DEMONARMOR
= 13787,
86
SPELL_SUMMON_VOIDWALKERS
= 15092
87
};
88
89
#define GOSSIP_ITEM_CHALLENGE "Your bondage is at an end, Doom'rel. I challenge you!"
90
#define GOSSIP_SELECT_DOOMREL "[PH] Continue..."
91
92
class
boss_doomrel
:
public
CreatureScript
93
{
94
public
:
95
boss_doomrel
() :
CreatureScript
(
"boss_doomrel"
) { }
96
97
bool
OnGossipSelect
(
Player
* player,
Creature
* creature,
uint32
/*sender*/
,
uint32
action)
OVERRIDE
98
{
99
player->PlayerTalkClass->ClearMenus();
100
switch
(action)
101
{
102
case
GOSSIP_ACTION_INFO_DEF
+1:
103
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_SELECT_DOOMREL
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+ 2);
104
player->SEND_GOSSIP_MENU(2605, creature->GetGUID());
105
break
;
106
case
GOSSIP_ACTION_INFO_DEF
+2:
107
player->CLOSE_GOSSIP_MENU();
108
//start event here
109
creature->setFaction(
FACTION_HOSTILE
);
110
creature->RemoveFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_IMMUNE_TO_PC
);
111
creature->AI()->AttackStart(player);
112
InstanceScript
* instance = creature->GetInstanceScript();
113
if
(instance)
114
instance->
SetData64
(
DATA_EVENSTARTER
, player->GetGUID());
115
break
;
116
}
117
return
true
;
118
}
119
120
bool
OnGossipHello
(
Player
* player,
Creature
* creature)
OVERRIDE
121
{
122
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_ITEM_CHALLENGE
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+ 1);
123
player->SEND_GOSSIP_MENU(2601, creature->GetGUID());
124
125
return
true
;
126
}
127
128
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
129
{
130
return
new
boss_doomrelAI
(creature);
131
}
132
133
struct
boss_doomrelAI
:
public
ScriptedAI
134
{
135
boss_doomrelAI
(
Creature
* creature) :
ScriptedAI
(creature)
136
{
137
instance
= creature->
GetInstanceScript
();
138
}
139
140
InstanceScript
*
instance
;
141
uint32
ShadowVolley_Timer
;
142
uint32
Immolate_Timer
;
143
uint32
CurseOfWeakness_Timer
;
144
uint32
DemonArmor_Timer
;
145
bool
Voidwalkers
;
146
147
void
Reset
()
OVERRIDE
148
{
149
ShadowVolley_Timer
= 10000;
150
Immolate_Timer
= 18000;
151
CurseOfWeakness_Timer
= 5000;
152
DemonArmor_Timer
= 16000;
153
Voidwalkers
=
false
;
154
155
me
->setFaction(
FACTION_FRIEND
);
156
157
// was set before event start, so set again
158
me
->SetFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_IMMUNE_TO_PC
);
159
160
if
(
instance
)
161
{
162
if
(
instance
->GetData(
DATA_GHOSTKILL
) >= 7)
163
me
->SetUInt32Value(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_NONE
);
164
else
165
me
->SetUInt32Value(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_GOSSIP
);
166
}
167
}
168
169
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
170
{
171
}
172
173
void
EnterEvadeMode
()
OVERRIDE
174
{
175
me
->RemoveAllAuras();
176
me
->DeleteThreatList();
177
me
->CombatStop(
true
);
178
me
->LoadCreaturesAddon();
179
if
(
me
->IsAlive())
180
me
->GetMotionMaster()->MoveTargetedHome();
181
me
->SetLootRecipient(NULL);
182
if
(
instance
)
183
instance
->SetData64(
DATA_EVENSTARTER
, 0);
184
}
185
186
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
187
{
188
if
(
instance
)
189
instance
->SetData(
DATA_GHOSTKILL
, 1);
190
}
191
192
void
UpdateAI
(
uint32
diff)
OVERRIDE
193
{
194
if
(!
UpdateVictim
())
195
return
;
196
197
//ShadowVolley_Timer
198
if
(
ShadowVolley_Timer
<= diff)
199
{
200
DoCastVictim
(
SPELL_SHADOWBOLTVOLLEY
);
201
ShadowVolley_Timer
= 12000;
202
}
else
ShadowVolley_Timer
-= diff;
203
204
//Immolate_Timer
205
if
(
Immolate_Timer
<= diff)
206
{
207
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100,
true
))
208
DoCast
(target,
SPELL_IMMOLATE
);
209
210
Immolate_Timer
= 25000;
211
}
else
Immolate_Timer
-= diff;
212
213
//CurseOfWeakness_Timer
214
if
(
CurseOfWeakness_Timer
<= diff)
215
{
216
DoCastVictim
(
SPELL_CURSEOFWEAKNESS
);
217
CurseOfWeakness_Timer
= 45000;
218
}
else
CurseOfWeakness_Timer
-= diff;
219
220
//DemonArmor_Timer
221
if
(
DemonArmor_Timer
<= diff)
222
{
223
DoCast
(
me
,
SPELL_DEMONARMOR
);
224
DemonArmor_Timer
= 300000;
225
}
else
DemonArmor_Timer
-= diff;
226
227
//Summon Voidwalkers
228
if
(!
Voidwalkers
&&
HealthBelowPct
(51))
229
{
230
DoCastVictim
(
SPELL_SUMMON_VOIDWALKERS
,
true
);
231
Voidwalkers
=
true
;
232
}
233
234
DoMeleeAttackIfReady
();
235
}
236
};
237
};
238
239
void
AddSC_boss_tomb_of_seven
()
240
{
241
new
boss_gloomrel
();
242
new
boss_doomrel
();
243
}
Spells
Spells
Definition
BattlegroundIC.h:645
MINUTE
@ MINUTE
Definition
Common.h:119
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
GOSSIP_ICON_CHAT
@ GOSSIP_ICON_CHAT
Definition
GossipDef.h:46
Player.h
ScriptMgr.h
ScriptedCreature.h
ScriptedGossip.h
GOSSIP_SENDER_MAIN
@ GOSSIP_SENDER_MAIN
Definition
ScriptedGossip.h:58
GOSSIP_ACTION_INFO_DEF
@ GOSSIP_ACTION_INFO_DEF
Definition
ScriptedGossip.h:56
SKILL_MINING
@ SKILL_MINING
Definition
SharedDefines.h:3410
UNIT_NPC_FLAG_GOSSIP
@ UNIT_NPC_FLAG_GOSSIP
Definition
Unit.h:687
UNIT_NPC_FLAG_NONE
@ UNIT_NPC_FLAG_NONE
Definition
Unit.h:686
UNIT_FLAG_IMMUNE_TO_PC
@ UNIT_FLAG_IMMUNE_TO_PC
Definition
Unit.h:633
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
UNIT_FIELD_NPC_FLAGS
@ UNIT_FIELD_NPC_FLAGS
Definition
UpdateFields.h:107
UNIT_FIELD_FLAGS
@ UNIT_FIELD_FLAGS
Definition
UpdateFields.h:82
blackrock_depths.h
FACTION_HOSTILE
@ FACTION_HOSTILE
Definition
blackrock_depths.h:12
FACTION_FRIEND
@ FACTION_FRIEND
Definition
blackrock_depths.h:13
DATA_EVENSTARTER
@ DATA_EVENSTARTER
Definition
blackrock_depths.h:39
DATA_GHOSTKILL
@ DATA_GHOSTKILL
Definition
blackrock_depths.h:38
DATA_GO_CHALICE
@ DATA_GO_CHALICE
Definition
blackrock_depths.h:36
SPELL_CURSEOFWEAKNESS
@ SPELL_CURSEOFWEAKNESS
Definition
boss_anubshiah.cpp:13
SPELL_DEMONARMOR
@ SPELL_DEMONARMOR
Definition
boss_anubshiah.cpp:14
Misc
Misc
Definition
boss_occuthar.cpp:37
GOSSIP_ITEM_TEACH_2
#define GOSSIP_ITEM_TEACH_2
Definition
boss_tomb_of_seven.cpp:29
DoomrelSpells
DoomrelSpells
Definition
boss_tomb_of_seven.cpp:81
SPELL_CURSEOFWEAKNESS
@ SPELL_CURSEOFWEAKNESS
Definition
boss_tomb_of_seven.cpp:84
SPELL_IMMOLATE
@ SPELL_IMMOLATE
Definition
boss_tomb_of_seven.cpp:83
SPELL_DEMONARMOR
@ SPELL_DEMONARMOR
Definition
boss_tomb_of_seven.cpp:85
SPELL_SUMMON_VOIDWALKERS
@ SPELL_SUMMON_VOIDWALKERS
Definition
boss_tomb_of_seven.cpp:86
SPELL_SHADOWBOLTVOLLEY
@ SPELL_SHADOWBOLTVOLLEY
Definition
boss_tomb_of_seven.cpp:82
GOSSIP_ITEM_CHALLENGE
#define GOSSIP_ITEM_CHALLENGE
Definition
boss_tomb_of_seven.cpp:89
Quests
Quests
Definition
boss_tomb_of_seven.cpp:19
QUEST_SPECTRAL_CHALICE
@ QUEST_SPECTRAL_CHALICE
Definition
boss_tomb_of_seven.cpp:20
DATA_SKILLPOINT_MIN
@ DATA_SKILLPOINT_MIN
Definition
boss_tomb_of_seven.cpp:25
SPELL_SMELT_DARK_IRON
@ SPELL_SMELT_DARK_IRON
Definition
boss_tomb_of_seven.cpp:14
SPELL_LEARN_SMELT
@ SPELL_LEARN_SMELT
Definition
boss_tomb_of_seven.cpp:15
AddSC_boss_tomb_of_seven
void AddSC_boss_tomb_of_seven()
Definition
boss_tomb_of_seven.cpp:239
GOSSIP_ITEM_TEACH_3
#define GOSSIP_ITEM_TEACH_3
Definition
boss_tomb_of_seven.cpp:30
GOSSIP_ITEM_TEACH_1
#define GOSSIP_ITEM_TEACH_1
Definition
boss_tomb_of_seven.cpp:28
GOSSIP_ITEM_TRIBUTE
#define GOSSIP_ITEM_TRIBUTE
Definition
boss_tomb_of_seven.cpp:31
GOSSIP_SELECT_DOOMREL
#define GOSSIP_SELECT_DOOMREL
Definition
boss_tomb_of_seven.cpp:90
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::UpdateVictim
bool UpdateVictim()
Definition
CreatureAI.cpp:192
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
InstanceScript
Definition
InstanceScript.h:123
Player
Definition
Player.h:1289
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
UnitAI::DoCast
void DoCast(uint32 spellId)
Definition
UnitAI.cpp:110
UnitAI::SelectTarget
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition
UnitAI.cpp:66
UnitAI::DoCastVictim
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:168
Unit
Definition
Unit.h:1367
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
ZoneScript::SetData64
virtual void SetData64(uint32, uint64)
Definition
ZoneScript.h:33
boss_doomrel
Definition
boss_tomb_of_seven.cpp:93
boss_doomrel::OnGossipHello
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
Definition
boss_tomb_of_seven.cpp:120
boss_doomrel::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_tomb_of_seven.cpp:128
boss_doomrel::OnGossipSelect
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
Definition
boss_tomb_of_seven.cpp:97
boss_doomrel::boss_doomrel
boss_doomrel()
Definition
boss_tomb_of_seven.cpp:95
boss_gloomrel
Definition
boss_tomb_of_seven.cpp:34
boss_gloomrel::OnGossipHello
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
Definition
boss_tomb_of_seven.cpp:67
boss_gloomrel::OnGossipSelect
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
Definition
boss_tomb_of_seven.cpp:38
boss_gloomrel::boss_gloomrel
boss_gloomrel()
Definition
boss_tomb_of_seven.cpp:36
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
boss_doomrel::boss_doomrelAI
Definition
boss_tomb_of_seven.cpp:134
boss_doomrel::boss_doomrelAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_tomb_of_seven.cpp:169
boss_doomrel::boss_doomrelAI::boss_doomrelAI
boss_doomrelAI(Creature *creature)
Definition
boss_tomb_of_seven.cpp:135
boss_doomrel::boss_doomrelAI::ShadowVolley_Timer
uint32 ShadowVolley_Timer
Definition
boss_tomb_of_seven.cpp:141
boss_doomrel::boss_doomrelAI::Immolate_Timer
uint32 Immolate_Timer
Definition
boss_tomb_of_seven.cpp:142
boss_doomrel::boss_doomrelAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_tomb_of_seven.cpp:186
boss_doomrel::boss_doomrelAI::EnterEvadeMode
void EnterEvadeMode() OVERRIDE
Definition
boss_tomb_of_seven.cpp:173
boss_doomrel::boss_doomrelAI::CurseOfWeakness_Timer
uint32 CurseOfWeakness_Timer
Definition
boss_tomb_of_seven.cpp:143
boss_doomrel::boss_doomrelAI::Reset
void Reset() OVERRIDE
Definition
boss_tomb_of_seven.cpp:147
boss_doomrel::boss_doomrelAI::instance
InstanceScript * instance
Definition
boss_tomb_of_seven.cpp:140
boss_doomrel::boss_doomrelAI::DemonArmor_Timer
uint32 DemonArmor_Timer
Definition
boss_tomb_of_seven.cpp:144
boss_doomrel::boss_doomrelAI::Voidwalkers
bool Voidwalkers
Definition
boss_tomb_of_seven.cpp:145
boss_doomrel::boss_doomrelAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_tomb_of_seven.cpp:192
src
server
scripts
EasternKingdoms
BlackrockMountain
BlackrockDepths
boss_tomb_of_seven.cpp
Generated on
for Project SkyFire Core by
1.17.0