aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorForesterDev <11771800+ForesterDev@users.noreply.github.com>2020-04-14 16:00:53 +0400
committerGitHub <noreply@github.com>2020-04-14 14:00:53 +0200
commite1a8ebc064a2e30b4f1d0d129f034ff64368bedc (patch)
tree7ca73eb8f90b901403389d2d58372dd3e802a8e9
parent37ff15489b844d5ded34fc08b22704157a31e093 (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.cpp14
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp3
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h8
-rw-r--r--src/server/worldserver/worldserver.conf.dist1
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