Inspired by patch suggested by darkstalker
Also
* Remove existed enums for family masks as contra-productive for developement.
* Drop one from horrible hack checks in SpellMgr::IsNoStackSpellDueToSpell
(spells for any fimilies with exactly 0x800 mask) I fail find useful cases
for current spell data with this check. All cases expected work correct without it.
If will some problems detected with this please report for fix in less strange way.
Also partly implement using it spell 62692.
FIXME: Some spells expected to be working for target under spell 62692 effect
not working. This need additional research and fixes.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
- 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)
* Some spells have StackAmount > 255, for example 22735, 54314
* In SMSG_AURA_UPDATE maximum stack amount is limited by 255
* Move duplicate code into SpellAuraHolder::BuildUpdatePacket function
* Cleanup some weird type casts in _LoadAuras
Some spells have procCharges > 0 and in same time maxStack > 1. It's support has been implemented more year ago
but current way work with single aura from stack remove at proc always made some spells work wrongly
(7 spells (with ranks) in 3.3.5a). In fact only 3 spell (with ranks) need this "one from stack" way and
all form its have similarity: Its apply max stack from start and decrease stacks at proc hit.
Another prove for correctness this way: in 2.x exist single spell with charges and maxstack that expect full aura stack remove.
So implemented opposition way: normal aura proc remove always full aura holder stack.
Special 3 cases have overwrite code for work with stack in correct for its way.
Fixed work:
* items 31857 and 50259
* recipe 46027 effects.
* talent 63730 and ranks
Affected by code changes talents 51528 and 55166 tested and work.
Spell 34026 use similar decrease stack at hit but req. independent patch for full implemention, so not work.
Now only spells that actually deal damage or heal will trigger
when neither SpellFamilyName nor ProcEx & PROC_EX_EX_TRIGGER_ALWAYS are set.
Before, setting a SchoolMask would override this check, causing many bogus procs.
Added ObjectGuid version Aura::GetCasterGuid()
But for prevent big problen with backporting AuraHolder
to mangos-0.12 in most cases still used old uint64 version
Aura::GetCasterGUID.
Recommended use new version where possible in clean way
as done for some cases in commit already.
uint32 result used in most expressions for stack calculation/compare
Alos uint8implicitly casted to int by C++ in expressions that generate unexpected
signed/unsigned warnings in comparisons (uint8 +1) > uint32 and similar.
Also
* Fixed some amount wrong uses low guids as full player guids.
* Add private without body ObjectGuid(uint32 const&) for catch wrong assigns low guids to ObjectGuid.
In some cases need assign "0" guid, then use ObjectGuid() instead.
* Fixed .pdump commands work.
This must fix another way duplicate aura adding to DB error.
It also prevent wrong stacking work for weapon equip bufs
in cases when its allowed for both wepoan indepndently apply.
This can be used for some tick number dependent aura effects.
Also in some cases impossible claculate tickes count pass,
for example for infinity duration auras.
* Add constructores for spellmode creating instead explcit fields init
* Use uint32 for family mask 2 instead unneded uint64
Also drop one from manual applies for uno-existed now spell.