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 InitializeAI ()
 
virtual void Reset ()
 
virtual void DoAction (int32)
 
virtual void SetGUID (ObjectGuid, int32)
 
virtual ObjectGuid GetGUID (int32) const
 
virtual bool GossipHello (Player *, bool)
 
virtual bool GossipSelect (Player *, uint32, uint32)
 
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 *)
 

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
1036: GameObjectAI(go) {}
Definition: GameObjectAI.h:34

Member Function Documentation

◆ GossipHello()

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

Reimplemented from GameObjectAI.

1044 {
1045 if (reportUse)
1046 {
1047 uint32 gossipId = me->GetGOInfo()->GetGossipMenuId();
1048 bool _twilightSetAura = (player->HasAura(AURA_TWILIGHT_SET, player->GetGUID()));
1049 bool _medallionAura = (player->HasAura(AURA_MEDALLION, player->GetGUID()));
1050 bool _ringAura = (player->HasAura(AURA_RING, player->GetGUID()));
1051
1052 switch (gossipId)
1053 {
1054 case GOSSIPID_LESSER_WS:
1055 {
1056 if (!_twilightSetAura)
1057 me->CastSpell(player, SPELL_PUNISHMENT);
1058 break;
1059 }
1060 case GOSSIPID_WS:
1061 {
1062 if (!_twilightSetAura || !_medallionAura)
1063 me->CastSpell(player, SPELL_PUNISHMENT);
1064 break;
1065 }
1067 {
1068 if (!_twilightSetAura || !_medallionAura || !_ringAura)
1069 me->CastSpell(player, SPELL_PUNISHMENT);
1070 break;
1071 }
1072 default:
1073 break;
1074 }
1075 }
1076 return false;
1077 }
std::uint32_t uint32
Definition: Define.h:108
@ AURA_MEDALLION
Definition: zone_silithus.cpp:972
@ GOSSIPID_GREATER_WS
Definition: zone_silithus.cpp:993
@ GOSSIPID_LESSER_WS
Definition: zone_silithus.cpp:991
@ AURA_RING
Definition: zone_silithus.cpp:973
@ GOSSIPID_WS
Definition: zone_silithus.cpp:992
@ SPELL_PUNISHMENT
Definition: zone_silithus.cpp:974
@ AURA_TWILIGHT_SET
Definition: zone_silithus.cpp:971
GameObject *const me
Definition: GameObjectAI.h:36
GameObjectTemplate const * GetGOInfo() const
Definition: GameObject.h:138
void CastSpell(Unit *target, uint32 spell)
Definition: GameObject.cpp:2073
uint32 GetGossipMenuId() const
Definition: GameObjectData.h:553
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition: Unit.cpp:5610

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.

