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 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 HealDone (Unit *, uint32 &)
 
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
 
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
572: ScriptedAI(creature) { }
Definition: ScriptedCreature.h:192

Member Function Documentation

◆ CheckPlayer()

bool npc_simon_bunny::npc_simon_bunnyAI::CheckPlayer ( )
inline
992 {
994 {
995 if (player->isDead())
996 return false;
997 if (player->GetDistance2d(me) >= 2.0f * searchDistance)
998 {
1000 return false;
1001 }
1002 }
1003 else
1004 return false;
1005
1006 return true;
1007 }
Player * GetPlayer(Map const *, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:225
Creature * me
Definition: ScriptedCreature.h:282
Definition: Player.h:1046
float searchDistance
Definition: zone_blades_edge_mountains.cpp:582
void GivePunishment()
Definition: zone_blades_edge_mountains.cpp:956
ObjectGuid playerGUID
Definition: zone_blades_edge_mountains.cpp:579

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

Referenced by UpdateAI().

◆ CheckPlayerSequence()

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

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.

641 {
642 switch (action)
643 {
645 listening = false;
649 if (gameLevel == 10)
650 ResetNode();
651 else
653 break;
655 gameLevel++;
657 break;
661 break;
662 }
663 }
@ ACTION_SIMON_ROUND_FINISHED
Definition: zone_blades_edge_mountains.cpp:553
@ EVENT_SIMON_SETUP_PRE_GAME
Definition: zone_blades_edge_mountains.cpp:543
@ SPELL_VISUAL_START_AI_LEVEL
Definition: zone_blades_edge_mountains.cpp:532
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:178
bool listening
Definition: zone_blades_edge_mountains.cpp:575
uint8 gameLevel
Definition: zone_blades_edge_mountains.cpp:576
void ResetNode()
Definition: zone_blades_edge_mountains.cpp:779
EventMap _events
Definition: zone_blades_edge_mountains.cpp:583
void GiveRewardForLevel(uint8 level)
Definition: zone_blades_edge_mountains.cpp:925

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
821 {
822 colorSequence.clear();
823 for (uint8 i = 0; i <= gameLevel; i++)
825
826 for (std::list<uint8>::const_iterator i = colorSequence.begin(); i != colorSequence.end(); ++i)
827 playableSequence.push_back(*i);
828 }
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:560
@ SIMON_BLUE
Definition: zone_blades_edge_mountains.cpp:558
@ SIMON_RED
Definition: zone_blades_edge_mountains.cpp:559
@ SIMON_YELLOW
Definition: zone_blades_edge_mountains.cpp:561
std::list< uint8 > playableSequence
Definition: zone_blades_edge_mountains.cpp:584

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
957 {
958 if (large)
959 {
962 guardian->AI()->AttackStart(player);
963
964 ResetNode();
965 }
966 else
967 {
968 fails++;
969
971 DoCast(player, SPELL_BAD_PRESS_TRIGGER, true);
972
973 if (fails >= 4)
974 ResetNode();
975 }
976 }
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
Definition: Object.h:45
@ NPC_APEXIS_GUARDIAN
Definition: zone_blades_edge_mountains.cpp:497
@ SPELL_BAD_PRESS_TRIGGER
Definition: zone_blades_edge_mountains.cpp:534
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:2318
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:574
uint8 fails
Definition: zone_blades_edge_mountains.cpp:577
float zCoordCorrection
Definition: zone_blades_edge_mountains.cpp:581

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
926 {
927 uint32 rewSpell = 0;
928 switch (level)
929 {
930 case 6:
931 if (large)
933 else
934 rewSpell = SPELL_REWARD_BUFF_1;
935 break;
936 case 8:
937 rewSpell = SPELL_REWARD_BUFF_2;
938 break;
939 case 10:
940 rewSpell = SPELL_REWARD_BUFF_3;
941 break;
942 }
943
944 if (rewSpell)
946 DoCast(player, rewSpell, true);
947 }
std::uint32_t uint32
Definition: Define.h:108
@ SPELL_REWARD_BUFF_2
Definition: zone_blades_edge_mountains.cpp:537
@ SPELL_REWARD_BUFF_3
Definition: zone_blades_edge_mountains.cpp:538
@ SPELL_REWARD_BUFF_1
Definition: zone_blades_edge_mountains.cpp:536

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
857 {
858 switch (color)
859 {
860 case SIMON_BLUE:
863 break;
864 case SIMON_GREEN:
867 break;
868 case SIMON_RED:
871 break;
872 case SIMON_YELLOW:
875 break;
876 }
877 }
@ SOUND_RED
Definition: zone_blades_edge_mountains.cpp:526
@ SOUND_YELLOW
Definition: zone_blades_edge_mountains.cpp:527
@ SOUND_BLUE
Definition: zone_blades_edge_mountains.cpp:524
@ SOUND_GREEN
Definition: zone_blades_edge_mountains.cpp:525
@ SPELL_VISUAL_YELLOW
Definition: zone_blades_edge_mountains.cpp:522
@ SPELL_VISUAL_BLUE
Definition: zone_blades_edge_mountains.cpp:519
@ SPELL_VISUAL_RED
Definition: zone_blades_edge_mountains.cpp:521
@ SPELL_VISUAL_GREEN
Definition: zone_blades_edge_mountains.cpp:520
void DoPlaySoundToSet(WorldObject *source, uint32 soundId)
Definition: ScriptedCreature.cpp:252

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
850 {
851 PlayColor(*playableSequence.begin());
852 playableSequence.erase(playableSequence.begin());
853 }
void PlayColor(uint8 color)
Definition: zone_blades_edge_mountains.cpp:856

References playableSequence, and PlayColor().

Referenced by UpdateAI().

◆ PrepareClusters()

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

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
780 {
782
783 for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++)
784 if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], searchDistance))
785 cluster->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
786
787 for (uint32 auraId = GO_AURA_BLUE; auraId <= GO_AURA_YELLOW; auraId++)
788 if (GameObject* auraGo = me->FindNearestGameObject(auraId, searchDistance))
789 auraGo->RemoveFromWorld();
790
792 relic->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
793
794 me->DespawnOrUnsummon(1000);
795 }
@ GO_APEXIS_MONUMENT
Definition: zone_blades_edge_mountains.cpp:500
@ GO_APEXIS_RELIC
Definition: zone_blades_edge_mountains.cpp:499
@ SOUND_DISABLE_NODE
Definition: zone_blades_edge_mountains.cpp:528
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition: Creature.cpp:2108

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.

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

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.

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

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

◆ SetUpPreGame()

void npc_simon_bunny::npc_simon_bunnyAI::SetUpPreGame ( )
inline
884 {
885 for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++)
886 {
887 if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], 2.0f * searchDistance))
888 {
889 cluster->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
890
891 // break since we don't need glowing auras for large clusters
892 if (large)
893 break;
894
895 float x, y, z, o;
896 cluster->GetPosition(x, y, z, o);
897 me->NearTeleportTo(x, y, z, o);
898
899 uint32 preGameSpellId;
900 if (cluster->GetEntry() == clusterIds[SIMON_RED])
901 preGameSpellId = SPELL_PRE_GAME_RED;
902 else if (cluster->GetEntry() == clusterIds[SIMON_BLUE])
903 preGameSpellId = SPELL_PRE_GAME_BLUE;
904 else if (cluster->GetEntry() == clusterIds[SIMON_GREEN])
905 preGameSpellId = SPELL_PRE_GAME_GREEN;
906 else if (cluster->GetEntry() == clusterIds[SIMON_YELLOW])
907 preGameSpellId = SPELL_PRE_GAME_YELLOW;
908 else break;
909
910 me->CastSpell(cluster, preGameSpellId, true);
911 }
912 }
913
915 {
916 float x, y, z, o;
917 relic->GetPosition(x, y, z, o);
918 me->NearTeleportTo(x, y, z + zCoordCorrection, o);
919 }
920
922 }
@ SPELL_PRE_GAME_RED
Definition: zone_blades_edge_mountains.cpp:517
@ SPELL_PRE_GAME_GREEN
Definition: zone_blades_edge_mountains.cpp:516
@ SPELL_PRE_GAME_YELLOW
Definition: zone_blades_edge_mountains.cpp:518
@ SPELL_PRE_GAME_BLUE
Definition: zone_blades_edge_mountains.cpp:515
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:20148
void GenerateColorSequence()
Definition: zone_blades_edge_mountains.cpp:820

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.

