Test without the game
gampeon-server runs your server resources without Unreal Engine. Instead of the game world it has a simple placeholder world. It reads the same server.cfg, runs the same Lua runtime with database and HTTP, and has a console. Use it to port and test resources quickly, or in CI.
gampeon-server --data ./server-data| Option | Meaning |
|---|---|
--data <folder> |
Folder with server.cfg and resources/ (default: current folder) |
--hz <n> |
Ticks per second (default 30) |
--no-stdin |
Do not read console commands from the terminal |
+<command> |
Run a console command at start, for example +exec test.cfg or +ensure myres |
Without + commands it runs exec server.cfg. All console commands from Commands and convars work, plus quit.
Fake players
Section titled “Fake players”| Command | Effect |
|---|---|
gp_fakeplayer join <name> |
Adds a player with gampeon:dev-<n> and license: identifiers. Runs playerJoining. |
gp_fakeplayer connect <name> [ticket] |
Joins like the game does. With sv_requireJoinToken on, GAMPEON checks the ticket. |
gp_fakeplayer client <name> [ticket] |
Like connect, with a client in the same process that downloads the packages and runs the client scripts. |
gp_fakeplayer waitclient <id> [resource …] |
Waits until the client scripts of a client player are running and the named resources have started there, for at most 30 seconds. Prints fake client <id> ready, or not ready when it gives up. |
gp_fakeplayer clientcmd <id> <command …> |
Runs a command that client scripts registered with RegisterCommand, like gpc in the game. |
gp_fakeplayer event <id> <event> [json list] |
The player sends a network event, like TriggerServerEvent. |
gp_fakeplayer command <id> <command …> |
The player types /command in chat, with permission checks. |
gp_fakeplayer say <id> <text …> |
A client player types into the chat window: text or /command. Needs ensure chat. Lines in the player’s chat are printed as [client <id>/chatbox]. See Text chat. |
gp_fakeplayer drop <id> [reason] |
The player leaves. Runs playerDropped. |
gp_fakeplayer move <id> <x> <y> <z> [heading] |
Moves the player’s character in the placeholder world (meters, degrees). |
gp_fakeplayer where <id> |
Prints the position and heading of the player’s character. |
gp_fakeplayer break <id> [x y z] |
Digs a block like the left mouse button in a block world. Without coordinates, the block below the player’s eyes. |
gp_fakeplayer place <id> [x y z [block]] |
Places a block like the right mouse button, by default the selected hotbar block. |
gp_fakeplayer slot <id> <n> |
Picks hotbar slot n, like the keys 1 to 9. |
gp_block <x> <y> <z> |
Prints the block there and the surface height. |
gp_wait <ms> |
Lets time pass, for test scripts. |
Events the server sends to players are printed as [net] -> <id> <event> <arguments as JSON>.
Placeholder world
Section titled “Placeholder world”Every player gets a character that stands still at the spawn point until gp_fakeplayer move or SetEntityCoords moves it. Objects from CreateObject stand exactly where the script put them; gp_entities lists them. There is no physics and no map. That is enough to test scripts that check where players are or place objects, for example shops or zones. See World and entities.
set sv_requireJoinToken falseensure my_zonesgp_fakeplayer client Testergp_fakeplayer waitclient 1 my_zonesgp_fakeplayer move 1 120 -45.5 30 90gp_wait 1000quitExample
Section titled “Example”set sv_requireJoinToken falseensure my_shopgp_fakeplayer join Testergp_wait 100gp_fakeplayer event 1 my_shop:buy ["bread", 2]gp_wait 500quitgampeon-server --data ./server-data --no-stdin +exec test.cfgThe exit happens after quit, so the output can be checked in CI.
Client scripts
Section titled “Client scripts”Players added with gp_fakeplayer client download the client packages through the same channel as in the game and run the client scripts. Their output starts with [client <id>/<resource>], and the server log shows client scripts running once they started. Use gp_fakeplayer waitclient before the first clientcmd: loading takes longer on slow machines, so a fixed gp_wait can be too short.
set sv_requireJoinToken falseensure my_hudgp_fakeplayer client Testergp_fakeplayer waitclient 1 my_hudgp_fakeplayer clientcmd 1 hud togglegp_wait 200quitThe fake client stores its files in the system temp folder under gampeon-server-fakeclients.