Garage im Multiplayer nutzen
Wenn man die Virtuelle Garage im Multiplayer nutzen will, dann geht das nicht ohne weiteres.
Mit dem folgenden kleinen Script kann man sie aber dennoch im Multiplayer nutzen. Das einzige, was dafür benötigt wird, ist ein Marker namens "DORB_Garagenplatz"
/*
* Author: Dorbedo
*
* Macht die Garage fit für den Multiplayer
*
* Requirements
* Mapmarker mit dem Objektnamen "DORB_Garagenplatz"
*
* Aufruf via [] execVM "garage.sqf"
* alternativ als compilierte Funktion mittels call
*
*/
#define GARAGENMARKER "DORB_Garagenplatz"
If (!hasInterface) exitWith {};
/*
* Vermeidung von Fehlern, wenn der Marker nicht existiert
*/
If !(GARAGENMARKER in allMapMarkers) exitWith {};
/*
* Erstellen des temporären Positionsobjektes - wird von der Garage selbst gelöscht.
* Genutzt um den Spawn vom Spieler unabhängig zu machen
*/
private _veh = "Land_HelipadEmpty_F" createVehicleLocal (getMarkerPos GARAGENMARKER);
/*
* Öffnen der Garage
* Wenn nicht die Vollständige Garage zur Verfügung stehen soll:
* ["Open",[false,_veh]] spawn BIS_fnc_garage;
*/
["Open",[true,_veh]] spawn BIS_fnc_garage;
uisleep 1;
/*
* Hinzufügen der Schnittstelle zum Wechsel des lokalen spawns zum globalen spawn
* Nutzen eines DisplayEventhandlers
*/
disableserialization;
uinamespace setVariable ["DORB_Garagenhandler",((uinamespace getVariable "RscDisplayGarage") displayAddEventHandler ["unload", {
/*
* Entfernen des DisplayEventhandlers
*/
disableserialization;
(uinamespace getVariable "RscDisplayGarage") displayRemoveEventHandler ["unload",uinamespace getVariable ["DORB_Garagenhandler",-1]];
[] spawn {
uisleep 2;
/*
* Auslesen der Daten des Lokalen Garagenobjektes
*/
private _vehicle = missionNamespace getVariable ["BIS_fnc_garage_center",objNull];
private _vehiclePos = getPos _vehicle;
private _vehicleType = typeOf _vehicle;
([_vehicle] call BIS_fnc_getVehicleCUstomization) params ["_textures","_animations"];
/*
* Workaround für mittels Template gespawnte Fahrzeuge (bspw. RHS)
*/
private _textures_new = getobjecttextures _vehicle;
/*
* Löschen der evtl gespawnten Crew + des lokalen Fahrzeuges
*/
{deleteVehicle _x} forEach (crew _vehicle) + [_vehicle];
/*
* Kreieren des Multiplayer tauglichen Objektes und drehen des Objektes
*/
private _newVehicle = createVehicle [_vehicleType, _vehiclePos, [GARAGENMARKER], 5 , "NONE"];
_newVehicle setDir (Markerdir GARAGENMARKER);
/*
* Kreieren des Multiplayer tauglichen Objektes und drehen des Objektes
*/
[_newVehicle,_textures,_vehicle getVariable ["bis_fnc_initVehicle_animations",_animations]] spawn bis_fnc_initVehicle;
/*
* Der 2. Teil des Texturen Workarounds
*/
If (_textures isEqualTo []) then {
{_newVehicle setObjectTextureGlobal [_forEachIndex,_x];} forEach _textures_new;
};
/*
* Schnittstelle für weitere Modifikationen -> Wenn CBA nicht vorhanden, wird es ignoriert.
*/
If !(isNil "CBA_fnc_globalEvent") then {
["Dorb_Garage_spawned",[player,_newVehicle]] call CBA_fnc_globalEvent;
};
};
}])];