Datenbank erweitern

  • Exile
  • Datenbank erweitern

    Moin ArmaWorld Community,

    ich bin in diesem Forum seit heute Gast, auch wenn ich unangemeldet einige Zeit schon mitlese.

    Ich habe ein Projekt in den Fingern, bei dem ich jetzt eine Sache erledigen muß, bei der ich allein nicht mehr weiter komme.
    Ich habe ein Exile Projekt in der Entstehung, dass ich stark anpasse um einen wirklichen Hardcore Server zu erstellen.
    Dazu gibt es neben Exile auch ACE3, TFAR und viele andere Dinge, sowie einen Exile Mod der am Ende nicht mehr viel mit dem Original zu tun hat. Das ganze soll in Richtung Survival gehen.
    Ich habe Exile und ACE3 soweit auch am laufen, jedoch fehlt eine Sache die es perfektioniert und abrundet.
    Und da kommen wir auch zu dem Problem.

    Ich möchte, dass alle ACE3 relevanten Daten zum Gesundheitszustand der Spieler, in einer Datenbank gespeichert werden und auch wieder geladen werden sobald der Spieler auf den Server joint.
    Ich habe mir dazu bereits alle dafür wichtigen Variablen zusammengesucht und habe auch die Dateien, hoffentlich, soweit zusammen die alle Daten von Exile schon in der Datenbank speichern und laden.

    ExileServer_object_player_database_update.sqf
    ExileServer_object_player_database_load.sqf
    ExileServer\extDB\sql_custom_v2\exile.ini

    Ich hoffe ich liege bis hier her noch richtig.
    Mein Problem nun endlich...
    Ich habe überhaupt keinen Plan von Datenbanken und weiß nicht wie ich die Datenbank bearbeiten muß.
    Ist es besser die bestehende Tabelle zu nutzen oder ist es besser eine neue Tabelle zu erstellen?
    Wie muß ich vorgehen? Ist es besser neue Scripts zu schreiben, um die ACE3 Variablen zu speichern oder kann ich sie in die bestehenden mit einfügen?

    Ich hoffe in diesem Fall auf eure Hilfe.

    Vielen Dank schon mal für´s lesen.
    Schöne Grüße
    SkyJunky
  • Ich würde dir empfehlen möglichst wenig der orginalen Exile Dateien und Tabellen zu verändern. Bau am Besten eine Art Erweiterung die zwar Exile vorraussetzt, aber getrennt gespeichert wird.
    So kannst du bei einem Update Exile einfach austauschen oder deine neue Kreation unabhängig veröffentlichen falls du soetwas geplant hast.

    Kleine Beispiel:
    Wenn man einen Mod baut der CBA nutzt, dann fügt man die neuen Skripte auch nicht bei CBA hinzu...
    (Ist ein schlechtes Beispiel aber das Prinzip sollte klar sein)
    Arma 3 Coder
    ArmaWorld Team
    Project Reality Arma 3 Developer
  • Hey, danke schon mal für deine Antwort. Wir ändern einige Sachen in Exile, weil es nicht anders geht. Allerdings arbeiten wir schon mit Sinn und Verstand, um uns bei späteren Updates nicht noch einmal die ganze Arbeit machen zu müssen.
    Du hast ganz klar Recht, so viel wie nur möglich durch eigenständige Scripts zu machen.

    Wir basteln derzeit halt viel an der richtigen Einbindung von ACE3. Daher die Frage zu den Datenbanken. Es ist vermutlich also besser eine eigene Tabelle zu machen und auch die Scripts separat zu machen.

    Mein Problem bleibt aber leider das gleiche. Ich bräuchte jemnden der mir eben bei den Datenbanke unterstützend unter die Arme greift.

    Schönen Gruß
    SkyJunky
  • Ich habe alle Variablen die ich speichern will schon zusammen. Das steht so schon im ersten Post. Ich brauche jemanden, wie oben geschrieben, der mir erklärt, wie ich die bestehende Tabelle richhtig erweitern kann und wie ich diese richtig einbinde. So, das Arma die bereits von mir gesuchten ACE Variablen ohne Fehler in die Tabelle schreibt und wieder liest.

    Sorry aber wenn ich Variablen gesucht hätte, hätte ich nicht nach Datenbanken gefragt.

    @Dorbedo, ja und wie man diese Tabelle mit Arma verbindet.

    Schöne Grüße
    SkyJunky
  • Zu erstens: tutorialspoint.com/mysql/
    Zu zweitens: arma2netmysqlplugin.readthedocs.io/en/latest/


    Meister Google ist dein bester Freund...

    Und ich bin mir ziemlich sicher, dass keiner hier Zeit und Lust hat dir eine Schritt für Schritt Anleitung zu geben, die dir alles erklärt, was du noch nicht weißt. Ein bisschen Selbstinitiative ist hier schon gefragt. Anderst sieht das aus, wenn du nachher ein konkretes Problem hast. Wenn du damit hier ankommst, dann bin ich mir sicher, dass es genügend Leute gibt, die dir damit helfen können und werden, aber wie gesagt eben erst wenn du selbst ein bisschen Mühe investiert hast ;)
    Entwickler von SQDev
    Co-Entwickler von OurAltis
    "Nur Event-Team" Mitglied bei ArmAWorld

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Raven ()

  • Zum zweiten Teil solltest du dir lieber ein Tutorial für die extDB suchen.
    Ein paar Tipps:
    Wenn du ein wenig SQL kannst, solltest du dir die "SQL_CUSTOM.ini" files einmal anschauen. Da stehen die SQL Befehle drin, welche von der Extension aufgerufen werden.
    Dort fügst du deine eigenen Abfragen hinzu oder erstellst eine eigene Datei. Die Abfragen führst du dann per Extension aus und bekommst von ihr das entsprechende Ergebnis zurück. Das wandelst du dann noch von einem String in den entsprechenden Arma3 Datentyp um und fertig. (Evtl. zum Verständnis einmal die entsprechenden Exile-Funktionen anschauen.)
  • Moin,

    also gut, ich möchte das hier so nicht unkommentiert stehen lassrn.

    Als erstes danke für eure Antworten, aber...

    Ich habe einen Fehler gemacht und den werden ich schleunigst beheben. Ich habe meine Frage nicht präzise genug gestellt.

    Was ich aber auch richtig stellen muß ist, das ich mich sehr wohl mit dem Thema schon tiefer selbst beschäftigt habe. Ich stelle hier nicht eine Anfrage im Forum, wenn ich nicht selbst schon Tage lang über dem Problem gebrütet hätte. Und ja, Google ist dein Freund, solange du auch genau dein Problem definieren kannst. Da liegt auch mein Fehler, ich hätte meine Probleme besser formulieren müssen. Ich habe auch nicht gefragt ob mir einer das macht sondern ob mir das einer erklären kann. Mir hilft es nicht, wenn jemand das für mich erledigt, ich muss es verstehen, so das ich es zukünftig allein lösen kann.

    Back to Topic...

    Ich habe 4 bestehende Tabellen (von Exile). Ich kann eine neue Tabelle erstellen und eine bestehende erweitern. Ich habe aber Probleme mit der Anbindung.
    Die custom.ini heißt bei Exile exile.ini und diese habe ich mir angeschaut.

    1. Frage
    Die ini ist die Schnittstelle zwischen Datenbank und den Scripts von Exile, richtig?

    In der ini ist jede Variable, ob Player, Account, Clanabhängig usw, nummerisch definiert. Bsp. Geld = 1, Health = 2 usw.
    In den Scripts von Exile finde ich das im Array ja wieder. Bsp. Geld = 0 (da der Array ja mit 0 beginnt statt mit 1) Health = 1 usw.

    2. Frage
    Bin ich gedanklich bis hier noch richtig?

    Ich habe in den Scripts eine Load und eine Update SQF. Die Load um Variablen beim joinen abzufragen und Update um die Variablen an die Datenbank zu übergeben. Soweit so gut.
    Was mir aber völlig unklar ist und das ist die eigentliche Frage...

    3.Frage
    Wie oder wo wird definiert, in welche Tabelle und welche Spalte der Datenbank eine bestimmte Variable gespeichert wird?

    Ich habe nichts gefunden das bestimmt, dass in Tabelle Player in Spalte 53, xyz gespeichert wird. Gleiches gilt auch für die load Abfrage. Ich sehe einfach keine Definition dazu. Ich bin zur Zeit auf Arbeit und habe kein Bsp Script zur Hand, ich werde aber zur Veranschaulichung Auszüge aus den Scripts nachreichen.

    Ich hoffe ich habe mich gut und verständlich ausgedrückt. Ich möchte gern die Zusammenhänge verstehen.

    Ich werde mir die von Raven eingefügten Links auch noch mal intensiver ansehen, ich bin in den letzten Tagen noch nicht dazu gekommen. Ich wollte aber gern meine Scharte hier auswetzen.

    Vielen Dank für eure Geduld mit mir.

    Schöne Grüße
    SkyJunky
  • Ich möchte deine Fragen wie folgt beantworten:
    1. Frage:
    Exakt. Die "*.ini" ist Teil der Schnittstelle zwischen Arma und der Datenbank. In dieser Datei werden die SQL Abfragen aufgelistet und definiert was übergeben wird und was zurück gegeben wird. In dieser Datei legst du auch fest, was an welcher Stelle übergeben und zurückgegeben wird (Arrayposition).

    2.Frage:
    Ich habe mir einmal die aktuelle Exile_Server Version geladen. Dort findest du die Funktionen "ExileServer_system_database_query_fireAndForget" und ähnliche. Diese Funktionen sind die Schnittstellen zur Extension.

    Ein Beispiel:

    Um dem Spieler mit der Spieler mit der UserID "123MeineUserID" den Kontostand auf 50.000 zu setzen führst du folgendes aus:
    ["setPlayerMoney","123MeineUserID",50000] call ExileServer_system_database_query_fireAndForget;


    Durch die Funktion wird folgender String an die Extension gesendet:
    "extDB2" callExtension "1:123435678:setPlayerMoney:123MeineUserID:50000";
    ("123435678" ist hierbei ein Beispiel für die SessionID von Exile. Die wechselnde SessionID ist ein eingebauter Sicherheitsmechanismus von Exile.
    Generell steht dort ein einfacher String. Dieser gibt an, welche Protokolle (*.ini - Datei) genutzt werden soll. Dieser String wird bei der Initialisierung der Datenbank festgelegt.)


    Die Extension nutzt nun folgendes Protokoll (aus der *.ini Datei):

    SQL-Abfrage

    1. [setPlayerMoney]
    2. SQL1_1 = UPDATE player SET money = ? WHERE id = ?
    3. Number of Inputs = 2
    4. SQL1_INPUTS = 1,2

    Durch diese Definition führt die Extension folgende SQL Abfrage durch:
    UPDATE player SET money = 50000 WHERE id = 123MeineUserID;


    Zur 3. Frage:
    Wenn du dir das Beispiel anschaust, dann siehst du dort, dass bei "SQL1_INPUTS" definiert ist, was ich an welcher Stelle übergebe. Analog dazu funktioniert das auch mit der Rückgabe. Schau dir einfach einmal die anderen Abfragen von Exile an. Ich denke, dass es selbsterklärend ist.



    So einfach ist das. ;)



    // EDIT
    Noch ein Beispiel für die Abfrage von Werten:

    Der Aufruf:
    ["getClanInfo","123MeineUserID"] call ExileServer_system_database_query_selectSingle;


    Der String, welcher an die Extension geschickt wird:
    "extDB2" callExtension "1:123435678:getClanInfo:123MeineUserID";


    Der Protokolleintrag:

    Quellcode

    1. [getClanInfo]
    2. SQL1_1 = SELECT name,leader_uid FROM clan WHERE id = ?
    3. Number Of Inputs = 1
    4. SQL1_INPUTS = 1
    5. OUTPUT = 1-STRING,2-STRING
    Ein Beispiel für die Table "clan"

    idleader_uidclan
    123MeineUserIDBestLeaderSuperClan


    Die Rückgabe der Extension:
    "[1,[""SuperClan"",""BestLeader""]]"

    Die Rückgabe der Funktion:
    ["SuperClan","BestLeader"]

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Dorbedo () aus folgendem Grund: Beispiel für Abfrage