Nein, die Tabelle musst Du schon von Hand in der DB anlegen
[Tutorial] Permanenter Personalausweis/Dienstausweis - (V1+V2)
-
- Altis Life
-
Rom -
19. Oktober 2016 um 22:22
-
-
wie macht man das denn genau ?
Ich verstehe nicht wie das geht
Nein, die Tabelle musst Du schon von Hand in der DB anlegen
-
So dazu müsste man mal wissen mit welchem DB-Tool Du arbeitest. Grunsätzlich musst halt mit dem Tool die DB öffnen und deine Altis Datenbank auswählen. Anschliessend öffnest Du eine Query (SQL Query) und fügst den geposteten Code ein. Dann noch ausführen klicken und schon sollte die Tabelle erstellt sein.
Natürlich musst Du dich mit dem User anmelden den Du auch in der extDB3 Config verwendest, damit du die benötigten Rechte hast.
Kontrollieren kann man das in dem Du dir mal alle Tabellen in der Datenbank anzeigen läßt. In der Regel gibt es auf der linken Seite eine Navigation wo auch der Punkt Tabellen (Table) mit aufgeführt ist.
-
Könnten wir es per teamviewer machen ?
-
bin heute nicht am rechner, daher wird das nix
-
Ich verstehe nämlich nicht wie es geht
-
bin heute nicht am rechner, daher wird das nix
Habe es mit der Tabelle geschafft aber es klappt immernoch nicht
-
ja dann wieder logs
-
-
Code: extDB Log
[16:11:14:694836 +01:00] [Thread 3292] extDB3: SQL: Error MariaDBQueryException: Input: insertPerso:76561198202150556
Du hast die life_server Variante oder Bestandteile dieser für SQL CUSTOM in Verwendung.
Zitat von RomSuche hier mal im Beitrag nach SQL Custum, die dazugehörigen Dateien hast du wohl versehentlich verwendet. Ansonsten die life_server Version anwenden, in der die SQL Befehle in den SQF Dateien direkt drinn stehen und testen.
In den life_server Scripts für den Perso muss sowas ähnliches enthalten sein:
- SELECT ... FROM perso ...
- INSERT INTO ...
-
Es klappt immernoch nicht da ist jetzt ein neuer Fehler
Code: extDB Log[16:11:14:694836 +01:00] [Thread 3292] extDB3: SQL: Error MariaDBQueryException: Input: insertPerso:76561198202150556
Du hast die life_server Variante oder Bestandteile dieser für SQL CUSTOM in Verwendung.
In den life_server Scripts für den Perso muss sowas ähnliches enthalten sein:
- SELECT ... FROM perso ...
- INSERT INTO ...
Jetzt habe ich aber die richtige life_server Variante benutzt aber klappt immernoch nicht
-
Hast du die Tabelle händisch angelegt oder hast du den SQL Code zum Anlegen ausgeführt? Scheint als würden wichtige Eigenschaften für die Spalte id fehlen, die aber wichtig sind, wie AUTO_INCREMENT
-
Peter Vogel welche Version von MySQL benutzt Du? Das Anlegen der Tabelle funktioniert erst mit MySQL 5.7 . Erst ab der Version werden mehrere Timestamps in einer Tabelle unterstützt.
-
Peter Vogel welche Version von MySQL benutzt Du? Das Anlegen der Tabelle funktioniert erst mit MySQL 5.7 . Erst ab der Version werden mehrere Timestamps in einer Tabelle unterstützt.
Wo kann ich die Version denn sehen ? ich habe die Tabelle mit Navicat gemacht.
-
Hast du die Tabelle händisch angelegt oder hast du den SQL Code zum Anlegen ausgeführt? Scheint als würden wichtige Eigenschaften für die Spalte id fehlen, die aber wichtig sind, wie AUTO_INCREMENT
Ich habe die Tabelle händisch angelegt. Ich weiß nicht wie man das per SQL Code Anlegt
-
Hast du die Tabelle händisch angelegt oder hast du den SQL Code zum Anlegen ausgeführt? Scheint als würden wichtige Eigenschaften für die Spalte id fehlen, die aber wichtig sind, wie AUTO_INCREMENT
Könntest du mir erklären wie man es per SQL Code anlegen könnte ?
-
Peter Vogel ich habe dir eine PN geschickt
-
so Tabelle per Statement angelegt und schon funzt es
-
so Tabelle per Statement angelegt und schon funzt es
Kannst du nochmal PN kommen
-
Permanenter Personal- und Dienstausweis (V2.0) - Deutsch
Hallo zusammen,
hier ein kleines Update zu dieser Version des Ausweises.
- Tutorial für Version 4.5 (Version für 3.1.4.8 ist beigelegt)
- extDB3 (sql_custom.ini-Datei ist optional beigelegt)
- Tipps für BattlEye-Filter sind im Anhang
- Anhang dient auch als Leitfaden, wie was eingefügt werden sollte
- Tutorial setzt eine Standard/Vanilla Altis Life Version (Ordnerstruktur + Variablen) voraus, solltest du eine eigene Version nutzen, bist du auf dich allein gestellt alles anzupassen
- Fragen schadet keinem, immer her damit
- Hilfreiche Dateien für weitere Anpassungen sind im Anhang
- In diesem Beitrag zum Einfügen wird ggf. etwas KnowHow über SQF und ArmA Scripting erwartet (Schwierigkeit 4)...
- Am Ende des Tutorials sind noch Bilder
- Nutzungsbedingungen beachten: License-FvS.txt
Google Drive Freigabelink: Klick mich
Eigenschaften dieser Version oder Link (Klick mich)
-- Dateiverlinkung, da sonst zu viele Zeichen...
Einstellungen/Anpassungen können in der CfgPerso.hpp vorgenommen werden.
Diese Version ist die zweite öffentlich verfügbare und die sich von der V1.0 stark unterscheidet.
Solltest du eine alte Version des Ausweises auf diese hier aktualisieren wollen, dann musst du alle alten Bestandteile des Persos aus der Datenbank, der @life_server und der Missionsdatei restlos entfernen (Tutorial "rückwärts" abarbeiten).
Spoiler anzeigen
Es ist auch eine Version (etwas älter als die V1.0) hier auf http://www.native-network.net sowie http://www.tukku.de zu finden.
Tipp: Erstelle ein Backup deiner aktuellen Mission + @life_server
Datenbank (MySQL)
- Stelle mit einem Tool deiner Wahl (phpmyadmin, HeidiSQL, Navi Cat, ...) eine Verbindung zu deiner Altislife-Datenbank her
- Führe folgendem SQL-Befehl in der SQL-Query aus:
SQL: SQL-Query
Alles anzeigenCREATE TABLE `perso` ( `PersoID` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'Einmalige PersoID', `SpielerUID` VARCHAR(50) NOT NULL COMMENT 'Verweis mit Fremdschlüssel auf fwfvs_rpg_Spielertabelle', `Spielername` VARCHAR(256) NOT NULL COMMENT 'Konvertierter Name des Spielers', `Originalname` VARCHAR(256) NOT NULL COMMENT 'Hinterlegter Name des Spielers für diese Fraktion. Kann nur mit diesem Namen als Profilname beitreten.', `Spielerfraktion` VARCHAR(50) NOT NULL COMMENT 'Hinterlegte Spielerfraktion des Personalausweises eines Spielers', `Persodaten` TEXT NOT NULL COMMENT 'Enthaltene Persodaten', `Mobilfunknummer` VARCHAR(25) NOT NULL, `Ausstelldatum` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`SpielerUID`, `Spielerfraktion`, `Mobilfunknummer`), UNIQUE INDEX `PersoID` (`PersoID`) ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB AUTO_INCREMENT=0;
Die neu angelegte Tabelle heist perso.
@life_server bearbeiten
- Kopiere das Verzeichnis "felixvonstudsinske" aus dem Anhang (aus Perso_Paket_Identitäten\@life_server\addons\life_server\Functions) in folgendes Verzeichnis deiner life_server
- @life_server\addons\life_server\Functions
- In Functions den Ordner hineinkopieren
- Öffne nun die config.cpp aus deiner @life_server aus @life_server\addons\life_server\config.cpp
- Navigiere in deinem Texteditor zu class CfgFunctions
- danach zu class MySQL_Database
- Du solltest nun den tag="???"; für die dortigen Funktion "DB" haben
- Dort fügst du folgenden Schnipsel hinzu
C: life_server\config.cpp-CfgFunctionsclass Personalausweis { file = "\life_server\Functions\felixvonstudsinske\Personalausweis"; class PersoPreInitServer{preInit = 1;}; class PersoAbfrage {}; class PersoNeu {}; class PersoUpdate {}; class PersoLoeschen{}; class PersoUpdateKomplett{}; };
Missionsverzeichnis bearbeiten
Öffne die Datei description.ext
- Navigiere zu class RscTitles { und füge nachfolgende #include's untereinander ein
- #include "felixvonstudsinske\Personalausweis\Dialoge\UserInterface_Dienstausweis.hpp"
- #include "felixvonstudsinske\Personalausweis\Dialoge\UserInterface_Personalausweis.hpp"
- #include "felixvonstudsinske\Personalausweis\Dialoge\UserInterface_Serverteamausweis.hpp"
- Navigiere zu class CfgDebriefing { und lege dort neue Klassen an
Code: description.ext-CfgDebriefing
Alles anzeigenclass perso_name { title = "Fehler im Ausweis"; subTitle = "Fehler im Personalausweis"; description = "Profilname (profileName) ungleich dem Spielernamen (name player)."; pictureBackground = ""; picture = ""; pictureColor[] = {0,0.3,0.6,1}; }; class perso_abbruch { title = "Mission verlassen"; subTitle = "Du hast die Mission beim Erstellen des Ausweises verlassen."; description = ""; pictureBackground = ""; picture = ""; pictureColor[] = {0,0.3,0.6,1}; };
Und zum Schluss ganz am Ende der description.ext folgendes einfügen: #include "felixvonstudsinske\CfgPerso.hpp"
Öffne die Datei CfgRemoteExec.hpp
Prüfe nun ob bei class Commands { der Befehl systemChat mit dem Wert allowedTargets=1; oder Wert allowedTargets=0; hinterlegt ist. Falls dem nicht so ist, dann füge folgendes ein:
Gegebenenfalls sind Macros in dieser Datei anwendbar. Du kannst natürlich den Codeschnipsel auf die Macros anpassen.
Gehe nun zu class Functions { und füge dort folgendes hinzu:
Code: CfgRemoteExec.hpp - Functions
Alles anzeigenclass life_fnc_SpielerBekanntHandle { allowedTargets = 0; }; class life_fnc_ENS_Hint { allowedTargets = 1; }; class life_fnc_PersoZeigenAnfordern { allowedTargets = 1; }; class DB_fnc_PersoAbfrage { allowedTargets = 2; }; class DB_fnc_PersoUpdate { allowedTargets = 2; }; class DB_fnc_PersoLoeschen { allowedTargets = 2; }; class DB_fnc_PersoNeu { allowedTargets = 2; }; class life_fnc_PersoAbfrageRueckgabe { allowedTargets = 1; }; class life_fnc_persozeigen { allowedTargets = 1; };
Hier gilt das Gleiche mit den Macros.
Funktionen definieren
Navigiere in deiner Functions-Datei zu folgender Stelle Life_Client_Core
und füge folgendes in der Klasse ein:
Code: class Life_Client_Core {}
Alles anzeigenclass Carter_System { file = "felixvonstudsinske\System"; class ArrayIndexErhalten {}; class ENS {}; class ENS_Hint {}; }; class Personalausweis { file = "felixvonstudsinske\Personalausweis"; class DienstausweisLizenzen {}; class PersoErstellen {}; class PersoErstellenOK {}; class PersoZeigenAnfordern {}; class PersoErstellenFortfahren {}; class PersoPruefenSchaltjahr {}; class PersoWohnortAuswahl {}; class PersoStrasseAuswahl {}; class PersoErstellenBildwahl {}; class PersoGeschlechtswahl {}; class PersoAbfrageRueckgabe {}; class PersoAusgewaehlt {}; class PersoAusweisnummer {}; class PersoSucheTag {}; class PersoKonvertiereSpielername {}; class PersoZeigen {}; class Dienstausweisnummer {}; class DienstausweisRangrueckgabe {}; class PersoLBWahl {}; class PersoNameAendern {}; class PersoLoeschen {}; class PersoErstelleMobilfunknummer {}; class PersoGeneriereAdminausweis {}; class DienstausweisZeigen {}; class SpielerBekanntHandle {}; class ServerteamZeigen {}; };
Texturverzeichnis kopieren
Kopiere nun das Verzeichnis Ausweis aus dem Anhang aus der jeweiligen Missionsversion aus textures in das gleichnamige textures-Verzeichnis deiner Mission.
Scripte und Konfigurationsdateien übernehmen
Kopiere nun das ganze felixvonstudsinske-Verzeichnis aus dem jeweiligen Missionsverzeichnis in das root-Verzeichnis deiner Mission. Dort liegen in der Regel auch die Dateien initPlayerLocal.sqf und description.ext.
Initialisierung/Laden des Persos veranlassen
Öffne aus deinem Missionsverzeichnis folgende Datei core\init.sqf. Suche dir nun aus deiner Sicht eine geeignete Position für folgenden Schnipsel (muss zusammen bleiben):
Code[player,playerside,getPlayerUID player] remoteExec ["DB_fnc_PersoAbfrage",2]; waitUntil {uiSleep 1; 0 cutText["Warte auf Personalien...","BLACK FADED"]; 0 cutFadeOut 9999999; !((player getVariable ["Persodaten",[]]) isEqualTo [])};
Es ist äußerst wichtig, dass du den oben genannten Schnipsel nach diesem Code einfügst waitUntil {life_session_completed};, da sonst die Spielerdaten noch nicht abgefragt wurden und die Geldwerte fehlen.
Wenn du möchtest, dass der Spieler vor der Spawnauswahl seine Identität wählen kann, dann füge den Schnipsel for der großen switch(playerSide)-Anweisung ein.
Scrollmenüs zum Zeigen der Ausweise einfügen in core\fn_setupActions.sqf deiner Mission
Code: switch-playerside-case civilianlife_actions = life_actions + [player addAction["<t color='#00FF00'>Personalausweis zeigen</t>",{[player] remoteExec ["life_fnc_persozeigen",cursorObject];},"",1,false,true,"",'!isNull cursorTarget && (player distance cursorTarget) < 3 && cursorTarget isKindOf "Man" && isPlayer cursorObject']]; life_actions = life_actions + [player addAction["<t color='#00FF00'>Personalausweis ansehen</t>",{[player,0] remoteExecCall ["life_fnc_PersoZeigenAnfordern",cursorObject];},"",1,false,true,"",'!isNull cursorTarget && (player distance cursorTarget) < 3 && cursorTarget isKindOf "Man" && isPlayer cursorObject && (cursorObject getVariable ["restrained",false])']]; life_actions = life_actions + [player addAction["<t color='#00FF00'>Dienstausweis ansehen</t>",{[player,1] remoteExecCall ["life_fnc_PersoZeigenAnfordern",cursorObject];},"",1,false,true,"",'!isNull cursorTarget && (player distance cursorTarget) < 3 && cursorTarget isKindOf "Man" && isPlayer cursorObject && (cursorObject getVariable ["restrained",false]) && (side cursorObject in [east,west,independent])']];
Code: switch-playerside-case west+independentlife_actions = life_actions + [player addAction["<t color='#00FF00'>Dienstausweis zeigen</t>",{[player, switch (playerSide) do {case west:{call life_coplevel}; case independent:{call life_medicLevel}; case east:{call life_adaclevel};},([] call life_fnc_DienstausweisLizenzen)] remoteExec ["life_fnc_DienstausweisZeigen",cursorObject];},"",1,false,true,"",' playerSide == west && !isNull cursorTarget && cursorTarget isKindOf "Man" ']]; life_actions = life_actions + [player addAction["<t color='#00FF00'>Personalausweis zeigen</t>",{[player] remoteExec ["life_fnc_persozeigen",cursorObject];},"",1,false,true,"",'!isNull cursorTarget && (player distance cursorTarget) < 3 && cursorTarget isKindOf "Man" && isPlayer cursorObject']]; life_actions = life_actions + [player addAction["<t color='#00FF00'>Personalausweis ansehen</t>",{[player,0] remoteExecCall ["life_fnc_PersoZeigenAnfordern",cursorObject];},"",1,false,true,"",'!isNull cursorTarget && (player distance cursorTarget) < 3 && cursorTarget isKindOf "Man" && isPlayer cursorObject && (cursorObject getVariable ["restrained",false])']]; life_actions = life_actions + [player addAction["<t color='#00FF00'>Dienstausweis ansehen</t>",{[player,1] remoteExecCall ["life_fnc_PersoZeigenAnfordern",cursorObject];},"",1,false,true,"",'!isNull cursorTarget && (player distance cursorTarget) < 3 && cursorTarget isKindOf "Man" && isPlayer cursorObject && (cursorObject getVariable ["restrained",false]) && (side cursorObject in [east,west,independent])']];
Die hinterlegten Funktionen können auch in diverse Interaktionsmenüs mit eingepflegt werden.
Für die Scrollmenüs sind hinten in dem addAction-Befehl die Anzeigebedingung zu beachten.
Füge nun am Ende der gleichen Datei (fn_setupActions.sqf) folgende ein:
Code[] spawn { waitUntil {!isNil "life_adminlevel"}; if ((call life_adminlevel) > 0) then {life_actions = life_actions + [player addAction["<t color='#FF0000'>Serverteamausweis zeigen</t>",{hint format["Du zeigst %3 (%1, %2) deinen Serverteamausweis.",getPlayerUID cursorObject, side cursorObject, name cursorObject]; [getPlayerUID player,profileName] remoteExec ["life_fnc_ServerteamZeigen",cursorObject];},"",0,false,false,"",'(call life_adminlevel) > 0 && (isPlayer cursorObject) && (alive cursorObject) && cursorObject isKindOf "Man"']];}; }; life_actions = life_actions + [player addAction["Ausweise ausblenden",{("rsc_Serverteamausweis" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; ("dienstausweis" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; ("perso" call BIS_fnc_rscLayer) cutText ["","PLAIN"];},"",1,false,true,"",'(!(isNull (uiNameSpace getVariable ["ui_Personalausweis",displayNull])) || !(isNull (uiNameSpace getVariable ["ui_Dienstausweis",displayNull])) || !(isNull (uiNameSpace getVariable ["ui_Serverteamausweis",displayNull]))) && alive player']];
Scrollmenü für NPC zum Ändern des Ausweises
Codethis addAction ["Ausweisänderung durchführen",{[true] spawn life_fnc_PersoErstellen;},"",0,false,false,"",'playerSide == civilian && (player distance _target < 5)'];
Für weitere Fraktion, muss die Anzeigebedingung angepasst werden. Standard = nur Zivilist kann Ausweisdaten anpassen!
Bilder
Identitätsauswahl - Siehe dazu folgendes Bild:
Identitätseitgenschaften mit detailreicher Vorschau (ohne Ausweisbild):
Personalausweis erstellen:
Personalausweisdarstellung im HUD:
Dienstausweisdarstellung im HUD:
Serverteamausweis, wenn richtig eingestellt:
@life_server\addons\life_server\Functions\felixvonstudsinske\Personalausweis\fn_PersoPreInitServer.sqf
Viel Spaß mit dieser Version, ciao.
Grüße
-