PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script/Datenbankabfrage ausführen (Server)


Sol.LrMartyn
17.02.2015, 20:22
Hallo zusammen,

ich arbeite momentan an einer Mission in welcher die Personen, die verbinden, überprüft werden sollen. Gibt es die Person schon in der DB (die auf dem Server liegt) (Windows) dann soll ein Fahrzeug gespawnt werden (dient nur zur erfolgsmeldung). Gibt es die Person nicht, dann soll die Person mit Name und UID eingetragen werden.

Das hier (http://hx3.de/editing-scripting-167/script-nur-server-bzw-client-ausfuehren-19285/) hatte ich mir durchgelesen, aber irgendwie scheint das nicht ganz zu funktionieren, was ich fabriziert habe. Ohne das isServer bei beiden Scripts funktioniert das im Editor mit lokaler Mysql-DB wunderbar.


//init.sqf
database = compileFinal "'NAME'";
[player] execVM "scripts\mysql\connect.sqf";



//scripts\mysql\connect.sqf
if (!isServer){
_player = _this select 0;
_playeruid = getPlayerUID player;
_myProfileName = profileName;
[[[_player, _playeruid, _myProfileName],"scripts\server\mysql\connect.sqf"],"BIS_fnc_execVM",false,true] call BIS_fnc_MP;
};



//scripts\server\mysql\connect.sqf
if (isServer){
_player = _this select 0;
_playeruid = _this select 1;
_myProfileName = _this select 2;
_veh = "C_SUV_01_F" createVehicle position _player;

_database = call database;
_query = format ["SELECT name FROM `players` WHERE name = '%1'", _myProfileName];
_return = nil;
while {isNil("_return")} do {
_return = "Arma2Net.Unmanaged" callExtension format ["Arma2NETMySQLCommandAsync ['%1', '%2']", _database, _query];
if (_return == "") then {
_return = nil;
};
sleep 0.5;
};
if (_return == '[[]]') then {
_query = format ["INSERT INTO `players` (name, playeruid) VALUES ('%1', '%2')", _myProfileName, _playeruid];
_return = nil;
while {isNil("_return")} do {
_return = "Arma2Net.Unmanaged" callExtension format ["Arma2NETMySQLCommandAsync ['%1', '%2']", _database, _query];
if (_return == "") then {
_return = nil;
};
sleep 0.5;
};
} else {
_veh = "C_SUV_01_F" createVehicle position _player;
};
};


Danke und Grüße

Nokman
18.02.2015, 12:34
Meine empfehlung Verhaue das gesamte und nutze Extdb und baue auf diesen auf.

Sollte es wirklich nicht viel sein was da gespeichert wird so sieht es im moment aus kanst du auch einfach den Profilnamenspace des servers nehmen zum speichern.

Sol.LrMartyn
18.02.2015, 13:54
Hallo Nokman,

erstmal danke für deine Antwort. Die weiteren Pläne (warum eine Mysql) ist relativ einfach. Das ganze soll noch mit einer Webseite verbunden werden.

Ist extDB nicht das AddOn welches Files innerhalb des ArmA 3 Server Verzeichnisses schreibt? Files will ich auf jeden Fall umgehen :-) (Wobei ne DB ja auch nix anderes ist, aber ich denke Du weißt worauf ich hinaus will). Aber ich schau mit extDB nochmal an.

Und nameSpace geht ja nicht wenn ich
- den Server umziehen will,
- eine Webseite einbinden will,
oder?

Ach und ähm, da kommt zu den Spalten und Tabellen natürlich noch einiges dazu, aber ich will ja klein anfangen

Es ist noch kein Meister vom Himmel gefallen :D

Nokman
18.02.2015, 17:14
nö dann ist ein namensspace nicht angebracht. Extdb ist die Neue Arma2net
Bessere Abfrage und weniger Fehleranfällig und viel schneller.

Was du meinst ist inidbi (indbi) welches im arma verzeichnis eine DB anlegt.

Kan nur Extdb empfehlen da es weiterentwickelt wird und auch unter Linux funktionert da du Umzug des Servers angesprochen hast.

Sol.LrMartyn
18.02.2015, 17:42
Hallo Nokman,

danke für die Info. Trotzdem verstehe ich nicht wieso mein Skript nur ohne isServer funktioniert :-)

Nokman
19.02.2015, 21:05
Hatte mir den Script bis jetzt nicht angeschaut.

Noch ein Tip als Startparameter: -showScriptErrors verwenden damit siehste die meisten fehler Deiner ist ein Flüchtigkeitsfehler:
Richtig
if (_return == '[[]]') then {
Falsch
if (isServer){

Sol.LrMartyn
20.02.2015, 08:35
Das ist nicht wahr... :rolleyes:
Woops, ich probiers dann nochmal richtig :D
-> Wenigstens ists nur ein kleiner Fehler und ich bin vielleicht doch nicht so dämlich wie ich dachte ^^

Sol.LrMartyn
20.02.2015, 18:56
So es läuft... ^^

*close*