Commit Graph
876 Commits
Author SHA1 Message Date
Ovahlord a657a21c4a Core/Units: backported hit, dodge, parry and crit chance updates from 335 and fixed logics in 4.x specific code 2020-08-23 17:14:34 +02:00
Shauren fa6f081037 Core/Creatures: Move gossip trainer assignment to creature_trainer table - same gossip can open different trainers depending on which creature it is assigned to 2020-08-22 18:22:57 +02:00
Roc13x ac6604fba7 Core/Creature: Refactor vendor item code (#167)
* Fix loading referenced vendor items
* Refactored vendor item storage
2020-08-06 01:43:39 +02:00
Roc13x 8669b5d22c Core/Gossips: Make MenuID/OptionID consistently use uint32 types (#165) 2020-08-04 10:14:47 +02:00
Ovahlord b3394e13cb Core/Creature: removed deprecated IsCombatDisallowed helper 2020-07-29 20:09:46 +02:00
Ovahlord 9340f8d9df Core/Units: add new functionality for units to block or enable combat entirely via helper to reflect what CREATURE_DIFFICULTYFLAGS_IGNORE_COMBAT and client ai functions imply 2020-07-29 15:46:09 +02:00
Ovahlord 64c4b4f529 Core/Misc: converted quest, creature and quest query packets to packet class and ported query data caching from 335 branch 2020-07-28 21:34:12 +02:00
Ovahlord 9d618c3162 Core/Creatures: ensure that ai is enabled when updating ai for corpses 2020-07-24 12:32:51 +02:00
Giacomo Pozzoni 9c77105040 Core/Combat: Disable triggers entering combat (#25086)
* Core/Combat: Disable triggers entering combat

* Move check to database flags_extra flag in creature_template with value 0x00002000

* Fix Rotface puddle stalker too

* Rename 9999_99_99_99_world.sql to 2020_07_22_00_world.sql
# Conflicts:
#	src/server/game/Entities/Creature/Creature.h
#	src/server/game/Entities/Creature/enuminfo_CreatureData.cpp
2020-07-24 00:18:25 +02:00
Ovahlord 1ab7a9328f Core/Combat: reduce differences between 4.x and 335 2020-07-22 21:37:02 +02:00
Treeston f41cfa9185 Core/SmartAI: SmartAI creatures no longer process health-based hooks after death. 2020-07-22 19:21:21 +02:00
Ovahlord 2c88471fe3 Scripts/Misc: more followups 2020-07-22 19:20:54 +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
Ovahlord 47ef91c23d Core/Misc: more fixups 2020-07-22 18:10:50 +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
Giacomo Pozzoni 509499efbe 3.3.5 threat assert (#23034)
* Core/Creature: Change assert about Threat to log
2020-07-22 18:00:15 +02:00
Treeston 8dedfaea4b Core/Creature: Get rid of a few Creature::getAttackerForHelper misuses. That's not what the function does, folks. 2020-07-22 17:55:23 +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
Treeston 1020d1995f Core/Creature: Fall back to combat list if calling for help without threat list 2020-07-22 17:42:38 +02:00
Treeston 6f6b6534bf Core/Creature: Some adjustments to Creature::CallForHelp. Now works even if the Creature hasn't selected a victim yet. 2020-07-22 17:38:22 +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 528953ab8f Core/Creature: Adjust SelectVictim behavior: (PR #21324)
- No more automatic combat -> threat promotion. This matches anecdotal retail behavior - spells already in transit will not cause mob to chase you if its primary target vanishes before the spell hits.
- Prevent mobbing by stopping creatures from auto-acquiring a nearby target just because the primary target vanished.
2020-07-22 17:18:01 +02:00
Treeston 7c666188c1 typo 2020-07-22 17:16:50 +02:00
Treeston f9b4dd7420 Core/Creature: add an assertion to guard against infinite loops 2020-07-22 17:16:42 +02:00
Treeston 523059f80e Core/Threat: Fix a potential exploit allowing players to damage a boss without them taking damage.
Scripts/Halion: General cleanup of old hacks no longer needed under new combat system.
2020-07-22 16:59:00 +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 a09db6b4ba Hi, I'm Treeston, and welcome to Combat PR Prep Refactors.
Today, we're moving UNIT_FLAG_IMMUNE_TO_PC and UNIT_FLAG_IMMUNE_TO_NPC to higher-level abstraction so combat manager can react to it.
New methods on Unit:
- void SetImmuneTo<All/PC/NPC>(apply, keepCombat = false);
- bool IsImmuneTo<All/PC/NPC>() const;

# Conflicts:
#	src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp
#	src/server/game/Entities/Unit/Unit.cpp
#	src/server/game/Spells/SpellEffects.cpp
#	src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp
#	src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
#	src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp
#	src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
#	src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
#	src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp
#	src/server/scripts/EasternKingdoms/zone_tirisfal_glades.cpp
#	src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
#	src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
#	src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
#	src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
#	src/server/scripts/Kalimdor/zone_tanaris.cpp
#	src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
#	src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
#	src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
#	src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
2020-07-22 14:35:53 +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
Ovahlord 101f57c835 Core/Creatures: do not update animation tiers when updating movement flags
* Animation tiers are mostly involved in scripts so we do not handle them in generic movement updates
2020-07-15 18:50:56 +02:00
Ovahlord f8091d6aac Core/Movement: made SetDisableGravity and SetHover virtual and handle anim tiers in their new override inside of the Creature class.
* no longer set anim tiers when the target is rooted
2020-07-13 14:07:59 +02:00
Ovahlord d46fb93657 Core/Pools: ported pooling updates from 335 branch 2020-07-13 11:17:19 +02:00
Ovahlord 9e2e37e074 Core/Spells: check for spell immunities only for effects that are affecting the checked target 2020-07-10 19:12:37 +02:00
Ovah b09d6e2330 Core/Movement: reimplement follow movement (#124) 2020-06-26 21:22:21 +02:00
Warpten 5cb747620a Core/Movement: Fixed Animation Tier handling (#113) 2020-06-03 00:49:18 +02:00
Ovahlord 55155d1295 Core/Creatures: cleaned up a duplicate movement flag check 2020-05-16 21:25:38 +02:00
Ovahlord 813b82efa3 Core/Units: CanFly and CanHover will now return positive results when the creature has the according movement flags dispite not having the template movement field set as enabled. This fixes several edge cases with manually enabled flight movement
* renamed IsLevitating to IsGravityDisabled for consistency
2020-05-16 19:21:27 +02:00
Ovahlord 298c2593df Core/Units: fixed a crash that happened when despawning a pet while having units with no ownerguid stored in m_controlled
* minor fixups for vehicle energy power regeneration
* do not set ownerguids for summon vehicles
2020-04-29 14:27:27 +02:00
Ovahlord bedd554c79 Core/Units: protect m_Controlled unit set against removing non-existing pointers and log owner and unit to track down potential crashes 2020-04-28 20:42:24 +02:00
Shauren 48695b7c9d Core/Auras: Prevent getting negative scale with auras
Closes #24040

# Conflicts:
#	src/server/game/Entities/Creature/Creature.cpp
#	src/server/game/Entities/Pet/Pet.cpp
2020-04-28 18:10:14 +02:00
Ovahlord 2edba50bcd Core/Units: summoned vehicles will now also get a creator guid 2020-04-28 17:47:21 +02:00
Ovahlord 2725fdcbbe Core/Vehicles: update the power display of vehicles before being added to world to avoid building unnecessary update_object packets right after spawning them
# Conflicts:
#	src/server/game/Entities/Vehicle/Vehicle.cpp
2020-04-27 20:34:50 +02:00
Ovahlord 5cf7de6aa7 Core/Units: make health regeneration functions for players and creatures virtual 2020-04-27 14:39:07 +02:00
Ovahlord e7ba484fcf Core/Units: reworked creature power regeneration handling
* players and creatures now share the same power regeneration regeneration function
* UpdatePowerRegeneration is now virtual and handles creature and player specific formulas individually
* handle update field flag UF_FLAG_UNIT_ALL to handle UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER and UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER for creatures as well
2020-04-27 14:20:33 +02:00
Ovahlord 31a6a23c28 Core/Creatures: restore flag handling for companions 2020-04-22 15:10:30 +02:00
Ovahlord b653f2f819 Core/Units: ported power type updates from master branch 2020-04-22 03:13:02 +02:00
Ovahlord e67167e8cf Core/Creatures: uncontrolled minions such as Army of the Dead and totem elementals will now be stored in the player's controlled list as well to trigger aggro mechanics 2020-04-22 00:40:48 +02:00
Ovahlord d30c811d9e Core/Creatures: reworked tempoary summon creation
* all stats and values will now be set before summons are getting added to map
* cleaned up summon spell effect handler to reduce duplicade code
* summoner guids will no longer be set for every minion and correctly handle assigning creator guids instead. These values will serve as fallback guid if there is no summoner guid
* friendly tempsummons will now inherit the guild data of their player and pass them on to further allied summons. This fixes guild specific visuals for creatures such as Guild Battle Standards and Guild Heralds.

Todo: check for regressions
2020-04-22 00:20:18 +02:00
Ovahlord c537a2658a Core/Units: reworked power regeneration for players
* use a reversed client function to get the power regeneration rate for all types of powers
* unified all player based regeneration updates into a single statsystem helper
* cleaned up unnecessary regeneration timers
* implement power regeneration for alternative powers
* corrected rage gain numbers based on simulationcraft formulas
2020-04-19 22:53:29 +02:00
Shauren 47acc59f49 Core/DBLayer: Prevent committing transactions started on a different database 2020-04-15 21:02:26 +02:00