From 37590c4bd8f293ca11dd5ad351f241b7636b67cb Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Fri, 5 Jul 2013 21:11:06 +0000 Subject: Unmounting vehicles implemented in the 1.6.1 way git-svn-id: http://mc-server.googlecode.com/svn/trunk@1650 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/ClientHandle.cpp | 13 +++++++++++++ source/ClientHandle.h | 1 + source/Protocol/Protocol16x.cpp | 32 ++++++++++++++++++++++++++++++++ source/Protocol/Protocol16x.h | 6 ++++++ 4 files changed, 52 insertions(+) diff --git a/source/ClientHandle.cpp b/source/ClientHandle.cpp index 138209a73..4d4f40745 100644 --- a/source/ClientHandle.cpp +++ b/source/ClientHandle.cpp @@ -1200,6 +1200,19 @@ void cClientHandle::HandleEntityAction(int a_EntityID, char a_ActionID) +void cClientHandle::HandleUnmount(void) +{ + if (m_Player == NULL) + { + return; + } + m_Player->Detach(); +} + + + + + void cClientHandle::SendData(const char * a_Data, int a_Size) { { diff --git a/source/ClientHandle.h b/source/ClientHandle.h index c02924ebf..053174a56 100644 --- a/source/ClientHandle.h +++ b/source/ClientHandle.h @@ -178,6 +178,7 @@ public: void HandleKeepAlive (int a_KeepAliveID); bool HandleHandshake (const AString & a_Username); void HandleEntityAction (int a_EntityID, char a_ActionID); + void HandleUnmount (void); /** Called when the protocol has finished logging the user in. Return true to allow the user in; false to kick them. diff --git a/source/Protocol/Protocol16x.cpp b/source/Protocol/Protocol16x.cpp index 8c93d6052..d7237b47a 100644 --- a/source/Protocol/Protocol16x.cpp +++ b/source/Protocol/Protocol16x.cpp @@ -37,6 +37,7 @@ enum { PACKET_CHAT = 0x03, PACKET_UPDATE_HEALTH = 0x08, + PACKET_STEER_VEHICLE = 0x1b, PACKET_ATTACH_ENTITY = 0x27, PACKET_ENTITY_PROPERTIES = 0x2c, PACKET_WINDOW_OPEN = 0x64, @@ -161,3 +162,34 @@ int cProtocol161::ParsePlayerAbilities(void) + +int cProtocol161::ParseSteerVehicle(void) +{ + HANDLE_PACKET_READ(ReadBEFloat, float, Sideways); + HANDLE_PACKET_READ(ReadBEFloat, float, Forward); + HANDLE_PACKET_READ(ReadBool, bool, Jump); + HANDLE_PACKET_READ(ReadBool, bool, Unmount); + // TODO: m_Client->HandleSteerVehicle(...); + if (Unmount) + { + m_Client->HandleUnmount(); + } + return PARSE_OK; +} + + + + + +int cProtocol161::ParsePacket(unsigned char a_PacketType) +{ + switch (a_PacketType) + { + case PACKET_STEER_VEHICLE: return ParseSteerVehicle(); + default: return super::ParsePacket(a_PacketType); + } +} + + + + diff --git a/source/Protocol/Protocol16x.h b/source/Protocol/Protocol16x.h index 5bc924c6d..b3d051a14 100644 --- a/source/Protocol/Protocol16x.h +++ b/source/Protocol/Protocol16x.h @@ -37,6 +37,12 @@ public: virtual int ParseEntityAction (void) override; virtual int ParsePlayerAbilities(void) override; + + // New packets: + virtual int ParseSteerVehicle(void); + + // Enable new packets' handling + virtual int ParsePacket(unsigned char a_PacketType) override; } ; -- cgit v1.2.3