Construction Set Skriptthread zum Construction Set

für einen trank musst du keinen zauber erstellen,oder?kann man doch einfach neben in der effekt-liste des trankes einstellen.da dann "skripteffekt" auswählen und zuordnen^^
 
achso ich dachte du willst auswahl-möglichkeiten sobald du den trank trinkst...

scn NAME
short selected
short button

begin onactivate
messagebox "stillen?" "ja" "nein" "mir doch egal"
set selected to 1
end

begin gamemode
if selected==1
set button to getbuttonpressed
if button==0
<heil-effekt>
set selected to 0
set button to 5

elseif button==1
message"wie du willst..."
set selected to 0
set button to 5

elseif button==2
message"dann verreck doch!"
player.kill
set selected to 0
set button to 5
endif

endif
end

kann sein dass die "message"-teile nich funzen weil man evtl keine message direkt nach ner messagebox aufrufen kann,aber ich denke die optionen die dir vorschwebten waren sowieso andere ;)
 
Eigentlich weiß ich gar nichts über Scripts, muss aber trotzdem eines schreiben.
Ich würde gerne ein Script auf ein Schwert packen, das zuerst mehrere Message Boxen nacheinander öffnet und danach das Schwert wie beim ganz normalen Nehmen ins Inventar des Players übergeht. Mein momentaner Skript sieht so aus:

ScriptName Blablabla

Begin OnActivate

MessageBox "Text"
MessageBox "Text"
MessageBox "Text"
MessageBox "Text"
MessageBox "Text"
MessageBox "Text"


End

Das was bei mir passiert: Nur die letzte Message Box erscheint und das Schwert bleibt da wo es ist.
Kann mir da bitte einer erklären, was mein Fehler war und wie das Skript richtig ist?

Danke schonmal im Vorraus für das Helfen eines Möchtegern-Skripters ;)
Gruß, Nirima
 
Eigentlich weiß ich gar nichts über Scripts, muss aber trotzdem eines schreiben.
Ich würde gerne ein Script auf ein Schwert packen, das zuerst mehrere Message Boxen nacheinander öffnet und danach das Schwert wie beim ganz normalen Nehmen ins Inventar des Players übergeht. Mein momentaner Skript sieht so aus:
Ich würde erstmal eine Weiter-Funktion in die Messageboxes einfügen, sprich, du brauchst eine Variable ( In deinem Fall eher 6 ) und eine If-abfrage. Außerdem musst du in deine Messagebox eine weitere Auswahlmöglichkeit einbinden, nenn sie einfach Weiter. Diese sorgt dafür, dass zuerst die erste abgespielt wird, dann, wenn der Player die If-Bedingung mit Weiter erfüllt hat, die zweite auftaucht und so weiter.

Außerdem, nur Messageboxen reichen nicht. Du brauchst eine Funktion, die dem Inventar des Spielers das Schwert hinzufügt. Ich stelle mir das etwa so vor:

Code:
scn DeinSchwertscript

short Weiter1
short Weiter2
short Weiter3
short Weiter4
short Weiter5
short Weiter6
ref Schwert

Begin On Activate
set Weiter1 to GetButtonpressed
Messagebox "Text" , "Weiter"
if Weiter1 == 0
set Weiter2 to GetButtonpressed
Messagebox "Text" , "Weiter"
if Weiter2 == 0
set Weiter3 to GetButtonpressed
Messagebox "Text" , "Weiter"
if Weiter3 == 0
set Weiter4 to GetButtonpressed
Messagebox "Text" , "Weiter"
if Weiter4 == 0
set Weiter5 to GetButtonpressed
Messagebox "Text , "Weiter"
if Weiter5 == 0
set Weiter6 to GetButtonpressed
Messagebox "Text" , "Weiter"
if Weiter6 == 0
set Schwert to getself
player.additem SchwertID
Schwert.disable
endif
end
Kann sein, dass der Script auch mit einer Weiter-Variable funktioniert, aber so müsste er auch klappen, wenn nicht, trau dich ruhig, dich bei mir zu beschweren.
 
Das wird so nicht funktionieren, da eine GetButtonPressed-Abfrage erst nach dem Drücken eines Knopfes eine Zahl über -1 zurückgibt. Aber da ein OnActivate nur einen Frame lang ausgeführt wird kann das nicht klappen. Eventuell könnte man einen Return-Befehl einführen, jedoch schlage ich eine einfachere Methode vor:

Code:
scn Schwertscript

short doonce

Begin OnActivate
if doonce == 0
set doonce to 1
activate
endif
end

Begin GameMode
if doonce == 0 || doonce == 7
return
if doonce == 1
messagebox "test"
elseif doonce == 2
messagebox "test"
elseif doonce == 3
messagebox "test"
elseif doonce == 4
messagebox "test"
elseif doonce == 5
messagebox "test"
elseif doonce == 6
messagebox "test"
endif
set doonce to doonce +1
End
 
Zuletzt bearbeitet:
Ich frag jetzt mal ganz blöd, obwohl ich weiß, dass deinem Skript zu trauen ist, wieso muss die funktion "set doonce to doonce +1" nicht hinter jede If-Abfrage geklemmt werden? Funktioniert das wie eine Art Klammer, bei der jede If-Abfrage in der Klammer von dieser Funktion betroffen ist?

Und zu meinem Script:
Heißt das, ein Schachtelsystem wie dieses hier:

Code:
Begin Scripteffectstart
Set StumpfoderScharf? to GetButtonpressed
MessageBox "Stumpf oder Scharf?" , "Stumpf" , "Scharf"
if StumpfoderScharf? == 0
Set WelchesMaterial? to Getbuttonpressed
Messagebox "Welches Material?" , "Glas" , "Deadrisch"
if WelchesMaterial? == 0
Set WelcheArt? to GetButtonpressed
Messagebox "Welche Art?" , "Streitaxt" , "Streitkolben" , "Kriegsaxt"
if WelcheArt? == 0
player.additem Glasstreitaxt ( Hab die ID vergessen )
und folgende Funktionen

würde nicht funktionieren? Wenn ja, bitte anderen Lösungsansatz posten.
 
Ich hätte gerade eine Frage zu folgendem Befehl.

<Referenz>.Cast <Zauber-ID> <Ziel

Muss der Zauber <Zauber-ID> in der Zauberliste des entsprechenden NPCs sein?
 
Ich frag jetzt mal ganz blöd, obwohl ich weiß, dass deinem Skript zu trauen ist, wieso muss die funktion "set doonce to doonce +1" nicht hinter jede If-Abfrage geklemmt werden? Funktioniert das wie eine Art Klammer, bei der jede If-Abfrage in der Klammer von dieser Funktion betroffen ist?
Deine zweite Frage verstehe ich zwar nicht ganz, aber ich versuche es mal so zu erklären: Sobald die Variable doonce (eigentlich ein etwas unglücklich gewählter Name für ihre eigentliche Aufgabe, aber das soll egal sein) auf 1 gesetzt wird, wird GameMode Block ausgeführt. Dort wird dann in diesem Frame abgefragt, welchen Wert doonce hat und dementsprechend die Messagebox ausgeführt. Ganz am Ende des GameMode Blocks wird dann immer - ungeachtet welchen Wert doonce hat - die Variable um 1 erhöht. Sie ist ja nicht mehr in der If-anweisung drin. Man könnte also auch die Variable in jede If-Abfrage reinschreiben, es hätte den gleichen Effekt. Es wäre nur mehr Schreibarbeit und Fehler ließen sich schwerer entdecken.


Und zu deinem Script: Begin ScriptEffectStart wird nur einen Frame ausgeführt. Ersetze den Block einfach durch ein Begin ScriptEffectUpdate. Dieser funktioniert ähnlich wie der GameMode-Block, lediglich mit der Ausnahme, dass er nur für die Wirkdauer des Zaubers ausgeführt wird.

Grüße
 
  • Like
Reaktionen: Almalexian
Und zu deinem Script: Begin ScriptEffectStart wird nur einen Frame ausgeführt. Ersetze den Block einfach durch ein Begin ScriptEffectUpdate. Dieser funktioniert ähnlich wie der GameMode-Block, lediglich mit der Ausnahme, dass er nur für die Wirkdauer des Zaubers ausgeführt wird.
Ich will mit dem Zauber dem Spieler dauerhaft Waffen hinzufügen. Wenn der Begin-Block nur für die Wirkdauer des Zaubers ausgeführt wird, bleiben die Waffen dann trotzdem erhalten?

PS:

Ich hoffe, ich bin nicht unhöflich, aber wo hast du so gut scripten gelernt? Das bisschen, was ich weiß, hab ich mir durch n bisschen rumfragen und ein paar Tutorials selber beigebracht, aber mir scheint, du hast da irgendwas professionelleres gemacht. Wäre schön, wenn du mir nen Tipp geben könntest, wo man das lernen kann. :):flower:
 
Zuletzt bearbeitet:
Ich will mich ja nicht einmischen, aber ich habe das Skripten durch ausprobieren von Sachen, dir mir gerade einfielen, und dem Construction Set-Wiki gelernt. Vielleicht hat Gildur es so aehnlich gelernt? 8)
 
  • Like
Reaktionen: Almalexian
Ich hoffe, ich bin nicht unhöflich, aber wo hast du so gut scripten gelernt? Das bisschen, was ich weiß, hab ich mir durch n bisschen rumfragen und ein paar Tutorials selber beigebracht, aber mir scheint, du hast da irgendwas professionelleres gemacht. Wäre schön, wenn du mir nen Tipp geben könntest, wo man das lernen kann. :):flower:

Professionell habe ich es jedenfalls nirgends gemacht. :lol:
Die Grundbasis des Skriptens, also if-klauseln, Begin-End-Stukrukten und Variablen haben ich durch Tutorials gelernt. Die genaue Funktionsweise der Befehle und Begin-End-Blöcke habe ich dann immer auf dieser Seite nachgeschlagen. Und umso länger und umso mehr man skriptet, desto besser wird man auch und man eignet sich ein routinehaftes Vorgehen an.

Was zählt ist Übung.

Grüße
 
  • Like
Reaktionen: Almalexian