Beiträge von Exaran

    Technisch gibt es einen Mega Server wo die ganze Welt darauf spielen soll.

    Das dies natürlich nicht sinnvoll ist, wären die Sub-Mega Server kontinental.
    Europa, Asien, Afrika usw.


    Darunter sind die World Server und die wiederum aufgeteilt in Shard Server.

    Der World Server ist diese eine Welt und diese Welt ist unterteilt in die Shard Server, damit die Informationen nur dann geteilt werden wenn diese nötig sind und nicht allgemein.


    Es werden ja nur die Daten übertragen die auch nötig sind.

    Sehe ich einen anderen Spieler, interessiert mich der Inhalt des Rucksacks nicht, es sei denn ich sehe darin hinein.

    Ebenfalls interessiert mich kein Spieler der z.B. eine Insel weiter herumläuft. Das sollen dann die Server unter sich ausmachen. Um den Datenverbrauch zu reduzieren.


    Soweit bin ich noch nicht, es geht mir darum wie ich nun weiter mit dem Grundgerüst der Inventarverwaltung weiter verfahren kann.

    Das ganze möchte ich dann stück für stück weiter in Richtung MMORPG ausbauen.

    Es ist mir derzeit egal wie viele Daten übertragen werden, weil das später optimiert wird. Aber soweit bin ich ja noch nicht.


    Daher ist meine Frage:
    Mit welchem "...Reference" kann ich die ganzen individuellen Daten eines Actors (Gegenstand) abspeichern, um diese von der Welt in das Inventar und wieder zurück zu packen, so das die individuellen Daten auch übertragen werden. Weil genau da liegt das Problem.

    Wichtige Info:
    Jeder Gegenstand muss im Spiel komplett frei veränderbar sein! Und diese Informationen müssen entsprechend in dem Gegenstand abgespeichert werden/sein. Deswegen brauche ich auch keine IDs oder irgendwas womit ich etwas aus einer Default-Datenbank abrufen kann (höchstens einmal zum allgemeinen erstellen des Gegenstandes).

    Barni
    Danke dir für die Infos.
    Ich werde nicht darum herumkommen jemanden einzustellen welcher das ganze besser kann als ich. Daher muss ich zusehen das ich erstmal das alles zum laufen bekomme um das Projekt in die Finanzierung zu bekommen.
    Es muss nicht von Anfang an ein MMORPG sein, sondern kann im Laufe der Zeit dorthin wachsen (das habe ich für mich nun beschlossen). Weil ich ständig in das Problem hineinlaufe das ich in eine unendliche-Problem-Situation gelange.


    Daher um das ganze ein wenig abzukürzen.
    Mir stellt sich noch eine Frage bezüglich dem Inventar und dem speichern von Informationen.
    Jeder Gegenstand im Spiel muss einzigartig sein und sich von anderen Gegenstände unterscheiden.

    Beispiel:
    Langschwert A hat 100 Schaden (default)
    Langschwert B hat 120 Schaden
    Langschwert C hat 30 Feuerschaden
    Langschwert D hat 10 Schaden auf alle Schadensarten

    usw.

    Daher müssen alle Informationen eines Gegenstandes für sich selber gespeichert werden. Damit jeder Gegenstand auch einzigartig ist, darauf baut das ganze Spielprinzip auf. Ich möchte nicht das die Gegenstände gleich sind.


    Bisher verwende ich als Inventar-System nur das "ItemDataBaseXYZ" Structure.
    Darin enthalten, ItemName, Mass usw.

    Im Actor selber sind aber noch zusätzliche Structures z.B.
    Damage (mit vielen weiteren Variablen darin).

    Darauf habe ich z.B. über das bisherige ItemDataBaseXYZ Structure kein Zugriff, weshalb ich das leider abändern muss. Damit ich zugriff auf die anderen Variablen habe und diese speichern kann, sonst wird nur der default wert genommen.


    Die Frage ist, bleibt dann nur noch der "ActorReference" als Inventar-System übrig?
    Weil ClassReference funktioniert nicht, ich kann damit nur die DefaultClass abrufen, was ja keine Informationen speichern kann.

    SoftReference scheint mir auch nicht hilfreich zu sein.


    Kann ich mit ActorReference alle Informationen hin und her speichern, vor allem wenn ich SpawnActorFromClass mache um dann vom Inventar alle Informationen in den gespawnten Actor zu übertragen?
    Spricht, das mein Langschwert B auch Schaden 120 hat und nicht wieder Langschwert A mit 100 Schaden ist, weil das nicht gespeichert werden kann?

    Es geht hier nur um das übertragen von Informationen. Das ganze muss dann sowieso später aus dem Spiel in eine externe Datenbank übertragen werden, um von da wieder zurück in das Spiel wenn die Abfrage dafür nötig ist.



    Habe mir sehr viele Tutorials dazu angeguckt und fast alle verwenden das System was ich bisher verwende, aber hier stößt man schnell auf Probleme mit den "Unknown Structure" wenn man etwas ändern möchte, weshalb ich davon weggehen möchte. Desweiteren läuft man da in performance Probleme hinein, wodurch das Thema begonnen hat.

    Wenn man ein kleines Spiel macht mag das noch funktionieren aber wenn es größer wird geht es nicht... also schon aber das wäre eine Tortur ständig alles auszubessern.

    Das mit der Servertechnik werde ich nicht schaffen, dass würde ich machen wenn ich entsprechend Spendengelder gesammelt habe um dann einen Experten einzustellen welcher davon viel mehr Ahnung hat.

    Deshalb würde ich erstmal das mit dem Server abhaken, trotzdem war mir die Erwähnung dafür wichtig, weil die Gegenstände in der Welt ja trotzdem abgespeichert werden müssen.


    Vom Serverprinzip würde ich es ähnlich machen wie bei einem anderen Spiel:

    1. Login-Server (überprüft ob Spieler zugriff hat)
    2. World-Server (Mehrere Welten um die ganze Spielerlaste zu verteilen, man kann frei zwischen den World-Servern reisen)

    3. Shard-Server (Welcher eine bestimmte Großregion im Spiel verwaltet)

    4. Region-Server (Welcher eine einzelne Region verwaltet)


    Shard und Region Server verwalten die Großregionen und Kleinregionen, und teilen so die Kommunikation ein. Spieler in Region A brauchen keine Information von Spieler in Region B, so als Beispiel.



    Hat dann wer ein gutes Multiplayer Tutorial zum abspeichern von Gegenstände, damit diese nach einem Serverneustart z.B. wieder an Ort und Stelle sind usw.?

    Im Grunde kann jede Waffe jede Schadensart gleichzeitig haben.

    Darum habe ich das ganze ja in 6 Hauptstrukturen aufgeteilt. Weil auf Essen (als Beispiel) brauche ich ja keine Kampfwerte haben.


    Das Problem ist halt, dadurch das alle Werte frei modifizierbar sind, muss ich diese über ein geordnetes Structure System ansprechen können. Ich hatte es vorher mit Variablen im MasterActor (Parent) gehabt aber das bedeutet wieder neue Probleme, weil man diese wiederum nicht so problemlos ansprechen kann. Bei einem Struct habe ich die wichtigsten Werte und alles was nicht wichtig und Gegenstandspezifisch ist, kann ich immer noch den separaten Child Actor packen.
    Z.B. ein Wohnhaus was einen Heilbrunnen hat. Das muss ich nicht in einem Struct machen, sondern kann es über den Actor selber regeln.
    Aber wer das Wohnhaus besitzt (Name, Actor usw.) das brauche ich im Struct um das besser zu identifizieren, um damit auch die Rechte für die Interaktion zu ermöglichen. Usw.


    Das hört sich so an als ob ich alles möglich in ein Hauptstruct packe, aber das stimmt nicht. Eben nur das wichtigste was alle Gegenstände dieser Kategorie betrifft.

    Gewicht ist so ein Wert, das jeden Gegenstand betrifft. So das man auch ein Haus mit Inhalt in die Inventartasche packen kann.




    Ich möchte vom Spielprinzip her in eine ganz andere Richtung gehen in der das Spiel personalisiert wird, und nicht auf Masse monoton und langweilig wird. Bin derzeit mit allen MMORPGs total unzufrieden weil diese so gut wie keine Inhalte bieten (monotone Quests sind kein Inhalt). Langweiliges Grinden und ständiges wiederholen von wiederholbaren Aufgaben ist kein Content. Davon möchte ich komplett weg und etwas ganz neues machen.


    Daher möchte ich ein Spiel machen in der man selber Inhalte erstellen kann. Spieler erzeugen für Spieler Content (Player based content) aber eben das wiederum auf Rollenspiel basis.



    Für Cheats usw. habe ich mir bereits ein System ausgedacht das dann eingreift.

    Übermächtige Gegenstände finden den Spieler und nicht Spieler finden übermächtige Gegenstände. Auch da möchte ich es andersherum machen.

    Mich würde es trotzdem mal interessieren wo würdest du bei dir im Projekt diese Werte hin packen? Wenn nicht in ein Struct.

    Als Beispiel die Schadensarten im Spiel:

    - Feuerschaden

    - Eisschaden

    - Schattenschaden

    - Lichtschaden

    - Giftschaden

    - Blitzschaden

    - Physischer Schaden

    - Blutungsschaden

    usw.


    Diese Werte müssen auf alle Waffen drauf, weil alle Waffen das Potential haben diese Schadensarten zu machen. Etwa in dem man diese im Spiel mit Mods ausrüstet (die Mods sind aber individuell und nicht fest vorgegeben! Also es gibt eine Basis Mod die man im Spiel durch Herstellen verändern kann.)

    Das gleiche gilt als Negativform bei Rüstungen, Schmuck, Bauteilen (Festungsmauern, Fallen, uvm.)


    Alle diese Werte müssen Live im Spiel veränderbar sein, siehe Modbar.

    Das weiss ich.


    Bitte beim Thema bleiben. Hier geht es um Open World und was dazu gehört. Das andere Thema ist bereits beendet.

    Nichts für ungut, aber du hast doch garantiert dein vorheriges Problem noch nicht im Griff und nun träumst du von einem Megaserver?

    Ich habe das vorherige Thema beendet, weil man mir nicht zuhören will.
    Ich brauche diese Variablen weil es ohne nicht geht und muss dann lesen das ich das nicht brauche, obwohl ich es brauche. Da dreht sich die Diskussion im Kreis. Noch dazu ist das ganze von meinem Hauptproblem (Editor Performance) zu weit abgedriftet. Ich habe keine Performance Probleme im Spiel, sondern mit dem Editor. Das sind zwei unterschiedliche Dinge.


    Daher macht es keinen Sinn in diese Richtung weiter zu diskutieren.
    Ich will voran kommen und nicht stehen bleiben und endlos im Kreis drehen.

    Ich frage mich wie du mehrere Schadensarten in eine Zahl packst.


    Z.B.

    Feuerschaden

    Eisschaden

    Blitzschaden

    Schattenschaden

    usw.


    Wie kannst du das in eine einzige Variable als Zahl packen. Wie kann die Zahl später erkennen welche Schadensart das ist?

    Tomarr

    Ich brauche diese Werte und noch viele mehr damit das alles gut funktioniert.


    Ich würde an der Stelle über die Sinnigkeit nicht weiter reden wollen, weil ich das Spiel eben ganz anders aufbauen möchte.


    Viel wichtiger wäre, wie kann ich diese Dinge in der Open Welt zur Persistenz bringen, also abspeichern/rein-raus-Streaming usw.

    So das dass ganze performant ist.

    Wenn in einer Höhle (Wie genau grenze ist das ein?) 10 Schatzkisten mit Inhalt sind, Z.B. Waffen, Rüstungen, Tränke, Geld uvm..
    Dann soll das ganze alles nicht vorhanden sein wenn kein Spieler in der Nähe ist.
    Es soll jedoch aber im Hintergrund ein Ereignis passieren, in dem Monster diese Höhle erobern und sich dort einnisten. (Kein reguläres spawn system) Sondern dynamisch durch eine kleine Horde/Gruppe/Armee die da als NPCs einmarschiert und sich darin verteilt und zusätzlich Verteidigungsgebäude errichtet (Fallen usw.).

    Wie kann ich diesen Bereich so von allem anderen abgrenzen?
    Die Spieler können oder sollen dann informiert werden das eine Horde Monster die Höhle erobert und können die zukünftigen Besatzer dann während des Einzugs, oder tage später nach der Besatzung angreifen und auslöschen.

    Das ist ja sehr minimalistisch.
    Wenn ich derzeit schaue was ich bereits jetzt an Variablen Habe für eine Waffengattung, ohne das da noch Spezialsachen drinnen sind.

    30 Variablen für die Schusswaffe.

    10 Variablen nur für die Munition.

    25 Variablen für den Gegenstand.


    11 Variablen für die Art des Gegenstandes.


    14 Variablen für Schaden.


    Damit komme ich derzeit in der Grundversion, wo noch einiges an Zusatz fehlt auf 89 Variablen.

    Daher wundert es mich das du nur so wenige verwendest.



    Das alles muss ich ja für jeden Gegenstand abspeichern, weil jeder Gegenstand einzigartig ist. Das ist das Spielprinzip.
    Dazu kommt das die Spieler selber noch einzigartig sind.

    Das alles fast mal 6x.


    Bei den Fahrzeugen und Gebäuden kommt das meiste hinzu.

    Ja das möchte ich machen, also ein MMORPG nur eben eine nachfolgende Version davon.

    Das mit dem 100 Werte auf dem Gegenstand ist ja nur ein Beispiel. Es könnten viel mehr sein. Für den Spieler werden alle unwichtigen herausgefiltert. Aber man muss diese Werte ja trotzdem abspeichern!
    Oder wie kann man Werte auf Ausrüstung setzten ohne das diese abgespeichert werden?
    Ob in einem Struct System?
    Oder mit Variablen in dem Parent... aber dann hat man unendlich viele davon...

    Und wie regelt man so etwas wie Fähigkeiten/Eigenschaften auf Waffen und Rüstungen usw.?

    Die Frage ist.


    Ist der Wert 0 auch ein Wert der übertragen wird?


    Angenommen man hat 100 Spieler gleichzeitig. Alle gucken sich nun einen Gegenstand an welches 100 Werte hat, davon 90 mit 0 (also leer) und 10 mit vollen Werten.


    Werden dann 100 (Spieler) x 100 Werte (auf Gegenstand) vom Server zu den Clients transferiert?

    Oder sind es doch nur 100 x 10 Werte? Weil die 900 anderen (in Gesamtheit) leer sind und leer wird nie übertragen?

    Wobei bei einem Bool gibt es ja auch False 0 und True 1. Diese Variable wird doch auch stetig übertragen, sonst würden diverse Scripts nicht ablaufen.


    Einfach ausgedrückt.

    Muss das Schwert auch die Werte von Gebäuden, Fahrzeugen, Lebensmittel, Zaubern, Kreaturen enthalten (obwohl diese alle 0 wären) oder reicht es wenn das Schwert nur Schwert ist? Wenn es nur ein Schwert ist, muss ich es ja wiederum anders im Spiel behandeln und ansprechen (filtern).


    Dazu eine Text-Bildliche Darstellung:


    ............................ - Child -> Rüstungen


    ......................................................... - Child -> Schwerter

    ...........................- Child -> Waffen ->

    ......................................................... - Child -> Äxte

    MasterParent ->

    .......................... - Child -> Auto

    ...........................- Child -> Gebäude


    oder


    MasterRüstungen ->


    ........................... - Child -> Langschwert

    MasterWaffen ->

    .......................... - Child -> Äxte


    MasterAuto ->

    usw.



    ----


    Was ist die beste Art in einem Multiplayer mit offener Welt die Gegenstände und dinge Darin in einer Persistenz zu speichern/streamen? So das diese nach Bedarf nur dann repliziert werden, wenn sich dort Spieler aufhalten?

    Die Schatzkiste in der Höhle am Ars..ch der Welt würde ja niemanden interessieren und bräuchte auch nicht repliziert werden. Kann daher unsichtbar oder nicht vorhanden sein.

    Im Administrativen Bereich muss man zugriff auf alle Datenbanken und Gegenstände haben. Auch wenn man im Spiel einen Fernzugriff machen muss.

    Hinzukommen das größere Städte der Spieler auch viel mehr Gegenstände an Waren und anderen Dingen haben.


    Da ich zwei Technologiestufen habe, sind die Gegenstandmengen also schon mal von Grund auf doppelt so viel.

    Biete ich für Dinge noch Modifikationen an (Upgrades, Aufwertungen usw.) kommt alleine dadurch schon eine riesige Anzahl zusammen.

    Das ist der Grund warum ich das trennen möchte.


    Ich muss noch viel lernen.

    Nach jeder Veränderung in einem Structure erhalte ich die "Unknown Structure" Fehler und das durch das ganze Projekt. Das alles wieder zu fixen (Refresh all Nodes und Compile bei jeder einzelnen Blueprint) dauert so quälend lange.

    Kann man das irgendwie dauerhaft umgehen oder schneller erledigen?
    Resave All bringt auch nichts.