Construction Set Skriptthread zum Construction Set

Wie sieht ein Script aus, das eine Queststage auslösen soll bei Aufnahme eines Items in das Inventar. Das Item soll im Inventar also nicht aktiviert werden um die Stage auszulösen, sondern es soll nur ins Inventar aufgenommen werden.
 
[FONT=Times New Roman, serif]scn 01Questscript[/FONT]


[FONT=Times New Roman, serif]Begin OnAdd[/FONT]
[FONT=Times New Roman, serif]if getstage 01Quest == xx[/FONT]
[FONT=Times New Roman, serif]setstage 01Quest xx[/FONT]
[FONT=Times New Roman, serif]endif[/FONT]

[FONT=Times New Roman, serif]end[/FONT]
 
Hört es dann auch wieder auf hinter einem her zu laufen?

So wie ich es beschrieben habe nicht. Damit man z.B. durch "aktivieren" das Tier zum stehenbleiben bewegen will, sind noch einige Skriptzeilen nötig. ;)

@Arielle1000

Ich glaube es sollte mit folgendem Skript funktioniere, du musst nur noch die makierten Stellen ersetzen. :)

Code:
scn [B]...[/B]

short once

begin onAdd player
	if once == 0
		SetStage [B]XY XY[/B]
		Set once to 1
	endif
end

MfG Master of Worlds
 
Ja, danke, ich probiere es aus. Eine Frage hätte ich noch: ist es von besonderer Bedeutung, dass die Zeilen in einem Script eingerückt werden? Warum kann man sie nicht genau untereinander schreiben? Funktionieren sie dann nicht?
 
Ja, danke, ich probiere es aus. Eine Frage hätte ich noch: ist es von besonderer Bedeutung, dass die Zeilen in einem Script eingerückt werden? Warum kann man sie nicht genau untereinander schreiben? Funktionieren sie dann nicht?

Es dient lediglich der Übersicht in einem Skript. ;)

Du kannst es natürlich auch untereinander schreiben und es würde funktionieren. :)
Code:
scn ...

short once

begin onAdd player
if once == 0
SetStage XY XY
Set once to 1
endif
end

MfG Master of Worlds
 
  • Like
Reaktionen: Arielle 1000
Untereinander sieht es für mich übersichtlicher aus.
Nun noch eine Frage: Diese Stage soll erst bei einer schon bestehenden Stage ausgelöst werden. Muss da noch ein GetStage ... vor dem SetStage hinein?
 
Untereinander sieht es für mich übersichtlicher aus.
Nun noch eine Frage: Diese Stage soll erst bei einer schon bestehenden Stage ausgelöst werden. Muss da noch ein GetStage ... vor dem SetStage hinein?

Dann sollte das Skript glaube ich so aussehen. :?
Bei GetStageDone gibst du die Stage an die erreicht werden muss. :)

Code:
scn ...

short once

begin onAdd player
	if once == 0 && GetStageDone XY Stage
		SetStage XY Stage
		Set once to 1
	endif
end

MfG Master of Worlds
 
Das Einrücken ist besonders Hilfreich bei größeren scripts. Bei den kleinen habe ich das anfangs auch nie gemacht ...da zu Faul. Bei größeren siehst du aber bei vielen verschachtelten If Anweisungen (nur Beispiel) etc besser durch als wenn du alles untereinander schreibst.

Code:
scn aaaTorchholdnospecial01
short button
short take
short taken
short doonce

Begin OnActivate
if (doonce == 0)
  	messageBox "Fackelsockel"   "Anzünden" "Fackel einstecken" "Untersuchen"
elseif (doonce 1)
	Message " " 
endif
End

Begin Gamemode
set button to GetButtonPressed

if (button == 0)
	if (player.IsTorchOut == 1)
		if (taken == 0)
			Message "Ihr zündet die Fackel an"
			SewerTorchLight01.enable
			SewerTorch01.enable
 	 		SewerTorch01.addflames
			set taken to 1
			set doonce to 1	
		endif
	elseif (player.IsTorchOut == 0)
		Message "Ihr müsst eine brennende Fackel tragen"
	endif

elseif (button == 1)
	if (take == 0)
		Message "Ihr steckt die Fackel in euer Gepäck"
		Player.Additem Torch02 1
		SewerTorch01.disable
		set take to 1
		set doonce to 1	
	endif
