Construction Set Skriptthread zum Construction Set

Das "Set fQuestDelayTime to 0.01" setzt du am besten direkt am Anfang in einen GameMode-Block.

Irgendwie verwirrt Ihr mich. Kann nicht mal jemand ein Beispiel Script dazu zeigen.

Ich habe ja mein Script schon mal angehängt. Wo und wie baue ich denn da dieses Delay ein?
Code [Spoilr]
scn 00WaterLightQuest

short loaded
short underwater

Begin Gamemode

;;game load
if getgameloaded
set loaded to 0
endif

;;reset

if loaded == 0
WaterlichtBlueReff.disable
set loaded to 1
endif

;;test Unterwasser

if player.isunderwater
set underwater to 1
else
set underwater to 0
endif

;;-------------------------------------------Lichtssteuerung

if underwater ==1
WaterlichtBlueReff.enable
else
WaterlichtBlueReff.disable
set underwater to 0
endif

End
[/Spoiler]
---------------
 
Das Alchemiemenu kann man bisher noch nicht über ein Script aufrufen. Wenn man sich mal eine Apparatur im CS anschaut, sieht man, dass man den Typ (Mörser & Stößel, Rethorte, etc) einstellen kann.
Der Teil ist wohl hardcoded, sprich nicht veränderbar.

@robinh:
Code:
scn 00WaterLightQuest

short loaded
short underwater
[COLOR="Red"]float fQuestDelayTime[/COLOR]

Begin Gamemode
[COLOR="Red"]set fQuestDelayTime to 0.01[/COLOR]

;;game load
if getgameloaded
set loaded to 0
endif

;;reset

if loaded == 0
WaterlichtBlueReff.disable
set loaded to 1
endif

;;test Unterwasser

if player.isunderwater
set underwater to 1
else
set underwater to 0
endif

;;-------------------------------------------Lichtssteuerung

if underwater ==1
WaterlichtBlueReff.enable
else
WaterlichtBlueReff.disable
set underwater to 0
endif

End

So sollte das hinhauen.
 
  • Like
Reaktionen: robinH
Heyho!

Ich hab ein problem:

Es sollen nachts Nebelschwaden auftauchen, die tags aber nicht da sind.
Dafür habe ich folgendes Script:

Code:
scn ulbwfwatermistscript

Begin GameMode
	if ( player.GetDistance ulbwfwatermistref01 < 10000 ) && ( player.GetDistance ulbwfwatermistref02 < 10000 );; Nur wenn der Spieler in der nähe ist (Performance!)
     if ( GetCurrentTime <= 5 ) && ( GetCurrentTime >= 21 )
			ulbwfwatermist01.enable
			ulbwfwatermist02.enable
			ulbwfwatermist04.enable
			ulbwfwatermist05.enable
			ulbwfwatermist06.enable
			ulbwfwatermist08.enable
			ulbwfwatermist09.enable
			ulbwfwatermist10.enable
			ulbwfwatermist11.enable
		endif

		if ( GetCurrentTime <= 3 ) && ( GetCurrentTime >= 24 )			
               ulbwfwatermist01.disable
			ulbwfwatermist02.disable
			ulbwfwatermist04.disable
			ulbwfwatermist05.disable
			ulbwfwatermist06.disable
			ulbwfwatermist08.disable
			ulbwfwatermist09.disable
			ulbwfwatermist10.disable
			ulbwfwatermist11.disable
		endif
	endif
End

Die Schwaden sind "initially disabled" und "persisted reference"(?).
Nun, es passiert aber rein gar nichts. Die Nebelschwaden sind NIE da.
Da das Script eine Vorlage war, ich aber zu doof bin, das zum laufen zu bringen, brauche ich eure Hilfe. :oops:

Gruß
roobsi
 
Zuletzt bearbeitet:
Code:
scn OBNew013OblivionTowerPedestalSCRIPT

ref myTarget
ref mySelf
float Timer

begin onActivate
    set myTarget to GetActionRef
    set mySelf to getSelf
    myTarget.pms effectDestruction
    mySelf.pms effectDestruction
    activate
