AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
go_wind_stone::go_wind_stoneAI Struct Reference
Inheritance diagram for go_wind_stone::go_wind_stoneAI:
GameObjectAI

Public Member Functions

 go_wind_stoneAI (GameObject *go)
 
void InitializeAI () override
 
bool GossipHello (Player *player, bool reportUse) override
 
bool GossipSelect (Player *player, uint32 sender, uint32 action) override
 
void SummonNPC (GameObject *go, Player *player, uint32 npc, uint32 spellId)
 
- Public Member Functions inherited from GameObjectAI
 GameObjectAI (GameObject *go)
 
virtual ~GameObjectAI ()
 
virtual void UpdateAI (uint32)
 
virtual void Reset ()
 
virtual void DoAction (int32)
 
virtual void SetGUID (ObjectGuid, int32)
 
virtual ObjectGuid GetGUID (int32) const
 
virtual bool GossipSelectCode (Player *, uint32, uint32, char const *)
 
virtual bool QuestAccept (Player *, Quest const *)
 
virtual bool QuestReward (Player *, Quest const *, uint32)
 
virtual uint32 GetDialogStatus (Player *)
 
virtual void Destroyed (Player *, uint32)
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void OnGameEvent (bool, uint16)
 
virtual void OnStateChanged (uint32, Unit *)
 
virtual void EventInform (uint32)
 
