AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
npc_simon_bunny::npc_simon_bunnyAI Struct Reference
Inheritance diagram for npc_simon_bunny::npc_simon_bunnyAI:
ScriptedAI CreatureAI UnitAI

Public Member Functions

 npc_simon_bunnyAI (Creature *creature)
 
void UpdateAI (uint32 diff) override
 
void DoAction (int32 action) override
 
void SetData (uint32 type, uint32) override
 
void SetGUID (ObjectGuid guid, int32 id) override
 
void StartGame ()
 
void ResetNode ()
 
void CheckPlayerSequence ()
 
void GenerateColorSequence ()
 
void PrepareClusters (bool clustersOnly=false)
 
void PlayNextColor ()
 
void PlayColor (uint8 color)
 
void SetUpPreGame ()
 
void GiveRewardForLevel (uint8 level)
 
void GivePunishment ()
 
void SpellHitTarget (Unit *target, SpellInfo const *spell) override
 
bool CheckPlayer ()
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
 ~ScriptedAI () override
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask) override
 
void UpdateAI (uint32 diff) override
 
void JustDied (Unit *) override
 
void KilledUnit (Unit *) override
 
void JustSummoned (Creature *) override
 
void SummonedCreatureDespawn (Creature *) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void MovementInform (uint32, uint32) override
 
void OnPossess (bool)
 
