MustafGames Geschrieben 9. August 2018 Melden Share Geschrieben 9. August 2018 Grüße, mein Server ist Host & Client gleichzeitig, kann ich eine xml Datei über den Server auslesen und verändern, ohne das der Client etwas davon mitbekommt, der Client soll lediglich einen Button drücken der dann den Server 2 Strings schickt und diese soll der Server dann in die xml Datei eintragen und vergleichen. Wie würdet ihr das am besten machen? Ich würde ja einen NetworkBehavior Script erstellen und dort eine Command Methode welche 2 strings als Attribute hat, ist das so ok? Den Command lasse ich dann per Button ausführen. Mfg Mustaf Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 12. August 2018 Melden Share Geschrieben 12. August 2018 Genau so ist es richtig. Einfach einen Command mit 2 Strings und fertig. Was du dann auf dem Server damit machst ist ja völlig egal davon kriegen die CLients ja nichts mit. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 16. August 2018 Autor Melden Share Geschrieben 16. August 2018 und wenn man [Server] statt [Command] über die Methode schreibt? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Helishcoffe Geschrieben 17. August 2018 Melden Share Geschrieben 17. August 2018 Das sind 2 völlig unterschiedliche Dinge. Das Attribut [Server] über einer Methode sagt nur, dass diese Methode nur auf einem Server aufgerufen werden kann, falls diese doch auf einem Client aufgerufen wird gibts eine Fehlermeldung. Das hat Praktisch kaum einen Nutzen, dient jedoch zur schnelleren Fehlerfindung und einem saubereren Codestil wenn man das Konsequent durchzieht. Allerdings hat das nichts mit einem Command zu tun. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 20. August 2018 Autor Melden Share Geschrieben 20. August 2018 Danke, habe da noch 2 Fragen. Warum wird bei den Erklärungen von Unity selbst, die TakeDamage Methode nicht mit einem [Command] Feld beschrieben sondern lediglich in der Methode eine if (!isServer) { return; } - Abfrage Wenn ich eine Heal() Methode habe sollte ich diese besser genauso schreibe mit dieser Abfrage oder als Command (man soll diese ja auch über Objekte aufrufen können)? 2 Frage. [System.Serializable] public class Inventory { public List<int> items = new List<int>(); } Ich habe diese Klasse (da ist eigentlich noch etwas mehr drin, habe Sie jetzt nur ganz simple gehalten um es nicht all zu kompliziert zu machen. Mein Player Script welcher ein Network Behaviour ist soll dann eine Variable bekommen. public Inventory inv; Diese soll SyncVar bekommen, geht aber nicht. Wie kann ich dort auch eine Synchronisation nutzen oder brauch ich das gar nicht und man kann z.b. per CheatEngine die Liste gar nicht ändern? Mfg Mustaf Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 20. August 2018 Melden Share Geschrieben 20. August 2018 CheatEngine arbeitet direkt auf dem Speicher. Das kann immer alles ändern. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 20. August 2018 Autor Melden Share Geschrieben 20. August 2018 Wenn der Server aber auf einem anderen Gerät läuft müsste es daran doch nicht rankommen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 20. August 2018 Melden Share Geschrieben 20. August 2018 Klar, du kannst natürlich nicht auf den Speicher des Servers zugreifen. Aber lokal ändern geht immer. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 20. August 2018 Autor Melden Share Geschrieben 20. August 2018 Die SyncVar Attribute sind doch dazu da das der Client mit dem Server übereinstimmen muss. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 20. August 2018 Melden Share Geschrieben 20. August 2018 Ja, und? Das heißt ja nicht, dass der Client 24/7 mit dem Server redet um die Variable abzugleichen. Was das Attribut macht ist, dass der Server, wenn die Variable sich bei ihm ändert, beim nächsten Netzwerk-Update dem jeweiligen Client bescheid sagt, dass sich was geändert hat. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 20. August 2018 Autor Melden Share Geschrieben 20. August 2018 Also könnte man in allen Spielen einfach cheaten und es gibt keine Abwehr dagegen? PS: Kannst du mir Frage 1 erklären, warum das so ist? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 20. August 2018 Melden Share Geschrieben 20. August 2018 Klar gibt es Maßnahmen gegen bestimmte Sachen. Du kannst zum Beispiel bestimmte Dinge vom Server testen lassen. Da gilt dann, dass der Server dem Client niemals vertraut, sondern immer alles wichtige noch einmal selber nachprüft. Du kannst dich auch gegen Low-Level Memory Acceess ein bisschen schützen, indem du dich nicht auf einzelne Variablen verlässt. Aber potentiell musst du dir bewusst machen, dass dein Client auf einem Rechner läuft, der unter totaler Kontrolle des Nutzers liegt. Eine absolute Sicherheit gibt es nicht, und alles kann gehackt werden. Wer etwas anderes behauptet, ist blöd (ja, Telekom Österreich, ich rede mit dir! ). Bei Schutz gegen Hacker gilt: Mach dir ein Angreifermodell, das beschreibt, mit welchem Aufwand du rechnest, den der Angreifer maximal betreiben wird, um sich einen Vorteil zu verschaffen. Dann schütze dich dagegen. Du solltest also nicht damit rechnen, dass dir die NSA oder der CCC auf den Fersen ist, sondern einfach nur edgy Script Kiddies. Und wenn dein Schutz ausreichend ist, dass die nach einer Stunde immer noch nichts geschafft haben und ihnen langweilig wird, dann reicht das. Und bei Frage 1 verstehe ich nicht, worum es geht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 21. August 2018 Autor Melden Share Geschrieben 21. August 2018 Danke für die Info. Gibt es da ein paar Anleitungen wo man so ungefähr mal sieht wie man die Variablen (Beispiel: Lebenspunkte, Angriffschaden) so schützt das Sie nicht so einfach verändert werden können? Zu Frage 1: https://unity3d.com/de/learn/tutorials/topics/multiplayer-networking/networking-player-health if (!isServer) { return; } Wird das benutzt, statt einen Command daraus zu machen? (In der TakeDamage Methode) PS: Welche Methode muss ich nehmen wenn ich ein Command aktivieren möchte bevor der Client disconnected (z.b. wenn er Alt+F4 gedrückt hat oder das Programm sich einfach schließt) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.