virtual void SpellHit (Unit *, SpellInfo const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual void JustSummoned (Creature *)
 
virtual void SummonedCreatureDespawn (Creature *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void SummonedCreatureEvade (Creature *)
 

Private Attributes

ObjectGuid _creatureGuid
 

Additional Inherited Members

- Static Public Member Functions inherited from GameObjectAI
static int32 Permissible (GameObject const *go)
 
- Protected Attributes inherited from GameObjectAI
GameObject *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ go_wind_stoneAI()

go_wind_stone::go_wind_stoneAI::go_wind_stoneAI ( GameObject go)
inline
1012: GameObjectAI(go) {}
Definition GameObjectAI.h:33

Member Function Documentation

◆ GossipHello()

bool go_wind_stone::go_wind_stoneAI::GossipHello ( Player player,
bool  reportUse 
)
inlineoverridevirtual

Reimplemented from GameObjectAI.

1020 {
1021 if (reportUse)
1022 {
1023 uint32 gossipId = me->GetGOInfo()->GetGossipMenuId();
1024 bool _twilightSetAura = (player->HasAura(AURA_TWILIGHT_SET, player->GetGUID()));
1025 bool _medallionAura = (player->HasAura(AURA_MEDALLION, player->GetGUID()));
1026 bool _ringAura = (player->HasAura(AURA_RING, player->GetGUID()));
1027
1028 switch (gossipId)
1029 {
1030 case GOSSIPID_LESSER_WS:
1031 {
1032 if (!_twilightSetAura)
1033 me->CastSpell(player, SPELL_PUNISHMENT);
1034 break;
1035 }
1036 case GOSSIPID_WS:
1037 {
1038 if (!_twilightSetAura || !_medallionAura)
1039 me->CastSpell(player, SPELL_PUNISHMENT);
1040 break;
1041 }
1043 {
1044 if (!_twilightSetAura || !_medallionAura || !_ringAura)
1045 me->CastSpell(player, SPELL_PUNISHMENT);
1046 break;
1047 }
1048 default:
1049 break;
1050 }
1051 }
1052 return false;
1053 }
std::uint32_t uint32
Definition Define.h:107
GameObject *const me
Definition GameObjectAI.h:35
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
void CastSpell(Unit *target, uint32 spell)
Definition GameObject.cpp:2070
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5754
uint32 GetGossipMenuId() const
Definition GameObjectData.h:552
@ AURA_MEDALLION
Definition zone_silithus.cpp:948
@ GOSSIPID_GREATER_WS
Definition zone_silithus.cpp:969
@ GOSSIPID_LESSER_WS
Definition zone_silithus.cpp:967
@ AURA_RING
Definition zone_silithus.cpp:949
@ GOSSIPID_WS
Definition zone_silithus.cpp:968
@ SPELL_PUNISHMENT
Definition zone_silithus.cpp:950
@ AURA_TWILIGHT_SET
Definition zone_silithus.cpp:947

References AURA_MEDALLION, AURA_RING, AURA_TWILIGHT_SET, Object::GetGUID(), GOSSIPID_GREATER_WS, GOSSIPID_LESSER_WS, GOSSIPID_WS, Unit::HasAura(), and SPELL_PUNISHMENT.

◆ GossipSelect()

bool go_wind_stone::go_wind_stoneAI::GossipSelect ( Player player,
uint32  sender,
uint32  action 
)
inlineoverridevirtual

Reimplemented from GameObjectAI.

1056 {
1057 Seconds respawnTimer{};
1059
1061 if (lastSpawn && lastSpawn->IsAlive())
1062 {
1063 // We already summoned something recently, return.
1064 CloseGossipMenuFor(player);
1065 return true;
1066 }
1067 else
1068 {
1070 }
1071
1072 if (sender == GOSSIPID_LESSER_WS)
1073 {
1074 respawnTimer = 300s; // Lesser Windstone respawn in 5 minutes
1075
1076 switch (action)
1077 {
1078 case 0:
1080 break;
1081 case 1:
1083 break;
1084 case 2:
1086 break;
1087 case 3:
1089 break;
1090 case 4:
1092 break;
1093 default:
1094 break;
1095 }
1096 }
1097 else if (sender == GOSSIPID_WS)
1098 {
1099 respawnTimer = 900s; // Windstone respawn in 15 minutes
1100
1101 switch (action)
1102 {
1103 case 0:
1105 break;
1106 case 1:
1108 break;
1109 case 2:
1111 break;
1112 case 3:
1114 break;
1115 case 4:
1117 break;
1118 default:
1119 break;
1120 }
1121 }
1122 else if (sender == GOSSIPID_GREATER_WS)
1123 {
1124 respawnTimer = 10800s; // Greater Windstone respawn in 3 hours
1125
1126 switch (action)
1127 {
1128 case 0:
1130 break;
1131 case 1:
1133 break;
1134 case 2:
1136 break;
1137 case 3:
1139 break;
1140 case 4:
1142 break;
1143 default:
1144 break;
1145 }
1146 }
1147
1148 me->DespawnOrUnsummon(5000ms, respawnTimer); // Despawn in 5 Seconds for respawnTimer value
1150 CloseGossipMenuFor(player);
1151 return false;
1152 }
static First const & RAND(First const &first, Second const &second, Rest const &... rest)
Definition CreatureAIImpl.h:25
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:30
void CloseGossipMenuFor(Player *player)
Definition ScriptedGossip.cpp:56
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1607
Definition Creature.h:43
void SetGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:217
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
Definition GameObject.cpp:936
void Clear()
Definition ObjectGuid.h:138
void SendCloseGossip()
Definition GossipDef.cpp:239
PlayerMenu * PlayerTalkClass
Definition Player.h:2249
bool IsAlive() const
Definition Unit.h:1698
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition ObjectAccessor.cpp:210
ObjectGuid _creatureGuid
Definition zone_silithus.cpp:1183
void SummonNPC(GameObject *go, Player *player, uint32 npc, uint32 spellId)
Definition zone_silithus.cpp:1154
@ NPC_TEMPLAR_AIR
Definition zone_silithus.cpp:972
@ SPELL_TEMPLAR_FIRE
Definition zone_silithus.cpp:953
@ NPC_TEMPLAR_WATER
Definition zone_silithus.cpp:971
@ SPELL_DUKE_WATER
Definition zone_silithus.cpp:961
@ NPC_ROYAL_FIRE
Definition zone_silithus.cpp:978
@ NPC_DUKE_AIR
Definition zone_silithus.cpp:977
@ SPELL_ROYAL_WATER
Definition zone_silithus.cpp:966
@ SPELL_ROYAL_AIR
Definition zone_silithus.cpp:964
@ SPELL_ROYAL_RANDOM
Definition zone_silithus.cpp:962
@ SPELL_DUKE_AIR
Definition zone_silithus.cpp:959
@ SPELL_ROYAL_FIRE
Definition zone_silithus.cpp:963
@ NPC_ROYAL_EARTH
Definition zone_silithus.cpp:980
@ NPC_TEMPLAR_EARTH
Definition zone_silithus.cpp:973
@ NPC_TEMPLAR_FIRE
Definition zone_silithus.cpp:970
@ NPC_DUKE_WATER
Definition zone_silithus.cpp:975
@ SPELL_DUKE_FIRE
Definition zone_silithus.cpp:958
@ NPC_ROYAL_WATER
Definition zone_silithus.cpp:981
@ NPC_ROYAL_AIR
Definition zone_silithus.cpp:979
@ SPELL_DUKE_RANDOM
Definition zone_silithus.cpp:957
@ SPELL_DUKE_EARTH
Definition zone_silithus.cpp:960
@ SPELL_ROYAL_EARTH
Definition zone_silithus.cpp:965
@ NPC_DUKE_FIRE
Definition zone_silithus.cpp:974
@ SPELL_TEMPLAR_AIR
Definition zone_silithus.cpp:954
@ SPELL_TEMPLAR_WATER
Definition zone_silithus.cpp:956
@ SPELL_TEMPLAR_EARTH
Definition zone_silithus.cpp:955
@ SPELL_TEMPLAR_RANDOM
Definition zone_silithus.cpp:952
@ NPC_DUKE_EARTH
Definition zone_silithus.cpp:976

References CloseGossipMenuFor(), ObjectAccessor::GetCreature(), GO_FLAG_NOT_SELECTABLE, GOSSIPID_GREATER_WS, GOSSIPID_LESSER_WS, GOSSIPID_WS, Unit::IsAlive(), NPC_DUKE_AIR, NPC_DUKE_EARTH, NPC_DUKE_FIRE, NPC_DUKE_WATER, NPC_ROYAL_AIR, NPC_ROYAL_EARTH, NPC_ROYAL_FIRE, NPC_ROYAL_WATER, NPC_TEMPLAR_AIR, NPC_TEMPLAR_EARTH, NPC_TEMPLAR_FIRE, NPC_TEMPLAR_WATER, Player::PlayerTalkClass, RAND(), PlayerMenu::SendCloseGossip(), SPELL_DUKE_AIR, SPELL_DUKE_EARTH, SPELL_DUKE_FIRE, SPELL_DUKE_RANDOM, SPELL_DUKE_WATER, SPELL_ROYAL_AIR, SPELL_ROYAL_EARTH, SPELL_ROYAL_FIRE, SPELL_ROYAL_RANDOM, SPELL_ROYAL_WATER, SPELL_TEMPLAR_AIR, SPELL_TEMPLAR_EARTH, SPELL_TEMPLAR_FIRE, SPELL_TEMPLAR_RANDOM, and SPELL_TEMPLAR_WATER.

◆ InitializeAI()

void go_wind_stone::go_wind_stoneAI::InitializeAI ( )
inlineoverridevirtual

Reimplemented from GameObjectAI.

1015 {
1017 }
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:218

References GO_FLAG_NOT_SELECTABLE.

◆ SummonNPC()

void go_wind_stone::go_wind_stoneAI::SummonNPC ( GameObject go,
Player player,
uint32  npc,
uint32  spellId 
)
inline
1155 {
1156 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
1157 if (!spellInfo)
1158 return;
1159 SpellInfo const* spellInfoTrigger = sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell);
1160 if (!spellInfoTrigger)
1161 return;
1162 Spell* spell = new Spell(player, spellInfoTrigger, TRIGGERED_NONE);
1163 SpellCastResult result = spell->CheckCast(true);
1164 delete spell;
1165 if (result != SPELL_CAST_OK)
1166 {
1167 return;
1168 }
1169 player->CastSpell(player, spellInfoTrigger->Id, false);
1171 {
1172 summons->SetCorpseDelay(5 * MINUTE);
1173 summons->SetTarget(player->GetGUID());
1174 summons->SetLootRecipient(player);
1175 summons->CastSpell(summons, SPELL_SPAWN_IN, false);
1176 summons->AI()->Talk(SAY_ON_SPAWN_IN, player);
1177 summons->m_Events.AddEvent(new DelayedWindstoneSummonEvent(summons, player->GetGUID()), summons->m_Events.CalculateTime(5200));
1178 _creatureGuid = summons->GetGUID();
1179 }
1180 }
npc
Definition BattlegroundSA.h:47
constexpr auto MINUTE
Definition Common.h:47
@ TEMPSUMMON_TIMED_DESPAWN_OOC_ALIVE
Definition Object.h:56
@ EFFECT_0
Definition SharedDefines.h:31
SpellCastResult
Definition SharedDefines.h:948
@ SPELL_CAST_OK
Definition SharedDefines.h:1138
@ TRIGGERED_NONE
Definition SpellDefines.h:133
#define sSpellMgr
Definition SpellMgr.h:825
float summons[3][4]
Definition boss_urom.cpp:76
Definition zone_silithus.cpp:986
Definition SpellInfo.h:316
uint32 Id
Definition SpellInfo.h:320
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:393
Definition Spell.h:287
SpellCastResult CheckCast(bool strict)
Definition Spell.cpp:5675
Definition TemporarySummon.h:40
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:1179
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:2368
float GetPositionZ() const
Definition Position.h:123
float GetOrientation() const
Definition Position.h:124
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122
@ SAY_ON_SPAWN_IN
Definition zone_silithus.cpp:982
@ SPELL_SPAWN_IN
Definition zone_silithus.cpp:951

References Unit::CastSpell(), Spell::CheckCast(), EFFECT_0, SpellInfo::Effects, Object::GetGUID(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), SpellInfo::Id, MINUTE, SAY_ON_SPAWN_IN, SPELL_CAST_OK, SPELL_SPAWN_IN, sSpellMgr, WorldObject::SummonCreature(), summons, TEMPSUMMON_TIMED_DESPAWN_OOC_ALIVE, and TRIGGERED_NONE.

Member Data Documentation

◆ _creatureGuid

ObjectGuid go_wind_stone::go_wind_stoneAI::_creatureGuid
private

The documentation for this struct was generated from the following file: