Moin Moin
Hab ein kleines Problem mit einem If Befehl,bin auch nicht so fit im scripten.
Ist schwer zu erklären... ich versuchs mal.
Ist es möglich in einem If Befehl einen anderen If befehl zeitversetzt abzufragen?
Das Walkmap Script:
on (enter)
if_num (hp1 ;10 )
{
timer (2)
setobj (ben;1)
timer (4)
setobj (ben;0)
timer (3)
textout (22 ;Kokosnuss Hagel -20 ;390 ;390;3;255;0;0 )
timer (3)
setobj (baummp;0 )
timer (3)
setnum (mp1 ;[mp1]-10 )
timer (3)
startparticles ()
timer (5)
stopparticles ()
timer (4,5)
texthide (22)
timer (4,5)
enablemouse (true)
timer (3)
setnum (benhp ;[benhp]-20 )
timer (3,5)
setobj (benhp;0 )
timer (6)
if_num ( benhp;0 )
{
textout (30 ; !!!VERLOREN !!!;390 ;390;2;255;0;0 )
}
}
also das textout !!!Verloren!!! soll 6 Sek. nachdem das setnum (benhp ;[benhp]-20 ) auf null gesetzt wird kommen...
vielleicht versteht mich einer danke schonmal...
Problem mit If Befehl
Hi Motteck.
Man kann beliebig viele if_s ineinander verschachteln.
Zu deinem Skript muss ich aber noch ein paar Dinge erklären. Zunächst einmal hat in einem Walkmapskript kein on(enter) zu stehen, das gehört nur ins Raumskript. Dadurch wird ein Ereignis eben dann ausgeführt, wenn der Raum betreten wird. Walkmapskripte hingegen werden von sich aus schon immer automatisch einmal ausgeführt, sobald die Walkmapkachel vom fokusierten Charakter betreten wird. Ok, also on(enter) weg, wenn das Skript in die Walkmapkachel soll.
Aber angenommen, das stünde im Raumskript, dann müsstest du noch durch geschweifte Klammern anzeigen, welche Skriptzeilen denn nun zum on(enter) gehören sollen. Die allgemeine Form wäre
Ausnahmefall: Wenn nur eine Zeile unter on(enter) stehen würde, also bspw. nur Skriptzeile A, dann wären die geschweiften Klammern für diese eine Zeile nicht notwendig.
Entsprechend sind die { und } in folgenden Zeilen überflüssig:
Und jetzt zum Zeitversetzten: Zwar führen timer() die Zeitverzögerung in jeglichen Skripten aus, aber in der Regel sind Cutscenes (also separat ausgeführte Skripte) notwendig, wenn die Skriptzeilen nicht ununterbrochen abgearbeitet werden sollen. Das gilt besonders für den Befehl wait(). Würdest du zum Beispiel schreiben
dann würde direkt nach Skriptzeile A die Skriptzeile B ausgeführt werden, ohne 4 Sekunden zu warten. Deshalb müsstest du entweder die 3 Zeilen in ein eigenes Skript schreiben und dann per cutscene(Name der Cutscene) ausführen oder du könntest eine Cutscene simulieren, indem du minicut() vor Skriptzeile A schreibst.
In deinem konkreten Fall rate ich dir, ein Skript zu erstellen und das was du vor hast nochmal mit wait() zu versuchen. Ich glaube, dass du das was du vor hast bekommst, wenn du die timer() durch wait() ersetzt und die Zahlenangaben aktualisierst. So wie das da jetzt steht, beziehen sich die Angaben im timer() nämlich alle auf den Startpunkt und werden nicht nacheinander abgearbeitet sondern gleichzeitig.
Wenn du alles in ein neues Skript kopiert hast und die timer() ersetzt hast, schreibst du ins Walkmapskript nur noch cutscene(Name der Cutscene).
Falls das noch nicht klar war, hier mein Skriptvorschlag:
In die Cutscene "skript1":
Und ins Walkmapskript:
Die Alternative, um das Skript im Cutscenemodus auszuführen, ist wie gesagt, du lässt die Skriptzeilen im Walkmapskript drin und schreibst als erste Zeile minicut().
Man kann beliebig viele if_s ineinander verschachteln.
Zu deinem Skript muss ich aber noch ein paar Dinge erklären. Zunächst einmal hat in einem Walkmapskript kein on(enter) zu stehen, das gehört nur ins Raumskript. Dadurch wird ein Ereignis eben dann ausgeführt, wenn der Raum betreten wird. Walkmapskripte hingegen werden von sich aus schon immer automatisch einmal ausgeführt, sobald die Walkmapkachel vom fokusierten Charakter betreten wird. Ok, also on(enter) weg, wenn das Skript in die Walkmapkachel soll.
Aber angenommen, das stünde im Raumskript, dann müsstest du noch durch geschweifte Klammern anzeigen, welche Skriptzeilen denn nun zum on(enter) gehören sollen. Die allgemeine Form wäre
Code: Select all
on(enter)
{
Skriptzeile A
Skriptzeile B
Skriptzeile C
usw.
}
Entsprechend sind die { und } in folgenden Zeilen überflüssig:
Code: Select all
if_num ( benhp;0 )
{
textout (30 ; !!!VERLOREN !!!;390 ;390;2;255;0;0 )
}
Code: Select all
on(enter)
{
Skriptzeile A
wait(4)
Skriptzeile B
}
In deinem konkreten Fall rate ich dir, ein Skript zu erstellen und das was du vor hast nochmal mit wait() zu versuchen. Ich glaube, dass du das was du vor hast bekommst, wenn du die timer() durch wait() ersetzt und die Zahlenangaben aktualisierst. So wie das da jetzt steht, beziehen sich die Angaben im timer() nämlich alle auf den Startpunkt und werden nicht nacheinander abgearbeitet sondern gleichzeitig.
Wenn du alles in ein neues Skript kopiert hast und die timer() ersetzt hast, schreibst du ins Walkmapskript nur noch cutscene(Name der Cutscene).
Falls das noch nicht klar war, hier mein Skriptvorschlag:
In die Cutscene "skript1":
Code: Select all
if_num (hp1;10)
{
wait(2)
setobj(ben;1)
wait(4)
setobj(ben;0)
wait(3)
textout(22;Kokosnuss Hagel -20;390;390;3;255;0;0)
wait(3)
setobj(baummp;0)
wait(3)
setnum(mp1;[mp1]-10)
wait(3)
startparticles()
wait(5)
stopparticles()
wait(4,5)
texthide(22)
wait(4,5)
enablemouse(true)
wait(3)
setnum(benhp;[benhp]-20)
wait(3,5)
setobj(benhp;0)
wait(6)
if_num(benhp;0)
textout(30;!!!VERLOREN !!!;390;390;2;255;0;0)
}
Code: Select all
cutscene(skript1)