X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fcommand%2Fvote.qc;h=44b8acb8e7a8ff5fb9ea7e18688e269b3bd66be9;hp=982e55c9619ac9578d03c421421bfc5dc873aa58;hb=429e52163f53e75b848135f076b77c4eb43935ac;hpb=c0da80fe6125a43ee99a90808ac6f9d0ddcf88c8 diff --git a/qcsrc/server/command/vote.qc b/qcsrc/server/command/vote.qc index 982e55c961..44b8acb8e7 100644 --- a/qcsrc/server/command/vote.qc +++ b/qcsrc/server/command/vote.qc @@ -1,5 +1,5 @@ #include "vote.qh" -#include +#include #include "vote.qh" #include "common.qh" @@ -10,9 +10,10 @@ #include "../round_handler.qh" #include "../scores.qh" -#include "../mutators/all.qh" +#include "../mutators/_mod.qh" #include +#include #include #include #include @@ -128,7 +129,7 @@ void VoteReset() } vote_called = VOTE_NULL; - vote_caller = world; + vote_caller = NULL; vote_caller_name = string_null; vote_endtime = 0; @@ -160,21 +161,21 @@ void VoteAccept() if (vote_caller) vote_caller.vote_waittime = 0; // people like your votes, you don't need to wait to vote again VoteReset(); - Send_Notification(NOTIF_ALL, world, MSG_ANNCE, ANNCE_VOTE_ACCEPT); + Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_VOTE_ACCEPT); } void VoteReject() { bprint("\{1}^2* ^3", OriginalCallerName(), "^2's vote for ", vote_called_display, "^2 was rejected\n"); VoteReset(); - Send_Notification(NOTIF_ALL, world, MSG_ANNCE, ANNCE_VOTE_FAIL); + Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_VOTE_FAIL); } void VoteTimeout() { bprint("\{1}^2* ^3", OriginalCallerName(), "^2's vote for ", vote_called_display, "^2 timed out\n"); VoteReset(); - Send_Notification(NOTIF_ALL, world, MSG_ANNCE, ANNCE_VOTE_FAIL); + Send_Notification(NOTIF_ALL, NULL, MSG_ANNCE, ANNCE_VOTE_FAIL); } void VoteSpam(float notvoters, float mincount, string result) @@ -333,26 +334,32 @@ void VoteThink() // Resets the state of all clients, items, weapons, waypoints, ... of the map. void reset_map(bool dorespawn) { - if (time <= game_starttime && round_handler_IsActive()) round_handler_Reset(game_starttime); + if (time <= game_starttime) + { + if (gameover) + return; + if (round_handler_IsActive()) + round_handler_Reset(game_starttime); + } MUTATOR_CALLHOOK(reset_map_global); FOREACH_ENTITY_ORDERED(IS_NOT_A_CLIENT(it), { if (it.reset) { - WITHSELF(it, it.reset(it)); + it.reset(it); continue; } if (it.team_saved) it.team = it.team_saved; - if (it.flags & FL_PROJECTILE) remove(it); // remove any projectiles left + if (it.flags & FL_PROJECTILE) delete(it); // remove any projectiles left }); // Waypoints and assault start come LAST FOREACH_ENTITY_ORDERED(IS_NOT_A_CLIENT(it), { - if (it.reset2) WITHSELF(it, it.reset2()); + if (it.reset2) it.reset2(it); }); - FOREACH_CLIENT(IS_PLAYER(it) && STAT(FROZEN, it), LAMBDA(WITHSELF(it, Unfreeze(it)))); + FOREACH_CLIENT(IS_PLAYER(it) && STAT(FROZEN, it), LAMBDA(Unfreeze(it))); // Moving the player reset code here since the player-reset depends // on spawnpoint entities which have to be reset first --blub @@ -378,7 +385,7 @@ void reset_map(bool dorespawn) it.velocity = '0 0 0'; it.avelocity = '0 0 0'; it.movement = '0 0 0'; - WITHSELF(it, PutClientInServer()); + PutClientInServer(it); } } )); @@ -392,12 +399,15 @@ void ReadyRestart_think(entity this) restart_mapalreadyrestarted = true; reset_map(true); Score_ClearAll(); - remove(this); + delete(this); } // Forces a restart of the game without actually reloading the map // this is a mess... void ReadyRestart_force() { + if (time <= game_starttime && gameover) + return; + bprint("^1Server is restarting...\n"); VoteReset(); @@ -455,7 +465,7 @@ void ReadyRestart_force() void ReadyRestart() { // no assault support yet... - if (g_assault | gameover | intermission_running | race_completing) localcmd("restart\n"); + if (g_assault || gameover || race_completing) localcmd("restart\n"); else localcmd("\nsv_hook_gamerestart\n"); // Reset ALL scores, but only do that at the beginning of the countdown if sv_ready_restart_after_countdown is off! @@ -801,7 +811,7 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm } FOREACH_CLIENT(IS_REAL_CLIENT(it), LAMBDA(++tmp_playercount)); - if (tmp_playercount > 1) Send_Notification(NOTIF_ALL, world, 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); // don't announce a "vote now" sound if player is alone 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));