end

Begin Gamemode
if Timer == 0
    set Timer to 5
endif
if timer > 0
    set timer to timer - getsecondspassed
endif


if Timer <=2
OBNew013Ped.enable
else
OBNew013Ped.disable 
endif
end

Ich habe den Script auf ein Objekt gelegt, wovon es eine Referenz OBNew013Ped gibt. Die Referenz ist Inititally Disabled und Persistent. Durch die Script soll das Objekt erscheinen und bald wieder verschwinden. Aber das geht nicht...Warum?
 
@roobsi:
Versuchs mal damit:

Code:
scn ulbwfwatermistscript

Begin GameMode
 if player.GetDistance ulbwfwatermistref01 < 10000 && player.GetDistance ulbwfwatermistref02 < 10000
  if GameHour <= 7 && GameHour > 20
   ulbwfwatermist01.enable
   ulbwfwatermist02.enable
   ulbwfwatermist04.enable
   ulbwfwatermist05.enable
   ulbwfwatermist06.enable
   ulbwfwatermist08.enable
   ulbwfwatermist09.enable
   ulbwfwatermist10.enable
   ulbwfwatermist11.enable
  endif
  if GameHour > 7 && GameHour <= 20		
   ulbwfwatermist01.disable
   ulbwfwatermist02.disable
   ulbwfwatermist04.disable
   ulbwfwatermist05.disable
   ulbwfwatermist06.disable
   ulbwfwatermist08.disable
   ulbwfwatermist09.disable
   ulbwfwatermist10.disable
   ulbwfwatermist11.disable
  endif
 endif
end

@Unbekannter:
Wenn ich das richtig verstanden habe, willst du, dass eine "disabled"-Referenz nach dem Aktivieren für kurze Zeit auftaucht und danach wieder verschwindet? Dürfte nicht funktionieren, weil du keine Referenzen aktivieren kannst, die "disabled" geschaltet sind. Mach es stattdessen mit einem Script, dass diesen Gegnstand "enabled", sobald bestimmte Zustände eingetreten sind... (wie bei dem Script von/für roobsi)
 
Zuletzt bearbeitet:
Hey Diarrhoe!

