The new site of Sapp!

For more, check the new changelog page!

Sapp 6.4:
Optimized code with the C++11 features.

I forgot to add last time that I also fixed the bug in Halo when the server crashes if you spawned vehicles in maps where are no vehicles available (like ratrace, boardingaction, etc.) and there was vehicle respawn time set or you used the sv_map_reset command.

Fixed the setcmd command which was crashing in 6.3 if you changed the name of a command.

The k, b and ipban commands now tells the name of the admin who issued the kick/ban.
To disable this feature, add hide_admin 1 to the init.txt.

New feature: adding custom entry to the server query string, will be useful with HAC2 to auto-join to a voice server.
query_add <key> <value>: Adds a new entry to the query string. For example: query_add xfire lgbalazs or query_add ventrilo
query_list: list the all custom query entry.
query_del <id>: Deletes a custom query entry (id from query_list command).

Tab, and some other "bad" characters now filtered (removed) from the player's name at join.

Sapp 6.3:
Built with Visual Studio 2013 RC for more optimized code!

Bug fixes:
event_snap's custom argument changed from $score to $snapscore.
log_name command now have effect from sapp's init.txt too.
Auto-Update won't keep reloading sapp if failed, instead displays a message every 15 minutes about the new update in the chat and the console. Note that you can disable auto-update completely with the auto_update 0 command (not recommended).

Added a download page where you can get No-SSE versions of Sapp for crappy old CPUs like the Athon XP etc.
Also, for some people the mapcycle stops randomly, and after that they get a message like "Server was automatically restarted after it was inactive for 60 seconds.". This is because they using some buggy patched haloceded.exe instead of the original. Sapp doesn't request a patched exe and it's always recommended to use the original haloceded.exe with the custom strings.dll which is included in the archive. You can download it too from the new downloads page among with Optic, Halo Chat V2 and a NameHack made by me, which works with all versions of Halo PC and CE.

Sapp 6.2:

Upgraded No-Lead mode:
Depending on the ping, sometimes no-lead wasn't perfect but might had to lead 33 ms, this should be fixed now.

New command, clead: If no-lead mode is enabled, you can set custom lead for yourself, but only lower or equal to your ping.
For example if you have 200 ms ping, but you only want to lead 66 ms, then use /clead 66 command in the chat.

Fixed the bug from 6.1 when admins randomly lost their admin rights at new game (and therefore they might got afk-kicked), also optimized the online-admin management code.
balance_teams command now should work as before.

For Halo PC version:
Added the c4_ag, map_load, map_query and map_download commands, but this doesn't mean you can play Halo CE maps, only that there are some custom maps made for the PC version, so now you can load/download them.

For this reason, the size of the dll is equal to the CE version, so don't confuse them because they are incompatible.

Sapp 6.1:
Players should not be kicked again when they come back after they got AFK kicked (though they had 10 sec to move their camera in 6.0).
Changes in handling online admins and other minor fixes.

As Sapp changed a lot since 5.0 I decided to increase the main version number:
Sapp 6.0:

New features:
Area events: Events raised when a player enter or exit to/from an area on a certain map.
The commands are similar to loc:
area list: Lists all the areas for the current map.
area listall: Lists all the areas.
area add_sphere <name> <x> <y> <z> <r>: Adds a new sphere to the current map. x,y,z are the coordinates of the center of the sphere, r is the radius in world units.
area add_cuboid <name> <a_x> <a_y> <a_z> <b_x> <b_y> <b_z>: Adds a new cuboid to the current map. The cuboid will between the given 'a'-'b' coordinates.
area del <name>: Deletes an area from the current map.
The area information will be stored in the Halo CE\sapp folder in the following format:
map:name:Sphere:x y z:r
map:name:Cuboid:ax ay az:bx by bz
Example for Dangercanyon antiglitch:
dangercanyon:antiglitch:Cuboid:-1.00 2.00 -5.00:1.00 -15.00 0.00
The events:
event_aenter: A player enter to an area.
event_aexit: A player leaves an area.
Special argument:
$area: The name of the area where the player enter/exit.
For Dangercanyon antiglitch:
event_aenter $area:antiglitch 'kill $n;say * "No glitching, $name!"'

New commands:
coord <player_expr>: Shows the coordinates of the given players.
timelimit [amount]: Changes the timelimit on the fly, value smaller than 1 means infinitive.
Note that at the [amount] expression, you can use the following operators: [+, -, *, /, :], see naughty commands page for more information.
scorelimit [amount]: Changes the scorelimit on the fly. Works with all gametypes, both FFA and Team games. Note that in special gametypes like KingOfTheHill or OddBall, amount is in minutes.
disable_sj [enabled]: Disables the usage of SightJacker for HAC users like in ScrimMode.
c4_ag [enabled]: C4-antiglitch that works in all maps.
coldsnap_ag is deprecated and removed. Instead, use c4_ag and area events. I will post here the events soon.

