Skip to content

Commit 7e36880

Browse files
committed
Track extend count & new extend state
1 parent 66feb3f commit 7e36880

File tree

3 files changed

+27
-74
lines changed

3 files changed

+27
-74
lines changed

src/adminsystem.cpp

+2-22
Original file line numberDiff line numberDiff line change
@@ -688,28 +688,8 @@ CON_COMMAND_CHAT_FLAGS(extend, "<minutes> - Extend current map (negative value r
688688

689689
int iExtendTime = V_StringToInt32(args[1], 0);
690690

691-
ConVar* cvar = g_pCVar->GetConVar(g_pCVar->FindConVar("mp_timelimit"));
692-
693-
// CONVAR_TODO
694-
// HACK: values is actually the cvar value itself, hence this ugly cast.
695-
float flTimelimit = *(float *)&cvar->values;
696-
697-
if (gpGlobals->curtime - g_pGameRules->m_flGameStartTime > flTimelimit * 60)
698-
flTimelimit = (gpGlobals->curtime - g_pGameRules->m_flGameStartTime) / 60.0f + iExtendTime;
699-
else
700-
{
701-
if (flTimelimit == 1)
702-
flTimelimit = 0;
703-
flTimelimit += iExtendTime;
704-
}
705-
706-
if (flTimelimit <= 0)
707-
flTimelimit = 1;
708-
709-
// CONVAR_TODO
710-
char buf[32];
711-
V_snprintf(buf, sizeof(buf), "mp_timelimit %.6f", flTimelimit);
712-
g_pEngineServer2->ServerCommand(buf);
691+
// Call the votemanager extend function so the extend vote can be checked
692+
ExtendMap(iExtendTime);
713693

714694
const char* pszCommandPlayerName = player ? player->GetPlayerName() : CONSOLE_NAME;
715695

src/votemanager.cpp

+24-51
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ extern CCSGameRules* g_pGameRules;
3434

3535
ERTVState g_RTVState = ERTVState::MAP_START;
3636
EExtendState g_ExtendState = EExtendState::MAP_START;
37+
int g_iExtends = 0;
3738

3839
bool g_bVoteManagerEnable = false;
39-
int g_iExtendsLeft = 1;
40+
int g_iMaxExtends = 1;
4041
float g_flExtendSucceedRatio = 0.5f;
4142
int g_iExtendTimeToAdd = 20;
4243
float g_flRTVSucceedRatio = 0.6f;
@@ -53,7 +54,7 @@ float g_flRtvDelay = 300.0f;
5354
FAKE_BOOL_CVAR(cs2f_votemanager_enable, "Whether to enable votemanager features such as RTV and extends", g_bVoteManagerEnable, false, false)
5455
FAKE_FLOAT_CVAR(cs2f_extend_vote_delay, "If cs2f_extend_mode is 2, Time after map start until extend votes can be triggered", g_flExtendVoteDelay, 120.0f, false)
5556
FAKE_INT_CVAR(cs2f_extend_mode, "How extend votes are handled. (0=off, 1=only admins can start, 2=players can start with !ve, 3=auto start at given timeleft)", g_ExtendVoteMode, (int)EExtendVoteMode::EXTENDVOTE_ADMINONLY, false)
56-
FAKE_INT_CVAR(cs2f_extends, "Maximum extends per map", g_iExtendsLeft, 1, false)
57+
FAKE_INT_CVAR(cs2f_extends, "Maximum extends per map", g_iMaxExtends, 1, false)
5758
FAKE_FLOAT_CVAR(cs2f_extend_success_ratio, "Ratio needed to pass an extend vote", g_flExtendSucceedRatio, 0.5f, false)
5859
FAKE_INT_CVAR(cs2f_extend_time, "Time to add per extend in minutes", g_iExtendTimeToAdd, 20, false)
5960
FAKE_FLOAT_CVAR(cs2f_extend_vote_start_time, "If cs2f_extend_mode is 3, start an extend vote at this timeleft (minutes)", g_flExtendVoteStartTime, 4.0f, false)
@@ -72,6 +73,8 @@ void VoteManager_Init()
7273
g_RTVState = ERTVState::MAP_START;
7374
g_ExtendState = EExtendState::MAP_START;
7475

76+
g_iExtends = 0;
77+
7578
new CTimer(g_flExtendVoteDelay, false, true, []()
7679
{
7780
if (g_ExtendState < EExtendState::POST_EXTEND_NO_EXTENDS_LEFT)
@@ -110,7 +113,7 @@ float TimerCheckTimeleft()
110113
return flExtendVoteTickrate;
111114

112115
// No more extends or map RTVd
113-
if (g_iExtendsLeft <= 0 || g_ExtendState >= EExtendState::POST_EXTEND_NO_EXTENDS_LEFT)
116+
if ((g_iMaxExtends - g_iExtends) <= 0 || g_ExtendState >= EExtendState::POST_EXTEND_NO_EXTENDS_LEFT)
114117
return flExtendVoteTickrate;
115118

116119
ConVar* cvar = g_pCVar->GetConVar(g_pCVar->FindConVar("mp_timelimit"));
@@ -401,6 +404,9 @@ CON_COMMAND_CHAT(ve, "- Vote to extend current map")
401404
case EExtendState::POST_EXTEND_NO_EXTENDS_LEFT:
402405
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "There are no extends left for the current map.");
403406
return;
407+
case EExtendState::POST_EXTEND_FAILED:
408+
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "A previous extend vote already failed.");
409+
return;
404410
case EExtendState::POST_LAST_ROUND_END:
405411
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Extend vote is closed during next map selection.");
406412
return;
@@ -491,7 +497,7 @@ CON_COMMAND_CHAT_FLAGS(adminve, "Start a vote extend immediately.", ADMFLAG_CHAN
491497

492498
if (g_ExtendState == EExtendState::IN_PROGRESS || bVoteStarting)
493499
{
494-
ClientPrint(player, HUD_PRINTCONSOLE, CHAT_PREFIX "An extend vote is already in progress.");
500+
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "An extend vote is already in progress.");
495501
return;
496502
}
497503

@@ -544,54 +550,22 @@ CON_COMMAND_CHAT_FLAGS(enablertv, "- Restore the ability for players to vote to
544550
ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX ADMIN_PREFIX "enabled vote for RTV.", pszCommandPlayerName);
545551
}
546552

