Admin management

These commands are used for managing your server administrators. With SAPP admins, you can allow your server administrators to use certain commands based on a tiered system of levels, and higher level admins can use more commands. In SAPP, there are two flavors of admins: CD-key based admins as well as admins based on profile name and password.

The use of these commands is completely optional if you want to exclusively use the vanilla rcon-password system without setting up any SAPP admins on your server. SAPP enables brute force protection to rcon, and temporarily sets the level of the player to 4 upon success.

Note: Admins are not kicked by afk_kick and ping_kick.
Note 2: Commands are accessible via console, chat text (place \ [or whatever you set with cmdstart command] before each command), and from the init.txt files.

CD-Key based Admin Management

These admins are automatically authenticated upon joining the server based on CD-key hash and, optionally, their IP. If your admin shares CD keys, then using an IP is recommended

Command Effect Level
adminadd <player expr> <level> [allowed IP ranges…]

Add a CD-Key based admin. You can also provide any number of IP ranges which uses CIDR addressing.

If you want to allow admins to use this command, you will need to configure the adminadd_samelevel command.

0
adminlevel <index> <level> Set a new level for a CD-Key based admin. 0
admindel <index>

Remove a CD-Key based admin.

If you want to allow admins to use this command, you will need to configure the adminadel_samelevel command.

0
admins Display a list of CD-Key based admins. 4

Name and Password based Admin Management

These admins must use the login command to be authenticated and must have the correct profile name and provide the correct password. This system can be more secure than automatically authenticating the user, especially if a user uses the same PC as someone else.

Note that if someone steals your name, while they may not be able to log into your admin account, you will not be able to log into your own admin account. If you want protection against this, you will want a backup method of logging in. Alternatively, you can create a script that kicks users with certain names who have not logged in after a period of time.

Name-based admins can also use remote console if it’s enabled on the server.

Command Effect Level
admin_add <player expr> <password> <level> Add a name and password based admin. 4
admin_add_manually <name> <password> <level> Add a name and password based admin that is not present on the server. 4
admin_change_pw <index> <password> Change a name and password based admin’s password. 4
admin_change_level <index> <level> Change a name and password based admin’s level. 4
admin_del <index> Delete a name and password based admin. 4
admin_list List name and password based admins. 4
change_password <old password> <new password> Change the password of the currently logged in name and password based admin. 0
login <password> Log into a name and password based admin account. This command’s level and name cannot be modified with setcmd. -1

Command levels

Each admin level can use the commands of the lower admin levels.

You can change the name and the level of each command with the setcmd command!
Examples: setcmd k kick will change 'k' command to 'kick', setcmd k 3 will change 'k' command to level 3

Commands by level
Level -1 (player) Commands:
info, stats, sv_stats, whatsnext, about, login, lead
Level 0 Commands:
v, afk, kdr, uptime, cpu, files, change_password
Level 1 Commands:
afks, skips, aimbot_scores
Level 2 Commands:
pl, k, textban, textbans, textunban, mute, mutes, unmute, say, tell, st, balance_teams
Level 3 Commands:
b, bans, ub, ip, ipban, ipbans, ipunban, d, inf, password, map, maplist
Level 4 Commands:
Naughty Commands: s, kill, kills, assists, deaths, god, ungod, lag, unlag, camo, boost, loc add, loc del, loc list, loc listall, t, m, tp, hp, sh, ammo, battery, mag, nades, vexit, venter, wdel, wadd, spawn, despawn, olist, random_bonus, etc :D
Admin Management v1: adminadd, admin_change_level, admindel, admins
Admin Management v2: admin add, admin add_manually, admin change_pw, admin change_level, admin del, admin list
Event system, makros: event *, eventdel, events, cmd add, cmd del, cmd list, wait, w8
Map Voting: mapvotes, mapvote_add, mapvote_del, max_votes
Server Management: rcon_password, timeout, afk_kick, ping_kick, map_skip, spawn_protection, anticamp, aimbot_ban, map_skip, antispam, anticaps, antihalofp, adminban, coldsnap_ag, save_scores, block_tc, unlock_console_log, sapp_console, full_ipban, v1, v2, cmdstart, cmdstart1, say_prefix, msg_prefix, text, log, log_note, log_rotation, max_idle, setcmd, set_ccolor, list, beep, etc...
+ All Basic and Devmode Commands

Configure Map Votes

Similar to a map cycle, map voting puts the server on a continuous loop of games, but it also gives players the option to choose their next game. The map vote is also non-volatile (it’s saved to a file, thus retained when the server is reloaded), and you can edit map votes as they’re being played.

You can hide map voting entries if there are too many or not enough players. This will only hide entries, thus the number of votes displayed will be reduced.

Note: Make sure your map vote covers your entire possible range of players. If SAPP cannot find a game that can be loaded with the current number of players, the minimum or maximum player count may be ignored when picking the next game.

Note: Enabling map voting will disable a running map cycle.

To set up map voting, you can edit your mapvotes.txt, or use SAPP’s map votes commands. This is how each line in mapvotes.txt file is formatted:
map
:game variant:name:minimum players:maximum players

Command Usage Effect

mapvote [enabled]

Enable map voting at the end of each game.

Default: false

mapvote_add <map> <game variant> <name> [minimum players] [maximum players] [index]

Optionally, the minimum players and maximum players can be added (by default they’re 0 and 16, respectively), and the game can also be inserted at a certain index, moving games at the index and afterwards after the index.

mapvote_del <index>

Delete a map vote entry.

mapvotes

List map votes.

max_votes [count]

This is the maximum displayed votes per round. However, if your map voting requires a certain number of players, then there may be less votes displayed if these games are unavailable.

Default: 5

Event system

Event system Events were introduced to let server admins customize actions performed by server when something happens. For example, you can enable kick on third betray with the following command:
event_tk $tk=3 'sv_kick $n'


General syntax for adding events is: event_[type] [event condition] 'command'


Here is the list of variables that can be used in event's command line and also as argument:

$n - PlayerIndex from sv_players / pl
$name - Player's name
$hash - Player's cd-key hash
$ip - Player's ip
$tk - Player's TK (betray) count
$kills - Player's kill count
$assists - Player's assist count
$deaths
- Player's death count
$suicides
- Player's suicide count
$streak -
Killstreak count of the player (number of kills without die)
$combo -
Combo count, like 2: double kill, 3: triple kill etc.
$score
- Player's CTF score count
$botscore - The player's current aimbot score
$x - Player's x coordinate
$y - Player's y coordinate
$z - Player's z coordinate
$hp - Player's health
$sh - Player's shield
$invis - 0: Player is visible, 1: Player is invisible
$team - Player's team
$oteam - Opposite team of the player
$lvl - Admin level of the player, not admin: -1, admin : 0 to 4
$map - The name of the current map
$mode - The name of the current gamemode
$gt - The type of the current game (ex: ctf, slayer, etc.)
$svname - The name of the server
$pn - The number of the players in the server
$reds - The number of the players in the red team
$blues - The number of the players in the blue team
$rand - Gives a random number from 1 to 16

If an event doesn't have any arguments, it will execute always when its get called. If it has arguments, it will only execute if all passed. The operators in the arguments can be the following:
: and !: at a string, ex: $map:bloodgulch, $mode!:cbctf, $name:New1337
=  !=  >  =>  <  <=  at a number, ex: $kills=25, $lvl>=0, $kills<$deaths, etc.
ps.: !: and != referrers to "not equal"