New event argument:
$ffa - 1 if it's a FreeForAll game, 0 if it's a team game.

Bug Fixes:
Sapp crashed at loading if there were half-connected players in the server.
maplist command crashed the server in Halo PC version.
disable_all_objects command didn't work for blues if you specified both teams.
afk command now respawns you after <2sec if your respawn timer ended.

Code optimizations:
SappThreadHook is now more precise, alive events, afk kick, ping kick etc. should work better now.
Also removed some old and unnecessary code.
Rewritten my vect3f class, this should reduce CPU usage a bit in anticamp, aimbotscan, etc.

Sapp now sends a message to every player at load, unload and reload.

Now the example Zombies and Modded server is updated and available again!

Sapp 5.20:

Rewrote whole Sapp mapcycle handling and added an extra feature with you can set the min. and max. amount of players for a mapcycle entry.
mapcycle.txt will be like this:

For example:

First number means the minimum required players to play the map, second is the maximum amount of players that can be in the server in order to run that option, otherwise it will be skipped. However, if no map matches the requirements simply the next one will be executed.

Sapp 5.19:

Bug Fixes:
- \n always printed the name of the 1st player.
- pl and some other commands crashed with only 1 or 2 players in the server.
- Very long server messages made the clients disconnect.
- Performance improvements in command handling, it also reduced the size by ~15 kb.

Sapp 5.18:

- Fixed the bug in 5.17 where pl  and some other commands crashed if there were less than 2 players in the server.
- Rewrote and optimised Team-Balance code.
- "Old-style" message expressions like \n \t etc. now only gets replaced with say command, and not in Sapp's output messages.

Sapp 5.17:

- New player expressions, check "Command expression" article for more information.
- Map downloading now tells you if downloading failed.
- Improved the effectivity of the wait command, also its no-more rounded up to 100ms but using exactly the amount you specified.

Sapp 5.16:

- Suicide, Betray, Kill, Die Events now run after Halo's chat messages as it supposed to be.
- Fixed the bug when at new game Sapp didn't handle the "leaving" players and this caused bugs like it said "You already voted for skip this map." at the following game.

Sapp 5.15:

- Fixed crash in Halo FV version.
- st command now triggers TeamSwitch event too if a player is switched.
- Rewrote Player-Death codecave, now always the correct event will run (Kill, Betray or Suicide), note that event_die is always executed.
For ex. if player A kills B, then a event_kill will be executed for A and an event_die for B, or if player A suicides, then both event_suicide and event_die will be executed for A.

Sapp 5.14:

- Fixed the bug in 5.13 when IPBanning lagged out all players from the server if full_ipban was on (which is not recommended anyway).
- Removed No-Lead compensation from Aimbotscan that only used too much resources without making particular differences.
- Improved code around Event-Kill and Event-Betray.
- TeamSwitch event now only runs if the players switch teams by itself and wont run occasionally anymore at joining.

Sapp 5.13:

- Thread cycle is back to ~120 ticks/sec to improve reg again (custom_sleep 8 is the default value now).
- Fixed a bug when players with invalid name could crash the server or lag players out.
- Other small changes in the code.

Sapp 5.12.1:

- Added feature that prevents admins from banning themself.
- Changed compiler optimisation settings.

Sapp 5.12:

- Admin add command now should work properly again.
- If a server can't access to the logfile because another server is writing it in the same time, sapp will retry it a bit later, instead of stop logging.
- Fixed a possible memory leak in threading code.
- Fixed signature for "Team Change Block" for 1.00 exes.
- Other small changes in the code.

Sapp 5.11:

- Added feature to restore the previous fast thread cycle with the "smaller" pings and better reg:
custom_sleep [value]: Set the amount that the Halo thread Sleeps every cycle, to use the default value set 0 (with the "33 pings"), add custom_sleep 1 to the init for the "lower pings" like before update 5.10.
collect_aliases [enabled] [valid_only]: Now you can specify if you only want to collect aliases for players with valid hash.

- Other optimisations in the core functions, that results lower CPU usage and smaller file again.

- Added sapp_flags to the query string for HAC2.

Sapp 5.10:

- Added backup IPs for connecting to the Global Server, if your server didn't got updated to 5.10 then manual update required, otherwise they won't get auto-updates in the future and won't shown in the online Serverlist.

