Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi MMOG Realisieren (https://www.delphipraxis.net/150736-mmog-realisieren.html)

danu1104 25. Apr 2010 12:58


MMOG Realisieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im anhang habe ich was reingetant, es ist eine Art Tutorial / Demo wie man ein MMOG übers netzwerk mit glscene Realisiert.

Ich habe nur das Problem das ich nicht weiss wie man mit Byte umgeht, und deswegen wollte ich mir das mal erklären lassen.

Ich möchte es lernen aber kann es mir immoment Selber nicht erklären.

zb (Server):

Delphi-Quellcode:
procedure pSay();
var
  A:Array of byte;
begin
//
end;
Client:

Delphi-Quellcode:
procedure TFMain.Say(A: array of byte);
begin
 //
end;
Beide functionen sind leer von haus aus, ich habe kein plan was da rein sollte.
Bitte helft mir das zu verstehen, danke euch :)

Luckie 25. Apr 2010 13:02

Re: MMOG Realisieren
 
Zitat:

Zitat von danu1104
Ich habe nur das Problem das ich nicht weiss wie man mit Byte umgeht, und deswegen wollte ich mir das mal erklären lassen.

Was soll das heißen? Byte ist ein ganz normaler Ganzzahldatentyp wie Integer und Cardinal auch mit einem Wertebereich von 0 bis 255.

Was möchtest du also machen? Wenn du das rausgefunden hast, gib bitte deinem Thread einen aussagekräftigen Titel, der etwas zu deinem Problem aussagt.

danu1104 25. Apr 2010 13:14

Re: MMOG Realisieren
 
Ich habe versucht mit hilfe eines Chats es zu verstehen, hat auch geklappt

Delphi-Quellcode:
type TChatNachricht = Record
        Nickname: string[255];
        Text:    string[255]
      end;

var Nachricht: TChatNachricht;
begin
  Nachricht.NickName := 'sadsad';
  Nachricht.Text := 'Willkommen';
  Socket.SendBuf (Nachricht, SizeOf(Nachricht));
end;

var Nachricht: TChatNachricht;
begin
  Socket.ReceiveBuf (Nachricht, SizeOf(Nachricht));

  Nachricht.Lines.Add (Nachricht.Nickname + ': ' + Nachricht.Text);
end;

Aber die Demo verstehe ich nicht, wie zb er die Packete Sendet . Ich sehe in jeder function nur einen Move(); das bringt mich etwas durcheinander

Delphi-Quellcode:
 
// Array vom server werden dann wohl in Targ ,Cur ,obj_id zugewiesen
  Move(A[3],obj_id,4);
  Move(A[7],Targ[0],4);
  Move(A[11],Targ[1],4);
  Move(A[15],Targ[2],4);
  Move(A[19],Cur[0],4);
  Move(A[23],Cur[1],4);
  Move(A[27],Cur[2],4);

  if User.Obj_id=Obj_id then
  begin
    User.Targ:=Targ;
    User.Position:=Cur;
    exit;
  end;
  CrL:=Char_List.index(obj_id);
  if CrL<>-1 then
  begin
    Char_List.Chars[CrL].Target:=Targ;
    Char_List.Chars[CrL].Position:=Cur;
  end;
habe die ganzen Units durchsucht ....

Luckie 25. Apr 2010 13:19

Re: MMOG Realisieren
 
Also was du machen willst, ist Daten vom Server zum Client zu übertragen und umgekehrt. Richtig? Mit Strings hast du es anscheinend hinbekommen mit Hilfe eines Chat Tutorials und jetzt willst du binäre Daten übertragen und das klappt nicht. Richtig? Es dürfte doch eigentlich nicht so schwer sein, sein konkretes Problem genau zu beschreiben.

So, welche Internetkomponentensammlung benzutzt du? Hast du dir schon mal die zugehörigen Demos angesehen?

Am einfachsten dürfte die Übertragung mit Hilfe von Streams sein.

blackfin 25. Apr 2010 15:19

Re: MMOG Realisieren
 
Zitat:

Aber die Demo verstehe ich nicht, wie zb er die Packete Sendet . Ich sehe in jeder function nur einen Move(); das bringt mich etwas durcheinander
Verwechsle nicht diese Move() mit Player.Move(), das sind zwei unterschiedliche Routinen :)

Ich hab mir die Demo nun grob angesehen und kann dazu folgendes sagen:
Beim Senden und empfangen werden nach einigen mini-Überprüfungen die empfangenen Bytes in ein Array (A) geschrieben
und anhand des Empfangenen OPCodes die Routine ausgeführt.
In A[0] und A[1] steht die Länge der Daten, A[2] ist der OPCode, der besagt, was ausgeführt werden soll (userinfo, say etc.), ab da sind dann die eigentlichen Daten.

Allem in Allem eine sehr simple Implementation für ein "Client / Server"-prinzip, das aber in der Praxis wohl kaum für ein MMO taugen würde, da
keinerlei Sicherheiten beim Daten senden / empfangen bisher eingebaut wurden und die Daten von einem Client auch sehr leicht manipuliert werden können.
Das Ganze ist eher ein "proof of concept", um Mesh-Positionen vom Client an den Server zu senden und von diesem wieder an alle Clients zu verteilen.

Ich weiss ja jetzt leider nicht, was du damit eigentlich vorhast?
Wenn ich das wüsste, könnte ich dir vielleicht einen TIP geben, wie man dein Vorhaben am leichtesten umsetzt.
Ich arbeite auch derzeit mit GLScene und fuchse mich in das Zeug rein.
Allerdings hat dein geschildertes Problem mit GLScene gar nichts zu tun, sondern eher mit TCP-Kommunikation, GLScene wird hier ja nur verwendet, um
ein paar Kugeln, Würfel und eine Grasfläche anzuzeigen :)


grüssle,

Fin

XXcD 25. Apr 2010 16:31

Re: MMOG Realisieren
 
Ich wollte gerade Vorschlagen, dass es mit Streams am einfachsten ist, aber da habe ich gesehen mir ist schon jemand zuvor gekommen :)
Ich arbeite selber an einem Chat und arbeite da mit Streams wenn du da anregungen brauchst dann kann ich dir da gerne weiterhelfen.

danu1104 25. Apr 2010 16:33

Re: MMOG Realisieren
 
danke dir blackfin, dass ist genau das was ich wissen wollte :D


@XXcD lass uns über PN quatschen!

Edit: Ich schaue mal ob ich es auch für die Praxis verstanden habe.
Thx leute!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz