about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChoupom <andycootlapin@hotmail.fr>2010-11-20 19:30:52 +0100
committeroy <Tom_Adams@web.de>2010-11-20 21:41:18 +0100
commitc64d3817cf7fedfb79aa9337757a3e3c56968e0b (patch)
tree27e75fdf3f32a8339c50a83894093ba7e9a8e2a8
parent0aa0a5699092fb47b76685b7a0fe6de10a55bfb7 (diff)
downloadzcatch-c64d3817cf7fedfb79aa9337757a3e3c56968e0b.tar.gz
zcatch-c64d3817cf7fedfb79aa9337757a3e3c56968e0b.zip
fixed so we can't add a vote option multiple times by oy
-rw-r--r--src/game/server/gamecontext.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp
index 0cf9bc58..5834d074 100644
--- a/src/game/server/gamecontext.cpp
+++ b/src/game/server/gamecontext.cpp
@@ -907,18 +907,33 @@ void CGameContext::ConSetTeam(IConsole::IResult *pResult, void *pUserData)
 void CGameContext::ConAddVote(IConsole::IResult *pResult, void *pUserData)
 {
 	CGameContext *pSelf = (CGameContext *)pUserData;
+	const char *pString = pResult->GetString(0);
+	
 	// check for valid option
-	if(!pSelf->Console()->LineIsValid(pResult->GetString(0)))
+	if(!pSelf->Console()->LineIsValid(pString))
 	{
 		char aBuf[256];
-		str_format(aBuf, sizeof(aBuf), "skipped invalid option '%s'", pResult->GetString(0));
+		str_format(aBuf, sizeof(aBuf), "skipped invalid option '%s'", pString);
 		pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
 		return;
 	}
-
-	int Len = str_length(pResult->GetString(0));
 	
-	CGameContext::CVoteOption *pOption = (CGameContext::CVoteOption *)pSelf->m_pVoteOptionHeap->Allocate(sizeof(CGameContext::CVoteOption) + Len);
+	CGameContext::CVoteOption *pOption = pSelf->m_pVoteOptionFirst;
+	while(pOption)
+	{
+		if(str_comp_nocase(pString, pOption->m_aCommand) == 0)
+		{
+			char aBuf[256];
+			str_format(aBuf, sizeof(aBuf), "option '%s' already exists", pString);
+			pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
+			return;
+		}
+		pOption = pOption->m_pNext;
+	}
+	
+	int Len = str_length(pString);
+	
+	pOption = (CGameContext::CVoteOption *)pSelf->m_pVoteOptionHeap->Allocate(sizeof(CGameContext::CVoteOption) + Len);
 	pOption->m_pNext = 0;
 	pOption->m_pPrev = pSelf->m_pVoteOptionLast;
 	if(pOption->m_pPrev)
@@ -927,7 +942,7 @@ void CGameContext::ConAddVote(IConsole::IResult *pResult, void *pUserData)
 	if(!pSelf->m_pVoteOptionFirst)
 		pSelf->m_pVoteOptionFirst = pOption;
 	
-	mem_copy(pOption->m_aCommand, pResult->GetString(0), Len+1);
+	mem_copy(pOption->m_aCommand, pString, Len+1);
 	char aBuf[256];
 	str_format(aBuf, sizeof(aBuf), "added option '%s'", pOption->m_aCommand);
 	pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);