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 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 *)
 
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
1443 : GameObjectAI(go)
1444 {
1445 }
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.

1452 {
1453 if (reportUse)
1454 return false;
1455
1456 Unit* owner = me->GetOwner();
1457 if (!owner)
1458 return true;
1459
1460 uint32 stoneId = 0;
1461 uint32 stoneSpell = 0;
1462 switch (me->GetEntry())
1463 {
1464 case GO_SOUL_WELL_R1:
1466 if (Unit* owner = me->GetOwner())
1467 {
1469 {
1471 }
1472 else if (owner->HasAura(SPELL_IMPROVED_HEALTH_STONE_R2))
1473 {
1475 }
1476 }
1477 break;
1478 case GO_SOUL_WELL_R2:
1480 if (Unit* owner = me->GetOwner())
1481 {
1483 {
1485 }
1486 else if (owner->HasAura(SPELL_IMPROVED_HEALTH_STONE_R2))
1487 {
1489 }
1490 }
1491 break;
1492 }
1493
1494 if (!stoneSpell)
1495 {
1496 return true;
1497 }
1498
1499 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(stoneSpell);
1500 if (!spellInfo)
1501 {
1502 return true;
1503 }
1504
1505 stoneId = spellInfo->Effects[EFFECT_0].ItemType;
1506 if (!stoneId)
1507 {
1508 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(stoneSpell))
1509 {
1510 Spell::SendCastResult(player, spell, 0, SPELL_FAILED_ERROR);
1511 }
1512 return true;
1513 }
1514
1515 if (!owner->IsPlayer() || !player->IsInSameRaidWith(owner->ToPlayer()))
1516 {
1517 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(stoneSpell))
1518 {
1520 }
1521 return true;
1522 }
1523
1524 // Don't try to add a stone if we already have one.
1525 if (player->HasItemCount(stoneId))
1526 {
1527 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(stoneSpell))
1528 {
1530 }
1531 return true;
1532 }
1533
1534 player->CastSpell(player, stoneSpell, false);
1535
1536 // Item has to actually be created to remove a charge on the well.
1537 if (player->HasItemCount(stoneId))
1538 {
1539 me->AddUse();
1540 }
1541
1542 return true;
1543 }
std::uint32_t uint32
Definition: Define.h:107
@ SPELL_IMPROVED_HEALTH_STONE_R2
Definition: go_scripts.cpp:1425
@ GO_SOUL_WELL_R1
Definition: go_scripts.cpp:1421
@ SPELL_CREATE_FEL_HEALTH_STONE_R1
Definition: go_scripts.cpp:1432
@ SPELL_CREATE_MASTER_HEALTH_STONE_R1
Definition: go_scripts.cpp:1428
@ SPELL_IMPROVED_HEALTH_STONE_R1
Definition: go_scripts.cpp:1424
@ SPELL_CREATE_FEL_HEALTH_STONE_R2
Definition: go_scripts.cpp:1433
@ SPELL_CREATE_MASTER_HEALTH_STONE_R2
Definition: go_scripts.cpp:1429
@ SPELL_CREATE_MASTER_HEALTH_STONE_R0
Definition: go_scripts.cpp:1427
@ GO_SOUL_WELL_R2
Definition: go_scripts.cpp:1422
@ SPELL_CREATE_FEL_HEALTH_STONE_R0
Definition: go_scripts.cpp:1431
@ 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:1240
void AddUse()
Definition: GameObject.h:239
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:1886
bool HasItemCount(uint32 item, uint32 count=1, bool inBankAlso=false) const
Definition: PlayerStorage.cpp:655
Definition: Unit.h:630
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition: Unit.cpp:5698
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:1167
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 castCount, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE)
Definition: Spell.cpp:4674
Definition: SpellInfo.h:316
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition: SpellInfo.h:393

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