979 {
980 // Cast SPELL_BAD_PRESS_DAMAGE with scaled basepoints when the visual hits the target.
981 // Need Fix: When SPELL_BAD_PRESS_TRIGGER hits target it triggers spell SPELL_BAD_PRESS_DAMAGE by itself
982 // so player gets damage equal to calculated damage dbc basepoints for SPELL_BAD_PRESS_DAMAGE (~50)
983 if (spell->Id == SPELL_BAD_PRESS_TRIGGER)
984 {
985 int32 bp = (int32)((float)(fails) * 0.33f * target->GetMaxHealth());
986 target->CastCustomSpell(target, SPELL_BAD_PRESS_DAMAGE, &bp, nullptr, nullptr, true);
987 }
988 }
std::int32_t int32
Definition: Define.h:104
@ SPELL_BAD_PRESS_DAMAGE
Definition: zone_blades_edge_mountains.cpp:535
uint32 GetMaxHealth() const
Definition: Unit.h:1441
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
703 {
704 listening = false;
705 gameLevel = 0;
706 fails = 0;
707 gameTicks = 0;
708 zCoordCorrection = large ? 8.0f : 2.75f;
709 searchDistance = large ? 13.0f : 5.0f;
710 colorSequence.clear();
711 playableSequence.clear();
712 playerSequence.clear();
713 me->SetObjectScale(large ? 2.0f : 1.0f);
714
715 std::list<WorldObject*> ClusterList;
719
720 for (std::list<WorldObject*>::const_iterator i = ClusterList.begin(); i != ClusterList.end(); ++i)
721 {
722 if (GameObject* go = (*i)->ToGameObject())
723 {
724 // We are checking for displayid because all simon nodes have 4 clusters with different entries
725 if (large)
726 {
727 switch (go->GetGOInfo()->displayId)
728 {
730 clusterIds[SIMON_BLUE] = go->GetEntry();
731 break;
732
734 clusterIds[SIMON_RED] = go->GetEntry();
735 break;
736
738 clusterIds[SIMON_GREEN] = go->GetEntry();
739 break;
740
742 clusterIds[SIMON_YELLOW] = go->GetEntry();
743 break;
744 }
745 }
746 else
747 {
748 switch (go->GetGOInfo()->displayId)
749 {
751 clusterIds[SIMON_BLUE] = go->GetEntry();
752 break;
753
755 clusterIds[SIMON_RED] = go->GetEntry();
756 break;
757
759 clusterIds[SIMON_GREEN] = go->GetEntry();
760 break;
761
763 clusterIds[SIMON_YELLOW] = go->GetEntry();
764 break;
765 }
766 }
767 }
768 }
769
770 _events.Reset();
773
775 relic->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE);
776 }
@ EVENT_SIMON_PERIODIC_PLAYER_CHECK
Definition: zone_blades_edge_mountains.cpp:546
@ EVENT_SIMON_ROUND_FINISHED
Definition: zone_blades_edge_mountains.cpp:549
@ GO_YELLOW_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:509
@ GO_BLUE_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:510
@ GO_GREEN_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:507
@ GO_BLUE_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:506
@ GO_GREEN_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:511
@ GO_RED_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:512
@ GO_RED_CLUSTER_DISPLAY
Definition: zone_blades_edge_mountains.cpp:508
@ GO_YELLOW_CLUSTER_DISPLAY_LARGE
Definition: zone_blades_edge_mountains.cpp:513
void Reset()
Definition: EventMap.cpp:21
void SetObjectScale(float scale) override
Definition: Creature.cpp:3386
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:578

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.

587 {
588 _events.Update(diff);
589
590 switch (_events.ExecuteEvent())
591 {
593 if (!CheckPlayer())
594 ResetNode();
595 else
597 break;
599 SetUpPreGame();
602 break;
604 if (!playableSequence.empty())
605 {
608 }
609 else
610 {
611 listening = true;
613 playerSequence.clear();
615 gameTicks = 0;
617 }
618 break;
621
622 if (gameTicks > gameLevel)
624 else
626 gameTicks++;
627 break;
629 PrepareClusters(true);
630 break;
633 break;
636 break;
637 }
638 }
@ EVENT_SIMON_GAME_TICK
Definition: zone_blades_edge_mountains.cpp:548
@ EVENT_SIMON_PLAY_SEQUENCE
Definition: zone_blades_edge_mountains.cpp:544
@ EVENT_SIMON_TOO_LONG_TIME
Definition: zone_blades_edge_mountains.cpp:547
@ SPELL_VISUAL_START_PLAYER_LEVEL
Definition: zone_blades_edge_mountains.cpp:531
@ SPELL_AUDIBLE_GAME_TICK
Definition: zone_blades_edge_mountains.cpp:530
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:849
bool CheckPlayer()
Definition: zone_blades_edge_mountains.cpp:991
void PrepareClusters(bool clustersOnly=false)
Definition: zone_blades_edge_mountains.cpp:831
void SetUpPreGame()
Definition: zone_blades_edge_mountains.cpp:883

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