Project SkyFire Core
SkyFire 5.4.8 server core API documentation
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
7SDName: Boss_Laj
8SD%Complete: 90
9SDComment: Immunities are wrong, must be adjusted to use resistance from creature_templates. Most spells require database support.
10SDCategory: Tempest Keep, The Botanica
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "the_botanica.h"
16
31enum Misc
32{
35 MODEL_ARCANE = 14213,
36 MODEL_FIRE = 13110,
37 MODEL_FROST = 14112,
39};
40
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
55
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
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
120 {
121 switch (rand()%4)
122 {
123 case 0:
126 break;
127 case 1:
130 break;
131 case 2:
134 break;
135 case 3:
138 break;
139 }
140 CanSummon = false;
141 }
142
143 void EnterCombat(Unit* /*who*/) OVERRIDE
144 {
145 }
146
148 {
149 if (summon && me->GetVictim())
150 summon->AI()->AttackStart(SelectTarget(SELECT_TARGET_RANDOM, 0));
151 }
152
154 {
155 if (!UpdateVictim())
156 return;
157
158 if (CanSummon)
159 {
160 if (Summon_Timer <= diff)
161 {
163 DoSummons();
164 Summon_Timer = 2500;
165 }
166 else
167 Summon_Timer -= diff;
168 }
169
170 if (Allergic_Timer <= diff)
171 {
173 Allergic_Timer = 25000+rand()%15000;
174 }
175 else
176 Allergic_Timer -= diff;
177
178 if (Teleport_Timer <= diff)
179 {
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
196 }
197 };
198
200 {
201 return new boss_lajAI(creature);
202 }
203};
204
206{
207 new boss_laj();
208}
209
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ IMMUNITY_SCHOOL
@ SPELL_SCHOOL_MASK_SHADOW
@ SPELL_SCHOOL_MASK_ARCANE
@ SPELL_SCHOOL_MASK_NATURE
@ SPELL_SCHOOL_MASK_FIRE
@ SPELL_SCHOOL_MASK_FROST
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ MODEL_ARCANE
Definition boss_laj.cpp:35
@ MODEL_NATURE
Definition boss_laj.cpp:38
@ EMOTE_SUMMON
Definition boss_laj.cpp:33
@ MODEL_FROST
Definition boss_laj.cpp:37
@ MODEL_DEFAULT
Definition boss_laj.cpp:34
@ MODEL_FIRE
Definition boss_laj.cpp:36
@ SPELL_SUMMON_FLAYER_3
Definition boss_laj.cpp:29
@ SPELL_SUMMON_FLAYER_1
Definition boss_laj.cpp:23
@ SPELL_SUMMON_LASHER_4
Definition boss_laj.cpp:28
@ SPELL_TELEPORT_SELF
Definition boss_laj.cpp:20
@ SPELL_SUMMON_FLAYER_2
Definition boss_laj.cpp:25
@ SPELL_SUMMON_LASHER_2
Definition boss_laj.cpp:24
@ SPELL_ALLERGIC_REACTION
Definition boss_laj.cpp:19
@ SPELL_SUMMON_LASHER_3
Definition boss_laj.cpp:26
@ SPELL_SUMMON_LASHER_1
Definition boss_laj.cpp:22
@ SPELL_SUMMON_FLAYER_4
Definition boss_laj.cpp:27
void AddSC_boss_laj()
Definition boss_laj.cpp:205
@ EMOTE_SUMMON
BossAI(Creature *creature, uint32 bossId)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition boss_laj.cpp:199
Creature * me
boss_lajAI(Creature *creature)
Definition boss_laj.cpp:48
void Reset() OVERRIDE
Definition boss_laj.cpp:56
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition boss_laj.cpp:153
void JustSummoned(Creature *summon) OVERRIDE
Definition boss_laj.cpp:147
void EnterCombat(Unit *) OVERRIDE
Definition boss_laj.cpp:143
@ DATA_LAJ