Construction Set Skriptthread zum Construction Set

nunja nicht ganz. der letzte schalter überprüft in welcher reihenfolge geschaltet wurde. bei einer variante soll etwas auftauchen bei der zweiten auch der spieler soll aber nicht sterben das hab ich nie erwähnt ^^


Beim Timer passiert absolut nichts ich überprüfe gerade nochmal alles und dann änder ich es eben so wie du vorgeschlagen hast.

Sry wegen unübersichtlichen script ^^ kommt nicht wieder vor.
 
Ok, also Variante 1 ist Schalter1 --> Schalter2 --> Schalter3.
Was ist Variante 2 und was passiert dabei? Was passiert wenn die Reihenfolge falsch ist?
 
bei variante 2 erscheint ebenfalls ein objekt aber halt ein anderes ne ^^

wen die reihenfolge falsch ist passiert nichts b.z.: die variablen sollen wieder auf null gesetzt werden sonst könnte man ja nicht mehr machen. genauso sollten die variablen nach ablauf des timers auf 0 gesetzt werden
 
Versuchs mal damit...
Die "gewöhnlichen" Schalter bekommen die Referenzen Schalter01REF, Schalter02REF und Schalter03REF. Auf sie kommt folgendes Skript:
Code:
scn SchalterSCRIPT

short busy
short activated

Begin onActivate
	if busy == 0
		set busy to 1
		if isActionRef player == 1
			if activated == 0
				set activated to 1
				playgroup forward 1
			endif
		else
			set activated to 0
			playgroup backward 1
		endif
	endif
end

Begin GameMode
	if busy == 1 && isAnimPlaying == 0
		set busy to 0
	endif
end

Auf den vierten Schalter (Referenz ist egal, hauptsache die Referenz ist "persistent") kommt dieses Skript:
Code:
scn Schalter2SCRIPT

short init
short next
short anim
short Variante1
short Variante2
short fail
flaot timer
ref mySelf

Begin onActivate
	set mySelf to getSelf
	if init <= 0
		return
	endif
	if fail == 1
		set timer to 0.5
	else
		if Variante1 == 3
			Gegenstand01REF.enable
		elseif Variante2 == 3
			Gegenstand02REF.enable
		endif
		set timer to 5
	endif
	if anim == 0
		set anim to 1
		playgroup forward 1
	else
		set anim to 0
		playgroup backward 1
	endif
	set init to -1
	set next to 1
end

Begin GameMode
	if fail == 0
		if init == 0
			if Schalter01REF.activated == 0 && Schalter02REF.activated == 0 && Schalter03REF.activated == 0
			elseif Schalter01REF.activated == 1 && Schalter02REF.activated == 0 && Schalter03REF.activated == 0
				set init to 1
				set Variante1 to 1
			elseif Schalter01REF.activated == 0 && Schalter02REF.activated == 1 && Schalter03REF.activated == 0
				set init to 1
				set Variante2 to 1
			else
				set fail to 1
				set init to 3
			endif
		elseif init == 1

			if Variante1 == 1
				if Schalter02REF.activated == 0 && Schalter03REF.activated == 0
				elseif Schalter02REF.activated == 1 && Schalter03REF.activated == 0
					set init to 2
					set Variante1 to 2
				else
					set fail to 1
					set init to 3
				endif
			elseif Variante2 == 1
				if Schalter01REF.activated == 0 && Schalter03REF.activated == 0
				elseif Schalter01REF.activated == 1 && Schalter03REF.activated == 0
					set init to 2
					set Variante2 to 2
				else
					set fail to 1
					set init to 3
				endif
			endif
		elseif init == 2
			if Variante1 == 2
				if Schalter03REF.activated == 1
					set init to 3
					set Variante1 to 3
				endif
			elseif Variante2 == 2
				if Schalter03REF.activated == 1
					set init to 3
					set Variante2 to 3
				endif
			endif
		endif
	else
		return
	endif
	if timer >= 0 && next == 1
		set timer to timer - getSecondsPassed
	endif
	if timer < 0 && next == 1
		if fail == 0
			if Variante1 == 3
				Gegenstand01REF.disable
			elseif Variante2 == 3
				Gegenstand02REF.disable
			endif
		else
			set fail to 0
		end
		Schalter01REF.activate mySelf 1
		Schalter02REF.activate mySelf 1
		Schalter03REF.activate mySelf 1
		set next to 0
		set Variante1 to 0
		set Variante2 to 0
		set init to 0
	endif
end

Die beiden Gegenstände bekommen die Referenzen Gegenstand01REF und Gegenstand02REF. Habs jetzt nicht getestet, also geb ich dir da keine Garantie...

MfG
 
nein tut mir leid es funktioniert nicht. kann dir auch nicht sagen warum, klar fehlermeldung gab es aber nur weil du Float falsch geschrieben hast.
 
nun es passiert nichts. ich drücke meine schalter und dann den letzten nichts passiert wen ich es nochmal machen möchte kann ich meine schalter erst garnicht mehr drücken.
 
Also dass du nicht mehr drücken kannst liegt bestimmt nicht am skript sondern daran dass du keine Reset-Schalter genommen hast. mach mal ingame per Konsole auf den Schalter :
Reset3dState und guk ob man ihn dann wieder betätigen kann...
 
Zuletzt bearbeitet:
Nein, daran wird es nicht liegen, sondern am Skript. Den "Reset3DState"-Befehl kann man ja auch im Skript anwenden, ist aber hier nicht vonnöten...
 
Die einfachste aber aufwandsreichste methode herauszufinden woran es im Skript liegt wäre alle Variablen in Oblivion mit den Show Befehl zu überprüfen mach das mal und dann poste die Werte pls dann kann man ja sehen wo der Fehler ist...
 
Ne kurze frage, kennt ihr einen Skript befehl der die Havok engine eines gegenstandes deaktiviert, ja ich weiss das es mit nifskope auch geht aber ich brauchs ja für nen skript :)
danke im vorraus
 
Also mit OBSE und den Vanilla befehlen geht es nicht. Ob es mit NifScripts funktioniert weiß ich nicht musst du mal in den offiziellen Foren nachfragen.
 
ich habs jetzt en bissel anders gemacht.


SCN TesterKontroll

ref Schalter10

Begin OnActivate

if Schalter10==0
endif
set Quest.Schalter10 to 10



Endif


If Quest.Schalter1 == 1 && Quest.Schalter2 == 2 && Quest.Schalter3 == 3 && Quest.Schalter4 == 4 && Quest.Schalter5 == 5 && Quest.Schalter6 == 6 && Quest.Schalter7 == 7




playgroup forward 0
Door01.enable
LIGHT01.Enable

Endif

If Quest.Schalter1 == 1 && Quest.Schalter5 == 5 && Quest.Schalter8 == 8 && Quest.Schalter3 == 3

playgroup forward 0
Door02.enable
LIGHT02.Enable
endif
end



So müsste es ja eig auch funktionieren die anzahl der kombinationen ist zwar deutlich eingeschränkter und die anzahl der Schalter größer aber je mehr schalter umso lustige sieht es nacher aus ^^


Blos der timer macht mir zu schaffen. nach ende des timers von 15sec. sollen alle variablen auf null gesetzt werden und die gegenstände disable werden.
 
Ich habe auch wieder eine Scriptfrage.

Was für ein Script brauche ich, damit das Spiel "einfriert", das Interface verschwindet und z.B. ein NPC auf einen zukommt und anspricht?
 
Du könntest es mit "disablePlayerControls" versuchen. Der Befehl verhindert, dass der Spieler sich bewegen kann, etc. Nur Umschauen ist noch möglich; ob dabei das Interface verschwindet, weiß ich allerdings nicht.

Edit @Raistlin:
Wie sieht denn das dazugehörige Questskript aus und die Skripte auf den Schaltern?
Ein Manko bei deinem Skript wäre, - sofern du es nicht durch das Questskript so gelöst hast - dass du nicht abfragst, in welcher Reihenfolge die Schalter aktiviert wurden...

Ps: Timerskripts sind nicht unbedingt kompliziert...
Du deklarierst die Timer-Variable als "float" und setzt sie an der gewünschten Stelle auf deinen gewünschten Wert. Dann bestimmst du im GameMode-Block, dass der Timer runtergezählt wird und wenn der Timer einen bestimmten Wert erreicht hat, passiert etwas; das ganze könnte - in einer einfachen Variante - zum Beispiel so aussehen:
Code:
scn name

