Wetterscript

» Settlers Map Source Forums » Siedler DEdK Script Forum » Wetterscript

Pages: 1

mcb
#1
01-05-2016 17:32
Posts: 1367

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

Pages: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum