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

Public Member Functions

 go_soulwellAI (GameObject *go)
 
bool GossipHello (Player *player, bool reportUse) override
 
- 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 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 *)
 
virtual void SummonedCreatureEvade (Creature *)
 

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_soulwellAI()

go_soulwell::go_soulwellAI::go_soulwellAI ( GameObject go)
inline
1428 : GameObjectAI(go)
1429 {
1430 }
Definition GameObjectAI.h:33

Member Function Documentation

◆ GossipHello()

bool go_soulwell::go_soulwellAI::GossipHello ( Player player,
bool  reportUse 
)
inlineoverridevirtual

Due to the fact that this GameObject triggers CMSG_GAMEOBJECT_USE and CMSG_GAMEOBJECT_REPORT_USE, this GossipHello hook is called twice. The script's handling is fine as it won't remove two charges on the well. We have to find how to segregate REPORT_USE and USE.

Reimplemented from GameObjectAI.

1437 {
1438 if (reportUse)
1439 return false;
1440
1441 Unit* owner = me->GetOwner();
1442 if (!owner)
1443 return true;
1444
1445 uint32 stoneId = 0;
1446 uint32 stoneSpell = 0;
1447 switch (me->GetEntry())
1448 {
1449 case GO_SOUL_WELL_R1:
1451 if (Unit* owner = me->GetOwner())
1452 {
1454 {
1456 }
1457 else if (owner->HasAura(SPELL_IMPROVED_HEALTH_STONE_R2))
1458 {
1460 }
1461 }
1462 break;
1463 case GO_SOUL_WELL_R2:
1465 if (Unit* owner = me->GetOwner())
1466 {
1468 {
1470 }
1471 else if (owner->HasAura(SPELL_IMPROVED_HEALTH_STONE_R2))
1472 {
1474 }
1475 }
1476 break;
1477 }
1478
1479 if (!stoneSpell)
1480 {
1481 return true;
1482 }
1483
1484 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(stoneSpell);
1485 if (!spellInfo)
1486 {
1487 return true;
1488 }
1489
1490 stoneId = spellInfo->Effects[EFFECT_0].ItemType;
1491 if (!stoneId)
1492 {
1493 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(stoneSpell))
1494 {
1495 Spell::SendCastResult(player, spell, 0, SPELL_FAILED_ERROR);
1496 }
1497 return true;
1498 }
1499
1500 if (!owner->IsPlayer() || !player->IsInSameRaidWith(owner->ToPlayer()))
1501 {
1502 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(stoneSpell))
1503 {
1505 }
1506 return true;
1507 }
1508
1509 // Don't try to add a stone if we already have one.
1510 if (player->HasItemCount(stoneId))
1511 {
1512 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(stoneSpell))
1513 {
1515 }
1516 return true;
1517 }
1518
1519 player->CastSpell(player, stoneSpell, false);
1520
1521 // Item has to actually be created to remove a charge on the well.
1522 if (player->HasItemCount(stoneId))
1523 {
1524 me->AddUse();
1525 }
1526
1527 return true;
1528 }
std::uint32_t uint32
Definition Define.h:107
@ EFFECT_0
Definition SharedDefines.h:31
@ SPELL_FAILED_ERROR
Definition SharedDefines.h:981
@ SPELL_FAILED_TARGET_NOT_IN_RAID
Definition SharedDefines.h:1088
@ SPELL_FAILED_TOO_MANY_OF_ITEM
Definition SharedDefines.h:1078
#define sSpellMgr
Definition SpellMgr.h:825
GameObject *const me
Definition GameObjectAI.h:35
Unit * GetOwner() const
Definition GameObject.cpp:1223
void AddUse()
Definition GameObject.h:238
bool IsPlayer() const
Definition Object.h:200
Player * ToPlayer()
Definition Object.h:201
uint32 GetEntry() const
Definition Object.h:115
bool IsInSameRaidWith(Player const *p) const
Definition Player.h:1893
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition PlayerStorage.cpp:655
Definition SpellInfo.h:316
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:393
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 castCount, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE)
Definition Spell.cpp:4685
Definition Unit.h:636
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5753
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:1178
@ SPELL_IMPROVED_HEALTH_STONE_R2
Definition go_scripts.cpp:1410
@ GO_SOUL_WELL_R1
Definition go_scripts.cpp:1406
@ SPELL_CREATE_FEL_HEALTH_STONE_R1
Definition go_scripts.cpp:1417
@ SPELL_CREATE_MASTER_HEALTH_STONE_R1
Definition go_scripts.cpp:1413
@ SPELL_IMPROVED_HEALTH_STONE_R1
Definition go_scripts.cpp:1409
@ SPELL_CREATE_FEL_HEALTH_STONE_R2
Definition go_scripts.cpp:1418
@ SPELL_CREATE_MASTER_HEALTH_STONE_R2
Definition go_scripts.cpp:1414
@ SPELL_CREATE_MASTER_HEALTH_STONE_R0
Definition go_scripts.cpp:1412
@ GO_SOUL_WELL_R2
Definition go_scripts.cpp:1407
@ SPELL_CREATE_FEL_HEALTH_STONE_R0
Definition go_scripts.cpp:1416

References GameObject::AddUse(), Unit::CastSpell(), EFFECT_0, SpellInfo::Effects, Object::GetEntry(), GameObject::GetOwner(), GO_SOUL_WELL_R1, GO_SOUL_WELL_R2, Unit::HasAura(), Player::HasItemCount(), Player::IsInSameRaidWith(), Object::IsPlayer(), GameObjectAI::me, Spell::SendCastResult(), SPELL_CREATE_FEL_HEALTH_STONE_R0, SPELL_CREATE_FEL_HEALTH_STONE_R1, SPELL_CREATE_FEL_HEALTH_STONE_R2, SPELL_CREATE_MASTER_HEALTH_STONE_R0, SPELL_CREATE_MASTER_HEALTH_STONE_R1, SPELL_CREATE_MASTER_HEALTH_STONE_R2, SPELL_FAILED_ERROR, SPELL_FAILED_TARGET_NOT_IN_RAID, SPELL_FAILED_TOO_MANY_OF_ITEM, SPELL_IMPROVED_HEALTH_STONE_R1, SPELL_IMPROVED_HEALTH_STONE_R2, sSpellMgr, and Object::ToPlayer().


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