Now safe allow this casts in like way after completed convertion to ObjectGuid use.
Also simplify code in result allowed auto cast to uint64.
Please _not_ add new uint64 storages (local and in structures) for guid values.
* Drop redundent and possible conflicting center point coordinates in FillAreaTargets/SpellNotifierCreatureAndPlayer call.
* Calculate proper coordinates base at PUSH_* and spell data in SpellNotifierCreatureAndPlayer
and provide its to Cell::VisitAllObjects also for use sync values in both.
* Use castingObject coordinates as caster in SpellNotifierCreatureAndPlayer that fix some GO casting cases.
Thanks to SeTM for original problem research.
- Unit::CalculateSpellDuration split into two functions
- CalculateSpellDuration taking into account combo points and caster-side spell mods
- Unit::CalculateAuraDuration taking into account target-side spell mods
- Diminishing is now applied before duration reduction mods
- Implement saving per-effect periodic timers to DB (required for auras affected by haste)
Also other classes have been affected, due to the use of search&replace.
This will probably break some patches and 3rd party libraries, so make sure to update them if required.
Thanks to Phille for the original idea and patch!
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
Also pet/controlled unit global cooldown code replaced by new placed in charmInfo structure.
Thanks to nos4r2zod for testing and gcd range check implement.
Note: all spells with effect expect additional code for redirection reset.
Until code adding redirection work longer that expected.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
Patch partly rewrited with move new data into HostileRefManager
and added redirection to threatAssist. Also bug fixed with
redirection threat to unit not in hostile list yet.
ASSERT hard use in predictable way because diff. 3rd party libs code
redefine it inf different ways and hard make sure that used in end
of mangos define version. This is real detected problem make some
expected assert checks ignored and so bugs not detected as expected from code.
In addition made related changes:
* Common.h header expected to be first include in any src/game/header except most simple cases.
* Related FILE.h header expected to be first include in FILE.cpp
* Fixed some absent includes and type forwards for safe build without PCH enabled.
* Avoid using MANGOS_ASSERT in src/framework code
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.