Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
stormstout_brewery.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#include "ScriptMgr.h"
7#include "ScriptedCreature.h"
9#include "Player.h"
10
16
17#define SAY_OOK_OOK_1 "Who crashing Ook party!?"
18
19void SummonOokOokIfReady(InstanceScript* instance, Creature* creature, Unit* killer)
20{
21 instance->SetData(DATA_BANANA_EVENT, SPECIAL); // Increment DeathCount
23
24 if (instance->GetData64(DATA_BANANA_EVENT) > 39)
25 {
26 if (Creature* pOokOok = creature->FindNearestCreature(NPC_OOK_OOK, 45.0f, true))
27 {
28 pOokOok->MonsterYell(SAY_OOK_OOK_1, Language::LANG_UNIVERSAL, 0);
29 pOokOok->SendPlaySound(28798, true);
30
31 pOokOok->GetMotionMaster()->MoveJump(OokOokLandPos, pOokOok->GetExactDist2d(OokOokLandPos.GetPositionX(), OokOokLandPos.GetPositionY()) * 10.0f / 5.0f, 5.0f);
32 pOokOok->SetHomePosition(OokOokLandPos);
33 pOokOok->setFaction(14);
34 }
35 killer->CastSpell(killer, SPELL_SSB_BANANA_BAR_REMOVE, true);
37 }
38};
39
40void SummonHoptallusIfReady(InstanceScript* instance, Creature* creature, Unit* killer)
41{
42 if (instance->GetBossState(DATA_RABBIT_EVENT) == DONE)
43 return;
44
45 if (Creature* pHoptalus = creature->FindNearestCreature(NPC_HOPTALLUS, 45.0f, true))
46 {
47 pHoptalus->GetMotionMaster()->MoveJump(HoptallusLandPos, pHoptalus->GetExactDist2d(HoptallusLandPos.GetPositionX(), HoptallusLandPos.GetPositionY()) * 10.0f / 5.0f, 5.0f);
48 pHoptalus->SetHomePosition(HoptallusLandPos);
49 pHoptalus->setFaction(14);
50 }
52};
53
55{
56public:
58
59 bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) OVERRIDE
60 {
61 // Only trigger once
62 if (InstanceScript* instance = player->GetInstanceScript())
63 {
64 if (instance->GetBossState(DATA_BANANA_EVENT) == DONE)
65 return false;
66
67 if (player->IsAlive())
68 {
69 player->CastSpell(player, SPELL_SSB_BANANA_BAR, true);
70 StartBananaEvent(instance, player);
71 return true;
72 }
73 }
74 return false;
75 }
76
77 void StartBananaEvent(InstanceScript* instance, Player* player)
78 {
79 instance->SetData(DATA_BANANA_EVENT, IN_PROGRESS); // Reset DeathCount
81 }
82};
83
85{
86public:
87 npc_banana_hozen() : CreatureScript("npc_banana_hozen") { }
88
90 {
91 npc_banana_hozenAI(Creature* creature) : ScriptedAI(creature)
92 {
93 instance = creature->GetInstanceScript();
94 }
95
96 void Reset() OVERRIDE { }
97
98 void EnterCombat(Unit* /*who*/) OVERRIDE { }
99
100 void JustDied(Unit* killer) OVERRIDE
101 {
102 if (instance)
104 }
105
107 {
108 if (instance->GetBossState(DATA_BANANA_EVENT) == DONE)
109 {
110 if (me->GetEntry() == NPC_ANIMAL1 || me->GetEntry() == NPC_ANIMAL2)
111 {
112 if (!me->isMoving())
113 {
114 me->SetSpeed(MOVE_RUN, 1.5f);
115 me->GetMotionMaster()->MovePoint(1, BananaFleePos);
116 me->DespawnOrUnsummon(15000);
117 }
118 }
119 }
120
121 if (!UpdateVictim())
122 return;
123
125 }
126
128 };
129
131 {
132 return new npc_banana_hozenAI(creature);
133 }
134};
135
137{
138public:
139 npc_bopper() : CreatureScript("npc_bopper") { }
140
141 struct npc_bopperAI : public ScriptedAI
142 {
143 npc_bopperAI(Creature* creature) : ScriptedAI(creature)
144 {
145 instance = creature->GetInstanceScript();
146 }
147
148 void Reset() OVERRIDE { }
149
150 void EnterCombat(Unit* /*who*/) OVERRIDE { }
151
152 void JustDied(Unit* killer) OVERRIDE
153 {
154 if (instance)
156 }
157
159 {
160 if (!UpdateVictim())
161 return;
162
164 }
165
167 };
168
170 {
171 return new npc_bopperAI(creature);
172 }
173};
174
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ IN_PROGRESS
@ DONE
@ SPECIAL
@ POWER_ALTERNATE_POWER
@ MOVE_RUN
Definition Unit.h:556
bool OnTrigger(Player *player, AreaTriggerEntry const *) OVERRIDE
void StartBananaEvent(InstanceScript *instance, Player *player)
AreaTriggerScript(const char *name)
bool UpdateVictim()
CreatureScript(const char *name)
virtual bool SetBossState(uint32 id, EncounterState state)
EncounterState GetBossState(uint32 id) const
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
Definition Unit.h:1367
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void SetPower(Powers power, int32 val)
Definition Unit.cpp:5255
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2801
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:37
virtual uint64 GetData64(uint32) const
Definition ZoneScript.h:32
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
void AddSC_stormstout_brewery()
void SummonOokOokIfReady(InstanceScript *instance, Creature *creature, Unit *killer)
@ SPELL_SSB_BANANA_BAR
@ SPELL_SSB_BANANA_BAR_REMOVE
#define SAY_OOK_OOK_1
void SummonHoptallusIfReady(InstanceScript *instance, Creature *creature, Unit *killer)
Position const BananaFleePos
Position const OokOokLandPos
Position const HoptallusLandPos
@ NPC_OOK_OOK
@ NPC_HOPTALLUS
@ NPC_ANIMAL2
@ NPC_ANIMAL1
@ DATA_RABBIT_EVENT
@ DATA_BANANA_EVENT
Creature * me
ScriptedAI(Creature *creature)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
npc_bopperAI(Creature *creature)
void JustDied(Unit *killer) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void EnterCombat(Unit *) OVERRIDE