aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-03-11 00:07:57 +0100
committerShauren <shauren.trinity@gmail.com>2023-03-11 00:07:57 +0100
commit7ea438ebdca93874776e02e9985db1da0a53f2fb (patch)
tree3e0ad4df0b1f6f3be54bcf88514889f1bf836557
parent379b1ec6ae83229ed2c5b82480d73d509c47be33 (diff)
Core/Creatures: Implemented unkillable flag (prevent health from going below 1)
-rw-r--r--src/server/game/Entities/Creature/Creature.h8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
2 files changed, 12 insertions, 0 deletions
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<Creature>, 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();