Commit Graph

715 Commits

Author SHA1 Message Date
xinef1
7567cafec8 Ensure that all actions are compared to fixed point in time (ie. world update start) (#18910)
- Actions will not be dependent on processing moment
- Increased GameObjects cooldown resolution to milliseconds, fixes arming time of traps to be exactly one second and not something from range (1000, 1999)
- Created GameTime namespace and UpdateTime class and moved there some code out of world
2017-03-01 22:19:25 -03:00
Gustavo
3a67c8e361 Core/Misc Remove Tabs and Whitespaces (#19179) 2017-02-21 18:37:34 +01:00
xinef1
e261754c9c Fixed setting and unsetting of m_spellModTakingSpell (#19116)
- A problem when a different spell tries to overwrite existing ModTakingSpell should no longer happen
2017-02-19 02:10:50 -03:00
xinef1
b0ae5fadd1 Core/SmartAI: Various fixes and extensions for smart scripts: (#18673)
- Possible crashes fixed
- Memory leak fixed
- Implemented checking of vehicle conditions
- Extended eventphasemask to 12 bits (sql required to change DB field type)
- SMART_EVENT_GOSSIP_HELLO - added possibility to detect for gameobject reportUse call
- Renamed action SMART_ACTION_SET_FLY to SMART_ACTION_SET_DISABLE_GRAVITY (to reflect actual functionality)
- Added targetsLimit to action SMART_ACTION_CAST and SMART_ACTION_INVOKER_CAST to limit max amount of targets (selected randomly)
- Action SMART_ACTION_TALK corrected to always work as intended
- Properly call GroupEventHappens in action SMART_ACTION_CALL_GROUPEVENTHAPPENS if invoker was charmed or owned by the player
- Properly utilize followAngle in action SMART_ACTION_FOLLOW (db orientation should be in degrees), but keep backward compatibility
- Added action SMART_ACTION_SET_CAN_FLY (119) 0/1
- Added action SMART_ACTION_REMOVE_AURAS_BY_TYPE (120) AuraType, can be used to exit vehicle for example
- Added action SMART_ACTION_SET_SIGHT_DIST (121) sightDist
- Added action SMART_ACTION_FLEE (122) fleeTime
- Added action SMART_ACTION_ADD_THREAT (123) +threat, -threat
- Added action SMART_ACTION_LOAD_EQUIPMENT (124) equipmentId
- Added action SMART_ACTION_TRIGGER_RANDOM_TIMED_EVENT (125) minId, maxId
- Added action SMART_ACTION_REMOVE_ALL_GAMEOBJECTS (126), removes all owned gameobjects
- Added action SMART_ACTION_STOP_MOTION (127), stopMoving, movementExpired
- Extended target SMART_TARGET_HOSTILE_SECOND_AGGRO with following parameters maxdist, playerOnly, powerType + 1
- Extended target SMART_TARGET_HOSTILE_LAST_AGGRO with following parameters maxdist, playerOnly, powerType + 1
- Extended target SMART_TARGET_HOSTILE_RANDOM with following parameters maxdist, playerOnly, powerType + 1
- Extended target SMART_TARGET_HOSTILE_RANDOM_NOT_TOP with following parameters maxdist, playerOnly, powerType + 1
- Extended target SMART_TARGET_THREAT_LIST with maxdist
- Extended target SMART_TARGET_OWNER_OR_SUMMONER to be able to get charmer/owner of current owner
- Added new target SMART_TARGET_FARTHEST with maxDist, playerOnly, isInLos restrictions
- Added SpellHit hook to GameObjectAI and extended SmartGameObjectAI to call SMART_EVENT_SPELLHIT when gameobject is hit by spell
- Call GameObjectAI Reset hook on gameobject respawn (for ex. to reset one time events in smart scripts)
- Fixed some logic errors in code
- SmartAI Escorts properly despawn escortee if no players are in range
- Disable Evading while charming creature with SmartAI
- Don't call SMART_EVENT_RESPAWN for dead units before they actually respawn
- Don't call SMART_EVENT_RESPAWN for not spawned gameobjects
- Properly call SMART_EVENT_RESPAWN for gameobject respawn
- Allow action SMART_ACTION_SET_IN_COMBAT_WITH_ZONE to utilize targetlist
- Allow action SMART_ACTION_CALL_FOR_HELP to utilize targetList
- Allow action SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL to utilize targetList
- Allow action SMART_ACTION_SET_VISIBILITY to utilize targetList
- Allow action SMART_ACTION_SET_ACTIVE to utilize targetList
- Allow action SMART_ACTION_ATTACK_START to select random attack target instead of first on the list
- Allow gameobjects to summon gameobjects with action SMART_ACTION_SUMMON_GO
- Properly store action invokers for action SMART_ACTION_WP_START, if no player invokers are found, distance despawn check won't be used
- Allow action SMART_ACTION_WP_RESUME to compensate for the state the unit actually is in (eg. combat)
- Allow action SMART_ACTION_MOVE_TO_POS to select random of the avaiable targets, not only the first one.
- Allow action SMART_ACTION_MOVE_TO_POS to utilize x, y, z parameters as an offset to calculated coordinates
- Action SMART_ACTION_RESPAWN_TARGET should never modify respawntime of already spawned gameobjects, use dedicated function
- Properly delete ontime events created by SMART_ACTION_CREATE_TIMED_EVENT
- If action could not be started because conditions were not satisfied, do not recalculate the waittime to action repeattime, use smaller value to recheck more frequently
- Allow target SMART_TARGET_CLOSEST_PLAYER to be used by gameobjects
- Allow target SMART_TARGET_OWNER_OR_SUMMONER to be used by gameobjects
- Fixed SMART_EVENT_COUNTER_SET to be only called for the id that was incremented
- Changed the way counters work
- Protect PhaseInc from surpassing maximum phase
- Added loading checks for missing NON_REPEATABLE flag if no repeatmin, repeatmax is set
- Added spell validation for SMART_ACTION_CROSS_CAST
2017-02-17 21:33:18 +01:00
xinef1
2412886ef6 Core/Misc: Fixed player corpse looting, added player corpse loot and some more (#19122)
* Fixed corpse looting in wintergrasp
Added corpse loot for wintergrasp quests and To the Looter Go the Spoils (1166) achievement
Don't generate money for loot if no loot mode is available
Simplified few things
2017-02-13 20:42:06 +01:00
xinef1
c6060dd0c5 Core/Spells: Remade trajectory target selection (#19048)
* Remade trajectory target selection
* Added possibility to apply conditions to trajectory spells
* Properly recalculate delay time if CMSG_UPDATE_PROJECTILE_POSITION is received
2017-02-05 21:10:15 -03:00
xinef1
3c605ba614 Core/Spells: Added SPELL_FAILED_NOTHING_TO_STEAL error (#19036)
Corrected Dispel check in sanctuary area
Added root check for SPELL_EFFECT_JUMP and SPELL_EFFECT_JUMP_DEST
2017-02-05 22:29:23 +01:00
xinef1
c1ca852e16 Core/Spells: Corrected execution time calculation for dst targets (#19039) 2017-02-05 21:05:00 +01:00
xinef1
93746e8c4a Implemented binary resistances and some more (#18933)
- Fixed possible exploit with tamed pets having template immunities
- Implemented binary resistances
- Corrected resistances calculations
- Pets properly inherit players spell penetration
- Fixed doubled block calculation for damaging melee spells
- Auras removing snare effects will only remove the snaring component
- Shapeshifting will properly remove movement impairing auras only and not crowd control (dragon's breath)
- Immunities are properly checked versus all schools appearing in spell, unit is immune only if immune to all schools
- Spells with melee and magic school mask should compare armor reduction with resistances and select smaller reduction
- Demonic Circle: Teleport no longer removes root effects
2017-02-04 19:50:32 -03:00
Gerhood
bab59b28fa Core/Spells: implement Mad/Crazy Alchemist's potions 2017-01-29 14:06:40 +01:00
xinef1
66dc97bb27 Core/Spells: Added very little tolerance level to completed casts to ensure that spell cast at target standing at the max possible range is finished properly even if target moves a little (#18969) 2017-01-27 20:50:25 +01:00
ariel-
53eb6ec616 Core/Spell: build fix 2017-01-23 18:38:32 -03:00
ariel-
3544577e48 Core/Spell: unified handling of SPELL_ATTR5_USABLE_WHILE_* attributes
Allowed mechanic mask is calculated on startup and auras checked against those mechanics
Closes #18798
2017-01-23 18:33:34 -03:00
ariel-
c3474f57bc Core/Spell: consider spells with no targets for the purpose of finish procs
Closes #18799
2017-01-21 23:42:21 -03:00
HelloKitty
01d715eaef Core/Vmaps: Stop M2s from occluding for spellcast LoS
Closes #18528
2017-01-21 14:44:31 +01:00
ariel-
23f76b563f Core/Spell: remove duplicated SPELL_AURA_MOD_DEBUFF_RESISTANCE handling.
Each spell had two rolls in which it could be resisted, effectively adding to the resist chance.

Closes #7406
2017-01-20 01:17:18 -03:00
joschiwald
3d245fb2dc Ups... 2017-01-08 01:01:27 +01:00
joschiwald
d57fcc1c1b Core/Spells: Fix wrong totem placement
- Addition to 37b2f590b6
2017-01-08 00:59:06 +01:00
tkrokli
6a51a88767 Update Copyright notice for 2017
Happy new year!
2017-01-02 19:52:45 +01:00
Shauren
3d3d0492ab Core/Spells: Check both main and offhand weapons if spell attributes require that (see Stormstrike)
* This restores the check probably unintentionally dropped in 14c2b2d6cd
* Build fix
2017-01-01 00:14:19 +01:00
ariel-
f3cbcae102 Core/Spells: add some missing breaks 2016-12-31 12:24:57 -03:00
ariel-
14c2b2d6cd Core/Spell: added some helpers to SpellInfo to reduce code duplication 2016-12-30 23:50:28 -03:00
ariel-
ee6d1d02c0 Core/Spell: kill old charge restoring system. Mods are fully handled by proc system now.
- Fixes an edge case of spell failing due to out of range and re-adding charges to an existing aura.
2016-12-30 15:59:59 -03:00
xinef1
464d3ad5d0 Core/Spell: Fixed bug where spell could fail to hit a target properly even if all conditions were met (#18596) 2016-12-30 13:41:47 -03:00
ariel-
27fb5fc16d Core/Spell: reverted stun aura handling
Partial revert of 50a3ce5703

Closes #18487
Closes #18490
Closes #18497
2016-12-28 23:38:03 -03:00
ariel-
a7e136f9e3 Core/Spell: fix for hitmask being ignored in finish phase procs 2016-12-15 11:24:48 -03:00
ariel-
3a52ad8d38 Core/Entities: Replace existing GetAuraEffectsByType + iteration uses with proper helper functions 2016-12-13 02:18:06 -03:00
ariel-
f0772eea98 Core/Spell: implemented dispel reflection
Closes #18323
2016-12-11 15:08:01 -03:00
ariel-
01d272d6cb Core/Spell: improved immunity logic for dispels
- Fixes dispel magic removing immunity spells (Divine Shield for example). Ref issue #18370
2016-12-11 15:08:00 -03:00
ariel-
77a08ad73c Core/Spell: Undefined SPELL_ATTR7_USABLE_IN_STUN_FEAR_CONFUSION attr for now
- Some function renames
- Used in some client checks but not 100% sure of its usage (eg in CGUnit_C::CheckAndReportSpellInhibitFlags but not in  Spell_C::IsUsableAction)

Closes #18366
2016-12-10 00:38:00 -03:00
ariel-
343419ab99 Core/Spells: fix a pretty edge case of creatures being put in combat by evaded spells
Closes #18369
2016-12-01 02:14:29 -03:00
ariel-
61a4e08e1e Revert "Core/Spell: add EquipedItemClass/EquippedItemSubClass check to passive spell casts"
This reverts commit f188ff1ce4.

Was breaking Titan's Grip.
Spells are loaded before items, and they CAST the spell on the player.
When items are then loaded, Player::ApplyItemDependentAuras only has AddAura on it. Titan's Grip is an effect, no auras involved.

In turn reverting this commit will now allow Two-handed weapon specialization and similar from spells load. Which is the lesser of two evils.
2016-11-20 03:34:20 -03:00
ariel-
f188ff1ce4 Core/Spell: add EquipedItemClass/EquippedItemSubClass check to passive spell casts
- Was adding auras on login that didn't satisfy requirements (like Two-Handed Weapon Specialization)
2016-11-20 02:39:14 -03:00
ariel-
5b56c94e6d Core/Spell: restore old proc system behaviour on auras self proc.
- Use Spell::m_triggeredByAuraSpell and compare against trigger aura, it requires scripts to set triggeredByAura parameter.
- Fixed existing scripts lacking it

DB/Spell: Anger Capacitor (Tiny Abomination in a Jar) proc

Closes #18269
2016-11-19 03:05:44 -03:00
ariel-
ca1c4525c7 Core/Unit: damage immune improvements (9f5df023b7 follow up)
- Handling checked in sniffs: Spell 63710 Void Barrier vs 49143 Frost Strike
  * Send spell miss immune only if spell consists of damage effects
- Checked with 348 Immolate:
  * No packets sent if damage immune, aura is applied normally

Also... who the fuck uses 0 to compare against pointers
2016-11-15 22:39:15 -03:00
ariel-
9f5df023b7 Core/Unit: don't use damage immunity to calculate hit result for the whole spell. Should be used only for damage 2016-11-14 20:40:17 -03:00
ariel-
425f6c3c34 Core/Spell: perform charmer check against player controlling unit. Fixes spellcasts while charmed 2016-11-14 15:22:41 -03:00
ariel-
1ad9c7d3fd Core/Spell: fix typo
Closes #18248
2016-11-14 13:59:32 -03:00
ariel-
5daabe303e Core/Spell: do not fail triggered Charge effects in case a root is present.
Fixes Master's call when pet is rooted
2016-11-14 02:12:35 -03:00
ariel-
fd3423245c Core/Spell: use SpellEntry to select implicit targets in case RadiusEntry wasn't set for the current effect.
Closes #15388
2016-11-14 02:06:33 -03:00
ariel-
cbb5c073ce Core/ScriptMgr: use vector instead of list to contain Spell and Aura scripts and hooks 2016-11-14 02:05:51 -03:00
ariel-
50a3ce5703 Core/Spell: revamp of immunities system
- Spell attributes research
- Container optimization
- Do not skip damage immunity checks on SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY present
- Added additonal arguments support to SendCastResult / CheckCast, spells can now send proper error messages
- Loads spell immune masks/states/effects at startup.
- This cached info is used whenever a spell cast requires immunities to be known beforehand (to see if an aura could be applied for example)

Closes #16658
Closes #16901
Closes #18114
2016-11-12 17:58:00 -03:00
ariel-
5cb8409f1e Core/Spell: move attribute helpers to spellInfo
- Renamed CheckEffectExecuteData to AssertEffectExecuteData and made const, better reflects its purpose
- Added missing attribute check to IsNextMeleeSwingSpell
- Reworked SPELL_ATTR4_CAST_ONLY_IN_OUTLAND attr check (researched behavior)
2016-11-12 17:12:42 -03:00
ariel-
b3a4815067 Core/Spells: workaround stealth interaction with Death and Decay and GameObject casts
Closes #10179
Closes #16154
2016-10-30 00:16:45 -03:00
ariel-
bea0c01964 Core/Spells: moved handling of SPELL_ATTR0_CU_DONT_BREAK_STEALTH inside proc system.
Fixes additional issues with spells that shouldn't be breaking stealth and had this attribute
2016-10-25 22:10:55 -03:00
ariel-
5c1dfce168 Core/Spell: do positivity spell checks only against actually hitted effects instead of the whole spell
Closes #18097
2016-10-18 21:00:17 -03:00
ariel-
2d0fb356de Core/Spell: clear auras of channeled spells if channeling is cancelled due to invalid targets (dead or w/e)
Closes #14859
Closes #15186
2016-10-17 04:33:36 -03:00
ariel-
9b0fa51022 Core/Globals: compute aura diminishing return info at startup and cache it
Core/Entities: Save diminish return on an array instead of a linked list
2016-10-17 01:52:40 -03:00
Shauren
1c7f099297 Core/Items: Defined all item flags
(cherry picked from commit ef29f32965)
2016-10-11 19:46:29 -03:00
ariel-
4cdbc1a09b Core/Spell: Fix 2 more off by one probability calc and duplicated logic in spell hit roll 2016-10-09 20:18:07 -03:00