Danke dir für den Beitrag. :)
Es tut aber nicht.
In Zeile 16 beschwert er sich, weil nur eine ) da war, keine (.
Dann hab ich mal die ) weggemacht und er nahm es an.
Nun, ingame ist auch nachts nichts wieder zu sehen. :(

Gruß
roobsi
 
Hallo,ich hab ein seltsames Problem: Ich habe eine Triggerzone erstellt mit folgendem Skript:

Code:
scn dftrigteleport

float timer
short triggered
ref mySelf

begin onTriggerActor

	if triggered == 0
		set mySelf to getactionref
		myself.moveto dftriggermarker
          set triggered to 1
          set timer to 10
	endif

end

Begin Gamemode
set timer to timer - GetSecondsPassed
if timer <= 0
set triggered to 0
endif 
end

Und wenn ich in die Triggerzone hineinlaufe,werde ich teleportiert,allerdings kann ich mich nichtmehr bewegen ich werde dann ständig wieder in eine Art ''Ausgangsstellung'' gebracht.Zaubern,Waffe ziehen und aktionen kann ich machen,allerdings kann ich die Konsole nichtmehr öffnen:huh: sie schließt sich dann nämlich sofort nachdem ich sie geöffnet habe.

Liegt das irgendwie am Skript?

MfG Darkfire
 
@ Unbekannter: Was genau geht nicht? Er verschwindet nicht wieder? Probiere es hiermit:
Code:
scn OBNew013OblivionTowerPedestalSCRIPT

ref myTarget
ref mySelf
float Timer

begin onActivate
    set myTarget to GetActionRef
    set mySelf to getSelf
    myTarget.pms effectDestruction
    mySelf.pms effectDestruction
    activate
end

Begin Gamemode
if Timer <= 0
    set Timer to 5
endif
if timer > 0
    set timer to timer - getsecondspassed
endif


if Timer <=2 && timer > 0
OBNew013Ped.enable
else
OBNew013Ped.disable 
endif
end

@ roobsi: mit GetCurrentTime gibt es Probleme. Nicht umsonst gibt es die Global GameHour:
Code:
scn ulbwfwatermistscript

Begin GameMode
	if (player.GetDistance ulbwfwatermistref01 < 10000) && (player.GetDistance ulbwfwatermistref02 < 10000)
     if (GameHour <= 5) && (GameHour >= 21)
			ulbwfwatermist01.enable
			ulbwfwatermist02.enable
			ulbwfwatermist04.enable
			ulbwfwatermist05.enable
			ulbwfwatermist06.enable
			ulbwfwatermist08.enable
			ulbwfwatermist09.enable
			ulbwfwatermist10.enable
			ulbwfwatermist11.enable
		endif

		if (GameHour <= 3  && (GameHour >= 24)			
               ulbwfwatermist01.disable
			ulbwfwatermist02.disable
			ulbwfwatermist04.disable
			ulbwfwatermist05.disable
			ulbwfwatermist06.disable
			ulbwfwatermist08.disable
			ulbwfwatermist09.disable
			ulbwfwatermist10.disable
			ulbwfwatermist11.disable
		endif
	endif
End

@ DarkFire: Ich nehme einfach mal an, dass du wieder in eine Triggerbox teleportiert wirst? Kurze Erläuterung: Wenn der Spieler per moveto bewegt wird, fungiert der moveto-befehl innerhalb des Scripts als Return-funktion. Deswegen sollte sie am Schluss stehen:
Code:
scn dftrigteleport

float timer
short triggered
ref mySelf

begin onTriggerActor

	if triggered == 0
		set mySelf to getactionref
        	set triggered to 1
        	set timer to 10
		myself.moveto dftriggermarker
	endif

end

Begin Gamemode
set timer to timer - GetSecondsPassed
if timer <= 0
set triggered to 0
endif 
end
 
  • Like
Reaktionen: roobsi und Darkfire
@roobsi:
@Unbekannter:
Wenn ich das richtig verstanden habe, willst du, dass eine "disabled"-Referenz nach dem Aktivieren für kurze Zeit auftaucht und danach wieder verschwindet? Dürfte nicht funktionieren, weil du keine Referenzen aktivieren kannst, die "disabled" geschaltet sind. Mach es stattdessen mit einem Script, dass diesen Gegnstand "enabled", sobald bestimmte Zustände eingetreten sind... (wie bei dem Script von/für roobsi)

Nein, das mit den OnActivate-Block ist nicht zu beachten, dass ist, weil auf dem Objekt schon ein Anderes Script liegt. Ich möchte, dass dieses Objekt ständig Enabled und bald wieder disabled wird, also sozusagen Blinkt. Dass soll nicht nur einmal funktionieren, sondern immer. Wie gesagt, das mit dem On Activate ist was anderes...

Außerdem wird die Initally Disabled-Referenz zwar im Spiel enabled, aber nicht wieder disabled
 
@ Unbekannter: Was genau geht nicht? Er verschwindet nicht wieder? Probiere es hiermit:
Code:
scn OBNew013OblivionTowerPedestalSCRIPT

ref myTarget
ref mySelf
float Timer

begin onActivate
    set myTarget to GetActionRef
    set mySelf to getSelf
    myTarget.pms effectDestruction
    mySelf.pms effectDestruction
    activate
end

Begin Gamemode
if Timer <= 0
    set Timer to 5
endif
if timer > 0
    set timer to timer - getsecondspassed
endif


if Timer <=2 && timer > 0
OBNew013Ped.enable
else
OBNew013Ped.disable 
endif
end

Was bringt dass, Timer kann doch niemals 0 erreichen, da es dann sofort wieder auf 5 gesetzt wird... werd's mal ausprobieren, aber ob das hilft...
Hängt das vielleicht damit zusammen, dass der Script auf dem Selben Objekt, das dis und enabled wird liegt, ich wollte da eigentlich this.disable schreiben, aber da ging es nicht...
 
Hi GIldur und danke. :)

Aaaber... so wie du es gepostet hast, hat er wieder gemeckert, weil ne Klammer gefehlt hat bzw. zu viel war. (Ich geh von gefehlt hat aus)
Leider tut es immernoch nicht, aktuelles Script:

PHP:
scn ulbwfwatermistscript

Begin GameMode
	if (player.GetDistance ulbwfwatermistref01 < 10000) && (player.GetDistance ulbwfwatermistref02 < 10000)
     if (GameHour <= 5) && (GameHour >= 21)
			ulbwfwatermist01.enable
			ulbwfwatermist02.enable
			ulbwfwatermist04.enable
			ulbwfwatermist05.enable
			ulbwfwatermist06.enable
			ulbwfwatermist08.enable
			ulbwfwatermist09.enable
			ulbwfwatermist10.enable
			ulbwfwatermist11.enable
		endif

		if (GameHour <= 21)  && (GameHour >= 5)			
               ulbwfwatermist01.disable
			ulbwfwatermist02.disable
			ulbwfwatermist04.disable
			ulbwfwatermist05.disable
			ulbwfwatermist06.disable
			ulbwfwatermist08.disable
			ulbwfwatermist09.disable
			ulbwfwatermist10.disable
			ulbwfwatermist11.disable
		endif
	endif
End
Müsste es so nicht eigentlich schon gehen oder tun die Zwei player.getdistance referenzen sich irgendwie ausschließen oder so?
Bin echt ein Noob. :/

Gruß
roobsi
 
Der Script liegt auf einem runden Portal aus Oblivion, wie man es im Siegelturm findet. Eben dieses soll blinken. Daher kommt auch das OnActivate, das war schon vorher da. Das was da en und disabled wird, ist eine Referenz eben dieses Objektes
 
@ Gildur: Das ist auf nichts liegend. Das Script spricht die Referenzen an, die es ändern soll. Müsste das nicht so gehen? :/
Tschuldigung, ich bin wie gesagt da echt ein "Noob" und egsagt wurde mir davon nix.

Gruß
roobsi
 
Da haben wir ja das Problem(chen) :lol:

Ein Script muss immer auf etwas liegen. Demnach rate ich dir zu einem anderen Script:
Code:
scn ulbwfwatermistscript

ref myself

Begin GameMode
set myself to getself
	if (myself.GetDistance player < 10000)
		if (Gamehour <= 5) && (Gamehour >= 21)
			myself.enable
		Elseif (GameHour <= 3  && (GameHour >= 24)
			myself.disable
		endif
	endif
End
Diesen Script packst du einfach auf den Nebel. Dabei gibst du ihm auch eine neue ID, damit es nicht für im Spiel schon vorhandene Objekte geändert wird. Die Neben, die momentan in der welt sind, löschst du einfach und ersetzt sie durch den neuen Nebel auf dem jetzt dieser Script liegt.
 
  • Like
Reaktionen: roobsi
Hi Gildur!
Wieder danke, doch wieder tut es irgendwie nicht.
Habe einen Activator erstellt und das folgende Script draufgelegt ( er hat wieder wegen eine Klammer gemeckert):

scn ulbwfwatermistscript

ref myself

Begin GameMode
set myself to getself
if (myself.GetDistance player < 10000)
if (Gamehour <= 6) && (Gamehour >= 21)
myself.enable
Elseif (GameHour <= 21) && (GameHour >= 6)
myself.disable
endif
endif
End

Diese sind alle Persisted Blabla ;) und Initially Disabled.
Bin ich wieder so blöd, dass ich es nicht schaffe?

gruß
roobsi
 
Nein, du bist nicht blöd. Nur was Scripten geht unerfahren.
Also der Script gehört auf den Nebel. Vielleicht habe ich das unglücklich ausgedrückt.
 
Damit ich das Script draufsetzen kann, muss es ja ein Activator sein.
Also habe ich einen neuen Activator als nebelplane erstellt (das FXGasPlane.nif gewählt, wie beim Static) und auf jedem nebelstück ist damit der script.
Aber es macht nix... :/

Gruß
roobsi