Spiel hängt bei Script

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Spiel hängt bei Script

      Ich habe ein Script geschrieben, welches den Spieler davon abhalten soll die Stadt zu verlassen und ihm gegebenenfalls ein Pokemon zu geben. Das Script hat funktioniert, bevor ich versucht habe Bewegungen mit einzubauen. Wenn es jetzt aktiviert wird hängt sich das Spiel auf. Habe mal versucht alles was ich neu dazu geschrieben habe zu markieren (neu -> = von; <- neu = bis). Schon mal danke im vorraus. :D

      Quellcode

      1. #dynamic 0x800000
      2. #org @start
      3. checkflag 200
      4. if 0x1 goto @aus '<neu>
      5. lock
      6. spriteface 0x1 0x3 ' neu ->
      7. spriteface 0xFF 0x2 '<- neu
      8. msgbox @talk0 0x6
      9. msgbox @talk1 0x5
      10. compare LASTRESULT 0x1
      11. if 0x1 goto @yes
      12. msgbox @talk2 0x6
      13. applymovement 0x1 @m2 'neu ->
      14. waitmovement 0x1
      15. applymovement 0xFF @m1
      16. applymovement 0x1 @m3
      17. waitmovement 0x1 '<-neu
      18. release
      19. end
      20. #org @yes
      21. givepokemon 0x19 0x5 0xD 0x0 0x0 0x0
      22. setflag 0x828
      23. msgbox @talk3 0x6
      24. msgbox @talk4 0x6
      25. setflag 0x200
      26. release
      27. end
      28. #org @aus 'neu ->
      29. end '<-neu
      30. #org @talk0
      31. = Du besitzt noch kein Pokémon oder?
      32. #org @talk1
      33. = Willst du eines von meinen haben?
      34. #org @talk2
      35. = Das ist in Ordnung, aber ich kann\ndich nicht durchlassen.\pIm hohen Gras gibt es viele\ngefährliche Pokemon!
      36. #org @talk3
      37. = [orange_fr][player] erhält ein Pikachu.
      38. #org @talk4
      39. = [player], bitte pass gut auf\nPikachu auf.\p!!!\pMir ist eingefallen,\ndass ich [rival] auch ein\lPokémon gegeben habe. Vielleicht\ltrefft ihr euch ja. Dann solltet\lihr unbedingt einmal gegeneinander\lkämpfen!
      40. #org @m1 'neu ->
      41. #raw 0x0
      42. #raw 0x10
      43. #raw 0xFE
      44. #org @m2
      45. #raw 0x2
      46. #raw 0x11
      47. #raw 0x3
      48. #raw 0x13
      49. #raw 0x0
      50. #raw 0xFE
      51. #org @m3
      52. #raw 0x10
      53. #raw 0x2
      54. #raw 0x12
      55. #raw 0x3
      56. #raw 0xFE ' <- neu
      Alles anzeigen
    • Mehrere Dinge, die mir so spontan einfallen:

      Spriteface tut in deinem Fall glaube ich ein paar ungewünschte Seiteneffekte erzeugen, gerade weil der Spieler ja ohnehin ein bisschen mehr ist als ein NPC, solltest du hier vllt lieber auch ein applymovement verwenden.

      Wenn du ohnehin auf alle movement executions warten willst, empfielt sich ein waitmovement 0, in Zeile 20 wartest du nicht auf das Ende des Spieler Movements.

      Textboxen haben Steuerbefehle, du brauchst also in den meisten Fällen nie zwei Textboxen hintereinander auszuführen. Mit \l erzeugst du einen fortlaufenden Text, und mit \p erzeugst du eine ganz neue Box.

      checkflag 200 prüft auf Flag 200, unten setzt du allerdings Flag 0x200 ("Hex zwei null null") was natürlich eine ganz andere Flag ist, vermutlich willst du auch auf Flag 0x200 prüfen. Oder aber, da das ganze ja vermute ich ein Scriptfeld ist, willst vermutlich überhaupt die Variable des Scripts so setzen, dass du ihn nachdem das gewünschte Ereignis eingetreten ist, einfach komplett deaktivieren kannst. Ansonsten hast du, glaube ich, den ungewünschten Seiteneffekt, dass das Spiel für einen Frame den "end" Befehl ausführen muss, und der Spieler dabei seine Laufanimation abbricht, auf alle Fälle ist es aber schöner, die Variable zu verwenden.

      Der Bug per se könnte den Grund haben, dass spriteface Dinge tut, die du nicht willst, vorallem auf den 0xFF PC angewandt, oder aber du hast die Variable des Scriptfeldes nicht richtig gesetzt, dann passiert sowas auch. Das ist recht einfach zu überprüfen, indem du einfach einen Script executen lässt. der nur eine debug message ausgibt.

      ~Sturmvogel
      Wandering on Horizon Road
    • Movements müssten vielleicht noch angepasst werden. Je nachdem was die Person für eine Bewegung machen soll.
      Das Script müsste aber einem Scriptfeld hinzugefügt werden! Setvar 4070 nicht vergessen! Wenn du den Script auch der Person geben möchtest, dann müsste man den Script etwas abändern!

      Spoiler anzeigen
      #dynamic 0x800000
      #org @main
      lock
      applymovement 0x1 @move
      waitmovement 0x0
      msgbox @text
      callstd 0x6
      applymovement 0xFF @move2
      waitmovement 0x0
      msgbox @text2
      callstd 0x5
      Compare LASTRESULT 0x1
      if b_true goto @ja
      compare LASTRESULT 0x0
      if b_true goto @nein

      #org @ja
      givepokemon 0x19 0x5 0xD 0x0 0x0 0x0
      setflag 0x828
      fanfare 0x13E
      msgbox @text3
      callstd 0x6
      waitfanfare
      msgbox @text4
      callstd 0x6
      setvar 0x4070 0x1
      release
      end

      #org @nein
      msgbox @text5
      callstd 0x6
      applymovement 0xFF @move3
      waitmovement 0x0
      release
      end

      #org @text
      = Du besitzt noch kein Pokémon oder?

      #org @text2
      = Willst du eines von meinen haben?

      #org @text3
      = [orange_fr][player] erhält ein Pikachu.

      #org @text4
      = [player], bitte pass gut auf\nPikachu auf.\p!!!\pMir ist eingefallen,\ndass ich [rival] auch ein\lPokémon gegeben habe. Vielleicht\ltrefft ihr euch ja. Dann solltet\lihr unbedingt einmal gegeneinander\lkämpfen!

      #org @text5
      = Das ist in Ordnung, aber ich kann\ndich nicht durchlassen.\pIm hohen Gras gibt es viele\ngefährliche Pokemon!

      #org @move
      #raw 0x4A
      #raw 0xFE

      #org @move2
      #raw 0x02
      #raw 0xFE

      #org @move3
      #raw 0x10
      #raw 0xFE
      #GTI

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von COD-MW3 ()

    • Die Fehlermeldung kommt deshalb, weil ich meine Scripte für die Version 1.0.0 von XSE schreibe.
      Also anstatt:
      "msgbox @text
      callstd 0x6"

      muss man folgendes schreiben

      "msgbox @text 0x6"
      Der untenstehende Script sollte nun funktionieren ;)
      Spoiler anzeigen

      #dynamic 0x800000
      #org @main
      lock
      applymovement 0x1 @move
      waitmovement 0x0
      msgbox @text 0x6
      applymovement 0xFF @move2
      waitmovement 0x0
      msgbox @text2 0x5
      Compare LASTRESULT 0x1
      if b_true goto @ja
      compare LASTRESULT 0x0
      if b_true goto @nein


      #org @ja
      givepokemon 0x19 0x5 0xD 0x0 0x0 0x0
      setflag 0x828
      fanfare 0x13E
      msgbox @text3 0x6
      waitfanfare
      msgbox @text4 0x6
      setvar 0x4070 0x1
      release
      end


      #org @nein
      msgbox @text5 0x6
      applymovement 0xFF @move3
      waitmovement 0x0
      release
      end


      #org @text
      = Du besitzt noch kein Pokémon oder?


      #org @text2
      = Willst du eines von meinen haben?


      #org @text3
      = [player] erhält ein Pikachu.


      #org @text4
      = [player], bitte pass gut auf\nPikachu auf.\p!!!\pMir ist eingefallen,\ndass ich [rival] auch ein\lPokémon gegeben habe. Vielleicht\ltrefft ihr euch ja. Dann solltet\lihr unbedingt einmal gegeneinander\lkämpfen!


      #org @text5
      = Das ist in Ordnung, aber ich kann\ndich nicht durchlassen.\pIm hohen Gras gibt es viele\ngefährliche Pokemon!


      #org @move
      #raw 0x4A
      #raw 0xFE


      #org @move2
      #raw 0x02
      #raw 0xFE


      #org @move3
      #raw 0x10
      #raw 0xFE


      Der Befehl "setvar 0xFLAGNUMMER 0x1" ist in etwa das gleiche wie Setflag, nur mit dem Unterschied dass beim erneuten betreten des Scriptfeldes das Script nicht angesprochen wird, da die Flag gesetzt wurde. Würdest du hier mit checkflag und setflag arbeiten, dann würde jedesmal wenn du über das Scriptfeld läufst das script abgefragt und bei bereits gesetzter Flag das Script abbrechen.
      Ich hoffe mal ich habe das etwas verständlich erklärt.. Ansonsten frag einfach ;)
      #GTI