Demo: alle Bots, Planeten und Logs sind erfunden. Ansehen geht überall, speichern und spielen nicht. Demo beenden

Skript-Bibliothek

267 Befehle für HIVE-Skripte (JavaScript) – jeder mit Anwendungsbeispiel.
Alle Zeiten sind die Ortszeit dieses PCs (UTC). Jetzt: --:--:--

Einstieg

Grundlagen

Skripte sind JavaScript und laufen pro Bot direkt in HIVE – über die bestehende Spielverbindung des Bots. Alle Befehle sind global verfügbar. Anfragen ans Spiel werden automatisch gedrosselt (mind. 0,3 s Abstand), damit das Konto nicht auffällt.

Anhalten und Pause greifen jederzeit, auch mitten in einer Schleife. Fehler der Spiel-API lassen sich mit try { … } catch (e) { LogError(e.message) } abfangen.

Eigene Planeten/Monde kann man überall als Objekt aus GetPlanets(), als ID, als Name oder als Koordinate angeben: "1:16:4" = Planet, "1:16:4:3" = Mond.

Unwiderrufliche oder nach außen sichtbare Aktionen brauchen als letztes Argument das Wort "BESTÄTIGT" – ohne passiert nichts. Anmelden, Abmelden und Captcha gibt es für Skripte nicht, weil sie die laufende Spielsitzung beenden würden. Skripte haben keinen Zugriff auf Dateien, Netzwerk oder den PC.

Konstanten
MISSION.ATTACK, ACS_ATTACK, TRANSPORT, DEPLOY, ACS_DEFEND, SPY, COLONIZE, HARVEST, DESTROY, MISSILE_ATTACK, EXPEDITION, TRADE, DISCOVERY
CELESTIAL.PLANET (1), DEBRIS (2), MOON (3), DEEPSPACE (4)
SHIP.SmallCargo, LargeCargo, LightFighter, HeavyFighter, Cruiser, Battleship, Battlecruiser, Bomber, Destroyer, Deathstar, ColonyShip, Recycler, EspionageProbe, SolarSatellite, Crawler, Reaper, Pathfinder
DEFENCE.RocketLauncher, LightLaser, HeavyLaser, GaussCannon, IonCannon, PlasmaTurret, SmallShieldDome, LargeShieldDome, AntiBallisticMissiles, InterplanetaryMissiles
BUILDING.MetalMine, CrystalMine, DeuteriumSynthesizer, SolarPlant, FusionReactor, MetalStorage, CrystalStorage, DeuteriumTank, RoboticsFactory, Shipyard, ResearchLab, NaniteFactory, Terraformer, SpaceDock, LunarBase, SensorPhalanx, JumpGate, …
RESEARCH.EspionageTechnology, ComputerTechnology, WeaponsTechnology, …, Astrophysics, IntergalacticResearchNetwork, GravitonTechnology
LF_BUILDING.ResidentialSector, BiosphereFarm, …   LF_RESEARCH.IntergalacticEnvoys, HighPerformanceExtractors, …
CHARACTER_CLASS.NONE, COLLECTOR, GENERAL, DISCOVERER   ALLIANCE_CLASS.NONE, WARRIOR, TRADER, RESEARCHER
FEATURE.Defender, Expeditions, AutoFarm, Harvest, SleepMode, Colonize, AutoDiscovery, BrainAutoMine, BrainAutoResearch, BrainAutoRepatriate, BrainAutobuildCargo, …
MESSAGE_TAB.ESPIONAGE (20), COMBAT (21), EXPEDITIONS (22), TRANSPORT (23), OTHER (24)
Statt der Konstanten gehen auch die Zahlen-IDs oder Namen als Text (z. B. "LargeCargo").
Beispielskript: Expeditionswellen
// Beispiel: Expeditionswellen vom Heimatplaneten
const LARGE_CARGO = 4000

while (true) {
    if (IsSleeping()) { SleepMin(5); continue }

    const home = GetHomeWorld()
    const slots = GetSlots()
    const frei = Math.min(slots.ExpTotal - slots.ExpInUse, slots.Total - slots.InUse)

    for (let i = 0; i < frei; i++) {
        const system = home.Coordinate.System + RandomInt(-1, 1)
        const ziel = home.Coordinate.Galaxy + ":" + system + ":16"
        const fleet = SendFleet(home, { LargeCargo: LARGE_CARGO, Pathfinder: 1 }, ziel, MISSION.EXPEDITION)
        if (!fleet) { LogWarn("Keine Schiffe mehr"); break }
        SleepRandSec(2, 5)
    }
    SleepRandSec(300, 600)
}

Grundlagen

Log 5 LogInfo · LogWarn · LogError · LogDebug · Print
LogInfo(...werte)
Schreibt eine Zeile ins Skript-Log (rechts). Mehrere Werte werden mit Leerzeichen verbunden, Objekte als JSON ausgegeben.
Rückgabe –
const s = GetSlots()
LogInfo("Flottenslots:", s.InUse, "/", s.Total)
LogWarn(...werte)
Wie LogInfo, als Warnung (orange) – für Dinge, die Aufmerksamkeit brauchen, aber kein Fehler sind.
Rückgabe –
if (GetShips(GetHomeWorld()).ColonyShip === 0)
    LogWarn("Kein Kolonieschiff mehr auf dem Heimatplaneten")
LogError(...werte)
Wie LogInfo, als Fehler (rot). Typisch im catch-Block.
Rückgabe –
try {
    SendFleet(home, { LargeCargo: 100 }, "1:16:16", MISSION.EXPEDITION)
} catch (e) {
    LogError("Senden fehlgeschlagen:", e.message)
}
LogDebug(...werte)
Wie LogInfo, als Detailzeile (grau) – für Zwischenstände beim Entwickeln.
Rückgabe –
const fleets = GetFleets()
LogDebug("Rohdaten erste Flotte:", fleets[0])
Print(...werte)
Kurzform für LogInfo.
Rückgabe –
Print("Skript", ScriptName, "gestartet")
Warten & Ablauf 6 Sleep · SleepSec · SleepMin · SleepRandSec · Exit · IsSleeping
Sleep(millisekunden)
Wartet die angegebene Zeit in Millisekunden. Anhalten und Pause greifen auch während des Wartens.
Rückgabe –
for (const p of GetPlanets()) {
    LogInfo(p.Name, GetResources(p).Metal)
    Sleep(1500)   // 1,5 s Abstand zwischen den Abfragen
}
SleepSec(sekunden)
Wartet die angegebene Anzahl Sekunden.
Rückgabe –
while (IsUnderAttack()) {
    LogWarn("Angriff läuft – warte")
    SleepSec(30)
}
SleepMin(minuten)
Wartet die angegebene Anzahl Minuten. Ideal als Pause am Ende einer Endlosschleife.
Rückgabe –
while (true) {
    BuyOfferOfTheDay()
    SleepMin(60)
}
SleepRandSec(min, max)
Wartet eine zufällige Zeit zwischen min und max Sekunden – wirkt menschlicher als feste Pausen.
Rückgabe –
for (let i = 0; i < 3; i++) {
    SendFleet(home, { LargeCargo: 2000 }, "1:16:16", MISSION.EXPEDITION)
    SleepRandSec(3, 8)
}
Exit()
Beendet das Skript sofort (regulär, kein Fehler). OnExit() läuft danach trotzdem.
Rückgabe –
if (IsVacationMode()) {
    LogInfo("Urlaubsmodus aktiv – nichts zu tun")
    Exit()
}
IsSleeping()
Ob der Bot laut Schlafplan gerade schläft. Skripte laufen auch im Schlaf weiter – hiermit selbst entscheiden.
Rückgabe true | false
while (true) {
    if (IsSleeping()) { SleepMin(10); continue }
    // … eigentliche Arbeit …
    SleepMin(5)
}
Skript-Kontext 4 OnExit · args · ScriptName · _shared
function OnExit() { … }
Selbst definierte Funktion: läuft einmal, wenn das Skript endet – auch nach „Anhalten“ (max. 15 s). Zum Aufräumen.
Rückgabe –
StopModule("Expeditions")      // Modul während des Skripts aus

function OnExit() {
    StartModule("Expeditions")  // beim Ende wieder an
}
args
Startparameter, die ein anderes Skript per StartScript(name, args) mitgegeben hat; sonst null.
Rückgabe beliebig | null
// gestartet mit StartScript("Transport", { ziel: "1:20:8", menge: 500 })
const ziel = args ? args.ziel : "1:16:4"
const menge = args ? args.menge : 100
ScriptName / InstanceName
Name dieses Skripts bzw. des Bots, auf dem es läuft.
Rückgabe Text
LogInfo(ScriptName + " läuft auf " + InstanceName)
Skript „_shared“
Gemeinsamer Code: Ein Skript mit dem Namen „_shared“ wird automatisch vor jedem anderen Skript desselben Bots ausgeführt. Hilfsfunktionen und Konstanten, die mehrere Skripte brauchen, stehen so nur an einer Stelle. Fehler darin meldet das Log als „Fehler in _shared, Zeile …“.
Rückgabe –
// Skript „_shared“:
function ToMsu(r) { return r.Metal + r.Crystal * 1.5 + r.Deuterium * 3 }

// jedes andere Skript dieses Bots:
LogInfo("MSU: " + FormatNumber(ToMsu(GetResources(GetHomeWorld()))))
Formatieren & Koordinaten 5 FormatNumber · FormatDuration · FormatTime · ParseCoord · FormatCoord
FormatNumber(zahl)
Zahl im englischen Format mit Tausender-Kommas (1,366,412).
Rückgabe Text
LogInfo("Metall:", FormatNumber(GetResources(GetHomeWorld()).Metal))   // Metall: 1,366,412
FormatDuration(sekunden)
Formatiert Sekunden als "hh:mm:ss" (ab 24 h mit Tagen).
Rückgabe Text
for (const f of GetFleets())
    LogInfo("Flotte", f.ID, "zurück in", FormatDuration(f.BackIn || f.ArriveIn))
FormatTime(zeitstempel | isoText, format?)
Zeitstempel oder ISO-Zeit als lokale Uhrzeit (englisches Format: heute "HH:mm:ss", sonst "yyyy-MM-dd HH:mm:ss" – oder eigenes Format).
Rückgabe Text
const r = LatestReturn(MISSION.EXPEDITION)
LogInfo("Letzte Expedition zurück um", FormatTime(r.At))
ParseCoord(koordinate)
Zerlegt "g:s:p" oder "g:s:p:typ" in ein Objekt. Ohne Typ: Position 16 = Deep Space, sonst Planet. Keine Spielanfrage.
Rückgabe { Galaxy, System, Position, Type }
const c = ParseCoord("2:150:8")
LogInfo("Galaxie", c.Galaxy, "System", c.System)
FormatCoord(koordinate)
Macht aus einem Koordinaten- oder Himmelskörper-Objekt den Text "g:s:p".
Rückgabe Text
const home = GetHomeWorld()
const ziel = FormatCoord({ Galaxy: home.Coordinate.Galaxy, System: home.Coordinate.System + 1, Position: 16 })
// ziel = "1:17:16"
Zufall 3 RandomInt · DailyRandom · DailyRandomTime
RandomInt(min, max)
Zufällige ganze Zahl von min bis max (beide eingeschlossen).
Rückgabe Zahl
const home = GetHomeWorld()
const system = home.Coordinate.System + RandomInt(-2, 2)
const ziel = home.Coordinate.Galaxy + ":" + system + ":16"
DailyRandom(min, max, salt?)
Zufallszahl, die den ganzen Tag gleich bleibt und sich täglich ändert – ideal für tagesfeste, aber jeden Tag andere Zeiten. Ohne salt pro Skript verschieden.
Rückgabe Zahl
// jeden Tag ein anderer, aber über den Tag fester Versatz von 0–15 Minuten
const versatz = DailyRandom(0, 900)
SleepUntil(NextTimeAt("06:00") + versatz)
DailyRandomTime("von", "bis", salt?)
Tagesfeste Zufalls-Uhrzeit in einem Fenster (auch über Mitternacht).
Rückgabe "HH:MM:SS"
const aufstehen = DailyRandomTime("06:10", "06:40")
LogInfo("Heute Rückkehr um", aufstehen)
FleetSave(GetHomeWorld(), aufstehen)

Zeit

Uhrzeiten & Zeitstempel 5 Timestamp · TimeOfDay · NextTimeAt · TimeAt · IsTimeBetween
Timestamp()
Aktuelle Zeit als Unix-Zeitstempel in Sekunden.
Rückgabe Zahl
const start = Timestamp()
// … Arbeit …
LogInfo("Dauer:", FormatDuration(Timestamp() - start))
TimeOfDay()
Aktuelle lokale Uhrzeit als "HH:MM:SS".
Rückgabe Text
LogInfo("Es ist", TimeOfDay())
NextTimeAt("HH:MM[:SS]")
Zeitstempel des nächsten Auftretens einer Uhrzeit (heute, sonst morgen).
Rückgabe Zeitstempel
const ziel = NextTimeAt("07:00")
LogInfo("Noch", FormatDuration(ziel - Timestamp()), "bis 07:00")
TimeAt("HH:MM[:SS]", tagVersatz?)
Zeitstempel einer Uhrzeit an einem bestimmten Tag (0 = heute, 1 = morgen, -1 = gestern).
Rückgabe Zeitstempel
const morgenFrueh = TimeAt("06:30", 1)
LogInfo("Morgen 06:30 =", FormatTime(morgenFrueh))
IsTimeBetween("von", "bis")
Ob die aktuelle Uhrzeit im Fenster liegt – auch über Mitternacht ("22:00" bis "06:00").
Rückgabe true | false
if (IsTimeBetween("01:00", "06:30")) { LogInfo("Nachtpause"); SleepUntil("06:30") }
Warten bis Uhrzeit 2 SleepUntil · SleepUntilIfToday
SleepUntil("HH:MM[:SS]" | zeitstempel)
Wartet bis zu einer Uhrzeit (nächstes Auftreten) oder einem Zeitstempel. Anhalten/Pause greifen weiter.
Rückgabe –
SleepUntil("06:30")
LogInfo("Guten Morgen – Flotte zurückholen")
SleepUntilIfToday("HH:MM[:SS]")
Wartet nur, wenn die Uhrzeit heute noch kommt; sonst sofort false.
Rückgabe true (gewartet) | false (heute schon vorbei)
if (SleepUntilIfToday("18:00")) BuyOfferOfTheDay()
else LogInfo("18:00 heute schon vorbei – übersprungen")

Konto & Server

Spieler & Konto 7 GetUserInfo · GetUsername · GetUserClass · GetAllianceClass · GetResearch · IsUnderAttack · IsVacationMode
GetUserInfo()
Spielerdaten: Name, Punkte, Platz, Ehrenpunkte, Klasse (CHARACTER_CLASS).
Rückgabe { PlayerID, PlayerName, Points, Rank, Total, HonourPoints, Class }
const me = GetUserInfo()
LogInfo(me.PlayerName, "– Platz", me.Rank, "von", me.Total, "–", me.Points, "Punkte")
GetUsername()
Login-Name des Kontos – bei Gameforge-Konten die E-Mail-Adresse, NICHT der Spielername (den liefert GetUserInfo().PlayerName). Vorsicht beim Loggen.
Rückgabe Text
const login = GetUsername()
LogInfo("Login:", login.replace(/^(..).*(@.*)$/, "$1***$2"))   // maskiert ausgeben
GetUserClass()
Charakterklasse als Zahl (siehe CHARACTER_CLASS).
Rückgabe 0 | 1 | 2 | 3
if (GetUserClass() === CHARACTER_CLASS.DISCOVERER)
    LogInfo("Entdecker: mehr Expeditions-Ertrag")
GetAllianceClass()
Allianzklasse als Zahl (siehe ALLIANCE_CLASS).
Rückgabe 0 | 1 | 2 | 3
if (GetAllianceClass() === ALLIANCE_CLASS.TRADER) LogInfo("Händler-Allianz")
GetResearch()
Forschungsstufen des Kontos.
Rückgabe { EnergyTechnology, LaserTechnology, …, Astrophysics, ComputerTechnology, … }
const r = GetResearch()
const maxExpos = Math.floor(Math.sqrt(r.Astrophysics))
LogInfo("Max. Expeditionen laut Astrophysik:", maxExpos)
IsUnderAttack()
Ob gerade ein feindlicher Angriff unterwegs ist.
Rückgabe true | false
if (IsUnderAttack() && !IsScriptRunning("Fleetsave")) StartScript("Fleetsave")
IsVacationMode()
Ob der Urlaubsmodus aktiv ist.
Rückgabe true | false
if (IsVacationMode()) Exit()
Offiziere 2 GetStaff · HasCommander
GetStaff()
Welche Offiziere aktiv sind (alle auf einmal).
Rückgabe { Commander, Admiral, Engineer, Geologist, Technocrat }
const staff = GetStaff()
if (!staff.Admiral) LogWarn("Kein Admiral – ein Flottenslot weniger")
HasCommander() / HasAdmiral() / HasEngineer() / HasGeologist() / HasTechnocrat()
Einzelabfrage je Offizier.
Rückgabe true | false
if (HasGeologist()) LogInfo("Geologe aktiv: +10 % Minenproduktion")
Server & Universum 9 GetServerData · GetServerInfo · GetServerTime · GetServerSpeed · GetServerName · GetOgamedIP · GetHiveIP · GetOgamedTasks · GameLogin
GetServerData()
Universums-Einstellungen: Geschwindigkeiten, Galaxien/Systeme, Trümmerfeld-Faktoren, Donut-Universum …
Rückgabe { Speed, SpeedFleetWar, SpeedFleetPeaceful, SpeedFleetHolding, Galaxies, Systems, DonutGalaxy, DonutSystem, DebrisFactor, … }
const sd = GetServerData()
LogInfo("Uni", sd.Name, "Speed", sd.Speed, "–", sd.Galaxies, "Galaxien")
GetServerInfo()
Allgemeine Server-Infos inkl. Spieler online.
Rückgabe { Name, Number, Language, PlayerCount, PlayersOnline, Opened, StartDate, … }
const info = GetServerInfo()
LogInfo(info.PlayersOnline, "von", info.PlayerCount, "Spielern online")
GetServerTime()
Aktuelle Serverzeit als Zeitstempel.
Rückgabe ISO-Zeitstempel (Text)
const t = new Date(GetServerTime())
if (t.getHours() >= 1 && t.getHours() < 6) LogInfo("Nachtruhe auf dem Server")
GetServerSpeed() / GetServerFleetSpeed()
Ökonomie- bzw. Flottengeschwindigkeit als Zahl.
Rückgabe Zahl
LogInfo("Ökonomie x" + GetServerSpeed(), "Flotte x" + GetServerFleetSpeed())
GetServerName() / GetServerLanguage() / GetServerUrl() / GetServerVersion()
Einzelne Server-Angaben als Text.
Rückgabe Text
LogInfo(GetServerName(), GetServerLanguage().toUpperCase(), "Version", GetServerVersion())
GetOgamedIP()
IP-Adresse, mit der ogamed ins Internet geht (wichtig bei Proxy-Nutzung).
Rückgabe Text
LogInfo("ogamed geht raus über", GetOgamedIP())
GetHiveIP()
Öffentliche IP-Adresse, mit der HIVE selbst ins Internet geht (im Gegensatz zu GetOgamedIP, der IP der Spielverbindung).
Rückgabe Text
LogInfo("HIVE:", GetHiveIP(), "– Spiel:", GetOgamedIP())
GetOgamedTasks()
Warteschlange der Spielverbindung (ogamed): wie viele Anfragen gerade nach Priorität anstehen. Gut, um vor großen Aktionen zu warten, bis der Bot nichts mehr zu tun hat.
Rückgabe { Low, Normal, Important, Critical, Total }
while (GetOgamedTasks().Total > 0) Sleep(500)
LogInfo("ogamed ist frei")
GameLogin()
Meldet die Spielsitzung neu an (z. B. nach GameLogout oder wenn die Sitzung abgelaufen ist).
Rückgabe –
try { GetUserInfo() } catch (e) { LogWarn("Sitzung weg – melde neu an"); GameLogin() }

Planeten & Monde

Himmelskörper finden 11 GetPlanets · GetMoons · GetCelestials · GetPlanetsLive · GetHomeWorld · GetCelestial · GetPlanetAt · GetMoonAt · NearestOwnMoon · GetEmpire · MaxPlanets
GetPlanets()
Eigene Planeten (Stand der letzten Aktualisierung durch HIVE, ohne Anfrage ans Spiel – schnell).
Rückgabe [ { ID, Name, Type, Coordinate, Coords, Fields, Temperature } ]
for (const p of GetPlanets())
    LogInfo(p.Name, p.Coords, p.Fields.Built + "/" + p.Fields.Total, "Felder")
GetMoons()
Eigene Monde (ohne Spielanfrage).
Rückgabe [ { ID, Name, Type, Coordinate, Coords, Fields } ]
LogInfo("Du hast", GetMoons().length, "Monde")
GetCelestials()
Alle eigenen Planeten und Monde (ohne Spielanfrage).
Rückgabe [ Himmelskörper ]
for (const c of GetCelestials())
    LogInfo(c.Type === "Moon" ? "Mond" : "Planet", c.Name, c.Coords)
GetPlanetsLive() / GetMoonsLive()
Wie GetPlanets/GetMoons, aber frisch vom Server – z. B. direkt nach einer Kolonisierung.
Rückgabe [ Himmelskörper ]
const vorher = GetPlanets().length
SleepMin(1)
if (GetPlanetsLive().length > vorher) LogInfo("Neue Kolonie!")
GetHomeWorld()
Die Homeworld dieses Bots – festgelegt im Reiter „Bot-Einstellungen“ (Planet oder Mond). Ohne Festlegung (oder wenn der Himmelskörper nicht mehr existiert) der älteste Planet.
Rückgabe Himmelskörper { ID, Name, Type, Coords, Coordinate, … } | null
const home = GetHomeWorld()
LogInfo("Heimat:", home.Name, home.Coords)
GetCelestial(ref)
Sucht einen eigenen Himmelskörper. ref = ID, Objekt aus GetPlanets(), Name oder "1:16:4" (Planet) / "1:16:4:3" (Mond).
Rückgabe Himmelskörper
const mond = GetCelestial("1:16:4:3")
const kolonie = GetCelestial("Kolonie")
GetPlanetAt(koordinate)
Planet an einer Koordinate (eigener Planet mit ID, Feldern, Temperatur, Mond). null, wenn dort keiner ist.
Rückgabe Planet | null
const p = GetPlanetAt("1:16:4")
if (p) LogInfo(p.Name, "hat", p.Fields.Total, "Felder, max.", p.Temperature.Max, "°C")
GetMoonAt(koordinate)
Mond an einer Koordinate, null wenn dort keiner ist.
Rückgabe Mond | null
if (!GetMoonAt(GetHomeWorld().Coords)) LogInfo("Heimatplanet hat (noch) keinen Mond")
NearestOwnMoon(ref | koordinate)
Nächster eigener Mond (nach OGame-Entfernung), ohne den Mond an der Startposition selbst.
Rückgabe Mond | null
const mond = NearestOwnMoon(GetHomeWorld())
if (!mond) LogWarn("Kein Mond für einen Fleetsave vorhanden")
GetEmpire("planets" | "moons")
Imperiumsübersicht: alle Planeten (oder Monde) mit Rohstoffen, Gebäuden, Schiffen und Verteidigung in EINER Anfrage – viel schneller als einzeln.
Rückgabe [ { ID, Name, Coords, Coordinate, Fields, Resources, Buildings, Facilities, Ships, Defences } ]
let metall = 0
for (const p of GetEmpire("planets")) metall += p.Resources.Metal
LogInfo("Metall gesamt:", metall)
MaxPlanets()
Maximale Anzahl Planeten laut Astrophysik.
Rückgabe Zahl
if (GetPlanets().length < MaxPlanets()) StartModule("Colonize")
Rohstoffe & Produktion 7 GetResources · GetResourcesDetails · GetResourceSettings · SetResourceSettings · PlanetProduction · StorageCapacity · ResourceValue
GetResources(ref)
Aktueller Rohstoffbestand eines Himmelskörpers.
Rückgabe { Metal, Crystal, Deuterium, Energy, Food, Population, Darkmatter }
const r = GetResources(GetHomeWorld())
if (r.Energy < 0) LogWarn("Energiemangel auf dem Heimatplaneten")
GetResourcesDetails(planet)
Bestand, Lagerkapazität und Produktion pro Stunde (nur Planeten).
Rückgabe { Metal: { Available, StorageCapacity, CurrentProduction }, Crystal, Deuterium, Energy, Food, Population }
const d = GetResourcesDetails(GetHomeWorld())
if (d.Metal.Available >= d.Metal.StorageCapacity)
    LogWarn("Metalllager voll – Mine steht")
GetResourceSettings(planet)
Produktionsfaktoren der Minen/Kraftwerke (0 bis 1 = 0–100 %).
Rückgabe { MetalMine, CrystalMine, DeuteriumSynthesizer, SolarPlant, FusionReactor, SolarSatellite, Crawler }
const f = GetResourceSettings(GetHomeWorld())
if (f.MetalMine < 1) LogWarn("Metallmine läuft nur mit", f.MetalMine * 100, "%")
SetResourceSettings(planet, { MetalMine, CrystalMine, DeuteriumSynthesizer, SolarPlant, FusionReactor, SolarSatellite, Crawler })
Setzt die Produktionsfaktoren in Prozent (0–100 in 10er-Schritten, Crawler bis 150). Nicht angegebene Werte bleiben, wie sie sind.
Rückgabe die neuen Einstellungen (wie GetResourceSettings)
// Nachts Fusionskraftwerk aus, spart Deuterium
for (const p of GetPlanets())
    SetResourceSettings(p, { FusionReactor: 0 })
PlanetProduction(planet)
Stündliche Produktion nach TBots Formel (Minen, Plasma, Klasse, Geologe, Crawler, Produktionsfaktoren).
Rückgabe { Metal, Crystal, Deuterium, Food }
const p = PlanetProduction("Heimatplanet")
LogInfo("pro Tag:", FormatNumber(p.Metal * 24), "Metall")
StorageCapacity(stufe)
Fassungsvermögen eines Speichers dieser Stufe.
Rückgabe Anzahl
const b = GetBuildings("Heimatplanet")
LogInfo("Metallspeicher fasst", FormatNumber(StorageCapacity(b.MetalStorage)))
ResourceValue(rohstoffe, kurs?)
Wert in Metall-Einheiten (MSU). Kurs [Metall, Kristall, Deut], Standard [3, 2, 1].
Rückgabe Zahl
LogInfo("Heimatplanet ist", FormatNumber(ResourceValue(GetResources(GetHomeWorld()))), "MSU wert")
Energie & Crawler 5 EnergyProduction · SolarSatelliteProduction · SolarSatellitesNeeded · OptimalCrawlers · MaxCrawlers
EnergyProduction(gebäude, stufe)
Energie eines Solar-/Fusionskraftwerks auf dieser Stufe (mit Energietechnik, Klasse, Ingenieur).
Rückgabe Energie
LogInfo(EnergyProduction(BUILDING.SolarPlant, 30))
SolarSatelliteProduction(planet)
Energie eines Solarsatelliten auf diesem Planeten (hängt von der Temperatur ab).
Rückgabe Energie pro Satellit
LogInfo(SolarSatelliteProduction("Heimatplanet"))
SolarSatellitesNeeded(planet, [energie])
Wie viele Solarsatelliten für diese Energiemenge nötig sind (ohne Angabe: um das aktuelle Defizit auszugleichen).
Rückgabe Anzahl
const n = SolarSatellitesNeeded("Heimatplanet")
if (n > 0) BuildShips("Heimatplanet", SHIP.SolarSatellite, n)
OptimalCrawlers(planet)
Wie viele Crawler sich auf diesem Planeten lohnen (TBot-Berechnung).
Rückgabe Anzahl
const fehlt = OptimalCrawlers("Heimatplanet") - GetShips("Heimatplanet").Crawler
if (fehlt > 0) BuildShips("Heimatplanet", SHIP.Crawler, fehlt)
MaxCrawlers(planet)
Höchstzahl wirksamer Crawler auf diesem Planeten (8 pro Minenstufe, Sammler/Geologe mehr).
Rückgabe Anzahl
LogInfo(MaxCrawlers("Heimatplanet"))
Gebäude & Anlagen 6 GetBuildings · GetFacilities · GetTechs · GetConstructions · GetProduction · ShipyardQueueTime
GetBuildings(ref)
Stufen der Versorgungsgebäude.
Rückgabe { MetalMine, CrystalMine, DeuteriumSynthesizer, SolarPlant, FusionReactor, SolarSatellite, MetalStorage, CrystalStorage, DeuteriumTank }
const b = GetBuildings(GetHomeWorld())
LogInfo("Minen:", b.MetalMine, b.CrystalMine, b.DeuteriumSynthesizer)
GetFacilities(ref)
Stufen der Anlagen.
Rückgabe { RoboticsFactory, Shipyard, ResearchLab, AllianceDepot, MissileSilo, NaniteFactory, Terraformer, SpaceDock, LunarBase, SensorPhalanx, JumpGate }
if (GetFacilities(GetHomeWorld()).Shipyard < 4) LogWarn("Werft zu klein für Große Transporter")
GetTechs(ref)
Gebäude, Anlagen, Schiffe, Verteidigung und Forschung eines Himmelskörpers in einer Anfrage.
Rückgabe { supplies, facilities, ships, defenses, researches }
const t = GetTechs(GetHomeWorld())
LogInfo("Werft", t.facilities.Shipyard, "– LC:", t.ships.LargeCargo)
GetConstructions(ref)
Laufender Bau und laufende Forschung (Countdown in Sekunden, 0 = nichts).
Rückgabe { BuildingID, BuildingCountdown, ResearchID, ResearchCountdown, LFBuildingID, LFBuildingCountdown, LFResearchID, LFResearchCountdown }
const k = GetConstructions(GetHomeWorld())
if (k.BuildingID === 0) LogInfo("Bauschleife frei")
else LogInfo("Bau fertig in", FormatDuration(k.BuildingCountdown))
GetProduction(ref)
Werft-/Verteidigungs-Warteschlange.
Rückgabe [ { ID, Nbr } ]
if (GetProduction(GetHomeWorld()).length === 0) LogInfo("Werft ist frei")
ShipyardQueueTime(ref)
Restzeit der Werft-/Verteidigungs-Warteschlange in Sekunden, aus der Übersichtsseite gelesen (1 Spielanfrage). 0 = Werft frei.
Rückgabe Sekunden
const rest = ShipyardQueueTime(GetHomeWorld())
LogInfo("Werft frei in", FormatDuration(rest))
Schiffe & Verteidigung 4 GetShips · GetDefences · MobileShips · ShipsTotal
GetShips(ref)
Schiffe auf dem Himmelskörper.
Rückgabe { LightFighter, …, SmallCargo, LargeCargo, …, Reaper, Pathfinder }
const s = GetShips(GetHomeWorld())
LogInfo("Große Transporter:", s.LargeCargo, "Pathfinder:", s.Pathfinder)
GetDefences(ref)
Verteidigungsanlagen auf dem Himmelskörper.
Rückgabe { RocketLauncher, LightLaser, …, AntiBallisticMissiles, InterplanetaryMissiles }
const d = GetDefences(GetHomeWorld())
if (d.RocketLauncher < 100) BuildDefence(GetHomeWorld(), DEFENCE.RocketLauncher, 100 - d.RocketLauncher)
MobileShips(schiffe, reserve?)
Flugfähige Schiffe (ohne Solarsatelliten/Crawler) abzüglich einer Reserve.
Rückgabe { Schiffname: Anzahl }
const senden = MobileShips(GetShips(home), { LargeCargo: 50, EspionageProbe: 1 })
SendFleet(home, senden, "1:16:4:3", MISSION.DEPLOY)
ShipsTotal(schiffe)
Gesamtanzahl Schiffe in einem Schiffs-Objekt.
Rückgabe Zahl
LogInfo("Schiffe auf der Heimat:", ShipsTotal(GetShips(GetHomeWorld())))
Items & Artefakte 2 GetItems · GetArtifacts
GetItems(ref)
Items/Booster im Inventar (Ref, Name, Seltenheit, Anzahl).
Rückgabe [ { Ref, Name, Title, Rarity, Amount, AmountFree, AmountBought, Image } ]
for (const i of GetItems(GetHomeWorld()))
    if (i.Amount > 0) LogInfo(i.Name, "×", i.Amount)
GetArtifacts(ref)
Gesammelte Artefakte und Limit (Entdeckungsmissionen).
Rückgabe { ArtifactsCollected, ArtifactsLimit }
const a = GetArtifacts(GetHomeWorld())
if (a.ArtifactsCollected >= a.ArtifactsLimit) LogWarn("Artefaktspeicher voll")

Bauen & Forschen

Bauen 6 BuildBuilding · BuildCancelable · BuildShips · BuildDefence · BuildProduction · CancelBuilding
BuildBuilding(ref, id)
Baut ein Gebäude/eine Anlage eine Stufe aus.
Rückgabe –
const home = GetHomeWorld()
if (GetConstructions(home).BuildingID === 0) BuildBuilding(home, BUILDING.MetalMine)
BuildCancelable(ref, id)
Wie BuildBuilding, über den abbrechbaren Bau-Aufruf (so baut auch HIVE selbst).
Rückgabe –
BuildCancelable(GetHomeWorld(), BUILDING.CrystalMine)
BuildShips(ref, id, anzahl)
Gibt Schiffe in der Werft in Auftrag.
Rückgabe –
BuildShips(GetHomeWorld(), SHIP.LargeCargo, 100)
BuildDefence(ref, id, anzahl)
Gibt Verteidigung in Auftrag.
Rückgabe –
BuildDefence(GetHomeWorld(), DEFENCE.RocketLauncher, 200)
BuildProduction(ref, id, anzahl)
Gibt Schiffe oder Verteidigung über den allgemeinen Produktionsauftrag in Auftrag – wie BuildShips/BuildDefence, aber für beides.
Rückgabe –
BuildProduction("Heimatplanet", DEFENCE.RocketLauncher, 100)
BuildProduction("Heimatplanet", SHIP.EspionageProbe, 10)
CancelBuilding(ref)
Bricht den laufenden Gebäudebau ab.
Rückgabe –
if (GetConstructions(home).BuildingID === BUILDING.Terraformer) CancelBuilding(home)
Forschung 3 BuildResearch · CancelResearch · ResearchTime
BuildResearch(ref, id)
Startet eine Forschung auf dem Planeten.
Rückgabe –
const home = GetHomeWorld()
if (GetConstructions(home).ResearchID === 0) BuildResearch(home, RESEARCH.Astrophysics)
CancelResearch(ref)
Bricht die laufende Forschung ab.
Rückgabe –
CancelResearch(GetHomeWorld())
ResearchTime(forschung, [stufe], [planet])
Forschungsdauer nach TBots Formel inkl. Intergalaktischem Forschungsnetzwerk, Forscher-Klasse und Technokrat. Ohne Stufe: nächste Stufe, ohne Planet: der mit dem größten Forschungslabor. Lädt beim ersten Aufruf die Anlagen aller Planeten.
Rückgabe Sekunden
LogInfo("Astro dauert", FormatDuration(ResearchTime(RESEARCH.Astrophysics)))
Kosten & Voraussetzungen 8 GetPrice · PriceRange · CanAfford · MissingResources · MaxBuildable · GetRequirements · BuildTime · GetNextLevel
GetPrice(id, stufeOderAnzahl)
Kosten eines Gebäudes/einer Forschung (Stufe) oder von Schiffen/Verteidigung (Anzahl).
Rückgabe { Metal, Crystal, Deuterium, Energy, … }
const kosten = GetPrice(SHIP.LargeCargo, 100)
const r = GetResources(GetHomeWorld())
if (r.Metal >= kosten.Metal && r.Crystal >= kosten.Crystal)
    BuildShips(GetHomeWorld(), SHIP.LargeCargo, 100)
PriceRange(id, vonStufe, bisStufe)
Gesamtkosten mehrerer Stufen eines Gebäudes/einer Forschung (auch Lebensformen) – berechnet ohne Spielanfrage.
Rückgabe { Metal, Crystal, Deuterium }
const k = PriceRange(BUILDING.MetalMine, 31, 35)
LogInfo("Metallmine 31–35 kostet", FormatNumber(k.Metal), "M", FormatNumber(k.Crystal), "K")
CanAfford(kosten, bestand)
Ob der Bestand für die Kosten reicht.
Rückgabe true | false
if (CanAfford(GetPrice(BUILDING.MetalMine, 31), GetResources(home))) BuildBuilding(home, BUILDING.MetalMine)
MissingResources(kosten, bestand)
Was noch fehlt (0, wenn genug da ist).
Rückgabe { Metal, Crystal, Deuterium }
const fehlt = MissingResources(GetPrice(RESEARCH.Astrophysics, 10), GetResources(home))
LogInfo("Es fehlen", FormatNumber(fehlt.Crystal), "Kristall")
MaxBuildable(id, rohstoffe)
Wie viele Einheiten eines Schiffs/einer Verteidigung man sich mit diesen Rohstoffen leisten kann.
Rückgabe Anzahl
const res = GetResources("Heimatplanet")
BuildShips("Heimatplanet", SHIP.LargeCargo, MaxBuildable(SHIP.LargeCargo, res))
GetRequirements(id)
Voraussetzungen eines Gebäudes, einer Forschung, eines Schiffs oder einer Lebensform-Stufe.
Rückgabe [ { ID, Name, Level } ]
for (const r of GetRequirements(SHIP.LargeCargo))
    LogInfo("Braucht", r.Name, "Stufe", r.Level)
BuildTime(id, stufe, ref)
Bauzeit eines Gebäudes/einer Forschung auf einer Stufe bzw. von Schiffen (Anlagen des Planeten werden abgefragt).
Rückgabe Sekunden
const t = BuildTime(BUILDING.MetalMine, 30, GetHomeWorld())
LogInfo("Metallmine 30 dauert", FormatDuration(t))
GetNextLevel(ref, id)
Nächste Stufe eines Gebäudes, einer Forschung (ref egal) oder eines Lebensform-Objekts – berücksichtigt laufende Bauten wie TBot.
Rückgabe Stufe
const n = GetNextLevel("Heimatplanet", BUILDING.MetalMine)
LogInfo("Metallmine", n, "kostet", PriceRange(BUILDING.MetalMine, n, n))
Bauempfehlungen (TBot) 7 NextMineToBuild · NextEnergySourceToBuild · NextResearchToBuild · NextLunarFacilityToBuild · NextLifeformBuildingToBuild · NextLifeformResearchToBuild · IsAstrophysicsPositionValid
NextMineToBuild(planet, [maxMetall], [maxKristall], [maxDeut], [startOptimiert])
Welche Mine TBots AutoMine als nächstes bauen würde (nach Amortisation, Rohstoffkurs und Klasse).
Rückgabe Gebäudename oder null
const next = NextMineToBuild("Heimatplanet", 40, 35, 30)
if (next) BuildBuilding("Heimatplanet", next)
NextEnergySourceToBuild(planet, [maxSolar], [maxFusion], [satelliten])
Welche Energiequelle TBot als nächstes bauen würde (Solarkraftwerk, Fusionskraftwerk oder Solarsatelliten).
Rückgabe Gebäude-/Schiffsname oder null
LogInfo(NextEnergySourceToBuild("Heimatplanet", 30, 20, true))
NextResearchToBuild([planet])
Welche Forschung TBots AutoResearch als nächstes wählen würde (mit dessen Standard-Höchststufen).
Rückgabe Forschungsname oder null
const r = NextResearchToBuild()
if (r) BuildResearch("Heimatplanet", r)
NextLunarFacilityToBuild(mond, [{ LunarBase, RoboticsFactory, SensorPhalanx, JumpGate, Shipyard }])
Welche Mondanlage TBot als nächstes bauen würde, mit optionalen Höchststufen (Standard 8/8/6/1/0).
Rückgabe Gebäudename oder null
const b = NextLunarFacilityToBuild("1:16:4:3", { SensorPhalanx: 8 })
if (b) BuildBuilding("1:16:4:3", b)
NextLifeformBuildingToBuild(planet, [{ max, preventIfMoreExpensiveThanNextMine, preventTechBuilding }])
Welches Lebensform-Gebäude TBots Lifeform-AutoMine als nächstes bauen würde. max = Höchststufen je Gebäude, z. B. { ResidentialSector: 40 }.
Rückgabe Gebäudename oder null
const b = NextLifeformBuildingToBuild("Heimatplanet", { max: { ResidentialSector: 40, BiosphereFarm: 40 } })
if (b) BuildLifeformBuilding("Heimatplanet", b)
NextLifeformResearchToBuild(planet, [höchststufen])
Welche Lebensform-Forschung TBot als nächstes wählen würde (die günstigste freigeschaltete).
Rückgabe Forschungsname oder null
const t = NextLifeformResearchToBuild("Heimatplanet")
if (t) BuildLifeformResearch("Heimatplanet", t)
IsAstrophysicsPositionValid(position)
Ob die Planetenposition (1–15) mit deiner Astrophysik-Stufe besiedelbar ist.
Rückgabe true/false
for (let pos = 1; pos <= 15; pos++) if (!IsAstrophysicsPositionValid(pos)) LogInfo("Position", pos, "noch gesperrt")
Amortisation 5 AmortizationDays · BuildingROI · NextAmortizationDays · AstrophysicsAmortizationDays · PlasmaAmortizationDays
AmortizationDays(planet, gebäude)
Nach wie vielen Tagen sich die nächste Stufe einer Mine bezahlt macht (TBots Days-Of-Investment-Return).
Rückgabe Tage
for (const m of [BUILDING.MetalMine, BUILDING.CrystalMine, BUILDING.DeuteriumSynthesizer])
    LogInfo(m, AmortizationDays("Heimatplanet", m), "Tage")
BuildingROI(planet, gebäude)
Rendite der nächsten Minenstufe nach TBot (höher = lohnender).
Rückgabe Zahl
LogInfo(BuildingROI("Heimatplanet", BUILDING.CrystalMine))
NextAmortizationDays(planet)
Amortisation der günstigsten nächsten Mine auf diesem Planeten.
Rückgabe Tage
for (const p of GetPlanets()) LogInfo(p.Name, NextAmortizationDays(p), "Tage")
AstrophysicsAmortizationDays()
Amortisation der nächsten Astrophysik-Stufe inkl. neuer Kolonie mit Minen (über alle Planeten; lädt alle Planeten).
Rückgabe Tage
LogInfo("Astro:", AstrophysicsAmortizationDays(), "Plasma:", PlasmaAmortizationDays())
PlasmaAmortizationDays()
Amortisation der nächsten Plasmatechnik-Stufe über alle Planeten.
Rückgabe Tage
if (PlasmaAmortizationDays() < NextAmortizationDays("Heimatplanet")) BuildResearch("Heimatplanet", RESEARCH.PlasmaTechnology)
Lebensformen 9 GetLifeformBuildings · GetLifeformResearch · GetLifeformBonuses · BuildLifeformBuilding · BuildLifeformResearch · GetLifeformPrice · LifeformBuildTime · LifeformResearchTime · LifeformPopulation
GetLifeformBuildings(ref)
Stufen der Lebensform-Gebäude (Namen wie in LF_BUILDING).
Rückgabe { LifeformType, ResidentialSector, BiosphereFarm, ResearchCentre, … }
const lf = GetLifeformBuildings(GetHomeWorld())
LogInfo("Wohnsektor Stufe", lf.ResidentialSector)
GetLifeformResearch(ref)
Stufen der Lebensform-Forschungen (Namen wie in LF_RESEARCH).
Rückgabe { IntergalacticEnvoys, HighPerformanceExtractors, … }
const t = GetLifeformResearch(GetHomeWorld())
LogInfo("Hochleistungsextraktoren Stufe", t.HighPerformanceExtractors)
GetLifeformBonuses()
Alle Lebensform-Boni des Kontos (Produktion, Schiffe, Forschung …).
Rückgabe großes Objekt mit Bonus-Feldern
LogDebug(GetLifeformBonuses())
BuildLifeformBuilding(ref, id)
Baut ein Lebensform-Gebäude aus. id = LF_BUILDING.* oder Name.
Rückgabe –
BuildLifeformBuilding(GetHomeWorld(), LF_BUILDING.ResidentialSector)
BuildLifeformResearch(ref, id)
Startet eine Lebensform-Forschung. id = LF_RESEARCH.* oder Name.
Rückgabe –
BuildLifeformResearch(GetHomeWorld(), LF_RESEARCH.HighPerformanceExtractors)
GetLifeformPrice(id, stufe)
Kosten eines Lebensform-Gebäudes oder einer Lebensform-Forschung auf einer Stufe.
Rückgabe { Metal, Crystal, Deuterium, Food, Population, … }
const k = GetLifeformPrice(LF_BUILDING.BiosphereFarm, 10)
LogInfo("Biosphärenfarm 10 kostet", k.Metal, "Metall")
LifeformBuildTime(gebäude, stufe, planet)
Bauzeit eines Lebensform-Gebäudes nach TBots Formel.
Rückgabe Sekunden
LogInfo(FormatDuration(LifeformBuildTime(LF_BUILDING.ResidentialSector, 20, "Heimatplanet")))
LifeformResearchTime(forschung, stufe, [zeitReduktion])
Dauer einer Lebensform-Forschung nach TBots Formel (zeitReduktion als Anteil, z. B. 0.1 = 10 %).
Rückgabe Sekunden
LogInfo(FormatDuration(LifeformResearchTime(LF_RESEARCH.IntergalacticEnvoys, 5)))
LifeformPopulation(planet)
Bevölkerung und Nahrung nach TBots Lebensform-Formeln.
Rückgabe { LivingSpace, Satisfied, FoodProduction, FoodConsumption }
const p = LifeformPopulation("Heimatplanet")
if (p.FoodProduction < p.FoodConsumption) LogWarn("Nahrung reicht nicht!")

Flotten

Flotten-Status 6 GetSlots · GetFleets · RefreshFleets · LatestReturn · WaitForFleets · MaxExpeditions
GetSlots()
Belegte und gesamte Flotten- und Expeditionsslots.
Rückgabe { InUse, Total, ExpInUse, ExpTotal }
const s = GetSlots()
const freiExpos = Math.min(s.ExpTotal - s.ExpInUse, s.Total - s.InUse)
LogInfo("Freie Expeditionsplätze:", freiExpos)
GetFleets()
Eigene Flotten unterwegs (ArriveIn/BackIn in Sekunden). Achtung: Auf dem Rückflug ist ArriveIn -1 und die Restzeit steht in BackIn – Zeit bis zur Heimkehr also immer Math.max(f.ArriveIn, f.BackIn ?? -1).
Rückgabe [ { ID, Mission, ReturnFlight, Origin, Destination, Ships, Resources, ArrivalTime, BackTime, ArriveIn, BackIn } ]
const expos = GetFleets().filter(f => f.Mission === MISSION.EXPEDITION)
const spaeteste = Math.max(0, ...expos.map(f => f.BackIn || 0))
LogInfo(expos.length, "Expeditionen, alle zurück in", FormatDuration(spaeteste))
RefreshFleets()
Liest die Flotten neu und aktualisiert dabei auch TBots eigene Flottenliste (die die Module benutzen).
Rückgabe Liste der Flotten (wie GetFleets)
const fleets = RefreshFleets()
LogInfo(fleets.length, "Flotten unterwegs")
LatestReturn(mission?)
Wann die letzte eigene Flotte (optional nur einer Mission) zurück ist.
Rückgabe { Count, InSeconds, At }
const r = LatestReturn(MISSION.EXPEDITION)
LogInfo(r.Count, "Expeditionen, letzte zurück um", FormatTime(r.At))
WaitForFleets(mission?, maxSekunden?)
Wartet, bis keine Flotte (der Mission) mehr unterwegs ist – schläft dabei sinnvoll lange.
Rückgabe true (alle zurück) | false (Zeitlimit)
WaitForFleets(MISSION.EXPEDITION)
LogInfo("Alle Expeditionen zurück – nächste Welle")
MaxExpeditions()
Maximal mögliche Expeditionen (Astrophysik, Entdecker-Klasse, Admiral).
Rückgabe Zahl
const s = GetSlots()
if (s.ExpInUse < MaxExpeditions()) LogInfo("Es ist noch ein Expeditionsplatz frei")
Flotten senden 6 SendFleet · SendFleet (Rückruf) · SendFleetValidated · DeployAll · CancelFleet · RecallFleetsByMission
SendFleet(start, schiffe, ziel, mission, tempo?, rohstoffe?)
Sendet eine Flotte. start = eigener Himmelskörper, schiffe = { Name: Anzahl }, ziel = "g:s:p" (Position 16 = Deep Space) oder "g:s:p:typ", mission = MISSION.*, tempo 0.5–10 (10 = 100 %, Standard 10), rohstoffe = { Metal, Crystal, Deuterium }. Gibt null zurück, wenn keine passenden Schiffe da sind.
Rückgabe Flotte | null
// Transport vom Heimatplaneten zur Kolonie, 50 % Tempo
const fleet = SendFleet(GetHomeWorld(), { LargeCargo: 200 }, "1:20:8", MISSION.TRANSPORT, 5,
    { Metal: 1000000, Crystal: 500000 })
if (fleet) LogInfo("Unterwegs, Ankunft in", FormatDuration(fleet.ArriveIn))
SendFleet(…, rohstoffe, { recallIn | recallAt })
SendFleet kennt als 7. Argument einen Rückruf: recallIn = Sekunden, recallAt = "HH:MM:SS" oder Zeitstempel.
Rückgabe Flotte | null
SendFleet(home, ships, "1:16:4:3", MISSION.DEPLOY, 1, {}, { recallAt: "03:15" })
SendFleetValidated(von, schiffe, ziel, mission, [speed], [rohstoffe], [erzwingen])
Schickt eine Flotte über TBots eigenen Flotten-Planer: prüft freie Slots, Schlafenszeit und Rohstoffe wie die Bot-Module. erzwingen=true übergeht die Schlafenszeit-Prüfung.
Rückgabe { Success, FleetID, Code, Error }
const r = SendFleetValidated("Heimatplanet", { LargeCargo: 50 }, "1:16:4:3", MISSION.TRANSPORT, 10, { Metal: 1000000 })
if (!r.Success) LogWarn("Nicht gesendet:", r.Error)
DeployAll(von, ziel, [speed], [behalten])
TBot-Funktion (/deploy): alle beweglichen Schiffe mit allen Rohstoffen per Stationierung zum Ziel. behalten = Schiffe, die bleiben sollen, z. B. { EspionageProbe: 10 }.
Rückgabe { Success, FleetID, Code, Error }
DeployAll("1:16:4", "1:16:4:3", 10, { EspionageProbe: 5 })
CancelFleet(flottenId)
Ruft eine eigene Flotte zurück.
Rückgabe –
for (const f of GetFleets())
    if (f.Mission === MISSION.DEPLOY && !f.ReturnFlight) CancelFleet(f.ID)
RecallFleetsByMission(mission)
Ruft alle eigenen Flotten einer Mission zurück, die noch auf dem Hinflug sind (TBot /recall-Logik).
Rückgabe Anzahl zurückgerufener Flotten
const n = RecallFleetsByMission(MISSION.DEPLOY)
LogInfo(n, "Stationierungen zurückgerufen")
Fleetsave & Rückruf 6 FleetSave · TriggerFleetSave · SwitchFleet · ScheduleRecall · CancelScheduledRecall · GetScheduledRecalls
FleetSave(start, rückkehrUm, optionen?)
Fleetsave in einem Aufruf: alle flugfähigen Schiffe + Rohstoffe fliegen zum nächsten eigenen Mond (10 % Tempo, Stationieren) und werden auf halber Strecke zurückgerufen, sodass sie zur Rückkehrzeit wieder da sind. Prüft vorher Deuterium und ob der Rückruf vor der Ankunft möglich ist. optionen: destination, speed, mission, keep (Schiffe als Reserve), keepDeuterium, resources (false = ohne Rohstoffe).
Rückgabe { FleetID, Destination, OneWay, Fuel, RecallAt, ReturnAt, Payload, Ships }
const f = FleetSave(GetHomeWorld(), "06:30", { keep: { EspionageProbe: 1 }, keepDeuterium: 50000 })
LogInfo("Fleetsave", f.FleetID, "zurück um", FormatTime(f.ReturnAt))
Notify("Fleetsave bis " + FormatTime(f.ReturnAt), "Nachtsicherung")
TriggerFleetSave(ref, [minDauerSek], [{ mission, waitForFleets, all }])
TBots eigener Fleetsave (Telegram /ghost, /ghostsleep, /ghostsleepall): sucht selbst Ziel und Geschwindigkeit, sodass die Flotte mindestens minDauer unterwegs ist. all=true sichert alle Himmelskörper, waitForFleets wartet auf heimkehrende Flotten.
Rückgabe –
// Vor dem Schlafengehen alles für mindestens 8 Stunden wegschicken
TriggerFleetSave(GetHomeWorld(), 8 * 3600, { all: true, waitForFleets: true })
SwitchFleet(ref, [speed])
TBot-Funktion (/switch): setzt die Flotte zwischen Planet und zugehörigem Mond um (in die jeweils andere Richtung).
Rückgabe true, wenn umgesetzt
// angegriffenen Himmelskörper räumen: Flotte auf den Mond bzw. Planeten gegenüber
for (const a of GetAttacks())
    SwitchFleet(FormatCoord(a.Destination) + ":" + a.Destination.Type, 10)
ScheduleRecall(flottenId, wann)
Plant den Rückruf einer eigenen Flotte (wann = Sekunden, "HH:MM:SS" oder Zeitstempel). Läuft auch weiter, wenn das Skript endet, und übersteht Bot- und HIVE-Neustarts (ist der Bot zum Zeitpunkt nicht eingeloggt, versucht HIVE es noch 15 Minuten lang).
Rückgabe Zeitstempel des Rückrufs
const f = SendFleet(home, { LargeCargo: 10 }, "1:16:16", MISSION.EXPEDITION)
ScheduleRecall(f.ID, 1800)   // nach 30 Minuten zurückrufen
CancelScheduledRecall(flottenId)
Hebt einen geplanten Rückruf wieder auf.
Rückgabe true, wenn einer geplant war
CancelScheduledRecall(f.ID)
GetScheduledRecalls()
Alle geplanten Rückrufe dieses Bots.
Rückgabe [ { FleetID, RecallAt, In, ScheduledBy } ]
for (const r of GetScheduledRecalls()) LogInfo("Flotte", r.FleetID, "Rückruf in", FormatDuration(r.In))
Flugplaner 5 ScheduleFlight · ScheduleJump · GetScheduledFlights · CancelScheduledFlight · SetScheduledFlightActive
ScheduleFlight(optionen)
Plant einen Flug im Reiter „Flugplaner“ – er läuft dort zu seiner Zeit, auch wenn dieses Skript beendet ist und nach Neustarts. Optionen: from (eigener Planet/Mond), to (Koordinate), ships ("all" oder z. B. { LargeCargo: 100, Pathfinder: "all", Cruiser: { allBut: 10 } }), mission, speed (1–10), resources ("all" oder z. B. { Deuterium: "all", Metal: 50000 }), at ("HH:MM:SS" oder Zeitstempel), mode ("depart" = Abflug | "arrive" = Ankunft | "return" = Rückkehr), repeat ("once" | "daily" | "weekdays" | "hours"), days, everyHours, random ([min, max] Sekunden), recallAfter / backAfter (Sekunden nach dem Abflug), after (ID eines anderen Eintrags: läuft danach – eine Kette) mit trigger ("done" | "arrived" | "returned") und delay (Sekunden), name, behaviour (die Einstellungen des Reiters, z. B. { slotBusy: "reserve", defenderOff: true }).
Rückgabe ID of the entry
const id = ScheduleFlight({
  from: GetHomeWorld(), to: "1:16:16", mission: MISSION.EXPEDITION,
  ships: { LargeCargo: 300, Pathfinder: 1 }, at: "07:30:00", repeat: "daily",
  random: [0, 600], name: "Morning expedition"
})
LogInfo("Planned:", id)
ScheduleJump(optionen)
Plant einen Sprungtor-Sprung von eigenem Mond zu eigenem Mond (Optionen wie bei ScheduleFlight, ohne mission/speed/resources). Lädt ein Tor zur geplanten Zeit noch, folgt der Sprung, sobald beide Tore bereit sind – höchstens behaviour.jumpMaxDelayMinutes später (Standard 30).
Rückgabe ID of the entry
const jump = ScheduleJump({ from: "1:100:8:3", to: "2:50:4:3", ships: "all", at: "23:00:00" })
// danach: alles vom Zielmond auf seinen Planeten
ScheduleFlight({ after: jump, from: "2:50:4:3", to: "2:50:4", mission: MISSION.DEPLOY, ships: "all", resources: "all" })
GetScheduledFlights()
Alle Einträge des Flugplaners dieses Bots.
Rückgabe [ { ID, Name, Kind, Active, Repeat, Next, Departure, Running, LastOutcome, LastMessage } ]
for (const f of GetScheduledFlights()) LogInfo(f.Name, f.Active ? FormatTime(f.Next) : "off", f.LastOutcome || "")
CancelScheduledFlight(id)
Löscht einen Eintrag des Flugplaners (ein schon geplanter Rückruf einer gesendeten Flotte findet trotzdem statt).
Rückgabe true if it existed
CancelScheduledFlight(id)
SetScheduledFlightActive(id, aktiv)
Schaltet einen Eintrag ein oder aus – wie der Schalter im Reiter. Beim Einschalten wird er erneut geprüft (ein einmaliger Termin in der Vergangenheit wird abgelehnt).
Rückgabe true, wenn umgesetzt
SetScheduledFlightActive(id, false)   // aussetzen, solange der Angriff läuft
Rücktransport 2 RepatriateNow · CollectDeuterium
RepatriateNow([ohneLimit])
TBot-Rücktransport sofort (/collect bzw. /collectall mit ohneLimit=true): schickt die Rohstoffe aller Himmelskörper zum Ziel aus den Rücktransport-Einstellungen.
Rückgabe "success", "stop", "failure" oder "delay"
const r = RepatriateNow()
if (r !== "success") LogWarn("Rücktransport:", r)
CollectDeuterium(minMenge)
TBot-Funktion (/collectdeut): holt Deuterium von allen Himmelskörpern, die mindestens minMenge haben, zum Rücktransport-Ziel.
Rückgabe –
CollectDeuterium(500000)
Flugberechnung 11 CalcFlight · FlightTime · FuelConsumption · Distance · ShipSpeed · LowestSpeed · ValidSpeeds · OptimalFarmSpeed · ShipFuelConsumption · ShipFuelCapacity · FleetFuelCapacity
CalcFlight(start, ziel, schiffe, mission?, tempo?)
Plant einen Flug komplett: Flugzeit (einfach), Deuterium-Verbrauch, Entfernung, Laderaum und freier Laderaum nach Treibstoff, Ankunft und Rückkehr. Berücksichtigt Antriebe, Klasse, Allianzklasse und Lebensform-Boni. Keine Spielanfrage (außer einmal die LF-Boni). mission Standard TRANSPORT, tempo Standard 10.
Rückgabe { FlightTime, Fuel, Distance, Cargo, FreeCargo, ArrivalAt, ReturnAt }
const plan = CalcFlight(GetHomeWorld(), "1:16:16", { LargeCargo: 4000, Pathfinder: 1 }, MISSION.EXPEDITION)
LogInfo("Flug", FormatDuration(plan.FlightTime), "– Deut", plan.Fuel, "– zurück", plan.ReturnAt)
if (GetResources(GetHomeWorld()).Deuterium < plan.Fuel) LogWarn("Zu wenig Deuterium")
FlightTime(start, ziel, schiffe, mission?, tempo?)
Nur die Flugzeit (einfach) in Sekunden. start/ziel = eigener Himmelskörper oder Koordinate.
Rückgabe Sekunden
// Wie lange braucht die ganze Heimatflotte bei 10 % zum eigenen Mond?
const ships = GetShips(GetHomeWorld())
const oneWay = FlightTime(GetHomeWorld(), "1:16:4:3", ships, MISSION.DEPLOY, 1)
LogInfo("Einfacher Flug bei 10 %:", FormatDuration(oneWay))
FuelConsumption(start, ziel, schiffe, mission?, tempo?)
Nur der Deuterium-Verbrauch für den Flug.
Rückgabe Deuterium
const deut = FuelConsumption(GetHomeWorld(), "2:100:8", { LargeCargo: 500 }, MISSION.TRANSPORT, 10)
LogInfo("Transport kostet", deut, "Deuterium")
Distance(a, b)
OGame-Entfernung zwischen zwei Koordinaten (Donut-Universum berücksichtigt).
Rückgabe Zahl
let naechste = null
for (const m of GetMoons())
    if (!naechste || Distance(GetHomeWorld(), m) < Distance(GetHomeWorld(), naechste)) naechste = m
LogInfo("Nächster Mond:", naechste.Name, naechste.Coords)
ShipSpeed(schiffId)
Geschwindigkeit eines Schiffstyps mit deinen Antrieben und Boni.
Rückgabe Zahl
LogInfo("Pathfinder:", ShipSpeed(SHIP.Pathfinder), "– Großer Transporter:", ShipSpeed(SHIP.LargeCargo))
LowestSpeed(schiffe)
Geschwindigkeit des langsamsten Schiffs der Flotte (mit Antrieben, Klasse, Lebensform-Boni).
Rückgabe Geschwindigkeit
LogInfo(LowestSpeed({ LargeCargo: 100, Recycler: 10 }))
ValidSpeeds()
Die für deine Klasse erlaubten Geschwindigkeitsstufen (General: in 5-%-Schritten).
Rückgabe Liste, z. B. [1, 2, …, 10]
LogInfo(ValidSpeeds())
OptimalFarmSpeed(von, ziel, schiffe, beute, [maxSpritAnteil], [maxFlugSek])
Schnellste Geschwindigkeit, bei der der Sprit höchstens maxSpritAnteil der Beute kostet (Standard 0.1 = 10 %) und der Flug nicht länger als maxFlugSek dauert – TBots AutoFarm-Formel.
Rückgabe speed (1–10)
const speed = OptimalFarmSpeed("Heimatplanet", "1:20:8", { LargeCargo: 20 }, { Metal: 400000, Crystal: 200000 }, 0.05, 3600)
SendFleet("Heimatplanet", { LargeCargo: 20 }, "1:20:8", MISSION.ATTACK, speed)
ShipFuelConsumption(schiff)
Grundverbrauch eines Schiffstyps (mit Antrieben und Boni).
Rückgabe Deuterium
LogInfo(ShipFuelConsumption(SHIP.Recycler))
ShipFuelCapacity(schiff)
Tankgröße eines Schiffs (wie viel Treibstoff es mitnehmen kann).
Rückgabe Deuterium
LogInfo(ShipFuelCapacity(SHIP.Pathfinder))
FleetFuelCapacity(schiffe)
Tankgröße der ganzen Flotte.
Rückgabe Deuterium
LogInfo(FleetFuelCapacity({ LargeCargo: 500 }))
Laderaum & Beladung 6 CargoCapacity · ShipCargo · ShipsNeeded · CargoMix · PackResources · MaxTransportable
CargoCapacity(schiffe)
Gesamter Laderaum einer Flotte inkl. Hyperraumtechnik, Klasse und Boni.
Rückgabe Zahl
const lr = CargoCapacity(GetShips(GetHomeWorld()))
LogInfo("Alle Schiffe auf der Heimat fassen", lr, "Rohstoffe")
ShipCargo(schiffId)
Laderaum EINES Schiffs dieses Typs (mit allen Boni).
Rückgabe Zahl
LogInfo("Ein Großer Transporter fasst", ShipCargo(SHIP.LargeCargo))
ShipsNeeded(menge, schiffId)
Wie viele Schiffe für eine Rohstoffmenge nötig sind. menge = Zahl oder Rohstoff-Objekt (Metall+Kristall+Deut werden addiert).
Rückgabe Zahl
const r = GetResources(GetCelestial("Kolonie"))
const lc = ShipsNeeded(r, SHIP.LargeCargo)
SendFleet(GetCelestial("Kolonie"), { LargeCargo: lc }, GetHomeWorld().Coords, MISSION.TRANSPORT, 10, r)
CargoMix(benötigterLaderaum, verfügbareSchiffe)
Wenigste Transporter für einen Laderaum: erst Große, dann Kleine Transporter.
Rückgabe { LargeCargo, SmallCargo, Capacity, Enough }
const mix = CargoMix(2500000, GetShips(home))
if (mix.Enough) SendFleet(home, { LargeCargo: mix.LargeCargo, SmallCargo: mix.SmallCargo }, ziel, MISSION.TRANSPORT)
PackResources(rohstoffe, laderaum, reihenfolge?)
Belädt einen Laderaum nach Priorität (Standard: Deuterium, Kristall, Metall).
Rückgabe { Metal, Crystal, Deuterium }
const r = GetResources(home)
const ladung = PackResources(r, CargoCapacity({ LargeCargo: 100 }))
SendFleet(home, { LargeCargo: 100 }, "1:20:8", MISSION.TRANSPORT, 10, ladung)
MaxTransportable(schiffe, rohstoffe, [deutBehalten])
Welche Rohstoffe diese Schiffe mitnehmen können – nach TBots Beladungslogik: erst Deuterium (minus deutBehalten), dann Kristall, dann Metall. Für Metall zuerst: PackResources.
Rückgabe { Metal, Crystal, Deuterium }
const ladung = MaxTransportable({ LargeCargo: 100 }, GetResources("Heimatplanet"), 50000)
SendFleet("Heimatplanet", { LargeCargo: 100 }, "1:16:4:3", MISSION.TRANSPORT, 10, ladung)
Expeditionen 7 SendExpedition · SystemsInRange · IdealExpeditionShips · FullExpeditionShips · MilitaryShipForExpedition · GetExpeditionMessages · ExpeditionStats
SendExpedition(von, schiffe, ziel, [speed], [rohstoffe])
Expedition über TBots Flotten-Planer (mit Expeditions-Slot-Prüfung, wie das Expeditions-Modul).
Rückgabe { Success, FleetID, Code, Error }
const home = GetHomeWorld()
const r = SendExpedition(home, { LargeCargo: 1500, Pathfinder: 1, EspionageProbe: 1 }, home.Coordinate.Galaxy + ":" + home.Coordinate.System + ":16")
LogInfo(r.Success ? "Expo " + r.FleetID : r.Error)
SystemsInRange(system, anzahl)
Systeme nach Nähe: Start, +1, −1, +2, −2 … (Donut-Universum berücksichtigt) – z. B. um Expeditionen zu verteilen.
Rückgabe [ Zahl ]
const home = GetHomeWorld()
for (const s of SystemsInRange(home.Coordinate.System, 3))
    SendFleet(home, { LargeCargo: 4000, Pathfinder: 1 }, home.Coordinate.Galaxy + ":" + s + ":16", MISSION.EXPEDITION)
