diff options
| author | Shauren <shauren.trinity@gmail.com> | 2014-11-20 18:23:43 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2014-11-20 18:23:43 +0100 |
| commit | 3332127f33563b7d4689238f209a45856d4edc72 (patch) | |
| tree | 24c9d767d86d96af854cc4e8346cec59c3cf32ed /src | |
| parent | 5bf579175857c936d46fc0043938c00d057a9804 (diff) | |
Core/PacketIO: Updated SMSG_TRANSFER_PENDING and SMSG_TRANSFER_ABORTED
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 24 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 51 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MovementPackets.cpp | 28 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MovementPackets.h | 30 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 |
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); |
