Auf dem Server laufen die notwendigen Mods bereits. Um also den Streamator in euren Mission zu nutzen müsste ihr drei Dinge tun:
if !(isNil "CLib_fnc_loadModules") then { call CLib_fnc_loadModules; };
class CLib {
Modules[] = {"CLib", "Streamator"};
useExperimentalAutoload = 0;
useCompressedFunction = 0;
useFallbackRemoteExecution = 0;
FrameGraphSize = 128;
};
if (isServer) then {
this setVariable ["Streamator_Spectator_GroupIcon", "TEXTUREPATHTOTEXTURE", true];
};
\A3\ui_f\data\map\markers\nato\b_air.paa
\A3\ui_f\data\map\markers\nato\b_antiair.paa
\A3\ui_f\data\map\markers\nato\b_armor.paa
\A3\ui_f\data\map\markers\nato\b_art.paa
\A3\ui_f\data\map\markers\nato\b_hq.paa
\A3\ui_f\data\map\markers\nato\b_inf.paa
\A3\ui_f\data\map\markers\nato\b_installation.paa
\A3\ui_f\data\map\markers\nato\b_maint.paa
\A3\ui_f\data\map\markers\nato\b_mech_inf.paa
\A3\ui_f\data\map\markers\nato\b_med.paa
\A3\ui_f\data\map\markers\nato\b_mortar.paa
\A3\ui_f\data\map\markers\nato\b_motor_inf.paa
\A3\ui_f\data\map\markers\nato\b_naval.paa
\A3\ui_f\data\map\markers\nato\b_plane.paa
\A3\ui_f\data\map\markers\nato\b_recon.paa
\A3\ui_f\data\map\markers\nato\b_service.paa
\A3\ui_f\data\map\markers\nato\b_support.paa
\A3\ui_f\data\map\markers\nato\b_uav.paa
\A3\ui_f\data\map\markers\nato\b_unknown.paa
\A3\ui_f\data\map\markers\nato\c_air.paa
\A3\ui_f\data\map\markers\nato\c_car.paa
\A3\ui_f\data\map\markers\nato\c_plane.paa
\A3\ui_f\data\map\markers\nato\c_ship.paa
\A3\ui_f\data\map\markers\nato\c_unknown.paa
\A3\ui_f\data\map\markers\nato\n_air.paa
\A3\ui_f\data\map\markers\nato\n_antiair.paa
\A3\ui_f\data\map\markers\nato\n_armor.paa
\A3\ui_f\data\map\markers\nato\n_art.paa
\A3\ui_f\data\map\markers\nato\n_hq.paa
\A3\ui_f\data\map\markers\nato\n_inf.paa
\A3\ui_f\data\map\markers\nato\n_installation.paa
\A3\ui_f\data\map\markers\nato\n_maint.paa
\A3\ui_f\data\map\markers\nato\n_mech_inf.paa
\A3\ui_f\data\map\markers\nato\n_med.paa
\A3\ui_f\data\map\markers\nato\n_mortar.paa
\A3\ui_f\data\map\markers\nato\n_motor_inf.paa
\A3\ui_f\data\map\markers\nato\n_naval.paa
\A3\ui_f\data\map\markers\nato\n_plane.paa
\A3\ui_f\data\map\markers\nato\n_recon.paa
\A3\ui_f\data\map\markers\nato\n_service.paa
\A3\ui_f\data\map\markers\nato\n_support.paa
\A3\ui_f\data\map\markers\nato\n_uav.paa
\A3\ui_f\data\map\markers\nato\n_unknown.paa
\A3\ui_f\data\map\markers\nato\o_air.paa
\A3\ui_f\data\map\markers\nato\o_antiair.paa
\A3\ui_f\data\map\markers\nato\o_armor.paa
\A3\ui_f\data\map\markers\nato\o_art.paa
\A3\ui_f\data\map\markers\nato\o_hq.paa
\A3\ui_f\data\map\markers\nato\o_inf.paa
\A3\ui_f\data\map\markers\nato\o_installation.paa
\A3\ui_f\data\map\markers\nato\o_maint.paa
\A3\ui_f\data\map\markers\nato\o_mech_inf.paa
\A3\ui_f\data\map\markers\nato\o_med.paa
\A3\ui_f\data\map\markers\nato\o_mortar.paa
\A3\ui_f\data\map\markers\nato\o_motor_inf.paa
\A3\ui_f\data\map\markers\nato\o_naval.paa
\A3\ui_f\data\map\markers\nato\o_plane.paa
\A3\ui_f\data\map\markers\nato\o_recon.paa
\A3\ui_f\data\map\markers\nato\o_service.paa
\A3\ui_f\data\map\markers\nato\o_signal.paa
\A3\ui_f\data\map\markers\nato\o_support.paa
\A3\ui_f\data\map\markers\nato\o_uav.paa
\A3\ui_f\data\map\markers\nato\o_unknown.paa
\A3\ui_f\data\map\markers\nato\u_installation.paa
Dieses Skript ist Pflicht in unseren Missionen.
Der W-Teleporter muss im Allgemeinen nicht mehr per Hand eingebunden werden, diese geschieht automatisch.
Benennet ein Objekt mit ttt_teleporter
um dort die Funktionen hinzuzufügen. Sollte kein Objekt vorhanden sein wird an der Position eines zufälligen spielers eine TTT-Fahne erstellt.
Mit in der init.sqf ttt_teleport_logic = false;
kann der W-Teleporter sowie Zuschauerkamera abgeschalten werden.
Wenn doch, findet ihr hier die Anleitung.
[ACE_player, currentWeapon ACE_player, currentMuzzle ACE_player] call ace_safemode_fnc_lockSafety;
Ans Ende des Loadoutskripts schreiben.
Entweder über den Editor/Zeus oder folgendes ans Ende des Loadoutskriptes schreiben:
player setVariable ["ace_medical_medicClass", 0, true]; // 0 = Soldat, 1 = Sanitäter, 2 = Arzt
player setVariable ["ACE_isEOD", false, true]; // false = Soldat, true = EOD-Spezialist
player setVariable ["ACE_isEngineer", 0, true]; // 0 = Soldat, 1 = Pionier, 2 = Instandsetzer
Skript von EinStein
scripts\stein_medicTent_vehicle.sqf
einfügen [] call compile preprocessFileLineNumbers "scripts\stein_medicTent_vehicle.sqf";
eintragenHinweis: Jedes Fahrzeug der ausgewählten Klasse(n) hat zu beginn ein Zelt geladen, um dies zu verhindern muss if (isServer) then {this setVariable ["hasTent", false];};
in die Init des Fahrzeugs geschrieben werden.
[] call compile preprocessFileLineNumbers "scripts\stein_medicTent_vehicle.sqf"
/*
author: [TTT] EinStein
description: adds an ACE-AddAction to specific vehicles to build a tent as a medical facitlity behind the vehicle.
note: every vehicle is loaded by default. If this is not wanted, type 'if (isServer) then {this setVariable ["hasTent", false];};' in the object init.
usage (initPlayerLocal.sqf):
[] call compile preprocessFileLineNumbers "scripts\stein_medicTent_vehicle.sqf";
//'bool' should an animation be used while constructiong
//'string' animation-name from animation-config
//'integer' time in seconds to construct the tent
//'string' classname for the tent to be build
//'array (string)' classnames for every vehicle that should be capable to carry a tent
last updated: 04.11.2021 by [TTT] EinStein
*/
stein_useAnimation = true;
stein_BuildAnimation = "Acts_carFixingWheel";
stein_BuildTime = 15;
stein_medicTent = "Land_tent_east";
stein_SupportedVehicleClasses = ["Redd_Tank_Fuchs_1A4_San_Tropentarn", "Redd_Tank_Fuchs_1A4_San_Flecktarn", "Redd_Tank_Fuchs_1A4_San_Wintertarn"];
stein_fnc_vehicleHasTent = {
params ["_target","_caller","_arguments"];
_bool = true;
if (!(_target getVariable ["hasTent", true])) then {_bool = false;};
_bool;
};
stein_fnc_canDeconstruct = {
params ["_target","_caller","_arguments"];
private _arrayVehicles = nearestObjects [(getPos _target), stein_SupportedVehicleClasses, 15];
_bool = false;
{
if (!(_x getVariable ["hasTent", true])) then {_bool = true;};
} forEach _arrayVehicles;
if ((_target getVariable ["inUse", false])) then {_bool = false;};
hint str _bool;
_bool;
};
stein_fnc_cancel = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params ["_variable", "_value"];
hint "Vorgang abgebrochen";
_caller switchMove "";
if (typeOf _target == stein_medicTent) then {
_target setVariable ["inUse", false, true];
_arrayVehicles = nearestObjects [(getPos _target), stein_SupportedVehicleClasses, 15];
private "_vehicle";
private _ArrayVehicle = [];
{
if (!(_x getVariable ["hasTent", true])) then {_ArrayVehicle pushBack _x};
} forEach _arrayVehicles;
_vehicle = _ArrayVehicle select 0;
[_vehicle, (_vehicle getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _vehicle), false];
}
else {
_target setVariable ["hasTent", true, true];
[_target, (_target getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _target), false];
};
};
stein_fnc_deconstructTent = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
_arrayVehicles = nearestObjects [(getPos _target), stein_SupportedVehicleClasses, 15];
private "_vehicle";
private _ArrayVehicle = [];
{
if (!(_x getVariable ["hasTent", true])) then {_ArrayVehicle pushBack _x};
} forEach _arrayVehicles;
_vehicle = _ArrayVehicle select 0;
hint Format ["Das Zelt wurde in das Fahrzeug;\nRichtung: %1 Grad\nEntfernung: %2 Meter\ngeladen.",
(round ((getPos _target) getDir (getPos _vehicle))), (round ((getPos _target) distance (getPos _vehicle)))];
_vehicle setVariable ["hasTent", true, true];
deleteVehicle _target;
_caller switchMove "";
[_vehicle, (_vehicle getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _vehicle), false];
};
stein_fnc_deconstruct_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
_target setVariable ["inUse", true, true];
_arrayVehicles = nearestObjects [(getPos _target), stein_SupportedVehicleClasses, 15];
private "_vehicle";
private _ArrayVehicle = [];
{
if (!(_x getVariable ["hasTent", true])) then {_ArrayVehicle pushBack _x};
} forEach _arrayVehicles;
_vehicle = _ArrayVehicle select 0;
_vehicle setVariable ["fuel", (fuel _vehicle), true];
[_vehicle, 0] remoteExec ["setFuel", (owner _vehicle), false];
[_vehicle, [0, 0, 0]] remoteExec ["setVelocity", (owner _vehicle), false];
if (stein_useAnimation) then {_caller playMove stein_BuildAnimation;};
[stein_BuildTime, _this, stein_fnc_deconstructTent, stein_fnc_cancel, "Baue medizinisches Zelt ab"] call ace_common_fnc_progressBar;
};
stein_fnc_buildTent = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [-10, getDir _target]) findEmptyPosition [2, 10, "Tank"];
_medicTent = stein_medicTent createVehicle _position;
_medicTent setVariable ["ace_medical_isMedicalFacility", true, true];
_medicTent setVariable ["inUse", false, true];
_caller switchMove "";
[_target, (_target getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _target), false];
};
stein_fnc_build_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [-10, getDir _target]) findEmptyPosition [2, 10, "Tank"];
_target setVariable ["hasTent", false, true];
if (_position isEqualTo []) exitWith {
hint "Nicht genug Platz zum Aufbau des Zeltes vorhanden.";
_target setVariable ["hasTent", true, true];
};
_target setVariable ["fuel", (fuel _target), true];
[_target, 0] remoteExec ["setFuel", (owner _target), false];
[_target, [0, 0, 0]] remoteExec ["setVelocity", (owner _target), false];
if (stein_useAnimation) then {_caller playMove stein_BuildAnimation;};
[stein_BuildTime, _this, stein_fnc_buildTent, stein_fnc_cancel, "Baue medizinisches Zelt auf"] call ace_common_fnc_progressBar;
};
_buildTent = ["stein_medicTent_build", "Baue medizinisches Zelt auf", "",
stein_fnc_build_progressBar, stein_fnc_vehicleHasTent
] call ace_interact_menu_fnc_createAction;
_deconstructTent = ["stein_medicTent_deconstruct", "Baue medizinisches Zelt ab", "",
stein_fnc_deconstruct_progressBar, stein_fnc_canDeconstruct
] call ace_interact_menu_fnc_createAction;
{
[_x, 0, ["ACE_MainActions"], _buildTent] call ace_interact_menu_fnc_AddActionToClass;
} forEach stein_SupportedVehicleClasses;
[stein_medicTent, 0, ["ACE_MainActions"], _deconstructTent] call ace_interact_menu_fnc_AddActionToClass;
Skript von EinStein
scripts\stein_medicTent_backpack.sqf
einfügen[] call compile preprocessFileLineNumbers "scripts\stein_medicTent_backpack.sqf"
; eintragenHinweis: man kann die Plane nicht an andere Spieler weitergeben
[] call compile preprocessFileLineNumbers "scripts\stein_medicTent_backpack.sqf";
/*
author: [TTT] EinStein
description: adds an ACE-Self-AddAction to a player, who will be able to assemble a tent as a medical facitlity.
note: it's not possible to transfer a tent to an other player via switching backpacks.
usage (initPlayerLocal.sqf):
[] call compile preprocessFileLineNumbers "scripts\stein_medicTent_backpack.sqf";
last updated: 04.11.2021 by [TTT] EinStein
*/
stein_mop_useAnimation = true; //'bool' should an animation be used while constructiong
stein_mop_buildAnimation = "Acts_carFixingWheel"; //'string' animation-name from animation-config
stein_mop_buildTime = 8; //'integer' time in seconds to construct the tent
stein_mop_object = "Land_MedicalTent_01_floor_dark_F"; //'string' classname for the tent to be build
stein_mop_items = ["Land_Camping_Light_F", "Land_FirstAidKit_01_open_F", "Land_Defibrillator_F"]; //'array (string)' classnames for every item that should be created in/on/near the tent
stein_mop_backpack = ["B_Kitbag_cbr"]; //'array (string)' classnames for every backpack that should be able to carry a tent
stein_mop_canBuild = {
params ["_target","_caller","_arguments"];
_arguments params [];
_bool = false;
if ((stein_mop_backpack find (backpack _caller) != -1) && (player getVariable ["hasTent", true])) then {_bool = true;};
_bool;
};
stein_mop_canZip = {
params ["_target","_caller","_arguments"];
_arguments params [];
_bool = false;
if (!(_target getVariable ["inUse", false]) && !(player getVariable ["hasTent", true]) && (stein_mop_backpack find (backpack _caller) != -1)) then {_bool = true};
_bool;
};
stein_mop_cancel = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
hint "Vorgang abgebrochen";
_caller switchMove "";
if (typeOf _target == stein_mop_object) then {
_target setVariable ["inUse", false, true];
};
};
stein_mop_zip = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
private _posBP = getPos _target;
private _arrayItems = nearestObjects [(getPos _target), stein_mop_items, 10];
{
deleteVehicle _x;
} forEach _arrayItems;
deleteVehicle _target;
_caller setVariable ["hasTent", true];
};
stein_mop_zip_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
_target setVariable ["inUse", true, true];
if (stein_mop_useAnimation) then {_caller playMove stein_mop_buildAnimation;};
[stein_mop_buildTime, _this, stein_mop_zip, stein_mop_cancel, "Baue mobilen Operationsbereich ab"] call ace_common_fnc_progressBar;
};
stein_mop_build = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [8, getDir _target]) findEmptyPosition [1, 2, "Tank"];
_mop = stein_mop_object createVehicle _position;
_mop setVariable ["ace_medical_isMedicalFacility", true, true];
_mop setVariable ["inUse", false, true];
_caller setVariable ["hasTent", false];
{
private _posItem = (getPos _mop) findEmptyPosition [1, 3, "Tank"];
_x createVehicle _posItem;
} forEach stein_mop_items;
_caller switchMove "";
};
stein_mop_build_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [8, getDir _target]) findEmptyPosition [1, 2, "Tank"];
if (_position isEqualTo []) exitWith {
hint "Nicht genug Platz zum Aufbau der MOP vorhanden.";
};
if (stein_mop_useAnimation) then {_caller playMove stein_mop_buildAnimation;};
[stein_mop_buildTime, _this, stein_mop_build, stein_mop_cancel, "Richte mobilen Operationsbereich ein"] call ace_common_fnc_progressBar;
};
_buildMOP = ["stein_mop_build", "Errichte mobilen Operationsbereich", "",
stein_mop_build_progressBar, stein_mop_canBuild
] call ace_interact_menu_fnc_createAction;
_zipMOP = ["stein_mop_zip", "Baue mobilen Operationsbereich ab", "",
stein_mop_zip_progressBar, stein_mop_canZip
] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], _buildMOP] call ace_interact_menu_fnc_AddActionToObject;
[stein_mop_object, 0, ["ACE_MainActions"], _zipMOP] call ace_interact_menu_fnc_AddActionToClass;
Skript von EinStein, modifiziert von Andx
[] call compile preprocessFileLineNumbers "scripts\andx_repaircontainer_vehicle.sqf";
/*
author: [TTT] Andx
description: adds an ACE-AddAction to specific vehicles to build a repair container as repari facility behinde the vehicle.
note: every vehicle is loaded by default. If this is not wanted, type ' if (isServer) then {this setVariable ["hascontainer", false];};' in the object init.
usage (initPlayerLocal.sqf):
[] call compile preprocessFileLineNumbers "scripts\andx_repaircontainer_vehicle.sqf";
last updated: 06.11.2021 by [TTT] Andx
*/
andx_useAnimation = true; //'bool' should an animation be used while constructiong
andx_BuildAnimation = "Acts_carFixingWheel"; //'string' animation-name from animation-config
andx_BuildTime = 15; //'integer' time in seconds to construct the container
andx_repaircontainer = "Land_RepairDepot_01_green_F"; //'string' classname for the container to be build
andx_SupportedVehicleClasses = ["I_Truck_02_box_F"]; //'array (string)' classnames for every vehicle that should be capable to carry a container
andx_fnc_vehicleHascontainer = {
params ["_target","_caller","_arguments"];
_bool = true;
if (!(_target getVariable ["hascontainer", true])) then {_bool = false;};
_bool;
};
andx_fnc_canDeconstruct = {
params ["_target","_caller","_arguments"];
private _arrayVehicles = nearestObjects [(getPos _target), andx_SupportedVehicleClasses, 15];
_bool = false;
{
if (!(_x getVariable ["hascontainer", true])) then {_bool = true;};
} forEach _arrayVehicles;
if ((_target getVariable ["inUse", false])) then {_bool = false;};
hint str _bool;
_bool;
};
andx_fnc_cancel = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params ["_variable", "_value"];
hint "Vorgang abgebrochen";
_caller switchMove "";
if (typeOf _target == andx_repaircontainer) then {
_target setVariable ["inUse", false, true];
_arrayVehicles = nearestObjects [(getPos _target), andx_SupportedVehicleClasses, 15];
private "_vehicle";
private _ArrayVehicle = [];
{
if (!(_x getVariable ["hascontainer", true])) then {_ArrayVehicle pushBack _x};
} forEach _arrayVehicles;
_vehicle = _ArrayVehicle select 0;
[_vehicle, (_vehicle getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _vehicle), false];
}
else {
_target setVariable ["hascontainer", true, true];
[_target, (_target getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _target), false];
};
};
andx_fnc_deconstructcontainer = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
_arrayVehicles = nearestObjects [(getPos _target), andx_SupportedVehicleClasses, 15];
private "_vehicle";
private _ArrayVehicle = [];
{
if (!(_x getVariable ["hascontainer", true])) then {_ArrayVehicle pushBack _x};
} forEach _arrayVehicles;
_vehicle = _ArrayVehicle select 0;
hint Format ["Die mobile Werkstatt wurde in das Fahrzeug;\nRichtung: %1 Grad\nEntfernung: %2 Meter\ngeladen.",
(round ((getPos _target) getDir (getPos _vehicle))), (round ((getPos _target) distance (getPos _vehicle)))];
_vehicle setVariable ["hascontainer", true, true];
deleteVehicle _target;
_caller switchMove "";
[_vehicle, (_vehicle getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _vehicle), false];
};
andx_fnc_deconstruct_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
_target setVariable ["inUse", true, true];
_arrayVehicles = nearestObjects [(getPos _target), andx_SupportedVehicleClasses, 15];
private "_vehicle";
private _ArrayVehicle = [];
{
if (!(_x getVariable ["hascontainer", true])) then {_ArrayVehicle pushBack _x};
} forEach _arrayVehicles;
_vehicle = _ArrayVehicle select 0;
_vehicle setVariable ["fuel", (fuel _vehicle), true];
[_vehicle, 0] remoteExec ["setFuel", (owner _vehicle), false];
[_vehicle, [0, 0, 0]] remoteExec ["setVelocity", (owner _vehicle), false];
if (andx_useAnimation) then {_caller playMove andx_BuildAnimation;};
[andx_BuildTime, _this, andx_fnc_deconstructcontainer, andx_fnc_cancel, "Baue Werkstatt ab"] call ace_common_fnc_progressBar;
};
andx_fnc_buildcontainer = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [-10, getDir _target]) findEmptyPosition [2, 10, "Tank"];
_repaircontainer = andx_repaircontainer createVehicle _position;
_repaircontainer setDir (getDir _target + 180);
_repaircontainer setVariable ["ACE_isRepairFacility", true, true];
_repaircontainer setVariable ["inUse", false, true];
_caller switchMove "";
[_target, (_target getVariable ["fuel", 100])] remoteExec ["setFuel", (owner _target), false];
};
andx_fnc_build_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [-10, getDir _target]) findEmptyPosition [2, 10, "Tank"];
_target setVariable ["hascontainer", false, true];
if (_position isEqualTo []) exitWith {
hint "Nicht genug Platz zum Aufbau der mobilen Werkstatt vorhanden.";
_target setVariable ["hascontainer", true, true];
};
_target setVariable ["fuel", (fuel _target), true];
[_target, 0] remoteExec ["setFuel", (owner _target), false];
[_target, [0, 0, 0]] remoteExec ["setVelocity", (owner _target), false];
if (andx_useAnimation) then {_caller playMove andx_BuildAnimation;};
[andx_BuildTime, _this, andx_fnc_buildcontainer, andx_fnc_cancel, "Baue Werkstatt auf"] call ace_common_fnc_progressBar;
};
_buildcontainer = ["andx_repaircontainer_build", "Baue Werkstatt auf", "",
andx_fnc_build_progressBar, andx_fnc_vehicleHascontainer
] call ace_interact_menu_fnc_createAction;
_deconstructcontainer = ["andx_repaircontainer_deconstruct", "Baue Werkstatt ab", "",
andx_fnc_deconstruct_progressBar, andx_fnc_canDeconstruct
] call ace_interact_menu_fnc_createAction;
{
[_x, 0, ["ACE_MainActions"], _buildcontainer] call ace_interact_menu_fnc_AddActionToClass;
} forEach andx_SupportedVehicleClasses;
[andx_repaircontainer, 0, ["ACE_MainActions"], _deconstructcontainer] call ace_interact_menu_fnc_AddActionToClass;
Skript von Reimchen
r_crate.sqf
//Kisten befüllen skipt laden
reim_fnc_crateFiller = compile preProcessFileLineNumbers "scripts\r_crate.sqf";
//Fhz befüllen
[
[fhz_01, fhz_02],
[
["Classname_des_Objektes", Anzahl],
["ACE_EntrenchingTool", 9],
["Toolkit", 1]
]
] call reim_fnc_crateFiller;
params ["_crates", "_content"];
{
_crateObject = _x;
clearWeaponCargoGlobal _crateObject;
clearMagazineCargoGlobal _crateObject;
clearItemCargoGlobal _crateObject;
clearBackpackCargoGlobal _crateObject;
{
call {
if ((_x select 0) isKindOf ["ItemCore", configFile >> "CfgWeapons"]) exitWith {
_crateObject addItemCargoGlobal _x;
};
if (isClass(configFile >> "CfgMagazines" >> (_x select 0))) exitWith {
_crateObject addMagazineCargoGlobal _x;
};
if ((_x select 0) isKindOf "Bag_Base") exitWith {
_crateObject addBackpackCargoGlobal _x;
};
if (isClass(configFile >> "CfgWeapons" >> (_x select 0))) exitWith {
_crateObject addWeaponCargoGlobal _x;
};
};
nil
} count _content;
nil
} count _crates;
Skript von EinStein
this setVariable ["loadout", "rifleman"];
rifleman.sqf
, dann für alle Loadouts wiederholenprivate _loadoutSQF = ["loadouts\", (player getVariable ["loadout", "rifleman"]), ".sqf"] joinString "";
[] spawn compile preprocessFileLineNumbers _loadoutSQF;
Original Skript von EinStein, modifiziert durch Andx
Eine Signalplane um Landezonen für Hubschrauber zu markieren.
/*
author: [TTT] EinStein modfied by [TTT] Andx
first usage: Smart John
description: adds an ACE-AddAction to a backpack, which can be used to build a signaling plane.
Usage (initPlayerLocal.sqf):
[] call compile preprocessFileLineNumbers "scripts\stein_Plane.sqf";
last Updated: 15.09.2019 by [TTT] EinStein
*/
stein_mop_plane_useAnimation = true;
stein_mop_plane_buildAnimation = "Acts_carFixingWheel";
stein_mop_plane_buildTime = 5;
stein_mop_plane_object = "Tarp_01_Large_Red_F";
stein_mop_plane_items = [];
stein_mop_plane_backpack = ["TFAR_rt1523g_big_bwmod"];
stein_mop_plane_canBuild = {
params ["_target","_caller","_arguments"];
_arguments params [];
_bool = false;
{
if ((backpack _caller == _x) && (player getVariable ["hasTent", true])) then {
_bool = true;
};
} forEach stein_mop_plane_backpack;
_bool;
}; //return bool
stein_mop_plane_canZip = {
params ["_target","_caller","_arguments"];
_arguments params [];
_bool = false;
private _used = _target getVariable "inUse";
if (!_used) then {_bool = true};
_bool;
}; //return bool
stein_mop_plane_cancel = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
hint "Vorgang abgebrochen";
_caller switchMove "";
if (typeOf _target == stein_mop_plane_object) then {
_target setVariable ["inUse", false, true];
};
}; //return code
stein_mop_plane_zip = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
private _posBP = getPos _target;
private _arrayItems = nearestObjects [(getPos _target), stein_mop_plane_items, 10];
{
deleteVehicle _x;
} forEach _arrayItems;
deleteVehicle _target;
_caller setVariable ["hasTent", true];
}; //return code
stein_mop_plane_zip_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
_target setVariable ["inUse", true, true];
if (stein_mop_plane_useAnimation) then {_caller playMove stein_mop_plane_buildAnimation;};
[stein_mop_plane_buildTime, _this, stein_mop_plane_zip, stein_mop_plane_cancel, "Lege Plane zusammen"] call ace_common_fnc_progressBar;
}; //return code
stein_mop_plane_build = {
(_this select 0) params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [8, getDir _target]) findEmptyPosition [1, 2, "Tank"];
_mop_plane = stein_mop_plane_object createVehicle _position;
_mop_plane setVariable ["inUse", false, true];
_caller setVariable ["hasTent", false];
_caller switchMove "";
}; //return code
stein_mop_plane_build_progressBar = {
params ["_target","_caller","_arguments"];
_arguments params [];
private _position = (_target getPos [8, getDir _target]) findEmptyPosition [1, 2];
if (_position isEqualTo []) exitWith {
hint "Kein Platz für die Signalplane.";
};
if (stein_mop_plane_useAnimation) then {_caller playMove stein_mop_plane_buildAnimation;};
[stein_mop_plane_buildTime, _this, stein_mop_plane_build, stein_mop_plane_cancel, "Lege Plane aus"] call ace_common_fnc_progressBar;
}; //return code
_buildmop_plane = ["stein_mop_plane_build", "Signalplane auslegen", "",
stein_mop_plane_build_progressBar, stein_mop_plane_canBuild
] call ace_interact_menu_fnc_createAction;
_zipmop_plane = ["stein_mop_plane_zip", "Signalplane einsammeln", "",
stein_mop_plane_zip_progressBar, stein_mop_plane_canZip
] call ace_interact_menu_fnc_createAction;
[player, 1, ["ACE_SelfActions", "ACE_Equipment"], _buildmop_plane] call ace_interact_menu_fnc_AddActionToObject;
[stein_mop_plane_object, 0, ["ACE_MainActions"], _zipmop_plane] call ace_interact_menu_fnc_AddActionToClass;
[] call compile preprocessFileLineNumbers "scripts\stein_Plane.sqf";
Skript von Redd
this addeventhandler ["fired", {[_this select 0,_this select 5,100,selectRandom [3,4,5],true,[enemyAri_1,enemyAri_2,enemyAri_3,enemyAri_4],[],0] remoteExec ["Redd_fnc_AriCounterFire",2]}]; this call lambs_wp_fnc_taskReset;
Die Variaben der Feindartillere müsst ihr an eure anpassen.Wichtig: die Feindlichen Artilleriegeschütze müssen auf die Headless-Client Blacklist gesetzt werden. Das geht enteweder auch über die init-Zeile oder übe ein 3den Attribut.
class CfgFunctions
{
#include "Redd_Ari\CfgFunctions.hpp"
};
Skript von Andx und EinStein
andx_deconstruct.sqf
anlegen und den Code reinkopieren[] call compile preprocessFileLineNumbers "scripts/andx_deconstruct.sqf";
in der initPlayerLocal.sqf
einfügen[] call compile preprocessFileLineNumbers "scripts\andx_deconstruct.sqf";
/*
author: [TTT] Andx
description: add action to deconstruct objects, like Czech Hedghogs. Player needs a Toolkit in inventory and the "ACE_IsEngineer" trait.
usage (initPlayerLocal.sqf):
[] call compile preprocessFileLineNumbers "scripts\andx_deconstruct.sqf";
_objects : array of all objects that can be deconstructed
andx_anim : animation the player charakter plays while deconstructing
andx_time : duration the process takes
last updated: 12.11.2021 by [TTT] Andx
*/
_objects = ["Land_CzechHedgehog_01_new_F", "Land_CzechHedgehog_01_old_F"];
andx_anim = "Acts_carFixingWheel";
andx_time = 14;
andx_remove_object_progressbar = {
params ["_target","_caller","_arguments"];
_caller playMove andx_anim;
[andx_time, _this, {(_this select 0) params ["_target"]; deleteVehicle _target;}, {(_this select 0) params ["_target","_caller"]; hint "Abgebrochen!"; _caller switchMove "";}, "Entferne Sperre"] call ace_common_fnc_progressBar;
};
andx_can_remove = {
params ["_target","_caller","_arguments"];
_bool = false;
if (([_caller, "Toolkit"] call BIS_fnc_hasItem) and ([_caller, 1] call ace_repair_fnc_isEngineer)) then {
_bool = true;
};
_bool;
};
//Aktion erstellen
_removeObject = ["andx_remove_object", "Sperre entfernen", "",
andx_remove_object_progressbar, andx_can_remove
] call ace_interact_menu_fnc_createAction;
//Action an alle Objekte anfügen
{
[_x, 0, ["ACE_MainActions"], _removeObject] call ace_interact_menu_fnc_AddActionToClass;
} forEach _objects;
Eine Alternative zu Spec_Construct oder dem ACE Fortify Tool.
InitServer.sqf
Fahrzeuge befüllen: [Fahrzeugvariable, "Classname-des-Objektes", Anzahl-Objekte] call grad_fortifications_fnc_addFort;
Anstelle des Fahrzeug kann auch eine Kiste benutzt werden.
made by Gruppe Adler
//Beispiel
{
[_x, "EFM_wood_wall_2m_single", 10] call grad_fortifications_fnc_addFort;
[_x, "Land_BagFence_Short_F", 10] call grad_fortifications_fnc_addFort;
[_x, "Land_Plank_01_4m_F", 10] call grad_fortifications_fnc_addFort;
[_x, "Land_Net_Fence_4m_F", 10] call grad_fortifications_fnc_addFort;
[_x, "Land_CzechHedgehog_01_new_F", 10] call grad_fortifications_fnc_addFort;
[_x, "FlagMarker_01_F", 10] call grad_fortifications_fnc_addFort;
} forEach [fhz_01, fhz_02, fhz_03];
von EinStein
Damit ein aufgehobenes Intel für alle Spieler geteilt wird (über Mapscreen -> TTT-Datenbank).
player createDiarySubject ["mission_notes", "TTT-Datencenter"]
;[intel_01, "Lagekarte des Gegners", true, ["Karte", "<img image='pictures\Karte_v3.paa' width=370 height=370/>"] ] call compile preprocessFileLineNumbers "scripts\stein_clue.sqf";
intel_0
1 = Das Intel-Objekt
"Lagekarte des Gegners"
= String, Steht als addAction da wenn man es aufheben möchte
true
= ob das Objekt mit dem Aufheben entfernt wird
["Titel", "Inhalt"]
= Titel und Inhalt des Diary (Textinfo wie hier beschrieben https://community.bistudio.com/wiki/createDiaryRecord)
/*
author = EinStein
description = creates some sort of information gathering and sharing
usage: [o_clue_1, "Handy aufheben", ["Handybild", "<img image='pictures\p_clue_1.jpg' width='500' height='800'/>"]] call compile preprocessFileLineNumbersstein_clue;
local ONLY (initPlayerLocal.sqf)
*/
params ["_object", "_title", "_delete","_textInfo"];
if (_object getVariable ["infoShared", false]) exitWith {
player createDiaryRecord ["mission_notes", _textInfo];
};
_object addAction [_title,{
params ["_target", "_caller", "_actionId", "_arguments"];
{[_x, ["mission_notes", (_arguments select 1)]] remoteExec ["createDiaryRecord", _x, true]} forEach allPlayers;
[_target,_actionId] remoteExec ["removeAction", 0, true];
if (_arguments select 0) then {[_target] remoteExec ["hideObjectGlobal", 0, false];};
_target setVariable ["infoShared", true, true];
["Neue Informationen wurden zum TTT-Datencenter hinzugefügt"] remoteExec ["hint", 0, false];
},[_delete, _textInfo],99,true,false,"","true",2];
/// ändert "TTT-Datencenter" ggf. in eine passende Bezeichung für eure Misison
player createDiarySubject ["mission_notes", "TTT-Datencenter"];
[intel_01, "Lagekarte des Gegners", true, ["Karte", "<img image='pictures\Karte_v3.paa' width=370 height=370/>"] ] call compile preprocessFileLineNumbers "scripts\stein_clue.sqf";
Dieses Skript macht Fahrzeuge unzerstörbar, das heißt einzelne Baugruppen können zerstört werden, aber das Fahrzeug kann nicht als ganzes zerstört werden.
Vielen Dank an das PzGrenBtl 402 fürs bereitstellen dieses Skriptes. Edits by Andx, Der alte Benni.
private _vehicleShield = compile preprocessFileLineNumbers "scripts\vehicleShield.sqf";
{
[_x] call _vehicleShield;
}
forEach [fhz_01, fhz_02, fhz_03, fhz_04, medic_01]; //Variablennamen der Fhz die geschützt werden
params ["_kfz"];
_kfz addEventHandler ["HandleDamage",
{
_unit = _this select 0;
_selection = _this select 1;
_damage = _this select 2;
_source = _this select 3;
_projectile = _this select 4;
if (_selection in ["", """", "telo", "hull", "karoserie", "hit_hull", "hithull", "hit_hull_point"]) then {
_damage = 0;
};
if (_projectile == "SLAMDirectionalMine_Wire_Ammo") then {
_kette = selectRandom ["hitltrack", "hitrtrack"];
_unit setHitPointDamage [_kette, 1];
};
_damage
}
];
Author: tad
Mit diesem Skript kann man in ACRE die Channel benennen, und das auch für die Channel mit einer Nummer > 10.
// Created by Tad, SteamID: 76561197991835568
// Easy way to build radio presets. Provide what you want into the _nets array and let it go to work.
//
// Usage:
// Change _nets array here to list whatever Channels you want to use.
// In Init.sqf use: call "scripts\init\acre.sqf";
// In initPlayerLocal.sqf use: [] execvm "scripts\init\acre.sqf";
//
//
// Acre check, no point setting if server / HC or if users aren't using ACRE.
if (isClass (configFile >> "CfgPatches" >> "acre_main")) then {
[2, "Setting up Acre Channels."] execvm "scripts\performance\log.sqf";
//ACRE Channel Setup
private _radios = ["ACRE_PRC152", "ACRE_PRC117F"];
private _nets = ["HQCMD NET","A Company", "1Pl NET", "2Pl NET", "3Pl NET", "Fluid NET 1", "Fluid NET 2", "A2A NET", "CAS NET", "FIRES NET", "Fluid NET 3", "Fluid NET 4"];
{
_radio = _x;
_presetName = "xxx";
_set = "";
[_radio, "default", _presetName] call acre_api_fnc_copyPreset;
{
_channelID = _foreachIndex;
_net = _x;
if (_radio isEqualTo "ACRE_PRC152") then {
_set = "description";
};
if (_radio isEqualTo "ACRE_PRC117F") then {
_set = "name";
};
[_radio, _presetName, _channelID +1, _set, _net] call acre_api_fnc_setPresetChannelField;
} foreach _nets;
[_radio, _presetName] call acre_api_fnc_setPreset;
} foreach _radios;
};
// Sets ACRE2 channel names
{
[_x, "default", "TTT"] call acre_api_fnc_copyPreset;
[_x, "TTT", 1, "label", "PLT NET 1"] call acre_api_fnc_setPresetChannelField; // Kampfkreis
[_x, "TTT", 2, "label", "PLT NET 2"] call acre_api_fnc_setPresetChannelField;
[_x, "TTT", 3, "label", "PLT NET 3"] call acre_api_fnc_setPresetChannelField;
[_x, "TTT", 4, "label", "COY NET"] call acre_api_fnc_setPresetChannelField; // Zugführung <-> Zeus/HQ
[_x, "TTT", 5, "label", "CAS"] call acre_api_fnc_setPresetChannelField; // JTAC <-> Fluggerät
[_x, "TTT", 6, "label", "ATC"] call acre_api_fnc_setPresetChannelField; // Flugfunk
[_x, "TTT", 7, "label", "SUPPORT"] call acre_api_fnc_setPresetChannelField; // Zugführung <-> Aufklärer/Pioniere/etc
[_x, "TTT", 8, "label", "FIRES"] call acre_api_fnc_setPresetChannelField; // FO <-> Artillere/Mörser
[_x, "TTT", 9, "label", "LOGISTICS"] call acre_api_fnc_setPresetChannelField; // Zugführung <-> Sanität und Logistik
//Funknamen anpassen!
[_x, "TTT", 10, "label", "Delta"] call acre_api_fnc_setPresetChannelField; // Zugführung intern
[_x, "TTT", 11, "label", "Delta-1"] call acre_api_fnc_setPresetChannelField; // 1. Gruppe
[_x, "TTT", 12, "label", "Delta-2"] call acre_api_fnc_setPresetChannelField; // 2. Gruppe
[_x, "TTT", 13, "label", "Delta-3"] call acre_api_fnc_setPresetChannelField; // 3. Gruppe
[_x, "TTT", 14, "label", "Delta-4"] call acre_api_fnc_setPresetChannelField; // 4. Gruppe
[_x, "TTT", 19, "label", "Black Bird"] call acre_api_fnc_setPresetChannelField; // Logistik 3 intern
[_x, "TTT"] call acre_api_fnc_setPreset;
} forEach ["ACRE_PRC148", "ACRE_PRC152", "ACRE_PRC117F"];
Author: drofseh
In die init-Zeile des Fahrzeugs folgenden Code kopieren:
if (isServer) then {
[
{
private _vehicle = _this select 0;
[_vehicle, {}] call acre_api_fnc_initVehicleRacks;
private _vehicleRacks = [_vehicle] call acre_api_fnc_getVehicleRacks;
for "_i" from (count _vehicleRacks) - 1 to 0 step -1 do {
[_vehicle, _vehicleRacks select _i] call acre_api_fnc_removeRackFromVehicle;
};
[_vehicle, ["ACRE_VRC64", "Radio Set - Alpha", "Set A", false, ["driver","copilot"], [], "ACRE_PRC77", [], ["Intercom_1"]], false, {}] call acre_api_fnc_addRackToVehicle;
[_vehicle, ["ACRE_VRC64", "Radio Set - Bravo", "Set B", false, ["driver","copilot"], [], "ACRE_PRC77", [], ["Intercom_1"]], false, {}] call acre_api_fnc_addRackToVehicle;
_vehicle setVariable ["Dro_customRacksAdded", true, true];
},
[this],
0.1
] call CBA_fnc_waitAndExecute;
[
{(_this select 0) getVariable ["Dro_customRacksAdded", false]},
{[(_this select 0), {}] call acre_api_fnc_initVehicleRacks},
[this]
] call CBA_fnc_waitUntilAndExecute;
};
];
Zeile 14/15 ggf. die Positionen an denen das Rack nutzbar sein soll anpassen, sowie welches Funkgerät dort verbaut sein soll. Weitere Erklärung hier https://acre2.idi-systems.com/wiki/frameworks/vehicle-racks
Zur Benutzung zusammen mit WebKnight's Two Primary Weapons (Workshop-Link)
[
player,
"arifle_MX_GL_F",
["30Rnd_65x39_caseless_mag","3Rnd_HE_Grenade_shell"],
"muzzle_snds_h",
"acc_pointer_ir",
"optic_hamr"
] call WKB_CreateWeaponSecond_Scripted;
Folgende Zeile an das Ende des Loadoutskript einfügen:
[ACE_player, currentWeapon ACE_player, currentMuzzle ACE_player] call ace_safemode_fnc_lockSafety;
Um allen Fahrzeugen cTAB wegnzunehmen folgendes in die init.sqf schreiben:
//disable cTAB für alle Fhz
cTab_vehicleClass_has_FBCB2 = [];
Wenn ihr bei bestimmten Fhz cTAB haben wollt, müsst ihr deren Class-Name in die eckigen Klammern schreiben.
in die Init des Fhz schreiben:
// Change this vehicle's identification displayed on all cTab Blue Force Trackers to "Fox"
this setVariable ["cTab_groupId","Fox",true];
https://github.com/diwako/diwako_cbrn
Auf dem Github Account von Specop0 findet ihr noch weitere Skripte.