Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_warp_splinter.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: Boss_Warp_Splinter
8
SD%Complete: 80
9
SDComment: Includes Sapling (need some better control with these).
10
SDCategory: Tempest Keep, The Botanica
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
the_botanica.h
"
16
17
enum
Says
18
{
19
SAY_AGGRO
= 0,
20
SAY_SLAY
= 1,
21
SAY_SUMMON
= 2,
22
SAY_DEATH
= 3
23
};
24
25
enum
Spells
26
{
27
WAR_STOMP
= 34716,
28
SUMMON_TREANTS
= 34727,
// DBC: 34727, 34731, 34733, 34734, 34736, 34739, 34741 (with Ancestral Life spell 34742) // won't work (guardian summon)
29
ARCANE_VOLLEY
= 36705,
30
ARCANE_VOLLEY_H
= 39133,
31
SPELL_HEAL_FATHER
= 6262
32
};
33
34
enum
Misc
35
{
36
CREATURE_TREANT
= 19949,
37
};
38
39
float
treant_pos
[6][3] =
40
{
41
{24.301233f, 427.221100f, -27.060635f},
42
{16.795492f, 359.678802f, -27.355425f},
43
{53.493484f, 345.381470f, -26.196192f},
44
{61.867096f, 439.362732f, -25.921030f},
45
{109.861877f, 423.201630f, -27.356019f},
46
{106.780159f, 355.582581f, -27.593357f}
47
};
48
49
/*#####
50
# npc_treant (Sapling)
51
#####*/
52
class
npc_warp_splinter_treant
:
public
CreatureScript
53
{
54
public
:
55
npc_warp_splinter_treant
() :
CreatureScript
(
"npc_warp_splinter_treant"
) { }
56
57
struct
npc_warp_splinter_treantAI
:
public
ScriptedAI
58
{
59
npc_warp_splinter_treantAI
(
Creature
* creature) :
ScriptedAI
(creature)
60
{
61
WarpGuid
= 0;
62
}
63
64
uint64
WarpGuid
;
65
uint32
check_Timer
;
66
67
void
Reset
()
OVERRIDE
68
{
69
check_Timer
= 0;
70
}
71
72
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
{ }
73
74
void
MoveInLineOfSight
(
Unit
*
/*who*/
)
OVERRIDE
{ }
75
76
77
void
UpdateAI
(
uint32
diff)
OVERRIDE
78
{
79
if
(!
UpdateVictim
())
80
{
81
if
(
WarpGuid
&&
check_Timer
<= diff)
82
{
83
if
(
Unit
* Warp =
Unit::GetUnit
(*
me
,
WarpGuid
))
84
{
85
if
(
me
->IsWithinMeleeRange(Warp, 2.5f))
86
{
87
int32
CurrentHP_Treant = (
int32
)
me
->GetHealth();
88
Warp->CastCustomSpell(Warp,
SPELL_HEAL_FATHER
, &CurrentHP_Treant, 0, 0,
true
, 0, 0,
me
->GetGUID());
89
me
->DealDamage(
me
,
me
->GetHealth(), NULL,
DIRECT_DAMAGE
,
SPELL_SCHOOL_MASK_NORMAL
, NULL,
false
);
90
return
;
91
}
92
me
->GetMotionMaster()->MoveFollow(Warp, 0, 0);
93
}
94
check_Timer
= 1000;
95
}
96
else
97
check_Timer
-= diff;
98
return
;
99
}
100
101
if
(
me
->GetVictim()->GetGUID() !=
WarpGuid
)
102
DoMeleeAttackIfReady
();
103
}
104
};
105
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
106
{
107
return
new
npc_warp_splinter_treantAI
(creature);
108
}
109
};
110
111
/*#####
112
# boss_warp_splinter
113
#####*/
114
class
boss_warp_splinter
:
public
CreatureScript
115
{
116
public
:
117
boss_warp_splinter
() :
CreatureScript
(
"boss_warp_splinter"
) { }
118
119
struct
boss_warp_splinterAI
:
public
BossAI
120
{
121
boss_warp_splinterAI
(
Creature
* creature) :
BossAI
(creature,
DATA_WARP_SPLINTER
)
122
{
123
Treant_Spawn_Pos_X
= creature->
GetPositionX
();
124
Treant_Spawn_Pos_Y
= creature->
GetPositionY
();
125
}
126
127
uint32
War_Stomp_Timer
;
128
uint32
Summon_Treants_Timer
;
129
uint32
Arcane_Volley_Timer
;
130
131
float
Treant_Spawn_Pos_X
;
132
float
Treant_Spawn_Pos_Y
;
133
134
void
Reset
()
OVERRIDE
135
{
136
War_Stomp_Timer
= std::rand() % 40000 + 25000;
137
Summon_Treants_Timer
= 45000;
138
Arcane_Volley_Timer
= std::rand() % 20000 + 8000;
139
140
me
->SetSpeed(
MOVE_RUN
, 0.7f,
true
);
141
}
142
143
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
144
{
145
Talk
(
SAY_AGGRO
);
146
}
147
148
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
149
{
150
Talk
(
SAY_SLAY
);
151
}
152
153
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
154
{
155
Talk
(
SAY_DEATH
);
156
}
157
158
void
SummonTreants
()
159
{
160
for
(
uint8
i = 0; i < 6; ++i)
161
{
162
float
angle = (
M_PI
/ 3) * i;
163
164
float
X =
Treant_Spawn_Pos_X
+ 50.0f * std::cos(angle);
165
float
Y =
Treant_Spawn_Pos_Y
+ 50.0f * std::sin(angle);
166
float
O = -
me
->GetAngle(X, Y);
167
168
if
(
Creature
* pTreant =
me
->SummonCreature(
CREATURE_TREANT
,
treant_pos
[i][0],
treant_pos
[i][1],
treant_pos
[i][2], O,
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
, 25000))
169
CAST_AI
(
npc_warp_splinter_treant::npc_warp_splinter_treantAI
, pTreant->AI())->WarpGuid =
me
->GetGUID();
170
}
171
Talk
(
SAY_SUMMON
);
172
}
173
174
void
UpdateAI
(
uint32
diff)
OVERRIDE
175
{
176
if
(!
UpdateVictim
())
177
return
;
178
179
//Check for War Stomp
180
if
(
War_Stomp_Timer
<= diff)
181
{
182
DoCastVictim
(
WAR_STOMP
);
183
War_Stomp_Timer
= std::rand() % 40000 + 25000;
184
}
185
else
186
War_Stomp_Timer
-= diff;
187
188
//Check for Arcane Volley
189
if
(
Arcane_Volley_Timer
<= diff)
190
{
191
DoCastVictim
(
DUNGEON_MODE
(
ARCANE_VOLLEY
,
ARCANE_VOLLEY_H
));
192
Arcane_Volley_Timer
= std::rand() % 35000 + 20000;
193
}
194
else
195
Arcane_Volley_Timer
-= diff;
196
197
//Check for Summon Treants
198
if
(
Summon_Treants_Timer
<= diff)
199
{
200
SummonTreants
();
201
Summon_Treants_Timer
= 45000;
202
}
203
else
204
Summon_Treants_Timer
-= diff;
205
206
DoMeleeAttackIfReady
();
207
}
208
};
209
210
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
211
{
212
return
new
boss_warp_splinterAI
(creature);
213
}
214
};
215
216
void
AddSC_boss_warp_splinter
()
217
{
218
new
boss_warp_splinter
();
219
new
npc_warp_splinter_treant
();
220
}
221
Spells
Spells
Definition
BattlegroundIC.h:645
M_PI
#define M_PI
Definition
Common.h:192
int32
std::int32_t int32
Definition
Define.h:73
uint8
std::uint8_t uint8
Definition
Define.h:79
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
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
@ TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
Definition
Object.h:69
ScriptMgr.h
ScriptedCreature.h
CAST_AI
#define CAST_AI(a, b)
Definition
ScriptedCreature.h:14
SPELL_SCHOOL_MASK_NORMAL
@ SPELL_SCHOOL_MASK_NORMAL
Definition
SharedDefines.h:270
MOVE_RUN
@ MOVE_RUN
Definition
Unit.h:556
DIRECT_DAMAGE
@ DIRECT_DAMAGE
Definition
Unit.h:614
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
Says
Says
Definition
boss_halycon.cpp:17
Misc
Misc
Definition
boss_occuthar.cpp:37
SAY_SUMMON
@ SAY_SUMMON
Definition
boss_urok_doomhowl.cpp:19
AddSC_boss_warp_splinter
void AddSC_boss_warp_splinter()
Definition
boss_warp_splinter.cpp:216
SAY_DEATH
@ SAY_DEATH
Definition
boss_warp_splinter.cpp:22
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_warp_splinter.cpp:19
SAY_SLAY
@ SAY_SLAY
Definition
boss_warp_splinter.cpp:20
SAY_SUMMON
@ SAY_SUMMON
Definition
boss_warp_splinter.cpp:21
treant_pos
float treant_pos[6][3]
Definition
boss_warp_splinter.cpp:39
CREATURE_TREANT
@ CREATURE_TREANT
Definition
boss_warp_splinter.cpp:36
ARCANE_VOLLEY
@ ARCANE_VOLLEY
Definition
boss_warp_splinter.cpp:29
SUMMON_TREANTS
@ SUMMON_TREANTS
Definition
boss_warp_splinter.cpp:28
SPELL_HEAL_FATHER
@ SPELL_HEAL_FATHER
Definition
boss_warp_splinter.cpp:31
WAR_STOMP
@ WAR_STOMP
Definition
boss_warp_splinter.cpp:27
ARCANE_VOLLEY_H
@ ARCANE_VOLLEY_H
Definition
boss_warp_splinter.cpp:30
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
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
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
UnitAI::DoCastVictim
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:168
Unit
Definition
Unit.h:1367
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
boss_warp_splinter
Definition
boss_warp_splinter.cpp:115
boss_warp_splinter::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_warp_splinter.cpp:210
boss_warp_splinter::boss_warp_splinter
boss_warp_splinter()
Definition
boss_warp_splinter.cpp:117
npc_warp_splinter_treant
Definition
boss_warp_splinter.cpp:53
npc_warp_splinter_treant::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_warp_splinter.cpp:105
npc_warp_splinter_treant::npc_warp_splinter_treant
npc_warp_splinter_treant()
Definition
boss_warp_splinter.cpp:55
Position::GetPositionX
float GetPositionX() const
Definition
Object.h:328
Position::GetPositionY
float GetPositionY() const
Definition
Object.h:329
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
ScriptedAI::DUNGEON_MODE
const T & DUNGEON_MODE(const T &normal5, const T &heroic5) const
Definition
ScriptedCreature.h:294
boss_warp_splinter::boss_warp_splinterAI
Definition
boss_warp_splinter.cpp:120
boss_warp_splinter::boss_warp_splinterAI::Arcane_Volley_Timer
uint32 Arcane_Volley_Timer
Definition
boss_warp_splinter.cpp:129
boss_warp_splinter::boss_warp_splinterAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_warp_splinter.cpp:148
boss_warp_splinter::boss_warp_splinterAI::Treant_Spawn_Pos_Y
float Treant_Spawn_Pos_Y
Definition
boss_warp_splinter.cpp:132
boss_warp_splinter::boss_warp_splinterAI::Treant_Spawn_Pos_X
float Treant_Spawn_Pos_X
Definition
boss_warp_splinter.cpp:131
boss_warp_splinter::boss_warp_splinterAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_warp_splinter.cpp:143
boss_warp_splinter::boss_warp_splinterAI::War_Stomp_Timer
uint32 War_Stomp_Timer
Definition
boss_warp_splinter.cpp:127
boss_warp_splinter::boss_warp_splinterAI::boss_warp_splinterAI
boss_warp_splinterAI(Creature *creature)
Definition
boss_warp_splinter.cpp:121
boss_warp_splinter::boss_warp_splinterAI::Reset
void Reset() OVERRIDE
Definition
boss_warp_splinter.cpp:134
boss_warp_splinter::boss_warp_splinterAI::SummonTreants
void SummonTreants()
Definition
boss_warp_splinter.cpp:158
boss_warp_splinter::boss_warp_splinterAI::Summon_Treants_Timer
uint32 Summon_Treants_Timer
Definition
boss_warp_splinter.cpp:128
boss_warp_splinter::boss_warp_splinterAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_warp_splinter.cpp:153
boss_warp_splinter::boss_warp_splinterAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_warp_splinter.cpp:174
npc_warp_splinter_treant::npc_warp_splinter_treantAI
Definition
boss_warp_splinter.cpp:58
npc_warp_splinter_treant::npc_warp_splinter_treantAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_warp_splinter.cpp:77
npc_warp_splinter_treant::npc_warp_splinter_treantAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_warp_splinter.cpp:72
npc_warp_splinter_treant::npc_warp_splinter_treantAI::check_Timer
uint32 check_Timer
Definition
boss_warp_splinter.cpp:65
npc_warp_splinter_treant::npc_warp_splinter_treantAI::npc_warp_splinter_treantAI
npc_warp_splinter_treantAI(Creature *creature)
Definition
boss_warp_splinter.cpp:59
npc_warp_splinter_treant::npc_warp_splinter_treantAI::Reset
void Reset() OVERRIDE
Definition
boss_warp_splinter.cpp:67
npc_warp_splinter_treant::npc_warp_splinter_treantAI::WarpGuid
uint64 WarpGuid
Definition
boss_warp_splinter.cpp:64
npc_warp_splinter_treant::npc_warp_splinter_treantAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *) OVERRIDE
Definition
boss_warp_splinter.cpp:74
the_botanica.h
DATA_WARP_SPLINTER
@ DATA_WARP_SPLINTER
Definition
the_botanica.h:17
src
server
scripts
Outland
TempestKeep
botanica
boss_warp_splinter.cpp
Generated on
for Project SkyFire Core by
1.17.0