about summary refs log tree commit diff
diff options
context:
space:
mode:
authorxalduin <xalduin@gmail.com>2010-06-02 11:26:42 -0400
committerxalduin <xalduin@gmail.com>2010-06-02 11:26:42 -0400
commitfee651735fd7a29cfbec6b13ea9efdecc0ccb688 (patch)
tree500fe6b78fb5a9391d7c9ea18dd1ef445fac0a30
parentf963189dc4bd94395dd1831b48cb900218a7347f (diff)
parentedcfbc2f28b59ae430c5c2d2d33fb78e747ce838 (diff)
downloadzcatch-fee651735fd7a29cfbec6b13ea9efdecc0ccb688.tar.gz
zcatch-fee651735fd7a29cfbec6b13ea9efdecc0ccb688.zip
Merge remote branch 'upstream/master' into experimental
-rw-r--r--configure.lua2
-rw-r--r--src/engine/server.h2
-rw-r--r--src/engine/server/server.cpp7
-rw-r--r--src/engine/server/server.h1
-rw-r--r--src/game/server/gamecontext.cpp13
5 files changed, 24 insertions, 1 deletions
diff --git a/configure.lua b/configure.lua
index 993ed51a..3b36d484 100644
--- a/configure.lua
+++ b/configure.lua
@@ -76,7 +76,7 @@ function NewConfig(on_configured_callback)
 		local options_table = {}
 		
 		if not options_func then
-			print("auto configuration", options_func)
+			print("auto configuration")
 			self:Config(filename)
 			options_func = loadfile(filename)
 		end
diff --git a/src/engine/server.h b/src/engine/server.h
index 52e6ec6a..fa5d2498 100644
--- a/src/engine/server.h
+++ b/src/engine/server.h
@@ -49,6 +49,8 @@ public:
 	virtual void *SnapNewItem(int Type, int Id, int Size) = 0;
 
 	virtual void SnapSetStaticsize(int ItemType, int Size) = 0;
+	
+	virtual bool IsAuthed(int ClientID) = 0;
 };
 
 class IGameServer : public IInterface
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index 05e56a74..b5a01a99 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -293,6 +293,13 @@ int CServer::Init()
 	return 0;
 }
 
+bool CServer::IsAuthed(int ClientID)
+{
+	if(m_aClients[ClientID].m_Authed)
+		return true;
+	return false;
+}
+
 int CServer::GetClientInfo(int ClientID, CClientInfo *pInfo)
 {
 	dbg_assert(ClientID >= 0 && ClientID < MAX_CLIENTS, "client_id is not valid");
diff --git a/src/engine/server/server.h b/src/engine/server/server.h
index 7d56bd33..895a4bd1 100644
--- a/src/engine/server/server.h
+++ b/src/engine/server/server.h
@@ -138,6 +138,7 @@ public:
 
 	int Init();
 
+	bool IsAuthed(int ClientID);
 	int GetClientInfo(int ClientID, CClientInfo *pInfo);
 	void GetClientIP(int ClientID, char *pIPString, int Size);
 	const char *ClientName(int ClientId);
diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp
index 795bb65f..c04dd945 100644
--- a/src/game/server/gamecontext.cpp
+++ b/src/game/server/gamecontext.cpp
@@ -647,6 +647,19 @@ void CGameContext::OnMessage(int MsgId, CUnpacker *pUnpacker, int ClientId)
 				SendChatTarget(ClientId, "Invalid client id to kick");
 				return;
 			}
+			if(KickId == ClientId)
+			{
+				SendChatTarget(ClientId, "You cant kick yourself");
+				return;
+			}
+			if(Server()->IsAuthed(KickId))
+			{
+				SendChatTarget(ClientId, "You cant kick admins");
+				char aBufKick[128];
+				str_format(aBufKick, sizeof(aBufKick), "%s called for vote to kick you", Server()->ClientName(ClientId));
+				SendChatTarget(KickId, aBufKick);
+				return;
+			}
 			
 			str_format(aChatmsg, sizeof(aChatmsg), "%s called for vote to kick '%s'", Server()->ClientName(ClientId), Server()->ClientName(KickId));
 			str_format(aDesc, sizeof(aDesc), "Kick '%s'", Server()->ClientName(KickId));