1080 {
1081 Seconds respawnTimer{};
1083
1085 if (lastSpawn && lastSpawn->IsAlive())
1086 {
1087 // We already summoned something recently, return.
1088 CloseGossipMenuFor(player);
1089 return true;
1090 }
1091 else
1092 {
1094 }
1095
1096 if (sender == GOSSIPID_LESSER_WS)
1097 {
1098 respawnTimer = 300s; // Lesser Windstone respawn in 5 minutes
1099
1100 switch (action)
1101 {
1102 case 0:
1104 break;
1105 case 1:
1107 break;
1108 case 2:
1110 break;
1111 case 3:
1113 break;
1114 case 4:
1116 break;
1117 default:
1118 break;
1119 }
1120 }
1121 else if (sender == GOSSIPID_WS)
1122 {
1123 respawnTimer = 900s; // Windstone respawn in 15 minutes
1124
1125 switch (action)
1126 {
1127 case 0:
1129 break;
1130 case 1:
1132 break;
1133 case 2:
1135 break;
1136 case 3:
1138 break;
1139 case 4:
1141 break;
1142 default:
1143 break;
1144 }
1145 }
1146 else if (sender == GOSSIPID_GREATER_WS)
1147 {
1148 respawnTimer = 10800s; // Greater Windstone respawn in 3 hours
1149
1150 switch (action)
1151 {
1152 case 0:
1154 break;
1155 case 1:
1157 break;
1158 case 2:
1160 break;
1161 case 3:
1163 break;
1164 case 4:
1166 break;
1167 default:
1168 break;
1169 }
1170 }
1171
1172 me->DespawnOrUnsummon(5000ms, respawnTimer); // Despawn in 5 Seconds for respawnTimer value
1174 CloseGossipMenuFor(player);
1175 return false;
1176 }
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:30
static First const & RAND(First const &first, Second const &second, Rest const &... rest)
Definition: CreatureAIImpl.h:30
void CloseGossipMenuFor(Player *player)
Definition: ScriptedGossip.cpp:56
@ NPC_TEMPLAR_AIR
Definition: zone_silithus.cpp:996
@ SPELL_TEMPLAR_FIRE
Definition: zone_silithus.cpp:977
@ NPC_TEMPLAR_WATER
Definition: zone_silithus.cpp:995
@ SPELL_DUKE_WATER
Definition: zone_silithus.cpp:985
@ NPC_ROYAL_FIRE
Definition: zone_silithus.cpp:1002
@ NPC_DUKE_AIR
Definition: zone_silithus.cpp:1001
@ SPELL_ROYAL_WATER
Definition: zone_silithus.cpp:990
@ SPELL_ROYAL_AIR
Definition: zone_silithus.cpp:988
@ SPELL_ROYAL_RANDOM
Definition: zone_silithus.cpp:986
@ SPELL_DUKE_AIR
Definition: zone_silithus.cpp:983
@ SPELL_ROYAL_FIRE
Definition: zone_silithus.cpp:987
@ NPC_ROYAL_EARTH
Definition: zone_silithus.cpp:1004
@ NPC_TEMPLAR_EARTH
Definition: zone_silithus.cpp:997
@ NPC_TEMPLAR_FIRE
Definition: zone_silithus.cpp:994
@ NPC_DUKE_WATER
Definition: zone_silithus.cpp:999
@ SPELL_DUKE_FIRE
Definition: zone_silithus.cpp:982
@ NPC_ROYAL_WATER
Definition: zone_silithus.cpp:1005
@ NPC_ROYAL_AIR
Definition: zone_silithus.cpp:1003
@ SPELL_DUKE_RANDOM
Definition: zone_silithus.cpp:981
@ SPELL_DUKE_EARTH
Definition: zone_silithus.cpp:984
@ SPELL_ROYAL_EARTH
Definition: zone_silithus.cpp:989
@ NPC_DUKE_FIRE
Definition: zone_silithus.cpp:998
@ SPELL_TEMPLAR_AIR
Definition: zone_silithus.cpp:978
@ SPELL_TEMPLAR_WATER
Definition: zone_silithus.cpp:980
@ SPELL_TEMPLAR_EARTH
Definition: zone_silithus.cpp:979
@ SPELL_TEMPLAR_RANDOM
Definition: zone_silithus.cpp:976
@ NPC_DUKE_EARTH
Definition: zone_silithus.cpp:1000
@ GO_FLAG_NOT_SELECTABLE
Definition: SharedDefines.h:1579
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:215
Definition: Creature.h:46
void SendCloseGossip()
Definition: GossipDef.cpp:240
void SetGameObjectFlag(GameObjectFlags flags)
Definition: GameObject.h:220
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
Definition: GameObject.cpp:930
void Clear()
Definition: ObjectGuid.h:140
PlayerMenu * PlayerTalkClass
Definition: Player.h:2188
bool IsAlive() const
Definition: Unit.h:1808
ObjectGuid _creatureGuid
Definition: zone_silithus.cpp:1207
void SummonNPC(GameObject *go, Player *player, uint32 npc, uint32 spellId)
Definition: zone_silithus.cpp:1178

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.

1039 {
1041 }
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition: GameObject.h:221

References GO_FLAG_NOT_SELECTABLE.

◆ SummonNPC()

void go_wind_stone::go_wind_stoneAI::SummonNPC ( GameObject go,
Player player,
uint32  npc,
uint32  spellId 
)
inline
1179 {
1180 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
1181 if (!spellInfo)
1182 return;
1183 SpellInfo const* spellInfoTrigger = sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell);
1184 if (!spellInfoTrigger)
1185 return;
1186 Spell* spell = new Spell(player, spellInfoTrigger, TRIGGERED_NONE);
1187 SpellCastResult result = spell->CheckCast(true);
1188 delete spell;
1189 if (result != SPELL_CAST_OK)
1190 {
1191 return;
1192 }
1193 player->CastSpell(player, spellInfoTrigger->Id, false);
1195 {
1196 summons->SetCorpseDelay(5 * MINUTE);
1197 summons->SetTarget(player->GetGUID());
1198 summons->SetLootRecipient(player);
1199 summons->CastSpell(summons, SPELL_SPAWN_IN, false);
1200 summons->AI()->Talk(SAY_ON_SPAWN_IN, player);
1201 summons->m_Events.AddEvent(new DelayedWindstoneSummonEvent(summons, player->GetGUID()), summons->m_Events.CalculateTime(5200));
1202 _creatureGuid = summons->GetGUID();
1203 }
1204 }
constexpr auto MINUTE
Definition: Common.h:56
npc
Definition: BattlegroundSA.h:75
@ TEMPSUMMON_TIMED_DESPAWN_OOC_ALIVE
Definition: Object.h:51
@ TRIGGERED_NONE
Definition: SpellDefines.h:131
#define sSpellMgr
Definition: SpellMgr.h:818
@ SAY_ON_SPAWN_IN
Definition: zone_silithus.cpp:1006
@ SPELL_SPAWN_IN
Definition: zone_silithus.cpp:975
float summons[3][4]
Definition: boss_urom.cpp:76
@ EFFECT_0
Definition: SharedDefines.h:30
SpellCastResult
Definition: SharedDefines.h:920
@ SPELL_CAST_OK
Definition: SharedDefines.h:1110
Definition: TemporarySummon.h:40
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 GetOrientation() const
Definition: Position.h:120
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
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
Definition: Spell.h:284
SpellCastResult CheckCast(bool strict)
Definition: Spell.cpp:5612
Definition: SpellInfo.h:314
uint32 Id
Definition: SpellInfo.h:318
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition: SpellInfo.h:391
Definition: zone_silithus.cpp:1010

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