39dll: Objekt erstellen

  • GM 8

    39dll: Objekt erstellen

    Wie kann man mit der 39dll ein Objekt erstellen, das bei allen Spielern created wird?
    Ich habe einen Server und einen Client, in meinem Client soll ein Objekt gemacht werden wenn man die Maustaste drückt und in den anderen dann auch.
    Wie geht das? Ich schick euch mal mein Spiel, ihr müsst dann beim Maus Event von Objekt Self schauen, dort soll das Objekt obj_Bullet1 gemacht werden.

    EDIT: Hab die 39dll vergessen.
    Dateien
    Twitter: @BytingGames

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „iks deh“ ()

    Du übergibst allen vorhanden Spielern eine Information, das eine Bullet an x, y mit direction und speed
    erstellt wurde. Die Clients führen das dann aus, fertig ist der Kuchen. Ist aber nicht so optimal, und kann zu kleinen Fehlern führen.
    :saint:
    Ja ok aber wie macht man das mit den Informationen überbringen?
    <Packet ID>
    <Daten>

    Absenden.

    Die Packet ID ist dafür da das der Empfänger später mit den Daten wieder was anfangen kann. Du hast ja da eine tolle Engine gefunden, da kannste ja deinen eignen Code einbauen.

    Zum Beispiel könnte Bulletcreate soaussehen von der Data her:
    <int> x
    <int> y
    <short> direction
    <short> speed
    (Wobei da noch bytes eingespart werden können)
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
    Also gut ich versuchs mal, das ist doch der Code um daten vom Client zu verschicken:

    GML-Quellcode

    1. clearbuffer();
    2. writebyte(5);//Ist das die ID womit man beim Server entscheiden kann was gemacht werden soll?
    3. writebyte(global.myid);
    4. writeshort(x)
    5. writeshort(y)
    6. writeshort(richtung)
    7. sendmessage(global.clienttcp);//was bringt hier global.clienttcp?

    Hier sendet er jetzt doch 5 Daten, könnte ich jetzt so einen Script zum versenden benutzen? Ich habs ja schon soähnlich probiert, aber vielleicht könnt ihr die Fragen im Code ja beantworten.
    Twitter: @BytingGames
    clearbuffer() cleart den Buffer. In den Buffer werden per write oder read Daten geschrieben oder gelesen. Diesen Buffer kann man dann empfangen (receivemessage) oder senden (sendmessage). Damit kann man auch Datein einlesen und MD5-Hashes bilden.

    Der erste Byte ist bei den meisten Online-Spielen die Packet ID, die Daten müssen ja später wieder zugeordnet werden. Man sollte bei der 39dll wissen wie man mit Datentypen umgeht (wenn du einfach alles als double sendest bringt das nichts).

    sendmessage(global.clienttcp);//was bringt hier global.clienttcp?
    sendmessage versendet den Buffer über TCP oder UDP, in dem Fall TCP dort gibt es eine Verbindung. global.clienttcp ist dann die Socket-ID.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
    Danke!!! Yaay es hat funktioniert, außer dass der Server immer an alle die Nachricht zurückschickt,
    also der Player der schießt, schießt doppelt, weil er sein eigenes Signal wieder empfängt.
    Wie kann ich das beheben Hier der Code zum Senden vom Server:
    Spoiler anzeigen

    GML-Quellcode

    1. //vars
    2. var msgSize,msgId;
    3. //check msgS
    4. msgSize = receivemessage(Server.serverudp)
    5. if msgSize<=0 {msgSize = receivemessage(tcp)}
    6. if msgSize<=0 break;
    7. msgId = readbyte();
    8. /*Switching bettwin msgS recived*/
    9. switch(msgId)
    10. {
    11. case 5:
    12. //Create Bullet
    13. var player, value, X, Y, D;
    14. value = readbyte()
    15. player = global.players[value]
    16. X = readshort()
    17. Y = readshort()
    18. D = readshort()
    19. //Sending
    20. clearbuffer()
    21. writebyte(10)
    22. writebyte(value)
    23. ///////////////////////////////////////////////////////
    24. writeshort(X)
    25. writeshort(Y)
    26. writeshort(D)
    27. //////////////////////////////////////////////////////////////////////
    28. //Send to client
    29. with(Client)
    30. {
    31. sendmessage(tcp)
    32. }
    33. break
    34. }

    Twitter: @BytingGames
    Ok Danke, jetzt habe ich aber das nächste problem...
    Ich habe ja jetzt Spieler die bullets schießen können, jetzt habe ich jedem Schuss eine ID gegeben die zu dem Spieler gehört der sie abgefeuert hat (global.myid).
    Wenn der Schuss einen Spieler trifft soll er testen ob die IDs ungleich sind, wenn ja wird der Spieler getroffen.

    Das funktioniert bei mir ja dann auch beim Self Objekt,
    aber ich weiß nicht wie ich die IDs der Other Objekte abrufen kann, oder ob die überhaupt eine haben,
    ich meine ich muss ja irgendwie wissen welcher Player(Ingame) zu welchem Spieler(Outgame) gehört.
    Twitter: @BytingGames
  • Benutzer online 1

    1 Besucher

  • Tags