Commit Graph
95 Commits
Author SHA1 Message Date
Ovahlord e677461c5d Core/Combat: more cleanups and converted threat packets back to packet class 2020-07-23 13:33:46 +02:00
Treeston 984abde440 Core/Threat: Properly update offline states even if all threat references are offline. Closes #23639. 2020-07-22 19:15:00 +02:00
Treeston c7c4f267c4 Core/AI: Finally move the "is creature engaged" flag to be a property of the creature AI, where it honestly always belonged. Fixes #17981 and #23602 for real this time. 2020-07-22 19:14:52 +02:00
Treeston db3282e65a Combat/Threat: Split ThreatManager::NotifyDisengaged off from ThreatManager::ClearAllThreat. NotifyDisengaged signifies intent to clear the engagement flag, and should only be called from AI. Fixes #23490.
# Conflicts:
#	src/server/game/AI/CreatureAI.cpp
#	src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp
#	src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp
#	src/server/scripts/Kalimdor/zone_desolace.cpp
#	src/server/scripts/Northrend/zone_borean_tundra.cpp
2020-07-22 18:38:35 +02:00
Ovahlord de6a514ec5 Core/Misc: fixed build 2020-07-22 18:35:41 +02:00
Treeston a16d691dd8 Core/Entities: Kick engagement logic upstairs to Unit (from ThreatManager), since all Units with AI need it (not just those with threat list). Fixes #17981.
# Conflicts:
#	src/server/game/Combat/ThreatManager.cpp
#	src/server/game/Entities/Creature/Creature.cpp
#	src/server/game/Entities/Unit/Unit.cpp
#	src/server/game/Entities/Unit/Unit.h
2020-07-22 18:05:06 +02:00
Treeston b6a9647189 Core/Threat: Properly sequence checking offline state _after_ adding the reference to the threat list. This ensures IsEngagedWith reports consistent values for downstack calls in Creature. Closes #22406. 2020-07-22 17:55:32 +02:00
Treeston 2eacac1b4d Core/Threat: Suppressed threat is now re-evaluated on taunt state update, and taunting units can no longer be suppressed. 2020-07-22 17:55:03 +02:00
Treeston 2f075b11e9 Core/Threat: Fear no longer suppresses threat. All confuse effects now suppress threat, even ones that wouldn't break on damage. 2020-07-22 17:51:44 +02:00
Treeston b634358967 Core/Entities: Fixed an issue where creatures would not properly assist formation members in certain scenarios. Tagging #21967.
# Conflicts:
#	src/server/game/Combat/ThreatManager.cpp
2020-07-22 17:45:10 +02:00
Treeston fd599605da Core/Threat: Only send SMSG_THREAT_UPDATE if the threat list actually changed 2020-07-22 17:44:33 +02:00
Treeston 990127590a Core/Threat: Further tweak to assist threat, all CC now prevents assist threat splitting (not just damage-breakable CC) 2020-07-22 17:44:25 +02:00
Treeston 7df7dcca7d Core/Threat: Threat system adjustments:
* Online states are now re-evaluated before victim update instead of continuously. Closes #22226. Tagging #21501.
* Victim update now happens every 1s as opposed to every server tick unless current target goes away.
* Suppressed threat is no longer re-established until the victim gains additional threat (by hitting the target, for instance).
* Assistance threat is now split between non-controlled units threatened by target, as opposed to all units threatened by target.

# Conflicts:
#	src/server/game/Combat/ThreatManager.cpp
2020-07-22 17:44:05 +02:00
jackpoz 84ee3701d5 Core/Thread: Fix crash added in fd33b1cd02a1c69fc78f47f079eadc43c331d054
Fix crash caused by dereferencing uninitialized field.
2020-07-22 17:34:54 +02:00
Treeston 31f3cb203b Core/Threat: My dictionary informs me that "fixtate" is not, in fact, a word. Corrected to "fixate".
fd33b1c follow-up
2020-07-22 17:33:27 +02:00
Treeston 93864a29c0 Core/Threat: Re-add fixtate system. I am being told Netherspite needs it. 2020-07-22 17:33:17 +02:00
Treeston b4d5f46ea4 1b7ec4b follow-up 2020-07-22 17:33:08 +02:00
Treeston de81a77ef8 Core/Threat: Fix taunt behavior in some edge cases 2020-07-22 17:33:00 +02:00
Treeston d9e6e82c7d Core/Unit: UNIT_FLAG renames
[UNIT_FLAG_PLAYER_CONTROLLED -> UNIT_FLAG_POSSESSED]
[UNIT_FLAG_PVP_ATTACKABLE -> UNIT_FLAG_PLAYER_CONTROLLED]
Signed off by: Shauren, Warlockbugs.

