Get Data Table Row dynamisch Werte zuweisen

  • Hi,


    da man ja jetzt Variablen DataTable zuweisen kann und somit auch Arrays und Maps, habe ich mal ein wenig damit rumprobiert.


    Eigentlich eine super Sache, aber leider habe ich ein Problem wenn im Editor noch nicht klar ist welches DataTable und RowName den zur Laufzeit benutzt werden.


    Hier mal ein Beispiel.
    Es handelt sich um eine Action Bar die ja erstmal leer ist. Ziehe ich aus dem Inventar etwas in einen Slot bekommt dieser eine Item-ID und zeigt dann alles gewünchte an.
    Drücke ich die Taste für diesem Slot wird mit Hilfe dieser ID aus den relevanten DataTables die Informationen geholt. Diese hole ich mir aus einer Map welche ein Enum als Schlüssel und ein DataTable als Wert hat.
    Funktioniert eigentlich auch gut solange ich mir das nur anzeigen lasse. Nur Get Data Table Row spielt nicht mit und ich bekomme einen Fehler beim kompilieren.


    Jemand eine Idee wie man das am besten lösen kann



    Gruss
    DarkFaces


    Edit: Seh gerade das ich ein generelles Problem mit DataTable-Variablen habe. Keine Ahnung wieso, muss ich erstmal schauen.


    Edit 2: Get Data Table Row scheint überhaupt nicht mit Variablen zu funktionieren. Get Data Table Row Names hat damit kein Problem. Bis zum Print ist es ok, dann wieder Error.


  • @Annubis


    Ich habe mehrere DataTables. Ein Master DataTable das nur die ID, Item Namen, Mesh und Category enthält.
    Der Item Name ist dann der RowName für die einzelnen Category-DataTables.


    Da der Slot nur die ID kennt muss ich anhand der Category die Daten aus dem entsprechendem DataTable auslesen.
    Ein Switch on Category Enum legt dann fest was passiert bei Benutzung eines Slots. Bei einer Waffe wird sie gezogen und bei einem Heiltrank werden die Werte aus dem Category-DataTable mit den Character Stats verrechnet.


    War halt ein versuch das alles dynamisch zu machen um hinterher einfach Änderungen vornehmen zu können.

  • Ah deshalb so umständlich. Interessantes System, ne derartige Verschachtelung ist mir nicht in den Sinn gekommen. Wäre mir auch viel zu viel Aufwand -.-. Lässt sich dieses System überhaupt über ConstructionScript automatisieren oder musste da jedesmal was ändern, wenn du ein neues BP erstellst? Ich mein, die Usability gehört ja als Enum in den DatatableStruct, Was aus meiner Sicht einfacher wäre.

  • Ah deshalb so umständlich. Interessantes System, ne derartige Verschachtelung ist mir nicht in den Sinn gekommen.

    War doch deine Idee. :D


    Das ganze läuft natürlich über Construction Scripts. Ich habe mich aber dafür entschieden für jede Kategorie eine ChildClass zu erstellen. Ich kann jetzt zwar aus einem Schwert keinen Heiltrank machen, aber jede Waffe die zu dieser Kategorie gehört.
    Grund ist einfach das die verschiedenen Kategorien doch sehr unterschiedliche Werte haben und ich das sauber getrennt haben wollte. Irgendwann sind es ja einige Dutzend Items oder noch mehr, da ich viel Wert auf ein vernünftiges Crafting-System lege.


    Außerdem ist im MasterItem auch die Logik für das anzeigen des Name und beim Aufnehmen wird das Item dem Inventar zugefügt und dann zerstört. Bei Kräutern sieht das aber anders aus, diese sollen nach einer gewissen Zeit wieder respawnen. In einer ChildClass kann ich dann die entsprechend Funktion einfach überschreiben.


    Ob das alles so bleibt kann ich aber noch nicht sagen, ist halt ein Prototyp um das mal zu testen. Bis jetzt läuft es aber ganz gut so.


    MasterItem ConstructionScript (hab inzwischen noch geändert das das Struct in jedem Durchlauf gesetzt wird, reicht ja wenn der Vergleich True ergibt ^^ )


    Category ConstructionScript

  • Kannst auch eine Tabelle in Excel oder so erstellen, mit allen deinen Items die man craften kann und wieviele Resourcen sie brauchen, ob sie Schaden machen oder nicht, usw. und dann als DataTable importieren.


    Ich hab übrigens nur ein MasterItem_BP, das seine Daten je nachdem welches Item grad relevant ist, mit dem DataTable anpasst^^
    Ist jedenfalls übersichtlicher als wenn ich für jedes einzelne Item ein eigenes BP hätte und kann die Werte sogar ändern, wenn UE4 nicht geöffnet ist...

  • Ich hoffe ja, dass sich Epic eines Tages mal ein Ruck gibt und endlich eine längst überfällige SQL DB einbindet.
    Bis dahin muss man sich eben mit den Data Tables zu frieden geben oder das Vertrauen in Plugins stecken.


    Falls man also DTs nutzt und viele Items speichern möchte, sollte man besser nicht auf ein ID-System bauen, was ständig die gesamte Tabelle abgrasen muss, um anhand der ID das richtige Item zu finden.
    Das kostet Zeit und Performance!


    Die "ID" der Items - also das, nachdem man ein Item später aus der Tabelle sucht, sollte gleich der RowName sein!
    Somit entfällt komplett das Compare der gesamten Tabelle und man kann direkt zum Item springen und es auslesen.
    Irgendwann hatte ich das schonmal recht unbeachtet geschrieben. ;)

  • Ich kenn mich mit SQL DB überhaupt nicht aus...
    Meinst du es wäre besser, lieber mehrere kleine DataTables zu benutzen, statt einem großen?

  • Falls man also DTs nutzt und viele Items speichern möchte, sollte man besser nicht auf ein ID-System bauen, was ständig die gesamte Tabelle abgrasen muss, um anhand der ID das richtige Item zu finden.
    Das kostet Zeit und Performance!

    Der Loop im Construction Script ist ja nur für den Designer damit der keine IDs benutzen muss.
    Konnte bisher noch keinen Nachteil entdecken, ganz im gegenteil, ich habe jederzeit anhand der ID Zugriff auf alles was ich brauch.

    Die "ID" der Items - also das, nachdem man ein Item später aus der Tabelle sucht, sollte gleich der RowName sein!
    Somit entfällt komplett das Compare der gesamten Tabelle und man kann direkt zum Item springen und es auslesen.
    Irgendwann hatte ich das schonmal recht unbeachtet geschrieben.

    Das habe ich selbstverständlich so gemacht. Was spricht dagegen wenn der RowName 1,2,3 ist? Kann man gut in der Tabellenkalkulation automatisieren und muss sich nicht mit Schreibfehler rumärgern.


    Hab das jetzt auch so geändert das das richtige DataTable mit den Werten im Master DataTable hinterlegt wird.


    Vielleicht ändere ich es auch noch so das die DataTables mit den Werten für die einzelnen Kategorien auch die selbe ID/RowName wie im Master DataTable verwenden. Das kann man ja gut im Tabellenkalkulation Programm automatisieren. Dann kann ich mir alle Werte direkt holen, ohne Umweg über das Master DataTable.



    Ich hoffe ja, dass sich Epic eines Tages mal ein Ruck gibt und endlich eine längst überfällige SQL DB einbindet.
    Bis dahin muss man sich eben mit den Data Tables zu frieden geben oder das Vertrauen in Plugins stecken.

    Wofür braucht man den bei ein paar hundert Items eine Datenbank. Bei einem Onlinespiel ok, aber da liegt die eh auf dem Server. Für ein Item System sehe ich da keinen Vorteil.
    Lasse mich aber gerne eines besseren belehren.