- Since some players still expected weird bugs, thread cycle is back to the original 30 cycle/second speed, but it's still handled by Sapp, therefore CPU usage will stay low.

New commands:

adminadd_samelevel <value>: The value is 0 by default, if set to 1, admins can add other players as admin with the adminadd command with lower level than them, if value is set to 2, admins can add others as admin with lower or equal level.
admindel_samelevel <value>: The value is 0 by default, if set to 1, admins can delete other players as admin with the admindel command with lower level than them, if value is set to 2, admins can delete others as admin with lower or equal level.

chat_console_echo [enabled]: If enabled, chat messages will shown in the console window.

mtv [enabled]: Multi Team Vehicles: If enabled, players from different teams can use the same vehicle. Note that you have to use HAC2 and enable mtv in client side too for the proper effect.


$campkills event value is now public, which means any kind of event can use it.

Code optimizations of some core functions which are called from many part, therefore Sapp's CPU usage and size is reduced.

Sapp 5.9:

- Fixed the "desync" bug.

Sapp 5.8.1:

- v1 now changes version to in the PC version.
- Some other small changes.

I also updated the site, all command should be documented here now. =)

Sapp 5.8:


- From now, SAPP is available for Halo PC too! More over, you don't have to replace the exe anymore, the archive contains a custom strings.dll that handles load/unload and patches the exe everything you need (like ASCII name, Dev mode, etc.). Please report any bugs you found in SAPP to me on Xfire: lgbalazs

Also added a new command to disable interactions with any object for a team.
- disable_all_objects <team> <disable>; team: 0 - both, 1 - red, 2 - blue; disable: 0 - the team can interact with any object (default), 1 - the given team(s) can't interact with any object (weapons, vehicles, etc.).

- Some other small changes that needed for the HPC port.

Sapp 5.7.2:

- gs_ping_fix now works if you have more than 1 local IPs.
- event_tk won't get raised anymore at new game or at rejoin if a player has tk (teamkill/betray) score.

Sapp 5.7.1:

- Improved antiwarp: The distance is now normalised with the moving vector, so speed doesn't affects it anymore. For Ex. if you fell down or get hit by a vehicle you won't get warp scores.
- Server now sends a message to every player if the no lead mode is changed by the admin.

Sapp 5.7:

New command:

antiwarp [warp_num] : Raises an event_warp after the player warped "warp_num" times. Recommended value: 5, 0 means this function is disabled.


sapp's init.txt:

antiwarp 5


event_warp 'kill $n;say $n "You were killed because you are warping."'

Small CPU optimisation in aimbot-scan.
Other minor changes and fixes.

Sapp 5.6.3:

- Fixed the bug with the ipban and some other commands, also fixed the mapcycle commands when they stuck or executed wrong maps.

Sapp 5.6.1:
- Fixed stability of the global server.
- Minor bug fixes and optimisations.
- whatsnext command is now level -1, mapcycle is level 0.

Sapp 5.6:
New features:
Map loading and map downloading, for Btcc22's suggestion.
The commands:
- maplist: Level 3 command that lists all the available maps.

- map_load <map_name>: Loads a new map from the maps folder, therefore no need for restart the server anymore if you want to install new maps.
Example: map_load coldsnap

- map_query <string>: Query the list of the maps from the server that's available for download and has the "string" in the name.
Example: map_query cold
ID  Name
 0  coldaphobia
 1  coldaphobia_2
 2  coldrush
 3  coldsnap
 4  icecold
 5  [h3]cold_v1

- map_download <map_ID>: Downloads and install the map that you choose from the query list. Note that you don't have to use the map_load command for the maps you downloaded, just be patient while it gets downloaded, extracted and installed.
Example: After you executed the map_query cold command, use map_download 3 to download coldsnap.

Also, a special strings.dll is now available on the site. With this dll you don't have to replace the haloceded.exe anymore, because it patches the exe for everything (load/unload command, ascii name, devmode, etc.) + it got the map cache from HAC2.

Special Thanks for Btcc22 for the map loader and map caching code, and for Gijs for hosting all the ~1000 maps for Sapp and Hac2!

V 5.5
New features:
- disable_object <object_name> [team] : Now you can specify team : 0/unset: both, 1: red, 2: blue.
Ex. disable shotgun for the blue team: disable_object "weapons\shotgun\shotgun" 2
If Sapp mapcycle is running, whatsnext command tells you the next Map and Gametype.
CPU usage of haloceded.exe is reduced to minimal.
Features for HAC2 users:
- HAC can get the mapcylce of server if it's using Sapp mapcycle.
Server Query fixes:
- Fixed the bug when Halo cut the end of the map name after a dot.
- Added the server port.
- Added Sapp version.
- Added next map and next mode (not working if you using basic Halo mapcycle).
This feature will help HAC for pre-downloading the following map when the game ends.

