// { votecoop void vote_check_coop () { int veto; if ( ( deathmatch && match_in_progress ) || intermission_running || match_over ) return; if ( !get_votes( OV_COOP ) ) return; veto = is_admins_vote( OV_COOP ); if( veto || !get_votes_req( OV_COOP, true ) ) { vote_clear( OV_COOP ); // toggle coop mode cvar_fset( "coop", coop = !cvar("coop") ); // set appropriate deathmatch cvar_fset( "deathmatch", deathmatch = !coop ); if ( veto ) G_bprint( 2, "%s\n", redtext(va("Coop mode %s by admin veto", OnOff(cvar("coop")))) ); else G_bprint( 2, "%s\n", redtext(va("Coop mode %s by majority vote", OnOff(cvar("coop")))) ); // and reload map if ( cvar("k_bloodfest") ) changelevel( coop ? g_globalvars.mapname : cvar_string( "k_defmap" ) ); else changelevel( coop ? "start" : g_globalvars.mapname ); return; } }
void ToggleMapLock () { float tmp; if( !is_adm( self ) ) return; tmp = cvar( "k_lockmap" ); if( tmp ) { cvar_fset( "k_lockmap", 0 ); if( !match_in_progress ) G_bprint(2, "%s unlocks map\n", self->netname); else G_sprint(self, 2, "Map unlocked\n"); return; } cvar_fset( "k_lockmap", 1 ); if( !match_in_progress ) G_bprint(2, "%s locks map\n", self->netname); else G_sprint(self, 2, "Map is locked\n"); }
void mctf() { if( match_in_progress && !k_matchLess ) return; if ( !isCTF() ) { G_sprint ( self, 2, "Can't do this in non CTF mode\n" ); return; } if ( !cvar("k_ctf_hook") && !cvar("k_ctf_runes") ) { G_sprint ( self, 2, "Already done\n" ); return; } cvar_fset("k_ctf_hook", 0); cvar_fset("k_ctf_runes", 0); G_sprint ( self, 2, "%s turn off: %s\n", getname(self), redtext("hook & runes") ); // In matchless mode, toggling runes and hook normally won't do anything since match is already in progress. Call this to handle this scenario. if (k_matchLess) { // If a player is carrying a rune when runes are disabled, get rid of it if (!cvar("k_ctf_runes")) { gedict_t * p; for (p = world; (p = find_plr(p)); ) { p->ctf_flag -= (p->ctf_flag & (CTF_RUNE_MASK)); p->maxspeed = cvar("sv_maxspeed"); // Reset speed, in case was carrying haste } } SpawnRunes( 0 ); AddHook ( false ); } }
void AdminForceBreak () { if( is_adm( self ) && self->ct != ctPlayer && !match_in_progress ) { k_force = 0; return; } if( !is_adm( self ) || !match_in_progress ) return; if( self->ct != ctPlayer && match_in_progress == 1 ) { k_force = 0; StopTimer( 1 ); return; } if( k_oldmaxspeed ) // huh??? cvar_fset( "sv_maxspeed", k_oldmaxspeed ); G_bprint(2, "%s forces a break!\n", self->netname); EndMatch( 0 ); }
void vote_check_teamoverlay () { int veto; if ( match_in_progress || intermission_running || match_over ) return; if ( !get_votes( OV_TEAMOVERLAY ) ) return; veto = is_admins_vote( OV_TEAMOVERLAY ); if( veto || !get_votes_req( OV_TEAMOVERLAY, true ) ) { vote_clear( OV_TEAMOVERLAY ); // Toggle teamoverlay. cvar_fset("k_teamoverlay", !cvar("k_teamoverlay")); if ( veto ) G_bprint(2, "%s\n", redtext(va("Teamoverlay %s by admin veto", OnOff(cvar("k_teamoverlay"))))); else G_bprint(2, "%s\n", redtext(va("Teamoverlay %s by majority vote", OnOff(cvar("k_teamoverlay"))))); return; } }
void BotPathCheck (gedict_t* self, gedict_t* touch_marker) { if (self->fb.debug_path && self->fb.fixed_goal == touch_marker) { G_bprint (2, "at goal, path complete. %4.3f seconds\n", g_globalvars.time - self->fb.debug_path_start); self->fb.fixed_goal = NULL; self->fb.debug_path = false; self->fb.debug_path_start = 0; cvar_fset (FB_CVAR_DEBUG, 0); } }
void mctf() { if( match_in_progress ) return; if ( !isCTF() ) { G_sprint ( self, 2, "Can't do this in non CTF mode\n" ); return; } if ( !cvar("k_ctf_hook") && !cvar("k_ctf_runes") ) { G_sprint ( self, 2, "Already done\n" ); return; } cvar_fset("k_ctf_hook", 0); cvar_fset("k_ctf_runes", 0); G_sprint ( self, 2, "%s turn off: %s\n", getname(self), redtext("hook & runes") ); }
void vote_check_nospecs () { int veto; if ( match_in_progress || intermission_running || match_over ) return; if ( !get_votes( OV_NOSPECS ) ) return; veto = is_admins_vote( OV_NOSPECS ); if( veto || !get_votes_req( OV_NOSPECS, true ) ) { vote_clear( OV_NOSPECS ); // set no specs mode cvar_fset("_k_nospecs", !cvar("_k_nospecs")); if ( veto ) G_bprint(2, "%s\n", redtext(va("No spectators mode %s by admin veto", OnOff(cvar("_k_nospecs"))))); else G_bprint(2, "%s\n", redtext(va("No spectators mode %s by majority vote", OnOff(cvar("_k_nospecs"))))); // kick specs if ( cvar("_k_nospecs") ) { gedict_t *spec; for ( spec = world; (spec = find_spc( spec )); ) { if ( VIP( spec ) & ALLOWED_NOSPECS_VIPS ) continue; // don't kick this VIP if ( is_real_adm(spec) ) continue; // don't kick real admin stuffcmd(spec, "disconnect\n"); // FIXME: stupid way } } return; } }
void TogglePreWar () { int k_prewar = bound(0, cvar( "k_prewar" ), 2); if (!is_adm(self)) { return; } if (++k_prewar > 2) { k_prewar = 0; } switch ( k_prewar ) { case 1: if( !match_in_progress ) G_bprint(2, "Players may fire before match\n"); else G_sprint(self, 2, "Players may fire before match\n"); break; case 2: if ( !match_in_progress ) { G_bprint(2, "Players may fire and jump when %s\n", redtext("ready")); PlayersStopFire(); } else G_sprint(self, 2, "Players may fire and jump when %s\n", redtext("ready")); break; case 0: default: if ( !match_in_progress ) { G_bprint(2, "Players may %s fire before match\n", redtext("not")); PlayersStopFire(); } else G_sprint(self, 2, "Players may %s fire before match\n", redtext("not")); break; } cvar_fset( "k_prewar", k_prewar ); }