about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSushiTee <weichel.sascha@gmail.com>2010-06-03 15:21:12 +0200
committerSushiTee <weichel.sascha@gmail.com>2010-06-03 15:21:12 +0200
commit0115161463266a77bbe98d41f271f8ec49da43aa (patch)
tree91fe8eb865502398fa149c3974d807d954513ba0
parentc37335b115f69f8ab54403742640faff384d2747 (diff)
parent5988b9d38801f0987f38c99fb944e1a861d07ef3 (diff)
downloadzcatch-0115161463266a77bbe98d41f271f8ec49da43aa.tar.gz
zcatch-0115161463266a77bbe98d41f271f8ec49da43aa.zip
mergend stuff
-rw-r--r--data/languages/czech.txt22
-rw-r--r--data/languages/dutch.txt22
-rw-r--r--data/languages/french.txt22
-rw-r--r--data/languages/german.txt22
-rw-r--r--data/languages/italian.txt22
-rw-r--r--data/languages/portuguese.txt21
-rw-r--r--data/languages/swedish.txt22
-rw-r--r--src/engine/server/server.cpp23
-rw-r--r--src/engine/server/server.h1
-rw-r--r--src/engine/shared/config_variables.h1
-rw-r--r--src/engine/shared/network.h6
-rw-r--r--src/engine/shared/network_server.cpp37
-rw-r--r--src/game/client/components/hud.cpp12
-rw-r--r--src/game/client/components/menus.cpp2
-rw-r--r--src/game/editor/ed_editor.cpp8
-rw-r--r--src/tools/fake_server.cpp2
16 files changed, 216 insertions, 29 deletions
diff --git a/data/languages/czech.txt b/data/languages/czech.txt
index 652c4089..d13c140a 100644
--- a/data/languages/czech.txt
+++ b/data/languages/czech.txt
@@ -274,8 +274,8 @@ Prev. weapon
 Quality Textures
 == Kvalitní textury
 
-Quick search
-== Rychlé hledání
+Quick search:
+== Rychlé hledání:
 
 Quit
 == Ukončit
@@ -438,5 +438,23 @@ Your skin
 Show chat
 == Show chat
 
+Password incorrect
+== Password incorrect
+
+Please balance teams!
+== Please balance teams!
+
+Connection Problems...
+== Connection Problems...
+
+Warmup
+== Warmup
+
+Sudden Death
+== Sudden Death
+
+%ds left
+== %ds left
+
 ##### old translations ####
 
diff --git a/data/languages/dutch.txt b/data/languages/dutch.txt
index 1ec28c8d..f0fd647e 100644
--- a/data/languages/dutch.txt
+++ b/data/languages/dutch.txt
@@ -273,8 +273,8 @@ Prev. weapon
 Quality Textures
 == Kwalteit Textures
 
-Quick search
-== Snel Zoken
+Quick search:
+== Snel Zoken:
 
 Quit
 == Stoppen
@@ -437,4 +437,22 @@ Show chat
 Your skin
 == Your skin
 
+Password incorrect
+== Password incorrect
+
+Please balance teams!
+== Please balance teams!
+
+Connection Problems...
+== Connection Problems...
+
+Warmup
+== Warmup
+
+Sudden Death
+== Sudden Death
+
+%ds left
+== %ds left
+
 ##### old translations ####
diff --git a/data/languages/french.txt b/data/languages/french.txt
index 9d7bcd40..9f0fdee3 100644
--- a/data/languages/french.txt
+++ b/data/languages/french.txt
@@ -274,8 +274,8 @@ Prev. weapon
 Quality Textures
 == Textures haute qualité
 
-Quick search
-== Recherche rapide
+Quick search:
+== Recherche rapide:
 
 Quit
 == Quitter
@@ -438,5 +438,23 @@ Your skin
 
 ##### needs translation ####
 
+Password incorrect
+== Password incorrect
+
+Please balance teams!
+== Please balance teams!
+
+Connection Problems...
+== Connection Problems...
+
+Warmup
+== Warmup
+
+Sudden Death
+== Sudden Death
+
+%ds left
+== %ds left
+
 ##### old translations ####
 
diff --git a/data/languages/german.txt b/data/languages/german.txt
index 967c3f5b..684ce4ee 100644
--- a/data/languages/german.txt
+++ b/data/languages/german.txt
@@ -274,8 +274,8 @@ Prev. weapon
 Quality Textures
 == Hochaufgelöste Texturen
 