Basically, for supporting HAC users, please change your default Halo mapcyle to Sapp's one, especially if it contains custom maps.
It's some steps only. There is a mapcycle.txt (ANSI encoding) in the gametypes\sapp folder. From your init.txt move the mapcycle options here without the "sv_mapcycle_add" part in the "map:mode" format. Also, put "mapcycle_begin" command (without the sv_) after the load command in your init.txt. And finally, put sapp_mapcycle 1 to Sapp's init.txt.

Halo format:

sv_mapcycle_add bloodgulch ctf
sv_mapcycle_add ratrace slayer
sv_mapcycle_add sidewinder ctf
sv_mapcycle_add carousel slayer


Sapp format:


Sapp's init.txt:
sapp_mapcycle 1

Bug fixes:
On single core systems, Halo froze for ~10 sec at new game (Halo threading fail).
map command got ignorant if you mistyped the map/mode name until a new game (lol).
sv_map now should cancel the mapvote too.
Small bug fixes in sapp mapcycle + optimisations.
Some other small changes and bug fixes that I don really remember... ^^

V 5.3

- The bug got fixed when players with high ping (~400ms<) lost connection at the end of the game.
- Code Optimizations in command execution and chat module.
- Antispam Fixed (weren't function really well during the game since 5.0).
- stats function updated, now it remembers all of you kills/assists/deaths of the games since joined, not only the last one. Check /stats =)
- Some Progress to SAPP towards Halo PC. ^^
- Some other minor fixes.

V 5.1.5

- Bug fixed when server crashed if a player got killed by an "event_alive".
- Rare bug fixed when server with no-lead mod could crash if a player changed from a vehicle to a different type of vehicle very fast.
- Improved memory handling in no-lead mod, this should reduce CPU usage.
- Some other minor changes at threads.

V 5.1 No-Lead mode now works with vehicles too

V 5.0 New Hooking engine, argumetns for custom commands and No-Lead mod!

Hooking is now totally rewritten, code is more clear and hooking is faster. This means Sapp is some step closer to port to HPC.

Arguments for custom commands:
Between the command name and the command, you can put arguments starting with the '#' character. Example:
You add to the commands.txt the max #n 'sv_maxplayers #n' line and you execute the max 4 command, sapp will execute the sv_maxplayers 4 command.
Or spawnw #n #weap 'spawn weap "weapons\#weap\#weap" #n; wadd #n' and you execute the spawnw 4 "sniper rifle" it will execute the spawn weap "weapons\sniper rifle\sniper rifle" 4 and the wadd 4 command, and gives a sniper for player 4.
Here I had to note that lately kids using sapp to cheat on scrims. There is a feature to fix this already:
Scrim Mode:
"scrim_mode [enabled]: If enabled, no one can execute any naughty commands.
Server sends a message to every player if this status is changed.
You can also check it's status with the info command."
Ask the admins to turn this function ON with scrim_mode 1 command if it's not enabled. If they try to turn it off during the game, server will alert the players.
If they reject to enable it or change it meanwhile just leave them there cuz they prolly only want to cheat.

No Lead Mode:
This mod is disabled by default, you can enable/disable it with the no_lead [enabled] command, (so just put no_lead 1 to sapp's init.txt to enable it.)
You can check and change the state of leading with the lead command.
If the admins didn't enable no-lead mod, you can't turn it on for yourself, but if they enabled it, everyone can disable this mod for themselves by typing /lead 1 to the chat. Also, you can re-enable it ofc with the /lead 0 command).


V 4.5 New network/auto update core, SAPP mapcycle etc.

New Network Core for SAPP

Now Auto Updates will be more native, using Winsock and TCP stream (make sure that your outgoing TCP 2501 port is open).
This network core that I was working on lately will allow me great new functions in the future, like Remote Console and implementation of HAC2 (btcc working on it hard, beta clients will be available in few weeks =).
When I'm writing this article, about 100 Server already updated to 4.5 and connected to the global server. :D

Sapp Mapcycle Commands

