X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcommand%2Fvote.qc;h=ffc81c4685794480cf749cea7b87129134b8de71;hb=acc08b9655874164549bc2600f78c6edbc3c084a;hp=16b636c85158ebac30f50159f4d9b1141f7c0119;hpb=67610c5b92e218cc245c040209c1a79ab6b02758;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index 16b636c85..ffc81c468 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -1,32 +1,29 @@ #include "vote.qh" -#include -#include -#include -#include - #include -#include "vote.qh" - -#include "common.qh" - -#include "../damage.qh" -#include -#include -#include "../teamplay.qh" -#include "../race.qh" -#include "../round_handler.qh" -#include "../scores.qh" - -#include -#include - #include -#include +#include +#include #include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // ============================================= // Server side voting code, reworked by Samual @@ -353,6 +350,20 @@ void reset_map(bool dorespawn) shuffleteams(); shuffleteams_on_reset_map = false; } + + FOREACH_CLIENT(IS_PLAYER(it), + { + if (STAT(FROZEN, it)) + Unfreeze(it, false); + player_powerups_remove_all(it); + entity store = PS(it); + if (store) + { + Inventory_clear(store.inventory); + Inventory_update(store); + } + }); + MUTATOR_CALLHOOK(reset_map_global); FOREACH_ENTITY_FLOAT_ORDERED(pure_data, false, @@ -373,8 +384,6 @@ void reset_map(bool dorespawn) if (it.reset2) it.reset2(it); }); - FOREACH_CLIENT(IS_PLAYER(it) && STAT(FROZEN, it), { Unfreeze(it, false); }); - // Moving the player reset code here since the player-reset depends // on spawnpoint entities which have to be reset first --blub if (dorespawn) @@ -391,7 +400,6 @@ void reset_map(bool dorespawn) restart_mapalreadyrestarted to 1 after the countdown ended or when sv_ready_restart_after_countdown is not used and countdown is still running */ - // NEW: changed behaviour so that it prevents that previous spectators/observers suddenly spawn as players // PlayerScore_Clear(it); CS(it).killcount = 0; // stop the player from moving so that he stands still once he gets respawned @@ -707,7 +715,11 @@ int VoteCommand_parse(entity caller, string vote_command, string vote_list, floa vote_parsed_command = strcat(first_command, " # ", ftos(etof(victim)), " ", command_arguments); 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 0; } + else + { + print_to(caller, strcat("vcall: ", GetClientErrorString(accepted, argv(startpos + 1)), ".\n")); + return 0; + } break; } @@ -795,7 +807,9 @@ void VoteCommand_abstain(int request, entity caller) // CLIENT ONLY print_to(caller, "^1You abstained from your vote."); caller.vote_selection = VOTE_SELECT_ABSTAIN; msg_entity = caller; - if (!autocvar_sv_vote_singlecount) VoteCount(false); } + if (!autocvar_sv_vote_singlecount) + VoteCount(false); + } return; } @@ -810,6 +824,11 @@ void VoteCommand_abstain(int request, entity caller) // CLIENT ONLY } } +void print_available_commands_to(entity caller) +{ + print_to(caller, strcat("You can call a vote for or execute these commands: ^3", autocvar_sv_vote_commands, "^7 and maybe further ^3arguments^7")); +} + void VoteCommand_call(int request, entity caller, int argc, string vote_command) // BOTH { switch (request) @@ -821,7 +840,10 @@ void VoteCommand_call(int request, entity caller, int argc, string vote_command) vote_command = VoteCommand_extractcommand(vote_command, 2, argc); - if (!autocvar_sv_vote_call && caller) { print_to(caller, "^1Vote calling is not allowed."); } + if (!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."); @@ -848,12 +870,17 @@ void VoteCommand_call(int request, entity caller, int argc, string vote_command) } else if (!VoteCommand_checknasty(vote_command)) { - print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); + print_to(caller, "^1Syntax error in command."); } else if ((parse_error = VoteCommand_parse(caller, vote_command, autocvar_sv_vote_commands, 2, argc)) <= 0) { if(parse_error == 0) - print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); + { + if (vote_called_command == "") + VoteCommand_call(CMD_REQUEST_USAGE, caller, argc, vote_command); + else + print_to(caller, "^1This command is not acceptable or not available."); + } } else // everything went okay, continue with calling the vote { @@ -889,10 +916,12 @@ void VoteCommand_call(int request, entity caller, int argc, string vote_command) default: case CMD_REQUEST_USAGE: { - 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, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote call ")); + print_to(caller, " Where is the command to request a vote upon."); print_to(caller, strcat("Examples: ", GetCommandPrefix(caller), " vote call gotomap dance")); print_to(caller, strcat(" ", GetCommandPrefix(caller), " vote call endmatch")); + print_available_commands_to(caller); + print_to(caller, "Shortcuts: ^2vcall , vend, vmap, vkick, ..."); return; } } @@ -917,12 +946,17 @@ void VoteCommand_master(int request, entity caller, int argc, string vote_comman 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."); + print_to(caller, "^1Syntax error in command."); } else if ((parse_error = VoteCommand_parse(caller, vote_command, strcat(autocvar_sv_vote_commands, " ", autocvar_sv_vote_master_commands), 3, argc)) <= 0) { if(parse_error == 0) - print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); + { + if (vote_called_command == "") + VoteCommand_master(CMD_REQUEST_USAGE, caller, argc, vote_command); + else + print_to(caller, "^1This command is not acceptable or not available."); + } } else // everything went okay, proceed with command { @@ -1005,9 +1039,9 @@ void VoteCommand_master(int request, entity caller, int argc, string vote_comman default: case CMD_REQUEST_USAGE: { - 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."); + print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " vote master [ [ | ]]")); + print_to(caller, " If is left blank, it calls a vote for you to become master."); + print_to(caller, " Otherwise it can be either 'do' (to run ) or 'login' as master."); return; } } @@ -1179,11 +1213,11 @@ void VoteCommand_macro_help(entity caller, int argc) { if (Votecommand_check_assignment(caller, assignment)) { print_to(caller, strcat(" ^2", name, "^7: ", description)); } } VOTE_COMMANDS(0, caller, 0, ""); -#undef VOTE_COMMAND + #undef VOTE_COMMAND - 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")); + print_to(caller, strcat("\nUsage:^3 ", command_origin, " vote ^7, where possible commands are listed above.\n")); + print_to(caller, strcat("For help about a specific command, type ", command_origin, " vote help ")); + print_available_commands_to(caller); } else // usage for individual command { @@ -1191,12 +1225,12 @@ void VoteCommand_macro_help(entity caller, int argc) { if (Votecommand_check_assignment(caller, assignment)) { if (name == strtolower(argv(2))) { function; return; } } } VOTE_COMMANDS(CMD_REQUEST_USAGE, caller, argc, ""); -#undef VOTE_COMMAND + #undef VOTE_COMMAND string cvarname = strcat("sv_vote_command_help_", argv(2)); if(cvar_type(cvarname) & CVAR_TYPEFLAG_EXISTS) wordwrap_sprint(caller, cvar_string(cvarname), 1000); - else + else if (argv(2) != "") print_to(caller, "No documentation exists for this vote"); } } @@ -1207,7 +1241,7 @@ float VoteCommand_macro_command(entity caller, int argc, string vote_command) { if (Votecommand_check_assignment(caller, assignment)) { if (name == strtolower(argv(1))) { function; return true; } } } VOTE_COMMANDS(CMD_REQUEST_COMMAND, caller, argc, vote_command); -#undef VOTE_COMMAND + #undef VOTE_COMMAND return false; }