Jump to content
Unity Insider Forum
Sign in to follow this  
MustafGames

[UNET] Network and XML

Recommended Posts

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Klar, du kannst natürlich nicht auf den Speicher des Servers zugreifen. Aber lokal ändern geht immer.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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! :D ).

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.

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×