Some negative spells have positive effects with targets not affected by negative effects of spell.
For example spell 45524 cast negative effecst to target and possitive effect to caster self.
For like possitive only target of negetive spell will not triggered negative proc events.
In last cases will avoid triggering glyph 43537 at caster at spell 43537 cast.
TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER expected seelction friendly targets
for spell caster around spell caster (so ignore original caster faction).
This meaning that for begative spell also selected friendly targets for
spell caster object.
* Spell::GetCastingObject must be use for selection visual/point cast,
not for friend/enemy checks. Add extanded GetAffectiveCasterObject
for proper provide for referecned checks wild gameobject casted case.
* Also support chain damage spells casted by gameobjects.
* Add IsHostileTo/IsFriendlyTo and implement expected way checks for diff. world object types.
For controlled object check redirected to specific owner, for wild gameobject base at gameobject faction.
If faction not set expected to be hostile to anyone.
* Update grid searchers to be usable with world object instead only unit case.
Some grid searches lost redundent second object arg, AnyAoETargetUnitInObjectRangeCheck lost hitHidden arg
(for hitHidden==true case added new AnyAoEVisibleTargetUnitInObjectRangeCheck)
* Updated grid searchers used with gameobject area casts now.
Note: Gameobject area spell cast animation will still wrong show around cast triggering target instead
center around gameobject.
* In case gameobject aura apply to target for restored use target itself as caster because
we not have currently another way apply aura form wild gameobject.
* Use area id instead zone id for home bind zone info as expected.
This will for example proper show capital name in area himebinding for capital; tavern.
* Clarify that player create zone in fact is area (subzone)
* Implement SPELL_EFFECT_BIND for normal homebinding.
Also support spell target position mode used in 53823/53821 spells
* Add Spell::EffectEmpty for mark spell effects that used but not expect any code in handler.
Example weapon spells that used just as known spell markers for client.
Original patch idea inspirit by Sadikum patch suggestion.
* Add 2 function for 2 used way for original caster
- GetAffectiveCaster(), is posible NULL unit as source spell affects
(explcit caster, GO owner, caster of aura that trigering affect)..
- GetCastingObject(), possible NULL world object as in game spell effects
source, cast center, etc, need because original caster can store GO
guid that apply effect around. In other cases m_caster
* Use functions and avoid use explicitly m_originalCaster
* Use GetAffectiveCaster() for fix explicit GO cast at near unit, like now fixed campfire bonus.
* Implement way ignore some redundent data for triggered spells base at cast cost exist.
Reason: some triggered spells inherited data from main spells
just for porper client show spell attributes, we not need this data.
* Use check for ignore inherited cast time.
* Also replace check/take functions for runes by single 2 mode function
* Implement proper check for dead runes case
* Implement proper rune selection for Aura::HandleAuraConvertRune
also don't divide money loot for players who are not inside the
same map..
and player shouldn't be able to reclaim his corpse if it isn't in same map
and some other related cleanups
Also some more local fixes:
* Alow multiply same type guardians req. for some spells.
* Apply spell duration mods to summons
Many summon spells must start work.
Great work qsa! :)
Thanks The_Game_Master for updaing patch to recent sources.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
they basicaly should
*autocast 22011
*give player after gossiphello buff 2584
*port players away to another spiritguides, when they die
so this can be done by a script
and maybe eventai
i added a function IsDeathOnlySpell() which returns true
if this spell can ONLY be casted while dead, so i haven't
implemented all spells which could be cast while dead..
moved arena/battleground check from spell::checkcast
to SpellMgr::GetSpellAllowedInLocationError
also i adjusted some spell_fail-codes related to battleground
cause a spell_fail_wrong_area always requires the areaid, else it
would output "not in area %s"
then we don't need to check for map->isarena() when player is already in an
arena
----
in Spell.h
i moved "isTargetableForAttack()" to the top - cause it was anyway used
in every case of that switch
and isTargetableForAttack for attack also checks for isAlive
and isInFlight
so this could get simplified