elseif (button == 2)
				Message "An diesem Gegenstand gibt es nichts besonderes"
endif
End

Code:
scn aaaTorchholdnospecial01
short button
short take
short taken
short doonce

Begin OnActivate
if (doonce == 0)
messageBox "Fackelsockel"   "Anzünden" "Fackel einstecken" "Untersuchen"
elseif (doonce 1)
Message " " 
endif
End
Begin Gamemode
set button to GetButtonPressed
if (button == 0)
if (player.IsTorchOut == 1)
if (taken == 0)
Message "Ihr zündet die Fackel an"
SewerTorchLight01.enable
SewerTorch01.enable
SewerTorch01.addflames
set taken to 1
set doonce to 1	
endif
elseif (player.IsTorchOut == 0)
Message "Ihr müsst eine brennende Fackel tragen"
endif
elseif (button == 1)
if (take == 0)
Message "Ihr steckt die Fackel in euer Gepäck"
Player.Additem Torch02 1
SewerTorch01.disable
set take to 1
set doonce to 1	
endif
elseif (button == 2)
Message "An diesem Gegenstand gibt es nichts besonderes"
endif
End


Der weitere Vorteil darin besteht, falls du ja mal Probleme hast mit einem Script und es hier postest, das die anderen Member besser durchblicken.^^

edit
 
Zuletzt bearbeitet:
Mein Script sieht jetzt so aus:

scn 00CeliasAmulett

short once

begin onAdd player
if once == 0 && GetStageDone "00AriellesWeyeDorfCeliasQuest" 20
SetStage "00AriellesWeyeDorfCeliasQuest" 30
set once to 1
endif
end

Wenn ich es abspeichern will erscheint eine Fehlermeldung:

Script '00CeliasAmulett', line 6:
Expression Error: SYNTAX

Wie kann ich das korrigieren?


edit:
Oh, danke Hellfire für deine Erklärung. Ich habe deinen Post erst gesehen, als ich meinen schon eingefügt hatte.
Bei so langen Scripts ist es wirklich übersichtlicher alles einzurücken. Aber bis ich mal soweit bin....oh jeh, ich hab bei 6-Zeilern schon so meine Probleme....
 
Zuletzt bearbeitet:
Dann versuche es nochmal so, dabei gab es zumindestens bei mir keine Fehlermeldung. :)

Code:
scn 00CeliasAmulett

short once

begin onAdd player
if once == 0 && GetStage 00AriellesWeyeDorfCeliasQuest == 20
SetStage 00AriellesWeyeDorfCeliasQuest 30
set once to 1
endif
end

Edit:
@ Killerkarotte
Ich habe dies zwar oben auch entfernt, aber daran liegt es nicht, denn das Skript kann ich mit "" Problemlos speichern. ;)


MfG Master of Worlds
 
Code:
scn 00CeliasAmulett

short once

begin onAdd player
if ( once == 0 ) && ( GetStageDone "00AriellesWeyeDorfCeliasQuest" == 20 )
   SetStage "00AriellesWeyeDorfCeliasQuest" 30
   set once to 1
endif
end

Schonmal so probiert? :p

PS:
Hab das mti den Quests im Script noch nicht gemacht...wird aber kommen
 
Zuletzt bearbeitet:
Code:
scn 00CeliasAmulett

short once

begin onAdd player
if ( once == 0 ) && ( GetStage 00AriellesWeyeDorfCeliasQuest == 20 )
SetStage 00AriellesWeyeDorfCeliasQuest 30
set once to 1
endif
end

Ich glaube ja auch noch das es an den Zahlen am anfang der Quest ID liegt, aber naja. Probiers vllt mal ohne 00 :D

Edit @ }{ellFíre

Vor einem If kommt keine Klammer.
 
Das geht auch nicht. Fehlermeldung: "mismatched parenthesis"
Klammern habe ich allerdings noch nie in einem Script gesehen. Bist du sicher, dass die dort hin gehören?


@Sir Troy
meine anderen Quests beginnen auch alle mit 00, und die funktionieren alle. Aber diese Fehlermeldung verweist auf die Zeile 6, die scheint nicht in Ordnung zu sein.
 
Zuletzt bearbeitet: