Hallo zusammen,
Ich habe nach langem hin und her mal wieder eine Frage.
Zuerst schildere ich das Problem:
1 Server
1-8 Clients
Der Client connectet zum Server
=> Der Server empfängt den connected befehl und sendet dem Client eine ID zu
=> der Client empfängt die ID und übernimmt sie
=> Client sendet Nicknamen aus Editfenster zusammen mit der erhaltenen ID zum Server
=> Server empfängt und übernimmt ihn in ein Label
=> Verbindung steht.
=> Server nimmt Einstellungen vor und übermittelt sie per Knopfdruck zu allen Clients
=> Clients empfangen die Daten und übernehmen sie entsprechend
=> Wenn Client offline geht sendet er einen Befehl zusammen mit seiner ID zum Server
=> Der Server ordnet durch die ID den Client zu und deaktiviert das entsprechende Label.
Soweit die Theorie.
Wozu das ganze?
Es geht um einen GameHack. Der Server gibt die Werte vor, sendet sie zu allen Clients, die -sofern das Spiel läuft- die Daten entsprechend in den Arbeitsspeicher schreibt.
Keine angst, es handelt sich hierbei um erwünschtes Cheaten. Es geht um ein 12 jahre altes Spiel, welches über keine Online Funktion verfügt und nur von einer kleinen Gruppe noch über Hamachi gespielt wird. Durch den Hack, ist man in der Lage, werte im Spiel zu ändern an die man sonst nicht heran kommt. Bsp. das Startgeld oder das Einheitenlimit / Gebäudelimit. Durch das Client / Server prinzip schickt der Server an alle die Daten, dadurch hat jeder die gleichen Werte im Speicher.
Bis jetzt habe ich das ganze so gelöst:
TServerSocket und TClientSocket => Die Daten werden mittels Socket.SendText('123@321'); gesendet.
Wenn der Client das empfängt, filtert er das alles vor und nach dem @ heraus und schreibt die beiden gefilterten Zahlen entsprechend in den Speicher.
Wo ist das Problem?
Bis jetzt funktioniert alles soweit, allerdings musste ich feststelle, als ich 3 Werte übermitteln wollte, klappte die Filter funktion nichtmehr korrekt.
Da ich selbst das Protokoll für höhst uneffektiv halte, suche ich eine bessere alternative. Ich stehe immer wieder vor dem Problem das bei mehreren Strings, das ganze schief geht.
Es werden nicht viele Daten übermittelt. Bei Connecten => Nickname + ID und bei Datenübermittlung 2-5 Werte => Bei disconnect eine abmeldebestätigung.
Jetzt suche ich eine Lösung:
Bereits versucht habe ich folgendes
Sockets => uneffektiv
TCP => Server kann nicht senden ( zwingend erforderlich )
UDP => ungeeignet, da Paket um jeden Preis ankommen muss
Ich erhoffe mir eine Idee wie man das ganze besser lösen könnte ohne Seitenweise Quellcode zu schreiben. Vielleicht gibt es irgentwo ein einfach zu bedienendes Protokoll mitdem ich die Problematik ohne viel Traffic lösen kann.
Ggf. möchte ich im späteren Verlauf einen Dx5 Overlay schreiben, der bestimmte Werte als Text im Spiel selbst anzeigt. Oder einfach als Ingame Chat, wenn mal der TS2 nicht richtig funktioniert.
Bin für Vorschläge, Beispiele und Anleitung offen.
PS. Wen interessiert um welches Spiel es sich handelt => Krush Kill 'n' Destroy 2 von Melbourne House.
Grüße Patrick