From 993680a39e5c63ef0b370c7f80fa932ede993870 Mon Sep 17 00:00:00 2001 From: "admin@omencraft.com" Date: Thu, 10 Nov 2011 18:28:21 +0000 Subject: [PATCH] Can now set gamemode via lua. git-svn-id: http://mc-server.googlecode.com/svn/trunk@89 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Bindings.cpp | 2 +- source/Bindings.h | 2 +- source/cClientHandle.cpp | 2 +- source/cPlayer.cpp | 16 +++++++++++++++- source/cPlayer.h | 1 + 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/source/Bindings.cpp b/source/Bindings.cpp index c4b6cb143..19cbf6651 100644 --- a/source/Bindings.cpp +++ b/source/Bindings.cpp @@ -1,6 +1,6 @@ /* ** Lua binding: AllToLua -** Generated automatically by tolua++-1.0.92 on 11/10/11 10:15:41. +** Generated automatically by tolua++-1.0.92 on 11/10/11 12:27:03. */ #ifndef __cplusplus diff --git a/source/Bindings.h b/source/Bindings.h index fecc08b40..a566558e9 100644 --- a/source/Bindings.h +++ b/source/Bindings.h @@ -1,6 +1,6 @@ /* ** Lua binding: AllToLua -** Generated automatically by tolua++-1.0.92 on 11/10/11 10:15:41. +** Generated automatically by tolua++-1.0.92 on 11/10/11 12:27:03. */ /* Exported function */ diff --git a/source/cClientHandle.cpp b/source/cClientHandle.cpp index 8409fce66..655048180 100644 --- a/source/cClientHandle.cpp +++ b/source/cClientHandle.cpp @@ -1160,7 +1160,7 @@ void cClientHandle::Tick(float a_Dt) cWorld* World = cRoot::Get()->GetWorld( m_Player->GetLoadedWorldName() ); // TODO - Get the correct world or better yet, move this to the main thread so we don't have to lock anything if( !World ) World = cRoot::Get()->GetDefaultWorld(); World->LockEntities(); - m_Player->SetGameMode ( World->GetGameMode() ); //set player's gamemode to server's gamemode at login. + m_Player->LoginSetGameMode ( World->GetGameMode() ); //set player's gamemode to server's gamemode at login. m_Player->SetIP ( m_pState->Socket.GetIPString() ); diff --git a/source/cPlayer.cpp b/source/cPlayer.cpp index 706886d88..8238f327c 100644 --- a/source/cPlayer.cpp +++ b/source/cPlayer.cpp @@ -28,6 +28,7 @@ #include "packets/cPacket_DestroyEntity.h" #include "packets/cPacket_Metadata.h" #include "packets/cPacket_Chat.h" +#include "packets/cPacket_NewInvalidState.h" #include "Vector3d.h" #include "Vector3f.h" @@ -423,7 +424,20 @@ void cPlayer::SetLastBlockActionCnt( int a_LastBlockActionCnt ) void cPlayer::SetGameMode( int a_GameMode ) { - m_GameMode = a_GameMode; + if ( (a_GameMode < 2) && (a_GameMode >= 0) ) { + if (m_GameMode != a_GameMode) { + m_GameMode = a_GameMode; + cPacket_NewInvalidState GameModePacket; + GameModePacket.m_Reason = 3; //GameModeChange + GameModePacket.m_GameMode = (char)a_GameMode; //GameModeChange + m_ClientHandle->Send ( GameModePacket ); + } + } +} + +void cPlayer::LoginSetGameMode( int a_GameMode ) +{ + m_GameMode = a_GameMode; } void cPlayer::SetIP( std::string a_IP ) diff --git a/source/cPlayer.h b/source/cPlayer.h index adefd7fdc..195120fcd 100644 --- a/source/cPlayer.h +++ b/source/cPlayer.h @@ -38,6 +38,7 @@ public: void SetLastBlockActionCnt( int ); //tolua_export void SetLastBlockActionTime(); //tolua_export void SetGameMode( int a_GameMode ); //tolua_export + void LoginSetGameMode( int a_GameMode ); void SetIP( std::string a_IP ); // Tries to move to a new position, with collision checks and stuff