From 7ea438ebdca93874776e02e9985db1da0a53f2fb Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 11 Mar 2023 00:07:57 +0100 Subject: Core/Creatures: Implemented unkillable flag (prevent health from going below 1) --- src/server/game/Entities/Creature/Creature.h | 8 ++++++++ src/server/game/Entities/Unit/Unit.cpp | 4 ++++ 2 files changed, 12 insertions(+) (limited to 'src') diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 44d79636bfb..eb796c15707 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -146,6 +146,14 @@ class TC_GAME_API Creature : public Unit, public GridObject, public Ma using Unit::SetImmuneToNPC; void SetImmuneToNPC(bool apply) override { Unit::SetImmuneToNPC(apply, HasReactState(REACT_PASSIVE)); } + void SetUnkillable(bool unkillable) + { + if (unkillable) + _staticFlags |= CREATURE_STATIC_FLAG_UNKILLABLE; + else + _staticFlags &= ~CREATURE_STATIC_FLAG_UNKILLABLE; + } + /// @todo Rename these properly bool isCanInteractWithBattleMaster(Player* player, bool msg) const; bool CanResetTalents(Player* player) const; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 329ff633801..e1ad6366c98 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -857,6 +857,10 @@ bool Unit::HasBreakableByDamageCrowdControlAura(Unit* excludeCasterChannel) cons duel_hasEnded = true; } + else if (victim->IsCreature() && damageTaken >= health && victim->ToCreature()->HasFlag(CREATURE_STATIC_FLAG_UNKILLABLE)) + { + damageTaken = health - 1; + } else if (victim->IsVehicle() && damageTaken >= (health-1) && victim->GetCharmer() && victim->GetCharmer()->GetTypeId() == TYPEID_PLAYER) { Player* victimRider = victim->GetCharmer()->ToPlayer(); -- cgit v1.2.3