Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
forge_of_souls.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 "
forge_of_souls.h
"
10
#include "
Player.h
"
11
12
enum
Events
13
{
14
EVENT_NONE
,
15
16
// Jaina/Sylvanas Intro
17
EVENT_INTRO_1
,
18
EVENT_INTRO_2
,
19
EVENT_INTRO_3
,
20
EVENT_INTRO_4
,
21
EVENT_INTRO_5
,
22
EVENT_INTRO_6
,
23
EVENT_INTRO_7
,
24
EVENT_INTRO_8
,
25
};
26
27
/****************************************SYLVANAS************************************/
28
#define GOSSIP_SYLVANAS_ITEM "What would you have of me, Banshee Queen?"
29
#define GOSSIP_JAINA_ITEM "What would you have of me, my lady?"
30
31
enum
Yells
32
{
33
SAY_JAINA_INTRO_1
= 0,
34
SAY_JAINA_INTRO_2
= 1,
35
SAY_JAINA_INTRO_3
= 2,
36
SAY_JAINA_INTRO_4
= 3,
37
SAY_JAINA_INTRO_5
= 4,
38
SAY_JAINA_INTRO_6
= 5,
39
SAY_JAINA_INTRO_7
= 6,
40
SAY_JAINA_INTRO_8
= 7,
41
42
SAY_SYLVANAS_INTRO_1
= 0,
43
SAY_SYLVANAS_INTRO_2
= 1,
44
SAY_SYLVANAS_INTRO_3
= 2,
45
SAY_SYLVANAS_INTRO_4
= 3,
46
SAY_SYLVANAS_INTRO_5
= 4,
47
SAY_SYLVANAS_INTRO_6
= 5,
48
};
49
50
enum
Misc
51
{
52
GOSSIP_SPEECHINTRO
= 13525,
53
ACTION_INTRO
,
54
};
55
56
enum
Phase
57
{
58
PHASE_NORMAL
,
59
PHASE_INTRO
,
60
};
61
62
class
npc_sylvanas_fos
:
public
CreatureScript
63
{
64
public
:
65
npc_sylvanas_fos
() :
CreatureScript
(
"npc_sylvanas_fos"
) { }
66
67
struct
npc_sylvanas_fosAI
:
public
ScriptedAI
68
{
69
npc_sylvanas_fosAI
(
Creature
* creature) :
ScriptedAI
(creature)
70
{
71
instance
=
me
->GetInstanceScript();
72
me
->SetFlag(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_GOSSIP
);
73
}
74
75
InstanceScript
*
instance
;
76
77
EventMap
events
;
78
Phase
phase
;
79
80
void
Reset
()
OVERRIDE
81
{
82
events
.Reset();
83
phase
=
PHASE_NORMAL
;
84
}
85
86
void
DoAction
(
int32
actionId)
OVERRIDE
87
{
88
switch
(actionId)
89
{
90
case
ACTION_INTRO
:
91
{
92
phase
=
PHASE_INTRO
;
93
me
->RemoveFlag(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_GOSSIP
);
94
events
.Reset();
95
events
.ScheduleEvent(
EVENT_INTRO_1
, 1000);
96
}
97
}
98
}
99
100
void
UpdateAI
(
uint32
diff)
OVERRIDE
101
{
102
if
(
phase
==
PHASE_INTRO
)
103
{
104
if
(!
instance
)
105
return
;
106
107
events
.Update(diff);
108
switch
(
events
.ExecuteEvent())
109
{
110
case
EVENT_INTRO_1
:
111
Talk
(
SAY_SYLVANAS_INTRO_1
);
112
events
.ScheduleEvent(
EVENT_INTRO_2
, 11500);
113
break
;
114
115
case
EVENT_INTRO_2
:
116
Talk
(
SAY_SYLVANAS_INTRO_2
);
117
events
.ScheduleEvent(
EVENT_INTRO_3
, 10500);
118
break
;
119
120
case
EVENT_INTRO_3
:
121
Talk
(
SAY_SYLVANAS_INTRO_3
);
122
events
.ScheduleEvent(
EVENT_INTRO_4
, 9500);
123
break
;
124
125
case
EVENT_INTRO_4
:
126
Talk
(
SAY_SYLVANAS_INTRO_4
);
127
events
.ScheduleEvent(
EVENT_INTRO_5
, 10500);
128
break
;
129
130
case
EVENT_INTRO_5
:
131
Talk
(
SAY_SYLVANAS_INTRO_5
);
132
events
.ScheduleEvent(
EVENT_INTRO_6
, 9500);
133
break
;
134
135
case
EVENT_INTRO_6
:
136
Talk
(
SAY_SYLVANAS_INTRO_6
);
137
// End of Intro
138
phase
=
PHASE_NORMAL
;
139
break
;
140
}
141
}
142
143
//Return since we have no target
144
if
(!
UpdateVictim
())
145
return
;
146
147
events
.Update(diff);
148
DoMeleeAttackIfReady
();
149
}
150
};
151
152
bool
OnGossipHello
(
Player
* player,
Creature
* creature)
OVERRIDE
153
{
154
if
(creature->IsQuestGiver())
155
player->PrepareQuestMenu(creature->GetGUID());
156
157
if
(creature->GetEntry() ==
NPC_JAINA_PART1
)
158
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_JAINA_ITEM
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+1);
159
else
160
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_SYLVANAS_ITEM
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+1);
161
162
player->SEND_GOSSIP_MENU(
DEFAULT_GOSSIP_MESSAGE
, creature->GetGUID());
163
return
true
;
164
}
165
166
bool
OnGossipSelect
(
Player
* player,
Creature
* creature,
uint32
/*sender*/
,
uint32
action)
OVERRIDE
167
{
168
player->PlayerTalkClass->ClearMenus();
169
switch
(action)
170
{
171
case
GOSSIP_ACTION_INFO_DEF
+1:
172
player->CLOSE_GOSSIP_MENU();
173
174
if
(creature->AI())
175
creature->AI()->DoAction(
ACTION_INTRO
);
176
break
;
177
}
178
179
return
true
;
180
}
181
182
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
183
{
184
return
new
npc_sylvanas_fosAI
(creature);
185
}
186
};
187
188
class
npc_jaina_fos
:
public
CreatureScript
189
{
190
public
:
191
npc_jaina_fos
() :
CreatureScript
(
"npc_jaina_fos"
) { }
192
193
struct
npc_jaina_fosAI
:
public
ScriptedAI
194
{
195
npc_jaina_fosAI
(
Creature
* creature) :
ScriptedAI
(creature)
196
{
197
instance
=
me
->GetInstanceScript();
198
me
->SetFlag(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_GOSSIP
);
199
}
200
201
InstanceScript
*
instance
;
202
203
EventMap
events
;
204
Phase
phase
;
205
206
void
Reset
()
OVERRIDE
207
{
208
events
.Reset();
209
phase
=
PHASE_NORMAL
;
210
}
211
212
void
DoAction
(
int32
actionId)
OVERRIDE
213
{
214
switch
(actionId)
215
{
216
case
ACTION_INTRO
:
217
{
218
phase
=
PHASE_INTRO
;
219
me
->RemoveFlag(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_GOSSIP
);
220
events
.Reset();
221
events
.ScheduleEvent(
EVENT_INTRO_1
, 1000);
222
}
223
}
224
}
225
226
void
UpdateAI
(
uint32
diff)
OVERRIDE
227
{
228
if
(
phase
==
PHASE_INTRO
)
229
{
230
if
(!
instance
)
231
return
;
232
233
events
.Update(diff);
234
switch
(
events
.ExecuteEvent())
235
{
236
case
EVENT_INTRO_1
:
237
Talk
(
SAY_JAINA_INTRO_1
);
238
events
.ScheduleEvent(
EVENT_INTRO_2
, 8000);
239
break
;
240
241
case
EVENT_INTRO_2
:
242
Talk
(
SAY_JAINA_INTRO_2
);
243
events
.ScheduleEvent(
EVENT_INTRO_3
, 8500);
244
break
;
245
246
case
EVENT_INTRO_3
:
247
Talk
(
SAY_JAINA_INTRO_3
);
248
events
.ScheduleEvent(
EVENT_INTRO_4
, 8000);
249
break
;
250
251
case
EVENT_INTRO_4
:
252
Talk
(
SAY_JAINA_INTRO_4
);
253
events
.ScheduleEvent(
EVENT_INTRO_5
, 10000);
254
break
;
255
256
case
EVENT_INTRO_5
:
257
Talk
(
SAY_JAINA_INTRO_5
);
258
events
.ScheduleEvent(
EVENT_INTRO_6
, 8000);
259
break
;
260
261
case
EVENT_INTRO_6
:
262
Talk
(
SAY_JAINA_INTRO_6
);
263
events
.ScheduleEvent(
EVENT_INTRO_7
, 12000);
264
break
;
265
266
case
EVENT_INTRO_7
:
267
Talk
(
SAY_JAINA_INTRO_7
);
268
events
.ScheduleEvent(
EVENT_INTRO_8
, 8000);
269
break
;
270
271
case
EVENT_INTRO_8
:
272
Talk
(
SAY_JAINA_INTRO_8
);
273
// End of Intro
274
phase
=
PHASE_NORMAL
;
275
break
;
276
}
277
}
278
279
//Return since we have no target
280
if
(!
UpdateVictim
())
281
return
;
282
283
events
.Update(diff);
284
285
DoMeleeAttackIfReady
();
286
}
287
};
288
289
bool
OnGossipHello
(
Player
* player,
Creature
* creature)
OVERRIDE
290
{
291
if
(creature->IsQuestGiver())
292
player->PrepareQuestMenu(creature->GetGUID());
293
294
if
(creature->GetEntry() ==
NPC_JAINA_PART1
)
295
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_JAINA_ITEM
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+1);
296
else
297
player->ADD_GOSSIP_ITEM(
GOSSIP_ICON_CHAT
,
GOSSIP_SYLVANAS_ITEM
,
GOSSIP_SENDER_MAIN
,
GOSSIP_ACTION_INFO_DEF
+1);
298
299
player->SEND_GOSSIP_MENU(
DEFAULT_GOSSIP_MESSAGE
, creature->GetGUID());
300
return
true
;
301
}
302
303
bool
OnGossipSelect
(
Player
* player,
Creature
* creature,
uint32
/*sender*/
,
uint32
action)
OVERRIDE
304
{
305
player->PlayerTalkClass->ClearMenus();
306
switch
(action)
307
{
308
case
GOSSIP_ACTION_INFO_DEF
+1:
309
player->CLOSE_GOSSIP_MENU();
310
311
if
(creature->AI())
312
creature->AI()->DoAction(
ACTION_INTRO
);
313
break
;
314
}
315
316
return
true
;
317
}
318
319
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
320
{
321
return
new
npc_jaina_fosAI
(creature);
322
}
323
};
324
325
void
AddSC_forge_of_souls
()
326
{
327
new
npc_sylvanas_fos
();
328
new
npc_jaina_fos
();
329
}
int32
std::int32_t int32
Definition
Define.h:73
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
DEFAULT_GOSSIP_MESSAGE
#define DEFAULT_GOSSIP_MESSAGE
Definition
GossipDef.h:16
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
UNIT_NPC_FLAG_GOSSIP
@ UNIT_NPC_FLAG_GOSSIP
Definition
Unit.h:687
UNIT_FIELD_NPC_FLAGS
@ UNIT_FIELD_NPC_FLAGS
Definition
UpdateFields.h:107
Events
Events
Definition
alterac_valley.cpp:40
ACTION_INTRO
@ ACTION_INTRO
Definition
boss_alizabal.cpp:35
PHASE_INTRO
@ PHASE_INTRO
Definition
boss_anraphet.cpp:81
EVENT_NONE
@ EVENT_NONE
Definition
boss_felmyst.cpp:84
Phase
Phase
Definition
boss_kiljaeden.cpp:142
PHASE_NORMAL
@ PHASE_NORMAL
Definition
boss_kiljaeden.cpp:144
Misc
Misc
Definition
boss_occuthar.cpp:37
EVENT_INTRO_4
@ EVENT_INTRO_4
Definition
boss_ragnaros.cpp:59
EVENT_INTRO_1
@ EVENT_INTRO_1
Definition
boss_ragnaros.cpp:56
EVENT_INTRO_2
@ EVENT_INTRO_2
Definition
boss_ragnaros.cpp:57
EVENT_INTRO_5
@ EVENT_INTRO_5
Definition
boss_ragnaros.cpp:60
EVENT_INTRO_3
@ EVENT_INTRO_3
Definition
boss_ragnaros.cpp:58
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::Talk
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
Definition
CreatureAI.cpp:28
CreatureAI::UpdateVictim
bool UpdateVictim()
Definition
CreatureAI.cpp:192
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
EventMap
Definition
CreatureAIImpl.h:304
InstanceScript
Definition
InstanceScript.h:123
Player
Definition
Player.h:1289
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
npc_jaina_fos
Definition
forge_of_souls.cpp:189
npc_jaina_fos::OnGossipHello
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
Definition
forge_of_souls.cpp:289
npc_jaina_fos::OnGossipSelect
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
Definition
forge_of_souls.cpp:303
npc_jaina_fos::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
forge_of_souls.cpp:319
npc_jaina_fos::npc_jaina_fos
npc_jaina_fos()
Definition
forge_of_souls.cpp:191
npc_sylvanas_fos
Definition
forge_of_souls.cpp:63
npc_sylvanas_fos::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
forge_of_souls.cpp:182
npc_sylvanas_fos::npc_sylvanas_fos
npc_sylvanas_fos()
Definition
forge_of_souls.cpp:65
npc_sylvanas_fos::OnGossipHello
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
Definition
forge_of_souls.cpp:152
npc_sylvanas_fos::OnGossipSelect
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
Definition
forge_of_souls.cpp:166
GOSSIP_SYLVANAS_ITEM
#define GOSSIP_SYLVANAS_ITEM
Definition
forge_of_souls.cpp:28
GOSSIP_SPEECHINTRO
@ GOSSIP_SPEECHINTRO
Definition
forge_of_souls.cpp:52
ACTION_INTRO
@ ACTION_INTRO
Definition
forge_of_souls.cpp:53
SAY_JAINA_INTRO_4
@ SAY_JAINA_INTRO_4
Definition
forge_of_souls.cpp:36
SAY_SYLVANAS_INTRO_3
@ SAY_SYLVANAS_INTRO_3
Definition
forge_of_souls.cpp:44
SAY_JAINA_INTRO_5
@ SAY_JAINA_INTRO_5
Definition
forge_of_souls.cpp:37
SAY_SYLVANAS_INTRO_4
@ SAY_SYLVANAS_INTRO_4
Definition
forge_of_souls.cpp:45
SAY_JAINA_INTRO_6
@ SAY_JAINA_INTRO_6
Definition
forge_of_souls.cpp:38
SAY_JAINA_INTRO_2
@ SAY_JAINA_INTRO_2
Definition
forge_of_souls.cpp:34
SAY_JAINA_INTRO_1
@ SAY_JAINA_INTRO_1
Definition
forge_of_souls.cpp:33
SAY_JAINA_INTRO_8
@ SAY_JAINA_INTRO_8
Definition
forge_of_souls.cpp:40
SAY_SYLVANAS_INTRO_5
@ SAY_SYLVANAS_INTRO_5
Definition
forge_of_souls.cpp:46
SAY_SYLVANAS_INTRO_2
@ SAY_SYLVANAS_INTRO_2
Definition
forge_of_souls.cpp:43
SAY_SYLVANAS_INTRO_6
@ SAY_SYLVANAS_INTRO_6
Definition
forge_of_souls.cpp:47
SAY_JAINA_INTRO_7
@ SAY_JAINA_INTRO_7
Definition
forge_of_souls.cpp:39
SAY_JAINA_INTRO_3
@ SAY_JAINA_INTRO_3
Definition
forge_of_souls.cpp:35
SAY_SYLVANAS_INTRO_1
@ SAY_SYLVANAS_INTRO_1
Definition
forge_of_souls.cpp:42
AddSC_forge_of_souls
void AddSC_forge_of_souls()
Definition
forge_of_souls.cpp:325
GOSSIP_JAINA_ITEM
#define GOSSIP_JAINA_ITEM
Definition
forge_of_souls.cpp:29
Phase
Phase
Definition
forge_of_souls.cpp:57
PHASE_INTRO
@ PHASE_INTRO
Definition
forge_of_souls.cpp:59
PHASE_NORMAL
@ PHASE_NORMAL
Definition
forge_of_souls.cpp:58
EVENT_INTRO_4
@ EVENT_INTRO_4
Definition
forge_of_souls.cpp:20
EVENT_INTRO_1
@ EVENT_INTRO_1
Definition
forge_of_souls.cpp:17
EVENT_INTRO_2
@ EVENT_INTRO_2
Definition
forge_of_souls.cpp:18
EVENT_INTRO_5
@ EVENT_INTRO_5
Definition
forge_of_souls.cpp:21
EVENT_INTRO_8
@ EVENT_INTRO_8
Definition
forge_of_souls.cpp:24
EVENT_INTRO_6
@ EVENT_INTRO_6
Definition
forge_of_souls.cpp:22
EVENT_INTRO_7
@ EVENT_INTRO_7
Definition
forge_of_souls.cpp:23
EVENT_INTRO_3
@ EVENT_INTRO_3
Definition
forge_of_souls.cpp:19
forge_of_souls.h
NPC_JAINA_PART1
@ NPC_JAINA_PART1
Definition
forge_of_souls.h:26
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
Yells
Definition
boss_illidan.cpp:256
npc_jaina_fos::npc_jaina_fosAI
Definition
forge_of_souls.cpp:194
npc_jaina_fos::npc_jaina_fosAI::instance
InstanceScript * instance
Definition
forge_of_souls.cpp:201
npc_jaina_fos::npc_jaina_fosAI::events
EventMap events
Definition
forge_of_souls.cpp:203
npc_jaina_fos::npc_jaina_fosAI::DoAction
void DoAction(int32 actionId) OVERRIDE
Definition
forge_of_souls.cpp:212
npc_jaina_fos::npc_jaina_fosAI::Reset
void Reset() OVERRIDE
Definition
forge_of_souls.cpp:206
npc_jaina_fos::npc_jaina_fosAI::phase
Phase phase
Definition
forge_of_souls.cpp:204
npc_jaina_fos::npc_jaina_fosAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
forge_of_souls.cpp:226
npc_jaina_fos::npc_jaina_fosAI::npc_jaina_fosAI
npc_jaina_fosAI(Creature *creature)
Definition
forge_of_souls.cpp:195
npc_sylvanas_fos::npc_sylvanas_fosAI
Definition
forge_of_souls.cpp:68
npc_sylvanas_fos::npc_sylvanas_fosAI::Reset
void Reset() OVERRIDE
Definition
forge_of_souls.cpp:80
npc_sylvanas_fos::npc_sylvanas_fosAI::npc_sylvanas_fosAI
npc_sylvanas_fosAI(Creature *creature)
Definition
forge_of_souls.cpp:69
npc_sylvanas_fos::npc_sylvanas_fosAI::phase
Phase phase
Definition
forge_of_souls.cpp:78
npc_sylvanas_fos::npc_sylvanas_fosAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
forge_of_souls.cpp:100
npc_sylvanas_fos::npc_sylvanas_fosAI::instance
InstanceScript * instance
Definition
forge_of_souls.cpp:75
npc_sylvanas_fos::npc_sylvanas_fosAI::events
EventMap events
Definition
forge_of_souls.cpp:77
npc_sylvanas_fos::npc_sylvanas_fosAI::DoAction
void DoAction(int32 actionId) OVERRIDE
Definition
forge_of_souls.cpp:86
src
server
scripts
Northrend
FrozenHalls
ForgeOfSouls
forge_of_souls.cpp
Generated on
for Project SkyFire Core by
1.17.0