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
1037: 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.

1045 {
1046 if (reportUse)
1047 {
1048 uint32 gossipId = me->GetGOInfo()->GetGossipMenuId();
1049 bool _twilightSetAura = (player->HasAura(AURA_TWILIGHT_SET, player->GetGUID()));
1050 bool _medallionAura = (player->HasAura(AURA_MEDALLION, player->GetGUID()));
1051 bool _ringAura = (player->HasAura(AURA_RING, player->GetGUID()));
1052
1053 switch (gossipId)
1054 {
1055 case GOSSIPID_LESSER_WS:
1056 {
1057 if (!_twilightSetAura)
1058 me->CastSpell(player, SPELL_PUNISHMENT);
1059 break;
1060 }
1061 case GOSSIPID_WS:
1062 {
1063 if (!_twilightSetAura || !_medallionAura)
1064 me->CastSpell(player, SPELL_PUNISHMENT);
1065 break;
1066 }
1068 {
1069 if (!_twilightSetAura || !_medallionAura || !_ringAura)
1070 me->CastSpell(player, SPELL_PUNISHMENT);
1071 break;
1072 }
1073 default:
1074 break;
1075 }
1076 }
1077 return false;
1078 }
std::uint32_t uint32
Definition: Define.h:108
@ AURA_MEDALLION
Definition: zone_silithus.cpp:973
@ GOSSIPID_GREATER_WS
Definition: zone_silithus.cpp:994
@ GOSSIPID_LESSER_WS
Definition: zone_silithus.cpp:992
@ AURA_RING
Definition: zone_silithus.cpp:974
@ GOSSIPID_WS
Definition: zone_silithus.cpp:993
@ SPELL_PUNISHMENT
Definition: zone_silithus.cpp:975
@ AURA_TWILIGHT_SET
Definition: zone_silithus.cpp:972
GameObject *const me
Definition: GameObjectAI.h:36
GameObjectTemplate const * GetGOInfo() const
Definition: GameObject.h:138
void CastSpell(Unit *target, uint32 spell)
Definition: GameObject.cpp:2076
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:5636

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.

