Verschachteln von Scripts

    • GM 8

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

    • Verschachteln von Scripts

      Hallo!
      Eine kurze und knappe Frage: Kann es sein, dass das Verschachteln mehrerer Scripts nicht fehlerlos möglich ist?
      Um konkreter zu werden: Ich habe ein script, dieses führt ein weiteres aus, in welchem wiederum ein script ausgeführt wird. Soweit so gut, jedoch hört er mir nachdem durchführen des letzten scripts einfach auf, ohne in das vorherige zurückzuspringen.
      Hat jemand eine Idee woran das liegt?
      lg P.
    • Soweit ich weiss gibt es kein Limit. Bei mir gibt es Scripts die z.B: 4 andere Scripts ausführen die weiderum auf weitere Scripts zugreifen.
      Könnte es sein dass du irgendwo ein exit gesetzt hast? Oder das du irgendwo eine Schleife nutzt die abgebrochen wird?

      Wir können da erst was sagen wenn wir die jeweiligen Scriptteile sehen können.
    • Rekursive Aufrufe sind auch im Game Maker problemlos möglich. Auch wenn dies performance-technisch nicht unbedingt empfohlen ist da es einen gewissen Overhead erzeugt.
      Vieleicht liegt dein Problem bei den lokalen und globalen Variablen. Wenn Variablen nicht mit "var" extra deklariert wurden kannst du ja im untergeordneten Skript diese Variablen verändern und umgekehrt, was manchmal ungewollt ist bzw. zu seltsamen Verhalten führt.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Hier die Skripts:(leider nur als Zitat da mir safari die gml codes immer zu einzeilern macht)
      //scrInventoryItemSub(item,amount);
      //decreases the Amount of an item, on any slot containing the item.
      var slot , amount , restAmount;
      amount = argument1;
      for(slot = 0;slot != 20; slot += 1)
      {
      if (argument0 == scrInventoryGetSlotItem(slot))
      {
      restAmount = scrInventorySlotSub(slot,amount);
      if (restAmount == 0)
      {
      return 0;
      }
      else
      {
      amount = restAmount;
      }
      }
      }
      return restAmount;

      Hier aufgerufen wird scrInventorySlotSub(slot,amount):
      //scrInventorySlotSub(Slot,amount);
      //decreases the amount of an item on slot
      var restAmount;
      restAmount = 0
      if (!scrInventoryGetSlotEmpty(argument0))
      {
      if(scrInventoryGetSlotAmount(argument0) > argument1)
      {
      ds_grid_set(global.inventorySlots,argument0,1,scrInventoryGetSlotAmount(argument0) - argument1);
      return 0;
      }
      else if(scrInventoryGetSlotAmount(argument0) == argument1)
      {
      scrInventorySlotClear(argument0);
      return 0;
      }
      else
      {
      restAmount = argument1 - scrInventoryGetSlotAmount(argument0);
      scrInventorySlotClear(argument0);
      return restAmount;
      }
      }

      und hieraus wird scrInventorySlotClear(argument0) aufgerufen:
      //scrInventorySlotClear(slot);
      ds_grid_set(global.inventorySlots,argument0,0,-1);
      ds_grid_set(global.onventorySlots,argument0,1,0);

      Nach diesem Code sollte er eigentlich zum vorherigen zurückkehren, dies tut er aber nicht(durch show_message einsätze geprüft!)
    • Hast du aus irgendeinem Grund die Fehler-benachrichtigungen abgeschaltet? Es kann sein dass im //scrInventorySlotClear Skript, ein schwerwiegender Fehler passiert. Dann beendet der Game Maker oftmals das gesamte Event oder Skript und macht merkwürdige Sachen.
      Ansonsten versuch mal die erste Debugging Taktik anzuwenden: Alles Schritt für Schritt entfernen was nicht gebraucht wird. Zum Beispiel die ganzen If-Abfragen.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • nein, hab ich nicht deaktiviert.
      Wieso brauch ich die If abfragen nicht? 8|
      EDIT: bzw. kann es nicht an den if's liegen. Es muss an scrInventorySlotClear liegen, denn davor führt er ein show_message() noch aus, direkt danach nicht.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Partik ()

    • So meinte ich das nicht. Halt nur alles Entfernen was nicht direkt mit dem Problem zutun hat. So kann man langsam dem Problem auf die Schliche kommen...
      Ohne Testprojekt ist es etwas umständlich sih in dein Projekt einzudenken, sorry.

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Wie darf ich das Testprojekt anrichten :) ?
      Ne ma im Ernst, wie stellst du dir ein testprojekt vor? Einfach alle das Inventar betreffenden scripts zusammen in eine gmk geschmissen?
      Genanntes sei hier gegeben...
      Dateien
      • testprojekt.zip

        (11,93 kB, 219 mal heruntergeladen, zuletzt: )
    • Lecker :D
      -_-' nicht wirklich... eher etwas was nach möglichkeiten so abläuft: Programm starten --> Problem/Fehler wird offensichtlich. Also das Projekt soweit abspecken und ausschlachten bis _ausschließlich_ der Teil alleine bleibt der für das auftreten des Fehlers unablässig ist; kein anderes Skript, kein Anderer Code usw. Also das wär natürlich der Idealfall. Das ist nicht immer zu realiesieren, aber bei dieser Prozedur stößt man sehr häufig schon selbst auf die Ursache des Problems!
      Und dann kann man leicht sehen und rumprobieren um das Problem zu lösen...

      So ist das leider nicht zu viel zu gebrauchen da wir doch nicht wissen wie das Zeug in deinem Spiel implementiert ist :/

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DragonGamer ()

    • Das ist es ja: bis jetzt noch garnicht!
      ich habe diese Codes ohne jegliche implementierung geschrieben, bis jetzt habe ich die codes immer per debug console ausgeführt. und wenn ich nun über 99 items hinzufüge, verteilen sich diese auf 2 slots. wenn ich aber versuche die gleiche anzahl wieder zu löschen, löscht er nur einen slot. das liegt in den von mir vorhin als zitat angehängten codes. genau an der Stelle, an der der code scrInventorySlotSub einen größeren amount als 99 hat und er den code scrInventorySlotClear ausführt, bleibt er hängen. nicht insofern, das das spiel freezed, sonder dass er den code nicht weiter ausführt. es MUSS folglich am code scrInventorySlotClear liege, doch inwiefern erschließt sich mir nicht...
    • Okey.. letzter Versuch für heute... Kann es sein dass es an dem (scheinbar) Tippfehler da liegt?

      GML-Quellcode

      1. ds_grid_set(global.onventorySlots,argument0,1,0);
      anstelle von

      GML-Quellcode

      1. ...inventorySlots...

      *gähn* Gute Nacht...

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Den hab ich auch gerade bemekrt.....Teste...
      EDIT: Okay, das wars!(DANKE DRAGON!) ABER:
      Warum gibt der GM mir an dieser Stelle keinen Fehler aus? Error Messages sind auf ON, sie werden in keine .log file geschrieben, uninitialised variables werden nicht auf 0 gesetzt, und error messages werden auch nicht automatisch aborted....?!
    • Partik schrieb:

      Den hab ich auch gerade bemekrt.....Teste...
      EDIT: Okay, das wars!(DANKE DRAGON!) ABER:
      Warum gibt der GM mir an dieser Stelle keinen Fehler aus? Error Messages sind auf ON, sie werden in keine .log file geschrieben, uninitialised variables werden nicht auf 0 gesetzt, und error messages werden auch nicht automatisch aborted....?!

      Das ist scheinbar ein doofer Bug im GM. Ich hätte mich dran erinnern müssen >__< hatte vor etwa nem Jahr ähnliche Probleme. Bei Datenstrukturen kommen manchmal merkwürdige Fehlermeldungen (die nicht mal die Zeile angeben... debugge dann mal ein ellenlanges Skript das ein halbes Dutzend Datenstrukturen und Dateien verwendet -.- ) oder es kommt garkeine Meldung und das Skript bricht einfach ab.
      Vieleicht hat das irgendwas mit der Implementation von solchen Strukteren in dem GM zutun oder ist ist einfach ein dummer Fehler der Entwickler. Du kannst ja eine bug-Meldung abschicken. Dank Studio kommen wohl GM 8.1 Updates nicht allzuschnell aber schaden wird es nicht...

      Gut das das Problem jetz gelöst ist :) Denk in Zukunft dran bei Datenstrukturen (und bei text-Dateien) besonders vorsichtig mit dem Tippen zu sein xP

      Willst du auf diese Drachen und -eier klicken?
      Sie werden sich freuen ;)
    • Da ich nur GM8 besitze, wollen die mir mit meinem problem nicht helfen, könnte mal jemand nachsehen, ob er das gleiche problem im gm8.1 hat? Also, ob der GM inexistente variablen NICHT als Fehlermeldung ausgibt.
      Und dann bitte dementsprechend ein Ticket posten, damit die Nachwelt etwas davon hat :)