Zum Inhalt

Wetter & Zeit

Synchronisiertes Wetter- und Echtzeit-System. Der Server erzeugt einen Wetter-Rasterplan für 7 Tage in der Datenbank, Clients lesen den aktuellen Zustand via GlobalState.


Architektur

Server
  └─ generateWeatherGrid()      → DB-Tabelle weather_grid (7-Tage-Raster, 15-min-Slots)
  └─ runWeatherList()            → Wetterwechsel nach Slot-Dauer
  └─ GlobalState.weather         → wird von Clients gelesen
  └─ GlobalState.currentTime     → Echtzeitstunde (Deutschland-Zeitzone)
  └─ GlobalState.isNight         → boolean

Client
  └─ liest GlobalState und wendet Wetter/Uhrzeit an

Wetter-API (Server)

-- Aktuelles Wetter abfragen
cv.weather.getCurrentWeatherInformation()
-- → { weather, windSpeed, windDirection, hasSnow, time }

-- Aktuelle Uhrzeit (Echtzeit Deutschland)
cv.weather.getCurrentTime()
-- → { hour, minute }

GlobalState-Werte

Können von Client und Server gelesen werden:

GlobalState.weather       -- { weather, windSpeed, windDirection, hasSnow }
GlobalState.currentTime   -- { hour, minute }
GlobalState.isNight       -- boolean
GlobalState.freezeTime    -- boolean
GlobalState.blackOut      -- boolean (Blackout-Modus)
GlobalState.timeScale     -- Millisekunden pro Spielminute

Wetter-Typen

Vordefinierte Typen aus Config.WeatherSettings.weatherTypes:

Typ Beschreibung normalCycle
CLEAR Klar
CLOUDS Bewölkt
OVERCAST Bedeckt
RAIN Regen
THUNDER Gewitter
FOGGY Nebel
SMOG Smog
XMAS Schnee (Weihnachten) nur Dez 20–Jan 10
SNOW Schnee nur Dez 20–Jan 10
BLIZZARD Blizzard nur Dez 20–Jan 10
HALLOWEEN Halloween ❌ (nur manuell)

Admin Commands

Command Beschreibung Berechtigung
/blackout Blackout ein/ausschalten command.weather
hourlyweather (Server-Konsole) Wetterbericht der nächsten 24h

Zeit-Konfiguration

Config.TimeSettings = {
    timeScaleNight = 60000,  -- ms pro Minute bei Nacht
    nightTime = {
        beginning = 21,      -- Nacht beginnt um 21 Uhr
        ending    = 6,       -- Nacht endet um 6 Uhr
    }
}

Wetter-Konfiguration

Config.WeatherSettings = {
    gridSlotsTotal    = 672,   -- 7 Tage × 24h × (60/15) Slots
    gridSlotMinutes   = 15,    -- Minuten pro Slot
    weatherCycletimer = 15,    -- Standard-Slot-Dauer in Minuten

    weatherTypes = {
        CLEAR   = { probability = 5, duration = { min = 2, max = 16 }, normalCycle = true },
        RAIN    = { probability = 2, duration = { min = 1, max = 6  }, normalCycle = true },
        -- ...
    }
}

Datenbankschema

CREATE TABLE weather_grid (
    id             INT PRIMARY KEY AUTO_INCREMENT,
    slot_time      DATETIME UNIQUE,
    weather        VARCHAR(20),
    windSpeed      FLOAT DEFAULT 0.0,
    windDirection  FLOAT DEFAULT 0.0,
    hasSnow        TINYINT(1) DEFAULT 0
);