diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-03-11 00:07:57 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-03-11 00:07:57 +0100 |
commit | 7ea438ebdca93874776e02e9985db1da0a53f2fb (patch) | |
tree | 3e0ad4df0b1f6f3be54bcf88514889f1bf836557 | |
parent | 379b1ec6ae83229ed2c5b82480d73d509c47be33 (diff) |
Core/Creatures: Implemented unkillable flag (prevent health from going below 1)
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 8 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 |
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(); |