Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_laj.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_Laj
8
SD%Complete: 90
9
SDComment: Immunities are wrong, must be adjusted to use resistance from creature_templates. Most spells require database support.
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
Spells
18
{
19
SPELL_ALLERGIC_REACTION
= 34697,
20
SPELL_TELEPORT_SELF
= 34673,
21
22
SPELL_SUMMON_LASHER_1
= 34681,
23
SPELL_SUMMON_FLAYER_1
= 34682,
24
SPELL_SUMMON_LASHER_2
= 34684,
25
SPELL_SUMMON_FLAYER_2
= 34685,
26
SPELL_SUMMON_LASHER_3
= 34686,
27
SPELL_SUMMON_FLAYER_4
= 34687,
28
SPELL_SUMMON_LASHER_4
= 34688,
29
SPELL_SUMMON_FLAYER_3
= 34690
30
};
31
enum
Misc
32
{
33
EMOTE_SUMMON
= 0,
34
MODEL_DEFAULT
= 13109,
35
MODEL_ARCANE
= 14213,
36
MODEL_FIRE
= 13110,
37
MODEL_FROST
= 14112,
38
MODEL_NATURE
= 14214
39
};
40
41
class
boss_laj
:
public
CreatureScript
42
{
43
public
:
44
boss_laj
() :
CreatureScript
(
"boss_laj"
) { }
45
46
struct
boss_lajAI
:
public
BossAI
47
{
48
boss_lajAI
(
Creature
* creature) :
BossAI
(creature,
DATA_LAJ
) { }
49
50
bool
CanSummon
;
51
uint32
Teleport_Timer
;
52
uint32
Summon_Timer
;
53
uint32
Transform_Timer
;
54
uint32
Allergic_Timer
;
55
56
void
Reset
()
OVERRIDE
57
{
58
me
->SetDisplayId(
MODEL_DEFAULT
);
59
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_SHADOW
,
true
);
60
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_ARCANE
,
false
);
61
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FIRE
,
false
);
62
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FROST
,
false
);
63
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_NATURE
,
false
);
64
65
CanSummon
=
false
;
66
Teleport_Timer
= 20000;
67
Summon_Timer
= 2500;
68
Transform_Timer
= 30000;
69
Allergic_Timer
= 5000;
70
}
71
72
void
DoTransform
()
73
{
74
switch
(rand()%5)
75
{
76
case
0:
77
me
->SetDisplayId(
MODEL_DEFAULT
);
78
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_SHADOW
,
true
);
79
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_ARCANE
,
false
);
80
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FIRE
,
false
);
81
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FROST
,
false
);
82
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_NATURE
,
false
);
83
break
;
84
case
1:
85
me
->SetDisplayId(
MODEL_ARCANE
);
86
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_SHADOW
,
false
);
87
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_ARCANE
,
true
);
88
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FIRE
,
false
);
89
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FROST
,
false
);
90
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_NATURE
,
false
);
91
break
;
92
case
2:
93
me
->SetDisplayId(
MODEL_FIRE
);
94
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_SHADOW
,
false
);
95
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_ARCANE
,
false
);
96
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FIRE
,
true
);
97
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FROST
,
false
);
98
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_NATURE
,
false
);
99
break
;
100
case
3:
101
me
->SetDisplayId(
MODEL_FROST
);
102
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_SHADOW
,
false
);
103
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_ARCANE
,
false
);
104
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FIRE
,
false
);
105
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FROST
,
true
);
106
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_NATURE
,
false
);
107
break
;
108
case
4:
109
me
->SetDisplayId(
MODEL_NATURE
);
110
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_SHADOW
,
false
);
111
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_ARCANE
,
false
);
112
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FIRE
,
false
);
113
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_FROST
,
false
);
114
me
->ApplySpellImmune(0,
IMMUNITY_SCHOOL
,
SPELL_SCHOOL_MASK_NATURE
,
true
);
115
break
;
116
}
117
}
118
119
void
DoSummons
()
120
{
121
switch
(rand()%4)
122
{
123
case
0:
124
DoCast
(
me
,
SPELL_SUMMON_LASHER_1
,
true
);
125
DoCast
(
me
,
SPELL_SUMMON_FLAYER_1
,
true
);
126
break
;
127
case
1:
128
DoCast
(
me
,
SPELL_SUMMON_LASHER_2
,
true
);
129
DoCast
(
me
,
SPELL_SUMMON_FLAYER_2
,
true
);
130
break
;
131
case
2:
132
DoCast
(
me
,
SPELL_SUMMON_LASHER_3
,
true
);
133
DoCast
(
me
,
SPELL_SUMMON_FLAYER_3
,
true
);
134
break
;
135
case
3:
136
DoCast
(
me
,
SPELL_SUMMON_LASHER_4
,
true
);
137
DoCast
(
me
,
SPELL_SUMMON_FLAYER_4
,
true
);
138
break
;
139
}
140
CanSummon
=
false
;
141
}
142
143
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
144
{
145
}
146
147
void
JustSummoned
(
Creature
* summon)
OVERRIDE
148
{
149
if
(summon &&
me
->GetVictim())
150
summon->AI()->AttackStart(
SelectTarget
(
SELECT_TARGET_RANDOM
, 0));
151
}
152
153
void
UpdateAI
(
uint32
diff)
OVERRIDE
154
{
155
if
(!
UpdateVictim
())
156
return
;
157
158
if
(
CanSummon
)
159
{
160
if
(
Summon_Timer
<= diff)
161
{
162
Talk
(
EMOTE_SUMMON
);
163
DoSummons
();
164
Summon_Timer
= 2500;
165
}
166
else
167
Summon_Timer
-= diff;
168
}
169
170
if
(
Allergic_Timer
<= diff)
171
{
172
DoCastVictim
(
SPELL_ALLERGIC_REACTION
);
173
Allergic_Timer
= 25000+rand()%15000;
174
}
175
else
176
Allergic_Timer
-= diff;
177
178
if
(
Teleport_Timer
<= diff)
179
{
180
DoCast
(
me
,
SPELL_TELEPORT_SELF
);
181
Teleport_Timer
= 30000+rand()%10000;
182
CanSummon
=
true
;
183
}
184
else
185
Teleport_Timer
-= diff;
186
187
if
(
Transform_Timer
<= diff)
188
{
189
DoTransform
();
190
Transform_Timer
= 25000+rand()%15000;
191
}
192
else
193
Transform_Timer
-= diff;
194
195
DoMeleeAttackIfReady
();
196
}
197
};
198
199
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
200
{
201
return
new
boss_lajAI
(creature);
202
}
203
};
204
205
void
AddSC_boss_laj
()
206
{
207
new
boss_laj
();
208
}
209
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
ScriptMgr.h
ScriptedCreature.h
IMMUNITY_SCHOOL
@ IMMUNITY_SCHOOL
Definition
SharedDefines.h:1598
SPELL_SCHOOL_MASK_SHADOW
@ SPELL_SCHOOL_MASK_SHADOW
Definition
SharedDefines.h:275
SPELL_SCHOOL_MASK_ARCANE
@ SPELL_SCHOOL_MASK_ARCANE
Definition
SharedDefines.h:276
SPELL_SCHOOL_MASK_NATURE
@ SPELL_SCHOOL_MASK_NATURE
Definition
SharedDefines.h:273
SPELL_SCHOOL_MASK_FIRE
@ SPELL_SCHOOL_MASK_FIRE
Definition
SharedDefines.h:272
SPELL_SCHOOL_MASK_FROST
@ SPELL_SCHOOL_MASK_FROST
Definition
SharedDefines.h:274
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
MODEL_ARCANE
@ MODEL_ARCANE
Definition
boss_laj.cpp:35
MODEL_NATURE
@ MODEL_NATURE
Definition
boss_laj.cpp:38
EMOTE_SUMMON
@ EMOTE_SUMMON
Definition
boss_laj.cpp:33
MODEL_FROST
@ MODEL_FROST
Definition
boss_laj.cpp:37
MODEL_DEFAULT
@ MODEL_DEFAULT
Definition
boss_laj.cpp:34
MODEL_FIRE
@ MODEL_FIRE
Definition
boss_laj.cpp:36
SPELL_SUMMON_FLAYER_3
@ SPELL_SUMMON_FLAYER_3
Definition
boss_laj.cpp:29
SPELL_SUMMON_FLAYER_1
@ SPELL_SUMMON_FLAYER_1
Definition
boss_laj.cpp:23
SPELL_SUMMON_LASHER_4
@ SPELL_SUMMON_LASHER_4
Definition
boss_laj.cpp:28
SPELL_TELEPORT_SELF
@ SPELL_TELEPORT_SELF
Definition
boss_laj.cpp:20
SPELL_SUMMON_FLAYER_2
@ SPELL_SUMMON_FLAYER_2
Definition
boss_laj.cpp:25
SPELL_SUMMON_LASHER_2
@ SPELL_SUMMON_LASHER_2
Definition
boss_laj.cpp:24
SPELL_ALLERGIC_REACTION
@ SPELL_ALLERGIC_REACTION
Definition
boss_laj.cpp:19
SPELL_SUMMON_LASHER_3
@ SPELL_SUMMON_LASHER_3
Definition
boss_laj.cpp:26
SPELL_SUMMON_LASHER_1
@ SPELL_SUMMON_LASHER_1
Definition
boss_laj.cpp:22
SPELL_SUMMON_FLAYER_4
@ SPELL_SUMMON_FLAYER_4
Definition
boss_laj.cpp:27
AddSC_boss_laj
void AddSC_boss_laj()
Definition
boss_laj.cpp:205
EMOTE_SUMMON
@ EMOTE_SUMMON
Definition
boss_nightbane.cpp:35
Misc
Misc
Definition
boss_occuthar.cpp:37
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::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
boss_laj
Definition
boss_laj.cpp:42
boss_laj::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_laj.cpp:199
boss_laj::boss_laj
boss_laj()
Definition
boss_laj.cpp:44
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
boss_laj::boss_lajAI
Definition
boss_laj.cpp:47
boss_laj::boss_lajAI::CanSummon
bool CanSummon
Definition
boss_laj.cpp:50
boss_laj::boss_lajAI::Summon_Timer
uint32 Summon_Timer
Definition
boss_laj.cpp:52
boss_laj::boss_lajAI::boss_lajAI
boss_lajAI(Creature *creature)
Definition
boss_laj.cpp:48
boss_laj::boss_lajAI::Transform_Timer
uint32 Transform_Timer
Definition
boss_laj.cpp:53
boss_laj::boss_lajAI::Reset
void Reset() OVERRIDE
Definition
boss_laj.cpp:56
boss_laj::boss_lajAI::Teleport_Timer
uint32 Teleport_Timer
Definition
boss_laj.cpp:51
boss_laj::boss_lajAI::DoTransform
void DoTransform()
Definition
boss_laj.cpp:72
boss_laj::boss_lajAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_laj.cpp:153
boss_laj::boss_lajAI::Allergic_Timer
uint32 Allergic_Timer
Definition
boss_laj.cpp:54
boss_laj::boss_lajAI::DoSummons
void DoSummons()
Definition
boss_laj.cpp:119
boss_laj::boss_lajAI::JustSummoned
void JustSummoned(Creature *summon) OVERRIDE
Definition
boss_laj.cpp:147
boss_laj::boss_lajAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_laj.cpp:143
the_botanica.h
DATA_LAJ
@ DATA_LAJ
Definition
the_botanica.h:16
src
server
scripts
Outland
TempestKeep
botanica
boss_laj.cpp
Generated on
for Project SkyFire Core by
1.17.0