Datenmanagement/Dateihandling

Posted By: CHaP

Datenmanagement/Dateihandling - 09/16/10 14:10

Hey!

Ich wollte mich mal eben bei euch erkundigen, was denn der beste Weg für das Datenmanagement in einem Multiplayer Spiel ist, bzw. welchen ihr nutzt.

Ich mein* folgendes damit:
Der Server besitzt auf seiner Festplatte einige Dateien, welche jeweils von den Clients gelesen werden sollen. Dabei ist es wichtig, dass nur der Inhalt zu den Clients übertragen wird.

Meine Überlegung wäre jetzt ein STRUCT zu erstellen, diesen mit all den Daten einer Datei zu füllen und es per SEND_DATA/EVENT_DATA in Richtung der Clients übermitteln.
Bei den Client geschieht dann selbiges. Ein STRUCT wird mit den erhaltenen Daten gefüllt und ich könnte es dann verwenden.

Würde das reibungslos funktionieren oder existieren vielleicht noch andere Möglichkeiten?
Posted By: Germanunkol

Re: Datenmanagement/Dateihandling - 09/17/10 09:27

Das hört sich gut an. Theoretisch könntest du auch eine Datei senden, wenn das alles auf dem HDD sitzt und sowieso in einer Datei, aber (ich glaube) das wäre anfälliger für das Versenden von Viren und desswegen ist deine Lösung besser.
Da ich mein Spiel schon fast fertig hatte, bevor das Schicken von Structs mit ANet problemlos möglich war, schicke ich einfach per enet_send_var und enet_send_array/string die Daten, die der Benutzer braucht um den richtigen Level zu richtigen Zeit und mit dem richtigen Gamemode zu laden. Das funktioniert auch, aber generell würde ich die Struct empfehlen.
Posted By: CHaP

Re: Datenmanagement/Dateihandling - 09/17/10 15:39

Sehr schön. Wo finde ich denn bitte die Befehle ENET_SEND_VAR und ENET_SEND_ARRAY/STRING? Gehören diese zu ANet?
Und wie kann ich eine ganze Datei versenden? Würde der Inhalt dabei nur der Engine bekannt sein und nicht irgendwie auf der HDD ausgelagert, wäre das eigentlich schon genau das, was ich erreichen wollte.

Im Grunde genommen geht es einfach nur darum, dass es eine Accountverwaltung ist und die Clients sollen nicht an sensible Daten geraten können.

--------------
Die erste Frage habe ich mir gerade selber beantworten können. Es stammt aus dem ANet.
Posted By: Germanunkol

Re: Datenmanagement/Dateihandling - 09/18/10 13:34

Hm, also bis jetzt habe ich Dateien immer nur direkt von der HDD geschickt. Sie liegt irgendwo im Verzeichnis auf PC 1 und wird zu einem bestimmten Verzeichnis auf PC 2 geschickt, der sie dann öffnet und damit arbeitet - so mache ich das. Ob aus dem RAM eine Datei geschickt werden kann, weiß ich nicht, das würde heißen, 3dgs muss eine Datei erstellen, die es nicht speichert. Keine Ahnung, nie gemacht.

Für das was du brauchst, wenn ich es richtig verstanden habe, würde ich aber das verschicken einer struct empfehlen, unter anderem weil du dann nicht aufpassen musst, wer grade an wen Dateien verschickt; es geht nämlich immer nur eine Datei auf einmal, pro client.

Theoretisch kann man an alle Daten gelangen, die der PC einmal bekommen hat, sie können ja irgendwo "mitgehört" werden, auf dem eigenen PC, selbst wenn sie nie auf die Harddrive gespeichert werden.
Ich weiß nicht genau, was alles bei deiner Accountverwaltung geschickt wird, aber ich verstehe das so:
Client sendet Benutzername und Passwort an Server und bekommt den momentanten Status des eigenen Spielers zurück: Level, Geld, Inventar, etc. Für so ein Setup würde ich das ganze "einfach" per Struct (oder bei mehreren Spielern vielleicht eine Array von structs, nacheinander?) und um mogeln zu verhindern immer die Werte, die zum Beispiel mit dem Level zu tun haben (Damage, Health, Stärke etc) auf dem Server zu überprüfen, immer dann, wenn der Client etwas damit macht. Beispiel: Client schickt "ich habe einen Eisenhelm, den setzte ich jetzt auf" und Server prüft, ob bei ihm dieser Eisenhelm auch wirklich im Inventar des Nutzers ist, und nur wenn das der Fall ist, schickt er zurück "ok, setz ihn auf", woraufhin der client jetzt mit Helm auf dem Kopf rumläuft.

Das wäre mein spontaner Ansatz, es gibt eventuell bessere, aber so sicherst du dich gleich gegen alle Client-Side Möglichkeiten des Mogelns.
Posted By: Dark_samurai

Re: Datenmanagement/Dateihandling - 09/18/10 16:16

Quote:
Wo finde ich denn bitte die Befehle ENET_SEND_VAR und ENET_SEND_ARRAY/STRING? Gehören diese zu ANet?
Und wie kann ich eine ganze Datei versenden? Würde der Inhalt dabei nur der Engine bekannt sein und nicht irgendwie auf der HDD ausgelagert, wäre das eigentlich schon genau das, was ich erreichen wollte.


enet_send_var/array/string() gehören zu ANet und können im ANet Manual nachgelesen werden. Eine ganze Datei kannst du mit ANet's Dateifunktionen (File Transfer) verschicken (siehe Manual). Dazu gibt es auch ein fix fertiges Beispiel auf der Downloadseite: http://www.anet-plugin.com/downloads_eng.htm
Aber es ist wahrscheinlich intelligenter nicht die gesamte Datei zu senden, da diese eben dann auch auf der Festplatte gespeichert wird. Durch Senden eines Structs bleibt der Inhalt nur im Ram.
Posted By: CHaP

Re: Datenmanagement/Dateihandling - 09/21/10 13:53

Cool! Danke für die ausführliche Antwort!
Ich denke das Hilft mir weiter.

An dieser Stelle beschäftigt mich jetzt noch eine weitere Frage.
© 2024 lite-C Forums