Construction Set Zeit und Wetter per Script feststellen

Fellan

Freund des Hauses
Ich möchte während dem Verlauf einer Quest bestimmte Szenarien an ganz bestimmten Zeitpunkten haben.

Beispiel: Der Spieler fährt nachts (per "GetCurrentTime" wird sichergestellt, dass es auch dunkel ist) mit einem Boot auf See. Wenn er an seinem Ziel ankommt, soll es "LOSFAHRZEIT PLUS DREI STUNDEN" Uhr sein.
An dieser Zeit soll sich nichts mehr ändern, solange der Spieler entweder: Im Radius von 2000 um X oder in Cell A oder Cell B oder Cell C ist.

Heißt: Solange der Spieler an den von mir bestimmten Orten ist, läuft die Zeit nicht mehr weiter, sie bleibt da stehen, wo ich vorher die Zeit eingestellt habe. Von dort verschwinden kann der Spieler nicht mehr.

Nun wird der Spieler irgendwann zu Boden gehauen und wacht erst Stunden später wieder auf - da ist es schon morgens. Jetzt möchte ich die Zeit wieder auf 9 Uhr stellen, von diesem Zeitpunkt an soll die Uhr normal weiterlaufen. Wenn es wieder dunkel wird, soll sich der Spieler einen Schlafplatz suchen - bis er schläft, soll es die ganze Zeit Abenddämmerung bleiben, egal, wie lange der Spieler braucht, um ein Bett zu finden.



Anderes Szenario zum Wetter: Ich möchte, dass immer die Sonne scheint. Regnen oder Bewölt sein soll es nur, wenn der Spieler im Radius von X um Y ist, ähnlich wie bei den Oblivion-Toren. (Wie) ist das beides möglich?

Danke schonmal für die Hilfe. :)
 
Zum Wetter nochmal etwas ausführlicher: Das kannst Du, wie Lazarus schon schrieb, mittels ForceWeather oder auch SetWeather einstellen. ForceWeather bewirkt einen sofortigen Wetterwechsel, SetWeather verursacht einen sanften Übergang vom momentanen zum neuen Wetter. Schreibt man noch eine 1 hinter den Befehl, soll das Wetter ständig so bleiben, wie man es eingestellt hat.

SetWeather Clear 1 sollte (theoretisch) also langsam vom derzeitigen Wetter zu Sonnenschein übergehen und dann so bleiben. Das funktioniert nach meiner Erfahrung aber nur in einiger Nähe der Zelle, in welcher der erzwungene Wetterwechsel stattgefunden hat. Macht man eine Schnellreise oder entfernt sich zu Fuß weiter von der Zelle oder betritt eine Interiorzelle wechselt das Wetter dann doch wieder. Wenn es immer und überall schön sein soll, wirst Du vermutlich nach Zellenwechseln mit ForceWeather Clear immer wieder auf's neue schönes Wetter erzwingen müssen.

Hat man dauerhaft ein bestimmtes Wetter eingestellt, so kann (muss) der normale Wetterwechsel mittels ReleaseWeatherOverride wieder freigegeben werden. Dort, wo kein schönes Wetter herrschen soll, könntest Du ein Objekt mit einem Skript drauf aufstellen, welches bei Annäherung des Spielers das Wetter freigibt und sobald der Spieler sich entfernt wieder schönes Wetter erzwingt. So, nur umgekehrt, ist es auch bei den Oblivion-Toren gemacht.

PHP:
scn WettterScript

short SpielerNah

begin GameMode

	if GetDistance Player < 4000 && SpielerNah == 0
			ReleaseWeatherOverride
			set SpielerNah to 1
			
	elseif GetDistance Player > 5000 && SpielerNah == 1
			SetWeather Clear 1
			set SpielerNah to 0
	endif

end

Zur Zeit: Wahrscheinlich nicht umsetzbar. Du kannst zwar natürlich die Uhrzeit mittels Gamehour einstellen. Das eignet sich aber nur für seltene Anwendungen. Etwa, um nach dem Aufwachen die Zeit auf 9 Uhr zu stellen. Das geht schon. Um die Uhrzeit einzufrieren, müsste man Gamehour aber laufend auf den gewünschten Wert zurücksetzen. Macht man das in einem Objektskript in jedem Frame, friert teilweise die Grafik ein. Gräser bewegen sich dann bspw. nicht mehr im Wind. Macht man es seltener, gibt's Ruckler in der Grafik. Ich könnte mir denken, dass es auch zu Problemen mit den Tagesabläufen der NPCs kommt, wenn man ständig an der Uhrzeit dreht.
 
  • Like
Reaktionen: Fellan
Gut, auf das Uhrzeit feststellen werde ich wohl verzichten können bzw. müssen. Aber die Uhrzeit plus 3 Stunden zu setzen, ist mir schon wichtig. Danke dafür.
 
die Zeit um 3h vorstellen ginge dann demnach mit:
set gamehour to gamehour + 3

oder, du könntest den player auch "schlafen" lassen.
das ginge mittels:
setpcsleephours 3
da wird aber glaub ich kurz der bildschirm schwarz, oder so in etwa(ich hab den befehl eigentlich noch nie benutzt:roll:)
 
  • Like
Reaktionen: Fellan
Gut, was aber passiert, wenn es 23 Uhr ist und ich sage "plus drei Stunden"? Dann ist ja im Grunde 26 Uhr, aber das geht nicht. Schaltet er dann automatisch auf 2 Uhr?
 
hm, gute frage. das weiß ich leider auch nicht so genau...
aber man kann dem abhilfe schaffen:
Code:
set gamehour to gamehour + 3
if gamehour > 24
set gamehour to gamehour - 24
set gamedayspassed to gamedayspassed + 1
endif

aber ich würd ehrlich gesagt erstmal setpcsleephours 3 probieren. das sieht einfacher aus^^
 
  • Like
Reaktionen: Fellan
SetPCSleepHours bewirkt allerdings so einen Zeitraffer-Effekt der Spielgrafik. Man "schläft" sozusagen mit offenen Augen. Wenn's eh Nacht ist und der Versatz nur 3 Stunden beträgt, mag es aber nicht weiter auffallen. Und die Stunden werden als geschlafene Zeit gewertet.
 
  • Like
Reaktionen: Fellan