Zur Bearbeitung wird der PBO Manager und einen Texteditor wie Notepad++ benötigt. Vor jeder Änderung einer Datei sollte unbedingt ein Backup angelegt werden.
Es wird die Dayz_Server.pbo vom Server bearbeitet. Dies hat zur Folge, dass niemand diese Dateien nach einer Änderung installieren muss, da diese Datei beim Betreten des Server automatisch gedownloadet wird.
Zuerst wird die Dayz_Server.pbo benötigt. Diese ist im Verzeichnis /dayz/@bliss_1.NAME_DER_MAP/addons/Dayz_Server.pbo zu finden. Diese Datei sollte auf dem PC gespeichert werden, sowie ein Backup der Datei angelegt werden.
Nun die Datei Dayz_Server.pbo mit dem PBO Manager öffnen. Im Manager sind anschließend drei Ordner zu sehen:
Im Ordner Init ist die Datei Server_functions.sqf zu finden. Diese kann per Copy&Paste auf den Desktop kopiert werden. Diese Datei anschließend mit Notepad++ öffnen, damit sie bearbeitet werden kann.
In der Zeile 77 sind folgende Informationen zu finden:
spawn_heliCrash = { private["_position","_veh","_num","_config","_itemType","_itemChance","_weights","_index","_iArray"]; waitUntil{!isNil "BIS_fnc_selectRandom"}; if (isDedicated) then { _position = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos; diag_log("DEBUG: Spawning a crashed helicopter at " + str(_position)); _veh = createVehicle ["UH1Wreck_DZ",_position, [], 0, "CAN_COLLIDE"]; dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_veh]; _veh setVariable ["ObjectID",1,true]; dayzFire = [_veh,2,time,false,false]; publicVariable "dayzFire"; if (isServer) then { nul=dayzFire spawn BIS_Effects_Burn; }; _num = round(random 4) + 3; _config = configFile >> "CfgBuildingLoot" >> "HeliCrash"; _itemType = [] + getArray (_config >> "itemType"); //diag_log ("DW_DEBUG: _itemType: " + str(_itemType)); _itemChance = [] + getArray (_config >> "itemChance"); //diag_log ("DW_DEBUG: _itemChance: " + str(_itemChance)); //diag_log ("DW_DEBUG: (isnil fnc_buildWeightedArray): " + str(isnil "fnc_buildWeightedArray")); waituntil {!isnil "fnc_buildWeightedArray"}; _weights = []; _weights = [_itemType,_itemChance] call fnc_buildWeightedArray; //diag_log ("DW_DEBUG: _weights: " + str(_weights)); for "_x" from 1 to _num do { //create loot _index = _weights call BIS_fnc_selectRandom; sleep 1; if (count _itemType > _index) then { //diag_log ("DW_DEBUG: " + str(count (_itemType)) + " select " + str(_index)); _iArray = _itemType select _index; _iArray set [2,_position]; _iArray set [3,5]; _iArray call spawn_loot; _nearby = _position nearObjects ["WeaponHolder",20]; { _x setVariable ["permaLoot",true]; } forEach _nearBy; }; }; }; };
So sieht die reguläre DayZ Helicrashsite aus. In der Zeile 92 sind folgende Einträge zu sehen:
_num = round(random 4) + 3;
Hier kann die Spawnrate des Loots geändert werden. 4 + 3 bedeutet, dass bis zu 7 Lootspots an der Helicrashsite vorhanden ist. Dies kann nach eigenen Wünschen angepasst werden.
In der Zeile 94 ist folgendes zu sehen:
_itemType = [] + getArray (_config >> "itemType");
Dort wird der Loot generiert, der Spawnen soll. Aktuell ist dies der “normale” DayZ Loot. Der Wert steht derzeit auf Auto und bezieht somit den Loot aus der Spawn-Mechanik, die die Entwickler vorgegeben haben.
In der Zeile 96 ist folgendes zu sehen:
_itemChance = [] + getArray (_config >> "itemChance");
Dies steht für den Wert/Zufall, was an der Helicrashsite zu finden ist. Dieser kann beliebig geändert werden.
Beispiel:
_itemType = [["G36K_Camo","weapon"], ["M4A1_Aim","weapon"], ["FN_FAL","weapon"], ["bizon_silenced","weapon"], ["M14_EP1","weapon"], ["FN_FAL_ANPVS4","weapon"], ["BAF_L85A2_RIS_SUSAT","weapon"], ["M40A3","weapon"], ["Mk_48_DZ","weapon"], ["M249_DZ","weapon"], ["SVD_CAMO","weapon"], ["DMR","weapon"], ["","military"], ["","medical"], ["MedBox0","object"], ["NVGoggles","weapon"], ["AmmoBoxSmall_556","object"], ["AmmoBoxSmall_762","object"], ["Skin_Camo1_DZ","magazine"], ["Skin_Sniper1_DZ","magazine"], ["DZ_Backpack_EP1","object"]]; _itemChance = [0.05, 0.05, 0.02, 0.05, 0.05, 0.02, 0.01, 0.02, 0.03, 0.05, 0.01, 0.1, 1, 0.5, 0.1, 0.01, 0.1, 0.1, 0.03, 0.03, 0.3, 0.03];
Eine fertige Loot-Tabelle würde so aussehen:
Hierbei sollte beachtet werden, dass für jedes Item eine neue itemchance geschrieben werden muss. Im Beispiel oben, ist die rMod aktiviert. Dies hat den Vorteil, dass Waffen gespawnt werden können, die in DayZ gebannt sind. Allerdings können nicht alle Waffen gespawnt werden.
Die fertig bearbeitete Datei könnte wie folgt aussehen:
spawn_heliCrash = { private["_position","_veh","_num","_config","_itemType","_itemChance","_weights","_index","_iArray"]; waitUntil{!isNil "BIS_fnc_selectRandom"}; if (isDedicated) then { _position = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos; diag_log("DEBUG: Spawning a crashed helicopter at " + str(_position)); _veh = createVehicle ["UH1Wreck_DZ",_position, [], 0, "CAN_COLLIDE"]; dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_veh]; _veh setVariable ["ObjectID",1,true]; dayzFire = [_veh,2,time,false,false]; publicVariable "dayzFire"; if (isServer) then { nul=dayzFire spawn BIS_Effects_Burn; }; _num = round(random 4) + 3; _config = configFile >> "CfgBuildingLoot" >> "HeliCrash"; _itemType = [["G36K_Camo","weapon"], ["M4A1_Aim","weapon"], ["FN_FAL","weapon"], ["bizon_silenced","weapon"], ["M14_EP1","weapon"], ["FN_FAL_ANPVS4","weapon"], ["BAF_L85A2_RIS_SUSAT","weapon"], ["M40A3","weapon"], ["Mk_48_DZ","weapon"], ["M249_DZ","weapon"], ["SVD_CAMO","weapon"], ["DMR","weapon"], ["","military"], ["","medical"], ["MedBox0","object"], ["NVGoggles","weapon"], ["AmmoBoxSmall_556","object"], ["AmmoBoxSmall_762","object"], ["Skin_Camo1_DZ","magazine"], ["Skin_Sniper1_DZ","magazine"], ["DZ_Backpack_EP1","object"]]; //diag_log ("DW_DEBUG: _itemType: " + str(_itemType)); _itemChance = [0.05, 0.05, 0.02, 0.05, 0.05, 0.02, 0.01, 0.02, 0.03, 0.05, 0.01, 0.1, 1, 0.5, 0.1, 0.01, 0.1, 0.1, 0.03, 0.03, 0.3, 0.03]; //diag_log ("DW_DEBUG: _itemChance: " + str(_itemChance)); //diag_log ("DW_DEBUG: (isnil fnc_buildWeightedArray): " + str(isnil "fnc_buildWeightedArray")); waituntil {!isnil "fnc_buildWeightedArray"}; _weights = []; _weights = [_itemType,_itemChance] call fnc_buildWeightedArray; //diag_log ("DW_DEBUG: _weights: " + str(_weights)); for "_x" from 1 to _num do { //create loot _index = _weights call BIS_fnc_selectRandom; sleep 1; if (count _itemType > _index) then { //diag_log ("DW_DEBUG: " + str(count (_itemType)) + " select " + str(_index)); _iArray = _itemType select _index; _iArray set [2,_position]; _iArray set [3,5]; _iArray call spawn_loot; _nearby = _position nearObjects ["WeaponHolder",20]; { _x setVariable ["permaLoot",true]; } forEach _nearBy; }; }; }; };
Bitte beachte, dass nur ein Leerzeichen verwendet wird, da sonst der Server meckert.
Zusammenfassung – Was kann geändert werden?
Zum Schluss die .sqf-Datei speichern und via Copy&Paste in den Init -Ordner verschieben. Die Dayz_server.pbo auf den Server hochladen und diesen starten.
Als Administrator des Servers kann bestimmt werden, wie viele Helicrashsites vorhanden sein sollen. Dies kann eine beliebige Zahl von 2 bis 100 sein.
Zuerst wird die Dayz_Server.pbo benötigt. Diese ist im Verzeichnis /dayz/@bliss_1.NAME_DER_MAP/addons/Dayz_Server.pbo zu finden. Diese Datei sollte auf dem PC gespeichert werden, sowie ein Backup der Datei angelegt werden.
Nun die Datei Dayz_Server.pbo mit dem PBO Manager öffnen. Im Manager sind anschließend drei Ordner zu sehen:
Im Ordner System ist die Datei Server_monitor.sqf zu finden. Diese kann per Copy&Paste auf den Desktop kopiert werden. Diese Datei anschließend mit Notepad++ öffnen, damit sie bearbeitet werden kann.
In der Zeile 206 sind folgende Informationen zu finden:
//Spawn crashed helos for "_x" from 1 to 5 do { _id = [] spawn spawn_heliCrash; //waitUntil{scriptDone _id}; };
In der Zeile “from 1 to 5” kann die Anzahl der Spawns festgelegt werden. Je höher die Zahl, umso mehr Helicrashsites werden vorhanden sein.