From aaf85d0984e89475b7a4d76d43c74bd0186bb8a3 Mon Sep 17 00:00:00 2001 From: IntelligentQuantum Date: Sun, 9 Jan 2022 07:51:41 +0330 Subject: [PATCH] refactor(Core/Packet): Combat log (#9673) --- src/server/game/Entities/Player/Player.cpp | 15 ++++--- src/server/game/Server/Packets/AllPackets.h | 1 + .../game/Server/Packets/CombatLogPackets.cpp | 29 ++++++++++++ .../game/Server/Packets/CombatLogPackets.h | 44 +++++++++++++++++++ src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/Protocol/Opcodes.h | 2 +- 6 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 src/server/game/Server/Packets/CombatLogPackets.cpp create mode 100644 src/server/game/Server/Packets/CombatLogPackets.h diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 17a1498c6..94a91eb06 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -35,6 +35,7 @@ #include "Common.h" #include "ConditionMgr.h" #include "CreatureAI.h" +#include "CombatLogPackets.h" #include "DatabaseEnv.h" #include "DisableMgr.h" #include "Formulas.h" @@ -784,13 +785,13 @@ uint32 Player::EnvironmentalDamage(EnviromentalDamage type, uint32 damage) Unit::DealDamageMods(this, damage, &absorb); - WorldPacket data(SMSG_ENVIRONMENTALDAMAGELOG, (21)); - data << GetGUID(); - data << uint8(type != DAMAGE_FALL_TO_VOID ? type : DAMAGE_FALL); - data << uint32(damage); - data << uint32(absorb); - data << uint32(resist); - SendMessageToSet(&data, true); + WorldPackets::CombatLog::EnvironmentalDamageLog packet; + packet.Victim = GetGUID(); + packet.Type = type != DAMAGE_FALL_TO_VOID ? type : DAMAGE_FALL; + packet.Amount = damage; + packet.Absorbed = absorb; + packet.Resisted = resist; + SendMessageToSet(packet.Write(), true); uint32 final_damage = Unit::DealDamage(this, this, damage, nullptr, SELF_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h index d39869fa6..598fcb034 100644 --- a/src/server/game/Server/Packets/AllPackets.h +++ b/src/server/game/Server/Packets/AllPackets.h @@ -18,6 +18,7 @@ #ifndef AllPackets_h__ #define AllPackets_h__ +#include "CombatLogPackets.h" #include "ChatPackets.h" #include "CharacterPackets.h" #include "MiscPackets.h" diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp new file mode 100644 index 000000000..1b6d6535e --- /dev/null +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -0,0 +1,29 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "CombatLogPackets.h" + +WorldPacket const* WorldPackets::CombatLog::EnvironmentalDamageLog::Write() +{ + _worldPacket << Victim; + _worldPacket << uint8(Type); + _worldPacket << uint32(Amount); + _worldPacket << uint32(Resisted); + _worldPacket << uint32(Absorbed); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h new file mode 100644 index 000000000..30bb75907 --- /dev/null +++ b/src/server/game/Server/Packets/CombatLogPackets.h @@ -0,0 +1,44 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef CombatLogPackets_h__ +#define CombatLogPackets_h__ + +#include "Packet.h" +#include "Player.h" + +namespace WorldPackets +{ + namespace CombatLog + { + class EnvironmentalDamageLog final : public ServerPacket + { + public: + EnvironmentalDamageLog() : ServerPacket(SMSG_ENVIRONMENTAL_DAMAGE_LOG, 21) { } + + WorldPacket const* Write() override; + + ObjectGuid Victim; + EnviromentalDamage Type = DAMAGE_EXHAUSTED; + uint32 Amount = 0; + uint32 Resisted = 0; + uint32 Absorbed = 0; + }; + } +} + +#endif // CombatLogPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index da8188c41..a38394839 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -636,7 +636,7 @@ void OpcodeTable::Initialize() /*0x1F9*/ DEFINE_HANDLER(CMSG_GM_SET_SECURITY_GROUP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x1FA*/ DEFINE_HANDLER(CMSG_GM_NUKE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x1FB*/ DEFINE_HANDLER(MSG_RANDOM_ROLL, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleRandomRollOpcode ); - /*0x1FC*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENVIRONMENTALDAMAGELOG, STATUS_NEVER); + /*0x1FC*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENVIRONMENTAL_DAMAGE_LOG, STATUS_NEVER); /*0x1FD*/ DEFINE_HANDLER(CMSG_CHANGEPLAYER_DIFFICULTY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x1FE*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RWHOIS, STATUS_NEVER); /*0x1FF*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_PLAYER_REWARD, STATUS_NEVER); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index a31da2172..c3308431b 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -535,7 +535,7 @@ enum Opcodes : uint16 CMSG_GM_SET_SECURITY_GROUP = 0x1F9, CMSG_GM_NUKE = 0x1FA, MSG_RANDOM_ROLL = 0x1FB, - SMSG_ENVIRONMENTALDAMAGELOG = 0x1FC, + SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x1FC, CMSG_CHANGEPLAYER_DIFFICULTY = 0x1FD, SMSG_RWHOIS = 0x1FE, SMSG_LFG_PLAYER_REWARD = 0x1FF, // uint32, uint8, uint32, uint32, uint32, uint32, uint32, uint8, for (uint8) {uint32, uint32, uint32}