From c925d7af40bb69dc7cd8deb10591068a1c25cd9c Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 19 Apr 2021 10:22:43 -0400 Subject: [PATCH] Core/AI: CreatureAI.EnterCombat is now called CreatureAI.JustEngagedWith. There's also two new methods on UnitAI, though they're never invoked right now. Port From (https://github.com/TrinityCore/TrinityCore/commit/bce43de7f3fba618c370f2aba327d23dd30d1cdd) --- Source/Game/AI/CoreAI/CombatAI.cs | 4 ++-- Source/Game/AI/CoreAI/CreatureAI.cs | 7 ++----- Source/Game/AI/CoreAI/UnitAI.cs | 7 +++++++ Source/Game/AI/ScriptedAI/ScriptedAI.cs | 12 ++++++------ Source/Game/AI/SmartScripts/SmartAI.cs | 2 +- Source/Game/Entities/Unit/Unit.Combat.cs | 2 +- Source/Scripts/Pets/Generic.cs | 2 +- Source/Scripts/Pets/Hunter.cs | 2 +- Source/Scripts/Pets/Mage.cs | 2 +- Source/Scripts/World/EmeraldDragons.cs | 16 ++++++++-------- Source/Scripts/World/NpcGuard.cs | 4 ++-- Source/Scripts/World/NpcSpecial.cs | 20 +++++++++----------- 12 files changed, 41 insertions(+), 39 deletions(-) diff --git a/Source/Game/AI/CoreAI/CombatAI.cs b/Source/Game/AI/CoreAI/CombatAI.cs index 234010653..d15f9a306 100644 --- a/Source/Game/AI/CoreAI/CombatAI.cs +++ b/Source/Game/AI/CoreAI/CombatAI.cs @@ -51,7 +51,7 @@ namespace Game.AI } } - public override void EnterCombat(Unit victim) + public override void JustEngagedWith(Unit victim) { foreach (var id in Spells) { @@ -134,7 +134,7 @@ namespace Game.AI AttackStartCaster(victim, _attackDist); } - public override void EnterCombat(Unit victim) + public override void JustEngagedWith(Unit victim) { if (Spells.Empty()) return; diff --git a/Source/Game/AI/CoreAI/CreatureAI.cs b/Source/Game/AI/CoreAI/CreatureAI.cs index ec45c9214..7f6c73417 100644 --- a/Source/Game/AI/CoreAI/CreatureAI.cs +++ b/Source/Game/AI/CoreAI/CreatureAI.cs @@ -408,11 +408,8 @@ namespace Game.AI me.DoImmediateBoundaryCheck(); } - /// - /// Called for reaction when initially engaged - /// - /// - public virtual void EnterCombat(Unit victim) { } + // Called for reaction when initially engaged - this will always happen _after_ JustEnteredCombat + public virtual void JustEngagedWith(Unit who) { } // Called when the creature is killed public virtual void JustDied(Unit killer) { } diff --git a/Source/Game/AI/CoreAI/UnitAI.cs b/Source/Game/AI/CoreAI/UnitAI.cs index 0b6a0c689..3efecdd8f 100644 --- a/Source/Game/AI/CoreAI/UnitAI.cs +++ b/Source/Game/AI/CoreAI/UnitAI.cs @@ -478,6 +478,13 @@ namespace Game.AI public virtual void SetGUID(ObjectGuid guid, int id = 0) { } public virtual ObjectGuid GetGUID(int id = 0) { return ObjectGuid.Empty; } + // Called when the unit enters combat + // (NOTE: Creature engage logic should NOT be here, but in JustEngagedWith, which happens once threat is established!) + public virtual void JustEnteredCombat(Unit who) { } + + // Called when the unit leaves combat + public virtual void JustExitedCombat() { } + public virtual void DamageDealt(Unit victim, ref uint damage, DamageEffectType damageType) { } public virtual void DamageTaken(Unit attacker, ref uint damage) { } public virtual void HealReceived(Unit by, uint addhealth) { } diff --git a/Source/Game/AI/ScriptedAI/ScriptedAI.cs b/Source/Game/AI/ScriptedAI/ScriptedAI.cs index 0bc9e3094..470f9f7c1 100644 --- a/Source/Game/AI/ScriptedAI/ScriptedAI.cs +++ b/Source/Game/AI/ScriptedAI/ScriptedAI.cs @@ -48,7 +48,7 @@ namespace Game.AI DoStartNoMovement(target); } - // Called before EnterCombat even before the creature is in combat. + // Called before JustEngagedWith even before the creature is in combat. public override void AttackStart(Unit target) { if (IsCombatMovementAllowed()) @@ -411,7 +411,7 @@ namespace Game.AI public override void Reset() { } //Called at creature aggro either by MoveInLOS or Attack Start - public override void EnterCombat(Unit victim) { } + public override void JustEngagedWith(Unit victim) { } public bool HealthBelowPct(int pct) { return me.HealthBelowPct(pct); } public bool HealthAbovePct(int pct) { return me.HealthAbovePct(pct); } @@ -502,7 +502,7 @@ namespace Game.AI instance.SetBossState(_bossId, EncounterState.Done); } - public void _EnterCombat() + public void _JustEngagedWith() { if (instance != null) { @@ -602,7 +602,7 @@ namespace Game.AI public virtual void ScheduleTasks() { } public override void Reset() { _Reset(); } - public override void EnterCombat(Unit who) { _EnterCombat(); } + public override void JustEngagedWith(Unit who) { _JustEngagedWith(); } public override void JustDied(Unit killer) { _JustDied(); } public override void JustReachedHome() { _JustReachedHome(); } @@ -635,7 +635,7 @@ namespace Game.AI summons.DespawnAll(); } - void _EnterCombat() + void _JustEngagedWith() { Unit target = SelectTarget(SelectAggroTarget.Random, 0, 0.0f, true); if (target) @@ -684,7 +684,7 @@ namespace Game.AI public override void Reset() { _Reset(); } - public override void EnterCombat(Unit who) { _EnterCombat(); } + public override void JustEngagedWith(Unit who) { _JustEngagedWith(); } public override void JustDied(Unit killer) { _JustDied(); } } diff --git a/Source/Game/AI/SmartScripts/SmartAI.cs b/Source/Game/AI/SmartScripts/SmartAI.cs index e5044b618..654f807a5 100644 --- a/Source/Game/AI/SmartScripts/SmartAI.cs +++ b/Source/Game/AI/SmartScripts/SmartAI.cs @@ -609,7 +609,7 @@ namespace Game.AI me.GetMotionMaster().MoveIdle(); // wait the order of leader } - public override void EnterCombat(Unit victim) + public override void JustEngagedWith(Unit victim) { if (IsAIControlled()) me.InterruptNonMeleeSpells(false); // must be before ProcessEvents diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index 0250bb075..f1670b3f8 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -1443,7 +1443,7 @@ namespace Game.Entities if (enemy != null) { if (IsAIEnabled) - creature.GetAI().EnterCombat(enemy); + creature.GetAI().JustEngagedWith(enemy); if (creature.GetFormation() != null) creature.GetFormation().MemberEngagingTarget(creature, enemy); diff --git a/Source/Scripts/Pets/Generic.cs b/Source/Scripts/Pets/Generic.cs index 403451642..19defb38a 100644 --- a/Source/Scripts/Pets/Generic.cs +++ b/Source/Scripts/Pets/Generic.cs @@ -49,7 +49,7 @@ namespace Scripts.Pets me.GetMotionMaster().MoveFollow(owner, 0.0f, 0.0f); } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void UpdateAI(uint diff) { } diff --git a/Source/Scripts/Pets/Hunter.cs b/Source/Scripts/Pets/Hunter.cs index c7ecf318b..0a238e26d 100644 --- a/Source/Scripts/Pets/Hunter.cs +++ b/Source/Scripts/Pets/Hunter.cs @@ -43,7 +43,7 @@ namespace Scripts.Pets { public npc_pet_hunter_snake_trap(Creature creature) : base(creature) { } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void Reset() { diff --git a/Source/Scripts/Pets/Mage.cs b/Source/Scripts/Pets/Mage.cs index b0bfba300..e990b2fc8 100644 --- a/Source/Scripts/Pets/Mage.cs +++ b/Source/Scripts/Pets/Mage.cs @@ -151,7 +151,7 @@ namespace Scripts.Pets owner.CastSpell(me, SpellIds.CloneMe, false); } - public override void EnterCombat(Unit victim) + public override void JustEngagedWith(Unit victim) { if (me.GetVictim() && !me.GetVictim().HasBreakableByDamageCrowdControlAura(me)) { diff --git a/Source/Scripts/World/EmeraldDragons.cs b/Source/Scripts/World/EmeraldDragons.cs index 919413bee..71d72950f 100644 --- a/Source/Scripts/World/EmeraldDragons.cs +++ b/Source/Scripts/World/EmeraldDragons.cs @@ -231,10 +231,10 @@ namespace Scripts.World.EmeraldDragons }); } - public override void EnterCombat(Unit who) + public override void JustEngagedWith(Unit who) { Talk(TextIds.SayYsondreAggro); - base.EnterCombat(who); + base.JustEngagedWith(who); } // Summon druid spirits on 75%, 50% and 25% health @@ -278,10 +278,10 @@ namespace Scripts.World.EmeraldDragons }); } - public override void EnterCombat(Unit who) + public override void JustEngagedWith(Unit who) { Talk(TextIds.SayLethonAggro); - base.EnterCombat(who); + base.JustEngagedWith(who); } public override void DamageTaken(Unit attacker, ref uint damage) @@ -361,10 +361,10 @@ namespace Scripts.World.EmeraldDragons base.KilledUnit(who); } - public override void EnterCombat(Unit who) + public override void JustEngagedWith(Unit who) { Talk(TextIds.SayEmerissAggro); - base.EnterCombat(who); + base.JustEngagedWith(who); } public override void DamageTaken(Unit attacker, ref uint damage) @@ -419,10 +419,10 @@ namespace Scripts.World.EmeraldDragons }); } - public override void EnterCombat(Unit who) + public override void JustEngagedWith(Unit who) { Talk(TextIds.SayTaerarAggro); - base.EnterCombat(who); + base.JustEngagedWith(who); } public override void SummonedCreatureDies(Creature summon, Unit killer) diff --git a/Source/Scripts/World/NpcGuard.cs b/Source/Scripts/World/NpcGuard.cs index 7dfcbb9e3..9a1c2d72d 100644 --- a/Source/Scripts/World/NpcGuard.cs +++ b/Source/Scripts/World/NpcGuard.cs @@ -118,7 +118,7 @@ namespace Scripts.World.NpcGuard DoReplyToTextEmote(textEmote); } - public override void EnterCombat(Unit who) + public override void JustEngagedWith(Unit who) { if (me.GetEntry() == CreatureIds.CenarionHoldInfantry) Talk(TextIds.SayGuardSilAggro, who); @@ -202,7 +202,7 @@ namespace Scripts.World.NpcGuard _scheduler.CancelAll(); } - public override void EnterCombat(Unit who) + public override void JustEngagedWith(Unit who) { ScheduleVanish(); } diff --git a/Source/Scripts/World/NpcSpecial.cs b/Source/Scripts/World/NpcSpecial.cs index aef60e8a9..04b309f6a 100644 --- a/Source/Scripts/World/NpcSpecial.cs +++ b/Source/Scripts/World/NpcSpecial.cs @@ -619,7 +619,7 @@ namespace Scripts.World.NpcSpecial me.RemoveNpcFlag(NPCFlags.QuestGiver); } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void UpdateAI(uint diff) { @@ -719,7 +719,7 @@ namespace Scripts.World.NpcSpecial } } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void ReceiveEmote(Player player, TextEmotes emote) { @@ -1038,7 +1038,7 @@ namespace Scripts.World.NpcSpecial } } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void QuestAccept(Player player, Quest quest) { @@ -1108,7 +1108,7 @@ namespace Scripts.World.NpcSpecial } } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void SpellHit(Unit caster, SpellInfo spell) { @@ -1230,7 +1230,7 @@ namespace Scripts.World.NpcSpecial me.SetHealth(me.CountPctFromMaxHealth(70)); } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void SpellHit(Unit caster, SpellInfo spell) { @@ -1319,9 +1319,7 @@ namespace Scripts.World.NpcSpecial me.AddUnitFlag(UnitFlags.NonAttackable); } - public override void EnterCombat(Unit who) - { - } + public override void JustEngagedWith(Unit who) { } public override void UpdateAI(uint diff) { @@ -1463,7 +1461,7 @@ namespace Scripts.World.NpcSpecial public npc_steam_tonk(Creature creature) : base(creature) { } public override void Reset() { } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void OnPossess(bool apply) { @@ -1501,7 +1499,7 @@ namespace Scripts.World.NpcSpecial Initialize(); } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void AttackStart(Unit who) { } public override void MoveInLineOfSight(Unit who) { } @@ -1966,7 +1964,7 @@ namespace Scripts.World.NpcSpecial me.GetMotionMaster().MoveFollow(owner, SharedConst.PetFollowDist, SharedConst.PetFollowAngle); } - public override void EnterCombat(Unit who) { } + public override void JustEngagedWith(Unit who) { } public override void DoAction(int param) {