From 89a3cb971a0bbccd88335dfb8c59ce43a1ea0fbc Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 14 Mar 2023 02:09:28 -0400 Subject: [PATCH] Core/Creatures: Implemented unkillable flag (prevent health from going below 1) Port From (https://github.com/TrinityCore/TrinityCore/commit/7ea438ebdca93874776e02e9985db1da0a53f2fb) --- Source/Game/Entities/Creature/Creature.cs | 8 ++++++++ Source/Game/Entities/Unit/Unit.cs | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index dbf9266e0..7de800b10 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -3187,6 +3187,14 @@ namespace Game.Entities public override void SetImmuneToPC(bool apply) { SetImmuneToPC(apply, HasReactState(ReactStates.Passive)); } public override void SetImmuneToNPC(bool apply) { SetImmuneToNPC(apply, HasReactState(ReactStates.Passive)); } + void SetUnkillable(bool unkillable) + { + if (unkillable) + _staticFlags |= CreatureStaticFlags.Unkillable; + else + _staticFlags &= ~CreatureStaticFlags.Unkillable; + } + public bool IsInEvadeMode() { return HasUnitState(UnitState.Evade); } public bool IsEvadingAttacks() { return IsInEvadeMode() || CanNotReachTarget(); } diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index dca260e12..881112ad8 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -2591,6 +2591,10 @@ namespace Game.Entities duel_hasEnded = true; } + else if (victim.IsCreature() && damageTaken >= health && victim.ToCreature().HasFlag(CreatureStaticFlags.Unkillable)) + { + damageTaken = health - 1; + } else if (victim.IsVehicle() && damageTaken >= (health - 1) && victim.GetCharmer() != null && victim.GetCharmer().IsTypeId(TypeId.Player)) { Player victimRider = victim.GetCharmer().ToPlayer();