mapcycle: Displays the mapcycle items and their ID + indicates the current one.
mapcycle_add <map> <mode> [ID]: Inserts a new element to the mapcycle. If ID is undefined, the new mapcycle item will be added to the end, othervise to 'ID' position, and the following maps will be "slided down".
mapcycle_del [ID]: Deletes the mapcycle item at "ID" position. (You can get the ID with the mapcyle command)
mapcycle_begin: Starts the mapcycle from the first map.
map_next: Runs the next map in the mapcycle.
map_prev: Runs the previous map in the mapcycle.
map_spec <ID>: Runs the mapcycle from the specified ID.

Benefits are that you can edit the mapcycle "on the fly", don't need to restart the server to apply it. Also you can "jump into" any position in the cycle.
The mapcyle is in the My Games\Halo CE\sapp\mapcycle.txt in ANSI format. If you edited this file and want to apply it, simply run the reload command. Format in the file: map:mode, For Example:
If you want to use this method, put the mapcycle_begin command after the load command in the init.txt, and sapp_mapcycle 1 to the another init.txt (sapp's) in the ..\My Games\Halo CE\sapp folder.
Of course you still can use the original mapcycle of Halo CE :)

Disabling objects from picking up

Using the object lookup code from Phasor, thx to Oxide.

disabled_objects: Displays the disabled objects and their ID.
disable_object <object_name>: It will deny the usage of the given objects. You can get the object names from the bottom of the "Naughty Commands" page.
enable_object [ID]: Allows the usage of the given object. (ID from disabled_objects).

Scrim Mode

scrim_mode [enabled]: If enabled, no one can execute naughty commands. Server sends a message to every player if this status is changed.
You can also check it's status with the info command.

New event for aimbot scan

event_snap: Runs when a player snaps to another player. Special argument: $score which is the amount of score "earned" by this snap. Also new argument: $botscore, the total aimbot score of the player.

Low CPU usage

low_cpu_usage [enabled]: Reduces the CPU Usage of the dedicated server by 60-80%. It won't affects Pings IF you have a decent CPU.

Server list ping fix:

gs_ping_fix [enabled]: Use this if your server has no ping on the GameSpy server list (usually when you have router). To apply it, you must put this command to the init.txt and restart your server. Also make sure that outgoing TCP 2501 port is open.
The problem is that Halo dedi sends your local IP (like to GS and clients try to ping this IP. If the fix enabled, the Global SAPP Server sends your external IP to the dedicated server, and it will send this IP to GS. =)

Another ping fix

Halo servers doesn't include the ping data of the players (lol), therefore you can't see their pings from out of the server for ex. in Xfire. Now this issue is fixed too.

Changing Sapp's logfile name

log_name [name]: name is without the .log! For ex: log_name "Zombies" will name the log file to Zombies.log

Again, if you find any issues please report it to me ASAP =)

Xfire: lgbalazs

V 4.0: Alias function and Auto Update

I made significant code optimizations in log thread, in loading, and in command and event execution.

Some bug fixes: "mag" command will now sync ammo, so you can spawn with empty human weapons too etc. ("ammo update" function call from Phasor, thanks to Oxide).

Improved the aimbot detection; less false positive snaps at short range, and more sensitivity at long range (thx the help for Sean :). Therefore min. score limit to ban has been reduced to 1000. Despite this, I recommend to don't go under 2000, because laggy server or client, or packet loss still could cause false detections.
Also there are events now if a palyer snapped to another: event_snap, special argument is $score which is the amount of score "earned" with that snap. Note that 1-2 or some snaps with few hundred score doesn't mean that the player is aimbotting! Also added new variable: $botscore, which is the total amount of aimbot-score of the player.

Sapp Mapcycle handling: mapcycle can be edited "on the fly", no need to restart it to apply the new cycle. Also ability to jump to a given mapcycle ID. For further details, read the Mapcycle menu (coming soon lol).

Alias function: You can track what other names used a player in your server, IF he/she has valid CD-Key (so I don't recommend to enable this function in 1.00, since it's just a waste of resources...) To enable it, put the 'collect_aliases 1' command into your init.txt. The command to check the aliases of the player is 'alias <player_expr>'

Auto Update: It checks for new version of SAPP every 15m. I also use this function to count the number of serevrs running on SAPP 4.0+
This function is enabled by default, you can disable it with the 'auto_update 0' command (not recommended).

V 3.4: Advanced Aimbot Detection

Finally I had time and mood to improve aimbot detection, so I kinda rewrote the whole code.
While the first version made only for catch the most obvious botters, this one is supposed to ban everyone who trying to use aimbots.
The aimbot scanning module is now like a real SightJacker which keeps watching all of the players in the same time, and analyze their "snaps".

How it works exactly?

