"Games are currently closed", "text" => "See this announcement for more information" ]); } $alert = $name = $description = $ip = $port = $maxplayers = $pbs = false; $version = "2010"; $Privacy = "Public"; $userId = SESSION["userId"]; if($_SERVER['REQUEST_METHOD'] == "POST") { $name = $_POST["name"] ?? false; $description = $_POST["description"] ?? false; $ip = $_POST["ip"] ?? false; $port = $_POST["port"] ?? false; $version = $_POST["version"] ?? false; $maxplayers = $_POST["maxplayers"] ?? false; $Privacy = $_POST["Privacy"] ?? "Public"; $pbs = in_array($version, ["2011", "2012"]) && isset($_POST["pbs"]) && $_POST["pbs"] == "on"; Catalog::ParseGearAttributes(); if (empty($name)) $alert = ["text" => "Server name cannot be empty", "color" => "danger"]; else if (strlen($name) > 50) $alert = ["text" => "Server name cannot be longer than 50 characters", "color" => "danger"]; else if (strlen($description) > 1000) $alert = ["text" => "Server description cannot be longer than 1000 characters", "color" => "danger"]; else if (Polygon::IsExplicitlyFiltered($name)) $alert = ["text" => "The name contains inappropriate text", "color" => "danger"]; else if (Polygon::IsExplicitlyFiltered($description)) $alert = ["text" => "The description contains inappropriate text", "color" => "danger"]; else if (empty($ip)) $alert = ["text" => "IP address cannot be empty", "color" => "danger"]; else if (!filter_var($ip, FILTER_VALIDATE_IP)) $alert = ["text" => "Invalid IP address", "color" => "danger"]; else if (!is_numeric($port) || $port < 1 || $port > 65536) { $alert = ["text" => "Invalid port", "color" => "danger"]; $port = false; } else if (!in_array($version, ["2010", "2011", "2012"])) $alert = ["text" => "Invalid version", "color" => "danger"]; else if (!in_array($Privacy, ["Public", "Private"])) $alert = ["text" => "Privacy must be set to Public or Private", "color" => "danger"]; else if (!is_numeric($maxplayers) || $maxplayers < 1 || $maxplayers > 100) { $alert = ["text" => "Maximum player count must be between 1 to 100", "color" => "danger"]; $maxplayers = false; } else { $LastServer = db::run( "SELECT created FROM selfhosted_servers WHERE hoster = :uid AND created+3600 > UNIX_TIMESTAMP()", [":uid" => $userId] ); if($LastServer->rowCount()) { $alert = ["text" => "Please wait ".GetReadableTime($LastServer->fetchColumn(), ["RelativeTime" => "1 hour"])." before creating a new game", "color" => "danger"]; } else { $gears = json_encode(Catalog::$GearAttributes); $ticket = generateUUID(); db::run( "INSERT INTO selfhosted_servers (ticket, name, description, ip, port, version, maxplayers, Privacy, hoster, allowed_gears, created) VALUES (:ticket, :name, :desc, :ip, :port, :version, :players, :privacy, :uid, :gears, UNIX_TIMESTAMP())", [ ":ticket" => $ticket, ":name" => $name, ":desc" => $description, ":ip" => $ip, ":port" => $port, ":version" => $version, ":players" => $maxplayers, ":privacy" => $Privacy, ":uid" => $userId, ":gears" => $gears ] ); die(header("Location: /games/server?ID=".$pdo->lastInsertId())); } } } pageBuilder::$pageConfig["title"] = "Create Server"; pageBuilder::buildHeader(); ?>

Create a Server

Back
px-2 py-1" role="alert">

IMPORTANT: Please use a VPN for hosting servers if you can. There are some VPNs that do feature port forwarding.

>
Use current address >
>
>
>
>
>
>
>
>
>
Cancel
Back