Core/Spells: ported CastSpell unclusterfucking from 3.3.5 branch
This commit is contained in:
1 parent
7e637971ee
commit
754c138f89
157 files changed
+1195
-1223
No files matched your search
@@ -2017,8 +2017,7 @@ void GameObject::Use(Unit* user)
|
||||
if (!spellId)
|
||||
return;
|
||||
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
|
||||
if (!spellInfo)
|
||||
if (!sSpellMgr->GetSpellInfo(spellId))
|
||||
{
|
||||
if (user->GetTypeId() != TYPEID_PLAYER || !sOutdoorPvPMgr->HandleCustomSpell(user->ToPlayer(), spellId, this))
|
||||
TC_LOG_ERROR("misc", "WORLD: unknown spell id %u at use action for gameobject (Entry: %u GoType: %u)", spellId, GetEntry(), GetGoType());
|
||||
@@ -2031,7 +2030,7 @@ void GameObject::Use(Unit* user)
|
||||
sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this);
|
||||
|
||||
if (spellCaster)
|
||||
spellCaster->CastSpell(user, spellInfo, triggered);
|
||||
spellCaster->CastSpell(user, spellId, triggered);
|
||||
else
|
||||
CastSpell(user, spellId);
|
||||
}
|
||||
@@ -2060,7 +2059,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
|
||||
if (self)
|
||||
{
|
||||
if (target)
|
||||
target->CastSpell(target, spellInfo, triggered);
|
||||
target->CastSpell(target, spellInfo->Id, triggered);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2073,6 +2072,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
|
||||
trigger->SetImmuneToAll(false);
|
||||
PhasingHandler::InheritPhaseShift(trigger, this);
|
||||
|
||||
CastSpellExtraArgs args;
|
||||
args.TriggerFlags = triggered;
|
||||
if (Unit* owner = GetOwner())
|
||||
{
|
||||
trigger->SetFaction(owner->GetFaction());
|
||||
@@ -2082,14 +2083,18 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge
|
||||
trigger->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, owner->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG));
|
||||
// needed for GO casts for proper target validation checks
|
||||
trigger->SetOwnerGUID(owner->GetGUID());
|
||||
trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, owner->GetGUID());
|
||||
|
||||
args.OriginalCaster = owner->GetGUID();
|
||||
trigger->CastSpell(target ? target : trigger, spellInfo->Id, args);
|
||||
}
|
||||
else
|
||||
{
|
||||
trigger->SetFaction(spellInfo->IsPositive() ? FACTION_FRIENDLY : FACTION_MONSTER);
|
||||
// Set owner guid for target if no owner available - needed by trigger auras
|
||||
// - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell())
|
||||
trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, target ? target->GetGUID() : ObjectGuid::Empty);
|
||||
|
||||
args.OriginalCaster = target ? target->GetGUID() : ObjectGuid::Empty;
|
||||
trigger->CastSpell(target ? target : trigger, spellInfo->Id, args);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user