bool IsInRoom (const Position *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoCastSpell (Unit *target, SpellInfo const *spellInfo, bool triggered=false)
 
void DoPlaySoundToSet (WorldObject *source, uint32 soundId)
 
void DoPlayMusic (uint32 soundId, bool zone)
 
void DoAddThreat (Unit *unit, float amount)
 
void DoModifyThreatByPercent (Unit *unit, int32 pct)
 
void DoResetThreat (Unit *unit)
 
void DoResetThreatList ()
 
float DoGetThreat (Unit *unit)
 
void DoTeleportPlayer (Unit *unit, float x, float y, float z, float o)
 
void DoTeleportAll (float x, float y, float z, float o)
 
UnitDoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
PlayerGetPlayerAtMinimumRange (float minRange)
 
CreatureDoSpawnCreature (uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
 
bool IsUniqueTimedEventDone (uint32 id) const
 
void SetUniqueTimedEventDone (uint32 id)
 
void ResetUniqueTimedEvent (uint32 id)
 
void ClearUniqueTimedEventsDone ()
 
void ScheduleTimedEvent (Milliseconds timerMin, Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0s, uint32 uniqueId=0)
 
void ScheduleTimedEvent (Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0s, uint32 uniqueId=0)
 
void ScheduleUniqueTimedEvent (Milliseconds timer, std::function< void()> exec, uint32 uniqueId)
 
bool HealthBelowPct (uint32 pct) const
 
bool HealthAbovePct (uint32 pct) const
 
SpellInfo const * SelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, uint32 powerCostMin, uint32 powerCostMax, float rangeMin, float rangeMax, SelectEffect effect)
 
void SetEquipmentSlots (bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
 
void SetCombatMovement (bool allowMovement)
 
bool IsCombatMovementAllowed () const
 
virtual bool CheckEvadeIfOutOfCombatArea () const
 
bool IsHeroic () const
 
Difficulty GetDifficulty () const
 
bool Is25ManRaid () const
 
template<class T >
const T & DUNGEON_MODE (const T &normal5, const T &heroic10) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25, const T &heroic10, const T &heroic25) const
 
PlayerSelectTargetFromPlayerList (float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0s)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
virtual void JustEngagedWith (Unit *)
 Called for reaction when initially engaged.
 
virtual void JustDied (Unit *)
 
virtual void KilledUnit (Unit *)
 
virtual void JustSummoned (Creature *)
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawn (Creature *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SpellHit (Unit *, SpellInfo const *)
 
virtual void SpellHitTarget (Unit *, SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted ()
 
virtual void JustRespawned ()
 
virtual void MovementInform (uint32, uint32)
 
virtual void PathEndReached (uint32)
 
void OnCharmed (bool apply) override
 
virtual void JustReachedHome ()
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *)
 
virtual void OwnerAttacked (Unit *)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ==================
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields =======================================
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
virtual bool CheckInRoom ()
 
CreatureBoundary const * GetBoundary () const
 
void SetBoundary (CreatureBoundary const *boundary, bool negativeBoundaries=false)
 
bool IsInBoundary (Position const *who=nullptr) const
 
virtual void CalculateThreat (Unit *, float &, SpellInfo const *)
 
virtual bool OnTeleportUnreacheablePlayer (Player *)
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual bool CanAIAttack (Unit const *) const
 
virtual void AttackStart (Unit *)
 
virtual void UpdateAI (uint32)=0
 
virtual void InitializeAI ()
 
virtual void Reset ()
 
virtual void OnCharmed (bool apply)=0
 
virtual void DoAction (int32)
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void SetGUID (ObjectGuid, int32=0)
 
virtual ObjectGuid GetGUID (int32=0) const
 
UnitSelectTarget (SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
UnitSelectTarget (SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
virtual void JustEnteredCombat (Unit *)
 Called when the unit enters combat (NOTE: Creature engage logic should NOT be here, but in JustEngagedWith, which happens once threat is established!)
 
virtual void JustExitedCombat ()
 Called when the unit leaves combat.
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 
virtual void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 
virtual void HealReceived (Unit *, uint32 &)
 
virtual void OnPowerUpdate (Powers, int32, int32, uint32)
 
virtual void HealDone (Unit *, uint32 &)
 
virtual void OnCalculateMeleeDamageReceived (uint32 &, Unit *)
 
virtual void OnCalculateSpellDamageReceived (int32 &, Unit *)
 
virtual void OnCalculatePeriodicTickReceived (uint32 &, Unit *)
 
void AttackStartCaster (Unit *victim, float dist)
 
SpellCastResult DoAddAuraToAllHostilePlayers (uint32 spellid)
 
SpellCastResult DoCast (uint32 spellId)
 
SpellCastResult DoCast (Unit *victim, uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastSelf (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastToAllHostilePlayers (uint32 spellid, bool triggered=false)
 
SpellCastResult DoCastVictim (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastAOE (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastRandomTarget (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the max threat target, which may not always be the current victim.
 
float DoGetSpellMaxRange (uint32 spellId, bool positive=false)
 
void DoMeleeAttackIfReady ()
 
bool DoSpellAttackIfReady (uint32 spell)
 
void DoSpellAttackToRandomTargetIfReady (uint32 spell, uint32 threatTablePosition=0, float dist=0.f, bool playerOnly=true)
 
virtual void SummonMovementInform (Creature *, uint32, uint32)
 
virtual void sGossipHello (Player *)
 
virtual void sGossipSelect (Player *, uint32, uint32)
 
virtual void sGossipSelectCode (Player *, uint32, uint32, char const *)
 
virtual void sQuestAccept (Player *, Quest const *)
 
virtual void sQuestSelect (Player *, Quest const *)
 
virtual void sQuestComplete (Player *, Quest const *)
 
virtual void sQuestReward (Player *, Quest const *, uint32)
 
virtual void sOnGameEvent (bool, uint16)
 
virtual std::string GetDebugInfo () const
 

Public Attributes

bool large
 
bool listening
 
uint8 gameLevel
 
uint8 fails
 
uint8 gameTicks
 
ObjectGuid playerGUID
 
uint32 clusterIds [SIMON_MAX_COLORS]
 
float zCoordCorrection
 
float searchDistance
 
EventMap _events
 
std::list< uint8colorSequence
 
std::list< uint8playableSequence
 
std::list< uint8playerSequence
 
- Public Attributes inherited from ScriptedAI
Creatureme
 
bool IsFleeing
 

Additional Inherited Members

- Public Types inherited from ScriptedAI
enum class  Axis {
  AXIS_X ,
  AXIS_Y
}
 
- Public Types inherited from CreatureAI
enum  EvadeReason {
  EVADE_REASON_NO_HOSTILES ,
  EVADE_REASON_BOUNDARY ,
  EVADE_REASON_SEQUENCE_BREAK ,
  EVADE_REASON_NO_PATH ,
  EVADE_REASON_OTHER
}
 
- Static Public Member Functions inherited from CreatureAI
static bool IsInBounds (CreatureBoundary const &boundary, Position const *who)
 
- Static Public Member Functions inherited from UnitAI
static void FillAISpellInfo ()
 
- Static Public Attributes inherited from UnitAI
static AISpellInfoTypeAISpellInfo
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
CreatureDoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
virtual void MoveInLineOfSight (Unit *)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
EventMap events
 
TaskScheduler scheduler
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ npc_simon_bunnyAI()

npc_simon_bunny::npc_simon_bunnyAI::npc_simon_bunnyAI ( Creature creature)
inline
573: ScriptedAI(creature) { }
Definition: ScriptedCreature.h:192

Member Function Documentation

◆ CheckPlayer()

bool npc_simon_bunny::npc_simon_bunnyAI::CheckPlayer ( )
inline
993 {
995 {
996 if (player->isDead())
997 return false;
998 if (player->GetDistance2d(me) >= 2.0f * searchDistance)
999 {
1001 return false;
1002 }
1003 }
1004 else
1005 return false;
1006
1007 return true;
1008 }
Player * GetPlayer(Map const *, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:223
Creature * me
Definition: ScriptedCreature.h:282
Definition: Player.h:1056
float searchDistance
Definition: zone_blades_edge_mountains.cpp:583
void GivePunishment()
Definition: zone_blades_edge_mountains.cpp:957
ObjectGuid playerGUID
Definition: zone_blades_edge_mountains.cpp:580

References ObjectAccessor::GetPlayer(), GivePunishment(), ScriptedAI::me, playerGUID, and searchDistance.

Referenced by UpdateAI().

◆ CheckPlayerSequence()

void npc_simon_bunny::npc_simon_bunnyAI::CheckPlayerSequence ( )
inline
804 {
805 bool correct = true;
806 if (playerSequence.size() <= colorSequence.size())
807 for (std::list<uint8>::const_iterator i = playerSequence.begin(), j = colorSequence.begin(); i != playerSequence.end(); ++i, ++j)
808 if ((*i) != (*j))
809 correct = false;
810
811 if (correct && (playerSequence.size() == colorSequence.size()))
813 else if (!correct)
815 }
@ ACTION_SIMON_WRONG_SEQUENCE
Definition: zone_blades_edge_mountains.cpp:553
@ ACTION_SIMON_CORRECT_FULL_SEQUENCE
Definition: zone_blades_edge_mountains.cpp:552
std::list< uint8 > playerSequence
Definition: zone_blades_edge_mountains.cpp:585
void DoAction(int32 action) override
Definition: zone_blades_edge_mountains.cpp:641
std::list< uint8 > colorSequence
Definition: zone_blades_edge_mountains.cpp:585

References ACTION_SIMON_CORRECT_FULL_SEQUENCE, ACTION_SIMON_WRONG_SEQUENCE, colorSequence, DoAction(), and playerSequence.

Referenced by SetData().

◆ DoAction()

void npc_simon_bunny::npc_simon_bunnyAI::DoAction ( int32  action)
inlineoverridevirtual

Reimplemented from UnitAI.

642 {
643 switch (action)
644 {
646 listening = false;
650 if (gameLevel == 10)
651 ResetNode();
652 else
654 break;
656 gameLevel++;
658 break;
662 break;
663 }
664 }
@ ACTION_SIMON_ROUND_FINISHED
Definition: zone_blades_edge_mountains.cpp:554
@ EVENT_SIMON_SETUP_PRE_GAME
Definition: zone_blades_edge_mountains.cpp:544
@ SPELL_VISUAL_START_AI_LEVEL
Definition: zone_blades_edge_mountains.cpp:533
void CancelEventGroup(uint32 group)
Definition: EventMap.cpp:209
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition: EventMap.cpp:56
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:177
bool listening
Definition: zone_blades_edge_mountains.cpp:576
uint8 gameLevel
Definition: zone_blades_edge_mountains.cpp:577
void ResetNode()
Definition: zone_blades_edge_mountains.cpp:780
EventMap _events
Definition: zone_blades_edge_mountains.cpp:584
void GiveRewardForLevel(uint8 level)
Definition: zone_blades_edge_mountains.cpp:926

References _events, ACTION_SIMON_CORRECT_FULL_SEQUENCE, ACTION_SIMON_ROUND_FINISHED, ACTION_SIMON_WRONG_SEQUENCE, EventMap::CancelEventGroup(), DoAction(), UnitAI::DoCast(), EVENT_SIMON_SETUP_PRE_GAME, gameLevel, GivePunishment(), GiveRewardForLevel(), listening, ResetNode(), EventMap::ScheduleEvent(), and SPELL_VISUAL_START_AI_LEVEL.

Referenced by CheckPlayerSequence(), DoAction(), and UpdateAI().

◆ GenerateColorSequence()

void npc_simon_bunny::npc_simon_bunnyAI::GenerateColorSequence ( )
inline
822 {
823 colorSequence.clear();
824 for (uint8 i = 0; i <= gameLevel; i++)
826
827 for (std::list<uint8>::const_iterator i = colorSequence.begin(); i != colorSequence.end(); ++i)
828 playableSequence.push_back(*i);
829 }
std::uint8_t uint8
Definition: Define.h:110
static First const & RAND(First const &first, Second const &second, Rest const &... rest)
Definition: CreatureAIImpl.h:30
@ SIMON_GREEN
Definition: zone_blades_edge_mountains.cpp:561
@ SIMON_BLUE
Definition: zone_blades_edge_mountains.cpp:559
@ SIMON_RED
Definition: zone_blades_edge_mountains.cpp:560
@ SIMON_YELLOW
Definition: zone_blades_edge_mountains.cpp:562
std::list< uint8 > playableSequence
Definition: zone_blades_edge_mountains.cpp:585

References colorSequence, gameLevel, playableSequence, RAND(), SIMON_BLUE, SIMON_GREEN, SIMON_RED, and SIMON_YELLOW.

Referenced by SetUpPreGame().

◆ GivePunishment()

void npc_simon_bunny::npc_simon_bunnyAI::GivePunishment ( )
inline
958 {
959 if (large)
960 {
963 guardian->AI()->AttackStart(player);
964
965 ResetNode();
966 }
967 else
968 {
969 fails++;
970
972 DoCast(player, SPELL_BAD_PRESS_TRIGGER, true);
973
974 if (fails >= 4)
975 ResetNode();
976 }
977 }
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
Definition: Object.h:45
@ NPC_APEXIS_GUARDIAN
Definition: zone_blades_edge_mountains.cpp:498
@ SPELL_BAD_PRESS_TRIGGER
Definition: zone_blades_edge_mountains.cpp:535
Definition: Creature.h:46
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition: Object.cpp:2343
float GetPositionZ() const
Definition: Position.h:119
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
bool large
Definition: zone_blades_edge_mountains.cpp:575
uint8 fails
Definition: zone_blades_edge_mountains.cpp:578
float zCoordCorrection
Definition: zone_blades_edge_mountains.cpp:582

References UnitAI::DoCast(), fails, ObjectAccessor::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), large, ScriptedAI::me, NPC_APEXIS_GUARDIAN, playerGUID, ResetNode(), SPELL_BAD_PRESS_TRIGGER, WorldObject::SummonCreature(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, and zCoordCorrection.

Referenced by CheckPlayer(), DoAction(), and GiveRewardForLevel().

◆ GiveRewardForLevel()

void npc_simon_bunny::npc_simon_bunnyAI::GiveRewardForLevel ( uint8  level)
inline
927 {
928 uint32 rewSpell = 0;
929 switch (level)
930 {
931 case 6:
932 if (large)
934 else
935 rewSpell = SPELL_REWARD_BUFF_1;
936 break;
937 case 8:
938 rewSpell = SPELL_REWARD_BUFF_2;
939 break;
940 case 10:
941 rewSpell = SPELL_REWARD_BUFF_3;
942 break;
943 }
944
945 if (rewSpell)
947 DoCast(player, rewSpell, true);
948 }
std::uint32_t uint32
Definition: Define.h:108
@ SPELL_REWARD_BUFF_2
Definition: zone_blades_edge_mountains.cpp:538
@ SPELL_REWARD_BUFF_3
Definition: zone_blades_edge_mountains.cpp:539
@ SPELL_REWARD_BUFF_1
Definition: zone_blades_edge_mountains.cpp:537

References UnitAI::DoCast(), ObjectAccessor::GetPlayer(), GivePunishment(), large, ScriptedAI::me, playerGUID, SPELL_REWARD_BUFF_1, SPELL_REWARD_BUFF_2, and SPELL_REWARD_BUFF_3.

Referenced by DoAction().

◆ PlayColor()

void npc_simon_bunny::npc_simon_bunnyAI::PlayColor ( uint8  color)
inline
858 {
859 switch (color)
860 {
861 case SIMON_BLUE:
864 break;
865 case SIMON_GREEN:
868 break;
869 case SIMON_RED:
872 break;
873 case SIMON_YELLOW:
876 break;
877 }
878 }
@ SOUND_RED
Definition: zone_blades_edge_mountains.cpp:527
@ SOUND_YELLOW
Definition: zone_blades_edge_mountains.cpp:528
@ SOUND_BLUE
Definition: zone_blades_edge_mountains.cpp:525
@ SOUND_GREEN
Definition: zone_blades_edge_mountains.cpp:526
@ SPELL_VISUAL_YELLOW
Definition: zone_blades_edge_mountains.cpp:523
@ SPELL_VISUAL_BLUE
Definition: zone_blades_edge_mountains.cpp:520
@ SPELL_VISUAL_RED
Definition: zone_blades_edge_mountains.cpp:522
@ SPELL_VISUAL_GREEN
Definition: zone_blades_edge_mountains.cpp:521
void DoPlaySoundToSet(WorldObject *source, uint32 soundId)
Definition: ScriptedCreature.cpp:256

References UnitAI::DoCast(), ScriptedAI::DoPlaySoundToSet(), ScriptedAI::me, SIMON_BLUE, SIMON_GREEN, SIMON_RED, SIMON_YELLOW, SOUND_BLUE, SOUND_GREEN, SOUND_RED, SOUND_YELLOW, SPELL_VISUAL_BLUE, SPELL_VISUAL_GREEN, SPELL_VISUAL_RED, and SPELL_VISUAL_YELLOW.

Referenced by PlayNextColor(), and SetData().

◆ PlayNextColor()

void npc_simon_bunny::npc_simon_bunnyAI::PlayNextColor ( )
inline
851 {
852 PlayColor(*playableSequence.begin());
853 playableSequence.erase(playableSequence.begin());
854 }
void PlayColor(uint8 color)
Definition: zone_blades_edge_mountains.cpp:857

References playableSequence, and PlayColor().

Referenced by UpdateAI().

◆ PrepareClusters()

void npc_simon_bunny::npc_simon_bunnyAI::PrepareClusters ( bool  clustersOnly = false)
inline
833 {
834 for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++)
835 if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], searchDistance))
836 cluster->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
837
838 if (clustersOnly)
839 return;
840
841 for (uint32 auraId = GO_AURA_BLUE; auraId <= GO_AURA_YELLOW; auraId++)
842 if (GameObject* auraGo = me->FindNearestGameObject(auraId, searchDistance))
843 auraGo->RemoveFromWorld();
844 }
@ SIMON_MAX_COLORS
Definition: zone_blades_edge_mountains.cpp:563
@ GO_AURA_YELLOW
Definition: zone_blades_edge_mountains.cpp:505
@ GO_AURA_BLUE
Definition: zone_blades_edge_mountains.cpp:502
@ GO_FLAG_NOT_SELECTABLE
Definition: SharedDefines.h:1607
Definition: GameObject.h:122
GameObject * FindNearestGameObject(uint32 entry, float range, bool onlySpawned=false) const
Definition: Object.cpp:2443
uint32 clusterIds[SIMON_MAX_COLORS]
Definition: zone_blades_edge_mountains.cpp:581

References clusterIds, WorldObject::FindNearestGameObject(), GO_AURA_BLUE, GO_AURA_YELLOW, GO_FLAG_NOT_SELECTABLE, ScriptedAI::me, searchDistance, SIMON_BLUE, and SIMON_MAX_COLORS.

Referenced by UpdateAI().

◆ ResetNode()

void npc_simon_bunny::npc_simon_bunnyAI::ResetNode ( )
inline
781 {
783
784 for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++)
785 if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], searchDistance))
786 cluster->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
787
788 for (uint32 auraId = GO_AURA_BLUE; auraId <= GO_AURA_YELLOW; auraId++)
789 if (GameObject* auraGo = me->FindNearestGameObject(auraId, searchDistance))
790 auraGo->RemoveFromWorld();
791
793 relic->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
794
795 me->DespawnOrUnsummon(1000);
796 }
@ GO_APEXIS_MONUMENT
Definition: zone_blades_edge_mountains.cpp:501
@ GO_APEXIS_RELIC
Definition: zone_blades_edge_mountains.cpp:500
@ SOUND_DISABLE_NODE
Definition: zone_blades_edge_mountains.cpp:529
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition: Creature.cpp:2117

References clusterIds, Creature::DespawnOrUnsummon(), ScriptedAI::DoPlaySoundToSet(), WorldObject::FindNearestGameObject(), GO_APEXIS_MONUMENT, GO_APEXIS_RELIC, GO_AURA_BLUE, GO_AURA_YELLOW, GO_FLAG_NOT_SELECTABLE, large, ScriptedAI::me, searchDistance, SIMON_BLUE, SIMON_MAX_COLORS, and SOUND_DISABLE_NODE.

Referenced by DoAction(), GivePunishment(), and UpdateAI().

◆ SetData()

void npc_simon_bunny::npc_simon_bunnyAI::SetData ( uint32  type,
uint32   
)
inlineoverridevirtual

Reimplemented from UnitAI.

668 {
669 if (!listening)
670 return;
671
672 uint8 pressedColor = SIMON_MAX_COLORS;
673
674 if (type == clusterIds[SIMON_RED])
675 pressedColor = SIMON_RED;
676 else if (type == clusterIds[SIMON_BLUE])
677 pressedColor = SIMON_BLUE;
678 else if (type == clusterIds[SIMON_GREEN])
679 pressedColor = SIMON_GREEN;
680 else if (type == clusterIds[SIMON_YELLOW])
681 pressedColor = SIMON_YELLOW;
682
683 PlayColor(pressedColor);
684 playerSequence.push_back(pressedColor);
687 }
@ EVENT_SIMON_RESET_CLUSTERS
Definition: zone_blades_edge_mountains.cpp:546
void CheckPlayerSequence()
Definition: zone_blades_edge_mountains.cpp:803

References _events, CheckPlayerSequence(), clusterIds, EVENT_SIMON_RESET_CLUSTERS, listening, PlayColor(), playerSequence, EventMap::ScheduleEvent(), SIMON_BLUE, SIMON_GREEN, SIMON_MAX_COLORS, SIMON_RED, and SIMON_YELLOW.

◆ SetGUID()

void npc_simon_bunny::npc_simon_bunnyAI::SetGUID ( ObjectGuid  guid,
int32  id 
)
inlineoverridevirtual

Reimplemented from UnitAI.

691 {
692 me->SetCanFly(true);
693
694 large = (bool)id;
695 playerGUID = guid;
696 StartGame();
697 }
bool SetCanFly(bool enable, bool packetOnly=false) override
Definition: Creature.cpp:3194
void StartGame()
Definition: zone_blades_edge_mountains.cpp:703

References large, ScriptedAI::me, playerGUID, Creature::SetCanFly(), and StartGame().

◆ SetUpPreGame()

void npc_simon_bunny::npc_simon_bunnyAI::SetUpPreGame ( )
inline
885 {
886 for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++)
887 {
888 if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], 2.0f * searchDistance))
889 {
890 cluster->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
891
892 // break since we don't need glowing auras for large clusters
893 if (large)
894 break;
895
896 float x, y, z, o;
897 cluster->GetPosition(x, y, z, o);
898 me->NearTeleportTo(x, y, z, o);
899
900 uint32 preGameSpellId;
901 if (cluster->GetEntry() == clusterIds[SIMON_RED])
902 preGameSpellId = SPELL_PRE_GAME_RED;
903 else if (cluster->GetEntry() == clusterIds[SIMON_BLUE])
904 preGameSpellId = SPELL_PRE_GAME_BLUE;
905 else if (cluster->GetEntry() == clusterIds[SIMON_GREEN])
906 preGameSpellId = SPELL_PRE_GAME_GREEN;
907 else if (cluster->GetEntry() == clusterIds[SIMON_YELLOW])
908 preGameSpellId = SPELL_PRE_GAME_YELLOW;
909 else break;
910
911 me->CastSpell(cluster, preGameSpellId, true);
912 }
913 }
914
916 {
917 float x, y, z, o;
918 relic->GetPosition(x, y, z, o);
919 me->NearTeleportTo(x, y, z + zCoordCorrection, o);
920 }
921
923 }
@ SPELL_PRE_GAME_RED
Definition: zone_blades_edge_mountains.cpp:518
@ SPELL_PRE_GAME_GREEN
Definition: zone_blades_edge_mountains.cpp:517
@ SPELL_PRE_GAME_YELLOW
Definition: zone_blades_edge_mountains.cpp:519
@ SPELL_PRE_GAME_BLUE
Definition: zone_blades_edge_mountains.cpp:516
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition: Unit.cpp:1169
void NearTeleportTo(Position &pos, bool casting=false, bool vehicleTeleport=false, bool withPet=false, bool removeTransport=false)
Definition: Unit.cpp:20250
void GenerateColorSequence()
Definition: zone_blades_edge_mountains.cpp:821