If someone had a "suspicious camera change" it checks if the suspect aims to someone's head after the snap. If yes, the suspect will get snap angle*distance (between the suspect and the target) score. In additional, if there was a wall/object etc. before the target, the score gets multiplied by 2. Same happens, when the snap was right after a kill with a bullet. And finally, AimbotScan calculates the player who might be the target in the "next moment" if the suspect push shift. If after the snap this "expected" player is "in the corsair", scores will multiplied by 2 again.

The command is the same to enable AimbotScan: aimbot_ban <scores> [type] [lenght]
Recommended: aimbot_ban 10000 1 1440 (1 day IP-Ban after 10000 scores)

Although even few thousand score would be enough to say if someone is using an aimbot, the minimum value is 10000 to avoid false detections caused by possible lag. This will might change in the future.
Note: Just because someone's score is not 0, it doesn't means he/she is cheating, pro players can get few hundred score in short-ranged fights with pistol or with very lucky/laggy sniper shots, while real botters usually gains thousand of scores with a snap.
Aimbot Scores still have "cooldown", every player lose 2 score/sec (if he/she has any).

I'm looking forward to your feedbacks on Xfire!

Others: Some bug fixes, and a minor change: at kick/ban/mute etc. when you specify the length, it will be now in minutes instead of seconds..

V 3.3: Important Update

This release contains fix against an exploit when players with name like "$name" could freeze the server.

Also because the increased numbers of DoS attacks against Halo CE servers, SAPP now includes basic DoS protection, which means if the server receives more packet from a client in 1 second than the threshold, SAPP keeps blocking every packet from that IP.
Although these IPs will be in the IPBan-list, with the reason "DOS_ATTACK", they will be also in a separated 'DoS-List' for the fast processing, which means they remain blocked until you restart the server or unoad/load Sapp. You can clear this list manually with the clear_dos_list command.
DoS Protection is ON by default, with the threshold 1024 packet/sec. You can change it with the packet_limit [maxnumber] command, the minimum limit is 256, or you can turn it off with the packet_limit 0 value (not recommended).

V 3.2:

The main improvements are in stability and much more optimized and flexible code.
For example R.O.C.K was up for more than 20 days with this version, before I restarted it.

Important: Since I changed the code to fully widechar-compatible, you'll have to convert every Sapp file to UCS-2 LE format.

First you have to download Notepad++
After you Installed it, open the SAPP files with it, and at the top bar, choose "Encoding->Convert to UCS-2 Little Endian" (last one), then save.
You have to convert every .txt file of SAPP, except the init.txt and the log file (since this one is already in that format).
In additional, you have to add admins who were in the admins.txt again, because their name was converted from UCS-2 LE to ANSI, and in result of the data-loss, it won't work anymore, more over, the password is now stored as a md5-hash.
Basically this means you have to delete the admins.txt and re-add them.
Also, now you can remove the first line "[Name]:[ID]:[Hash]:[Level]:IP List" from the users.txt

Well, thats was the "bad news", the good are the stable and optimized code, and sum other cool features ^^ :

boost <player_expr> : Teleports the given player to the location where he/she looks. Thank You to Skyline for the code and for helping me setting it up in VS2010.

block_tc <enabled> : Blocks players from changing their team.

Updated mapvoting; Sapp now cycling the mapvotes, instead of showing all the 8-12+ in the same time. For ex. if the max_votes are 5, then the players only can vote for the first 5 options, and after the voted game ended, they can choose from the next 5 option, etc.
You can specify the amount of displayed mapvotes / round with the max_votes <number> command.
The default value is 5.

New event arguments:

$gt - The type of the current game (ex: ctf, slayer, etc.)
$reds - # of the players in the red team
$blues - # of the players in the blue team

kill event now has a special argument; $killed; its value can be 1 to 16 which referrers the $n of the killed player.
The more useful thing is that die event has a special argument too; $killer, which can be; -1: player simply "died", 0: "was killed by a vehicle/guardians", etc., and 1 to 16, the $n of the player who killed the current one

Some other smaller changes, I can't remember for all, they are like Sapp now remembers for the 'betray scores' after a player left, so now the n00bs can't evade autoban with rejoining =)

With these some new features, now you can make Zombies mod finally :)

v 3.0

From 2.6 to 3.0 I made lot of changes and new functions, I can't list all of them here.
The main changes are in stability, optimizations, bug fixes and new, more flexible event system.+ Object creation / destruction, vehicle enter, weapon assignment/delete. These commands are from Phasor, credits to Oxide, he made a great job. I ported the functions to CE and made commands for them, which was a lot of work too.
Check the Naughty commands page for more details.
I uploaded a Test Server with all files, I hope this helps you to understand the new event system. Note that you might have to update your events.txt to be compatible with the new argument system. Check the Event system page for more info.Added reload command which reloads all SAPP files without unload/load.

