AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Acore::WorldObjectSpellTargetCheck Struct Reference

#include "Spell.h"

Inheritance diagram for Acore::WorldObjectSpellTargetCheck:
Acore::WorldObjectSpellAreaTargetCheck Acore::WorldObjectSpellNearbyTargetCheck Acore::WorldObjectSpellConeTargetCheck Acore::WorldObjectSpellTrajTargetCheck

Public Member Functions

 WorldObjectSpellTargetCheck (WorldObject *caster, WorldObject *referer, SpellInfo const *spellInfo, SpellTargetCheckTypes selectionType, ConditionList *condList)
 
 ~WorldObjectSpellTargetCheck ()
 
bool operator() (WorldObject *target)
 

Public Attributes

WorldObject * _caster
 
WorldObject * _referer
 
SpellInfo const * _spellInfo
 
SpellTargetCheckTypes _targetSelectionType
 
ConditionSourceInfo * _condSrcInfo
 
ConditionList * _condList
 

Detailed Description

Constructor & Destructor Documentation

◆ WorldObjectSpellTargetCheck()

Acore::WorldObjectSpellTargetCheck::WorldObjectSpellTargetCheck ( WorldObject *  caster,
WorldObject *  referer,
SpellInfo const *  spellInfo,
SpellTargetCheckTypes  selectionType,
ConditionList *  condList 
)
9379 : _caster(caster), _referer(referer), _spellInfo(spellInfo),
9380 _targetSelectionType(selectionType), _condList(condList)
9381 {
9382 if (condList)
9383 _condSrcInfo = new ConditionSourceInfo(nullptr, caster);
9384 else
9385 _condSrcInfo = nullptr;
9386 }
SpellTargetCheckTypes _targetSelectionType
Definition Spell.h:825
ConditionSourceInfo * _condSrcInfo
Definition Spell.h:826
SpellInfo const * _spellInfo
Definition Spell.h:824
ConditionList * _condList
Definition Spell.h:827
WorldObject * _referer
Definition Spell.h:823
WorldObject * _caster
Definition Spell.h:822
Definition ConditionMgr.h:185

References _condSrcInfo.

◆ ~WorldObjectSpellTargetCheck()

Acore::WorldObjectSpellTargetCheck::~WorldObjectSpellTargetCheck ( )
9389 {
9390 if (_condSrcInfo)
9391 delete _condSrcInfo;
9392 }

References _condSrcInfo.

Member Function Documentation

◆ operator()()