547-
CON_COMMAND_CHAT_FLAGS(addextend, "- Add another extend to the current map for players to vote", ADMFLAG_RCON)
548-
{
549-
if (!g_bVoteManagerEnable)
550-
return;
551-
552-
if (g_ExtendState == EExtendState::IN_PROGRESS)
553-
{
554-
if (player)
555-
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "Wait until the current vote has ended to add extends.");
556-
else
557-
ConMsg("Wait until the current vote has ended to add extends.");
558-
return;
559-
}
560-
561-
const char* pszCommandPlayerName = player ? player->GetPlayerName() : CONSOLE_NAME;
562-
563-
if (g_ExtendState == EExtendState::POST_EXTEND_NO_EXTENDS_LEFT || g_ExtendState == EExtendState::NO_EXTENDS)
564-
g_ExtendState = EExtendState::EXTEND_ALLOWED;
565-
566-
g_iExtendsLeft += 1;
567-
568-
ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX ADMIN_PREFIX "allowed for an additional extend.", pszCommandPlayerName);
569-
}
570-
571553
CON_COMMAND_CHAT(extendsleft, "- Display amount of extends left for the current map")
572554
{
573555
if (!g_bVoteManagerEnable)
574556
return;
575557

576-
char message[64];
577-
578-
switch (g_iExtendsLeft)
558+
if (g_iMaxExtends - g_iExtends <= 0)
579559
{
580-
case 0:
581-
strcpy(message, "There are no extends left.");
582-
break;
583-
case 1:
584-
strcpy(message, "There's 1 extend left");
585-
break;
586-
default:
587-
V_snprintf(message, sizeof(message), "There are %i extends left.", g_iExtendsLeft);
588-
break;
560+
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "There are no extends left, the map was already extended %i/%i times.", g_iExtends, g_iMaxExtends);
589561
}
590-
591-
if (player)
592-
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "%s", message);
593562
else
594-
ConMsg("%s", message);
563+
{
564+
if (g_ExtendState == EExtendState::POST_EXTEND_FAILED)
565+
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "The map had %i/%i extends left, but the last extend vote failed.", g_iMaxExtends - g_iExtends, g_iMaxExtends);
566+
else
567+
ClientPrint(player, HUD_PRINTTALK, CHAT_PREFIX "The map has %i/%i extends left.", g_iMaxExtends - g_iExtends, g_iMaxExtends);
568+
}
595569
}
596570

