39dll Problem

  • GM 7
  • Hallo Leute ich arbeite zur Zeit an einem zwischendurchprojekt und habe das Problem das das Senden bzw Empfangen von Nachrichten nicht funktioniert. zum Überblick mein Sende und Empfang Script:
    Senden:

    GML-Quellcode

    1. dll39_buffer_clear(0);
    2. dll39_write_byte(0,0);
    3. dll39_write_string(argument1,0);
    4. dll39_message_send(argument0,"",0,0);

    Empfangen:

    GML-Quellcode

    1. var s,re;
    2. while (true) {
    3. s=dll39_message_receive(argument0,0,0);
    4. if (s<=0)
    5. return ('')
    6. else
    7. {
    8. dll39_read_byte(0);
    9. re=dll39_read_string(0);
    10. return (re);
    11. }}
    Alles anzeigen


    Die namen sind anders weil ich die Extension für den GM7 verwende, daran liegts aber nicht ich habe es testweise auch schon mit den Scripts und der dll versucht.
    Ich weiß auch net was da jetz net funktioniert, das senden oder empfangen, die Verbindung zwischen den zwie Spielern ist hergestellt aber sonst tut sich nix.

    © 2008 by Teamgrill Productions
  • GML-Quellcode

    1. var s,re;
    2. while (true) {
    3. s=dll39_message_receive(argument0,0,0);
    4. if (s<=0)
    5. return ('')
    6. else
    7. {
    8. dll39_read_byte(0);
    9. re=dll39_read_string(0);
    10. return (re);
    11. }}
    Alles anzeigen


    die while schlaufe macht eigentlich genau gar nichts.. while true und dann gibts in jedem fall ein return..
    read_byte macht ebenfalls nichts.. das kannste dann genauso weglassen
    das prinzip hinter writebyte ist, dass du erst mit einem byte die message identifizierst zb writebyte(10) und du checkst dann zb if readbyte() == 10 thomas.x = readint() oder sowas...
    prinzipiell sieht das so aus:

    GML-Quellcode

    1. while (true)
    2. s = messagereceive(...);
    3. if (s<0)
    4. {
    5. break;
    6. }
    7. else
    8. {
    9. switch (readbyte())
    10. {
    11. case 0:
    12. tu das
    13. case 1:
    14. tu dies
    15. case MSGID_PLAYERSTIRBT: //optimalerweise benutzt du konstanten(alias namen), damit du noch weist, was die einzelnen nummern bedeuten
    16. instance_destroy(oPlayer);
    17. break;
    18. case MSGID_SCHUSS:
    19. schuss = instance_create(readint(),readint(),oSchuss);
    20. break;
    21. ...
    22. }
    23. }
    24. }
    Alles anzeigen
    "das war meine letzte flamewar PM an dich ."