Ballerspiel

Eigenen Server betreiben

Ballerspiel hat einen kostenlosen Dedicated Server für Windows und Linux und ein Docker-Image. Er braucht keine Grafikkarte und niemanden am Rechner. Betreibe ihn öffentlich, für deine Community oder eine LAN-Party; Spenden, Sponsoren und Vereinsbeiträge sind erlaubt, und Gameserver-Anbieter dürfen ihn vermieten - ohne Gebühr an uns (EULA).

Download

Download Für Größe
BallerspielServer-Linux.zip Linux, 64 Bit 270 MB
BallerspielServer-Windows.zip Windows 10/11, 64 Bit 330 MB
ballerspiel-server-docker.tar.gz Docker (docker load) 300 MB

Version 1.0.0 - der Server muss zur Version des Spiels passen; nach einem Spiel-Update neu herunterladen. Prüfsummen: SHA256SUMS.txt. Jedes Archiv enthält Startskripte, acht fertige Konfigurationen (unsere offiziellen Modi, LAN-Party, nur Freunde), eine Anleitung auf Deutsch und Englisch (LIESMICH.txt, README.txt) und die Lizenzen.

So finden Spieler ihn. Dein Server erscheint in der Online-Liste des Spiels, unter unseren offiziellen Servern, mit dem Namen aus deiner Serverconfig. Spieler erreichen ihn auch über seine Adresse: im Mehrspieler-Menü die Adresse (zum Beispiel 203.0.113.5:7777) in das Adressfeld im Reiter Online oder LAN tippen und Verbinden drücken. Im selben lokalen Netz erscheint der Server auch von selbst in der LAN-Liste.

Starten

Archiv auspacken und das Skript starten - es setzt alle Schalter, die der Server braucht:

./start_server.sh                              (Linux)
start_server.bat                               (Windows)
./start_server.sh configs/battle_royale.json   andere Konfiguration
./start_server.sh configs/lan_party.json lan   nur LAN, ohne Internet

UDP 7777 in der Firewall freigeben (zu Hause: im Router weiterleiten). Mehrere Server auf einem Rechner: BALLERSPIEL_PORT, BALLERSPIEL_QUERY_PORT und BALLERSPIEL_INSTANCE (eigene Logs, Sperren und Spielstände) - LIESMICH.txt erklärt es. Ohne die Skripte muss -networkversionoverride=33043543 auf der Kommandozeile stehen, sonst kann das Spiel nicht beitreten.

Docker: docker load -i ballerspiel-server-docker.tar.gz, dann docker compose up -d mit docker/docker-compose.yml aus dem Linux-Archiv (Host-Netzwerk; deine Konfigurationen in ./config, Logs und Spielstände in ./data). Im Linux-Archiv liegt auch das Dockerfile zum Selberbauen.

Konfiguration

Eine JSON-Datei legt Name, Plätze, Bots, Kartenrotation, Beute und Admins fest. Das Beispiel erklärt jede Einstellung direkt in der Datei (Schlüssel mit _ am Anfang sind Kommentare - der Server ignoriert sie, sie dürfen bleiben; die Erklärungen sind englisch):

BallernServer.example.json herunterladen

Ohne Konfiguration oder mit einer kaputten startet der Server trotzdem: jedes Match ganz zufällig, keine Admins, und das Log sagt, was falsch war ([Dedicated] ConfigError ...).

Im Spiel

Admins (in der Konfiguration mit SteamID64 oder EOS:<id> eingetragen) moderieren per Chat: /kick, /ban, /unban, /banlist, /mute, /unmute, /map, /nextmap, /setbots, /addbot, /removebot. Spieler können abstimmen: /votemap, /votenext, /votekick, /voteban (Kick- und Bann-Abstimmungen nur, solange kein Admin online ist). /help zeigt alles.

Die Beispieldatei

{
  "_help": [
    "Ballerspiel dedicated server - example configuration with explanations.",
    "Start: ./start_server.sh configs/server.json (Linux) or start_server.bat configs\\server.json (Windows) - see README.txt.",
    "Keys starting with '_' are explanations; the server ignores them, so you can keep them.",
    "Everything not set falls back to a sensible default; a missing or broken file starts the server",
    "with a fully random rotation and no admins (the log says why: '[Dedicated] ConfigError ...').",
    "Several servers on one machine: give each its own -port and -saveddirsuffix=<name>",
    "(own logs, bot roster, ban list and skill saves)."
  ],
  "ConfigVersion": 1,
  "ServerName": "My Ballerspiel Server",
  "_help_ServerName": "Shown in the in-game server browser.",
  "SteamAdvertise": true,
  "_help_SteamAdvertise": "true: list the server in the in-game online server list (an EOS session, seen by Steam and Epic players). false: reachable by IP only (LAN tab or online tab -> address -> Connect). Emergency switch -BallernOnline=Steam lists it on the Steam master server instead.",
  "Lan": false,
  "_help_Lan": "true: announce a LAN session instead - visible in every player's LAN tab, no login and no internet needed. Same as -lan on the command line (use together with -nosteam).",
  "MaxPlayers": 64,
  "_help_MaxPlayers": "Human player slots, 1-64 (default 64). Bots never take one of these slots.",
  "BotCount": 6,
  "_help_BotCount": "Bots per match for every rotation entry that does not set its own. Omit it to keep the game's default. Capped by the server's bot limit (64).",
  "UseBotsToFillEmptyPlayerSlots": true,
  "_help_UseBotsToFillEmptyPlayerSlots": "true: BotCount is the size the match is filled up to. Every player who joins replaces a bot, every player who leaves brings one back, until no bots are left. In Battle Royale only while new players can still spawn. Default false: BotCount bots on top of the players.",
  "BotLevelMatchPlayerLevel": true,
  "_help_BotLevelMatchPlayerLevel": "true: bots stay near the players' level (the median of the scoreboard levels, a little above at most, never far). A bot that has grown too strong is replaced by a weaker one at its next death. Default false.",
  "BotsPerHuman": 0,
  "_help_BotsPerHuman": "> 0: exactly this many bots per human - no bots on an empty server, every human who joins brings them, every human who leaves takes them along (a death changes nothing). Wins over BotCount and UseBotsToFillEmptyPlayerSlots. The official Humans vs AI servers use 1.",
  "HumanVsAI": false,
  "_help_HumanVsAI": "true: in team modes (TM, CTF, BB) all humans play together against the bots. Also applies to /map and /votemap.",
  "Loot": {
    "_help": [
      "Optional: change what loot crates contain. Only list what differs from the game's defaults.",
      "Crates: per crate, per content: a weight (0 = never, higher = more often).",
      "Mix: how often each crate type appears on the spawn points (default: the three standard crates, equally often).",
      "Crate types: BP_AllCrate, BP_WeaponAmmoCrate, BP_HealArmorBuffCrate, BP_AmmoCrate, BP_ArmorCrate, BP_BuffCrate, BP_HealCrate, BP_WeaponCrate.",
      "This block applies to all rotation entries; an entry with its own Loot block replaces it for that match."
    ],
    "Crates": {
      "BP_AllCrate": {
        "BP_AtomicBombCannon": 0
      }
    },
    "Mix": {
      "BP_AllCrate": 1,
      "BP_WeaponAmmoCrate": 1,
      "BP_HealArmorBuffCrate": 1,
      "BP_BuffCrate": 1
    }
  },
  "Rotation": [
    {
      "_help": "One match: Map, GameMode and MatchTimeSeconds. Weather and Daytime are optional - left out, they are random every time.",
      "Map": "ZoneZero",
      "GameMode": "BR",
      "MatchTimeSeconds": 480,
      "BotCount": 14
    },
    {
      "_help": "Ballerball on City at night in the rain, with its own bot count.",
      "Map": "City",
      "GameMode": "BB",
      "MatchTimeSeconds": 300,
      "Weather": "rain",
      "Daytime": "night",
      "BotCount": 8
    },
    {
      "_help": "Clown-Off on Carnival; weather and daytime random.",
      "Map": "Carnival",
      "GameMode": "CO",
      "MatchTimeSeconds": 300
    },
    {
      "_help": "Humans against bots for this match only.",
      "Map": "Camp",
      "GameMode": "CTF",
      "MatchTimeSeconds": 420,
      "HumanVsAI": true,
      "BotCount": 10
    },
    {
      "_help": "No atomic bombs on the small map: this entry's Loot block replaces the global one.",
      "Map": "Stores",
      "GameMode": "FFA",
      "MatchTimeSeconds": 300,
      "Daytime": "apocalypse",
      "Loot": {
        "Crates": {
          "BP_AllCrate": {
            "BP_AtomicBombCannon": 0
          },
          "BP_WeaponCrate": {
            "BP_AtomicBombCannon": 0
          }
        }
      }
    },
    {
      "_help": "Leave out Map and/or GameMode and the server picks them at random for this slot.",
      "MatchTimeSeconds": 300
    }
  ],
  "_help_Rotation": [
    "Played top to bottom, then from the start again. An empty or missing list = every match fully random (300 s).",
    "Maps: Ballertopia, Camp, Carnival, City, Motel, Stores, Village, ZoneZero.",
    "GameMode: FFA (free-for-all), TM (team deathmatch), CTF (capture the flag), BR (battle royale), BB (Ballerball), CO (Clown-Off). Every mode works on every map.",
    "Weather: clear, cloudy, fog, rain. Daytime: morning, noon, afternoon, evening, night, apocalypse.",
    "MatchTimeSeconds: length of a match; 0 or missing = 300."
  ],
  "Admins": [
    {
      "UniqueId": "PUT-A-STEAMID64-HERE",
      "Comment": "Steam player: the SteamID64 (17 digits). Replace this placeholder."
    },
    {
      "UniqueId": "EOS:PUT-A-PRODUCT-USER-ID-HERE",
      "Comment": "Epic player: EOS: plus the Product User ID. Replace or delete this line."
    }
  ],
  "_help_Admins": [
    "Admins can use these chat commands (type /help in the game to see them):",
    "/kick <player>, /ban <player>, /unban <name|id>, /banlist, /mute <player>, /unmute <player>",
    "/map [map] [mode] [weather] [daytime], /nextmap, /no (cancels a running vote)",
    "/setbots <n>, /addbot [n|name], /removebot [name], /resetbot <name>, /deletebot <name>",
    "Everybody: /help, /maplist, /kill, /stuck, /votemap, /votenext, /votekick, /voteban (votes only while no admin is online), F1 = yes, F2 = no.",
    "Bans and mutes are stored on the server and last until an admin lifts them. The two IDs above are placeholders - replace them."
  ]
}