* 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.
* It was wasting CPU power as cell-level locking is not needed.
* Future multithreading will be on map-level.
* CellLock was just a 'proxy' between Cell and CellPair and in some cases carried redundant data.
* Some minor cleanup in Cell::Visit/Map::Visit.
* 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
* Re-number enums by function groups and use where possible new defined masks in code instead raw enum |-lists.
* Avoid use movement generator generic state markers like UNIT_STAT_CONFUSED for mark movement stoped.
Add special shadow UNIT_STAT_CONFUSED_MOVE/etc states for like use.
UNIT_STAT_CONFUSED in like case will be safe expect use for normal checks confused state presence
And UNIT_STAT_CONFUSED_MOVE for check real move in this state
* Many spell effects that have A target mode SELF2 expected applied to enemy
target selected by targetmode B so we need skip SELF2 target mode.
* remove SEFL2 from explicit positive target modes.
All effect target modes start from client provided target data
so all its must be used for checking explicit target modes.
For example exist spells that have as first effect SELF non-explicit target mode.
but in same time negative to explicit target.
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
Also add caching IsHostileTo/IsFriendlyTo for avoid recall this not fast functions.
Like spell will placed in unit event list for cast at next tick or later dependent from cast timer.
Before all triggered spell ignore cast time and casted explcitly from related cast caller code.
This must fix some spell work like 17086 in damage apply time part and also in preventing possible
stack overflow because this spell triggering by chain 19 spell casts from each other.
This also exclude from triggered arg of CastSpell function meaning that this cast will instant alsways.
So triggred arg now meaning only that this seppl casted nit from player side and then not send
in some cases cast info to client if not vosula effect expected.
* 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.
* Enable server side recheck clear negative to friend or positive to enemy casts that already checks at client side
* Use more fast way check in similar cases for non-players, and fall back to old way in unclear (for while at least)
Please report if some spell stop propertly casted at friends/enemies.
some shapeshift forms will give the player spells
so we need to tell the server that the player has those new
spells else he can't cast them since the server is thinking the player is
cheating
ps forms with spells:
FORM_GHOUL
FORM_THARONJA_SKELETON
FORM_TEST_OF_STRENGTH
FORM_BLB_PLAYER
FORM_TEST
FORM_ZOMBIE
--
so this mostly won't affect any ingame experience.. but good to have this
feature anyway.. :)
also changed errormessage if player has no reagents for spell..
thx to nofantasy
* Old way have problem with auras that have last tick avent at one from caster/target:
depndent from auras update order in caster/target pair ti can wrongly not triggered.
* Fxied possible problem with remove same spell non-caster auras at target/caster at spell cast cancel
* Also fix memory lost in old deleted auras cleanup.
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>
Signed-off-by: VladimirMangos <vladimir@getmangos.com>
I choice maybe less clear way store future heal amount, but with avoid use additional fields for auras.