X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcommand%2Fvote.qc;h=277720369bef3465542d76bb3650f97761e74885;hb=c2a4199c00da51fd0b6e88a440be4d6b654b9382;hp=f5c7f0ccb75da68c6dfcb616aebaf0e906f4bd23;hpb=9c79ffa77e3b07fa7e3c70b88e6e605f100ce4b6;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index f5c7f0ccb..277720369 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -1,6 +1,6 @@ // ============================================= // Server side voting code, reworked by Samual -// Last updated: December 14th, 2011 +// Last updated: December 27th, 2011 // ============================================= // Nagger for players to know status of voting @@ -367,7 +367,7 @@ void ReadyRestart_force() } // after a restart every players number of allowed timeouts gets reset, too - if(autocvar_sv_timeout) { FOR_EACH_REALPLAYER(tmp_player) { tmp_player.allowedTimeouts = autocvar_sv_timeout_number; } } + if(autocvar_sv_timeout) { FOR_EACH_REALPLAYER(tmp_player) { tmp_player.allowed_timeouts = autocvar_sv_timeout_number; } } //reset map immediately if this cvar is not set if not(autocvar_sv_ready_restart_after_countdown) { reset_map(TRUE); } @@ -512,7 +512,6 @@ string ValidateMap(string validated_map, entity caller) float VoteCommand_parse(entity caller, string vote_command, string vote_list, float startpos, float argc) { string first_command; - entity victim; first_command = argv(startpos); @@ -539,11 +538,23 @@ float VoteCommand_parse(entity caller, string vote_command, string vote_list, fl case "kick": case "kickban": // catch all kick/kickban commands { - victim = GetFilteredEntity(argv(startpos + 1)); - if not(victim) { return FALSE; } - // TODO: figure out how kick/kickban/ban commands work and re-write this to fit around them - vote_parsed_command = vote_command; - vote_parsed_display = strcat("^1", vote_command, " (^7", victim.netname, "^1): ", "todo"); + entity victim = GetIndexedEntity(argc, (startpos + 1)); + float accepted = VerifyClientEntity(victim, TRUE, FALSE); + + if(accepted > 0) + { + string reason = ((argc > next_token) ? substring(vote_command, argv_start_index(next_token), argv_end_index(-1) - argv_start_index(next_token)) : "No reason provided"); + string command_arguments; + + if(first_command == "kickban") + command_arguments = strcat(ftos(autocvar_g_ban_default_bantime), " ", ftos(autocvar_g_ban_default_masksize), " ~"); + else + command_arguments = reason; + + vote_parsed_command = strcat(first_command, " # ", ftos(num_for_edict(victim)), " ", command_arguments); + vote_parsed_display = strcat("^1", vote_command, " (^7", victim.netname, "^1): ", reason); + } + else { print_to(caller, strcat("vcall: ", GetClientErrorString(accepted, argv(startpos + 1)), ".\n")); return FALSE; } break; } @@ -600,7 +611,7 @@ void VoteCommand_abstain(float request, entity caller) // CLIENT ONLY default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote abstain"); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote abstain")); print_to(caller, " No arguments required."); return; } @@ -625,7 +636,7 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm if not(autocvar_sv_vote_call || !caller) { print_to(caller, "^1Vote calling is not allowed."); } 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(timeoutStatus) { print_to(caller, "^1You can not call a vote while a timeout is active."); } + else if(timeout_status) { print_to(caller, "^1You can not call a vote while a timeout is active."); } else if(caller && (time < caller.vote_waittime)) { print_to(caller, strcat("^1You have to wait ^2", ftos(ceil(caller.vote_waittime - time)), "^1 seconds before you can again call a vote.")); } else if not(VoteCommand_checknasty(vote_command)) { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); } else if not(VoteCommand_parse(caller, vote_command, autocvar_sv_vote_commands, 2, argc)) { print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); } @@ -660,10 +671,10 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote call command"); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote call command")); print_to(caller, " Where 'command' is the command to request a vote upon."); - print_to(caller, "Examples: call gotomap dance"); - print_to(caller, " call endmatch"); + print_to(caller, strcat("Examples: ", GetCommandPrefix(caller), " vote call gotomap dance")); + print_to(caller, strcat(" ", GetCommandPrefix(caller), " vote call endmatch")); return; } } @@ -719,6 +730,7 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co { if not(autocvar_sv_vote_master_callable) { print_to(caller, "^1Vote to become vote master is not allowed."); } else if(vote_called) { print_to(caller, "^1There is already a vote called."); } + else if(timeout_status) { print_to(caller, "^1You can not call a vote while a timeout is active."); } else // everything went okay, continue with creating vote { @@ -749,7 +761,7 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote master [action [command | password]]"); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote master [action [command | password]]")); print_to(caller, " If action is left blank, it calls a vote for you to become master."); print_to(caller, " Otherwise the actions are either 'do' a command or 'login' as master."); return; @@ -781,7 +793,7 @@ void VoteCommand_no(float request, entity caller) // CLIENT ONLY default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote no"); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote no")); print_to(caller, " No arguments required."); return; } @@ -805,7 +817,7 @@ void VoteCommand_status(float request, entity caller) // BOTH default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote status"); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote status")); print_to(caller, " No arguments required."); return; } @@ -828,7 +840,7 @@ void VoteCommand_stop(float request, entity caller) // BOTH default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote stop"); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote stop")); print_to(caller, " No arguments required."); return; } @@ -842,7 +854,7 @@ void VoteCommand_yes(float request, entity caller) // CLIENT ONLY case CMD_REQUEST_COMMAND: { if not(vote_called) { print_to(caller, "^1No vote called."); } - if not(caller.vote_selection == VOTE_SELECT_NULL || autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); } + else if not(caller.vote_selection == VOTE_SELECT_NULL || autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); } else // everything went okay, continue changing vote { @@ -858,14 +870,15 @@ void VoteCommand_yes(float request, entity caller) // CLIENT ONLY default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote yes"); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote yes")); print_to(caller, " No arguments required."); return; } } } -/* use this when creating a new command, making sure to place it in alphabetical order. +/* use this when creating a new command, making sure to place it in alphabetical order... also, +** ADD ALL NEW COMMANDS TO commands.cfg WITH PROPER ALIASES IN THE SAME FASHION! void VoteCommand_(float request) { switch(request) @@ -879,7 +892,7 @@ void VoteCommand_(float request) default: case CMD_REQUEST_USAGE: { - print_to(caller, "\nUsage:^3 vote "); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote "); print_to(caller, " No arguments required."); return; } @@ -897,7 +910,7 @@ void VoteCommand_(float request) VOTE_COMMAND("abstain", VoteCommand_abstain(request, caller), "Abstain your vote in current vote", VC_ASGNMNT_CLIENTONLY) \ VOTE_COMMAND("call", VoteCommand_call(request, caller, arguments, command), "Create a new vote for players to decide on", VC_ASGNMNT_BOTH) \ VOTE_COMMAND("help", VoteCommand_macro_help(caller, arguments), "Shows this information", VC_ASGNMNT_BOTH) \ - VOTE_COMMAND("master", VoteCommand_master(request, caller, arguments, command), "", VC_ASGNMNT_CLIENTONLY) \ + VOTE_COMMAND("master", VoteCommand_master(request, caller, arguments, command), "Full control over all voting and vote commands", VC_ASGNMNT_CLIENTONLY) \ VOTE_COMMAND("no", VoteCommand_no(request, caller), "Select no in current vote", VC_ASGNMNT_CLIENTONLY) \ VOTE_COMMAND("status", VoteCommand_status(request, caller), "Prints information about current vote", VC_ASGNMNT_BOTH) \ VOTE_COMMAND("stop", VoteCommand_stop(request, caller), "Immediately end a vote", VC_ASGNMNT_BOTH) \ @@ -910,17 +923,16 @@ void VoteCommand_macro_help(entity caller, float argc) if(argc == 2) // help display listing all commands { - print_to(caller, strcat("\nUsage:^3 ", command_origin, " vote COMMAND...^7, where possible commands are:")); - + print("\nVoting commands:\n"); #define VOTE_COMMAND(name,function,description,assignment) \ { if(Votecommand_check_assignment(caller, assignment)) { print_to(caller, strcat(" ^2", name, "^7: ", description)); } } VOTE_COMMANDS(0, caller, 0, "") #undef VOTE_COMMAND - print_to(caller, strcat("For help about specific commands, type ", command_origin, " vote help COMMAND")); - print_to(caller, "^7You can call a vote for or execute these commands:"); - print_to(caller, strcat("^3", autocvar_sv_vote_commands, "^7 and maybe further ^3arguments^7")); + print_to(caller, strcat("\nUsage:^3 ", command_origin, " vote COMMAND...^7, where possible commands are listed above.\n")); + print_to(caller, strcat("For help about a specific command, type ", command_origin, " vote help COMMAND")); + print_to(caller, strcat("\n^7You can call a vote for or execute these commands: ^3", autocvar_sv_vote_commands, "^7 and maybe further ^3arguments^7")); } else // usage for individual command {