Wetterscript
» Siedler Map Source Forum » Siedler DEdK Script Forum » Wetterscript
Seiten: 1
mcb
|
#1 01.05.2016 17:32 Beiträge: 1472 |
Wetterscript
Ich hab mich mal mit dem Wetter in S5 beschäftigt. Rausgekommen sind zufällige Wetterwechsel, neue Wettertypen und ein Jahreszeiten-System:
--- mcbWeather mcb 1.0 -- -- Fügt neue Wettertypen hinzu und erzeugt die passenden GFX-Sets. Erzeugt außerdem -- die Wetter-Reihenfolge und die Wetter-Dauer zufällig. -- -- Verwendung: -- mcbWeather.setGFXSet(set) Setzt das zu nutzende GFX-Set. Aus der InitWeatherGfxSets aufrufen. -- Die folgenden Sets sind Vorgefertigt angepasst: -- mcbWeather.set.normal, mcbWeather.set.evelance, mcbWeather.set.mediterranean, -- mcbWeather.set.highland, mcbWeather.set.moor, mcbWeather.set.steppe -- (so wie die originalen GFX-Sets, nur mit den neuen Wettertypen) -- -- mcbWeather.startRandom(timerMin, timerRand, pSomm, pReg, pWin, pWinSpe, pWinSpeR, noIce, timerTrMin, timerTrRand, starting) -- Startet die zufällige Wetterauswahl. Aus der InitWeather aufrufen. -- timerMin+GetRandom(timerRand) ist die Dauer der normalen Wettertypen. -- Standard: 60, 60 -- pSomm, pReg, pWin sind die Wahrscheinlichkeiten für Sommer, Winter und Regen. -- (Zahlen im Bereich 0-1, müssen addiert nicht 1 ergeben) -- Standard: 0.4, 0.3, 0.3 -- pWinSpe ist die Wahrscheinlichkeit, dass nach dem Winter Schneebedeckt ausgewählt wird. -- Standard: 0.3 -- pWinSpeR ist die Wahrscheinlichkeit, dass nach Schneebedeckt erneut Winter ausgewählt wird. -- Standard: 0.1 -- timerTrMin+GetRandom(timerTrRand) ist die Dauer der Übergangswettertypen. -- Standard: 20, 10 -- starting ist der anfängliche Wettertyp. Wird hier nichts gesetzt, wird zufällig gewählt. -- Übergangswettertypen sind nicht empfohlen. -- -- mcbWeather.startSeason(timerSeason, timerMin, timerRand, timerTrMin, timerTrRand, pRainHigh, pRainLow, startSeason, startWeather) -- Startet die Wetterauswahl auf Jahreszeitenbasis. Aus der InitWeather aufrufen. -- Jahreszeiten: 1-Sommer,2-Herbst,3-Winter,4-Frühling -- timerSeason legt die dauer der Jahreszeiten fest. -- Entweder Zahl oder ein table mit Zahlen für jede Jahreszeit. -- Empfohlen sind wesentlich größere Werte als für die einzelnen Wettertypen. -- 0 überspringt die entsprechende Jahreszeit. -- Standard: 400 -- timerMin+GetRandom(timerRand) ist die Dauer der normalen Wettertypen. -- Standard: 60, 60 -- timerTrMin+GetRandom(timerTrRand) ist die Dauer der Übergangswettertypen. -- Standard: 20, 10 -- pRainHigh ist die Niederschlagswahrscheinlichkeit in Herbst, Winter und Frühling. -- Standard: 0.7 -- pRainLow ist die Niederschlagswahrscheinlichkeit im Sommer. -- Standard: 0.3 -- startSeason ist die Start-jahreszeit. Wird nichts gesetzt, wird zufällig gewählt. -- startWeather ist der anfängliche Wettertyp. Wird hier nichts gesetzt, wird zufällig -- gewählt (passend zur Jahreszeit). -- Übergangswettertypen sind nicht empfohlen. -- -- mcbWeather.getWeatherStates() Gibt die aktuelle GFX-Id, die Zeit bis zum nächsten Wetterwechsel, die nächste GFX-Id zurück. -- -- mcbWeather.getSimpleWeather(w) Gibt für eine GFX-Id die Zuordnung zu Sommer(1), Regen(2) und Winter(3) zurück. -- -- mcbWeather.getSeasonInfo() Gibt die aktuelle Jahreszeit und die Zeit bis zur nächsten zurück. -- -- mcbWeather.sceduleSingleWeather(w, dur, tim) -- Setzt den nächsten Wetterwechsel. -- w das zu setzende Wetter (als GFX-Id). -- dur die Dauer für den zu setzenden Wettertyp. -- tim die Zeit bis zum Wetterwechsel, so lange gibt es keine Wetteränderung. -- -- mcbWeather.addWeather(w, dur) Fügt das Wetter am Ende der Wetterwarteschlange ein. -- Die Wetterwarteschlange wird normalerweise automatisch gefüllt (bis maximal 3), wird allerdings -- mcbWeather.addWeather direkt nach mcbWeather.sceduleSingleWeather aufgerufen, lässt ich -- komplett benutzerdefiniertes Wetter aufbauen. -- w das einzufügende Wetter. -- dur die Dauer für das einzufügende Wetter. -- -- mcbWeather.overrideWeather(w, dur) Ändert das Wetter mit sofortiger Wirkung (Wetterturm). -- w das zu setzende Wetter (als GFX-Id) -- dur die Dauer für das zu setzende Wetter. -- -- Es ist nicht empfohlen, die Dauer eines Wettertyps auf unter 20 Sekunden einzustellen, sonst kommt es zu -- Problemen mit der Wettervorhersage am Wetterturm. -- -- Wettertypen: wId GFX Beschreibung Übergang für -- Sommer: 1 1 -- Regen: 2 2 -- Winter: 3 3 -- Schneebedeckt: 3 9 winter ohne schneefall -- Kalt 1 11 winter ohne schneefall und schneedecke (nur für Jahreszeiten Winter, wenn noch kein Schnee gefallen ist) -- -- Wolkig: 1 4 sommer mit regen-lf sommer->regen -- Schneefall: 1 5 winter ohne schneedecke sommer->winter -- Aufklarend: 2 10 sommer mit regen-lf regen->sommer -- Schneeregen: 2 6 regen mit schneefall regen->winter -- Tauwetter: 3 7 sommer mit schneedecke winter->sommer -- Schneematsch: 3 8 regen mit schneedecke winter->regen -- -- Benötigt: -- - getRandomFromProp -- - GetRandom -- - Trigger-Fix --
Das ganze Script: comwetter.lua
Benötigt wird außerdem noch das hier:
--- getRandomFromProp mcb 1.0 -- Wählt aus verschiedenen Werten (jeweils mit Wahrscheinlichkeiten) pseudozufällig einen aus. -- getRandomFromProp({{r="r1",p=0.5},{r="r2",p=0.2},{r="r3",p=0.3}}) -- wählt pseudozufällig "r1" mit 50%, "r2" mit 20%, "r3" mit 30% Wahrscheinlichkeit. -- -- Benötigt: -- - GetRandom function getRandomFromProp(t) local m = 0 for _,p in ipairs(t) do m = m + (p.p*100) end local r = GetRandom(0, m) for _,p in ipairs(t) do r = r - (p.p*100) if r <= 0 then return p.r end end assert(false) end
Seiten: 1