diff options
| author | Choupom <andycootlapin@hotmail.fr> | 2010-11-20 19:30:52 +0100 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2010-11-20 21:41:18 +0100 |
| commit | c64d3817cf7fedfb79aa9337757a3e3c56968e0b (patch) | |
| tree | 27e75fdf3f32a8339c50a83894093ba7e9a8e2a8 | |
| parent | 0aa0a5699092fb47b76685b7a0fe6de10a55bfb7 (diff) | |
| download | zcatch-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.cpp | 27 |
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); |