diff options
| author | oy <Tom_Adams@web.de> | 2011-03-25 12:06:45 +0100 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2011-03-25 12:06:45 +0100 |
| commit | 6ece07ee74b8b179d0a66c781a57344bcd75d3d5 (patch) | |
| tree | a6b6f2512a871814cb6b96013311371e84e47cef /src/game/server/gamecontext.cpp | |
| parent | 359b806e959fbdced610c2d84d1e12dfe7b58a7e (diff) | |
| download | zcatch-6ece07ee74b8b179d0a66c781a57344bcd75d3d5.tar.gz zcatch-6ece07ee74b8b179d0a66c781a57344bcd75d3d5.zip | |
added force_vote command
Diffstat (limited to 'src/game/server/gamecontext.cpp')
| -rw-r--r-- | src/game/server/gamecontext.cpp | 68 |
1 files changed, 62 insertions, 6 deletions
diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index 4c236832..476bd20a 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -1045,9 +1045,9 @@ void CGameContext::ConRemoveVote(IConsole::IResult *pResult, void *pUserData) str_format(aBuf, sizeof(aBuf), "removed option '%s' '%s'", pOption->m_aDescription, pOption->m_aCommand); pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf); - CHeap *pVoteOptionHeap = new CHeap(); + CHeap *pVoteOptionHeap = new CHeap(); CVoteOption *pVoteOptionFirst = 0; - CVoteOption *pVoteOptionLast = 0; + CVoteOption *pVoteOptionLast = 0; for(CVoteOption *pSrc = pSelf->m_pVoteOptionFirst; pSrc; pSrc = pSrc->m_pNext) { if(pSrc == pOption) @@ -1066,10 +1066,10 @@ void CGameContext::ConRemoveVote(IConsole::IResult *pResult, void *pUserData) str_copy(pDst->m_aDescription, pSrc->m_aDescription, sizeof(pDst->m_aDescription)); mem_copy(pDst->m_aCommand, pSrc->m_aCommand, Len+1); - } - - // clean up - delete pSelf->m_pVoteOptionHeap; + } + + // clean up + delete pSelf->m_pVoteOptionHeap; pSelf->m_pVoteOptionHeap = pVoteOptionHeap; pSelf->m_pVoteOptionFirst = pVoteOptionFirst; pSelf->m_pVoteOptionLast = pVoteOptionLast; @@ -1080,6 +1080,61 @@ void CGameContext::ConRemoveVote(IConsole::IResult *pResult, void *pUserData) pSelf->Server()->SendPackMsg(&OptionMsg, MSGFLAG_VITAL, -1); } +void CGameContext::ConForceVote(IConsole::IResult *pResult, void *pUserData) +{ + CGameContext *pSelf = (CGameContext *)pUserData; + const char *pType = pResult->GetString(0); + const char *pValue = pResult->GetString(1); + const char *pReason = pResult->GetString(2)[0] ? pResult->GetString(2) : "No reason given"; + char aBuf[128] = {0}; + + if(str_comp_nocase(pType, "option") == 0) + { + CVoteOption *pOption = pSelf->m_pVoteOptionFirst; + while(pOption) + { + if(str_comp_nocase(pValue, pOption->m_aDescription) == 0) + { + str_format(aBuf, sizeof(aBuf), "admin forced server option '%s' (%s)", pValue, pReason); + pSelf->SendChatTarget(-1, aBuf); + pSelf->Console()->ExecuteLine(pOption->m_aCommand); + break; + } + + pOption = pOption->m_pNext; + } + + if(!pOption) + { + str_format(aBuf, sizeof(aBuf), "'%s' isn't an option on this server", pValue); + pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf); + return; + } + } + else if(str_comp_nocase(pType, "kick") == 0) + { + int KickID = str_toint(pValue); + if(KickID < 0 || KickID >= MAX_CLIENTS || !pSelf->m_apPlayers[KickID]) + { + pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", "Invalid client id to kick"); + return; + } + + if (!g_Config.m_SvVoteKickBantime) + { + str_format(aBuf, sizeof(aBuf), "kick %d %s", KickID, pReason); + pSelf->Console()->ExecuteLine(aBuf); + } + else + { + char aIP[64] = {0}; + pSelf->Server()->GetClientIP(KickID, aIP, sizeof(aIP)); + str_format(aBuf, sizeof(aBuf), "ban %s %d %s", aIP, g_Config.m_SvVoteKickBantime, pReason); + pSelf->Console()->ExecuteLine(aBuf); + } + } +} + void CGameContext::ConClearVotes(IConsole::IResult *pResult, void *pUserData) { CGameContext *pSelf = (CGameContext *)pUserData; @@ -1136,6 +1191,7 @@ void CGameContext::OnConsoleInit() Console()->Register("add_vote", "sr", CFGFLAG_SERVER, ConAddVote, this, ""); Console()->Register("remove_vote", "s", CFGFLAG_SERVER, ConRemoveVote, this, ""); + Console()->Register("force_vote", "ss?r", CFGFLAG_SERVER, ConForceVote, this, ""); Console()->Register("clear_votes", "", CFGFLAG_SERVER, ConClearVotes, this, ""); Console()->Register("vote", "r", CFGFLAG_SERVER, ConVote, this, ""); |