References Unit::CastSpell(), clusterIds, WorldObject::FindNearestGameObject(), GenerateColorSequence(), GO_APEXIS_MONUMENT, GO_APEXIS_RELIC, GO_FLAG_NOT_SELECTABLE, large, ScriptedAI::me, Unit::NearTeleportTo(), searchDistance, SIMON_BLUE, SIMON_GREEN, SIMON_MAX_COLORS, SIMON_RED, SIMON_YELLOW, SPELL_PRE_GAME_BLUE, SPELL_PRE_GAME_GREEN, SPELL_PRE_GAME_RED, SPELL_PRE_GAME_YELLOW, and zCoordCorrection.

Referenced by UpdateAI().

◆ SpellHitTarget()

void npc_simon_bunny::npc_simon_bunnyAI::SpellHitTarget ( Unit target,
SpellInfo const *  spell 
)
inlineoverridevirtual

Reimplemented from ScriptedAI.

980 {
981 // Cast SPELL_BAD_PRESS_DAMAGE with scaled basepoints when the visual hits the target.
982 // Need Fix: When SPELL_BAD_PRESS_TRIGGER hits target it triggers spell SPELL_BAD_PRESS_DAMAGE by itself
983 // so player gets damage equal to calculated damage dbc basepoints for SPELL_BAD_PRESS_DAMAGE (~50)
984 if (spell->Id == SPELL_BAD_PRESS_TRIGGER)
985 {
986 int32 bp = (int32)((float)(fails) * 0.33f * target->GetMaxHealth());
987 target->CastCustomSpell(target, SPELL_BAD_PRESS_DAMAGE, &bp, nullptr, nullptr, true);
988 }
989 }
std::int32_t int32
Definition: Define.h:104
@ SPELL_BAD_PRESS_DAMAGE
Definition: zone_blades_edge_mountains.cpp:536
uint32 GetMaxHealth() const
Definition: Unit.h:1455
SpellCastResult CastCustomSpell(Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition: Unit.cpp:1226

References Unit::CastCustomSpell(), fails, Unit::GetMaxHealth(), SpellInfo::Id, SPELL_BAD_PRESS_DAMAGE, and SPELL_BAD_PRESS_TRIGGER.

◆ StartGame()

void npc_simon_bunny::npc_simon_bunnyAI::StartGame ( )
inline
704 {
705 listening = false;
706 gameLevel = 0;
707 fails = 0;
708 gameTicks = 0;
709 zCoordCorrection = large ? 8.0f : 2.75f;
710 searchDistance = large ? 13.0f : 5.0f;
711 colorSequence.clear();
712 playableSequence.clear();
713 playerSequence.clear();
714 me->SetObjectScale(large ? 2.0f : 1.0f);
715
716 std::list<WorldObject*> ClusterList;
720
721 for (std::list<WorldObject*>::const_iterator i = ClusterList.begin(); i != ClusterList.end(); ++i)
722 {
723 if (GameObject* go = (*i)->ToGameObject())
724 {
725 // We are checking for displayid because all simon nodes have 4 clusters with different entries
726 if (large)
727 {
728 switch (go->GetGOInfo()->displayId)
729 {
731 clusterIds[SIMON_BLUE] = go->GetEntry();
732 break;
733
735 clusterIds[SIMON_RED] = go->GetEntry();
736 break;
737
739 clusterIds[SIMON_GREEN] = go->GetEntry();
740 break;
741
743 clusterIds[SIMON_YELLOW] = go->GetEntry();
744 break;
745 }
746 }
747 else
748 {
749 switch (go->GetGOInfo()->displayId)
750 {
752 clusterIds[SIMON_BLUE] = go->GetEntry();
753 break;
754
756 clusterIds[SIMON_RED] = go->GetEntry();
757 break;
758
760 clusterIds[SIMON_GREEN] = go->GetEntry();
761 break;
762
764 clusterIds[SIMON_YELLOW] = go->GetEntry();
765 break;
766 }
767 }
768 }
769 }
770
771 _events.Reset();
774
776 relic->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
777 }
@ EVENT_SIMON_PERIODIC_PLAYER_CHECK
Definition: zone_blades_edge_mountains.cpp:547
@ EVENT_SIMON_ROUND_FINISHED
Definition: zone_blades_edge_mountains.cpp:550
@ GO_YELLOW_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:510
@ GO_BLUE_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:511
@ GO_GREEN_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:508
@ GO_BLUE_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:507
@ GO_GREEN_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:512
@ GO_RED_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:513
@ GO_RED_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:509
@ GO_YELLOW_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:514
void Reset()
Definition: EventMap.cpp:21
void SetObjectScale(float scale) override
Definition: Creature.cpp:3403
GameObject * ToGameObject()
Definition: Object.h:202
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:207
Definition: GridNotifiers.h:236
Definition: GridNotifiers.h:1582
uint8 gameTicks
Definition: zone_blades_edge_mountains.cpp:579

References _events, clusterIds, colorSequence, EVENT_SIMON_PERIODIC_PLAYER_CHECK, EVENT_SIMON_ROUND_FINISHED, fails, WorldObject::FindNearestGameObject(), gameLevel, gameTicks, GO_APEXIS_MONUMENT, GO_APEXIS_RELIC, GO_BLUE_CLUSTER_DISPLAY, GO_BLUE_CLUSTER_DISPLAY_LARGE, GO_FLAG_NOT_SELECTABLE, GO_GREEN_CLUSTER_DISPLAY, GO_GREEN_CLUSTER_DISPLAY_LARGE, GO_RED_CLUSTER_DISPLAY, GO_RED_CLUSTER_DISPLAY_LARGE, GO_YELLOW_CLUSTER_DISPLAY, GO_YELLOW_CLUSTER_DISPLAY_LARGE, large, listening, ScriptedAI::me, playableSequence, playerSequence, EventMap::Reset(), EventMap::ScheduleEvent(), searchDistance, Creature::SetObjectScale(), SIMON_BLUE, SIMON_GREEN, SIMON_RED, SIMON_YELLOW, Object::ToGameObject(), Cell::VisitAllObjects(), and zCoordCorrection.

Referenced by SetGUID().

◆ UpdateAI()

void npc_simon_bunny::npc_simon_bunnyAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from ScriptedAI.

588 {
589 _events.Update(diff);
590
591 switch (_events.ExecuteEvent())
592 {
594 if (!CheckPlayer())
595 ResetNode();
596 else
598 break;
600 SetUpPreGame();
603 break;
605 if (!playableSequence.empty())
606 {
609 }
610 else
611 {
612 listening = true;
614 playerSequence.clear();
616 gameTicks = 0;
618 }
619 break;
622
623 if (gameTicks > gameLevel)
625 else
627 gameTicks++;
628 break;
630 PrepareClusters(true);
631 break;
634 break;
637 break;
638 }
639 }
@ EVENT_SIMON_GAME_TICK
Definition: zone_blades_edge_mountains.cpp:549
@ EVENT_SIMON_PLAY_SEQUENCE
Definition: zone_blades_edge_mountains.cpp:545
@ EVENT_SIMON_TOO_LONG_TIME
Definition: zone_blades_edge_mountains.cpp:548
@ SPELL_VISUAL_START_PLAYER_LEVEL
Definition: zone_blades_edge_mountains.cpp:532
@ SPELL_AUDIBLE_GAME_TICK
Definition: zone_blades_edge_mountains.cpp:531
uint32 ExecuteEvent()
Definition: EventMap.cpp:114
void Update(uint32 time)
Definition: EventMap.h:54
void CancelEvent(uint32 eventId)
Definition: EventMap.cpp:190
void PlayNextColor()
Definition: zone_blades_edge_mountains.cpp:850
bool CheckPlayer()
Definition: zone_blades_edge_mountains.cpp:992
void PrepareClusters(bool clustersOnly=false)
Definition: zone_blades_edge_mountains.cpp:832
void SetUpPreGame()
Definition: zone_blades_edge_mountains.cpp:884

References _events, ACTION_SIMON_ROUND_FINISHED, ACTION_SIMON_WRONG_SEQUENCE, EventMap::CancelEvent(), CheckPlayer(), DoAction(), UnitAI::DoCast(), EVENT_SIMON_GAME_TICK, EVENT_SIMON_PERIODIC_PLAYER_CHECK, EVENT_SIMON_PLAY_SEQUENCE, EVENT_SIMON_RESET_CLUSTERS, EVENT_SIMON_ROUND_FINISHED, EVENT_SIMON_SETUP_PRE_GAME, EVENT_SIMON_TOO_LONG_TIME, EventMap::ExecuteEvent(), gameLevel, gameTicks, listening, playableSequence, playerSequence, PlayNextColor(), PrepareClusters(), ResetNode(), EventMap::ScheduleEvent(), SetUpPreGame(), SPELL_AUDIBLE_GAME_TICK, SPELL_VISUAL_START_PLAYER_LEVEL, and EventMap::Update().

Member Data Documentation

◆ _events

EventMap npc_simon_bunny::npc_simon_bunnyAI::_events

Referenced by DoAction(), SetData(), StartGame(), and UpdateAI().

◆ clusterIds

uint32 npc_simon_bunny::npc_simon_bunnyAI::clusterIds[SIMON_MAX_COLORS]

◆ colorSequence

std::list<uint8> npc_simon_bunny::npc_simon_bunnyAI::colorSequence

◆ fails

uint8 npc_simon_bunny::npc_simon_bunnyAI::fails

◆ gameLevel

uint8 npc_simon_bunny::npc_simon_bunnyAI::gameLevel

◆ gameTicks

uint8 npc_simon_bunny::npc_simon_bunnyAI::gameTicks

Referenced by StartGame(), and UpdateAI().

◆ large

bool npc_simon_bunny::npc_simon_bunnyAI::large

◆ listening

bool npc_simon_bunny::npc_simon_bunnyAI::listening

Referenced by DoAction(), SetData(), StartGame(), and UpdateAI().

◆ playableSequence

std::list<uint8> npc_simon_bunny::npc_simon_bunnyAI::playableSequence

◆ playerGUID

ObjectGuid npc_simon_bunny::npc_simon_bunnyAI::playerGUID

◆ playerSequence

std::list<uint8> npc_simon_bunny::npc_simon_bunnyAI::playerSequence

◆ searchDistance

float npc_simon_bunny::npc_simon_bunnyAI::searchDistance

◆ zCoordCorrection

float npc_simon_bunny::npc_simon_bunnyAI::zCoordCorrection