strcat("^2:^1", ftos(vote_reject_count)),
((mincount >= 0) ? strcat("^2 (^1", ftos(mincount), "^2 needed)") : "^2"),
strcat(", ^1", ftos(vote_abstain_count), "^2 didn't care"),
- strcat(", ^1", ftos(notvoters), strcat("^2 didn't ", ((mincount >= 0) ? string_null : "have to "), "vote\n"))));
+ strcat(", ^1", ftos(notvoters), strcat("^2 didn't ", ((mincount >= 0) ? "" : "have to "), "vote\n"))));
if(autocvar_sv_eventlog)
{
{
validated_map = MapInfo_FixName(validated_map);
- if(!validated_map)
+ if not(validated_map)
{
print_to(caller, "This map is not available on this server.");
return string_null;
float VoteCommand_checkargs(float startpos, float argc)
{
- float p, q, check;
+ float p, q, check, minargs;
string cvarname = strcat("sv_vote_command_restriction_", argv(startpos));
string cmdrestriction = cvar_string(cvarname); // note: this warns on undefined cvar. We want that.
string charlist, arg;
// 1 args: argc == startpos + 1
// ...
- if((argc - startpos) < stof(cmdrestriction))
+ minargs = stof(cmdrestriction);
+ if(argc - startpos < minargs)
return FALSE;
p = strstrofs(cmdrestriction, ";", 0); // find first semicolon
for(;;)
{
+ // we know that at any time, startpos <= argc - minargs
+ // so this means: argc-minargs >= startpos >= argc, thus
+ // argc-minargs >= argc, thus minargs <= 0, thus all minargs
+ // have been seen already
+
if(startpos >= argc) // all args checked? GOOD
- return TRUE;
+ break;
if(p < 0) // no more args? FAIL
+ {
+ // exception: exactly minargs left, this one included
+ if(argc - startpos == minargs)
+ break;
+
+ // otherwise fail
return FALSE;
+ }
// cut to next semicolon
q = strstrofs(cmdrestriction, ";", p+1); // find next semicolon
}
++startpos;
+ --minargs;
p = q;
}
vote_command = VoteCommand_extractcommand(vote_command, 2, argc);
if not(autocvar_sv_vote_call || !caller) { print_to(caller, "^1Vote calling is not allowed."); }
+ else if(!autocvar_sv_vote_gamestart && time < game_starttime) { print_to(caller, "^1Vote calling is not allowed before the match has started."); }
else if(vote_called) { print_to(caller, "^1There is already a vote called."); }
else if(!spectators_allowed && (caller && (caller.classname != "player"))) { print_to(caller, "^1Only players can call a vote."); }
else if(timeout_status) { print_to(caller, "^1You can not call a vote while a timeout is active."); }