IdealExpeditionShips(verfügbar, hauptschiff, anzahlExpeditionen)
Die Expeditionsflotte, die TBots Expeditions-Modul aus den verfügbaren Schiffen zusammenstellen würde (pro Expedition).
Rückgabe Schiffe-Objekt
const home = GetHomeWorld()
const flotte = IdealExpeditionShips(GetShips(home), SHIP.LargeCargo, 3)
SendExpedition(home, flotte, home.Coordinate.Galaxy + ":" + home.Coordinate.System + ":16")
FullExpeditionShips(verfügbar, hauptschiff, anzahlExpeditionen)
Wie IdealExpeditionShips, aber die verfügbaren Schiffe werden komplett auf die Expeditionen verteilt.
Rückgabe Schiffe-Objekt
LogInfo(FullExpeditionShips(GetShips("Heimatplanet"), SHIP.LargeCargo, 4))
MilitaryShipForExpedition(verfügbar, anzahlExpeditionen)
Das stärkste Kampfschiff, das TBot jeder Expedition mitgeben würde.
Rückgabe Schiffsname oder null
LogInfo(MilitaryShipForExpedition(GetShips("Heimatplanet"), 3))
GetExpeditionMessages()
Expeditionsberichte mit gefundenen Rohstoffen und Schiffen – Grundlage für Expeditions-Statistiken.
Rückgabe [ { ID, Coordinate, Content, Resources, Ships, CreatedAt } ]
let metall = 0, kristall = 0, deut = 0
for (const m of GetExpeditionMessages()) {
    metall += m.Resources.Metal; kristall += m.Resources.Crystal; deut += m.Resources.Deuterium
}
LogInfo("Expeditionen brachten:", metall, "M", kristall, "K", deut, "D")
ExpeditionStats(stunden?)
Auswertung der Expeditionsberichte der letzten Stunden (Standard 24): Anzahl, Rohstoffe, MSU-Wert, gefundene Schiffe, Fund-Arten.
Rückgabe { Hours, Count, Resources, Value, Ships, ByType }
const s = ExpeditionStats(24)
Notify(s.Count + " Expeditionen, " + FormatNumber(s.Value) + " MSU", "Expeditionen heute")
Sprungtor & Phalanx 5 JumpGate · JumpGateCooldown · JumpGateReady · JumpGateInfo · Phalanx
JumpGate(vonMond, zuMond, schiffe)
Sprung durchs Sprungtor zwischen zwei eigenen Monden.
Rückgabe { Success, RechargeCountdown, Error }
const r = JumpGate("1:16:4:3", "2:100:8:3", { Battleship: 50 })
if (!r.Success) LogError("Sprung fehlgeschlagen:", r.Error)
JumpGateCooldown(stufe)
Aufladezeit des Sprungtors für eine Stufe (geteilt durch die Kriegs-Flottengeschwindigkeit).
Rückgabe Sekunden
LogInfo("Sprungtor Stufe 5 lädt", FormatDuration(JumpGateCooldown(5)))
JumpGateReady(mond)
Restzeit bis ein Sprungtor wieder bereit ist (merkt sich Sprünge über JumpGate()). 0 = bereit bzw. unbekannt.
Rückgabe Sekunden
const warten = JumpGateReady("1:16:4:3")
if (warten > 0) SleepSec(warten + 5)
JumpGate("1:16:4:3", "2:100:8:3", { Battleship: 50 })
JumpGateInfo(mond)
Liest die Sprungtor-Seite eines eigenen Mondes (nur lesen, 1 Spielanfrage): erreichbare Zielmonde und die verbleibende Ladezeit, auch nach Sprüngen von TBot oder von Hand. Merkt sich die Ladezeit für JumpGateReady().
Rückgabe { Ready, Cooldown, Destinations: [ { ID, Coords, Name } ] }
const info = JumpGateInfo("1:16:4:3")
if (!info.Ready) SleepSec(info.Cooldown + 5)
const ziel = info.Destinations.find(d => d.Coords === "2:100:8")
if (ziel) JumpGate("1:16:4:3", ziel.ID, { Battleship: 50 })
Phalanx(mond, koordinate)
Sensorphalanx vom eigenen Mond auf eine Koordinate (kostet Deuterium).
Rückgabe [ Flotte ]
for (const f of Phalanx("1:16:4:3", "1:18:7"))
    LogInfo("Flotte Mission", f.Mission, "Ankunft in", FormatDuration(f.ArriveIn))
Angriffe 3 GetAttacks · IsPlanetUnderAttack · SpyCrash
GetAttacks()
Eingehende feindliche Flotten.
Rückgabe [ { ID, MissionType, Origin, Destination, DestinationName, ArrivalTime, ArriveIn, AttackerName, AttackerID, Missiles, Ships } ]
for (const a of GetAttacks())
    LogWarn(a.AttackerName, "greift", a.DestinationName, "an – Ankunft in", FormatDuration(a.ArriveIn))
IsPlanetUnderAttack(ref)
Ob genau DIESER Planet angegriffen wird (statt irgendeiner).
Rückgabe true | false
for (const p of GetPlanets())
    if (IsPlanetUnderAttack(p)) StartScript("Fleetsave", { planet: p.Coords })
SpyCrash(ref, [ziel])
TBot-Funktion (/spycrash): schickt eine Spionagesonde als Angriff in den Tod, um Trümmerfeld/Aktivität zu erzeugen. Ohne Ziel sucht TBot eines.
Rückgabe –
SpyCrash("Heimatplanet")

Galaxie & Spionage

Galaxie 1 GetGalaxyInfo
GetGalaxyInfo(galaxie, system)
Systemansicht. Planets ist nach Position geordnet, leere Plätze = null.
Rückgabe { Galaxy, System, Planets: [ { Name, Coordinate, Player, Alliance, Debris, Inactive, Vacation, … } | null ], ExpeditionDebris }
const sys = GetGalaxyInfo(1, 16)
for (const p of sys.Planets)
    if (p && p.Inactive) LogInfo("Inaktiv:", p.Player.Name, FormatCoord(p.Coordinate))
Galaxie-Cache 5 ScanSystem · GetCachedSystem · FindPlayer · GalaxyCacheInfo · ClearGalaxyCache
ScanSystem(galaxie, system)
Liest ein System (eine Spielanfrage) und legt es dauerhaft im Galaxie-Cache ab.
Rückgabe { Galaxy, System, Planets: [ { Position, Name, Player, Alliance, HasMoon, Inactive, Vacation, Debris, … } ] }
for (const s of SystemsInRange(GetHomeWorld().Coordinate.System, 20)) {
    ScanSystem(1, s)
    SleepRandSec(2, 5)
}
GetCachedSystem(galaxie, system, maxAlterMin?)
System aus dem Cache (ohne Spielanfrage); null, wenn nicht gescannt oder älter als maxAlterMin.
Rückgabe { ScannedAt, Info } | null
const c = GetCachedSystem(1, 17, 60) || { Info: ScanSystem(1, 17) }
LogInfo(c.Info.Planets.length, "Planeten in 1:17")
FindPlayer(name)
Sucht Spieler im Cache (Teil des Namens genügt) – alle bekannten Planeten.
Rückgabe [ { Coords, PlanetName, PlayerName, PlayerID, Alliance, HasMoon, Inactive, Vacation, ScannedAt } ]
for (const p of FindPlayer(GetAttacks()[0].AttackerName))
    LogInfo("Angreifer-Planet:", p.Coords, p.HasMoon ? "(mit Mond)" : "")
GalaxyCacheInfo()
Umfang des Caches: Systeme, Planeten, Spieler, ältester/neuester Scan.
Rückgabe { Systems, Planets, Players, OldestScan, NewestScan }
const i = GalaxyCacheInfo()
LogInfo(i.Systems, "Systeme,", i.Players, "Spieler im Cache")
ClearGalaxyCache()
Leert den Galaxie-Cache dieses Bots.
Rückgabe –
ClearGalaxyCache()
Spionage 3 GetEspionageReports · GetEspionageReport · GetEspionageReportFor
GetEspionageReports(seite?)
Liste der Spionageberichte (Standard Seite 1).
Rückgabe [ { ID, Type, From, Target, LootPercentage } ]
for (const b of GetEspionageReports())
    LogInfo("Bericht", b.ID, "zu", FormatCoord(b.Target))
GetEspionageReport(meldungsId)
Ein Spionagebericht im Detail. Schiffe/Verteidigung sind null, wenn nicht erspäht.
Rückgabe { Username, Metal, Crystal, Deuterium, HasFleetInformation, HasDefensesInformation, …, Schiffe, Verteidigung }
const r = GetEspionageReport(GetEspionageReports()[0].ID)
LogInfo(r.Username, "hat", r.Metal + r.Crystal + r.Deuterium, "Rohstoffe")
GetEspionageReportFor(koordinate)
Der letzte Spionagebericht zu einer Koordinate.
Rückgabe Spionagebericht
const r = GetEspionageReportFor("1:18:7")
if (r.HasFleetInformation && r.LightFighter === 0) LogInfo("Ziel ohne Jäger")
Kampfsimulator 1 SimulateBattle
SimulateBattle(angreifer, verteidiger, optionen?)
Simuliert einen Kampf mehrfach (Standard 10×, max. 50): 6 Runden, Schilde, 1-%-Regel, Explosionen, Rapidfire, Waffen/Schild/Panzerung. Seiten als Schiffs-Objekt, { ships, defences, tech: { Weapons, Shielding, Armour } } oder direkt ein Spionagebericht. Angreifer ohne tech = deine Forschung. Näherung ohne Klassen- und Lebensform-Kampfboni.
Rückgabe { AttackerWins, DefenderWins, Draws (in %), AverageRounds, Attacker: { Lost, Remaining, LostResources }, Defender: {…}, Debris, DefencesRebuilt }
const bericht = GetEspionageReportFor("1:18:7")
const sim = SimulateBattle({ Cruiser: 200, LargeCargo: 50 }, bericht)
LogInfo("Sieg:", sim.AttackerWins, "% – eigene Verluste:", FormatNumber(ResourceValue(sim.Attacker.LostResources)), "MSU")
if (sim.AttackerWins === 100 && sim.Attacker.LostResources.Metal === 0) LogInfo("Verlustfreier Angriff möglich")
Erkundung 4 GetAvailableDiscoveries · GetDiscoveryPositions · SendDiscovery · SendSystemDiscovery
GetAvailableDiscoveries(ref)
Anzahl verfügbarer Entdeckungsflotten.
Rückgabe Zahl
const n = GetAvailableDiscoveries(GetHomeWorld())
LogInfo(n, "Entdeckungsflotten verfügbar")
GetDiscoveryPositions(ref, koordinate)
Positionen im System der Koordinate, die sich noch erkunden lassen (nur Abfrage).
Rückgabe [ Koordinate ]
const frei = GetDiscoveryPositions(GetHomeWorld(), "1:17:1")
LogInfo(frei.length, "Positionen im System 1:17 erkundbar")
SendDiscovery(ref, ziel)
Sendet eine Entdeckungsmission an eine Position. Nicht in schneller Schleife wiederholen – ein Fehler heißt nicht sicher, dass nichts gesendet wurde.
Rückgabe true | false
for (const c of GetDiscoveryPositions(home, "1:17:1").slice(0, 3)) {
    SendDiscovery(home, c)
    SleepRandSec(2, 5)
}
SendSystemDiscovery(ref, galaxie, system)
Erkundet ein ganzes System auf einmal (Systemerkundung).
Rückgabe [ gesendete Koordinaten ]
const ziele = SendSystemDiscovery(GetHomeWorld(), 1, 17)
LogInfo(ziele.length, "Entdeckungen ins System 1:17 gesendet")
Spielseiten direkt 2 GetGamePage · GetAllianceInfoPage
GetGamePage(seite)
Lädt eine beliebige Spielseite als HTML – für Daten, die keine andere Funktion liefert (Seite als Text "page=…&component=…" oder Objekt). Abmelden ist gesperrt.
Rückgabe HTML der Seite als Text
const html = GetGamePage({ page: "ingame", component: "overview" })
const m = html.match(/darkmatter[^>]*>\s*([\d.]+)/i)
if (m) LogInfo("Dunkle Materie:", m[1])
GetAllianceInfoPage(allianzId)
Öffentliche Infoseite einer Allianz als HTML (Name, Tag, Mitgliederzahl, Bewerbungsstatus).
Rückgabe HTML als Text
const html = GetAllianceInfoPage(500123)
LogInfo(html.includes("Bewerbung") ? "Nimmt Bewerbungen an" : "geschlossen")