-Quick search
-== Schnelle Suche
+Quick search:
+== Schnellsuche:
 
 Quit
 == Beenden
@@ -436,6 +436,24 @@ You must restart the game for all settings to take effect.
 Your skin
 == Dein Skin
 
+Password incorrect
+== Passwort falsch
+
+Please balance teams!
+== Bitte Teams ausgleichen!
+
+Connection Problems...
+== Verbindungsprobleme...
+
+Warmup
+== Aufwärmen
+
+Sudden Death
+== Sudden Death
+
+%ds left
+== Noch %ds
+
 ##### needs translation ####
 
 
diff --git a/data/languages/italian.txt b/data/languages/italian.txt
index 4befc772..806da7c1 100644
--- a/data/languages/italian.txt
+++ b/data/languages/italian.txt
@@ -271,8 +271,8 @@ Prev. weapon
 Quality Textures
 == Textures di qualità
 
-Quick search
-== Ricerca rapida
+Quick search:
+== Ricerca rapida:
 
 Quit
 == Esci
@@ -438,5 +438,23 @@ Show chat
 Your skin
 == Your skin
 
+Password incorrect
+== Password incorrect
+
+Please balance teams!
+== Please balance teams!
+
+Connection Problems...
+== Connection Problems...
+
+Warmup
+== Warmup
+
+Sudden Death
+== Sudden Death
+
+%ds left
+== %ds left
+
 ##### old translations ####
 
diff --git a/data/languages/portuguese.txt b/data/languages/portuguese.txt
index 64bf7e6c..13f7cc1d 100644
--- a/data/languages/portuguese.txt
+++ b/data/languages/portuguese.txt
@@ -274,8 +274,8 @@ Prev. weapon
 Quality Textures
 == Texturas de Qualidade
 
-Quick search
-== Pesquisa Rápida
+Quick search:
+== Pesquisa Rápida:
 
 Quit
 == Sair
@@ -438,6 +438,23 @@ Your skin
 
 ##### needs translation ####
 
+Password incorrect
+== Password incorrect
+
+Please balance teams!
+== Please balance teams!
+
+Connection Problems...
+== Connection Problems...
+
+Warmup
+== Warmup
+
+Sudden Death
+== Sudden Death
+
+%ds left
+== %ds left
 
 ##### old translations ####
 
diff --git a/data/languages/swedish.txt b/data/languages/swedish.txt
index 627f3fa0..c5eee40a 100644
--- a/data/languages/swedish.txt
+++ b/data/languages/swedish.txt
@@ -271,8 +271,8 @@ Prev. weapon
 Quality Textures
 == Kvalitetstexturer
 
-Quick search
-== Snabbsök
+Quick search:
+== Snabbsök:
 
 Quit
 == Avsluta
@@ -438,5 +438,23 @@ Show chat
 Your skin
 == Your skin
 
+Password incorrect
+== Password incorrect
+
+Please balance teams!
+== Please balance teams!
+
+Connection Problems...
+== Connection Problems...
+
+Warmup
+== Warmup
+
+Sudden Death
+== Sudden Death
+
+%ds left
+== %ds left
+
 ##### old translations ####
 
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index 7380235d..6dd5a959 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -1016,7 +1016,7 @@ int CServer::Run()
 	}
 	
 	
-	if(!m_NetServer.Open(BindAddr, g_Config.m_SvMaxClients, 0))
+	if(!m_NetServer.Open(BindAddr, g_Config.m_SvMaxClients, g_Config.m_SvMaxClientsPerIP, 0))
 	{
 		dbg_msg("server", "couldn't open socket. port might already be in use");
 		return -1;
@@ -1248,12 +1248,16 @@ void CServer::ConStatus(IConsole::IResult *pResult, void *pUser)
 
 	for(i = 0; i < MAX_CLIENTS; i++)
 	{
-		if(pServer->m_aClients[i].m_State == CClient::STATE_INGAME)
+		if(pServer->m_aClients[i].m_State != CClient::STATE_EMPTY)
 		{
 			Addr = pServer->m_NetServer.ClientAddr(i);
-			str_format(aBuf, sizeof(aBuf), "id=%d addr=%d.%d.%d.%d:%d name='%s' score=%d",
-				i, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3], Addr.port,
-				pServer->m_aClients[i].m_aName, pServer->m_aClients[i].m_Score);
+			if(pServer->m_aClients[i].m_State == CClient::STATE_INGAME)
+				str_format(aBuf, sizeof(aBuf), "id=%d addr=%d.%d.%d.%d:%d name='%s' score=%d",
+					i, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3], Addr.port,
+					pServer->m_aClients[i].m_aName, pServer->m_aClients[i].m_Score);
+			else
+				str_format(aBuf, sizeof(aBuf), "id=%d addr=%d.%d.%d.%d:%d connecting",
+					i, Addr.ip[0], Addr.ip[1], Addr.ip[2], Addr.ip[3], Addr.port);
 			pServer->Console()->Print(aBuf);
 			dbg_msg("server", "%s", aBuf);
 		}
@@ -1289,6 +1293,13 @@ void CServer::ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserD
 		((CServer *)pUserData)->UpdateServerInfo();
 }
 
+void CServer::ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
+{
+	pfnCallback(pResult, pCallbackUserData);
+	if(pResult->NumArguments())
+		((CServer *)pUserData)->m_NetServer.SetMaxClientsPerIP(pResult->GetInteger(0));
+}
+
 void CServer::RegisterCommands()
 {
 	m_pConsole = Kernel()->RequestInterface<IConsole>();
@@ -1307,6 +1318,8 @@ void CServer::RegisterCommands()
 
 	Console()->Chain("sv_name", ConchainSpecialInfoupdate, this);
 	Console()->Chain("password", ConchainSpecialInfoupdate, this);
+
+	Console()->Chain("sv_max_clients_per_ip", ConchainMaxclientsperipUpdate, this);
 }	
 
 
diff --git a/src/engine/server/server.h b/src/engine/server/server.h
index 895a4bd1..70c8899c 100644
--- a/src/engine/server/server.h
+++ b/src/engine/server/server.h
@@ -185,6 +185,7 @@ public:
 	static void ConStopRecord(IConsole::IResult *pResult, void *pUser);
 	static void ConMapReload(IConsole::IResult *pResult, void *pUser);
 	static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
+	static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
 
 	void RegisterCommands();
 	
diff --git a/src/engine/shared/config_variables.h b/src/engine/shared/config_variables.h
index cc36b932..e11eab6d 100644
--- a/src/engine/shared/config_variables.h
+++ b/src/engine/shared/config_variables.h
@@ -64,6 +64,7 @@ MACRO_CONFIG_INT(SvPort, sv_port, 8303, 0, 0, CFGFLAG_SERVER, "Port to use for t
 MACRO_CONFIG_INT(SvExternalPort, sv_external_port, 0, 0, 0, CFGFLAG_SERVER, "External port to report to the master servers")
 MACRO_CONFIG_STR(SvMap, sv_map, 128, "dm1", CFGFLAG_SERVER, "Map to use on the server")
 MACRO_CONFIG_INT(SvMaxClients, sv_max_clients, 8, 1, MAX_CLIENTS, CFGFLAG_SERVER, "Maximum number of clients that are allowed on a server")
+MACRO_CONFIG_INT(SvMaxClientsPerIP, sv_max_clients_per_ip, 8, 1, MAX_CLIENTS, CFGFLAG_SERVER, "Maximum number of clients with the same IP that can connect to the server")
 MACRO_CONFIG_INT(SvHighBandwidth, sv_high_bandwidth, 0, 0, 1, CFGFLAG_SERVER, "Use high bandwidth mode. Doubles the bandwidth required for the server. LAN use only")
 MACRO_CONFIG_INT(SvRegister, sv_register, 1, 0, 1, CFGFLAG_SERVER, "Register server with master server for public listing")
 MACRO_CONFIG_STR(SvRconPassword, sv_rcon_password, 32, "", CFGFLAG_SERVER, "Remote console password")
diff --git a/src/engine/shared/network.h b/src/engine/shared/network.h
index 11a1b70d..7de534a4 100644
--- a/src/engine/shared/network.h
+++ b/src/engine/shared/network.h
@@ -244,6 +244,7 @@ private:
 	NETSOCKET m_Socket;
 	CSlot m_aSlots[NET_MAX_CLIENTS];
 	int m_MaxClients;
+	int m_MaxClientsPerIP;
 
 	CBan *m_aBans[256];
 	CBan m_BanPool[NET_SERVER_MAXBANS];
@@ -262,7 +263,7 @@ public:
 	int SetCallbacks(NETFUNC_NEWCLIENT pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser);
 
 	//
-	bool Open(NETADDR BindAddr, int MaxClients, int Flags);
+	bool Open(NETADDR BindAddr, int MaxClients, int MaxClientsPerIP, int Flags);
 	int Close();
 	
 	//
@@ -283,6 +284,9 @@ public:
 	NETADDR ClientAddr(int ClientID) const { return m_aSlots[ClientID].m_Connection.PeerAddress(); }
 	NETSOCKET Socket() const { return m_Socket; }
 	int MaxClients() const { return m_MaxClients; }
+
+	//
+	void SetMaxClientsPerIP(int Max);
 };
 
 
diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp
index 32b08bf6..2d30a7d1 100644
--- a/src/engine/shared/network_server.cpp
+++ b/src/engine/shared/network_server.cpp
@@ -24,7 +24,7 @@
 #define MACRO_LIST_FIND(Start, Next, Expression) \
 	{ while(Start && !(Expression)) Start = Start->Next; }
 
-bool CNetServer::Open(NETADDR BindAddr, int MaxClients, int Flags)
+bool CNetServer::Open(NETADDR BindAddr, int MaxClients, int MaxClientsPerIP, int Flags)
 {
 	// zero out the whole structure
 	mem_zero(this, sizeof(*this));
@@ -40,6 +40,8 @@ bool CNetServer::Open(NETADDR BindAddr, int MaxClients, int Flags)
 		m_MaxClients = NET_MAX_CLIENTS;
 	if(m_MaxClients < 1)
 		m_MaxClients = 1;
+
+	m_MaxClientsPerIP = MaxClientsPerIP;
 	
 	for(int i = 0; i < NET_MAX_CLIENTS; i++)
 		m_aSlots[i].m_Connection.Init(m_Socket);
@@ -335,6 +337,29 @@ int CNetServer::Recv(CNetChunk *pChunk)
 					// client that wants to connect
 					if(!Found)
 					{
+						// only allow a specific number of players with the same ip
+						NETADDR ThisAddr = Addr, OtherAddr;
+						int FoundAddr = 1;
+						ThisAddr.port = 0;
+						for(int i = 0; i < MaxClients(); ++i)
+						{
+							if(m_aSlots[i].m_Connection.State() == NET_CONNSTATE_OFFLINE)
+								continue;
+
+							OtherAddr = m_aSlots[i].m_Connection.PeerAddress();
+							OtherAddr.port = 0;
+							if(!net_addr_comp(&ThisAddr, &OtherAddr))
+							{
+								if(FoundAddr++ >= m_MaxClientsPerIP)
+								{
+									char aBuf[128];
+									str_format(aBuf, sizeof(aBuf), "only %i players with same ip allowed", m_MaxClientsPerIP);
+									CNetBase::SendControlMsg(m_Socket, &Addr, 0, NET_CTRLMSG_CLOSE, aBuf, sizeof(aBuf));
+									return 0;
+								}
+							}
+						}
+
 						for(int i = 0; i < MaxClients(); i++)
 						{
 							if(m_aSlots[i].m_Connection.State() == NET_CONNSTATE_OFFLINE)
@@ -411,3 +436,13 @@ int CNetServer::Send(CNetChunk *pChunk)
 	return 0;
 }
 
+void CNetServer::SetMaxClientsPerIP(int Max)
+{
+	// clamp
+	if(Max < 1)
+		Max = 1;
+	else if(Max > NET_MAX_CLIENTS)
+		Max = NET_MAX_CLIENTS;
+
+	m_MaxClientsPerIP = Max;
+}
diff --git a/src/game/client/components/hud.cpp b/src/game/client/components/hud.cpp
index fd44af41..a3ae5a4d 100644
--- a/src/game/client/components/hud.cpp
+++ b/src/game/client/components/hud.cpp
@@ -56,7 +56,7 @@ void CHud::RenderSuddenDeath()
 	if(m_pClient->m_Snap.m_pGameobj->m_SuddenDeath)
 	{
 		float Half = 300.0f*Graphics()->ScreenAspect()/2.0f;
-		const char *pText = "Sudden Death";
+		const char *pText = Localize("Sudden Death");
 		float FontSize = 12.0f;
 		float w = TextRender()->TextWidth(0, FontSize, pText, -1);
 		TextRender()->Text(0, Half-w/2, 2, FontSize, pText, -1);
@@ -133,8 +133,8 @@ void CHud::RenderWarmupTimer()
 	{
 		char Buf[256];
 		float FontSize = 20.0f;
-		float w = TextRender()->TextWidth(0, FontSize, "Warmup", -1);
-		TextRender()->Text(0, 150*Graphics()->ScreenAspect()+-w/2, 50, FontSize, "Warmup", -1);
+		float w = TextRender()->TextWidth(0, FontSize, Localize("Warmup"), -1);
+		TextRender()->Text(0, 150*Graphics()->ScreenAspect()+-w/2, 50, FontSize, Localize("Warmup"), -1);
 
 		int Seconds = m_pClient->m_Snap.m_pGameobj->m_Warmup/SERVER_TICK_SPEED;
 		if(Seconds < 5)
@@ -171,7 +171,7 @@ void CHud::RenderConnectionWarning()
 {
 	if(Client()->ConnectionProblems())
 	{
-		const char *pText = "Connection Problems...";
+		const char *pText = Localize("Connection Problems...");
 		float w = TextRender()->TextWidth(0, 24, pText, -1);
 		TextRender()->Text(0, 150*Graphics()->ScreenAspect()-w/2, 50, 24, pText, -1);
 	}
@@ -186,7 +186,7 @@ void CHud::RenderTeambalanceWarning()
 		int TeamDiff = m_pClient->m_Snap.m_aTeamSize[0]-m_pClient->m_Snap.m_aTeamSize[1];
 		if (g_Config.m_ClWarningTeambalance && (TeamDiff >= 2 || TeamDiff <= -2))
 		{
-			const char *pText = "Please balance teams!";
+			const char *pText = Localize("Please balance teams!");
 			if(Flash)
 				TextRender()->TextColor(1,1,0.5f,1);
 			else
@@ -214,7 +214,7 @@ void CHud::RenderVoting()
 	char Buf[512];
 	TextRender()->Text(0x0, 5, 60, 6, m_pClient->m_pVoting->VoteDescription(), -1);
 
-	str_format(Buf, sizeof(Buf), "%ds left", m_pClient->m_pVoting->SecondsLeft());
+	str_format(Buf, sizeof(Buf), Localize("%ds left"), m_pClient->m_pVoting->SecondsLeft());
 	float tw = TextRender()->TextWidth(0x0, 6, Buf, -1);
 	TextRender()->Text(0x0, 5+100-tw, 60, 6, Buf, -1);
 	
diff --git a/src/game/client/components/menus.cpp b/src/game/client/components/menus.cpp
index 585c6d7a..b752f8cb 100644
--- a/src/game/client/components/menus.cpp
+++ b/src/game/client/components/menus.cpp
@@ -840,7 +840,7 @@ int CMenus::Render()
 		}
 		else if(m_Popup == POPUP_PASSWORD)
 		{
-			pTitle = Localize("Password Incorrect");
+			pTitle = Localize("Password incorrect");
 			pExtraText = Client()->ErrorString();
 			pButtonText = Localize("Try again");
 		}
diff --git a/src/game/editor/ed_editor.cpp b/src/game/editor/ed_editor.cpp
index b2b3e1ca..387ce104 100644
--- a/src/game/editor/ed_editor.cpp
+++ b/src/game/editor/ed_editor.cpp
@@ -1029,6 +1029,14 @@ void CEditor::DoQuadPoint(CQuad *q, int QuadIndex, int v)
 			s_Operation = OP_CONTEXT_MENU;
 			m_SelectedQuad = QuadIndex;
 			UI()->SetActiveItem(pId);
+			if(!(m_SelectedPoints&(1<<v)))

+			{

+				if(Input()->KeyPressed(KEY_LSHIFT) || Input()->KeyPressed(KEY_RSHIFT))

+					m_SelectedPoints |= 1<<v;

+				else

+					m_SelectedPoints = 1<<v;

+				s_Moved = true;

+			}
 		}
 	}
 	else
diff --git a/src/tools/fake_server.cpp b/src/tools/fake_server.cpp
index b833c1b1..9442c7ba 100644
--- a/src/tools/fake_server.cpp
+++ b/src/tools/fake_server.cpp
@@ -111,7 +111,7 @@ static int Run()
 	int64 NextHeartBeat = 0;
 	NETADDR BindAddr = {NETTYPE_IPV4, {0},0};
 	
-	if(!pNet->Open(BindAddr, 0, 0))
+	if(!pNet->Open(BindAddr, 0, 0, 0))
 		return 0;
 	
 	while(1)