Commit Graph
270 Commits
Author SHA1 Message Date
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
Treeston 607069de36 Core/AI: Remove unnecessary parameter from DoZoneInCombat after eb1972f 2020-07-22 17:38:11 +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
Ovah b09d6e2330 Core/Movement: reimplement follow movement (#124) 2020-06-26 21:22:21 +02:00
Ovahlord c9961e6a94 Core/Movement: rewrite follow movement 2020-03-27 18:59:16 +01:00
Ovahlord 1aaf004064 Core/AI: followup fixes 2020-01-31 07:34:12 +01:00
Treeston e156f8d571 Scripts/FollowerAI: Some cleanup:
- FollowerAI properly resumes follow after evading.
- Removed duplicated getters from CreatureAI (IsEscorted vs IsEscortNPC), they were used to do the same thing
- FollowerAI properly assists in combat.
- FollowerAI properly despawns if quest is abandoned.
- FollowerAI now supports dynamic respawning for escort NPCs.
2020-01-31 07:34:11 +01:00
Ovahlord 42f2042279 Core/AI: removed a completely useless and braindead enum 2020-01-21 19:46:25 +01: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
Treeston 90540d684b Core/Misc: Various dynspawn cleanup and refactors split off from pooling rewrite:
- Map::RemoveRespawnTime(SpawnObjectType, LowType, doRespawn) split into Map::Respawn and Map::RemoveRespawnTime, without the extra boolean
- Map::RemoveRespawnTime(RespawnInfo*) merged into Map::DeleteRespawnInfo(RespawnInfo*) and is now private
- Map::DeleteRespawnInfo(void) renamed to Map::UnloadAllRespawnInfos to properly describe what it does
- Map::ProcessRespawns now actually saves the delayed respawn time to DB if the respawn was delayed
- Map::AddRespawnInfo now takes const reference, and returns success as a boolean
- Map::AddRespawnInfo no longer offers an unused "replace" parameter
- Map::DeleteRespawnInfo no longer offers a variety of unused private overloads
- Map::SaveRespawnTime no longer offers a tantalizing writeDB parameter. Parameter is now called "startup" to properly describe what it does.
- Map::SaveRespawnInfoDB now takes RespawnInfo reference instead of all the various fields. Still public because compatibility mode. QQ.
- Map::GetWorldObjectBySpawnId sanitized
- Map::GetXRespawnTime methods sanitized to all go through Map::GetRespawnTime

----------

Core/DB: Unify `creature_respawn` and `gameobject_respawn` into a single `respawn` table
2019-08-18 12:47:10 +02:00
Killyana 22e34861bd Core: Restore reset in EscortAI::InitializeAI (#23197)
Closes  #23008
2019-04-26 18:59:11 +02:00
Treeston 7c025ee803 Core/AI: EscortAI init logic moved from JustAppeared to InitializeAI. There are no escort NPCs using compatibility mode anymore, so this is equivalent.
As a result, inheriting scripts calling Start in on-create hooks (like JustSummoned) will now work properly again.

Tagging #20310.

# Conflicts:
#	src/server/game/AI/ScriptedAI/ScriptedEscortAI.h
2019-04-26 18:49:47 +02:00
Ovahlord 52da459a83 Core/AI: fixed filling database waypoints with correct movement type for escortAI 2018-09-10 22:23:08 +02:00
Ovahlord c4ce03f525 Core/AI: merged walk / run fix for EscortAI 2018-08-20 02:53:42 +02:00
Ovahlord c808b981f7 Core/Movement: merged smooth waypoint movement. Followup commits will be merged soon (tm) 2018-08-02 15:38:35 +02:00
Ovahlord b976bc1187 Core/Spawns: merged Dynamic Spawning 2018-07-21 20:44:41 +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 46366373ab Core/AI: Some more refactoring prep for #19930. CreatureAI::EnterCombat is now called CreatureAI::JustEngagedWith. There's also two new methods on UnitAI, though they're never invoked right now. 2018-01-01 16:02:22 +01:00
Aokromes 4bd0525edd Update copyright note for 2018 2018-01-01 01:06:19 +01:00
Aokromes 1a5c0f5c3b Core/Grids: Ported cmangos/mangos-wotlk@ea99457
(cherry picked from commit 9299e9b)
2017-06-19 20:20:26 +02:00
Aokromes ac3dbcb880 Core/Utilities: Rename RandomResizeList->RandomResize as it is no longer restricted to a list 2017-06-07 09:53:04 +02:00
treeston a83b77485a Add another helper to ScriptedGossip.h for resolving listId -> action. 2017-05-31 16:09:56 +02:00
Aokromes c015a5cf10 Core/Misc: camelize GetFaction/SetFaction properly 2017-05-02 02:02:31 +02:00
xinef1 2c05a59815 Core/Misc: Fix various crashes, also related to multithreading (#19012)
* When iterating groups we have to either do it not in multithreaded context (map updates) or start with checking maps (they are guaranteed to change in single thread update).
* Properly clear ComboPoint references on player remove 
* remove some possible references item may have when it is deleted during save. 
* Also clear all hostile references when unit is removed from map.
2017-02-05 01:58:11 +01:00
ariel- f5822c589b Core/EscortAI: fix invalid iterator dereference 2017-02-01 01:18:17 +01:00
Aokromes 1cf9bdd6c7 build fix 2017-01-20 16:59:17 +01:00
Aokromes 31484029a0 Revert "[3.3.5][master] Core/Movement: Smooth movement 2017-01-20 16:26:38 +01:00
ccrs 047673175b cb634e6fba followup
updates #18401
2017-01-07 07:36:00 +01:00
Aokromes 719a317a67 Update copyright note for 2017 2017-01-02 07:26:38 +01:00
Keader 68639f2b8f Core/AI: Added new method for search friendly targets with certain entry and hp pct below a value (#18310) 2016-12-06 11:02:21 +01:00
Aokromes f6160d4d0b Core/Movement: Smooth movement
Implement smooth movement for all waypoint pathing and escortai
2016-11-27 16:59:31 +01:00
SnapperRy d77b366703 Core/Quest: do not set a quest to failed if it's rewarded or has no status at all (not taken). 2016-10-24 13:47:32 +02:00
treeston e5f2fe7b7b Fix _DespawnAtEvade for other creatures to actually respawn said other creatures.
Also fix add aggro for Hadronox.
Fixes and closes #18012.
2016-10-24 13:45:01 +02:00
ariel- a2c88b2468 Core/AI: added container independent wrappers for WorldObject::GetxxxInGrid 2016-10-24 13:16:12 +02:00
Treeston 69e4236146 Scripts/AzjolNerub: Full rewrite 2016-09-27 13:01:58 +02:00
treeston c1cc7e0a36 Core/Movement: Add new SplineChainMovementGenerator that allows accurate replication of sniffed waypoints in static sequences, along with DB facilities that allow loading of waypoints from DB. 2016-09-20 12:54:54 +02:00
treeston 5bd9d82c9d Creature/Scripting: Move CreatureAI::CanRespawn to CreatureScript::CanSpawn. Now also applies to initial spawn. Dynamic spawning prep. 2016-09-09 19:57:25 +02:00
treeston 9a829b4761 Scripts/Events: Globally fix all ExecuteEvent loops to check UNIT_STATE_CASTING after each iteration, instead of just checking it once initially 2016-09-03 17:26:20 +02:00
treeston e3065ab4dc Replace a leftover const char* with a std::string const&. 2016-08-31 08:40:12 +02:00
treeston 109d87d3c3 Entities/Gossip: The Big One™ that gets rid of all uses of The Bad™ and The Ugly™, e.g. gossip preprocessor macros, and replaces them with the new-and-shiny gossip functions. 2016-08-31 08:39:33 +02:00
treeston 31aa5cd8c6 Fix dynamic build. 2016-08-31 08:19:02 +02:00
treeston 08d3b0ccb9 Last one. For real. Please. (Build fix #5). 2016-08-28 20:14:25 +02:00
treeston da4f85a4a8 ....right, I actually went through a full rebuild now just to make sure it works. 2016-08-28 20:09:44 +02:00
treeston 1f8cd54c76 Build fix. Again. Oops. 2016-08-28 20:09:28 +02:00
treeston f38e2c3973 You saw nothing (build fix). 2016-08-28 20:08:55 +02:00
treeston e8985223b8 Creature/Gossip: offer replacement functions for the existing preprocessor gossip macros 2016-08-28 19:47:31 +02:00
treeston e12a7116f8 Entities/Creature: Add arg2 to DespawnOrUnsummon to allow overriding respawn time. This matches changes that will be merged as part of dynamic spawning, allowing scripts to transition early. 2016-08-26 00:02:16 +02:00