diff options
author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2020-04-14 16:00:53 +0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-14 14:00:53 +0200 |
commit | e1a8ebc064a2e30b4f1d0d129f034ff64368bedc (patch) | |
tree | 7ca73eb8f90b901403389d2d58372dd3e802a8e9 | |
parent | 37ff15489b844d5ded34fc08b22704157a31e093 (diff) |
Core/PacketIO: updated SMSG_DURABILITY_DAMAGE_DEATH (#24442)
- use RATE_DURABILITY_LOSS_ON_DEATH for death from falling
- add note, that RATE_DURABILITY_LOSS_ON_DEATH doesn't change log message
(cherry picked from commit a1831e0c1e9329352732f01f4ae8a6b85a89a496)
# Conflicts:
# src/server/game/Entities/GameObject/GameObject.cpp
# src/server/game/Entities/Player/Player.cpp
# src/server/game/Entities/Unit/Unit.cpp
# src/server/game/Server/Packets/GameObjectPackets.h
# src/server/game/Server/Protocol/Opcodes.cpp
Co-authored-by: MitchesD <majklprofik@seznam.cz>
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 8 | ||||
-rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 1 |
5 files changed, 20 insertions, 7 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 15185492bc6..3f9a18b7523 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -789,12 +789,11 @@ uint32 Player::EnvironmentalDamage(EnviromentalDamage type, uint32 damage) { if (type == DAMAGE_FALL) // DealDamage does not apply item durability loss from self-induced damage. { - TC_LOG_DEBUG("entities.player", "Player::EnvironmentalDamage: Player '%s' (%s) fall to death, losing 10%% durability", - GetName().c_str(), GetGUID().ToString().c_str()); - DurabilityLossAll(0.10f, false); + TC_LOG_DEBUG("entities.player", "Player::EnvironmentalDamage: Player '%s' (%s) fall to death, losing %f durability", + GetName().c_str(), GetGUID().ToString().c_str(), sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH)); + DurabilityLossAll(sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH), false); // durability lost message - WorldPacket data2(SMSG_DURABILITY_DAMAGE_DEATH, 0); - SendDirectMessage(&data2); + SendDurabilityLoss(); } UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DEATHS_FROM, 1, type); @@ -4770,6 +4769,11 @@ Corpse* Player::GetCorpse() const return GetMap()->GetCorpseByPlayer(GetGUID()); } +void Player::SendDurabilityLoss() +{ + SendDirectMessage(WorldPackets::Misc::DurabilityDamageDeath().Write()); +} + void Player::DurabilityLossAll(double percent, bool inventory) { for (uint8 i = EQUIPMENT_SLOT_START; i < EQUIPMENT_SLOT_END; i++) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 4e2f674e7ab..dce7c5a3737 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1696,6 +1696,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RemoveGhoul(); + void SendDurabilityLoss(); void DurabilityLossAll(double percent, bool inventory); void DurabilityLoss(Item* item, double percent); void DurabilityPointsLossAll(int32 points, bool inventory); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f31ea2f42f6..2c37c6e54e0 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10949,8 +10949,7 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id) TC_LOG_DEBUG("entities.unit", "We are dead, losing %f percent durability", sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH)); plrVictim->DurabilityLossAll(sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH), false); // durability lost message - WorldPacket data(SMSG_DURABILITY_DAMAGE_DEATH, 0); - plrVictim->SendDirectMessage(&data); + plrVictim->SendDurabilityLoss(); } // Call KilledUnit for creatures if (attacker && attacker->GetTypeId() == TYPEID_UNIT && attacker->IsAIEnabled()) diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 664afe521a0..717740b55be 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -87,6 +87,14 @@ namespace WorldPackets int32 GameTimeHolidayOffset = 0; }; + class DurabilityDamageDeath final : public ServerPacket + { + public: + DurabilityDamageDeath() : ServerPacket(SMSG_DURABILITY_DAMAGE_DEATH, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; + class TriggerCinematic final : public ServerPacket { public: diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 0638e3f44a8..fa0ddf42a79 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2453,6 +2453,7 @@ DurabilityLoss.InPvP = 0 # # DurabilityLoss.OnDeath # Description: Durability loss percentage on death. +# Note: On 3.3.5 client always shows log message "Your items have lost 10% durability" # Default: 10 DurabilityLoss.OnDeath = 10 |