597571
CON_COMMAND_CHAT(timeleft, "- Display time left to end of current map.")
@@ -682,11 +656,11 @@ void VoteExtendHandler(YesNoVoteAction action, int param1, int param2)
682656
{
683657
if ((YesNoVoteEndReason)param1 == YesNoVoteEndReason::VoteEnd_Cancelled)
684658
{
685-
// Admin cancelled so stop further automatic votes
659+
// Admin cancelled so stop further votes
686660
// It will reenable if an admin manually calls a vote
687661
if (g_ExtendVoteMode == EExtendVoteMode::EXTENDVOTE_AUTO)
688662
{
689-
g_ExtendState = EExtendState::POST_EXTEND_NO_EXTENDS_LEFT;
663+
g_ExtendState = EExtendState::POST_EXTEND_FAILED;
690664
}
691665
}
692666

@@ -710,8 +684,9 @@ bool VoteExtendEndCallback(YesNoVoteInfo info)
710684
if (yes_percent >= g_flExtendSucceedRatio)
711685
{
712686
ExtendMap(g_iExtendTimeToAdd);
687+
g_iExtends++;
713688

714-
if (g_iExtendsLeft == 1)
689+
if (g_iMaxExtends - g_iExtends <= 0)
715690
// there are no extends left after a successfull extend vote
716691
g_ExtendState = EExtendState::POST_EXTEND_NO_EXTENDS_LEFT;
717692
else
@@ -747,15 +722,13 @@ bool VoteExtendEndCallback(YesNoVoteInfo info)
747722
pPlayer->SetExtendVote(false);
748723
}
749724

750-
g_iExtendsLeft--;
751725
ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX "Extend vote succeeded! Current map has been extended by %i minutes.", g_iExtendTimeToAdd);
752726

753727
return true;
754728
}
755729

756-
// Vote failed so we don't allow any more player initiated votes
757-
g_ExtendState = EExtendState::POST_EXTEND_NO_EXTENDS_LEFT;
758-
g_iExtendsLeft = 0;
730+
// Vote failed so we don't allow any more votes
731+
g_ExtendState = EExtendState::POST_EXTEND_FAILED;
759732

760733
ClientPrintAll(HUD_PRINTTALK, CHAT_PREFIX "Extend vote failed! Further extend votes disabled!", g_iExtendTimeToAdd);
761734

src/votemanager.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ enum class EExtendState
3636
IN_PROGRESS,
3737
POST_EXTEND_COOLDOWN,
3838
POST_EXTEND_NO_EXTENDS_LEFT,
39+
POST_EXTEND_FAILED,
3940
POST_LAST_ROUND_END,
4041
POST_RTV,
4142
NO_EXTENDS,
@@ -51,7 +52,6 @@ enum EExtendVoteMode
5152

5253
extern ERTVState g_RTVState;
5354
extern EExtendState g_ExtendState;
54-
extern int g_iExtendsLeft;
5555
extern bool g_bVoteManagerEnable;
5656

5757
void VoteManager_Init();

0 commit comments

Comments
 (0)