Also some other commands like mute (same as textban just based on IP), "adminban" function, which prevents admins from banning another admin with higher level, and some other commands.
The command_t.txt has been changed to locations.txt, you can use these locations for t and spawn command. Check Misc commnads page for more.

Replaced Halo's "Teambalance" function, the new one works correctly, which means it wont let players switch unfairly, if "auto teambalance" is enabled in the current gametype.Version 1.08 is not supported anymore, since there are no servers and players, so v3 command changed to v2, although you don't have to put this to your init, since the haloceded.exe's version is 1.09 by default.

Unify exe is not supported either, since it was very unstable. Instead, you can use a small script.
Put this to your commands.txt:
unify 'v1;w8 10;v2;w8 10;unify'
and the unify command to the sapp's init.txt.
Note that your server must have ping on GS list, otherwise this wont work correctly.

v 2.6.0

New features:
camo player_expr [seconds] (0 = forever / till die) : makes the given player(s) invisible. Thx to Oxide for the code =)
adminban [0/1/2] : 0 - admin can kick/ban/ipban another admin (default), 1 - prevents admins from kick/ban/ipban another admin who have higher level, 2 - -"- higher or equal level
text "message": writes a text to the environment output (console/rcon/chat), useful for custom commands for informing the users/admins what happened.
vspec "versionstring": You can specify your own version if you want to run it in diff. v. than 1.00/1.08/1.09
Examples: v1 is the same as vspec while 1.09 is vspec aka v3
Change: notgod command changed to ungod