short next
float timer

Begin onActivate
 if next == 0
  set timer to 5
  set next to 1
 endif
end

Begin GameMode
 if timer > 0 && next == 1
  set timer to timer - getSecondsPassed
 endif
 if timer <= 0 && next == 1
  set next to 2
  ; irgendetwas passiert
 endif
end

Wichtig ist, dass du bei der Timer-Abfrage mit Wertbereichen arbeitest und nicht mit genauen Werten...
 
Zuletzt bearbeitet:
Hallo Leute hab ein Prob mit diesem Script!

scn test

short TombStone

Begin OnActivate
Messagebox "Wollt ihr den Kalten Grabstein berühren?" "Ja", "Nein lieber nicht!"
end

Begin GameMode
Set TombStone to GetButtonPressed
If TombStone == 0
player.placeatme etwasAnderes
player.placeatme neKreatur
Messagebox "Ihr spürt wie euch ein kalter Schauer über den Rücken läuft"
elseif TombStone == 1
Messagebox "In dem Moment als ihr euch entscheidet den Grabstein nicht anzufassen, spürt ihr einen starken Schmerz im Körper der nicht mehr aufhören will!"
player.addspell NenSpell
endif
end

Also der Skript funzt ja eigentlich, das was halt stört ist... Wenn ich auf ja Drücke werden Solche komischen viecher beschworen... und es kommt ne messagebox! Diese messagebox wiederholt sich unendlich oft genauso wie die kreaturen... es werden immer mehr!
Kann mir wer nun erklären was daran falsch ist und wieso?

danke im Vorraus

Euer Fluffy
 
scn test

short once
short TombStone

Begin OnActivate
if once == 0
Messagebox "Wollt ihr den Kalten Grabstein berühren?" "Ja", "Nein lieber nicht!"
set once to 1
end

Begin GameMode
Set TombStone to GetButtonPressed
If TombStone == 0
player.placeatme etwasAnderes
player.placeatme neKreatur
Messagebox "Ihr spürt wie euch ein kalter Schauer über den Rücken läuft"
elseif TombStone == 1
Messagebox "In dem Moment als ihr euch entscheidet den Grabstein nicht anzufassen, spürt ihr einen starken Schmerz im Körper der nicht mehr aufhören will!"
player.addspell NenSpell
endif
end

Ich habe oben makiert was ich hinzugefügt habe, dadurch wird die Messagebox nur einmal erscheinen wenn du es einmal aktivierst und du kannst dann in Ruhe einmal antworten. :)
So sollte es zumindestens funktionieren, aber du solltest den placeatme Befehl nicht verwenden, dass bläht nur den Spielstand bis zur Unspielbarkeit auf.
Außer es ist einmalig, dann könntest du ihn einmal nutzen, ich würde aber damit so wenig wie möglich arbeiten. ;)

Anstatt des placeatme Befehl solltest du die Kreaturen in einer anderen Zelle plazieren, ihnen eine Referenz zuweisen und sie dann per Moveto Befehl zum Spieler schicken. In der Zelle in die du deinen beiden Kreaturen plazierst sollte aber nicht anderes sein.
Code:
KreaturenReferenz.moveto player

Mfg Master of Worlds
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Fluffy
Das Skript könnte zum Beispiel so aussehen:
Code:
scn name

short button
short init

Begin onActivate
 if init == 0
  messagebox "bla" "Ja!" "Nein, lieber nicht."
  set init to 1
 endif
end

Begin GameMode
 if init == 1
  set button to getButtonPressed
  if button == 0
   messagebox "bla"
   player.placeAtMe <Kreatur> 1, x, y
   player.placeAtMe <Anderes> 1, x, y
  elseif button == 1
   messagebox "bla"
   player.addSpell <Spell> ;eventuell sollte man hier mit "cast" arbeiten
  endif
  set button to -1
 endif
end

Statt "PlaceAtMe" könntest du auch "MoveTo". Dafür müsstest du die Kreaturen/Gegenstände nur vorher erstellen und in eine eigene Zelle verfrachten...

Edit: Mein Gott, bin ich langsam...
 
  • Like
Reaktionen: Fluffy