Handel & Kommunikation

Handel 4 BuyOfferOfTheDay · GetAuction · BidAuction · BidAuctionMinimum
BuyOfferOfTheDay()
Kauft das Tagesangebot beim Händler.
Rückgabe "bought" | "already" | "unknown"
const r = BuyOfferOfTheDay()
if (r === "bought") LogInfo("Tagesangebot gekauft")
GetAuction()
Aktueller Stand beim Auktionator.
Rückgabe { HasFinished, Endtime, NumBids, CurrentBid, MinimumBid, HighestBidder, CurrentItem, Resources, … }
const a = GetAuction()
LogInfo(a.CurrentItemLong, "– Gebot", a.CurrentBid, "– endet in", FormatDuration(a.Endtime))
BidAuction(ref, rohstoffe)
Bietet beim Auktionator mit Rohstoffen eines Planeten.
Rückgabe –
const a = GetAuction()
if (!a.HasFinished && a.HighestBidder !== GetUserInfo().PlayerName)
    BidAuction(GetHomeWorld(), { Metal: a.MinimumBid })
BidAuctionMinimum()
TBot-Funktion: bietet in der laufenden Auktion das Mindestgebot vom Rücktransport-Ziel (oder dem ersten Planeten, der genug hat). Ergebnis kommt als Telegram-Nachricht.
Rückgabe –
const a = GetAuction()
if (a && !a.HasFinished) BidAuctionMinimum()
Benachrichtigungen 3 Notify · NotifyDiscord · NotifyTelegram
Notify(text, titel?)
Schickt eine Nachricht an alle eingerichteten Kanäle: Discord (Einstellungen des Bots) und Telegram (Bots → Global). Max. 60 pro Stunde und Bot.
Rückgabe { Discord, Telegram } – jeweils true, wenn gesendet
const f = FleetSave(GetHomeWorld(), "06:30")
Notify("Zurück um " + FormatTime(f.ReturnAt) + ", Deut " + FormatNumber(f.Fuel), "Fleetsave gestartet")
NotifyDiscord(text, titel?)
Nur an Discord (Webhook aus den Bot-Einstellungen).
Rückgabe true | false
if (IsUnderAttack()) NotifyDiscord("Angriff auf " + GetAttacks()[0].DestinationName, "⚠️ Angriff")
NotifyTelegram(text, titel?)
Nur an Telegram (Telegram-Bot aus Bots → Global).
Rückgabe true | false
NotifyTelegram("Tagesangebot: " + BuyOfferOfTheDay())

Automatisierung

HIVE-Module 4 StartModule · StopModule · IsModuleActive · DefenderOnExit
StartModule(name)
Schaltet ein Modul ein – genau wie der Schalter auf der Modul-Seite (Module sind nur an oder aus, es gibt keine Pause). Name technisch ("Expeditions", "Defender") oder deutsch ("Expeditionen"). Nur dieses Modul startet, die anderen laufen ungestört weiter.
Rückgabe true | false
StartModule("Expeditions")
StopModule(name, sofort?)
Schaltet ein Modul aus – wie der Schalter auf der Modul-Seite, für dich dort sichtbar und jederzeit von Hand wieder einschaltbar. Gebäudeausbau, Forschung und die Lebensform-Module: sind schon Rohstoffe für ihre Bauaufträge unterwegs, verbauen sie diese nach der Ankunft noch (Status „Wird beendet“, keine neuen Transporte) und sind dann ganz aus. sofort = true schaltet sie ohne das aus.
Rückgabe true | false
// Skript übernimmt die Expeditionen selbst
StopModule("Expeditions")
IsModuleActive(name)
Ob ein Modul eingeschaltet ist (Stand des Schalters).
Rückgabe true | false
if (!IsModuleActive("Defender")) StartModule("Defender")
DefenderOnExit()
Garantie für den Angriffsschutz: Endet dieses Skript – normal, über „Anhalten“, durch einen Fehler, weil der Bot neu startet oder weil HIVE beendet wurde (dann beim nächsten HIVE-Start) –, schaltet HIVE den Angriffsschutz ein. Musste er eingeschaltet werden, kommt eine Discord-Nachricht „WICHTIG“ (mit @here) mit Bot, Skript, Grund und Uhrzeit; klappt das Einschalten nicht, eine Nachricht, dass du sofort von Hand prüfen musst. Einmal am Skriptanfang aufrufen.
Rückgabe –
DefenderOnExit()
// ... Angriffsschutz darf jetzt zeitweise aus sein:
StopModule("Defender")
TBot-Features & Profile 5 IsFeatureRunning · ListProfiles · GetRunningProfiles · LoadProfile · ResetProfile
IsFeatureRunning(feature)
Ob ein TBot-Feature gerade tatsächlich läuft (z. B. nicht während des Schlafplans). Ein- und ausschalten: StartModule/StopModule.
Rückgabe true/false
LogInfo("Defender läuft:", IsFeatureRunning(FEATURE.Defender))
ListProfiles()
Namen der TBot-Profile im profiles-Ordner des Bots.
Rückgabe Liste von Texten
LogInfo(ListProfiles())
GetRunningProfiles()
Welche Profile gerade geladen sind.
Rückgabe Liste von Texten
LogInfo("Aktiv:", GetRunningProfiles())
LoadProfile(name | [namen])
Lädt ein oder mehrere TBot-Profile (Einstellungs-Overlays, Telegram /profile load).
Rückgabe –
LoadProfile(IsTimeBetween("23:00", "07:00") ? "Nacht" : "Tag")
ResetProfile()
Nimmt alle geladenen Profile zurück (Grundeinstellungen).
Rückgabe –
ResetProfile()
Schlafmodus 4 StartSleepMode · WakeUpNow · CancelGhostSleep · GetNextWakeTime
StartSleepMode(bis)
Schickt den Bot sofort schlafen (wie Telegram /sleep) – inkl. Fleetsave, wenn im Schlafmodus eingestellt. bis = "HH:MM", Zeitstempel oder Sekunden ab jetzt.
Rückgabe –
StartSleepMode("07:30")
WakeUpNow()
Weckt den Bot sofort auf (Telegram /wakeup).
Rückgabe –
if (IsSleeping() && IsUnderAttack()) WakeUpNow()
CancelGhostSleep()
Bricht einen geplanten Ghost-Sleep ab, solange die Flotten noch nicht los sind (Telegram /cancelghostsleep).
Rückgabe –
CancelGhostSleep()
GetNextWakeTime()
Wann der Bot aus dem aktuellen Schlaf aufwacht.
Rückgabe Zeitstempel oder null
const t = GetNextWakeTime()
if (t) LogInfo("Wacht auf um", FormatTime(t))
Skripte steuern 7 StartScript · StopScript · PauseScript · ResumeScript · IsScriptRunning · GetScriptState · ListScripts
StartScript(name, args?)
Startet ein anderes Skript dieses Bots, optional mit Startparametern (im Zielskript als args).
Rückgabe true, wenn gestartet
StartScript("Transport", { ziel: "1:20:8", menge: 500 })
StopScript(name)
Hält ein laufendes Skript an (dessen OnExit läuft noch).
Rückgabe true, wenn es lief
if (IsUnderAttack()) StopScript("Expos")
PauseScript(name)
Pausiert ein laufendes Skript.
Rückgabe true | false
PauseScript("Farmrunde")
SleepMin(15)
ResumeScript("Farmrunde")
ResumeScript(name)
Setzt ein pausiertes Skript fort.
Rückgabe true | false
if (GetScriptState("Expos") === "paused") ResumeScript("Expos")
IsScriptRunning(name)
Ob ein Skript läuft oder pausiert ist.
Rückgabe true | false
if (!IsScriptRunning("Wache")) StartScript("Wache")
GetScriptState(name)
Zustand eines Skripts.
Rückgabe "running" | "paused" | "stopped" | "finished" | "error"
if (GetScriptState("Expos") === "error") StartScript("Expos")   // nach Fehler neu starten
ListScripts()
Alle Skripte dieses Bots mit Zustand und Autostart-Markierung.
Rückgabe [ { Name, State, Autostart } ]
for (const s of ListScripts()) LogInfo(s.Name, s.State, s.Autostart ? "(Autostart)" : "")
Signale & gemeinsame Werte 4 SendSignal · WaitSignal · SetShared · GetShared
SendSignal(skript, daten?)
Schickt einem laufenden Skript eine Nachricht.
Rückgabe true, wenn zugestellt
SendSignal("Expos", { pause: true, grund: "Fleetsave" })
WaitSignal(timeoutSek?)
Wartet auf die nächste Nachricht an dieses Skript (ohne Timeout: unbegrenzt).
Rückgabe { from, data } | null bei Timeout
const msg = WaitSignal(60)
if (msg && msg.data.pause) {
    LogInfo("Pause angefordert von", msg.from)
    SleepMin(10)
}
SetShared(schlüssel, wert)
Speichert einen Wert, den alle Skripte des Bots lesen können (bis HIVE neu startet). Wert undefined löscht ihn.
Rückgabe –
SetShared("fleetsaveAktiv", true)
// … Flotte retten …
SetShared("fleetsaveAktiv", false)
GetShared(schlüssel, standard?)
Liest einen gemeinsamen Wert.
Rückgabe Wert | standard | null
while (GetShared("fleetsaveAktiv", false)) SleepSec(30)
Dauerhafter Speicher 5 StorePut · StoreGet · StoreHas · StoreDelete · StoreKeys
StorePut(schlüssel, wert)
Speichert einen Wert DAUERHAFT (übersteht Skript- und HIVE-Neustarts). Wert beliebig: Zahl, Text, Objekt, Liste. Max. 5 MB pro Bot.
Rückgabe –
const heute = new Date().toISOString().slice(0, 10)
StorePut("expo:" + heute, ExpeditionStats(24))
StoreGet(schlüssel, standard?)
Liest einen dauerhaft gespeicherten Wert, sonst standard (bzw. null).
Rückgabe Wert | standard
const cfg = StoreGet("config", { lcProExpo: 4000, systeme: 2 })
LogInfo("LC pro Expedition:", cfg.lcProExpo)
StoreHas(schlüssel)
Ob ein Schlüssel gespeichert ist.
Rückgabe true | false
if (!StoreHas("config")) StorePut("config", { lcProExpo: 4000 })
StoreDelete(schlüssel)
Löscht einen gespeicherten Wert.
Rückgabe –
StoreDelete("tmp:fleetsave")
StoreKeys(präfix?)
Alle gespeicherten Schlüssel (optional nur mit Präfix).
Rückgabe [ Text ]
for (const k of StoreKeys("expo:")) LogInfo(k, StoreGet(k).Count, "Expeditionen")
Globaler Speicher (alle Bots) 6 GlobalPut · GlobalGet · GlobalGetEntry · GlobalHas · GlobalDelete · GlobalKeys
GlobalPut(schlüssel, wert)
Speichert einen Wert im globalen Speicher, den alle Bots lesen können. Jeder Eintrag merkt sich automatisch, welcher Bot (und welches Universum) ihn zuletzt geschrieben hat. Übersteht Neustarts.
Rückgabe –
GlobalPut("einstellungen/" + InstanceName, { expoSlots: 5 })
GlobalGet(schlüssel, standard?)
Liest einen Wert aus dem globalen Speicher (egal von welchem Bot geschrieben).
Rückgabe der gespeicherte Wert | standard | null
const e = GlobalGet("einstellungen/" + InstanceName, {})
LogInfo(e)
GlobalGetEntry(schlüssel)
Wie GlobalGet, aber mit Herkunft: welcher Bot, welches Universum, wann zuletzt geschrieben.
Rückgabe { Value, Bot, Universe, UpdatedAt } | null
const e = GlobalGetEntry("einstellungen/" + InstanceName)
if (e) LogInfo("von", e.Bot, "in", e.Universe, "um", FormatTime(e.UpdatedAt))
GlobalHas(schlüssel)
Ob es den Schlüssel im globalen Speicher gibt.
Rückgabe true/false
if (!GlobalHas("einstellungen/" + InstanceName)) StartScript("Einstellungen")
GlobalDelete(schlüssel)
Löscht einen Eintrag aus dem globalen Speicher.
Rückgabe –
GlobalDelete("test")
GlobalKeys(präfix?, bot?)
Alle Einträge im globalen Speicher mit Herkunft (optional nur mit Präfix und/oder nur von einem Bot).
Rückgabe [ { Key, Bot, Universe, UpdatedAt } ]
for (const e of GlobalKeys("einstellungen/")) LogInfo(e.Key, "–", e.Bot, e.Universe)
Dashboard & Formular 4 SetDashboardCard · RemoveDashboardCard · FORM · GetFormValues
SetDashboardCard(id, kasten)
Legt einen eigenen Kasten im Dashboard des Bots an oder aktualisiert ihn (gleiche id = gleicher Kasten). Er bleibt stehen, auch nach Skript-Ende und HIVE-Neustart, bis RemoveDashboardCard oder das „ד im Dashboard ihn entfernt. kasten: { title, text (mehrzeilig), rows ([[Bezeichnung, Wert], …] oder { Bezeichnung: Wert }), level ("info" | "success" | "warning" | "danger" = Farbe des linken Rands), icon (z. B. "rocket", "planet", "shield") }.
Rückgabe –
const r = GetResources(GetHomeWorld())
SetDashboardCard("lager", {
    title: "Lager Homeworld",
    level: r.Deuterium < 1000000 ? "warning" : "success",
    rows: { Metall: FormatNumber(r.Metal), Kristall: FormatNumber(r.Crystal), Deuterium: FormatNumber(r.Deuterium) },
    text: "Stand " + TimeOfDay(),
})
RemoveDashboardCard(id)
Entfernt einen mit SetDashboardCard angelegten Kasten aus dem Dashboard.
Rückgabe –
function OnExit() {
    RemoveDashboardCard("lager")
}
const FORM = { … }
Eigenes Formular für ein Skript: steht oben im Skript und enthält nur feste Werte. Die Skripte-Seite zeigt es dann vor dem Code (Umschalter „Formular | Code“), die Werte liest das Skript mit GetFormValues(). Aufbau: { title, description, sections: [ { title, description, collapsed, fields: [ … ] } ] } oder direkt fields: [ … ]. Feld: { key, label, type, default, help, placeholder, min, max, step, options }. type: "text", "textarea", "number", "bool", "time" (HH:MM:SS), "select" / "multiselect" (options: ["A", "B"] oder [{ value, label }]), "celestial" / "celestials" (eigene Planeten/Monde als "1:2:3" bzw. "1:2:3:3").
Rückgabe –
const FORM = {
    title: "Transport",
    fields: [
        { key: "ziel", label: "Ziel", type: "celestial" },
        { key: "menge", label: "Deuterium", type: "number", default: 100000, min: 0 },
        { key: "sofort", label: "Sofort senden", type: "bool", default: true },
    ],
}