1081 {
1082 Seconds respawnTimer{};
1084
1086 if (lastSpawn && lastSpawn->IsAlive())
1087 {
1088 // We already summoned something recently, return.
1089 CloseGossipMenuFor(player);
1090 return true;
1091 }
1092 else
1093 {
1095 }
1096
1097 if (sender == GOSSIPID_LESSER_WS)
1098 {
1099 respawnTimer = 300s; // Lesser Windstone respawn in 5 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_WS)
1123 {
1124 respawnTimer = 900s; // Windstone respawn in 15 minutes
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 else if (sender == GOSSIPID_GREATER_WS)
1148 {
1149 respawnTimer = 10800s; // Greater Windstone respawn in 3 hours
1150
1151 switch (action)
1152 {
1153 case 0:
1155 break;
1156 case 1:
1158 break;
1159 case 2:
1161 break;
1162 case 3:
1164 break;
1165 case 4:
1167 break;
1168 default:
1169 break;
1170 }
1171 }
1172
1173 me->DespawnOrUnsummon(5000ms, respawnTimer); // Despawn in 5 Seconds for respawnTimer value
1175 CloseGossipMenuFor(player);
1176 return false;
1177 }
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:997
@ SPELL_TEMPLAR_FIRE
Definition: zone_silithus.cpp:978
@ NPC_TEMPLAR_WATER
Definition: zone_silithus.cpp:996
@ SPELL_DUKE_WATER
Definition: zone_silithus.cpp:986
@ NPC_ROYAL_FIRE
Definition: zone_silithus.cpp:1003
@ NPC_DUKE_AIR
Definition: zone_silithus.cpp:1002
@ SPELL_ROYAL_WATER
Definition: zone_silithus.cpp:991
@ SPELL_ROYAL_AIR
Definition: zone_silithus.cpp:989
@ SPELL_ROYAL_RANDOM
Definition: zone_silithus.cpp:987
@ SPELL_DUKE_AIR
Definition: zone_silithus.cpp:984
@ SPELL_ROYAL_FIRE
Definition: zone_silithus.cpp:988
@ NPC_ROYAL_EARTH
Definition: zone_silithus.cpp:1005
@ NPC_TEMPLAR_EARTH
Definition: zone_silithus.cpp:998
@ NPC_TEMPLAR_FIRE
Definition: zone_silithus.cpp:995
@ NPC_DUKE_WATER
Definition: zone_silithus.cpp:1000
@ SPELL_DUKE_FIRE
Definition: zone_silithus.cpp:983
@ NPC_ROYAL_WATER
Definition: zone_silithus.cpp:1006
@ NPC_ROYAL_AIR
Definition: zone_silithus.cpp:1004
@ SPELL_DUKE_RANDOM
Definition: zone_silithus.cpp:982
@ SPELL_DUKE_EARTH
Definition: zone_silithus.cpp:985
@ SPELL_ROYAL_EARTH
Definition: zone_silithus.cpp:990
@ NPC_DUKE_FIRE
Definition: zone_silithus.cpp:999
@ SPELL_TEMPLAR_AIR
Definition: zone_silithus.cpp:979
@ SPELL_TEMPLAR_WATER
Definition: zone_silithus.cpp:981
@ SPELL_TEMPLAR_EARTH
Definition: zone_silithus.cpp:980
@ SPELL_TEMPLAR_RANDOM
Definition: zone_silithus.cpp:977
@ NPC_DUKE_EARTH
Definition: zone_silithus.cpp:1001
@ GO_FLAG_NOT_SELECTABLE
Definition: SharedDefines.h:1607
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:213
Definition: Creature.h:46
void SendCloseGossip()
Definition: GossipDef.cpp:241
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:2201
bool IsAlive() const
Definition: Unit.h:1822
ObjectGuid _creatureGuid
Definition: zone_silithus.cpp:1208
void SummonNPC(GameObject *go, Player *player, uint32 npc, uint32 spellId)
Definition: zone_silithus.cpp:1179

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.

1040 {
1042 }
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
1180 {
1181 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
1182 if (!spellInfo)
1183 return;
1184 SpellInfo const* spellInfoTrigger = sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell);
1185 if (!spellInfoTrigger)
1186 return;
1187 Spell* spell = new Spell(player, spellInfoTrigger, TRIGGERED_NONE);
1188 SpellCastResult result = spell->CheckCast(true);
1189 delete spell;
1190 if (result != SPELL_CAST_OK)
1191 {
1192 return;
1193 }
1194 player->CastSpell(player, spellInfoTrigger->Id, false);
1196 {
1197 summons->SetCorpseDelay(5 * MINUTE);
1198 summons->SetTarget(player->GetGUID());
1199 summons->SetLootRecipient(player);
1200 summons->CastSpell(summons, SPELL_SPAWN_IN, false);
1201 summons->AI()->Talk(SAY_ON_SPAWN_IN, player);
1202 summons->m_Events.AddEvent(new DelayedWindstoneSummonEvent(summons, player->GetGUID()), summons->m_Events.CalculateTime(5200));
1203 _creatureGuid = summons->GetGUID();
1204 }
1205 }
constexpr auto MINUTE
Definition: Common.h:49
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:825
@ SAY_ON_SPAWN_IN
Definition: zone_silithus.cpp:1007
@ SPELL_SPAWN_IN
Definition: zone_silithus.cpp:976
float summons[3][4]
Definition: boss_urom.cpp:76
@ EFFECT_0
Definition: SharedDefines.h:31
SpellCastResult
Definition: SharedDefines.h:948
@ SPELL_CAST_OK
Definition: SharedDefines.h:1138
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:2343
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:5626
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:1011

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