Ich glaube du hast da nicht nur ein Problem oder es sind alles folgefehler. Habe momentan leider nicht die zeit mir das genau anzuschauen. Gehe mal die Fehler einzeln durch
Beiträge von moeck
-
-
Alles klar, gut zu wissen, trifft aber bei uns nicht zu
-
Hi,
das ist jetzt erstmal nur das Laden der vorhandenen Ausrüstung wenn der Medic schon mal auf dem Server war und bereits eine Ausrüstung besitzt. Das Andere müsste ich jetzt erstmal prüfen. Könnte sein, dass man da noch was für tun muss.
Gruß,
moeck
-
so versuchs mal so
C
Alles anzeigen#include "..\script_macros.hpp" /* File: fn_initMedic.sqf Author: Bryan "Tonic" Boardwine Description: Initializes the medic.. */ player addRating 99999999; waitUntil {!(isNull (findDisplay 46))}; if ((FETCH_CONST(life_medicLevel)) < 1 && (FETCH_CONST(life_adminlevel) isEqualTo 0)) exitWith { ["Notwhitelisted",false,true] call BIS_fnc_endMission; sleep 35; }; [] spawn life_fnc_medicPlaceablesInit; [] call life_fnc_spawnMenu; waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open. waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done. [player, uniform player] call life_fnc_equipGear; // Hier lädst Du die Sachen der Medics
-
Zum Verständnis wären dann die Ausparkkosten statt 0.3% des Kaufpreises nur noch 0.05%.
Beispiel: Fahrzeug kostet 100.000 wären als bei 0.3 --> 30.000 bei 0.05 --> 5.000
-
-
nein dann müsstest du das mit .05 machen ohne den punkt zwischen 0 und 5
-
Ich meinte den Standort. ich werde es testen
-
Werde ich heute abend mal versuchen. Mal schauen ob ich was in den Logs sehe
-
sind nur orginale Häuser, platzierte kann man zwar kaufen aber keine Kisten setzen
-
Ich sehe gerade, dass das alles in 5.x umgeschrieben ist. Vielleicht kann ich das einfach übernehmen
-
bin gerade am suchen nach der richtigen Datei
C
Alles anzeigen/* Author: Bryan "Tonic" Boardwine Description: Fetches all the players houses and sets them up. */ private["_query","_houses"]; if(_this == "") exitWith {}; _query = format["SELECT pid, pos, inventory, containers FROM houses WHERE pid='%1' AND owned='1'",_this]; waitUntil{!DB_Async_Active}; _houses = [_query,2,true] call DB_fnc_asyncCall; _return = []; { _pos = call compile format["%1",_x select 1]; _house = nearestBuilding _pos; //_house = (nearestObjects[_pos, ["House_F"],12] select 0); _house allowDamage false; _containers = []; _house setVariable["slots",[],true]; if(!isNil {(_house getVariable "containers")}) then { {if(!isNull _x) then {deleteVehicle _x;};} foreach (_house getVariable "containers"); }; _trunk = [_x select 2] call DB_fnc_mresToArray; if(typeName _trunk == "STRING") then {_trunk = call compile format["%1", _trunk];}; _containerData = [_x select 3] call DB_fnc_mresToArray; if(typeName _containerData == "STRING") then {_containerData = call compile format["%1", _containerData];}; _house setVariable["Trunk",_trunk,true]; { if(count _x == 0) exitWith {}; //No containers / items. _className = _x select 0; _weapons = (_x select 1) select 0; _magazines = (_x select 1) select 1; _items = (_x select 1) select 2; _backpacks = (_x select 1) select 3; //Setup the variables _positions = [_house] call life_fnc_getBuildingPositions; _pos = [0,0,0]; { _slots = _house getVariable ["slots",[]]; if(!(_forEachIndex in _slots)) exitWith { _slots pushBack _forEachIndex; _house setVariable["slots",_slots,true]; _pos = _x; }; } foreach _positions; if(_pos isEqualTo [0,0,0]) exitWith {}; _container = createVehicle[_className,_pos,[],0,"NONE"]; waitUntil{!isNil "_container"}; _container setPosATL _pos; //_container enableSimulation false; _containers pushBack _container; clearWeaponCargoGlobal _container; clearItemCargoGlobal _container; clearMagazineCargoGlobal _container; clearBackpackCargoGlobal _container; //Add weapons to the crate. { _weaponCount = (_weapons select 1) select _forEachIndex; _container addWeaponCargoGlobal [_x,_weaponCount]; } foreach (_weapons select 0); //Add magazines { _magazineCount = (_magazines select 1) select _forEachIndex; _container addMagazineCargoGlobal [_x,_magazineCount]; } foreach (_magazines select 0); //Add items { _itemCount = (_items select 1) select _forEachIndex; _container addItemCargoGlobal [_x,_itemCount]; } foreach (_items select 0); //Add backpacks { _backpackCount = (_backpacks select 1) select _forEachIndex; _container addBackpackCargoGlobal [_x,_backpackCount]; } foreach (_backpacks select 0); } foreach _containerData; _house setVariable["containers",_containers,true]; _return pushBack [_x select 1,_containers]; } foreach _houses; missionNamespace setVariable[format["houses_%1",_this],_return];
-
Moin,
hast Du schon mal die 32 Bit Version von Arma gestartet und es damit versucht?
Gruß,
moeck
-
Moin,
aktuell haben wir folgendes Problem. Bei einigen Häusern gehen die platzierten Kisten kaputt. Es scheint nach den bisherigen Erkenntnissen sich immer wieder um die selben Häuser zu handeln. Bisher habe ich noch keinen Anhaltspunkt gefunden warum die Kisten wegbuggen. Zum Teil kauft ein Spieler das Haus platziert die Kiste und kann auch darauf zugreifen. Nach einem Disconnect bzw. Server Restart ist die Kiste dann nicht mehr vorhanden. In der DB finde ich aber die Kiste inklusive Inhalt noch zu mindestens so lange kein weiterer Restart erfolgt ist. Danach wurde die Kiste inkl. I-Inventar auch in den DB gelöscht. Wenn der Spieler dann eine neue Kiste platziert kann er zu mindestens auf das T-Inventar zugreifen aber das ist keine befriedingten Lösung
. Achja wir haben die Anzahl der möglichen Kisten von ehemals 4 auf eine reduzierte um den Effekt etwas abzuschwächen.
Ich poste hier mal das Script zum Platzieren der Kiste beim Connect.
C
Alles anzeigen/* BLAH BLAH I LOVE NOTEPAD++ GET OVER IT BLAH! */ private["_house","_houseID","_containers","_query"]; _house = [_this,0,ObjNull,[ObjNull]] call BIS_fnc_param; if(isNull _house) exitWith {systemChat "House null";}; _houseID = _house getVariable["house_id",-1]; if(_houseID == -1) exitWith {systemChat "HouseID invalid";}; _containers = _house getVariable ["containers",[]]; systemChat format["Number of containers found: %1",count _containers]; _arr = []; { _className = typeOf _x; _weapons = getWeaponCargo _x; _magazines = getMagazineCargo _x; _items = getItemCargo _x; _backpacks = getBackpackCargo _x; _arr pushBack [_className,[_weapons,_magazines,_items,_backpacks]]; } foreach _containers; _arr = [_arr] call DB_fnc_mresArray; _query = format["UPDATE houses SET containers='%1' WHERE id='%2'",_arr,_houseID]; waitUntil{!DB_Async_Active}; [_query,1] call DB_fnc_asyncCall; //systemChat "Query ran?";
Gruß,
moeck
-
Das Du nicht verraten kannst um welche Daten es sich handelt ist klar
das was ZorG geschrieben hat wäre auch meine Idee gewesen. Hier muss man aber darauf achten, dass das kopieren nicht über das Netzwerk passiert sondern am besten über den angeschlossenen Storage. Idealerweise sollten beide Server über eine Glasfaser Anbindung an den Storage angeklemmt sein. Dann kopiert man die Daten nicht mehr über ein 1 - 10 Gigabit Netz sondern nutzt die direkte Anbindung. Heißt Server 1 muss auch nicht für an Backup an das Netz von Server 2.
Da es sich hier um MSSQL handelt gehe ich mal davon aus dass wir hier von Windows Servern sprechen. Falls diese Anbindung existier sollte es keine 3 Tage dauern die DB zu klonen
Gruß,
moeck
-
Mh..., dann wäre doch der direkte Sync der Änderungen beim Schreiben der einfachste und schnellste Weg. Da ich das System und die Gegebenheiten nicht kenne ist das alles eh nur theoretisch.
Ich würde mir eventuell auch mal Gedanken über ein Archivierungskonzept machen um einfach die Datenmengen massiv zu reduzieren sofern das möglich ist. In der Regel braucht man doch keine Terabytes an Daten in einer DB. Es sei den es handelt sich hier um Messdaten oder ähnliches.
-
So mir ist gerade noch was anderes eingefallen. Falls beide Server eine Anbindung an den selben Storage haben, kann man vielleicht auch mit dem Clonen der DB arbeiten. Heißt ihr kopiert die Daten Files auf dem Storage von DB1 zu DB2. Wie gesagt habe ich eher wenig bis keine Erfahrung mit MSSQL, daher kann ich nicht beurteilen ob das ein Weg ist.
Man könnte auch die Redo-Logs (Oracle) nehmen und die Änderungen dann einspielen. Keine Ahnung ob MSSQL eine ähnlich Möglichkeit bietet.
-
Anders rum müsste ihr immer alles sichern und kopieren? Ich würde ja nur die Änderungen dann übernehmen, damit dürfte sich das Volumen deutlich verkleinern. Dann reden wir wahrscheinlich nicht mehr über Tera sondern im schlimmsten Fall über ein paar Giga. Wenn es gut läuft sogar nur über Mega
-
Moin,
normalerweise sollten die Tickets ja eine ID haben. Diese ID musst du dann halte verwenden um alles was dazu gehört anzuzeigen.
Gruß,
moeck
-
Moin,
nur mal so eine Frage. Welche Änderungshäufigkeit an den Daten habt ihr? Ansonsten ist es vielleicht sinnvoll die Daten mehr oder weniger direkt zu synchronisieren. Ich habe leider nicht wirklich Erfahrung mit MSSQL, da wir eher auf Oracle setzen. In Oracle kann man DB Links setzen und die Änderungen dann entweder per Procedure einmal täglich oder per Trigger bei jeder Änderung auch in die andere DB schreiben.
Gruß,
moeck