const werte = GetFormValues()
LogInfo(werte.ziel, werte.menge, werte.sofort)
GetFormValues(skript?)
Werte des Formulars (const FORM) dieses Skripts: gespeicherte Werte, sonst die default-Werte. Mit Skriptname: das Formular eines anderen Skripts desselben Bots (z. B. ein gemeinsames Einstellungs-Skript).
Rückgabe { key: wert, … }
const cfg = GetFormValues("Einstellungen")
if (cfg.aktiv) LogInfo("Ziel:", cfg.ziel)

Universum (Bots untereinander)

Bots & Rollen 3 UniBots · UniRole · UniMain
UniBots()
Alle Bots im selben Universum wie dieser (auch dieser selbst, Self = true), mit ihrer Rolle aus „Bot-Einstellungen“ › „Rolle im Universum“. Reine Information – Accounts mit derselben IP dürfen keinen Flottenkontakt miteinander haben.
Rückgabe [{ Alias, Role ("main" | "guard" | "none"), Protects, LoggedIn, PlayerName, Self }]
for (const b of UniBots())
    LogInfo(b.Alias, b.Role, b.LoggedIn ? "online" : "offline")
UniRole()
Rolle dieses Bots im Universum.
Rückgabe "main" | "guard" | "none"
if (UniRole() === "guard") LogInfo("Ich passe auf", UniMain(), "auf")
UniMain()
Der Hauptaccount, zu dem dieser Bot gehört: er selbst, der beim Wächter eingestellte, sonst der Hauptaccount des Universums.
Rückgabe Bot-Name | null
const main = UniMain()
if (main) UniSend("hinweis", { text: "Spieler X aktiv" }, main)
Nachrichten 2 UniSend · UniReceive
UniSend(thema, daten?, an?)
Schickt eine Nachricht an alle anderen Bots des Universums (oder nur an den Bot „an“). Die letzten 300 Nachrichten je Universum bleiben bis zum HIVE-Neustart abrufbar. Die Lagebewertung schickt selbst unter dem Thema "attack".
Rückgabe Nachrichten-ID
UniSend("aktiv", { spieler: "Raider", system: "1:120" })
UniReceive(thema?)
Neue Nachrichten an diesen Bot seit dem letzten Aufruf (beim ersten Aufruf: seit Skriptstart), optional nur eines Themas. Eigene Nachrichten kommen nicht zurück.
Rückgabe [{ Id, At, From, To, Topic, Data }]
while (true) {
    for (const m of UniReceive("attack"))
        LogWarn(m.From, "wird angegriffen:", m.Data.attacker, "→", m.Data.target, "Stufe", m.Data.level)
    SleepRandSec(20, 40)
}
Geteilte Werte & Reservierungen 6 UniShare · UniGet · UniGetEntry · UniReserve · UniRelease · UniHolder
UniShare(schlüssel, wert, minuten?)
Legt einen Wert für alle Bots des Universums ab, optional nur für einige Minuten gültig. null löscht ihn. Lebt nur im Speicher (bis zum HIVE-Neustart) – dauerhaft speichert GlobalPut.
Rückgabe –
UniShare("inaktive/1:120", GetCachedSystem(1, 120), 60)
UniGet(schlüssel, standard?)
Liest einen mit UniShare abgelegten Wert (egal von welchem Bot des Universums).
Rückgabe der Wert | standard | null
const sys = UniGet("inaktive/1:120")
if (!sys) ScanSystem(1, 120)
UniGetEntry(schlüssel)
Wie UniGet, mit Herkunft.
Rückgabe { Value, From, At } | null
const e = UniGetEntry("inaktive/1:120")
if (e) LogInfo("von", e.From, "um", e.At)
UniReserve(schlüssel, minuten?)
Reserviert etwas für diesen Bot (Standard 30 Minuten), z. B. ein Farmziel – damit nicht zwei Bots dasselbe tun. true = gehört jetzt diesem Bot (war frei, abgelaufen oder schon seins; wird dann verlängert), false = ein anderer Bot hält es.
Rückgabe true/false
if (UniReserve("farm/1:120:8", 45))
    LogInfo("Ziel gehört mir")
else
    LogInfo("Ziel reserviert von", UniHolder("farm/1:120:8"))
UniRelease(schlüssel)
Gibt eine eigene Reservierung vorzeitig frei.
Rückgabe –
UniRelease("farm/1:120:8")
UniHolder(schlüssel)
Welcher Bot eine Reservierung gerade hält.
Rückgabe Bot-Name | null
LogInfo(UniHolder("farm/1:120:8") ?? "frei")
Lagebewertung 1 GetThreats
GetThreats()
Die aktuelle Lagebewertung dieses Bots (alle 20 s aus TBots Ereignisliste, ohne Spielanfragen): je Angriff Stufe, Ziel, Angreifer, Ankunft, Schiffe, Siegchance des Angreifers (Techs unbekannt, beide Seiten ohne), mögliche Beute und eigene Flotten, die um die Ankunft herum landen – mit der Landezeit bei einem Rückruf jetzt.
Rückgabe [{ Level ("green" | "yellow" | "red"), Target, TargetName, TargetIsMoon, Attacker, AttackerId, Origin, Arrival, ArriveIn, Fleets, OnlyProbes, ShipsKnown, Ships, Missiles, AttackerWinChance, Loot, Collisions: [{ FleetId, Mission, ReturnFlight, Lands, MinutesFromArrival, Ships, Cargo, RecallLands, RecallHelps }], Reasons }]
for (const t of GetThreats()) {
    for (const c of t.Collisions)
        if (c.RecallHelps) { LogWarn("Rufe Flotte", c.FleetId, "zurück"); CancelFleet(c.FleetId) }
}

Vorsicht

Unwiderrufliche Aktionen 11 AbandonPlanet · TearDown · SendIPM · DeleteEspionageReport · DeleteAllEspionageReports · DeleteAllMessages · ActivateItem · SendPlayerMessage · MessageAttackers · PostGamePage · GameLogout
AbandonPlanet(ref, "BESTÄTIGT")
Gibt einen eigenen Planeten auf – UNWIDERRUFLICH. Ohne das Bestätigungswort als zweites Argument passiert nichts.
Rückgabe true | false
const p = GetCelestial("1:400:8")
if (p.Fields.Total < 150 && p.Fields.Built === 0)
    AbandonPlanet(p, "BESTÄTIGT")
TearDown(ref, gebäude, "BESTÄTIGT")
Reißt ein Gebäude um eine Stufe ab (kostet Rohstoffe, gibt Felder frei). Nur mit Bestätigungswort.
Rückgabe –
// Mondbasis-Stufe zurückbauen, um ein Feld frei zu bekommen
TearDown("1:16:4:3", BUILDING.LunarBase, "BESTÄTIGT")
SendIPM(von, ziel, anzahl, [primärziel], "BESTÄTIGT")
Feuert Interplanetarraketen vom eigenen Planeten auf ein Ziel. Primärziel optional (z. B. DEFENCE.PlasmaTurret), sonst trifft es beliebige Verteidigung. Braucht Raketensilo und Reichweite (Impulstriebwerk).
Rückgabe Flugzeit der Raketen in Sekunden
const sek = SendIPM("Heimatplanet", "1:20:8", 10, DEFENCE.PlasmaTurret, "BESTÄTIGT")
LogInfo("Einschlag in", FormatDuration(sek))
DeleteEspionageReport(meldungsId, "BESTÄTIGT")
Löscht einen Spionagebericht.
Rückgabe –
for (const b of GetEspionageReports())
    if (b.LootPercentage < 0.5) DeleteEspionageReport(b.ID, "BESTÄTIGT")
DeleteAllEspionageReports("BESTÄTIGT")
Löscht alle Spionageberichte.
Rückgabe –
DeleteAllEspionageReports("BESTÄTIGT")
DeleteAllMessages(tab, "BESTÄTIGT")
Leert einen ganzen Nachrichten-Tab: MESSAGE_TAB.ESPIONAGE, COMBAT, EXPEDITIONS, TRANSPORT oder OTHER (auch als Text, z. B. "kampf").
Rückgabe –
// Einmal am Tag Expeditions- und Kampfberichte aufräumen
DeleteAllMessages(MESSAGE_TAB.EXPEDITIONS, "BESTÄTIGT")
DeleteAllMessages(MESSAGE_TAB.COMBAT, "BESTÄTIGT")
ActivateItem(ref, itemRef, "BESTÄTIGT")
Aktiviert ein Item/einen Booster auf einem Himmelskörper (itemRef aus GetItems). Verbraucht das Item.
Rückgabe Antwort von ogamed
const booster = GetItems(home).find(i => i.Name === "Deuterium-Booster Bronze" && i.Amount > 0)
if (booster) ActivateItem(home, booster.Ref, "BESTÄTIGT")
SendPlayerMessage(spielerId, text, "BESTÄTIGT")
Schickt einem anderen Spieler eine Ingame-Nachricht (für ihn sichtbar – mit Bedacht einsetzen).
Rückgabe –
for (const a of GetAttacks())
    SendPlayerMessage(a.AttackerID, "Hier gibt es nichts zu holen.", "BESTÄTIGT")
MessageAttackers(text, "BESTÄTIGT")
TBot-Funktion (/msg): schickt allen Spielern, die dich gerade angreifen, dieselbe Ingame-Nachricht (jedem nur einmal).
Rückgabe –
if (IsUnderAttack()) MessageAttackers("Flotte ist weg, Rohstoffe auch – spar dir den Sprit.", "BESTÄTIGT")
PostGamePage(seite, formulardaten, "BESTÄTIGT")
Schickt ein Formular direkt an eine Spielseite (z. B. Marktplatz, Händler, Dunkle Materie). Für alles, wofür es keine eigene Funktion gibt – du brauchst die genauen Parameter des Spiels. Abmelden ist gesperrt.
Rückgabe Antwort des Spiels als Text (bei JSON-Antworten mit JSON.parse lesen)
const antwort = PostGamePage("page=ingame&component=marketplace&tab=history_buying&action=collectItem&asJson=1",
    { marketItemId: 12345, token: "…" }, "BESTÄTIGT")
LogInfo(antwort)
GameLogout("BESTÄTIGT")
Meldet die Spielsitzung ab. Achtung: der Bot nutzt dieselbe Sitzung und arbeitet erst nach GameLogin() weiter.
Rückgabe –
GameLogout("BESTÄTIGT")
SleepMin(RandomInt(20, 40))
GameLogin()