-#if defined(CSQC)
-#elif defined(MENUQC)
-#elif defined(SVQC)
- #include "../../dpdefs/progsdefs.qh"
- #include "../../dpdefs/dpextensions.qh"
- #include "../../common/constants.qh"
- #include "../../common/util.qh"
- #include "../../common/command/shared_defs.qh"
- #include "../autocvars.qh"
- #include "../constants.qh"
- #include "../defs.qh"
- #include "../../common/notifications.qh"
- #include "../mutators/mutators_include.qh"
- #include "../../common/mapinfo.qh"
- #include "common.qh"
- #include "vote.qh"
- #include "../../common/playerstats.qh"
- #include "../scores.qh"
- #include "../race.qh"
- #include "../round_handler.qh"
-#endif
+#include "../../common/command/command.qh"
+#include "vote.qh"
+#include "../_all.qh"
+
+#include "common.qh"
+
+#include "../g_damage.qh"
+#include "../g_world.qh"
+#include "../race.qh"
+#include "../round_handler.qh"
+#include "../scores.qh"
+
+#include "../mutators/mutators_include.qh"
+
+#include "../../common/constants.qh"
+#include "../../common/mapinfo.qh"
+#include "../../common/notifications.qh"
+#include "../../common/playerstats.qh"
+#include "../../common/util.qh"
// =============================================
// Server side voting code, reworked by Samual
// =============================================
// Nagger for players to know status of voting
-float Nagger_SendEntity(entity to, float sendflags)
+bool Nagger_SendEntity(entity this, entity to, float sendflags)
{
int nags, i, f, b;
entity e;
nagger.SendFlags |= 1;
}
+// If the vote_caller is still here, return their name, otherwise vote_caller_name
+string OriginalCallerName()
+{
+ if (IS_REAL_CLIENT(vote_caller))
+ return vote_caller.netname;
+ return vote_caller_name;
+}
// =======================
// Game logic for voting
{
strunzone(vote_called_command);
strunzone(vote_called_display);
+ strunzone(vote_caller_name);
}
vote_called = VOTE_NULL;
vote_caller = world;
+ vote_caller_name = string_null;
vote_endtime = 0;
vote_called_command = string_null;
void VoteStop(entity stopper)
{
- bprint("\{1}^2* ^3", GetCallerName(stopper), "^2 stopped ^3", GetCallerName(vote_caller), "^2's vote\n");
+ bprint("\{1}^2* ^3", GetCallerName(stopper), "^2 stopped ^3", OriginalCallerName(), "^2's vote\n");
if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vstop:", ftos(stopper.playerid))); }
// Don't force them to wait for next vote, this way they can e.g. correct their vote.
void VoteAccept()
{
- bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2's vote for ^1", vote_called_display, "^2 was accepted\n");
+ bprint("\{1}^2* ^3", OriginalCallerName(), "^2's vote for ^1", vote_called_display, "^2 was accepted\n");
if((vote_called == VOTE_MASTER) && vote_caller)
vote_caller.vote_master = 1;
void VoteReject()
{
- bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2's vote for ", vote_called_display, "^2 was rejected\n");
+ 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);
}
void VoteTimeout()
{
- bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2's vote for ", vote_called_display, "^2 timed out\n");
+ 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);
}
switch(tmp_player.vote_selection)
{
case VOTE_SELECT_REJECT: { ++vote_reject_count; { if(IS_PLAYER(tmp_player)) ++vote_real_reject_count; } break; }
- case VOTE_SELECT_ACCEPT: { ++vote_accept_count; { if(IS_PLAYER(tmp_player)) ++vote_real_reject_count; } break; }
+ case VOTE_SELECT_ACCEPT: { ++vote_accept_count; { if(IS_PLAYER(tmp_player)) ++vote_real_accept_count; } break; }
case VOTE_SELECT_ABSTAIN: { ++vote_abstain_count; { if(IS_PLAYER(tmp_player)) ++vote_real_abstain_count; } break; }
default: break;
}
// Resets the state of all clients, items, weapons, waypoints, ... of the map.
void reset_map(float dorespawn)
-{
- entity oldself;
- oldself = self;
+{SELFPARAM();
if(time <= game_starttime && round_handler_IsActive())
round_handler_Reset(game_starttime);
MUTATOR_CALLHOOK(reset_map_global);
- for(self = world; (self = nextent(self)); )
- if(IS_NOT_A_CLIENT(self))
+ for(entity e = world; (e = nextent(e)); )
{
- if(self.reset)
+ setself(e);
+ if(IS_NOT_A_CLIENT(self))
{
- self.reset();
- continue;
- }
+ if(self.reset)
+ {
+ self.reset();
+ continue;
+ }
- if(self.team_saved)
- self.team = self.team_saved;
+ if(self.team_saved)
+ self.team = self.team_saved;
- if(self.flags & FL_PROJECTILE) // remove any projectiles left
- remove(self);
+ if(self.flags & FL_PROJECTILE) // remove any projectiles left
+ remove(self);
+ }
}
// Waypoints and assault start come LAST
- for(self = world; (self = nextent(self)); )
- if(IS_NOT_A_CLIENT(self))
+ for(entity e = world; (e = nextent(e)); )
{
- if(self.reset2)
+ setself(e);
+ if(IS_NOT_A_CLIENT(self))
{
- self.reset2();
- continue;
+ if(self.reset2)
+ {
+ self.reset2();
+ continue;
+ }
}
}
- FOR_EACH_PLAYER(self)
- if(self.frozen)
- Unfreeze(self);
+ entity e;
+ FOR_EACH_PLAYER(e)
+ if(e.frozen)
+ {
+ WITH(entity, self, e, Unfreeze(self));
+ }
// Moving the player reset code here since the player-reset depends
// on spawnpoint entities which have to be reset first --blub
if(dorespawn)
if(!MUTATOR_CALLHOOK(reset_map_players))
- FOR_EACH_CLIENT(self) // reset all players
+ FOR_EACH_CLIENT(e) // reset all players
{
+ setself(e);
/*
only reset players if a restart countdown is active
this can either be due to cvar sv_ready_restart_after_countdown having set
if(g_keyhunt)
kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round + (game_starttime - time), kh_StartRound);
- self = oldself;
+ setself(this);
}
// Restarts the map after the countdown is over (and cvar sv_ready_restart_after_countdown is set)
void ReadyRestart_think()
-{
+{SELFPARAM();
restart_mapalreadyrestarted = 1;
reset_map(true);
Score_ClearAll();
else // everything went okay, continue with calling the vote
{
vote_caller = caller; // remember who called the vote
+ vote_caller_name = strzone(GetCallerName(vote_caller));
vote_called = VOTE_NORMAL;
vote_called_command = strzone(vote_parsed_command);
vote_called_display = strzone(vote_parsed_display);
FOR_EACH_REALCLIENT(tmp_player) { ++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
- bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2 calls a vote for ", vote_called_display, "\n");
+ 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)); }
Nagger_VoteChanged();
VoteCount(true); // needed if you are the only one
else // everything went okay, continue with creating vote
{
vote_caller = caller;
+ vote_caller_name = strzone(GetCallerName(vote_caller));
vote_called = VOTE_MASTER;
vote_called_command = strzone("XXX");
vote_called_display = strzone("^3master");
caller.vote_selection = VOTE_SELECT_ACCEPT;
caller.vote_waittime = time + autocvar_sv_vote_wait;
- bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2 calls a vote to become ^3master^2.\n");
+ 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)); }
Nagger_VoteChanged();
VoteCount(true); // needed if you are the only one
case CMD_REQUEST_COMMAND:
{
if(vote_called)
- print_to(caller, strcat("^7Vote for ", vote_called_display, "^7 called by ^7", GetCallerName(vote_caller), "^7."));
+ print_to(caller, strcat("^7Vote for ", vote_called_display, "^7 called by ^7", OriginalCallerName(), "^7."));
else
print_to(caller, "^1No vote called.");