X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcommand%2Fvote.qc;h=1a826c6f142daf0164d83a7a27f59b37c09d9820;hb=a74db1b632253f59396cc5a4c991d68e52f339b2;hp=ed17ed0b8c89b083436b650983f6deaac3d9612f;hpb=ae277921268b84c7b7ee5ab901ce7f0088c07605;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index ed17ed0b8..1a826c6f1 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -81,8 +81,9 @@ bool Nagger_SendEntity(entity this, entity to, float sendflags) { for (i = 1; i <= maxclients; i += 8) { - for (f = 0, e = edict_num(i), b = 1; b < 256; b *= 2, e = nextent(e)) - if (!IS_REAL_CLIENT(e) || e.ready) f |= b; + for (f = 0, e = edict_num(i), b = BIT(0); b < BIT(8); b <<= 1, e = nextent(e)) + if (!IS_REAL_CLIENT(e) || e.ready) + f |= b; WriteByte(MSG_ENTITY, f); } } @@ -429,7 +430,8 @@ void ReadyRestart_force() FOREACH_CLIENT(IS_PLAYER(it), { it.alivetime = 0; CS(it).killcount = 0; - PS_GR_P_ADDVAL(it, PLAYERSTATS_ALIVETIME, -PS_GR_P_ADDVAL(it, PLAYERSTATS_ALIVETIME, 0)); + float val = PlayerStats_GameReport_Event_Player(it, PLAYERSTATS_ALIVETIME, 0); + PlayerStats_GameReport_Event_Player(it, PLAYERSTATS_ALIVETIME, -val); }); restart_mapalreadyrestarted = false; // reset this var, needed when cvar sv_ready_restart_repeatable is in use @@ -583,7 +585,7 @@ float VoteCommand_checkargs(float startpos, float argc) if(cvar_type(cvarname) & CVAR_TYPEFLAG_EXISTS) cmdrestriction = cvar_string(cvarname); else - LOG_INFO("NOTE: ", cvarname, " does not exist, no restrictions will be applied.\n"); + LOG_INFO("NOTE: ", cvarname, " does not exist, no restrictions will be applied."); if (cmdrestriction == "") return true; @@ -646,26 +648,17 @@ float VoteCommand_checkargs(float startpos, float argc) return true; } -float VoteCommand_parse(entity caller, string vote_command, string vote_list, float startpos, float argc) +int VoteCommand_parse(entity caller, string vote_command, string vote_list, float startpos, float argc) { - string first_command; + string first_command = argv(startpos); + int missing_chars = argv_start_index(startpos); - first_command = argv(startpos); + if (autocvar_sv_vote_limit > 0 && strlen(vote_command) > autocvar_sv_vote_limit) + return 0; - /*printf("VoteCommand_parse(): Command: '%s', Length: %f.\n", - substring(vote_command, argv_start_index(startpos), strlen(vote_command) - argv_start_index(startpos)), - strlen(substring(vote_command, argv_start_index(startpos), strlen(vote_command) - argv_start_index(startpos))) - );*/ + if (!VoteCommand_checkinlist(first_command, vote_list)) return 0; - if ( - (autocvar_sv_vote_limit > 0) - && - (strlen(substring(vote_command, argv_start_index(startpos), strlen(vote_command) - argv_start_index(startpos))) > autocvar_sv_vote_limit) - ) return false; - - if (!VoteCommand_checkinlist(first_command, vote_list)) return false; - - if (!VoteCommand_checkargs(startpos, argc)) return false; + if (!VoteCommand_checkargs(startpos, argc)) return 0; switch (first_command) // now go through and parse the proper commands to adjust as needed. { @@ -677,16 +670,18 @@ float VoteCommand_parse(entity caller, string vote_command, string vote_list, fl if (accepted > 0) { - string reason = ((argc > next_token) ? substring(vote_command, argv_start_index(next_token), strlen(vote_command) - argv_start_index(next_token)) : "No reason provided"); - string command_arguments; + string reason = "No reason provided"; + if(argc > next_token) + reason = substring(vote_command, argv_start_index(next_token) - missing_chars, -1); - if (first_command == "kickban") command_arguments = strcat(ftos(autocvar_g_ban_default_bantime), " ", ftos(autocvar_g_ban_default_masksize), " ~"); - else command_arguments = reason; + string command_arguments = reason; + if (first_command == "kickban") + command_arguments = strcat(ftos(autocvar_g_ban_default_bantime), " ", ftos(autocvar_g_ban_default_masksize), " ~"); vote_parsed_command = strcat(first_command, " # ", ftos(etof(victim)), " ", command_arguments); - vote_parsed_display = strcat("^1", vote_command, " (^7", victim.netname, "^1): ", reason); + vote_parsed_display = sprintf("^1%s #%d ^7%s^1 %s", first_command, etof(victim), victim.netname, reason); } - else { print_to(caller, strcat("vcall: ", GetClientErrorString(accepted, argv(startpos + 1)), ".\n")); return false; } + else { print_to(caller, strcat("vcall: ", GetClientErrorString(accepted, argv(startpos + 1)), ".\n")); return 0; } break; } @@ -696,7 +691,7 @@ float VoteCommand_parse(entity caller, string vote_command, string vote_list, fl case "gotomap": // re-direct all map selection commands to gotomap { vote_command = ValidateMap(argv(startpos + 1), caller); - if (!vote_command) return false; + if (!vote_command) return -1; vote_parsed_command = strcat("gotomap ", vote_command); vote_parsed_display = strzone(strcat("^1", vote_parsed_command)); @@ -712,7 +707,7 @@ float VoteCommand_parse(entity caller, string vote_command, string vote_list, fl } } - return true; + return 1; } @@ -759,6 +754,7 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm case CMD_REQUEST_COMMAND: { float tmp_playercount = 0; + int parse_error; vote_command = VoteCommand_extractcommand(vote_command, 2, argc); @@ -791,11 +787,11 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); } - else if (!VoteCommand_parse(caller, vote_command, autocvar_sv_vote_commands, 2, argc)) + else if ((parse_error = VoteCommand_parse(caller, vote_command, autocvar_sv_vote_commands, 2, argc)) <= 0) { - print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); + if(parse_error == 0) + print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); } - else // everything went okay, continue with calling the vote { vote_caller = caller; // remember who called the vote @@ -813,10 +809,12 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm } FOREACH_CLIENT(IS_REAL_CLIENT(it), { ++tmp_playercount; }); - if (tmp_playercount > 1) Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_VOTE_CALL); // don't announce a "vote now" sound if player is alone + if (tmp_playercount > 1) + Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_VOTE_CALL); bprint("\{1}^2* ^3", OriginalCallerName(), "^2 calls a vote for ", vote_called_display, "\n"); - if (autocvar_sv_eventlog) GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); + if (autocvar_sv_eventlog) + GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); Nagger_VoteChanged(); VoteCount(true); // needed if you are the only one } @@ -848,24 +846,28 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co { case "do": { + int parse_error; vote_command = VoteCommand_extractcommand(vote_command, 3, argc); - if (!caller.vote_master) { print_to(caller, "^1You do not have vote master privelages."); } + if (!caller.vote_master) + print_to(caller, "^1You do not have vote master privileges."); else if (!VoteCommand_checknasty(vote_command)) { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); } - else if (!VoteCommand_parse(caller, vote_command, strcat(autocvar_sv_vote_commands, " ", autocvar_sv_vote_master_commands), 3, argc)) + else if ((parse_error = VoteCommand_parse(caller, vote_command, strcat(autocvar_sv_vote_commands, " ", autocvar_sv_vote_master_commands), 3, argc)) <= 0) { - print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); + if(parse_error == 0) + print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); } - else // everything went okay, proceed with command { localcmd(strcat(vote_parsed_command, "\n")); print_to(caller, strcat("Executing command '", vote_parsed_display, "' on server.")); bprint("\{1}^2* ^3", GetCallerName(caller), "^2 used their ^3master^2 status to do \"^2", vote_parsed_display, "^2\".\n"); - if (autocvar_sv_eventlog) GameLogEcho(strcat(":vote:vdo:", ftos(caller.playerid), ":", vote_parsed_display)); } + if (autocvar_sv_eventlog) + GameLogEcho(strcat(":vote:vdo:", ftos(caller.playerid), ":", vote_parsed_display)); + } return; } @@ -881,13 +883,14 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co { print_to(caller, strcat("Rejected vote master login from ", GetCallerName(caller))); } - else // everything went okay, proceed with giving this player master privilages { caller.vote_master = true; print_to(caller, strcat("Accepted vote master login from ", GetCallerName(caller))); bprint("\{1}^2* ^3", GetCallerName(caller), "^2 logged in as ^3master^2\n"); - if (autocvar_sv_eventlog) GameLogEcho(strcat(":vote:vlogin:", ftos(caller.playerid))); } + if (autocvar_sv_eventlog) + GameLogEcho(strcat(":vote:vlogin:", ftos(caller.playerid))); + } return; } @@ -907,7 +910,6 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co { print_to(caller, "^1You can not call a vote while a timeout is active."); } - else // everything went okay, continue with creating vote { vote_caller = caller; @@ -921,7 +923,8 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co caller.vote_waittime = time + autocvar_sv_vote_wait; bprint("\{1}^2* ^3", OriginalCallerName(), "^2 calls a vote to become ^3master^2.\n"); - if (autocvar_sv_eventlog) GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); + if (autocvar_sv_eventlog) + GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); Nagger_VoteChanged(); VoteCount(true); // needed if you are the only one } @@ -967,7 +970,9 @@ void VoteCommand_no(float request, entity caller) // CLIENT ONLY print_to(caller, "^1You rejected the vote."); caller.vote_selection = VOTE_SELECT_REJECT; msg_entity = caller; - if (!autocvar_sv_vote_singlecount) VoteCount(false); } + if (!autocvar_sv_vote_singlecount) + VoteCount(false); + } return; } @@ -1037,13 +1042,14 @@ void VoteCommand_yes(float request, entity caller) // CLIENT ONLY { print_to(caller, "^1You have already voted."); } - else // everything went okay, continue changing vote { print_to(caller, "^1You accepted the vote."); caller.vote_selection = VOTE_SELECT_ACCEPT; msg_entity = caller; - if (!autocvar_sv_vote_singlecount) VoteCount(false); } + if (!autocvar_sv_vote_singlecount) + VoteCount(false); + } return; }