about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/engine/server.h2
-rw-r--r--src/engine/server/server.cpp2
-rw-r--r--src/game/server/gamecontext.cpp4
-rw-r--r--src/game/server/gamecontext.h2
-rw-r--r--src/game/server/player.cpp7
-rw-r--r--src/game/server/player.h2
6 files changed, 11 insertions, 8 deletions
diff --git a/src/engine/server.h b/src/engine/server.h
index c8e55110..c27365ca 100644
--- a/src/engine/server.h
+++ b/src/engine/server.h
@@ -77,7 +77,7 @@ public:
 
 	virtual void OnClientConnected(int ClientID) = 0;
 	virtual void OnClientEnter(int ClientID) = 0;
-	virtual void OnClientDrop(int ClientID) = 0;
+	virtual void OnClientDrop(int ClientID, const char *pReason) = 0;
 	virtual void OnClientDirectInput(int ClientID, void *pInput) = 0;
 	virtual void OnClientPredictedInput(int ClientID, void *pInput) = 0;
 
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index f170b1c8..cf0c879b 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -597,7 +597,7 @@ int CServer::DelClientCallback(int ClientID, const char *pReason, void *pUser)
 
 	// notify the mod about the drop
 	if(pThis->m_aClients[ClientID].m_State >= CClient::STATE_READY)
-		pThis->GameServer()->OnClientDrop(ClientID);
+		pThis->GameServer()->OnClientDrop(ClientID, pReason);
 	
 	pThis->m_aClients[ClientID].m_State = CClient::STATE_EMPTY;
 	pThis->m_aClients[ClientID].m_aName[0] = 0;
diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp
index 56b733f3..704dd5a4 100644
--- a/src/game/server/gamecontext.cpp
+++ b/src/game/server/gamecontext.cpp
@@ -546,10 +546,10 @@ void CGameContext::OnClientConnected(int ClientID)
 	Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, ClientID);
 }
 
-void CGameContext::OnClientDrop(int ClientID)
+void CGameContext::OnClientDrop(int ClientID, const char *pReason)
 {
 	AbortVoteKickOnDisconnect(ClientID);
-	m_apPlayers[ClientID]->OnDisconnect();
+	m_apPlayers[ClientID]->OnDisconnect(pReason);
 	delete m_apPlayers[ClientID];
 	m_apPlayers[ClientID] = 0;
 	
diff --git a/src/game/server/gamecontext.h b/src/game/server/gamecontext.h
index 38100a06..4d2d0418 100644
--- a/src/game/server/gamecontext.h
+++ b/src/game/server/gamecontext.h
@@ -156,7 +156,7 @@ public:
 
 	virtual void OnClientConnected(int ClientID);
 	virtual void OnClientEnter(int ClientID);
-	virtual void OnClientDrop(int ClientID);
+	virtual void OnClientDrop(int ClientID, const char *pReason);
 	virtual void OnClientDirectInput(int ClientID, void *pInput);
 	virtual void OnClientPredictedInput(int ClientID, void *pInput);
 
diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp
index 6387cc9c..cf0e6683 100644
--- a/src/game/server/player.cpp
+++ b/src/game/server/player.cpp
@@ -140,14 +140,17 @@ void CPlayer::Snap(int SnappingClient)
 	}
 }
 
-void CPlayer::OnDisconnect()
+void CPlayer::OnDisconnect(const char *pReason)
 {
 	KillCharacter();
 
 	if(Server()->ClientIngame(m_ClientID))
 	{
 		char aBuf[512];
-		str_format(aBuf, sizeof(aBuf),  "'%s' has left the game", Server()->ClientName(m_ClientID));
+		if(pReason && *pReason)
+			str_format(aBuf, sizeof(aBuf),  "'%s' has left the game (%s)", Server()->ClientName(m_ClientID), pReason);
+		else
+			str_format(aBuf, sizeof(aBuf),  "'%s' has left the game", Server()->ClientName(m_ClientID));
 		GameServer()->SendChat(-1, CGameContext::CHAT_ALL, aBuf);
 
 		str_format(aBuf, sizeof(aBuf), "leave player='%d:%s'", m_ClientID, Server()->ClientName(m_ClientID));
diff --git a/src/game/server/player.h b/src/game/server/player.h
index d91bc346..50f1c1a0 100644
--- a/src/game/server/player.h
+++ b/src/game/server/player.h
@@ -30,7 +30,7 @@ public:
 
 	void OnDirectInput(CNetObj_PlayerInput *NewInput);
 	void OnPredictedInput(CNetObj_PlayerInput *NewInput);
-	void OnDisconnect();
+	void OnDisconnect(const char *pReason);
 	
 	void KillCharacter(int Weapon = WEAPON_GAME);
 	CCharacter *GetCharacter();