about summary refs log tree commit diff
path: root/src/game/client
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2011-03-26 22:06:29 +0100
committeroy <Tom_Adams@web.de>2011-03-26 22:06:29 +0100
commit5b328e54842b128881237ed608705b596f310ce8 (patch)
tree6700438579549faf9295bd5622826145c2976284 /src/game/client
parent6e1b6b102a623d1e9b93566491bd9dc525fdcbaa (diff)
downloadzcatch-5b328e54842b128881237ed608705b596f310ce8.tar.gz
zcatch-5b328e54842b128881237ed608705b596f310ce8.zip
added a limit for the number of votes that can be added to the server and send options as lists when a client joins. Closes #459
Diffstat (limited to 'src/game/client')
-rw-r--r--src/game/client/components/voting.cpp77
-rw-r--r--src/game/client/components/voting.h1
2 files changed, 54 insertions, 24 deletions
diff --git a/src/game/client/components/voting.cpp b/src/game/client/components/voting.cpp
index 0eddf805..feeb96f7 100644
--- a/src/game/client/components/voting.cpp
+++ b/src/game/client/components/voting.cpp
@@ -123,6 +123,32 @@ CVoting::CVoting()
 	OnReset();
 }
 
+void CVoting::AddOption(const char *pDescription)
+{
+	CVoteOptionClient *pOption;
+	if(m_pRecycleFirst)
+	{
+		pOption = m_pRecycleFirst;
+		m_pRecycleFirst = m_pRecycleFirst->m_pNext;
+		if(m_pRecycleFirst)
+			m_pRecycleFirst->m_pPrev = 0;
+		else
+			m_pRecycleLast = 0;
+	}
+	else
+		pOption = (CVoteOptionClient *)m_Heap.Allocate(sizeof(CVoteOptionClient));
+
+	pOption->m_pNext = 0;
+	pOption->m_pPrev = m_pLast;
+	if(pOption->m_pPrev)
+		pOption->m_pPrev->m_pNext = pOption;
+	m_pLast = pOption;
+	if(!m_pFirst)
+		m_pFirst = pOption;
+		
+	str_copy(pOption->m_aDescription, pDescription, sizeof(pOption->m_aDescription));
+	++m_NumVoteOptions;
+}
 
 void CVoting::ClearOptions()
 {
@@ -178,33 +204,36 @@ void CVoting::OnMessage(int MsgType, void *pRawMsg)
 	{
 		ClearOptions();
 	}
-	else if(MsgType == NETMSGTYPE_SV_VOTEOPTIONADD)
+	else if(MsgType == NETMSGTYPE_SV_VOTEOPTIONLISTADD)
 	{
-		CNetMsg_Sv_VoteOptionAdd *pMsg = (CNetMsg_Sv_VoteOptionAdd *)pRawMsg;
-	
-		CVoteOptionClient *pOption;
-		if(m_pRecycleFirst)
+		CNetMsg_Sv_VoteOptionListAdd *pMsg = (CNetMsg_Sv_VoteOptionListAdd *)pRawMsg;
+		int NumOptions = pMsg->m_NumOptions;
+		for(int i = 0; i < NumOptions; ++i)
 		{
-			pOption = m_pRecycleFirst;
-			m_pRecycleFirst = m_pRecycleFirst->m_pNext;
-			if(m_pRecycleFirst)
-				m_pRecycleFirst->m_pPrev = 0;
-			else
-				m_pRecycleLast = 0;
+			switch(i)
+			{
+			case 0: AddOption(pMsg->m_pDescription0); break;
+			case 1: AddOption(pMsg->m_pDescription1); break;
+			case 2: AddOption(pMsg->m_pDescription2); break;
+			case 3: AddOption(pMsg->m_pDescription3); break;
+			case 4: AddOption(pMsg->m_pDescription4); break;
+			case 5: AddOption(pMsg->m_pDescription5); break;
+			case 6: AddOption(pMsg->m_pDescription6); break;
+			case 7: AddOption(pMsg->m_pDescription7); break;
+			case 8: AddOption(pMsg->m_pDescription8); break;
+			case 9: AddOption(pMsg->m_pDescription9); break;
+			case 10: AddOption(pMsg->m_pDescription10); break;
+			case 11: AddOption(pMsg->m_pDescription11); break;
+			case 12: AddOption(pMsg->m_pDescription12); break;
+			case 13: AddOption(pMsg->m_pDescription13); break;
+			case 14: AddOption(pMsg->m_pDescription14);
+			}
 		}
-		else
-			pOption = (CVoteOptionClient *)m_Heap.Allocate(sizeof(CVoteOptionClient));
-
-		pOption->m_pNext = 0;
-		pOption->m_pPrev = m_pLast;
-		if(pOption->m_pPrev)
-			pOption->m_pPrev->m_pNext = pOption;
-		m_pLast = pOption;
-		if(!m_pFirst)
-			m_pFirst = pOption;
-		
-		str_copy(pOption->m_aDescription, pMsg->m_pDescription, sizeof(pOption->m_aDescription));
-		++m_NumVoteOptions;
+	}
+	else if(MsgType == NETMSGTYPE_SV_VOTEOPTIONADD)
+	{
+		CNetMsg_Sv_VoteOptionAdd *pMsg = (CNetMsg_Sv_VoteOptionAdd *)pRawMsg;
+		AddOption(pMsg->m_pDescription);
 	}
 	else if(MsgType == NETMSGTYPE_SV_VOTEOPTIONREMOVE)
 	{
diff --git a/src/game/client/components/voting.h b/src/game/client/components/voting.h
index cfba0605..1f8fb8cf 100644
--- a/src/game/client/components/voting.h
+++ b/src/game/client/components/voting.h
@@ -22,6 +22,7 @@ class CVoting : public CComponent
 	int m_Voted;
 	int m_Yes, m_No, m_Pass, m_Total;
 	
+	void AddOption(const char *pDescription);
 	void ClearOptions();
 	void Callvote(const char *pType, const char *pValue, const char *pReason);