Da in letzter Zeit vermehrt Anfragen kamen, klatsch ich das hier einfach mal in den Raum :p Das ganze gibt's auch nochmal im Github: https://github.com/BlackFisch/AttachableLightbar
Script: Aufsteckblaulicht für die Polizei
Version: Altis Life 4.4 und aktueller
Schiwerigkeitsgrad: Fortgeschrittener (mittel)
Funktionen:
~ Blaulicht zum Aufstecken (STRG+L)
~ Anpassbare Koordinaten für jedes Fahrzeug (Config_EmergLights.hpp - Erklärung enthalten)
~ Manuell ein- und ausschaltbar (SHIFT+L)
Rechtliche Hinweise (Copyright):
Lizensiert unter CC BY-NC-SA 3.0 (https://native-network.net/dereferer/?ref…y4wL2RlLw%3D%3D)
unter Beachtung der APL-SA Lizenz (https://www.bistudio.com/community/lice…nse-share-alike)
Dieses Script ist veröffentlicht unter der Creative Commons BY-NC-SA Lizenz unter Beachtung der Bohemia Interactive Arma Public License Share Alike (APL-SA). Jede Bearbeitung des Materials ist damit erlaubt, darf jedoch nicht zu kommerziellen Zwecken genutzt oder verkauft werden. Weiterhin ist Namensnennung Pflicht und die bearbeiteten Daten müssen zur Weiterverwendung der Arma 3-Community frei zur Verfügung stehen.
Das heißt im Klartext: Die Header in den Dateien sind beizubehalten und nicht abzuändern ("Edited by:" darf eingefügt werden, der Ursprüngliche Autor, ich, muss weiterhin erkenntlich sein!) und jeder ist automatisch berechtigt, eure bearbeiteten Dateien weiterzuverarbeiten oder selbst zu verwenden.
Da mich dieses Script einiges an Arbeit und vor Allem Zeit gekostet hat bitte ich darum euch daran zu halten, da ich kein Interesse darin habe, rechtliche Schritte gegen irgendjemanden einzuleiten. Viel Spaß NN-Community
Nun zum eigentlichen Teil dieses Posts...
Anleitung:
1. Öffnet eure init.sqf und fügt folgendes am Ende ein:
emergLight_vehicles = [];
{
emergLight_vehicles pushBack (configName _x);
} forEach ("true" configClasses (missionConfigFile >> "emergLightVehicles"));
2. Fügt in eurer description.ext unter #include "config\Config_Master.hpp" folgendes ein:
3. Erstellt im Hauptverzeichnis eine neue Datei Config_EmergLights.hpp mit folgendem Inhalt:
class emergLightVehicles {
class C_SUV_01_F {
pos[] = { 0.4, -0.05, 0.32 };
};
/*
+++ Config Example +++
New Vehicles:
class Vehicle_Class_Name {
pos[] = { x, y, z }; // coordinates relative to vehicle
};
vehicles with same coordinates (e.g. same vehicle, different skin & class):
class Vehicle_Class_2: Vehicle_Class_Name {}; // "Vehicle_Class_2" gets the same attributes as "Vehicle_Class_Name"
*/
};
Alles anzeigen
4. Öffnet eure CfgRemoteExec.hpp und tragt bei den Functions for everyone folgendes ein:
5. Öffnet eure Functions.hpp und fügt über der class Life_Client_Core folgendes ein:
class blackfisch_Functions {
tag = "bf";
class Scripts {
file = "core\scripts";
class lights {};
class lightsOn {};
};
};
6. Erstellt einen neuen Ordner scripts im core Ordner
7. Erstellt eine neue Datei fn_lights.sqf im Ordner scripts mit folgendem Inhalt:
/*
File: fn_lights.sqf
Author: blackfisch
Based on code by: nflug
Description:
Aufsteckblaulicht
*/
private _vehicle = vehicle player;
private _vehType = typeOf _vehicle;
if (isNull objectParent player) exitWith {}; //not in a vehicle
if (!alive player) exitWith {}; //not alive
if !(driver _vehicle isEqualTo player) exitWith {}; //not the driver
if !(_vehType in emergLight_vehicles) exitWith {}; //not defined vehicle
private _attachPoint = getArray(missionConfigFile >> "emergLightVehicles" >> _vehType >> "pos"); //get coordinates of attachment point
private _class = "Land_Camping_Light_off_F"; //classname of the object
if !(_vehicle getVariable ["light",false]) then {
_vehicle setVariable ["light",true,true];
_blaulicht = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];
_vehicle setVariable ["lightObj",_blaulicht,true];
_blaulicht attachTo [_vehicle, _attachPoint];
} else {
_vehicle setVariable ["light",false,true];
_vehicle setVariable ["lightObj",objNull,true];
{
if ((typeOf _x) isEqualTo _class) then {
_vehicle setVariable ["lights",false,true];
//detach _x;
deleteVehicle _x;
};
} forEach (attachedObjects _vehicle);
};
Alles anzeigen
8. Erstellt eine neue Datei fn_lightsOn.sqf im Ordner scripts mit folgendem Inhalt:
/*
File: fn_lightsOn.sqf
Author: blackfisch
Description:
Main functions for lights
*/
if !(params [["_veh", objNull, [objNull]]]) exitWith {}; //why no parameter cyka?
private _lightObj = _veh getVariable ["lightObj",objNull];
if (isNull _veh) exitWith {};
if !(typeOf _veh in emergLight_vehicles) exitWith {}; //not defined vehicle
if (isNull _lightObj) exitWith {};
private _color = [0.1, 0.1, 10]; //setup the color
//create the light
_light = "#lightpoint" createVehicle (getPos _lightObj);
_light setLightDayLight true;
_light setLightColor _color;
_light setLightAmbient [0.1,0.1,1];
_light lightAttachObject [_lightObj, [0, 0, 0.07]];
_light setLightAttenuation [0.181, 0, 1000, 130];
_light setLightBrightness 0.05;
_light setLightIntensity 10;
_light setLightDayLight true;
for "_i" from 0 to 1 step 0 do {
if !(_veh getVariable ["lights",false]) exitWith {};
_light setLightBrightness 6;
uisleep 0.05;
_light setLightBrightness 0.05;
uisleep 0.05;
_light setLightBrightness 6;
uisleep 0.05;
_light setLightBrightness 0.05;
uisleep 0.15;
};
waitUntil {!(_veh getVariable ["lights",false])};
deleteVehicle _light;
Alles anzeigen
9. Öffnet eure fn_keyHandler.sqf (zu finden in core\functions) und ersetzt eure case 38 durch folgende:
case 38: {
private _veh = vehicle player;
if (_ctrlKey && {!_shift} && {!isNull objectParent player} && {(driver _veh) isEqualTo player} && {playerSide isEqualTo west}) then {
call bf_fnc_lights;
_handled = true;
};
if (_shift && {!_ctrlKey} && {!isNull objectParent player} && {(driver _veh) isEqualTo player} && {playerSide isEqualTo west}) then {
if (!isNull (_veh getVariable ["lightObj",objNull])) then {
if (_veh getVariable ["lights",false]) then {
_veh setVariable ["lights",false,true];
} else {
_veh setVariable ["lights",true,true];
[_veh] remoteExec ["bf_fnc_lightsOn",0];
};
} else {
if ((typeOf _veh) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then {
if (!isNil {_veh getVariable "lights"}) then {
if (playerSide isEqualTo west) then {
[_veh] call life_fnc_sirenLights;
} else {
[_veh] call life_fnc_medicSirenLights;
};
_handled = true;
};
};
};
_handled = true;
};
};
Alles anzeigen
Fertig!
Das war's schon!
Hier noch eine kleine Vorschau:
Ich wünsche euch Viel Spaß mit dem Script