aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp31
-rw-r--r--src/server/game/Entities/Player/Player.h8
-rw-r--r--src/server/game/Server/Packets/CombatPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/CombatPackets.h19
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h10
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h6
7 files changed, 58 insertions, 31 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index bd084491dee..4e32d8ca4e4 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -33,6 +33,7 @@
#include "CharacterPackets.h"
#include "TalentPackets.h"
#include "Chat.h"
+#include "CombatPackets.h"
#include "Common.h"
#include "ConditionMgr.h"
#include "CreatureAI.h"
@@ -19937,12 +19938,6 @@ bool Player::CanSpeak() const
/*** LOW LEVEL FUNCTIONS:Notifiers ***/
/*********************************************************/
-void Player::SendAttackSwingNotInRange()
-{
- WorldPacket data(SMSG_ATTACKSWING_NOTINRANGE, 0);
- GetSession()->SendPacket(&data);
-}
-
void Player::SavePositionInDB(WorldLocation const& loc, uint16 zoneId, ObjectGuid guid, SQLTransaction& trans)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_POSITION);
@@ -19971,26 +19966,32 @@ void Player::SetUInt32ValueInArray(Tokenizer& Tokenizer, uint16 index, uint32 va
void Player::SendAttackSwingDeadTarget()
{
- WorldPacket data(SMSG_ATTACKSWING_DEADTARGET, 0);
- GetSession()->SendPacket(&data);
+ WorldPackets::Combat::AttackSwingError packet(ATTACKSWINGERR_DEADTARGET);
+ GetSession()->SendPacket(packet.Write());
}
void Player::SendAttackSwingCantAttack()
{
- WorldPacket data(SMSG_ATTACKSWING_CANT_ATTACK, 0);
- GetSession()->SendPacket(&data);
+ WorldPackets::Combat::AttackSwingError packet(ATTACKSWINGERR_CANT_ATTACK);
+ GetSession()->SendPacket(packet.Write());
}
-void Player::SendAttackSwingCancelAttack()
+void Player::SendAttackSwingNotInRange()
{
- WorldPacket data(SMSG_CANCEL_COMBAT, 0);
- GetSession()->SendPacket(&data);
+ WorldPackets::Combat::AttackSwingError packet(ATTACKSWINGERR_NOTINRANGE);
+ GetSession()->SendPacket(packet.Write());
}
void Player::SendAttackSwingBadFacingAttack()
{
- WorldPacket data(SMSG_ATTACKSWING_BADFACING, 0);
- GetSession()->SendPacket(&data);
+ WorldPackets::Combat::AttackSwingError packet(ATTACKSWINGERR_BADFACING);
+ GetSession()->SendPacket(packet.Write());
+}
+
+void Player::SendAttackSwingCancelAttack()
+{
+ WorldPackets::Combat::CancelCombat packet;
+ GetSession()->SendPacket(packet.Write());
}
void Player::SendAutoRepeatCancel(Unit* target)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index e895e696bb4..e72a22fefbb 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -670,6 +670,14 @@ struct SkillStatusData
typedef std::unordered_map<uint32, SkillStatusData> SkillStatusMap;
+enum AttackSwingErr
+{
+ ATTACKSWINGERR_CANT_ATTACK = 0,
+ ATTACKSWINGERR_NOTINRANGE = 1,
+ ATTACKSWINGERR_BADFACING = 2,
+ ATTACKSWINGERR_DEADTARGET = 3
+};
+
class Quest;
class Spell;
class Item;
diff --git a/src/server/game/Server/Packets/CombatPackets.cpp b/src/server/game/Server/Packets/CombatPackets.cpp
index a23cbc7515b..53a489ebc21 100644
--- a/src/server/game/Server/Packets/CombatPackets.cpp
+++ b/src/server/game/Server/Packets/CombatPackets.cpp
@@ -140,3 +140,10 @@ WorldPacket const* WorldPackets::Combat::AttackerStateUpdate::Write()
return &_worldPacket;
}
+
+WorldPacket const* WorldPackets::Combat::AttackSwingError::Write()
+{
+ _worldPacket.WriteBits(Reason, 2);
+ _worldPacket.FlushBits();
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/CombatPackets.h b/src/server/game/Server/Packets/CombatPackets.h
index 012859ffc65..54d97e5774c 100644
--- a/src/server/game/Server/Packets/CombatPackets.h
+++ b/src/server/game/Server/Packets/CombatPackets.h
@@ -36,6 +36,17 @@ namespace WorldPackets
ObjectGuid Victim;
};
+ class AttackSwingError final : public ServerPacket
+ {
+ public:
+ AttackSwingError() : ServerPacket(SMSG_ATTACKSWING_ERROR, 4) { }
+ AttackSwingError(AttackSwingErr reason) : ServerPacket(SMSG_ATTACKSWING_ERROR, 4), Reason(reason) { }
+
+ WorldPacket const* Write() override;
+
+ AttackSwingErr Reason = ATTACKSWINGERR_CANT_ATTACK;
+ };
+
class AttackStop final : public ClientPacket
{
public:
@@ -165,6 +176,14 @@ namespace WorldPackets
UnkAttackerState UnkState;
float Unk = 0.0f;
};
+
+ class CancelCombat final : public ServerPacket
+ {
+ public:
+ CancelCombat() : ServerPacket(SMSG_CANCEL_COMBAT, 0) { }
+
+ WorldPacket const* Write() override { return &_worldPacket; }
+ };
}
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index 710059f1d3c..4a0d0bfbd12 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -341,7 +341,7 @@ namespace WorldPackets
void Read() override { }
};
- class RequestCemeteryListResponse : public ServerPacket
+ class RequestCemeteryListResponse final : public ServerPacket
{
public:
RequestCemeteryListResponse() : ServerPacket(SMSG_REQUEST_CEMETERY_LIST_RESPONSE, 1) { }
@@ -363,7 +363,7 @@ namespace WorldPackets
uint32 Response = 0;
};
- class AreaTriggerNoCorpse : public ServerPacket
+ class AreaTriggerNoCorpse final : public ServerPacket
{
public:
AreaTriggerNoCorpse() : ServerPacket(SMSG_AREA_TRIGGER_NO_CORPSE, 0) { }
@@ -371,7 +371,7 @@ namespace WorldPackets
WorldPacket const* Write() override { return &_worldPacket; }
};
- class Weather : public ServerPacket
+ class Weather final : public ServerPacket
{
public:
Weather();
@@ -384,7 +384,7 @@ namespace WorldPackets
WeatherState WeatherID = WEATHER_STATE_FINE;
};
- class StandStateChange : public ClientPacket
+ class StandStateChange final : public ClientPacket
{
public:
StandStateChange(WorldPacket&& packet) : ClientPacket(CMSG_STAND_STATE_CHANGE, std::move(packet)) { }
@@ -394,7 +394,7 @@ namespace WorldPackets
UnitStandStateType StandState = UNIT_STAND_STATE_STAND;
};
- class StandStateUpdate : public ServerPacket
+ class StandStateUpdate final : public ServerPacket
{
public:
StandStateUpdate() : ServerPacket(SMSG_STAND_STATE_UPDATE, 1) { }
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index a7ed472d192..49649c2df0c 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -938,11 +938,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKERSTATEUPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSTART, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSTOP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSWING_BADFACING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSWING_CANT_ATTACK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSWING_DEADTARGET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSWING_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSWING_NOTINRANGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKSWING_ERROR, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_BIDDER_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_CLOSED_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_COMMAND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1056,7 +1052,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CALENDAR_UPDATE_INVITE_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAMERA_SHAKE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_AUTO_REPEAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_COMBAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_COMBAT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_ORPHAN_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SCENE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index c9571d34d2e..fa0ffde42cb 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -846,11 +846,7 @@ enum OpcodeServer : uint32
SMSG_ATTACKERSTATEUPDATE = 0x1204,
SMSG_ATTACKSTART = 0x1D3E,
SMSG_ATTACKSTOP = 0x1382,
- SMSG_ATTACKSWING_BADFACING = 0xBADD,
- SMSG_ATTACKSWING_CANT_ATTACK = 0xBADD,
- SMSG_ATTACKSWING_DEADTARGET = 0xBADD,
SMSG_ATTACKSWING_ERROR = 0x0509,
- SMSG_ATTACKSWING_NOTINRANGE = 0xBADD,
SMSG_AUCTION_BIDDER_NOTIFICATION = 0xBADD,
SMSG_AUCTION_CLOSED_NOTIFICATION = 0x058E,
SMSG_AUCTION_COMMAND_RESULT = 0x0B2D,
@@ -1712,7 +1708,7 @@ enum OpcodeServer : uint32
SMSG_SPELL_START = 0x0803,
SMSG_SPELL_UPDATE_CHAIN_TARGETS = 0x0374,
SMSG_SPIRIT_HEALER_CONFIRM = 0x1331,
- SMSG_STAND_STATE_UPDATE = 0x1311,
+ SMSG_STAND_STATE_UPDATE = 0x1311,
SMSG_START_ELAPSED_TIMER = 0x0D2A,
SMSG_START_ELAPSED_TIMERS = 0x093F,
SMSG_START_LOOT_ROLL = 0x1B84,