Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_cannon_master_willey.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_cannon_master_willey
8SD%Complete: 100
9SDComment:
10SDCategory: Stratholme
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15
16//front, left
17#define ADD_1X 3553.851807f
18#define ADD_1Y -2945.885986f
19#define ADD_1Z 125.001015f
20#define ADD_1O 0.592007f
21//front, right
22#define ADD_2X 3559.206299f
23#define ADD_2Y -2952.929932f
24#define ADD_2Z 125.001015f
25#define ADD_2O 0.592007f
26//mid, left
27#define ADD_3X 3552.417480f
28#define ADD_3Y -2948.667236f
29#define ADD_3Z 125.001015f
30#define ADD_3O 0.592007f
31//mid, right
32#define ADD_4X 3555.651855f
33#define ADD_4Y -2953.519043f
34#define ADD_4Z 125.001015f
35#define ADD_4O 0.592007f
36//back, left
37#define ADD_5X 3547.927246f
38#define ADD_5Y -2950.977295f
39#define ADD_5Z 125.001015f
40#define ADD_5O 0.592007f
41//back, mid
42#define ADD_6X 3553.094697f
43#define ADD_6Y -2952.123291f
44#define ADD_6Z 125.001015f
45#define ADD_6O 0.592007f
46//back, right
47#define ADD_7X 3552.727539f
48#define ADD_7Y -2957.776123f
49#define ADD_7Z 125.001015f
50#define ADD_7O 0.592007f
51//behind, left
52#define ADD_8X 3547.156250f
53#define ADD_8Y -2953.162354f
54#define ADD_8Z 125.001015f
55#define ADD_8O 0.592007f
56//behind, right
57#define ADD_9X 3550.202148f
58#define ADD_9Y -2957.437744f
59#define ADD_9Z 125.001015f
60#define ADD_9O 0.592007f
61
63{
65 SPELL_PUMMEL = 15615,
67 //SPELL_SUMMONCRIMSONRIFLEMAN = 17279
68};
69
71{
72public:
73 boss_cannon_master_willey() : CreatureScript("boss_cannon_master_willey") { }
74
76 {
77 return new boss_cannon_master_willeyAI(creature);
78 }
79
81 {
83
88
90 {
91 Shoot_Timer = 1000;
92 Pummel_Timer = 7000;
93 KnockAway_Timer = 11000;
95 }
96
97 void JustDied(Unit* /*killer*/) OVERRIDE
98 {
99 me->SummonCreature(11054, ADD_1X, ADD_1Y, ADD_1Z, ADD_1O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
100 me->SummonCreature(11054, ADD_2X, ADD_2Y, ADD_2Z, ADD_2O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
101 me->SummonCreature(11054, ADD_3X, ADD_3Y, ADD_3Z, ADD_3O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
102 me->SummonCreature(11054, ADD_4X, ADD_4Y, ADD_4Z, ADD_4O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
103 me->SummonCreature(11054, ADD_5X, ADD_5Y, ADD_5Z, ADD_5O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
104 me->SummonCreature(11054, ADD_7X, ADD_7Y, ADD_7Z, ADD_7O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
105 me->SummonCreature(11054, ADD_9X, ADD_9Y, ADD_9Z, ADD_9O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
106 }
107
108 void EnterCombat(Unit* /*who*/) OVERRIDE
109 {
110 }
111
113 {
114 //Return since we have no target
115 if (!UpdateVictim())
116 return;
117
118 //Pummel
119 if (Pummel_Timer <= diff)
120 {
121 //Cast
122 if (rand()%100 < 90) //90% chance to cast
123 {
125 }
126 //12 seconds until we should cast this again
127 Pummel_Timer = 12000;
128 } else Pummel_Timer -= diff;
129
130 //KnockAway
131 if (KnockAway_Timer <= diff)
132 {
133 //Cast
134 if (rand()%100 < 80) //80% chance to cast
135 {
137 }
138 //14 seconds until we should cast this again
139 KnockAway_Timer = 14000;
140 } else KnockAway_Timer -= diff;
141
142 //Shoot
143 if (Shoot_Timer <= diff)
144 {
145 //Cast
147 //1 seconds until we should cast this again
148 Shoot_Timer = 1000;
149 } else Shoot_Timer -= diff;
150
151 //SummonRifleman
152 if (SummonRifleman_Timer <= diff)
153 {
154 //Cast
155 switch (rand()%9)
156 {
157 case 0:
158 me->SummonCreature(11054, ADD_1X, ADD_1Y, ADD_1Z, ADD_1O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
159 me->SummonCreature(11054, ADD_2X, ADD_2Y, ADD_2Z, ADD_2O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
160 me->SummonCreature(11054, ADD_4X, ADD_4Y, ADD_4Z, ADD_4O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
161 break;
162 case 1:
163 me->SummonCreature(11054, ADD_2X, ADD_2Y, ADD_2Z, ADD_2O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
164 me->SummonCreature(11054, ADD_3X, ADD_3Y, ADD_3Z, ADD_3O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
165 me->SummonCreature(11054, ADD_5X, ADD_5Y, ADD_5Z, ADD_5O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
166 break;
167 case 2:
168 me->SummonCreature(11054, ADD_3X, ADD_3Y, ADD_3Z, ADD_3O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
169 me->SummonCreature(11054, ADD_4X, ADD_4Y, ADD_4Z, ADD_4O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
170 me->SummonCreature(11054, ADD_6X, ADD_6Y, ADD_6Z, ADD_6O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
171 break;
172 case 3:
173 me->SummonCreature(11054, ADD_4X, ADD_4Y, ADD_4Z, ADD_4O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
174 me->SummonCreature(11054, ADD_5X, ADD_5Y, ADD_5Z, ADD_5O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
175 me->SummonCreature(11054, ADD_7X, ADD_7Y, ADD_7Z, ADD_7O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
176 break;
177 case 4:
178 me->SummonCreature(11054, ADD_5X, ADD_5Y, ADD_5Z, ADD_5O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
179 me->SummonCreature(11054, ADD_6X, ADD_6Y, ADD_6Z, ADD_6O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
180 me->SummonCreature(11054, ADD_8X, ADD_8Y, ADD_8Z, ADD_8O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
181 break;
182 case 5:
183 me->SummonCreature(11054, ADD_6X, ADD_6Y, ADD_6Z, ADD_6O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
184 me->SummonCreature(11054, ADD_7X, ADD_7Y, ADD_7Z, ADD_7O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
185 me->SummonCreature(11054, ADD_9X, ADD_9Y, ADD_9Z, ADD_9O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
186 break;
187 case 6:
188 me->SummonCreature(11054, ADD_7X, ADD_7Y, ADD_7Z, ADD_7O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
189 me->SummonCreature(11054, ADD_8X, ADD_8Y, ADD_8Z, ADD_8O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
190 me->SummonCreature(11054, ADD_1X, ADD_1Y, ADD_1Z, ADD_1O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
191 break;
192 case 7:
193 me->SummonCreature(11054, ADD_8X, ADD_8Y, ADD_8Z, ADD_8O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
194 me->SummonCreature(11054, ADD_9X, ADD_9Y, ADD_9Z, ADD_9O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
195 me->SummonCreature(11054, ADD_2X, ADD_2Y, ADD_2Z, ADD_2O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
196 break;
197 case 8:
198 me->SummonCreature(11054, ADD_9X, ADD_9Y, ADD_9Z, ADD_9O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
199 me->SummonCreature(11054, ADD_1X, ADD_1Y, ADD_1Z, ADD_1O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
200 me->SummonCreature(11054, ADD_3X, ADD_3Y, ADD_3Z, ADD_3O, TempSummonType::TEMPSUMMON_TIMED_DESPAWN, 240000);
201 break;
202 }
203 //30 seconds until we should cast this again
204 SummonRifleman_Timer = 30000;
205 } else SummonRifleman_Timer -= diff;
206
208 }
209 };
210};
211
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ TEMPSUMMON_TIMED_DESPAWN
Definition Object.h:70
void AddSC_boss_cannon_master_willey()
bool UpdateVictim()
CreatureScript(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Creature * me
ScriptedAI(Creature *creature)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================