Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
zone_eversong_woods.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
/* ScriptData
7
SDName: Eversong_Woods
8
SD%Complete: 100
9
SDComment: Quest support: 8488, 8490
10
SDCategory: Eversong Woods
11
EndScriptData */
12
13
/* ContentData
14
npc_apprentice_mirveda
15
npc_infused_crystal
16
EndContentData */
17
18
#include "
ScriptMgr.h
"
19
#include "
ScriptedCreature.h
"
20
#include "
ScriptedGossip.h
"
21
#include "
ScriptedEscortAI.h
"
22
#include "
Player.h
"
23
24
enum
UnexpectedResults
25
{
26
// Quest
27
QUEST_UNEXPECTED_RESULT
= 8488,
28
29
// Creatures
30
NPC_GHARZUL
= 15958,
31
NPC_ANGERSHADE
= 15656
32
};
33
34
class
npc_apprentice_mirveda
:
public
CreatureScript
35
{
36
public
:
37
npc_apprentice_mirveda
() :
CreatureScript
(
"npc_apprentice_mirveda"
) { }
38
39
bool
OnQuestAccept
(
Player
* player,
Creature
* creature,
Quest
const
* quest)
OVERRIDE
40
{
41
if
(quest->GetQuestId() ==
QUEST_UNEXPECTED_RESULT
)
42
{
43
CAST_AI
(
npc_apprentice_mirveda::npc_apprentice_mirvedaAI
, creature->AI())->Summon =
true
;
44
CAST_AI
(
npc_apprentice_mirveda::npc_apprentice_mirvedaAI
, creature->AI())->PlayerGUID = player->GetGUID();
45
}
46
return
true
;
47
}
48
49
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
50
{
51
return
new
npc_apprentice_mirvedaAI
(creature);
52
}
53
54
struct
npc_apprentice_mirvedaAI
:
public
ScriptedAI
55
{
56
npc_apprentice_mirvedaAI
(
Creature
* creature) :
ScriptedAI
(creature),
Summons
(
me
) { }
57
58
uint32
KillCount
;
59
uint64
PlayerGUID
;
60
bool
Summon
;
61
SummonList
Summons
;
62
63
void
Reset
()
OVERRIDE
64
{
65
KillCount
= 0;
66
PlayerGUID
= 0;
67
Summons
.DespawnAll();
68
Summon
=
false
;
69
}
70
71
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
{ }
72
73
void
JustSummoned
(
Creature
* summoned)
OVERRIDE
74
{
75
summoned->AI()->AttackStart(
me
);
76
Summons
.Summon(summoned);
77
}
78
79
void
SummonedCreatureDespawn
(
Creature
* summoned)
OVERRIDE
80
{
81
Summons
.Despawn(summoned);
82
++
KillCount
;
83
}
84
85
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
86
{
87
if
(
PlayerGUID
)
88
if
(
Player
* player =
ObjectAccessor::GetPlayer
(*
me
,
PlayerGUID
))
89
player->FailQuest(
QUEST_UNEXPECTED_RESULT
);
90
}
91
92
void
UpdateAI
(
uint32
/*diff*/
)
OVERRIDE
93
{
94
if
(
KillCount
>= 3 &&
PlayerGUID
)
95
if
(
Player
* player =
ObjectAccessor::GetPlayer
(*
me
,
PlayerGUID
))
96
player->CompleteQuest(
QUEST_UNEXPECTED_RESULT
);
97
98
if
(
Summon
)
99
{
100
me
->SummonCreature(
NPC_GHARZUL
, 8745, -7134.32f, 35.22f, 0,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
, 4000);
101
me
->SummonCreature(
NPC_ANGERSHADE
, 8745, -7134.32f, 35.22f, 0,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
, 4000);
102
me
->SummonCreature(
NPC_ANGERSHADE
, 8745, -7134.32f, 35.22f, 0,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
, 4000);
103
Summon
=
false
;
104
}
105
}
106
};
107
};
108
109
/*######
110
## npc_infused_crystal
111
######*/
112
113
enum
InfusedCrystal
114
{
115
// Quest
116
QUEST_POWERING_OUR_DEFENSES
= 8490,
117
118
// Says
119
EMOTE
= 0,
120
121
// Creatures
122
NPC_ENRAGED_WRAITH
= 17086
123
};
124
125
struct
Location
126
{
127
float
x
,
y
,
z
;
128
};
129
130
static
Location
SpawnLocations
[] =
131
{
132
{8270.68f, -7188.53f, 139.619f},
133
{8284.27f, -7187.78f, 139.603f},
134
{8297.43f, -7193.53f, 139.603f},
135
{8303.5f, -7201.96f, 139.577f},
136
{8273.22f, -7241.82f, 139.382f},
137
{8254.89f, -7222.12f, 139.603f},
138
{8278.51f, -7242.13f, 139.162f},
139
{8267.97f, -7239.17f, 139.517f}
140
};
141
142
class
npc_infused_crystal
:
public
CreatureScript
143
{
144
public
:
145
npc_infused_crystal
() :
CreatureScript
(
"npc_infused_crystal"
) { }
146
147
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
148
{
149
return
new
npc_infused_crystalAI
(creature);
150
}
151
152
struct
npc_infused_crystalAI
:
public
ScriptedAI
153
{
154
npc_infused_crystalAI
(
Creature
* creature) :
ScriptedAI
(creature)
155
{
156
SetCombatMovement
(
false
);
157
}
158
159
uint32
EndTimer
;
160
uint32
WaveTimer
;
161
bool
Completed
;
162
bool
Progress
;
163
uint64
PlayerGUID
;
164
165
void
Reset
()
OVERRIDE
166
{
167
EndTimer
= 0;
168
Completed
=
false
;
169
Progress
=
false
;
170
PlayerGUID
= 0;
171
WaveTimer
= 0;
172
}
173
174
void
MoveInLineOfSight
(
Unit
* who)
OVERRIDE
175
176
{
177
if
(!
Progress
&& who->GetTypeId() ==
TypeID::TYPEID_PLAYER
&&
me
->IsWithinDistInMap(who, 10.0f))
178
{
179
if
(who->ToPlayer()->GetQuestStatus(
QUEST_POWERING_OUR_DEFENSES
) ==
QUEST_STATUS_INCOMPLETE
)
180
{
181
PlayerGUID
= who->GetGUID();
182
WaveTimer
= 1000;
183
EndTimer
= 60000;
184
Progress
=
true
;
185
}
186
}
187
}
188
189
void
JustSummoned
(
Creature
* summoned)
OVERRIDE
190
{
191
summoned->AI()->AttackStart(
me
);
192
}
193
194
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
195
{
196
if
(
PlayerGUID
&& !
Completed
)
197
if
(
Player
* player =
ObjectAccessor::GetPlayer
(*
me
,
PlayerGUID
))
198
player->FailQuest(
QUEST_POWERING_OUR_DEFENSES
);
199
}
200
201
void
UpdateAI
(
uint32
diff)
OVERRIDE
202
{
203
if
(
EndTimer
< diff &&
Progress
)
204
{
205
Talk
(
EMOTE
);
206
Completed
=
true
;
207
if
(
PlayerGUID
)
208
if
(
Player
* player =
ObjectAccessor::GetPlayer
(*
me
,
PlayerGUID
))
209
player->CompleteQuest(
QUEST_POWERING_OUR_DEFENSES
);
210
211
me
->DealDamage(
me
,
me
->GetHealth(), NULL,
DIRECT_DAMAGE
,
SPELL_SCHOOL_MASK_NORMAL
, NULL,
false
);
212
me
->RemoveCorpse();
213
}
else
EndTimer
-= diff;
214
215
if
(
WaveTimer
< diff && !
Completed
&&
Progress
)
216
{
217
uint32
ran1 = rand()%8;
218
uint32
ran2 = rand()%8;
219
uint32
ran3 = rand()%8;
220
me
->SummonCreature(
NPC_ENRAGED_WRAITH
,
SpawnLocations
[ran1].x,
SpawnLocations
[ran1].y,
SpawnLocations
[ran1].z, 0,
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
, 10000);
221
me
->SummonCreature(
NPC_ENRAGED_WRAITH
,
SpawnLocations
[ran2].x,
SpawnLocations
[ran2].y,
SpawnLocations
[ran2].z, 0,
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
, 10000);
222
me
->SummonCreature(
NPC_ENRAGED_WRAITH
,
SpawnLocations
[ran3].x,
SpawnLocations
[ran3].y,
SpawnLocations
[ran3].z, 0,
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
, 10000);
223
WaveTimer
= 30000;
224
}
else
WaveTimer
-= diff;
225
}
226
};
227
};
228
229
void
AddSC_eversong_woods
()
230
{
231
new
npc_apprentice_mirveda
();
232
new
npc_infused_crystal
();
233
}
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
uint64
std::uint64_t uint64
Definition
Define.h:76
TypeID::TYPEID_PLAYER
@ TYPEID_PLAYER
Definition
Object.h:55
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
@ TEMPSUMMON_CORPSE_DESPAWN
Definition
Object.h:72
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
@ TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
Definition
Object.h:69
Player.h
QUEST_STATUS_INCOMPLETE
@ QUEST_STATUS_INCOMPLETE
Definition
QuestDef.h:89
ScriptMgr.h
ScriptedCreature.h
CAST_AI
#define CAST_AI(a, b)
Definition
ScriptedCreature.h:14
ScriptedEscortAI.h
ScriptedGossip.h
SPELL_SCHOOL_MASK_NORMAL
@ SPELL_SCHOOL_MASK_NORMAL
Definition
SharedDefines.h:270
DIRECT_DAMAGE
@ DIRECT_DAMAGE
Definition
Unit.h:614
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::Talk
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
Definition
CreatureAI.cpp:28
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
ObjectAccessor::GetPlayer
static Player * GetPlayer(WorldObject const &, uint64 guid)
Definition
ObjectAccessor.cpp:219
Player
Definition
Player.h:1289
Quest
Definition
QuestDef.h:255
SummonList
Definition
ScriptedCreature.h:19
Unit
Definition
Unit.h:1367
npc_apprentice_mirveda
Definition
zone_eversong_woods.cpp:35
npc_apprentice_mirveda::npc_apprentice_mirveda
npc_apprentice_mirveda()
Definition
zone_eversong_woods.cpp:37
npc_apprentice_mirveda::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
zone_eversong_woods.cpp:49
npc_apprentice_mirveda::OnQuestAccept
bool OnQuestAccept(Player *player, Creature *creature, Quest const *quest) OVERRIDE
Definition
zone_eversong_woods.cpp:39
npc_infused_crystal
Definition
zone_eversong_woods.cpp:143
npc_infused_crystal::npc_infused_crystal
npc_infused_crystal()
Definition
zone_eversong_woods.cpp:145
npc_infused_crystal::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
zone_eversong_woods.cpp:147
Location
Definition
chapter5.cpp:209
Location::y
float y
Definition
chapter5.cpp:210
Location::z
float z
Definition
chapter5.cpp:210
Location::x
float x
Definition
chapter5.cpp:210
ScriptedAI::SetCombatMovement
void SetCombatMovement(bool allowMovement)
Definition
ScriptedCreature.cpp:394
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
npc_apprentice_mirveda::npc_apprentice_mirvedaAI
Definition
zone_eversong_woods.cpp:55
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::Summons
SummonList Summons
Definition
zone_eversong_woods.cpp:61
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::UpdateAI
void UpdateAI(uint32) OVERRIDE
== Triggered Actions Requested ==================
Definition
zone_eversong_woods.cpp:92
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::PlayerGUID
uint64 PlayerGUID
Definition
zone_eversong_woods.cpp:59
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::KillCount
uint32 KillCount
Definition
zone_eversong_woods.cpp:58
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::JustSummoned
void JustSummoned(Creature *summoned) OVERRIDE
Definition
zone_eversong_woods.cpp:73
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
zone_eversong_woods.cpp:71
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::npc_apprentice_mirvedaAI
npc_apprentice_mirvedaAI(Creature *creature)
Definition
zone_eversong_woods.cpp:56
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::SummonedCreatureDespawn
void SummonedCreatureDespawn(Creature *summoned) OVERRIDE
Definition
zone_eversong_woods.cpp:79
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::Reset
void Reset() OVERRIDE
Definition
zone_eversong_woods.cpp:63
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::Summon
bool Summon
Definition
zone_eversong_woods.cpp:60
npc_apprentice_mirveda::npc_apprentice_mirvedaAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
zone_eversong_woods.cpp:85
npc_infused_crystal::npc_infused_crystalAI
Definition
zone_eversong_woods.cpp:153
npc_infused_crystal::npc_infused_crystalAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *who) OVERRIDE
Definition
zone_eversong_woods.cpp:174
npc_infused_crystal::npc_infused_crystalAI::Completed
bool Completed
Definition
zone_eversong_woods.cpp:161
npc_infused_crystal::npc_infused_crystalAI::Reset
void Reset() OVERRIDE
Definition
zone_eversong_woods.cpp:165
npc_infused_crystal::npc_infused_crystalAI::EndTimer
uint32 EndTimer
Definition
zone_eversong_woods.cpp:159
npc_infused_crystal::npc_infused_crystalAI::WaveTimer
uint32 WaveTimer
Definition
zone_eversong_woods.cpp:160
npc_infused_crystal::npc_infused_crystalAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
zone_eversong_woods.cpp:194
npc_infused_crystal::npc_infused_crystalAI::Progress
bool Progress
Definition
zone_eversong_woods.cpp:162
npc_infused_crystal::npc_infused_crystalAI::JustSummoned
void JustSummoned(Creature *summoned) OVERRIDE
Definition
zone_eversong_woods.cpp:189
npc_infused_crystal::npc_infused_crystalAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
zone_eversong_woods.cpp:201
npc_infused_crystal::npc_infused_crystalAI::npc_infused_crystalAI
npc_infused_crystalAI(Creature *creature)
Definition
zone_eversong_woods.cpp:154
npc_infused_crystal::npc_infused_crystalAI::PlayerGUID
uint64 PlayerGUID
Definition
zone_eversong_woods.cpp:163
SpawnLocations
static Location SpawnLocations[]
Definition
zone_eversong_woods.cpp:130
AddSC_eversong_woods
void AddSC_eversong_woods()
Definition
zone_eversong_woods.cpp:229
InfusedCrystal
InfusedCrystal
Definition
zone_eversong_woods.cpp:114
EMOTE
@ EMOTE
Definition
zone_eversong_woods.cpp:119
QUEST_POWERING_OUR_DEFENSES
@ QUEST_POWERING_OUR_DEFENSES
Definition
zone_eversong_woods.cpp:116
NPC_ENRAGED_WRAITH
@ NPC_ENRAGED_WRAITH
Definition
zone_eversong_woods.cpp:122
UnexpectedResults
UnexpectedResults
Definition
zone_eversong_woods.cpp:25
NPC_ANGERSHADE
@ NPC_ANGERSHADE
Definition
zone_eversong_woods.cpp:31
NPC_GHARZUL
@ NPC_GHARZUL
Definition
zone_eversong_woods.cpp:30
QUEST_UNEXPECTED_RESULT
@ QUEST_UNEXPECTED_RESULT
Definition
zone_eversong_woods.cpp:27
src
server
scripts
EasternKingdoms
zone_eversong_woods.cpp
Generated on
for Project SkyFire Core by
1.17.0