"Fixed": when people (who didn't read the description) used the b (banning) command like "b player reason", it didn't banned the player (cuz the correct usage is "b player time reason", ex: b 4 1d n00b),
but the server still said "xy was banned by the admin..." so they thought there is a backdoor which prevent people from getting banned .
Now if they use it like this the 3rd argument will be the reason (because in the past it was the TIME, and if u use banning like "b 4 asdasd" it wouldn't work)

v 2.5.5


A critical bug was fixed in sapp logging.
Some string fixes.


Admin notice: adminnotice [enabled]
If enabled, a message will be displayed to all players if an admin v1 joins or an admin v2 login the game.


v 2.5.1


A bug is fixed when occasionally cmd scripts locked sapp and Halo thread, therefore server got frozen or crashed.

v 2.5


- New executing engine, now it doesn't "spam" the console, and it again works with the old sapp-patched haloceded.exe (before v1.6), so there is again new exes in the archive, but it's not necessary to replace it.

- New Logging Engine, now it logs everything with wide-characters like halo does, so player names, chat messages will be the same as ingame. I recommend you to archive old sapp.log before starting v2.5+
- Player's team at join, team-switch and chat type (global, team or vehicle) is now also logged.

- scores command's name changed to ctf_scores (usage is the same)
New commands: ts_scores (usage is the same as ctf_scores), ctf_scores_team [team] [score], ts_scores_team [team] [score] : displays/sets the ctf/ts(TeamSlayer) scores of the red/blue or both teams.

- Ping-kick now has cooldown time.

- camp detection (ßeta); anticamp [time(s)] [distance(m)] Raises event_camp <killnumber> 'command' event. For ex. anticamp 30 5 : if the distance between the player's coordinates is less than 5m in the last 30 sec, it will raise event_camp event with the number of the kills he did while he was in this "camping stage". Example events:
event_camp 3 'say $n "$name Please change your position!"'
event_camp 4 'say $n "$name stop camping or you will be kicked!"'
event_camp 5 'say * "Warning! $name will be kicked for camping!"'
event_camp 6 'k $n Camping'

- I finished updating of the custom command's code (wich existed for ages tbh), so some commands were ripped; debug(its useless for u), begin, next, reset, lo3: you can create these if you need them.
You can add custom commands by using the cmd add <name> 'command' [level], or putting the <name> 'command' [level] string to the "..gametypesfolder\sapp\commands.txt" file (if you don't know where is it, use the files command to check it).
If the level is not specified, the command will be lvl 4. Note: If the player's level who execute the custom command is <= than the command level, the command will execute despite it contains higher level commands.
To delete a command, use cmd del [name], to check all custom commands, use cmd list.
Example commands.txt file


- Sometimes switch_team event were raised when a player joined, wrong player-name was logged if the player joined "slowly", or the admin didn't got logged in automatically.
- Occasionally sapp crashed when two admins executed commands in the same time.
- Players now can change back to the previous team if they were changed with st or balance_teams command.

I also made lot of optimizations which cause more stability and faster code.

v 2.3.2


- If sapp couldn't rename the log file at rotation then it felt infi-loop and generated huge log file while the server was still running fine.
- Occasionally console or server messages didn't show up.

v 2.3.1




battery player_expr amount type : works same way as ammo, you can set the battery of the covenant weapons (in %)


mag player_expr amount type : set the loaded bullets in the given weapon(s), works same way as ammo too


- Some stability improvements at unload, a bug was fixed when you edited sapp files by your hand (wich you should not to do), sapp was unable to load if you let empty lines in the file.

v 2.3


remove_password - no comment
remove_rcon_password -

 nades <player_expr> [amount] [type] : set the [amount] of nades of the given players, [type]; 0/ungiven= both, 1= frag nades, 2= plasma nades

ammo <player_expr> [amount] [type] : set the amount of the ammo of the given players, type; 0/ungiven= current weapon, 1= primary, 2= secondary, 3= both

ammo_mult <player_expr> [multiplier] [type]  : same as the previous command, just its multiple the current ammo

random_bonus <player_expr> : the given players gets some gift


v 2.2

event_start and event_end are now "map events";
event_start hangemhigh 'cheat_jetpack 1'
event_end hangemhigh 'cheat_jetpack 0'
If you don't define a map, then the event will apply for all maps.

sapp_rcon [enabled]
If enabled, only admins can use rcon with they admin name & password or with the default rcon password if their CD key is added.
+ rcon bruteforce protection

secondary cmdstart, 'cmdstart1', default is '/'

w8 command, same as wait just in seconds instead of milliseconds

You have to add this:
to the begin of the admins.txt file, and this:
[Name]:[ID]:[Hash]:[Level]:IP List
to the begin of the users.txt file

some bug fixes in the haloceded.exe files


v 2.1.1
You can change the name and the level of the commands.
Example: setcmd k kick this will change k command to kick
setcmd k 3 this will change k (kick) command's level to level 3

tp player_expr player_number : Teleports player(s) to another player =)
Ex: tp me 6, tp 7 1, tp * 2

hp player_expr [health_to_set] : displays / sets the given player(s) health
sh player_expr [shield_to_set] : displays / sets the given player(s) shield

sv_map_prev / prev : jumps to previous played map

iprangeban <name> <IP/mask> [reason]
Example: iprangeban EK moron
This will ban all ips from to
iprangeban _InViCiBlE_ AIMBOT
This will ban all ips from to
Mask: /24 for the last number, /16 for the last 2, and /8 for the last 3
You can find the full mask table here.

msg_prefix "prefix" : this will set the prefix of the server messages. Ex.: msg_prefix "** SAPP ** " (default)
You can use the default halo prefix "** SERVER **", by turning this off (msg_prefix "") and enabling say_prefix (say_prefix 1)

list command changed to inf player_expr
For Ex.: inf * = old list command, inf rt / inf bt shows only the red / blue team, inf 4 displays only info about player 4

New in 1.6.3:

ripped spawn protect because it crashed the server.
improved god -now players really cant get killed except with kill expr
say_prefix [enabled] -This will add ** server ** before say messages.

An Unify Halo CE Patched exe is included in the zip. Read More here.
the following commands: \info \stats \about
AFK (if enabled, player_afk 1), players wont respawn if they type \afk untill they type it again. Note that they still can be kicked by afk-kick.
Now you can temporary Ban/IPban/Textban players, Example:
b 4 2h "betraying" = cd key hash ban player 4 for 2 hours ('x'd = 'x' day, 'x'h = 'x' hour, 'x'm = 'x' minute long ban)
ipban 3 3600 "hogs in tuns" = IP-ban player 3 for 3600 seconds = 1 hour
textban 13 600 = TextBan player 13 for 10 min (600 sec)
Player commands (if enabled, player_commands 1): every playercan run
kdr player_expr: Displays Kill\Death ratio of the given player.
sv_stats: Displays some cool stats about the server =)

Changes: Events, Mapvotes, sapp init and sapp log file are now in that gametypes folder wich u choosed with -path, default is Documents\My Games\Halo CE\sapp
spawn_protect command changed to spawn_protection (lol), also enable_afk to player_afk ...

the issues with shared cd keys have been fixed, stability problems and disconnect caused by say function have been fixed.
\afk makes you not respawn, so you don't get killed, type it again to spawn.
\stats shows your kill death ratio and time in server.


SAPP for Halo PC


SAPP for Halo CE