Helicrashsite

Aus Nitradopedia
Wechseln zu: Navigation, Suche
Diese Einstellungen dürfen nur für "Private Server" vorgenommen werden.
Nicht für Server die an das Hive-Netzwerk von dayzmod.com angebunden sind!
Die Einstellung sollte nur von erfahrenen Server-Administratoren vorgenommen werden.
Bitte auf Fehler achten wie Komma, Absätze, etc. in der .sqf-Datei!
Dieses Tutorial gilt für DayZ Bliss / Reality 1.7.4.4 (und älter).

Vorabinformationen

Zur Bearbeitung wird der PBO Manager und einen Texteditor wie Notepad++ benötigt. Vor jeder Änderung einer Datei sollte unbedingt ein Backup angelegt werden.

Was wird genau gemacht?

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.

Bearbeiten vom Loot

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:

  • Compile
  • Init
  • System

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 diese 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 der 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:

  • itemtyp - der Loot
  • itemchance der Spawn-Wert/Zufallsrate

Hierbei sollte beachtet werden, dass für jedes Item eine neue itemchance geschrieben werden muss. Im Beispiel oben, ist der 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 bzw. diverse Waffen den Rucksack ersetzen können.

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 beachten, dass nur ein Leerzeichen verwendet wird, da sonst der Server meckert.

Zusammenfassung - Was kann geändert werden?

  • _num = werte des Lootables
  • _itemtype = eure Waffen
  • _itemchance = spawnrate der Waffen

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.


Erstellen / Bearbeiten der Spawns

Als Administrator des Servers kann bestimmt werden, wie viele Helicrashsites vorhanden sen 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:

  • Compile
  • Init
  • System

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 diese 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.