Problem mit If Befehl

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
Motteck
Tutorial Reader
Posts: 50
Joined: 29 Apr 2009, 21:22

Problem mit If Befehl

Post: # 74245Post Motteck
13 Aug 2009, 22:18

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...

Baelavay
PaC-DK God
Posts: 1168
Joined: 04 Jun 2006, 19:24
Contact:

Post: # 74246Post Baelavay
13 Aug 2009, 23:07

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

Code: Select all

on(enter)
  {
  Skriptzeile A
  Skriptzeile B
  Skriptzeile C
  usw.
  }
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:

Code: Select all

if_num ( benhp;0 )
{
textout (30 ; !!!VERLOREN !!!;390 ;390;2;255;0;0 )
} 
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

Code: Select all

on(enter)
  {
  Skriptzeile A
  wait(4)
  Skriptzeile B
  }
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":

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)
  }
Und ins Walkmapskript:

Code: Select all

cutscene(skript1)
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().

Motteck
Tutorial Reader
Posts: 50
Joined: 29 Apr 2009, 21:22

Post: # 74248Post Motteck
13 Aug 2009, 23:33

Danke Baelavay für deine ausführliche und schnelle antwort.
ich werd mich sofort mal dran machen. (Urlaub muss ja Sinnvoll genutzt werden) :-)

btw: so ist das doch schön in einem Forum! schnell und Kompetent! Danke!

Motteck
Tutorial Reader
Posts: 50
Joined: 29 Apr 2009, 21:22

Post: # 74251Post Motteck
14 Aug 2009, 00:34

Jo Super funzt nun. Ist mit ner cutscene viel "angenehmer" zu scripten... musste noch die wartezeiten neu ändern aber es klappt Danke!

Post Reply