about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTeetime <TeetimeTW@yahoo.de>2013-03-24 01:48:27 +0100
committerTeetime <TeetimeTW@yahoo.de>2013-03-24 01:48:27 +0100
commitdfb161739ceed848587e11d418ef30e0f5142f16 (patch)
tree28490f707b156cadc297d04b82371dc7027f59f6
parentb22f178e0f0a639c3dcd2323b076fb9da5888b14 (diff)
downloadzcatch-dfb161739ceed848587e11d418ef30e0f5142f16.tar.gz
zcatch-dfb161739ceed848587e11d418ef30e0f5142f16.zip
Let calculate the playercolor on each tick to be always up to date, even with leaving and joining players and let DoWinCheck check if the game is over before checking
-rw-r--r--src/game/server/gamecontext.h2
-rw-r--r--src/game/server/gamemodes/zcatch.cpp63
-rw-r--r--src/game/server/gamemodes/zcatch.h2
3 files changed, 42 insertions, 25 deletions
diff --git a/src/game/server/gamecontext.h b/src/game/server/gamecontext.h
index eb634a87..5d340613 100644
--- a/src/game/server/gamecontext.h
+++ b/src/game/server/gamecontext.h
@@ -16,7 +16,7 @@
 #include "player.h"
 
 #define MAX_MUTES 35
-#define ZCATCH_VERSION "0.4.7"
+#define ZCATCH_VERSION "0.4.8 BETA"
 
 /*
 	Tick
diff --git a/src/game/server/gamemodes/zcatch.cpp b/src/game/server/gamemodes/zcatch.cpp
index 4a810e04..6200d0e0 100644
--- a/src/game/server/gamemodes/zcatch.cpp
+++ b/src/game/server/gamemodes/zcatch.cpp
@@ -18,8 +18,9 @@ CGameController_zCatch::CGameController_zCatch(class CGameContext *pGameServer)
 
 void CGameController_zCatch::Tick()
 {
-	DoWincheck();
 	IGameController::Tick();
+	if(m_GameOverTick == -1)
+		CalcPlayerColor();
 
 	if(m_OldMode != g_Config.m_SvMode)
 	{
@@ -30,35 +31,38 @@ void CGameController_zCatch::Tick()
 
 void CGameController_zCatch::DoWincheck()
 {
-	int Players = 0, Players_Spec = 0, Players_SpecExplicit = 0;
-
-	for(int i = 0; i < MAX_CLIENTS; i++)
+	if(m_GameOverTick == -1)
 	{
-		if(GameServer()->m_apPlayers[i])
+		int Players = 0, Players_Spec = 0, Players_SpecExplicit = 0;
+
+		for(int i = 0; i < MAX_CLIENTS; i++)
 		{
-			Players++;
-			if(GameServer()->m_apPlayers[i]->GetTeam() == TEAM_SPECTATORS)
-				Players_Spec++;
-			if(GameServer()->m_apPlayers[i]->m_SpecExplicit == 1)
-				Players_SpecExplicit++;
+			if(GameServer()->m_apPlayers[i])
+			{
+				Players++;
+				if(GameServer()->m_apPlayers[i]->GetTeam() == TEAM_SPECTATORS)
+					Players_Spec++;
+				if(GameServer()->m_apPlayers[i]->m_SpecExplicit == 1)
+					Players_SpecExplicit++;
+			}
 		}
-	}
 
-	if(Players == 1)
-	{
-		//Do nothing
-	}
-	else if((Players - Players_Spec == 1) && (Players != Players_Spec) && (Players - Players_SpecExplicit != 1))
-	{
-		for(int i = 0; i < MAX_CLIENTS; i++)
+		if(Players == 1)
 		{
-			if(GameServer()->m_apPlayers[i] && GameServer()->m_apPlayers[i]->GetTeam() != TEAM_SPECTATORS)
-				GameServer()->m_apPlayers[i]->m_Score += g_Config.m_SvBonus;
+			//Do nothing
+		}
+		else if((Players - Players_Spec == 1) && (Players != Players_Spec) && (Players - Players_SpecExplicit != 1))
+		{
+			for(int i = 0; i < MAX_CLIENTS; i++)
+			{
+				if(GameServer()->m_apPlayers[i] && GameServer()->m_apPlayers[i]->GetTeam() != TEAM_SPECTATORS)
+					GameServer()->m_apPlayers[i]->m_Score += g_Config.m_SvBonus;
+			}
+			EndRound();
 		}
-		EndRound();
-	}
 
-	IGameController::DoWincheck(); //do also usual wincheck
+		IGameController::DoWincheck(); //do also usual wincheck
+	}
 }
 
 int CGameController_zCatch::OnCharacterDeath(class CCharacter *pVictim, class CPlayer *pKiller, int WeaponID)
@@ -111,7 +115,6 @@ int CGameController_zCatch::OnCharacterDeath(class CCharacter *pVictim, class CP
 	}
 
 	// Update colors
-	OnPlayerInfoChange(pKiller);
 	OnPlayerInfoChange(pVictim->GetPlayer());
 
 	return 0;
@@ -246,3 +249,15 @@ bool CGameController_zCatch::OnEntity(int Index, vec2 Pos)
 
 	return false;
 }
+
+void CGameController_zCatch::CalcPlayerColor()
+{
+	for(int i = 0; i < MAX_CLIENTS; i++)
+	{
+		CPlayer *pP = GameServer()->m_apPlayers[i];
+		if(!pP)
+			continue;
+		if(pP->GetTeam() != TEAM_SPECTATORS)
+			OnPlayerInfoChange(pP);
+	}
+}
diff --git a/src/game/server/gamemodes/zcatch.h b/src/game/server/gamemodes/zcatch.h
index 4f110a03..af776644 100644
--- a/src/game/server/gamemodes/zcatch.h
+++ b/src/game/server/gamemodes/zcatch.h
@@ -23,6 +23,8 @@ public:
 	virtual bool OnEntity(int Index, vec2 Pos);
 	virtual bool CanChangeTeam(CPlayer *pPlayer, int JoinTeam);
 	virtual void EndRound();
+
+	void CalcPlayerColor();
 };
 
 #endif