Sorry wenn ich mal nachfrage aber könntest Du mal aktuelle Logs hier reinstellen? server und client rpt und natürlich das extDB log
Die dlls haste auch schon installiert? DLLs
Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.
Sorry wenn ich mal nachfrage aber könntest Du mal aktuelle Logs hier reinstellen? server und client rpt und natürlich das extDB log
Die dlls haste auch schon installiert? DLLs
Für die extDB brauchst du glaube ich auch die 32 bit Version ;-). Für extDB2 auf jeden Fall.
Hast Du die 32-Bit dll installiert? Also .NET 32 bit wenn ich mich nicht irre.
CookieGaming jepp im log kommt er gar nicht bis zum laden der DB Verbindung.
Du hast das Script auch in die DB geladen und ausgeführt? Welche Fehlermeldung kommt?
So und hier für Dich. Du musst arma3 durch deinen User ersetzen.
DELIMITER $$
--
-- Procedures
-- Edit arma3 to match a user in MySQL
-- For external databases: Edit localhost to match arma3server IP
--
CREATE DEFINER=`arma3`@`localhost` PROCEDURE `resetLifeVehicles`()
BEGIN
UPDATE `vehicles` SET `active`= 0;
END$$
CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteDeadVehicles`()
BEGIN
DELETE FROM `vehicles` WHERE `alive` = 0;
END$$
CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldHouses`()
BEGIN
DELETE FROM `houses` WHERE `owned` = 0;
END$$
CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldGangs`()
BEGIN
DELETE FROM `gangs` WHERE `active` = 0;
END$$
CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldContainers`()
BEGIN
DELETE FROM `containers` WHERE `owned` = 0;
END$$
CREATE DEFINER=`arma3`@`localhost` PROCEDURE `deleteOldWanted`()
BEGIN
DELETE FROM `wanted` WHERE `active` = 0;
END$$
DELIMITER ;
Alles anzeigen
Moin,
powerafro2 hat absolut recht. Ich gebe trotzdem mal einen Tipp ab . Du hast den DB User im altis.sql Script nicht geändert oder?
Gruß,
moeck
Hast Du schon mal im Log geschaut ob da ein Fehler kommt?
Schau mal bitte in die Functions.hpp könnte sein, dass da der Fehler ist
Moin,
leg einfach einen Ordner ausweis an. Entweder direkt im Hauptverzeichnis oder im core ist völlig egal.
Die Konfiguration machst du mit dem Eintrag. Hier im Beispiel wäre es der Ordner ausweis direkt im Hauptverzeichnis.
Gruß,
moeck
Moin,
da ja anscheinend Interesse besteht hier mal das TuT dafür. Leider habe ich es noch nicht geschafft das mit den PlayerTags ausführlich zu testen aber zu mindestens der Ausweis sowie Z Inventar und Schlüsselweitergabe funktionieren . Kurz zum Hintergrund wir wollten auf unserem Server die Playertags abschalten, da man ja auch im echten Leben seinen Namen nicht über dem Kopf trägt
. Leider gab es dann immer noch Leute die dann der Meinung waren das Z-Inventar bzw. die Schlüsselweitergabe dafür zunutzen sich die Namen der anderen Leute zu beschaffen. Also haben wir auch hier eine Filterfunktion eingebaut um das Z-Spotten zu unterbinden. Des Weiteren wollten wir aber keine permanten Ausweise nutzen und man "kennt" sich halt immer nur bis zum Weltuntergang.
Sollte ihr die folgenden Erweiterung verwenden bitte ich Euch die Änderungen in den Dateien zu dokumentieren und mich als Modifier einzutragen!
Hiermit untersage ich die Verbreitung des von mir verfassten Tutorials in anderen Foren ohne vorher mein Einverständnis dazu einzuholen.
Also fangen wir mal an:
1. Einbinden eines Ausweises:
Öffnet Euere Functions.h in der Missiondatei
2. Erstellt 2 neue Dateien im Ordner ausweis
//Author: PierreAmyf ### Some edits by Lost of Paradise (Sebi, Oktas, moeck)
if(isServer)exitWith{};
private["_msg","_unit"];
_unit = _this select 0;
life_known_Players pushBack _unit;
_msg = _this select 1;
hintSilent parseText _msg;
Achtung in der Ausweiszeigen ist die einzige Stelle die sich je nach Version unterscheidet! Achja wenn ihr eine Version ab 4.x verwendet solltet ihr dann auch den Aufruf in der CFGRemote freigeben sonst kann es nicht funktionieren.
//Author: PierreAmyf ### Some edits by Lost of Paradise (Sebi, Oktas, moeck)
if(isServer)exitWith{};
private["_ziel", "_rang", "_marke", "_org", "_message", "_rang","_name"];
if(vehicle player != player )exitWith{};
_ziel = cursorTarget;
if(isNull _ziel) then {_ziel = player;};
if(!(_ziel isKindOf "Man")) then {_ziel = player;};
if(!(alive _ziel)) then {_ziel = player;};
if(player distance _ziel > 6) exitWith {hint parseText format ["<t color='#FFFF00'>Deine Arme sind viel zu kurz um den Ausweis zu zeigen! Geh näher ran.</t>"]}; // Nix mehr mit auf 500m Ausweis zeigen.
switch(playerSide)do{
case west:{
switch (call life_coplevel) do{
case 1: { _rang = "Paradise Police Dept."; };
case 2: { _rang = "Zoll"; };
case 3: { _rang = "Paradise Police Dept."; };
case 4: { _rang = "Paradise Police Dept."; };
case 5: { _rang = "Paradise Police Dept."; };
case 6: { _rang = "Paradise Police Dept."; };
case 7: { _rang = "Paradise Police Dept."; };
default { _rank = "Error";};
};
_marke = "marke_cop";
_org = "Polizei Altis";
};
case east:{
switch (call life_adaclevel) do{
case 1: { _rang = "ADAC Praktikant"; };
case 2: { _rang = "ADAC Azubi"; };
case 3: { _rang = "ADAC Geselle"; };
case 4: { _rang = "ADAC Techniker"; };
case 5: { _rang = "ADAC Meister"; };
case 6: { _rang = "ADAC Co.Chef"; };
case 7: { _rang = "ADAC Chef"; };
case 8: { _rang = "Leitung"; };
};
_marke = "marke_ziv";
_org = "ADAC Altis";
};
case independent:{
switch (call life_mediclevel) do{
case 1: { _rang = "Ersthelfer"; };
case 2: { _rang = "Rettungshelfer"; };
case 3: { _rang = "Rettungsanitäter"; };
case 4: { _rang = "Notfallsanitäter"; };
case 5: { _rang = "ARS"; };
case 6: { _rang = "Lehrrettungsassistent"; };
case 7: { _rang = "ÄrztlicherLeiter"; };
default { _rank = "Error";};
};
_marke = "marke_medic";
_org = "Altis Rescue Service";
};
case civilian:{
if(playerSide == civilian)then{
_rang = "Zivilist";
_org = "Republik Altis";
_marke = "marke_ziv";
// Gruppen spezifische Ausweise, wenn man möchte kann man Gruppierungsausweise hinterlegen. Die funktionieren nur, wenn man die Lizenz besitzt und einen entsprechenden Clantag oder Nachnamen trägt!
if ((license_civ_group) && (name player find "Group" != -1)) then { _marke = "marke_group"; _org = "Group";};
}else{
_rang = "Zivilist";
_marke = "marke_abi";
_org = "Republik Altis";
};
};
};
//Die Bilder müssen in einen entsprechenden Ordner abgelegt werden in unserem Fall icons
_message = format["<img size='10' color='#FFFFFF' image='icons\%1.paa'/><br/><br/><t size='2.5' color='#F4FA58'>%2</t><br/><t size='1.8'>%3</t><br/><t size='1'>%4</t>",_marke, name player, _rang, _org];
//Hier muss man den Aufruf ändern wenn man nicht die 3.1.4.8 verwendet! Ab 4.4 muss remoteExec verwendet werden! Bitte entsprechenden eurer Version den Aufruf nutzen.
// bis 4.0
[[player, _message],"life_fnc_Ausweissehen",_ziel,false] spawn life_fnc_MP;
// 4.4 - 5.0
//[player,_message] remoteExec ["life_fnc_Ausweissehen",_ziel];
Alles anzeigen
Folgenden Eintrag müsst ihr in der CfgRemoteExec.hpp einfügen, wenn ihr eine Version > 4.x verwendet.
Achtung die Bilder für die Ausweise liegen bei uns im Ordner icons, falls ihr die wo anders ablegen wollt müsst ihr den Pfad in der Zeile _message anpassen. Bitte tauscht den Perso gegen Euere eigenen Bilder aus!
Zum Testen könnt ihr die Bilder in den Ordner Icons schmeissen.
3. Anlage der Variable zur Speicherung der Spieler
So damit habt ihr erstmal den Ausweis eingefügt und ihr speichert die Leute, die euch den Ausweis gezeigt haben.
4. Erweiterung fn_p_updateMenu.sqf
Sucht nach dem folgendem Eintrag
{ if (player distance _x < 10) then {_near_units pushBack _x};} forEach playableUnits;
und ersetz diesen mit diesem Eintrag.
{ life_known_Players pushBackUnique _x; } forEach (units(group player));
{ if((player distance _x < 10) && {_x in life_known_Players}) then {_near_units pushBack _x};} foreach playableUnits;
Anschliessend müsst ihr das noch für den Schlüssel ebenfalls machen.
5. Erweiterung fn_keyMenu.sqf
Sucht wieder nach dem Eintrag
{ if (player distance _x < 20) then {_near_units pushBack _x};} forEach playableUnits;
und ersetzt diesen durch den folgenden
//Gruppenmitglieder sind immer bekannt ;-)
{ life_known_Players pushBackUnique _x; } forEach (units(group player));
{ if((player distance _x < 20) && {_x in life_known_Players}) then {_near_units pushBack _x};} foreach playableUnits;
So jetzt haben wir das Z-Spotten unterbunden und es werden nur noch "Bekannte" im Z-Menü angezeigt sofern sie in Reichweite sind.
6. Playertags (nicht getestet)
Da ich die letzten Tage unterwegs war hatte ich leider keine Zeit um hier einen ausführlichen Test durch zuführen. Sollte ich hier noch was ändern werde ich es natürlich hier dokumentieren bzw. meldet Euch falls es noch Fehler gibt.
Sucht in der fn_playerTags.sqf nach
_units = nearestObjects[(visiblePosition player),["Man","Land_Pallet_MilBoxes_F","Land_Sink_F"],50];
und ersetzt den Eintrag durch
{ life_known_Players pushBackUnique _x; } forEach (units(group player));
_units = nearestObjects[(visiblePosition player),["Land_Pallet_MilBoxes_F","Land_Sink_F"],50];
{ if((player distance _x < 50) && {_x in life_known_Players}) then {_units pushBack _x};} foreach playableUnits;
So damit hätten wir es auch schon geschafft. Ich wünsche Euch viel Spass damit.
In eigener Sache falls Euch das Script gefällt und ihr unbedingt was dafür ausgeben wollt könnt ihr uns gern unterstützen.
7. Funktion über das Mausrad verfügbar machen.
life_actions = life_actions + [player addAction["<t color='#FFFF00'>Ausweis zeigen</t>",life_fnc_Ausweiszeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
Damit kann man seinem Gegenüber erstmal den Ausweis zeigen und anschliessend ist er auch im Z-Menü sichtbar.
Gruß,
moeck
Moin,
je nachdem wo du das brauchst, also auf welche Seite kannst du das beim init mit abfragen.
_queryResult = [_query,2] call DB_fnc_asyncCall;
_uid = _queryResult select 0;
_dein_feld = _queryResult select x; // x steht für die Stelle in der Abfrage der Counter beginnt bei 0
if !(_dein_feld) then { //dein Code }; // bei false wird halt dein Code ausgeführt bei true passiert nix
Könnte als ungefähr so aussehen.
Gruß,
moeck
Moin,
noch eine kleine Frage . Man kann in Zeile 13 doch bestimmt auch das Coplevel mit abfragen oder?
Orginal:
Änderung:
Es geht darum, dass Rekruten bzw. Praktikaten keine Sperrzone setzen können.
Gruß,
moeck
Moin,
na du musst dann eine Query an die DB schicken und die das Ergebnis rausholen. Eventuell kannst Du ja mal das Script posten, dann kann man die helfen.
_query = format["SELECT uid,...,"dein feld" from players WHERE playerid='%1'",_uid];
waitUntil {!DB_Async_Active};
[_query,2] call DB_fnc_asyncCall;
Hier mal eine Standardabfrage
Gruß,
moeck
Moin,
da ich selbst momentan schlecht zum Testen komme stelle ich hier mal eine neue Version zur Verfügung. Eventuell kann die jemand mal testen und hier die Ergebnisse posten. Ich hatte gestern leider immer wieder das Phänomän, dass die Leichen mal sichtbar waren und dann wieder nicht.
/*
File: fn_vehicleDead.sqf
modified by moeck
Description:
Tells the database that this vehicle has died and can't be recovered.
*/
private["_vehicle","_plate","_uid","_query","_sql","_dbInfo","_thread"];
_vehicle = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param;
hint str _vehicle;
if(isNull _vehicle) exitWith {}; //NULL
_dbInfo = _vehicle getVariable["dbInfo",[]];
if(count _dbInfo == 0) exitWith {};
_uid = _dbInfo select 0;
_plate = _dbInfo select 1;
_query = format["UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'",_uid,_plate];
waitUntil {!DB_Async_Active};
_thread = [_query,1] call DB_fnc_asyncCall;
//sleep (1.3 * 60);
if(!isNil "_vehicle" && {!isNull _vehicle}) then {
diag_log format["Vehicle are here %1" count _vehicle];
_dudes = crew _vehicle;
diag_log format["Dudes %1", count _dudes];
{
if !(alive _x) then
{
diag_log format["Dude %1, %2", getPlayerUID _x,_x getVariable["realname", name _x]];
/*_newPos = (getPos _vehicle) findEmptyPosition [(random 5), 10];
_handle = [[_x,_newPos,_vehicle],"TON_fnc_relocateDead",true,false] spawn life_fnc_MP;
waitUntil { scriptDone _handle };*/
moveOut _x;
unassignVehicle _x;
};
} forEach _dudes;
uisleep (1.3 * 60);
diag_log format["Delete %1", _vehicle];
deleteVehicle _vehicle;
};
Alles anzeigen
Ich habe jetzt mal ein paar Logausgaben mit eingebaut um einem Fehler auf die Spur zu kommen.
Gruß,
moeck
Moin,
das Ganze funzt komplett ohne Anpassung an einem SQL Statement . Wie gesagt ich werde ein TUT erstellen so bald ich wieder zugang zum Rechner habe. Ausserdem gilt das auch immer nur für die Server Periode, da es sonst zweck frei ist. Wir nutzen keine permanenten Ausweise bzw. IDs sondern man kann den Namen ändern.
Gruß,
moeck
Moin,
Stig sehr geil der Mod. Ich hätte nur eine ganz kleine Bitte . Ich bräuchte theoretisch Sperrzonen bis 2km statt 1km. Kann man das irgendwo einstellen?
Gruß,
moeck