Skip to content
GAMPEONCreate
New project
Preview: this works today, but details can still change.

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.

Terminal window
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.

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>.

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.

zone-test.cfg
set sv_requireJoinToken false
ensure my_zones
gp_fakeplayer client Tester
gp_fakeplayer waitclient 1 my_zones
gp_fakeplayer move 1 120 -45.5 30 90
gp_wait 1000
quit
test.cfg
set sv_requireJoinToken false
ensure my_shop
gp_fakeplayer join Tester
gp_wait 100
gp_fakeplayer event 1 my_shop:buy ["bread", 2]
gp_wait 500
quit
Terminal window
gampeon-server --data ./server-data --no-stdin +exec test.cfg

The exit happens after quit, so the output can be checked in CI.

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.

test-client.cfg
set sv_requireJoinToken false
ensure my_hud
gp_fakeplayer client Tester
gp_fakeplayer waitclient 1 my_hud
gp_fakeplayer clientcmd 1 hud toggle
gp_wait 200
quit

The fake client stores its files in the system temp folder under gampeon-server-fakeclients.

Report a problem with this pageOther ways to give feedback