event_alive event is executed once a second if the player is alive
event_tk arguments 'command' event is executed when a player betrays somebody
event_kill arguments 'command' event is executed when a player kills someone. special argument: $killed; 1-16 the player who got killed by the current one
event_score arguments 'command' event is executed when a player Captures a Flag.
event_suicide arguments 'command' event is executed when a player committed suicide
event_start arguments 'command' event is executed when a map starts
event_end arguments 'command' event is executed when a specified map ends
event_join arguments 'command' event is executed when player joins the server
event_leave arguments 'command' event is executed when player leaves the server
event_spawn arguments 'command' event is executed when player spawns
event_die arguments 'command' event is executed when player dies. special argument: $killer; -1:"died", 0:player was killed by a vehicle, ai, "guardians", 1-16: the $n of the player who killed the current one
event_teamswitch arguments 'command' event executed on player's team change.
event_wpickup arguments 'command' event executed when a player picks up a weapon. special argument: $type; 1-weapon, 2-frag, 3-plasma nade
event_venter arguments 'command' event executed when a player enters to a vehicle
event_vexit arguments 'command' event executed when a player exits from a vehicle
event_snap arguments 'command' event executed when a player snaps to another player (if aimbot scan is enabled). Special argument: $score, the amount of score gained with this snap
event_camp arguments 'command' special event for the command anticamp, executes when a player is camping and kills a player, special argument: $campkills, the number of kills that the player gained during camp
event_warp arguments 'command' event executed after the player warped 'n' amount of times defined with 'antiwarp n' command (if n > 0). Note that the number of warps of a player will be reset to 0 after the player didn't warp for 5 seconds.
event_login arguments 'command' event executed when an admin logged in with the login command
events Displays all events
eventdel index Deletes event from queue. Use 'events' to find index
wait n Wait n milliseconds before executing next command (1 second = 1000 milliseconds)
w8 n Wait n seconds before executing next command

See the example below:

Place this into the "gametypes folder"\sapp\events.txt: (for ex "C:\Users\Username\Documents\My Games\Halo CE\sapp", or cg\sapp in Gameservers)

event_join $lvl>1 'wait 1000;say * "Admin $name has joined!"'
event_join 'w8 10;say $n "Please follow the rules or you might get kicked or banned!" '
event_kill $kills=25 'say $n "25 kills, not bad $name!" '
event_kill $kills=100 'say $n "WoW, you have 100 kills $name!" '
event_kill $kills=500 'say $n "MDROFLOLMFAOMFG $name, you have 500 kills !!!" '
event_score 'say $n "Good Job, $name!" '
event_tk 'say $n "$name do not betray your teammates you idiot!" '
event_start 'w8 15;say * "Map skipping is enabled! Type SKIP to vote to skip this map!"'
event_end 'say * "Server Powered by SAPP, xhalo.tk"'
event_teamswitch 'say $n "Welcome to the $team team, $name!" '

Note: Do NOT use the ' (apostrophe) character in the say command at the events!
(Example: Good usage: "do not", "will not", etc. Bad usage: "don't", "won't", etc.)

Setup and configure SAPP

How to setup SAPP:

  1. Download SAPP
  2. If an older version is running in your server, unload it with the unload command.
  3. Unzip the zip file you downloaded into the directory where your server is located and overwrite the previous files.
    Note: You have to use the included haloceded.exe otherwise sapp won’t work!

  4. Put the load command into the end of your init.txt file.
  5. To use sapp mapcycle, add mapcycle_begin after the load command, then set up the mapcycle as it's described here.
  6. Create an init.txt for the sapp commands and events.txt for the events to the gametypes folder of the current server.
    See example init below and events in the event system page.
  1. Start your server, or if you unloaded sapp, load it with the load command.
    Check Admin management for more information.

Init.txt: (this is normal init, which is always required)

sv_name "Super, pr0, 1337 server"
sv_maxplayers 16
sv_motd "motd.txt"
sv_rcon_password 666
sv_log_enabled 1
sv_log_echo_chat 1
sv_tk_ban 5
sv_tk_grace 1s
sv_mapcycle_timeout 5
load
mapcycle_begin

You can put SAPP init commands (v1, afk_kick 300, etc...) into this new init, so when you update sapp and make unload - reload, it will now read sapp settings from this file.

init.txt is located in the gametypes/sapp folder.
Example location: C:\Users\username\Documents\My Games\Halo CE\sapp\init.txt

afk_kick 300
ping_kick 600
log 1 ;this enables sapp log in gametypes folder.
antihalofp 1
anticaps 1
antispam 1
map_skip 51
aimbot_ban 10000 1 1440
mapvote 1 ;see mapvote page for explaination
no_lead 1
Copyright © 2025 SAPP: Halo and Halo Custom Edition Server App. All Rights Reserved.
SAPP is sponsored by Elite Game Servers