Skip to content

Commit 138accf

Browse files
committed
Core/PacketIO: Updated SMSG_TRANSFER_PENDING and SMSG_TRANSFER_ABORTED
(cherry picked from commit 3332127)
1 parent 7f32047 commit 138accf

5 files changed

Lines changed: 95 additions & 39 deletions

File tree

src/server/game/Entities/Player/Player.cpp

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,12 +1719,16 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
17191719
if (!GetSession()->PlayerLogout())
17201720
{
17211721
// send transfer packets
1722-
WorldPacket data(SMSG_TRANSFER_PENDING, 4 + 4 + 4);
1723-
data << uint32(mapid);
1722+
WorldPackets::Movement::TransferPending transferPending;
1723+
transferPending.MapID = mapid;
17241724
if (Transport* transport = GetTransport())
1725-
data << transport->GetEntry() << GetMapId();
1725+
{
1726+
WorldPackets::Movement::ShipTransferPending& shipTransferPending = transferPending.Ship.emplace();
1727+
shipTransferPending.ID = transport->GetEntry();
1728+
shipTransferPending.OriginMapID = GetMapId();
1729+
}
17261730

1727-
SendDirectMessage(&data);
1731+
SendDirectMessage(transferPending.Write());
17281732
}
17291733

17301734
// remove from old map now
@@ -22553,21 +22557,11 @@ void Player::SendUpdateToOutOfRangeGroupMembers()
2255322557

2255422558
void Player::SendTransferAborted(uint32 mapid, TransferAbortReason reason, uint8 arg) const
2255522559
{
22556-
WorldPacket data(SMSG_TRANSFER_ABORTED, 4+2);
22557-
data << uint32(mapid);
22558-
data << uint8(reason); // transfer abort reason
22559-
switch (reason)
22560-
{
22561-
case TRANSFER_ABORT_INSUF_EXPAN_LVL:
22562-
case TRANSFER_ABORT_DIFFICULTY:
22563-
case TRANSFER_ABORT_UNIQUE_MESSAGE:
22564-
// these are the ONLY cases that have an extra argument in the packet!!!
22565-
data << uint8(arg);
22566-
break;
22567-
default:
22568-
break;
22569-
}
22570-
SendDirectMessage(&data);
22560+
WorldPackets::Movement::TransferAborted transferAborted;
22561+
transferAborted.MapID = mapid;
22562+
transferAborted.Arg = arg;
22563+
transferAborted.TransfertAbort = reason;
22564+
SendDirectMessage(transferAborted.Write());
2257122565
}
2257222566

2257322567
void Player::SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time, bool welcome) const

src/server/game/Entities/Player/Player.h

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ enum InventoryType : uint8;
7979
enum ItemClass : uint8;
8080
enum LootError : uint8;
8181
enum LootType : uint8;
82+
enum TransferAbortReason : uint8;
8283

8384
namespace WorldPackets
8485
{
@@ -623,26 +624,6 @@ struct ItemPosCount
623624
};
624625
typedef std::vector<ItemPosCount> ItemPosCountVec;
625626

626-
enum TransferAbortReason
627-
{
628-
TRANSFER_ABORT_NONE = 0x00,
629-
TRANSFER_ABORT_ERROR = 0x01,
630-
TRANSFER_ABORT_MAX_PLAYERS = 0x02, // Transfer Aborted: instance is full
631-
TRANSFER_ABORT_NOT_FOUND = 0x03, // Transfer Aborted: instance not found
632-
TRANSFER_ABORT_TOO_MANY_INSTANCES = 0x04, // You have entered too many instances recently.
633-
TRANSFER_ABORT_ZONE_IN_COMBAT = 0x06, // Unable to zone in while an encounter is in progress.
634-
TRANSFER_ABORT_INSUF_EXPAN_LVL = 0x07, // You must have <TBC, WotLK> expansion installed to access this area.
635-
TRANSFER_ABORT_DIFFICULTY = 0x08, // <Normal, Heroic, Epic> difficulty mode is not available for %s.
636-
TRANSFER_ABORT_UNIQUE_MESSAGE = 0x09, // Until you've escaped TLK's grasp, you cannot leave this place!
637-
TRANSFER_ABORT_TOO_MANY_REALM_INSTANCES = 0x0A, // Additional instances cannot be launched, please try again later.
638-
TRANSFER_ABORT_NEED_GROUP = 0x0B, // 3.1
639-
TRANSFER_ABORT_NOT_FOUND1 = 0x0C, // 3.1
640-
TRANSFER_ABORT_NOT_FOUND2 = 0x0D, // 3.1
641-
TRANSFER_ABORT_NOT_FOUND3 = 0x0E, // 3.2
642-
TRANSFER_ABORT_REALM_ONLY = 0x0F, // All players on party must be from the same realm.
643-
TRANSFER_ABORT_MAP_NOT_ALLOWED = 0x10 // Map can't be entered at this time.
644-
};
645-
646627
enum InstanceResetWarningType
647628
{
648629
RAID_INSTANCE_WARNING_HOURS = 1, // WARNING! %s is scheduled to reset in %d hour(s).

src/server/game/Maps/Map.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,27 @@ namespace Trinity { struct ObjectUpdater; }
7070
namespace VMAP { enum class ModelIgnoreFlags : uint32; }
7171
namespace G3D { class Plane; }
7272

73+
enum TransferAbortReason : uint8
74+
{
75+
TRANSFER_ABORT_NONE = 0,
76+
TRANSFER_ABORT_ERROR = 1,
77+
TRANSFER_ABORT_MAX_PLAYERS = 2, // Transfer Aborted: instance is full
78+
TRANSFER_ABORT_NOT_FOUND = 3, // Transfer Aborted: instance not found
79+
TRANSFER_ABORT_TOO_MANY_INSTANCES = 4, // You have entered too many instances recently.
80+
TRANSFER_ABORT_LOGGING_OUT = 5,
81+
TRANSFER_ABORT_ZONE_IN_COMBAT = 6, // Unable to zone in while an encounter is in progress.
82+
TRANSFER_ABORT_INSUF_EXPAN_LVL = 7, // You must have <TBC, WotLK> expansion installed to access this area.
83+
TRANSFER_ABORT_DIFFICULTY = 8, // <Normal, Heroic, Epic> difficulty mode is not available for %s.
84+
TRANSFER_ABORT_UNIQUE_MESSAGE = 9, // Until you've escaped TLK's grasp, you cannot leave this place!
85+
TRANSFER_ABORT_TOO_MANY_REALM_INSTANCES = 10, // Additional instances cannot be launched, please try again later.
86+
TRANSFER_ABORT_NEED_GROUP = 11, // Transfer Aborted: you must be in a raid group to enter this instance
87+
TRANSFER_ABORT_NEED_SERVER = 12, // Transfer Aborted: instance not found
88+
TRANSFER_ABORT_TIMEOUT = 13, // Transfer Aborted: instance not found
89+
TRANSFER_ABORT_BUSY = 14, // Transfer Aborted: instance not found
90+
TRANSFER_ABORT_REALM_ONLY = 15, // All players on party must be from the same realm.
91+
TRANSFER_ABORT_MAP_NOT_ALLOWED = 16 // Map can't be entered at this time.
92+
};
93+
7394
struct ScriptAction
7495
{
7596
ObjectGuid sourceGUID;

src/server/game/Server/Packets/MovementPackets.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717

1818
#include "MovementPackets.h"
19+
#include "Map.h"
1920
#include "MoveSpline.h"
2021
#include "MoveSplineFlag.h"
2122
#include "MovementTypedefs.h"
@@ -343,6 +344,36 @@ WorldPacket const* MoveUpdateSpeed::Write()
343344
return &_worldPacket;
344345
}
345346

347+
WorldPacket const* TransferPending::Write()
348+
{
349+
_worldPacket << int32(MapID);
350+
if (Ship)
351+
{
352+
_worldPacket << uint32(Ship->ID);
353+
_worldPacket << int32(Ship->OriginMapID);
354+
}
355+
356+
return &_worldPacket;
357+
}
358+
359+
WorldPacket const* TransferAborted::Write()
360+
{
361+
_worldPacket << uint32(MapID);
362+
_worldPacket << uint8(TransfertAbort);
363+
switch (TransfertAbort)
364+
{
365+
case TRANSFER_ABORT_INSUF_EXPAN_LVL:
366+
case TRANSFER_ABORT_DIFFICULTY:
367+
case TRANSFER_ABORT_UNIQUE_MESSAGE:
368+
_worldPacket << uint8(Arg);
369+
break;
370+
default:
371+
break;
372+
}
373+
374+
return &_worldPacket;
375+
}
376+
346377
WorldPacket const* NewWorld::Write()
347378
{
348379
_worldPacket << MapID;

src/server/game/Server/Packets/MovementPackets.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,35 @@ namespace WorldPackets
158158
float Speed = 1.0f;
159159
};
160160

161+
struct ShipTransferPending
162+
{
163+
uint32 ID = 0; ///< gameobject_template.entry of the transport the player is teleporting on
164+
int32 OriginMapID = -1; ///< Map id the player is currently on (before teleport)
165+
};
166+
167+
class TransferPending final : public ServerPacket
168+
{
169+
public:
170+
explicit TransferPending() : ServerPacket(SMSG_TRANSFER_PENDING, 4 + 4 + 4) { }
171+
172+
WorldPacket const* Write() override;
173+
174+
int32 MapID = -1;
175+
Optional<ShipTransferPending> Ship;
176+
};
177+
178+
class TransferAborted final : public ServerPacket
179+
{
180+
public:
181+
explicit TransferAborted() : ServerPacket(SMSG_TRANSFER_ABORTED, 4 + 1 + 1) { }
182+
183+
WorldPacket const* Write() override;
184+
185+
uint32 MapID = 0;
186+
uint8 Arg = 0;
187+
uint8 TransfertAbort = 0;
188+
};
189+
161190
class NewWorld final : public ServerPacket
162191
{
163192
public:

0 commit comments

Comments
 (0)