# Conflicts:
#	src/server/game/Entities/Object/Object.cpp
#	src/server/game/Entities/Pet/Pet.cpp
#	src/server/game/Entities/Unit/UnitDefines.h
#	src/server/game/Spells/Auras/SpellAuraEffects.cpp
#	src/server/game/Spells/Spell.cpp
2020-07-22 17:32:51 +02:00
Treeston 4b07f238ae Core/Threat: Fix taunt logic relying on unspecified behavior by unordered boost heap iterators. Use ordered iterators instead, this is cheap for our use case anyway. This will make taunt behave consistently again.
Closes #21499.

# Conflicts:
#	src/server/game/Combat/ThreatManager.cpp
2020-07-22 17:27:33 +02:00
Treeston c8b05e927f Combat/Threat: Now set engaged state for all units on offline reference registration (vanished/invis'd units). For non-PASSIVE units, this will immediately cause an evade.
This fixes an exploit where creating the reference as offline (by vanishing while a spell was mid-flight) you could damage a creature further without it ever engaging you.
2020-07-22 17:17:33 +02:00
Treeston 544b6a3381 Misc: assert -> ASSERT
# Conflicts:
#	src/common/DataStores/DBCFileLoader.h
#	src/server/scripts/Commands/cs_debug.cpp
2020-07-22 17:16:21 +02:00
Treeston 84bb8a8efe Core/Threat: Assistance threat (healing, buffs, etc.) is now properly split (instead of copied) between all creatures threatened by the action. Thanks to Foereaper for help with testing, and my apologies to healers everywhere.
(No apologies for charm AI though. You deserve that one.)
2020-07-22 17:13:38 +02:00
Treeston 2d14f744dd Core/Threat: Passive creatures now properly become engaged when adding an offline threat entry. Fixes RoS and Thaddius, maybe more. Closes #21269. 2020-07-22 17:13:29 +02:00
Treeston 5fc74508e3 Core/Threat: Fix a potential crash that would occur in specific edge cases of AI being a bit naughty. 2020-07-22 17:11:08 +02:00
ariel- 32d189e8b7 Core/Misc: kill whitespace
# Conflicts:
#	sql/updates/world/3.3.5/2018_01_10_04_world_335.sql
#	src/server/game/Combat/ThreatManager.h
#	src/server/game/Entities/Creature/Creature.cpp
#	src/server/game/Entities/Player/Player.cpp
#	src/server/scripts/Kalimdor/boss_azuregos.cpp
2020-07-22 17:10:27 +02:00
Treeston f91c2335f5 3dcd49e v2, slightly cheaper 2020-07-22 17:08:13 +02:00
Treeston 3b2818b143 Core/Threat: fix a potential super edge case iterator invalidation 2020-07-22 17:08:04 +02:00
Treeston b733bde3bb Core/Threat: only send periodic threat list updates while unit is engaged 2020-07-22 16:58:41 +02:00
Treeston 3d9ad131ee Core/Combat: Some more sanity check asserts to try and track down #21187.
Also, some anti-annoyance treatment for dot tele.

# Conflicts:
#	src/server/game/Combat/CombatManager.h
#	src/server/game/Combat/ThreatManager.h
#	src/server/scripts/Commands/cs_tele.cpp
2020-07-22 16:57:59 +02:00
Treeston be3a81ac55 Core/Combat: some more detailed assertions to possibly shed light on #21187. 2020-07-22 16:56:59 +02:00
Treeston 4fd7d9aa00 Core/Misc: A variety of clean-up changes, mostly following up on 532ab1c to fix legacy bugs exposed by it:
- Triggers can no longer have a threat list (this may expose some ugliness in old legacy scripts)
- Threat entries are forced to OFFLINE if the AI refuses to attack the target
- Clean up passive creature evade behavior to be more consistent
- Fix a months old issue in spawn group management that would cause "Inactive" to incorrectly show in .list respawns for system groups outside of map 0
- Valithria script cleanups, remove old hacks and make it work with the new system. Closes #21174.
- Some strings cleanup

# Conflicts:
#	sql/old/4.3.4/world/23_2017_11_15/2018_01_04_00_world.sql
#	src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp
2020-07-22 16:50:54 +02:00
Treeston 942c3a77da Core: Combat/threat system rewrite (PR #19930)
- PvE combat is now always mutual. UNIT_FLAG_IN_COMBAT is backed by actual references to the units we're in combat with.
- PvP combat is now also tracked, and almost always mutual; spells like Vanish and Feign Death can break this rule. That means we can easily determine a list of players we're fighting.
- By extension, IsInCombatWith now has sensible behavior when invoked on nonplayers.
- Threat and combat systems are no longer the same.
  - They still have an enforced relationship (threat implies combat - clearing combat clears threat)...
  - ...but we can have combat without threat. A creature (with threat list) isn't considered to be engaged until it has an entry on its threat list...
  - ...which means we can now faithfully replicate retail engage behavior. Combat on projectile launch - engagement start on projectile impact. Yay for progress!
- AI method refactor, as already ported in 6113b9d - `JustEngagedWith`, `JustEnteredCombat` and `JustExitedCombat`.
- Vehicle threat is now properly pooled on the main vehicle body (fixes #16542).
- Various edge case bug fixes for threat redirects (Misdirection "cancelling" Vigilance and similar).
- Target re-selection is now significantly faster.
- Fixed a ton of other smaller edge case bugs, probably.

Closes #7951 and #19998.
2020-07-22 16:49:37 +02:00
treeston 7310ce2bc0 Core/Combat: Fixed issues with creatures sometimes entering combat with friendly targets
Close #19980
2020-07-22 13:49:21 +02:00
Treeston ec04d3b2cd [3.3.5] Combat/Threat rewrite - prep & refactor (#19966)
* Combat/Threat rewrite (PR #19930) prep work. Mostly refactors, and a compatibility layer on ThreatManager/HostileReference that allows scripts to be changed already.
2020-07-22 13:43:23 +02:00
Aokromes d6d3f06f06 New year 2020-01-04 18:32:38 +01:00
funjoker 6c56916b29 Misc: Update copyright information
Happy new year
2020-01-01 18:47:28 +01:00
Aokromes ca588b2e66 Core/Spells: Implemented personal summons
* By default determined by summon property flag SUMMON_PROP_FLAG_PERSONAL_SPAWN
2018-04-08 21:56:55 +02:00
ariel- 5ff847159c Core: header cleanup, split realmlist, boost compatibility, cotire, remove stormlib/zlib and stormlib/bzip2 and instead use dep sources 2018-03-28 04:41:59 -03:00
Aokromes 4bd0525edd Update copyright note for 2018 2018-01-01 01:06:19 +01:00
xinef1 b88200cd58 Core/Misc: Various crash fixes 2017-05-05 01:59:34 +01:00
ariel- 51f26dfe51 Core/Spells: Implementation of QAston proc system 2017-05-03 20:08:08 +01:00
Aokromes 719a317a67 Update copyright note for 2017 2017-01-02 07:26:38 +01:00
ariel- 02ba07dee0 Core/Misc: fix interaction of spells like Shadowmeld with Threat reducing effects
- SPELL_AURA_MOD_TOTAL_THREAT should be temporary and not added/subtracted from total, only computed
- Cleanup of reference related code
- Kill getLast() and reverse iterator obsevers, LinkedList iterator can't be used as a standard reverse_iterator (ie with operator++). They weren't used anyways
2016-10-21 09:14:38 +02:00
Aokromes 57d0a5d16d Revert "Core/Spells: Implementation of QAston proc system"
This reverts commit a70e4e26b3.
2016-10-21 07:27:04 +02:00
Aokromes a70e4e26b3 Core/Spells: Implementation of QAston proc system
- Move checks from Unit::IsTriggeredAtSpellProcEvent (old system) to Aura::IsProcTriggeredOnEvent (new system)
- Templatize SpellModOp param of Player::ApplySpellMod, also killed charge counter from SpellModifier and Player system for handling charges... no point in having 3 different systems doing the same thing
- Automatically add default entries to spellProcMap, based on spellinfo (else auras won't proc without an entry) Based on old Unit::ProcDamageAndSpellFor
- Old Unit::ProcDamageAndSpellFor renamed to Unit::ProcSkillsAndReactives and made private, will no longer handle auras.
- Start making use of HealInfo::AbsorbHeal in unit calculations, add effective healing info to HealInfo struct
- Changes in spell reflection system, emulates old behaviour, delaying aura drop
- Removed old charge count hacks in SpellMgr::LoadSpellInfoCorrections
- Removed bogus error log when procChance is 0: Some auras have initial 0 procChance but modified by SPELLMOD_CHANCE_OF_SUCCESS
- Fixed TriggerAurasProcOnEvent logic that tried to trigger twice from actor.
- Allow non damaging spells with DamageClass Melee or Ranged to proc character enchants. Ref issue #17034:

  * http://web.archive.org/web/20110309092008/http://elitistjerks.com/f47/t49865-paladin_retribution_pve/
  * When an auto-attack lands (does not dodge/parry/miss) that can proc a seal the of the following things happen independently of each other (see 2 roll system).

  * 1) A "hidden strike" which uses melee combat mechanics occurs. If it lands it refreshes/stacks SoV DoT. Only white swings can trigger a refresh or stack. (This hidden strike mechanic can also proc things like berserking..)
  * 2) A weapon damage based proc will occur if you used a special (CS/DS/judge) or if you have a 5 stack (from auto attacks). This attack can not be avoided.

  * Holy Vengeance is the "hidden strike" it has an apply aura effect and damage class melee.
- Fixed Blood Tap interaction with Death Runes (btw, don't know what was going on with those MiscValueB, spell 45529 doesn't have any MiscValueB in SPELL_EFFECT_ACTIVATE_RUNE)
- Ported some AuraEffect checks from old Unit.cpp function. added new AuraScript hook to check procs of an specific effect
- Allow only AuraEffects that passed the check to proc, this won't block whole aura from proccing (and lose charges) if at least one of the effects procs, though
- Changes in spell mod system (for SPELLMOD_CASTING_TIME). fixes #17558.
- Added an exception for SPELLMOD_CRITICAL_CHANCE too, fixes #15193
2016-10-05 13:19:51 +02:00
ariel- 65aec5f8f7 Merge remote-tracking branch 'tc/3.3.5' into 4.3.4
Note: additional hand-picked ports from 6.x to fix build

Conflicts:
	sql/updates/world/2016_02_22_00_world.sql
	sql/updates/world/2016_02_22_01_world.sql
	sql/updates/world/2016_02_22_02_world.sql
	sql/updates/world/2016_03_07_00_world.sql
	src/server/authserver/Realms/RealmList.cpp
	src/server/authserver/Realms/RealmList.h
	src/server/authserver/Server/AuthSession.cpp
	src/server/game/Accounts/AccountMgr.cpp
	src/server/game/AuctionHouse/AuctionHouseMgr.cpp
	src/server/game/Chat/Chat.cpp
	src/server/game/Conditions/ConditionMgr.cpp
	src/server/game/Conditions/ConditionMgr.h
	src/server/game/Entities/Player/Player.cpp
	src/server/game/Handlers/CharacterHandler.cpp
	src/server/game/Handlers/MiscHandler.cpp
	src/server/game/Scripting/ScriptLoader.cpp
	src/server/game/Scripting/ScriptLoader.h
	src/server/game/Server/WorldSession.cpp
	src/server/game/Server/WorldSocket.cpp
	src/server/game/World/World.cpp
	src/server/game/World/World.h
	src/server/scripts/CMakeLists.txt
	src/server/scripts/Commands/cs_gm.cpp
	src/server/scripts/Commands/cs_misc.cpp
	src/server/scripts/Commands/cs_rbac.cpp
	src/server/scripts/Commands/cs_ticket.cpp
	src/server/scripts/Commands/cs_wp.cpp
	src/server/scripts/EasternKingdoms/CMakeLists.txt
	src/server/scripts/EasternKingdoms/zone_burning_steppes.cpp
	src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp
	src/server/scripts/Kalimdor/CMakeLists.txt
	src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
	src/server/scripts/Kalimdor/zone_orgrimmar.cpp
	src/server/scripts/OutdoorPvP/CMakeLists.txt
	src/server/scripts/Spells/spell_dk.cpp
	src/server/scripts/Spells/spell_hunter.cpp
	src/server/shared/CMakeLists.txt
	src/server/worldserver/CMakeLists.txt
	src/server/worldserver/Main.cpp
	src/tools/mmaps_generator/CMakeLists.txt
2016-03-11 18:32:07 -03:00
treeston b5b7ce44cf Core/Threat: Prevent bosses (and other stuff using DoZoneInCombat) from switching off of the person pulling if they are pulled without generating threat. 2016-02-22 23:00:35 +01:00
ariel- d04d14e34d Update copyright note for 2016 2016-01-11 23:27:45 -03:00
Rushor 923a368ac7 Update copyright note for 2016 2016-01-01 12:02:33 +01:00