From acd537d53369002ff3e5557865cbe66af01ea3a1 Mon Sep 17 00:00:00 2001 From: "admin@omencraft.com" Date: Wed, 26 Oct 2011 16:49:01 +0000 Subject: Added CreateInventoryAction packet for creative mode. Used cPacketEntityEquipment as template. Forced server into Creative Mode. Can't break blocks yet. Player can stil be damaged in creative mode and dying takes you back to survival mode. git-svn-id: http://mc-server.googlecode.com/svn/trunk@15 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/packets/cPacket_CreateInventoryAction.cpp | 42 ++++++++++++++++++++++++ source/packets/cPacket_CreateInventoryAction.h | 27 +++++++++++++++ source/packets/cPacket_Login.h | 2 +- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 source/packets/cPacket_CreateInventoryAction.cpp create mode 100644 source/packets/cPacket_CreateInventoryAction.h (limited to 'source/packets') diff --git a/source/packets/cPacket_CreateInventoryAction.cpp b/source/packets/cPacket_CreateInventoryAction.cpp new file mode 100644 index 000000000..19996769f --- /dev/null +++ b/source/packets/cPacket_CreateInventoryAction.cpp @@ -0,0 +1,42 @@ +#include "cPacket_CreateInventoryAction.h" + +cPacket_CreateInventoryAction::cPacket_CreateInventoryAction( const cPacket_CreateInventoryAction & a_Copy ) +{ + m_PacketID = E_CREATE_INVENTORY_ACTION; + m_Slot = a_Copy.m_Slot; + m_ItemID = a_Copy.m_ItemID; + m_Quantity = 0; + m_Short = 0; +} + +bool cPacket_CreateInventoryAction::Parse(cSocket & a_Socket) +{ + m_Socket = a_Socket; + if( !ReadShort ( m_Slot ) ) return false; + if( !ReadShort ( m_ItemID ) ) return false; + if( !ReadShort ( m_Quantity ) ) return false; + if( !ReadShort ( m_Short ) ) return false; + return true; +} + +bool cPacket_CreateInventoryAction::Send(cSocket & a_Socket) +{ + //LOG("InventoryChange:"); + unsigned int TotalSize = c_Size; + char* Message = new char[TotalSize]; + + if( m_ItemID <= 0 ) m_ItemID = -1; // Fix, to make sure no invalid values are sent. + // WARNING: HERE ITS -1, BUT IN NAMED ENTITY SPAWN PACKET ITS 0 !! + //LOG("cPacket_CreateInventoryAction: Sending Creative item ID: %i", m_ItemID ); + + unsigned int i = 0; + AppendByte ( (char)m_PacketID, Message, i ); + AppendShort ( m_Slot, Message, i ); + AppendShort ( m_ItemID, Message, i ); + AppendShort ( m_Quantity, Message, i ); + AppendShort ( m_Short, Message, i ); + + bool RetVal = !cSocket::IsSocketError( SendData( a_Socket, Message, TotalSize, 0 ) ); + delete [] Message; + return RetVal; +} diff --git a/source/packets/cPacket_CreateInventoryAction.h b/source/packets/cPacket_CreateInventoryAction.h new file mode 100644 index 000000000..e4ed2d9f8 --- /dev/null +++ b/source/packets/cPacket_CreateInventoryAction.h @@ -0,0 +1,27 @@ +#pragma once + +#include "cPacket.h" +#include "PacketID.h" + +class cPacket_CreateInventoryAction : public cPacket +{ +public: + cPacket_CreateInventoryAction() + : m_Slot( 0 ) + , m_ItemID( 0 ) + , m_Quantity( 0 ) + , m_Short( 0 ) + { m_PacketID = E_CREATE_INVENTORY_ACTION; m_Short = 0; m_Quantity = 1; } + cPacket_CreateInventoryAction( const cPacket_CreateInventoryAction & a_Copy ); + virtual cPacket* Clone() const { return new cPacket_CreateInventoryAction(*this); } + + bool Parse(cSocket & a_Socket); + bool Send(cSocket & a_Socket); + + short m_Slot; // 0 = hold 1-4 = armor + short m_ItemID; + short m_Quantity; + short m_Short; + + static const unsigned int c_Size = 1 + 4 + 2 + 2 + 2; +}; diff --git a/source/packets/cPacket_Login.h b/source/packets/cPacket_Login.h index 91919a799..812893d54 100644 --- a/source/packets/cPacket_Login.h +++ b/source/packets/cPacket_Login.h @@ -10,7 +10,7 @@ public: cPacket_Login() : m_ProtocolVersion( 0 ) , m_MapSeed( 0 ) - , m_ServerMode( 0 ) + , m_ServerMode( 1 ) //0 for survival, 1 for creative , m_Dimension( 0 ) , m_Difficulty( 0 ) , m_WorldHeight( 0 ) -- cgit v1.2.3