bool Acore::WorldObjectSpellTargetCheck::operator() ( WorldObject *  target)
9395 {
9396 if (_spellInfo->CheckTarget(_caster, target, true) != SPELL_CAST_OK)
9397 return false;
9398 Unit* unitTarget = target->ToUnit();
9399 if (Corpse* corpseTarget = target->ToCorpse())
9400 {
9401 // use owner for party/assistance checks
9402 if (Player* owner = ObjectAccessor::FindPlayer(corpseTarget->GetOwnerGUID()))
9403 unitTarget = owner;
9404 else
9405 return false;
9406 }
9407 Unit* refUnit = _referer->ToUnit();
9408 if (unitTarget)
9409 {
9410 switch (_targetSelectionType)
9411 {
9412 case TARGET_CHECK_ENEMY:
9413 if (unitTarget->IsTotem())
9414 return false;
9415 if (!_caster->IsValidAttackTarget(unitTarget, _spellInfo))
9416 return false;
9417 break;
9418 case TARGET_CHECK_ALLY:
9419 if (unitTarget->IsTotem())
9420 return false;
9421 if (!_caster->IsValidAssistTarget(unitTarget, _spellInfo))
9422 return false;
9423 break;
9424 case TARGET_CHECK_PARTY:
9425 if (unitTarget->IsTotem())
9426 return false;
9427 if (unitTarget->IsGuardian() && !unitTarget->IsControllableGuardian())
9428 return false;
9429 if (!_caster->IsValidAssistTarget(unitTarget, _spellInfo))
9430 return false;
9431 if (!refUnit || !refUnit->IsInPartyWith(unitTarget))
9432 return false;
9433 break;
9435 if (!refUnit || refUnit->getClass() != unitTarget->getClass())
9436 return false;
9437 [[fallthrough]];
9438 case TARGET_CHECK_RAID:
9439 if (unitTarget->IsTotem())
9440 return false;
9441 if (unitTarget->IsGuardian() && !unitTarget->IsControllableGuardian())
9442 return false;
9443 if (!_caster->IsValidAssistTarget(unitTarget, _spellInfo))
9444 return false;
9445 if (!refUnit || !refUnit->IsInRaidWith(unitTarget))
9446 return false;
9447 break;
9449 if (_caster->IsFriendlyTo(unitTarget))
9450 return false;
9451 break;
9452 case TARGET_CHECK_ENTRY:
9453 if (Unit const* unitCaster = _caster->ToUnit())
9454 if (unitCaster->IsAreaEffectPvPBlocked(unitTarget, _spellInfo) && !unitCaster->IsFriendlyTo(unitTarget))
9455 return false;
9456 break;
9457 default:
9458 break;
9459 }
9460 }
9461 if (!_condSrcInfo)
9462 return true;
9463 _condSrcInfo->mConditionTargets[0] = target;
9464 return sConditionMgr->IsObjectMeetToConditions(*_condSrcInfo, *_condList);
9465 }
#define sConditionMgr
Definition ConditionMgr.h:296
@ SPELL_CAST_OK
Definition SharedDefines.h:1126
@ TARGET_CHECK_CORPSE
Definition SpellInfo.h:123
@ TARGET_CHECK_PARTY
Definition SpellInfo.h:119
@ TARGET_CHECK_ENEMY
Definition SpellInfo.h:117
@ TARGET_CHECK_ENTRY
Definition SpellInfo.h:116
@ TARGET_CHECK_RAID_CLASS
Definition SpellInfo.h:121
@ TARGET_CHECK_ALLY
Definition SpellInfo.h:118
@ TARGET_CHECK_RAID
Definition SpellInfo.h:120
Definition Corpse.h:49
Corpse * ToCorpse()
Definition Object.h:224
Unit * ToUnit()
Definition Object.h:216
Definition Player.h:1086
SpellCastResult CheckTarget(WorldObject const *caster, WorldObject const *target, bool implicit=true, Unit const *originalCaster=nullptr) const
Definition SpellInfo.cpp:1677
Definition Unit.h:670
uint8 getClass() const
Definition Unit.h:849
bool IsGuardian() const
Definition Unit.h:801
bool IsInRaidWith(Unit const *unit) const
Definition Unit.cpp:14759
bool IsControllableGuardian() const
Definition Unit.h:802
bool IsTotem() const
Definition Unit.h:805
bool IsInPartyWith(Unit const *unit) const
Definition Unit.cpp:14736
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
Definition Object.cpp:4009
bool IsValidAssistTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
Definition Object.cpp:4036
bool IsFriendlyTo(WorldObject const *target) const
Definition Object.cpp:4004
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:269
WorldObject * mConditionTargets[MAX_CONDITION_TARGETS]
Definition ConditionMgr.h:186

References _caster, _condList, _condSrcInfo, _referer, _spellInfo, _targetSelectionType, SpellInfo::CheckTarget(), ObjectAccessor::FindPlayer(), Unit::getClass(), Unit::IsControllableGuardian(), WorldObject::IsFriendlyTo(), Unit::IsGuardian(), Unit::IsInPartyWith(), Unit::IsInRaidWith(), Unit::IsTotem(), WorldObject::IsValidAssistTarget(), WorldObject::IsValidAttackTarget(), ConditionSourceInfo::mConditionTargets, sConditionMgr, SPELL_CAST_OK, TARGET_CHECK_ALLY, TARGET_CHECK_CORPSE, TARGET_CHECK_ENEMY, TARGET_CHECK_ENTRY, TARGET_CHECK_PARTY, TARGET_CHECK_RAID, TARGET_CHECK_RAID_CLASS, Object::ToCorpse(), and Object::ToUnit().

Referenced by Acore::WorldObjectSpellAreaTargetCheck::operator()(), and Acore::WorldObjectSpellTrajTargetCheck::operator()().

Member Data Documentation

◆ _caster

◆ _condList

ConditionList* Acore::WorldObjectSpellTargetCheck::_condList

Referenced by operator()().

◆ _condSrcInfo

ConditionSourceInfo* Acore::WorldObjectSpellTargetCheck::_condSrcInfo

◆ _referer

WorldObject* Acore::WorldObjectSpellTargetCheck::_referer

Referenced by operator()().

◆ _spellInfo

SpellInfo const* Acore::WorldObjectSpellTargetCheck::_spellInfo

◆ _targetSelectionType

SpellTargetCheckTypes Acore::WorldObjectSpellTargetCheck::_targetSelectionType

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