Die Unreal Engine verteilt doch automatisch eine ID für jedes Ding. Warum dann noch extra eine ID machen? Das wäre doch doppelt gemoppelt.
Beiträge von Exaran
-
-
Ich mache das ganze ohne ID oder UID. Ich wüsste nicht wofür das gut sein soll.
Da jeder Gegenstand individuell ist, muss dieser auch individuell abgespeichert werden.
Egal.
Soweit ich das nun sehe kommt nur ObjectReference infrage da bei allen anderen Referencen ich keinen direkten Zugriff auf die Variablen innerhalb davon halte.
-
Gehen wir das mal umgekehrt an. Wie viele Spieler sollen auf einem Server spielen?
Gut, bei einem Indispiel würde ich spontan mal mit bis zu 100 Spielern rechnen, dann ist deine Vorgehensweise vielleicht egal.
Nu, du überträgst doch auch mit jedem Wert, den du übermittelst Daten und das von jedem Spieler an jeden Spieler. Das heiß, der Upload beim Internet von privat ist ja immer die große Schwäche.
Wenn du jetzt die Gegenstände eines Spielers an einen Server übermittelst, dann macht es schon einen Unterschied, ob du pro Gegenstand 10 Kilobyte übermittelst oder 20 Kilobyte.
Klingt erstmal nicht viel, aber nehmen wir mal an, der Spieler hat 100 Gegenstände bei sich, dann ist das ein Unterschied von 1000 Kilobyte.
Noch schlimmer wird es dann, was du, wohl bemerkt ständig, vom Server an die Clients schicken musst. Nehmen wir auch da mal 100 Spieler. Dann empfängt der Server halt diese 1000 Kilobyte, die vielleicht gar nicht nötig wären und versendet mal eben an alle anderen wieder das 100-fache, also 100.000 Kilobyte. Das sind mal eben 10 Megabyte, mit denen der Server mal eben so beschäftigt ist, diese an alle Spieler zu senden. Und da ist noch nicht berücksichtigt, dass sich die Spielsituation ja auch in Echtzeit ständig ändert.
Da sind Lags und Asynchronitäten, letztendlich dann auch die Möglichkeiten, das zum Cheaten auszunutzen, im Spiel quasi vorprogrammiert. Und die Berechnungen beruhen nur auf die zusätzlichen und überflüssigen Daten, die dann entstehen, wenn du das nicht besser optimierst.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 Schadensartenusw.
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.
-
Schattenschaden? Naja, von mir aus.
Aber es wird ja wohl hoffentlich keine Waffe geben, die jede Schadensart hat. Da nimmst du halt eine Variable rein mit Schadensart und dann den Schadenswert.
Du machst eigentlich genau denselben Fehler, den ich am Anfang auch immer gemacht habe, und zugegeben ab und zu noch immer mache. Du denkst, du musst alle Eigenschaften, wirklich alle, in ein Objekt programmieren, so wie du sie dir in der realen Welt vorstellst. Spiele sind aber nur eine Simulation und bei denen muss man halt viele Abstriche machen. Es ergibt ja auch keinen Sinn, alles in eine Waffe zu packen.
Ich würde es eher so machen.
Typ: Schwert
Schadensart: Hieb
Schadenvolumen: 30
Sekundäre Schadensart: Feuer
Sekundärer Schade: 5
Oder irgendetwas in dieser Richtung. Weil, wenn du mehr machst, das wird die Spieler überfordern. Vielleicht kannst du noch Sockel für Gems mit besonderen Eigenschaften auf das Schwert packen, aber dann addierst du das mit der Gem-ID, der auf dem Schwert ist und bekommst von dem seine Bonuswerte.
Du musst dir das so vorstellen, dass du im Idealfall, die Schadens und Schutzberechnung mit jeder Waffe in einer Routine berechnen kannst, mit minimalen Änderungen. Da musst du hinkommen. Da helfen dir unter anderem auch Interfaces.
Und dann brauchst du auch, um mal auf deinen ersten Post zurückzukommen, nicht tausende oder abertausende komplizierte Objekte in einer Datenbank durchsuchen. Die Waffe, die der Spieler bei sich hat, hat halt ihre Werte, dafür ist die Objektorientierung erfunden worden. Legt der Spieler seine Waffe zum Beispiel in eine Truhe mit mehreren anderen Objekten, dann speicherst du im Inventar der Truhe nur die ID der Waffe, eventuell noch mit einem kleinen Bildchen. Nimmt er die Waffe wieder aus der Truhe, wird halt das Objekt mit seinen Werten über die ID wieder hergestellt. Genau dasselbe, wenn der Spieler die Waffe nur in seinem Inventar hat. Schlau wäre es auch, wenn die Waffen und Gegenstände ab und zu mal kaputtgehen. Das wurde nicht wegen des Realismus eingeführt, sondern damit die Datenbanken nicht endlos groß werden.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.
-
Es geht ja erstmal darum einen Weg in diese Richtung einzuschlagen.
Nur die Frage ist wie macht man das. Es gibt unzählige Tutorials zu kleinen Servern aber die sind häufig in sich selber limitiert.
Zuerst bräuchte ich die Persistenz der Gegenstände in der Welt, wie macht man das? -
Wenn du eine Frage stellst, macht sich sich natürlich jeder Gedanken wie er dir helfen kann und wie er selbst das Problem lösen würde.
Dabei kömmt man oft in diese Situation wo man denkt, wenn das und jenes mein Case ist, dann würde es so und so machen und wenn der Case anderst wäre dann würde das Problem eben anderst lösen.
Wenn du natürlich einfach nur einfach und staighte ne Antwort haben willst, dann fühlt sich dass vielleicht manchmal so an als würde man das Pferd von hinten aufsatteln.
Daher ist eigentlich immer nur von Vorteil für alle, wenn du sagst was du genau vor hast und warum du es so vorhast.
Es es gibt hier im Forum niemanden der nicht zuhören will. Warum sollte jemand nicht zuhören wollen ?
Wenn dann liegt es daran dass diese Leute dein Problem nicht verstehen oder du nicht verstehst warum der Vorschlag die bessere Lösung ist.
Das ist dann eher ein Kommunikationsproblem.
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. -
Hallo zusammen!
Ich möchte eine Open World mit einem Mega Server in mein Spiel integrieren da alle anderen Dinge nun soweit erledigt sind (es gibt ja immer etwas zutun).
Kennt da wer sehr gute Tutorials wie man das alles machen kann?
Vor allem auch die Persistenz von Gegenständen, Gebäuden usw in der Welt.
Wie speichert man das alles ab und wie streamt man das rein und raus usw.? -
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?
-
Wie machst du das um deine Waffen im Spiel unterschiedlich zu machen?
Ich habe bisher noch keine Antwort bekommen wie die Alternative wäre für die Waffeneigenschaften. -
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. -
Erstaunlich, ich habe schon die 100 kritisiert und du meinst, es könnten ja noch mehr sein.
Nein, du musst die nicht alle speichern. Rollenspiele würfeln Ergebnisse aus. Auch MMORPGs funktionieren wie Pen & Paper Rollenspiele. Du hast ein paar Werte, zum Beispiel die Geschwindigkeit der Waffe, einen Grundschadenswert der Waffe, vielleicht noch die Haltbarkeit. Deine Figur hat dann ebenfalls ein paar Werte wie Ausdauer, Intelligenz und Agilität. Dazu kommt noch ein Skillwert für die jeweilige Waffengattung.
Diese beiden Werte, also die Werte deines Spielers und der Waffe kombinierst du dann mit Würfelergebnissen. Dazu hast du einen Satz von Würfeln, mit den Werten 1-4, 1-6, 1-8, 0-9, 1-12, 1-20 und einen Multiplikatorwürfel, der in Zehnerschritten von 00-90 geht. Die kannst du ja auch ganz einfach programmieren und ist eigentlich die Grundlage eines jeden Rollenspiels.
Diese Würfel haben, je nach Rollenspielregel, also AD&D, Pathfinder, oder was auch immer, sind aber alles Pen & Paper Rollenspiele, werden verschiedene Würfel halt genutzt für einen Angriff oder Verteidigung oder andere Aktionen, zum Beispiel, ob es dir gelingt Preise zu verhandeln. Es sind also Erfolgswürfe. Und da kommt dann grundsätzlich folgendes zum Einsatz. Der Angreifer würfelt zum einen, wie stark der Angriff ist, dafür werden die gewürfelten Werte in Kombination mit den Werten der Waffe und den Werten Intelligenz, Ausdauer und Agilität, je nachdem welche Werte für diese Waffe benötigt werden. Ob der Schlag erfolgreich ist, hängt dann vom Würfel und dem Skillwert in der Waffenklasse ab.
Das sind so die Grundlagen, wenn du da detaillierter einsteigen willst, empfehle ich dir ein Basisset von Dungeons and Dragons zu kaufen, das ist nicht zu teuer, hat aber alle Würfel und Anleitungen und hat halt das Regelwerk für AD&D oder, wenn du die alte Version nimmst D&D. A steht hier für "Advanced", also erweitert und kam später in das Dungeons and Dragonsregelwerk.
Aber, was das Wichtigste ist, du brauchst in deiner Waffe nur 3, max. bis 5 Werte, plus Name, zu speichern. Die restlichen Werte hat dein Playercharakter, eben halt die drei Grundwerte, wie Intelligenz, Stärke und Agilität, auf diesen Werten bauen auch die anderen Werte auf, zum Beispiel Stärke 5 ergibt HP 10, oder Intelligenz 3 ergibt Mana 6 und Agilität 7 ergibt Ausdauer 14 oder so. Du musst es nicht verdoppeln, war jetzt nur ein Beispiel.
Skills könnten zum Beispiel sein, Swordman, Wrestling, Anatomie, Archery usw. Wenn du es noch etwas komplexer machen willst, brauchst du den Erfolg auch nicht nur berechnen, mit zum Beispiel, wenn er ein Schwert nutzt, dass dann nur der Skill Swordman Einfluss darauf hat. Wenn er sich zum Beispiel gut mit Anatomy auskennt, kann ja das zusätzlich ebenfalls seine Treffer verbessern, usw.
Aber am wichtigsten ist halt, deine Gegenstände haben wenig Aufwand, was die verschiedenen Werte angeht. Der Rest sind Werte vom Player. Die brauchst du aber ja nicht zu suchen, die hängst du einfach nur dem jeweiligen Spieler an.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.
-
Anschein hat sich dein Hauptproblem von alleine gelöst.
Leider nicht, es besteht noch weiterhin.
Wie kann ich die Performance im Editor verbessern? -
Bisher habe ich noch immer keinen Grund gefunden, warum du all diese Gegenstände in so große Datenbanken packen musst.
Aber eins habe ich durchaus bemerkt. Ich glaube, du überschätzt Spiele, egal wie komplex sie jemals auf den Markt gekommen sind, sehr stark. Ein Gegenstand mit 100 Werten? Was soll denn der Spieler damit anfangen? Soll er sich erstmal eine Stunde Zeit nehmen, um sich diese Werte anzuschauen? Und dann noch einmal zwei Stunden um zu entscheiden, welcher Gegenstand für ihn positiv ausfällt, um dann damit in das Spiel zu ziehen?
Ich weiß ja nicht genau welches Genre du bedienen willst, klingt für mich nach MMORPG, aber damit überforderst du einfach die Spieler. Die wollen spielen und keine "Aktenkurse" vergleichen.
Das bisher beste und meiner Ansicht nach noch immer das MMORPG, an dem sich alle anderen messen müssen, ist Ultima Online. Die Möglichkeiten waren fast endlos in dem Spiel, naja, zumindest bis EA das Ganze in die Hand genommen hat, aber auch da waren nicht so wahnwitzige Werte auf einem Gegenstand.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.
-
Das hast du ja bisher nicht erwähnt. Wichtige Information.
Aber dennoch stellt sich mir die Frage, warum du dann mehrere 100.000 Objekte durchsuchst, wenn du dann doch nur das Inventory eines anderen Spielers durchsuchst, oder auflistest, zum Beispiel bei einem Händler oder so. Ich nehme mal an, dass ein Spieler in seinem Inventory keine 100.000 Objekte halten kann.
Nehmen wir mal an, du hast eine Parentklasse "Schwert", in dieser Klasse gibt es Schwerttyp, also sowas wie Breitschwert, Langschwert, Katana oder so. Dann noch Atackgeschwindigkeit, also Breitschwert langsamer als Katana, usw. Dann noch Schaden, da macht das Breitschwert mehr Schaden als das Katana usw. Eventuell noch besondere Namen, wie Excalibur, Knochensmascher etc. Dann vielleicht noch die Qualität, von Einfach bis Meistergeschmiedet. Haltbarkeit usw.
Wenn du jetzt dein Inventar öffnest, oder das eines anderen Spielers, dann hast du erstmal nur eine Liste mit den Childs vom Parent der Klasse Schwert und diese werden dann mit den gespeicherten Daten gefüllt. Du musst nicht jedes Mal ein neues Schwert erstellen, nur die Werte und Eigenschaften.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.