aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-11-20 18:23:43 +0100
committerShauren <shauren.trinity@gmail.com>2014-11-20 18:23:43 +0100
commit3332127f33563b7d4689238f209a45856d4edc72 (patch)
tree24c9d767d86d96af854cc4e8346cec59c3cf32ed /src
parent5bf579175857c936d46fc0043938c00d057a9804 (diff)
Core/PacketIO: Updated SMSG_TRANSFER_PENDING and SMSG_TRANSFER_ABORTED
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp24
-rw-r--r--src/server/game/Entities/Player/Player.h51
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp28
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h30
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
5 files changed, 104 insertions, 33 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 23729d6b65c..52daeeb23df 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2136,18 +2136,16 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
if (!GetSession()->PlayerLogout())
{
// send transfer packets
- WorldPacket data(SMSG_TRANSFER_PENDING, 4 + 4 + 4);
- data.WriteBit(0); // unknown
+ WorldPackets::Movement::TransferPending transferPending;
+ transferPending.MapID = mapid;
if (Transport* transport = GetTransport())
{
- data.WriteBit(1); // has transport
- data << GetMapId() << transport->GetEntry();
+ transferPending.Ship.HasValue = true;
+ transferPending.Ship.Value.ID = transport->GetEntry();
+ transferPending.Ship.Value.OriginMapID = GetMapId();
}
- else
- data.WriteBit(0); // has transport
- data << uint32(mapid);
- GetSession()->SendPacket(&data);
+ GetSession()->SendPacket(transferPending.Write());
}
// remove from old map now
@@ -23113,11 +23111,11 @@ void Player::SendUpdateToOutOfRangeGroupMembers()
void Player::SendTransferAborted(uint32 mapid, TransferAbortReason reason, uint8 arg)
{
- WorldPacket data(SMSG_TRANSFER_ABORTED, 4+2);
- data << uint32(mapid);
- data << uint8(reason); // transfer abort reason
- data << uint8(arg);
- GetSession()->SendPacket(&data);
+ WorldPackets::Movement::TransferAborted transferAborted;
+ transferAborted.MapID = mapid;
+ transferAborted.Arg = arg;
+ transferAborted.TransfertAbort = reason;
+ GetSession()->SendPacket(transferAborted.Write());
}
void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 165819a5eaf..76e8feedda5 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -787,24 +787,39 @@ enum TradeSlots
enum TransferAbortReason
{
- TRANSFER_ABORT_NONE = 0x00,
- TRANSFER_ABORT_ERROR = 0x01,
- TRANSFER_ABORT_MAX_PLAYERS = 0x02, // Transfer Aborted: instance is full
- TRANSFER_ABORT_NOT_FOUND = 0x03, // Transfer Aborted: instance not found
- TRANSFER_ABORT_TOO_MANY_INSTANCES = 0x04, // You have entered too many instances recently.
- TRANSFER_ABORT_ZONE_IN_COMBAT = 0x06, // Unable to zone in while an encounter is in progress.
- TRANSFER_ABORT_INSUF_EXPAN_LVL = 0x07, // You must have <TBC, WotLK> expansion installed to access this area.
- TRANSFER_ABORT_DIFFICULTY = 0x08, // <Normal, Heroic, Epic> difficulty mode is not available for %s.
- TRANSFER_ABORT_UNIQUE_MESSAGE = 0x09, // Until you've escaped TLK's grasp, you cannot leave this place!
- TRANSFER_ABORT_TOO_MANY_REALM_INSTANCES = 0x0A, // Additional instances cannot be launched, please try again later.
- TRANSFER_ABORT_NEED_GROUP = 0x0B, // 3.1
- TRANSFER_ABORT_NOT_FOUND1 = 0x0C, // 3.1
- TRANSFER_ABORT_NOT_FOUND2 = 0x0D, // 3.1
- TRANSFER_ABORT_NOT_FOUND3 = 0x0E, // 3.2
- TRANSFER_ABORT_REALM_ONLY = 0x0F, // All players on party must be from the same realm.
- TRANSFER_ABORT_MAP_NOT_ALLOWED = 0x10, // Map can't be entered at this time.
- TRANSFER_ABORT_LOCKED_TO_DIFFERENT_INSTANCE = 0x12, // 4.2.2
- TRANSFER_ABORT_ALREADY_COMPLETED_ENCOUNTER = 0x13 // 4.2.2
+ TRANSFER_ABORT_NONE = 0,
+ TRANSFER_ABORT_TOO_MANY_REALM_INSTANCES = 1, // Additional instances cannot be launched, please try again later.
+ TRANSFER_ABORT_DIFFICULTY = 3, // <Normal, Heroic, Epic> difficulty mode is not available for %s.
+ TRANSFER_ABORT_INSUF_EXPAN_LVL = 8, // You must have <TBC, WotLK> expansion installed to access this area.
+ TRANSFER_ABORT_NOT_FOUND = 10, // Transfer Aborted: instance not found
+ TRANSFER_ABORT_TOO_MANY_INSTANCES = 11, // You have entered too many instances recently.
+ TRANSFER_ABORT_MAX_PLAYERS = 12, // Transfer Aborted: instance is full
+ TRANSFER_ABORT_XREALM_ZONE_DOWN = 14, // Transfer Aborted: cross-realm zone is down
+ TRANSFER_ABORT_NOT_FOUND_2 = 15, // Transfer Aborted: instance not found
+ TRANSFER_ABORT_DIFFICULTY_NOT_FOUND = 16, // client writes to console "Unable to resolve requested difficultyID %u to actual difficulty for map %d"
+ TRANSFER_ABORT_NOT_FOUND_3 = 17, // Transfer Aborted: instance not found
+ TRANSFER_ABORT_NOT_FOUND_4 = 18, // Transfer Aborted: instance not found
+ TRANSFER_ABORT_ZONE_IN_COMBAT = 19, // Unable to zone in while an encounter is in progress.
+ TRANSFER_ABORT_ALREADY_COMPLETED_ENCOUNTER = 20, // You are ineligible to participate in at least one encounter in this instance because you are already locked to an instance in which it has been defeated.
+ TRANSFER_ABORT_LOCKED_TO_DIFFERENT_INSTANCE = 24, // You are already locked to %s
+ TRANSFER_ABORT_REALM_ONLY = 25, // All players in the party must be from the same realm to enter %s.
+ TRANSFER_ABORT_MAP_NOT_ALLOWED = 27, // Map cannot be entered at this time.
+ TRANSFER_ABORT_SOLO_PLAYER_SWITCH_DIFFICULTY = 28, // This instance is already in progress. You may only switch difficulties from inside the instance.
+ TRANSFER_ABORT_NEED_GROUP = 29, // Transfer Aborted: you must be in a raid group to enter this instance
+ TRANSFER_ABORT_UNIQUE_MESSAGE = 30, // Until you've escaped TLK's grasp, you cannot leave this place!
+ TRANSFER_ABORT_ERROR = 31,
+ /*
+ // Unknown values - not used by the client to display any error
+ TRANSFER_ABORT_MANY_REALM_INSTANCES
+ TRANSFER_ABORT_AREA_NOT_ZONED
+ TRANSFER_ABORT_TIMEOUT
+ TRANSFER_ABORT_SHUTTING_DOWN
+ TRANSFER_ABORT_PLAYER_CONDITION
+ TRANSFER_ABORT_BUSY
+ TRANSFER_ABORT_DISCONNECTED
+ TRANSFER_ABORT_LOGGING_OUT
+ TRANSFER_ABORT_NEED_SERVER
+ */
};
enum InstanceResetWarningType
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 7645b4ab40e..c3f7906e0fd 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -287,6 +287,34 @@ WorldPacket const* WorldPackets::Movement::ServerPlayerMovement::Write()
return &_worldPacket;
}
+WorldPacket const* WorldPackets::Movement::TransferPending::Write()
+{
+ _worldPacket << int32(MapID);
+ _worldPacket.WriteBit(Ship.HasValue);
+ _worldPacket.WriteBit(TransferSpellID.HasValue);
+ if (Ship.HasValue)
+ {
+ _worldPacket << uint32(Ship.Value.ID);
+ _worldPacket << int32(Ship.Value.OriginMapID);
+ }
+
+ if (TransferSpellID.HasValue)
+ _worldPacket << int32(TransferSpellID.Value);
+
+ _worldPacket.FlushBits();
+
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Movement::TransferAborted::Write()
+{
+ _worldPacket << uint32(MapID);
+ _worldPacket << uint8(Arg);
+ _worldPacket.WriteBits(TransfertAbort, 5);
+ _worldPacket.FlushBits();
+ return &_worldPacket;
+}
+
WorldPacket const* WorldPackets::Movement::NewWorld::Write()
{
_worldPacket << MapID;
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index ee8a4d12c01..2b92fe4fed9 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -126,6 +126,36 @@ namespace WorldPackets
float Speed;
};
+ class TransferPending final : public ServerPacket
+ {
+ struct ShipTransferPending
+ {
+ uint32 ID = 0; ///< gameobject_template.entry of the transport the player is teleporting on
+ int32 OriginMapID = -1; ///< Map id the player is currently on (before teleport)
+ };
+
+ public:
+ TransferPending() : ServerPacket(SMSG_TRANSFER_PENDING, 16) { }
+
+ WorldPacket const* Write() override;
+
+ int32 MapID = -1;
+ Optional<ShipTransferPending> Ship;
+ Optional<int32> TransferSpellID;
+ };
+
+ class TransferAborted final : public ServerPacket
+ {
+ public:
+ TransferAborted() : ServerPacket(SMSG_TRANSFER_ABORTED, 4 + 1 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ uint32 TransfertAbort = 0;
+ uint8 Arg = 0;
+ uint32 MapID = 0;
+ };
+
class NewWorld final : public ServerPacket
{
public:
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index de9b3d0746b..acc3b67f12c 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1371,8 +1371,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_BUY_FAILED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_BUY_SUCCEEDED, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_LIST, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_UNHANDLED);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_UNHANDLED);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_NEVER);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_NEVER);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_CINEMATIC, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_MOVIE, STATUS_UNHANDLED);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TURN_IN_PETITION_RESULTS, STATUS_UNHANDLED);