File-Problem

  • also, ... ich brauche eure hilfe! Ich versuche zwei Programme zu machen, die mithilfe einer Datei kommunizieren (Hauptspiel und Inventar), und ums kurz zu machen, hier sind die scripts:

    scr_inventar_init

    GML-Quellcode

    1. {
    2. global.inv_file = file_text_open_write('inv');
    3. file_text_write_real(global.inv_file,0);
    4. file_text_write_real(global.inv_file,0);
    5. file_text_write_real(global.inv_file,0);
    6. file_text_write_real(global.inv_file,0);
    7. file_text_write_real(global.inv_file,0);
    8. file_text_write_real(global.inv_file,0);
    9. file_text_close(global.inv_file);
    10. }

    scr_inventar_take

    GML-Quellcode

    1. {
    2. global.inv_file = file_text_open_read('inv');
    3. repeat(6)
    4. {
    5. if (file_text_read_real(global.inv_file) = 0)
    6. {
    7. file_text_close(global.inv_file);
    8. global.inv_file = file_text_open_write('inv');
    9. file_text_write_real(global.inv_file,argument0);
    10. instance_destroy();
    11. file_text_close(global.inv_file);
    12. exit;
    13. }
    14. }
    15. file_text_close(global.inv_file);
    16. }
    Alles anzeigen

    und scr_inventar_close

    GML-Quellcode

    1. {
    2. file_delete('inv');
    3. }


    siehe Anhang für Fehlermeldung

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

  • ok, machen wir mal schritt für schritt:

    nachdem du scr_inventar_init ausgeführt hast stehen in der Datei 6 Nullen mit Leerzeichen getrennt?

    wenn du danach scr_inventar_take ausführst müsstes beim ersten mal noch gehen, danach steht in der Datei nur noch eine Zahl.

    Danach führt scr_inventar_take zu diesem Fehler, oder?

    Beschreib mal genau was du nacheinander gemacht hast.
  • das problem liegt im script scr_inventar_take. ich bin mir da aber nicht ganz sicher:

    1. das script beginnt und liest liest die erste zeile als zahl aus. in deinem fall 000000, nicht mit lehrzeilen oder umbrüchen getrennt, was der GM als 0 interpretiert.

    2. die bedingung ist erfüllt, die datei wird geschlossen, mit schreibberechtigung wieder aufgemacht und 000000 durch argument0 ersetzt. das script "merkt" sich den instance_destroy befehl, da es deinen code noch 5 mal ausführen soll. danch wird die datei geschlossen.

    3. der 2te duchlauf beginnt, jedoch ist die datei nicht mehr offen, da der befehl dafür vor der repeat schleife steht. da du aber global.inv_file definiert hast versucht der GM an der definierten datei (allerdings mit schreibbereichtigung) herumzufurwerken.

    jedoch bin ich mir wie gesagt nicht sicher, denn eigentlich müsste in der error-message dann stehen "file not opend/ready for reading" oder sowas.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Hm, stimmt. Woran könnte das bloß liegen...

    Edit: Hab das mal zurückverfolgt. Das liegt an dem Problem, dass der Game Maker zwar mit der regionalen Dezimaltrennung schreibt, aber nur mit der englischen liest. Ist ein Bug.
    D.h. deine Zahlen werden mit Komma geschrieben, beim Lesen will er aber einen Punkt als Dezimaltrenner haben und erkennt Zahlen mit Komma nicht als Zahlen.

    Arbeite am besten mit den String Schreibe- und Lesefunktionen und wandle Zahlen beim Schreiben in Strings und beim Lesen wieder in Reals um.

    GML-Quellcode

    1. {
    2. global.inv_file = file_text_open_write('inv.txt');
    3. file_text_write_string(global.inv_file,string(0));
    4. file_text_write_string(global.inv_file,string(0));
    5. file_text_write_string(global.inv_file,string(0));
    6. file_text_write_string(global.inv_file,string(0));
    7. file_text_write_string(global.inv_file,string(0));
    8. file_text_write_string(global.inv_file,string(0));
    9. file_text_close(global.inv_file);
    10. }


    GML-Quellcode

    1. {
    2. global.inv_file = file_text_open_read('inv.txt');
    3. repeat(6)
    4. {
    5. if (real(file_text_read_string(global.inv_file)) = 0)
    6. {
    7. file_text_close(global.inv_file);
    8. global.inv_file = file_text_open_write('inv');
    9. file_text_write_string(global.inv_file,string(argument0));
    10. instance_destroy();
    11. file_text_close(global.inv_file);
    12. exit;
    13. }
    14. }
    15. file_text_close(global.inv_file);
    16. }
    Alles anzeigen
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • äh tschuldigung, ich habs anders gemeint, ich hab scr_inventar_take mal umgeändert:

    GML-Quellcode

    1. {
    2. var pos,_pos,inv;
    3. global.inv_file = file_text_open_read('inv');
    4. inv[0] = file_text_read_string(global.inv_file);
    5. file_text_readln(global.inv_file);
    6. inv[1] = file_text_read_string(global.inv_file);
    7. file_text_readln(global.inv_file);
    8. inv[2] = file_text_read_string(global.inv_file);
    9. file_text_readln(global.inv_file);
    10. inv[3] = file_text_read_string(global.inv_file);
    11. file_text_readln(global.inv_file);
    12. inv[4] = file_text_read_string(global.inv_file);
    13. file_text_readln(global.inv_file);
    14. inv[5] = file_text_read_string(global.inv_file);
    15. file_text_close(global.inv_file);
    16. global.inv_file = file_text_open_read('inv');
    17. pos = 0;
    18. repeat(6)
    19. {
    20. if (file_text_read_string(global.inv_file) = '0')
    21. {
    22. file_text_close(global.inv_file);
    23. global.inv_file = file_text_open_write('inv');
    24. _pos = 0;
    25. repeat(pos)
    26. {
    27. file_text_write_string(global.inv_file,inv[_pos]);
    28. file_text_writeln(global.inv_file);
    29. _pos += 1;
    30. }
    31. file_text_write_string(global.inv_file,string(argument0));
    32. file_text_writeln(global.inv_file);
    33. repeat(5-pos)
    34. {
    35. file_text_write_string(global.inv_file,inv[_pos]);
    36. file_text_writeln(global.inv_file);
    37. _pos += 1;
    38. }
    39. instance_destroy();
    40. file_text_close(global.inv_file);
    41. exit;
    42. }
    43. file_text_readln(global.inv_file);
    44. pos += 1;
    45. }
    46. file_text_close(global.inv_file);
    47. }
    Alles anzeigen


    ... nur etwas fuktioniert nicht... (keine Fehlermeldung)

    EDIT: also das zweite Item wird nicht aufgehoben... :(
    EDIT2: achja, die Datei sieht so aus:

    Quellcode

    1. 20
    2. 2
    3. 0
    4. 0
    5. 0
    6. 0

    EDIT3: hab ein paar Fehler ausgebessert :D, funzt immer noch nicht
    EDIT4: hab was vergessen ^^

    JUHHHUUUUUUUU! es funktioniert!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von copyboy ()

  • Benutzer online 3

    3 Besucher