Dann spawn die vielleicht zu Tief.
Kannst ja noch folgendes ändern:
_container setPosATL [_pos select 0,_pos select 1,(_pos select 2) +0.5];
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.
Dann spawn die vielleicht zu Tief.
Kannst ja noch folgendes ändern:
_container setPosATL [_pos select 0,_pos select 1,(_pos select 2) +0.5];
Nachgefragt, meinst Du mit den selben Häusern die gleichen nach Classname oder die gleichen an einem Standort?
Falls Standort, ist das Haus stellenweise etwas in den Boden versunken?
Versuch mal folgendes:
...
if(_pos isEqualTo [0,0,0]) exitWith {};
_container = createVehicle[_className,[0,0,500],[],0,"NONE"]; //<- NEU
waitUntil{!isNil "_container"};
_container allowDamage false; // <- NEU
_container setPosATL _pos;
//_container enableSimulation false;
...
Könnte sein, das die Kisten beim erstellen sich zerstören.
Wie ist es mit einer Ordner Kopie?
So mach ich ein Full-Backup von Server zu Server, ich kopiere einfach den Datenbank Ordner von A nach B.
Funktioniert bei MySQL bestens inkl. Nutzerdaten. Jedoch sollte die Ziel DB offline sein.
EDIT: sollte wohl beim schreiben keine PAUSE machen Meine Antwort ist älter als der Post vor mir.
Versuch's mal mit dem Attribut SimpleObject und ohne Simulation.
Via Checkbox im Editor, rechts klick auf das Objekt und dann einstellen.
Das gab es ja schon vorher auch. (seit 1.66)
Diese Art der Simulation wirkt Performance schonender, da nicht Gobal alle den Zustand angeballert bekommen, sondern nur die im bestimmten Umkreis.
Die von Bohemia haben jetzt die Grundeinstellung geändert, von enableSimulation true auf enableSimulation false. Macht auch Sinn, da die meisten Objekte keine Simulation benötigen und immer abgeschaltet werden musste, um etwas Performance heraus zu holen.
Und zusätzlich vielleicht noch in der Config.sqf aus arma3server.exe -> arma3server_x64.exe machen.
BEC benötigt nicht die beserver_x64.dll sondern die beclient_x64.dll, da BEC ein Battleye-Client ist.
Die beclient_x64.dll findest Du auf deinem Rechner im Arma-Ordner -> Battleye oder local appdata -> arma3 -> battleye
Kannst den Aufgabenplaner nutzen.
Zeiten als trigger rein und eine Batch die einen Taskkill macht und den Server neustartet.
Oder BEC, das läuft auch mit arma 64bit.
Komischer Thread.
Nehm halt nen AMD Opteron oder einen Intel Atom.
@Leon Kahler
Ich weiß, stehen beide nicht in der Auswahl, aber die Empfehlungen haben dir bisher nicht zugesagt.
Xenon oder Desktop ist ArmA echt egal, hauptsache ne menge Mhz und Rechenpower, da ArmA fast nur mit Scripts arbeitet.
da fehlt eine klammer.
if ( !_alt && !_ctrlKey && !dialog && !(player getVariable ["restrained",false]) ) then {
fn_queryRequest.sqf
case civilian: {
_queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)];
//Parse Stats
_new = [(_queryResult select 9)] call DB_fnc_mresToArray;
if (_new isEqualType "") then {_new = call compile format["%1", _new];};
_queryResult set[9,_new];
//Position
_queryResult set[10,([_queryResult select 10,1] call DB_fnc_bool)];
_new = [(_queryResult select 11)] call DB_fnc_mresToArray;
if (_new isEqualType "") then {_new = call compile format["%1", _new];};
_queryResult set[11,_new];
//Bank PIN
_tmp = _queryResult select 13;
_queryResult set[16,[_tmp] call DB_fnc_numberSafe];
//Playtime
_new = [(_queryResult select 12)] call DB_fnc_mresToArray;
if (_new isEqualType "") then {_new = call compile format["%1", _new];};
_index = TON_fnc_playtime_values_request find [_uid, _new];
if (_index != -1) then {
TON_fnc_playtime_values_request set[_index,-1];
TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1];
TON_fnc_playtime_values_request pushBack [_uid, _new];
} else {
TON_fnc_playtime_values_request pushBack [_uid, _new];
};
_queryResult set[14,[]];
[_uid,_new select 2] call TON_fnc_setPlayTime;
_houseData = _uid spawn TON_fnc_fetchPlayerHouses;
waitUntil {scriptDone _houseData};
_queryResult pushback (missionNamespace getVariable[format["houses_%1",_uid],[]]);
_gangData = _uid spawn TON_fnc_queryPlayerGang;
waitUntil{scriptDone _gangData};
_queryResult pushback (missionNamespace getVariable[format["gang_%1",_uid],[]]);
};
Alles anzeigen
fn_requestReceived.sqf
case civilian: {
life_is_arrested = _this select 7;
CONST(life_coplevel, 0);
CONST(life_medicLevel, 0);
life_houses = _this select ((count _this)-2); //13;
if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then {
life_hunger = ((_this select 9) select 0);
life_thirst = ((_this select 9) select 1);
player setDamage ((_this select 9) select 2);
};
//Position
if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 1) then {
life_is_alive = _this select 10;
life_civ_position = _this select 11;
if (life_is_alive) then {
if (count life_civ_position != 3) then {diag_log format["[requestReceived] Bad position received. Data: %1",life_civ_position];life_is_alive =false;};
if (life_civ_position distance (getMarkerPos "respawn_civilian") < 300) then {life_is_alive = false;};
};
};
{
_house = nearestObject [(call compile format["%1",(_x select 0)]), "House"];
life_vehicles pushBack _house;
} forEach life_houses;
life_gangData = _this select ((count _this)-1); //14;
if (!(count life_gangData isEqualTo 0)) then {
[] spawn life_fnc_initGang;
};
[] spawn life_fnc_initHouses;
};
Alles anzeigen
mit _queryResult set[16,[_tmp] call DB_fnc_numberSafe]; wird der Bank PIN an stelle 17 vom requestquery geschrieben, danach kommt per pushback die Playtime, Häuser und die Gang hinter die Bank PIN und nicht davor.
verschieb
//Bank PIN _tmp = _queryResult select 13;
_queryResult set[16,[_tmp] call DB_fnc_numberSafe];
hinter die Gang, also so:
_houseData = _uid spawn TON_fnc_fetchPlayerHouses;
waitUntil {scriptDone _houseData};
_queryResult pushBack (missionNamespace getVariable[format["houses_%1",_uid],[]]);
_gangData = _uid spawn TON_fnc_queryPlayerGang;
waitUntil{scriptDone _gangData};
_queryResult pushBack (missionNamespace getVariable[format["gang_%1",_uid],[]]);
//Bank PIN
_tmp = _queryResult select 13;
_queryResult set[16,[_tmp] call DB_fnc_numberSafe];
Das könnte so gehen, falls ich mich nicht verzählt habe.
fn_requestReceived.sqf
life_houses = _this select 13; <- Da sind nun ??? nichts?
life_gangData = _this select 14; <- Da sind nun ??? nichts?
Dein array sieht in etwa so nun aus.
...,"Position","","","","","keys","Bank PIN","Playtime","house","gang"] (select 10,11, 12, 13, 14, 15, 16, 17, 18)
Da die Playtime, Häuser und die Gang per pushback ans vorhandene array angehängt wird, sieht das nun so aus.
Bahh, mein Fehler.
fn_p_openMenu.sqf natürlich und nicht fn_cellphone.sqf.
Moin,
dann bitte deine fn_processAction.sqf und fn_cellphone.sqf zeigen.
Musstest Du den DB request erweitern da Du zusätzliche einträge ausliest?
Dann verschiebt sich die Pos des queryrequest (life_server, MySql, fn_queryRequest.sqf) für Häuser und Gang.
Da die Daten beim queryrequest hinten dran gehängt werden.
Hast Du hier was geändert/erweitert
_query = switch (_side) do {
// West - 11 entries returned
case west: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE pid='%1'",_uid];};
// Civilian - 12 entries returned
case civilian: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE pid='%1'",_uid];};
// Independent - 10 entries returned
case independent: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE pid='%1'",_uid];};
};
Dann ändert sich der select Wert in fn_requestReceived.sqf für Häuser und Gang.
Kann jetzt nicht zu 100% sagen, dass das am Launch verfügbar sein wird. Ist aber im Hinterkopf und sollte mal mit eingebaut werden (auch wenn ArmA da meines Wissens nach keine native Lösung bietet).
Bei BEC werden alle gekickt, deren GUID nicht in der Whitelist.txt stehen. (sofern diese Funktion aktiviert ist)
Also via RCON GUID vom Spieler holen, mit der Liste abgleichen und wenn nicht in der Liste, dann kick via MISSION END.
Aber man kann sich eine Whitelist auch selbst ganz einfach via DB verwirklichen.
In der Player init fragt man den Wert ab und wenn nicht die Bedingung nicht erfüllt wird, MISSION END.
Moin,
Du musst die DB Tabelle Vehicle um die Spalte zB. TANK erweitern, und dann beim einparken Script den Füllstand abfragen und mit in die DB schreiben.
Beim Ausparken halt anderes rum.
Moin,
die Fehlermeldungen weisen darauf hin, dass die Tabellen in der DB fehlen. Hast Du die DB schon erstellt?