diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_addAction.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_addAction.sqf
new file mode 100644
index 0000000..75085a6
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_addAction.sqf
@@ -0,0 +1,4 @@
+_array = _this select 3;
+_param = _array select 0;
+_code = _array select 1;
+_spawn = _param spawn _code;
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_cargo_system/=BTC=_cargo_system_init.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_cargo_system/=BTC=_cargo_system_init.sqf
new file mode 100644
index 0000000..168d4ee
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_cargo_system/=BTC=_cargo_system_init.sqf
@@ -0,0 +1,83 @@
+waitUntil {!isNull player};
+waitUntil {player == player};
+#include "=BTC=_functions.sqf"
+BTC_action_cargo = false;
+BTC_l_dragging = false;
+BTC_l_actions_cond = true;
+
+
+_dlg = player addaction [("") + ("Check Vehicle") + "",BTC_dir_action,[[],BTC_l_check_vehicle],-7,false,false,"","BTC_l_actions_cond && count (nearestObjects [player, BTC_def_vehicles, 5]) > 0 || {vehicle player isKindOf _x} count BTC_def_vehicles > 0"];
+_sel = player addaction [("") + ("Select") + "",BTC_dir_action,[[],BTC_l_select],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && count (nearestObjects [player, BTC_def_cargo, 5]) > 0"];
+_load = player addaction [("") + ("Load") + "",BTC_dir_action,[[],BTC_l_load],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && !isNull BTC_cargo_selected && count (nearestObjects [player, BTC_def_vehicles, 5]) > 0"];
+_drag = player addaction [("") + ("Drag") + "",BTC_dir_action,[[],BTC_l_drag],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && count (nearestObjects [player, BTC_def_drag, 5]) > 0"];
+_plac = player addaction [("") + ("Place") + "",BTC_dir_action,[[],BTC_l_placement],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && count (nearestObjects [player, BTC_def_placement, 5]) > 0"];
+_eh = player addEventHandler ["respawn",
+{
+ _actions = [] spawn
+ {
+ waitUntil {Alive player};
+ BTC_action_cargo = false;
+ BTC_l_dragging = false;
+ BTC_l_actions_cond = true;
+ _dlg = player addaction [("") + ("Check Vehicle") + "",BTC_dir_action,[[],BTC_l_check_vehicle],-7,false,false,"","BTC_l_actions_cond && count (nearestObjects [player, BTC_def_vehicles, 5]) > 0 || {vehicle player isKindOf _x} count BTC_def_vehicles > 0"];
+ _sel = player addaction [("") + ("Select") + "",BTC_dir_action,[[],BTC_l_select],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && count (nearestObjects [player, BTC_def_cargo, 5]) > 0"];
+ _load = player addaction [("") + ("Load") + "",BTC_dir_action,[[],BTC_l_load],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && !isNull BTC_cargo_selected && count (nearestObjects [player, BTC_def_vehicles, 5]) > 0"];
+ _drag = player addaction [("") + ("Drag") + "",BTC_dir_action,[[],BTC_l_drag],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && count (nearestObjects [player, BTC_def_drag, 5]) > 0"];
+ _plac = player addaction [("") + ("Place") + "",BTC_dir_action,[[],BTC_l_placement],-7,false,false,"","BTC_l_actions_cond && vehicle player == player && count (nearestObjects [player, BTC_def_placement, 5]) > 0"];
+ };
+}];
+BTC_main_cc =
+[
+ "Motorcycle",1,
+ "Car",3,
+ "Truck",10,
+ "Wheeled_APC",5,
+ "Tank",5,
+ "Ship",3,
+ "Helicopter",6
+];
+BTC_main_rc =
+[
+ "ReammoBox_F",2,
+ "Strategic",2,
+ "Motorcycle",3,
+ "Car",11,
+ "Truck",15,
+ "Wheeled_APC",20,
+ "Tank",25,
+ "Ship",15,
+ "Helicopter",9999
+];
+/*
+BTC_main_c_c =
+[
+ [
+ //Cars
+ "B_MRAP_01_F",
+ "B_MRAP_01_gmg_F",
+ "B_MRAP_01_hmg_F",
+ "O_MRAP_02_F",
+ "O_MRAP_02_gmg_F",
+ "O_MRAP_02_hmg_F",
+ "B_Quadbike_01_F",
+ "C_Offroad_01_F",
+ "O_Quadbike_01_F",
+ "I_Quadbike_01_F",
+ "I_MRAP_03_F",
+ "I_MRAP_03_gmg_F",
+ "I_MRAP_03_hmg_F",
+ //Trucks
+ "B_Truck_01_transport_F",
+ "B_Truck_01_covered_F",
+ "I_Truck_02_covered_F",
+ "O_Truck_02_covered_F",
+ "I_Truck_02_transport_F",
+ "O_Truck_02_transport_F",
+ "O_Truck_02_transport_F"
+ ]
+ ,
+ [
+
+ ]
+];
+*/
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_cargo_system/=BTC=_functions.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_cargo_system/=BTC=_functions.sqf
new file mode 100644
index 0000000..b5fcbbf
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_cargo_system/=BTC=_functions.sqf
@@ -0,0 +1,321 @@
+/*
+Created by =BTC= Giallustio
+
+Date: 20/03/2013
+Visit us at: http://www.blacktemplars.altervista.org/
+*/
+//Cargo system
+BTC_l_check_vehicle =
+{
+ //Open dlg
+ _veh = objNull;_array = [];
+ if (vehicle player == player) then {_array = nearestObjects [player, BTC_def_vehicles, 5];} else {_array = [vehicle player];};
+ if (count _array > 0) then {_veh = _array select 0;};
+ if (!isNull _veh) then
+ {
+ //if (!isNil {_veh getVariable "BTC_cargo_cont"}) then
+ if (isNil {_veh getVariable "BTC_cargo_cont"}) then {_veh setVariable ["BTC_cargo_cont",[],false];};
+ private ["_cargo"];
+ _text = "";
+ _cargo = _veh getVariable "BTC_cargo_cont";
+ _text = _text + "Vehicle: " + getText (configFile >> "cfgVehicles" >> typeof _veh >> "displayName") + format ["
CC: %1/%2",[_veh] call BTC_check_cc,[_veh] call BTC_get_cc] + "
Cargo:
";
+ if (count _cargo > 0) then
+ {
+ {
+ _text = _text + getText (configFile >> "cfgVehicles" >> typeof _x >> "displayName") + format [" [%1]",[_x] call BTC_get_rc] + "
";
+ [_x,_veh] spawn
+ {
+ _obj = _this select 0;
+ _veh = _this select 1;
+ private ["_sleep"];
+ //player sideChat format ["%1",_obj];
+ _unload = _veh addaction [("") + (format ["UnLoad %1",getText (configFile >> "cfgVehicles" >> typeof _obj >> "displayName")]) + "",BTC_dir_action,[[_veh,_obj],BTC_l_unload],7,true,false,"","true"];
+ _sleep = time + 15;
+ waitUntil {BTC_action_cargo || (time > _sleep)};
+ _veh removeAction _unload;
+ };
+ } foreach _cargo;
+ hint parseText _text;
+ } else {_text = _text + "Empty";hint parseText _text;};
+ };
+};
+BTC_l_select =
+{
+ _array = nearestObjects [player, BTC_def_cargo, 5];
+ if (count _array > 0) then
+ {
+ BTC_cargo_selected = _array select 0;
+ if (format ["%1", BTC_cargo_selected getVariable "BTC_cannot_load"] == "1") then
+ {hint "You can not load this object";BTC_cargo_selected = objNull;} else {hint parseText format ["%1 selected
CR: %2",getText (configFile >> "cfgVehicles" >> typeof BTC_cargo_selected >> "displayName"),[BTC_cargo_selected] call BTC_get_rc];};
+ };
+};
+BTC_l_load =
+{
+ private ["_array","_veh_name","_obj_name"];
+ _veh = objNull;_cargo_cont = [];_cond = true;
+ if (count _this == 0) then {_array = nearestObjects [player, BTC_def_vehicles, 5];} else {_array = _this;};
+ if (count _array > 0) then {_veh = _array select 0;} else {hint "Get closer";};
+ if (!isNull _veh) then
+ {
+ _veh_name = getText (configFile >> "cfgVehicles" >> typeof _veh >> "displayName");
+ _obj_name = getText (configFile >> "cfgVehicles" >> typeof BTC_cargo_selected >> "displayName");
+ if (([_veh] call BTC_check_cc) + ([BTC_cargo_selected] call BTC_get_rc) > ([_veh] call BTC_get_cc)) then {_cond = false;};
+ if (BTC_cargo_selected distance _veh < 15 && speed _veh < 2 && _cond) then
+ {
+ hint format ["Loading %1 in %2",_obj_name,_veh_name];BTC_l_dragging = false;
+ sleep 3;
+ if (Alive BTC_cargo_selected && Alive _veh && BTC_cargo_selected distance _veh < 15 && speed _veh <= 2 && speed _veh >= -2) then
+ {
+ if (isNil {_veh getVariable "BTC_cargo_cont"}) then {_veh setVariable ["BTC_cargo_cont",[],false];};
+ _cargo_cont = _veh getVariable "BTC_cargo_cont";
+ _cargo_cont = _cargo_cont + [BTC_cargo_selected];
+ _veh setVariable ["BTC_cargo_cont",_cargo_cont,true];
+ BTC_cargo_selected attachTo [BTC_cargo_repo,[0,0,BTC_id_repo]];
+ BTC_id_repo = BTC_id_repo + 15;publicVariable "BTC_id_repo";
+ BTC_cargo_selected = objNull;
+ hint format ["%1 has been loaded in %2",_obj_name,_veh_name];
+ } else {hint format ["%1 has not been loaded",_obj_name];};
+ } else {if (!_cond) then {hint "There is no enough space in the cargo!";} else {hint "The object is too far from the vehicle or the vehicle is moving!";};};
+ };
+};
+BTC_l_unload =
+{
+ _veh = _this select 0;
+ _obj = _this select 1;
+ BTC_action_cargo = true;
+ _cargo_cont = _veh getVariable "BTC_cargo_cont";
+ _id = _cargo_cont find _obj;
+ if (_id != -1) then
+ {
+ _veh_name = getText (configFile >> "cfgVehicles" >> typeof _veh >> "displayName");
+ _obj_name = getText (configFile >> "cfgVehicles" >> typeof _obj >> "displayName");
+ hint format ["Unloading %1 from %2",_obj_name,_veh_name];
+ sleep 3;
+ hint format ["%1 has been unloaded",_obj_name,_veh_name];
+ _cargo_cont set [_id,0];
+ _cargo_cont = _cargo_cont - [0];
+ _veh setVariable ["BTC_cargo_cont",_cargo_cont,true];
+ _height = getPos (vehicle player) select 2;
+ deTach _obj;
+ _obj setVelocity [0,0,0];
+ _obj setpos (_veh modelToWorld [-3,0,0]);
+ switch (true) do
+ {
+ case (_height >= 20):
+ {
+ _obj_para = [_veh,_obj,"B_Parachute_02_F"] spawn BTC_l_paradrop;
+ };
+ case ((_height < 20) && (_height >= 2)):
+ {
+ _obj setPos [getpos _veh select 0,getpos _veh select 1,(getpos _veh select 2) -1];
+ sleep 0.1;
+ if (_obj isKindOf "Strategic") then {_obj_fall = [_obj] spawn BTC_l_obj_fall;};
+ };
+ case (_height < 2):
+ {
+ _obj setpos (_veh modelToWorld [-3,0,0]);
+ };
+ };
+ };
+ sleep 1;
+ BTC_action_cargo = false;
+};
+BTC_l_release =
+{
+ BTC_l_dragging = false;
+};
+BTC_l_drag =
+{
+ private ["_drag","_veh"];
+ _array = nearestObjects [player, BTC_def_drag, 5];
+ if (count _array > 0) then {_drag = _array select 0;};
+ if (isNull _drag) exitWith {};
+ if (format ["%1", _drag getVariable "BTC_cannot_drag"] == "1") exitWith {hint "You can't drag this object!";};
+ if (_drag distance player > 4) exitWith {hint "Too distance from the object!";};
+ if (BTC_l_dragging) exitWith {hint "You can't drag more than one object!";};
+ if (format ["%1", _drag getVariable "BTC_being_drag"] == "1") exitWith {hint "You can't drag this object! it's being dragged!";};
+ BTC_l_dragging = true;
+ _drag setvariable ["BTC_Being_Drag",1,true];
+ BTC_display_EH_l = (findDisplay 46) displayAddEventHandler ["KeyDown", "if (_this select 1 == 45) then {_anim = [] spawn {sleep 0.01;player switchMove ""acinpknlmstpsraswrfldnon"";};};"];
+ player playMove "acinpknlmstpsraswrfldnon";
+ _drag attachto [player,[0,2,0.2]];
+ sleep 0.1;
+ if ((position _drag select 2) < - 0.5) then {_drag attachto [player,[0,1,1.2]];};
+ _release = player addaction [("") + ("Release") + "",BTC_dir_action,[[],BTC_l_release],7,true,false,"","true"];
+ WaitUntil {!Alive player || ((animationstate player == "acinpknlmstpsraswrfldnon") || (animationstate player == "acinpknlmwlksraswrfldb"))};
+ _act = 0;
+ While {BTC_l_dragging && vehicle player == player && Alive player && ((animationstate player == "acinpknlmstpsraswrfldnon") || (animationstate player == "acinpknlmwlksraswrfldb"))} do
+ {
+ /*_array = nearestObjects [player, BTC_def_vehicles, 5];
+ if (count _array == 0) then {_veh = objNull;};
+ if (count _array > 0 && _veh != _array select 0) then
+ {
+ _veh = _array select 0;
+ _name_veh = getText (configFile >> "cfgVehicles" >> typeof _veh >> "displayName");
+ _text_action = ("" + "Load in " + (_name_veh) + "");
+ _load = player addAction [_text_action,BTC_dir_action, [[_veh],BTC_l_load], 7, true, true];
+ _act = 1;
+ };
+ if (count _array == 0 && _act == 1) then {player removeAction _load;_act = 0;};*/
+ sleep 0.1;
+ };
+ player playMoveNow "AmovPknlMstpSrasWrflDnon";BTC_l_dragging = false;
+ player removeAction _release;//player removeAction _load;
+ (findDisplay 46) displayRemoveEventHandler ["KeyDown",BTC_display_EH_l];
+ if !(isNull _drag) then
+ {
+ detach _drag;
+ //_rel_pos = player modelToWorld [0,1,0];
+ //BTC_cargo_selected setpos _rel_pos;
+ _drag setvariable ["BTC_Being_Drag",0,true];
+ };
+};
+BTC_get_cc =
+{
+ private ["_n","_array_class"];
+ _obj = _this select 0;
+ _type = typeOf _obj;
+ _cc = 0;_cond = false;
+ for "_i" from 0 to (count BTC_def_cc - 1) do
+ {
+ if (typeName (BTC_def_cc select _i) == "STRING" && !_cond) then
+ {
+ if (!_cond && _type == (BTC_def_cc select _i)) then {_cc = (BTC_def_cc select (_i + 1));_cond = true;};
+ };
+ };
+ if (!_cond) then
+ {
+ for "_i" from 0 to (count BTC_main_cc - 1) do
+ {
+ if (typeName (BTC_main_cc select _i) == "STRING") then
+ {
+ if (!_cond && _type isKindOf (BTC_main_cc select _i)) then {_cc = (BTC_main_cc select (_i + 1));_cond = true;};
+ };
+ };
+ };
+ _cc
+};
+BTC_get_rc =
+{
+ private ["_n","_array_class"];
+ _obj = _this select 0;
+ _type = typeOf _obj;
+ _rc = 0;_cond = false;
+ for "_i" from 0 to (count BTC_def_rc - 1) do
+ {
+ if (typeName (BTC_def_rc select _i) == "STRING" && !_cond) then
+ {
+ if (!_cond && _type == (BTC_def_rc select _i)) then {_rc = (BTC_def_rc select (_i + 1));_cond = true;};
+ };
+ };
+ if (!_cond) then
+ {
+ for "_i" from 0 to (count BTC_main_rc - 1) do
+ {
+ if (typeName (BTC_main_rc select _i) == "STRING" && !_cond) then
+ {
+ if (!_cond && _type isKindOf (BTC_main_rc select _i)) then {_rc = (BTC_main_rc select (_i + 1));_cond = true;};
+ };
+ };
+ };
+ _rc
+};
+BTC_check_cc =
+{
+ private ["_n","_array_class","_cargo"];
+ _veh = _this select 0;
+ if (isNil {_veh getVariable "BTC_cargo_cont"}) then {_veh setVariable ["BTC_cargo_cont",[],false];};
+ _cargo = _veh getVariable "BTC_cargo_cont";
+ _tot_rc = 0;
+ {_tot_rc = _tot_rc + ([_x] call BTC_get_rc);} foreach _cargo;
+ _tot_rc
+};
+//Placement
+BTC_l_placement =
+{
+ private ["_plac","_veh","_array"];
+ _array = nearestObjects [player, BTC_def_placement, 5];
+ if (count _array > 0) then {_plac = _array select 0;};
+ if (isNull _plac) exitWith {};
+ if (format ["%1", _plac getVariable "BTC_cannot_place"] == "1") exitWith {hint "You can't place this object!";};
+ BTC_l_plac_obj = _plac;
+ BTC_l_camera = objNull;
+ BTC_l_end = false;
+ BTC_l_camera_placement = false;
+ BTC_l_camera_created = false;
+ BTC_l_camera_nvg = false;
+ BTC_l_camera_EH_keydown = (findDisplay 46) displayAddEventHandler ["KeyDown", "_keydown = _this spawn BTC_l_keydown"];
+ BTC_l_central_pos = getposATL BTC_l_plac_obj;
+ BTC_cam_rel_pos = [0,-6,15];
+ BTC_l_plac_obj enableSimulation false;
+ BTC_l_actions_cond = false;
+ while {!BTC_l_end && Alive player} do
+ {
+ if (!BTC_l_camera_placement) then {player playMoveNow "amovpercmstpsraswrfldnon";};
+ if (BTC_l_camera_placement && !BTC_l_camera_created) then {_cam = [BTC_l_plac_obj] spawn BTC_l_create_camera;};
+ if (!BTC_l_camera_placement && BTC_l_camera_created) then {_cam = [BTC_l_plac_obj] spawn BTC_l_destroy_camera;};
+ if (BTC_l_camera_nvg) then {camusenvg true;} else {camusenvg false;};
+ BTC_l_camera camSetPos (BTC_l_plac_obj modelToWorld BTC_cam_rel_pos);
+ BTC_l_camera camCommit 0;
+ hintSilent parseText "Keys:
W to move the object towards Nord
A to move the object towards West
S to move the object towards South
D to move the object towards East
Q and Z to modify the elevation
ALT + A/D to modify the direction
C to open/close the camera
CTRL + WASDQZ to move the camera
N to use the nightvision
Back to get back to the game";
+ sleep 0.01;
+ };
+ BTC_l_actions_cond = true;
+ BTC_l_plac_obj enableSimulation true;
+ BTC_l_plac_obj = objNull;
+ hintSilent "";titleText ["", "PLAIN"];
+ if (BTC_l_camera_placement) then {_cam = [BTC_l_plac_obj] spawn BTC_l_destroy_camera;};
+ (findDisplay 46) displayRemoveEventHandler ["KeyDown",BTC_l_camera_EH_keydown];
+};
+BTC_l_create_camera =
+{
+ _obj = _this select 0;
+ BTC_l_camera = "camera" camCreate (position _obj);
+ BTC_l_camera camSetTarget _obj;
+ BTC_l_camera cameraEffect ["internal", "BACK"];
+ BTC_l_camera camSetPos (_obj modelToWorld [0,-6,15]);
+ BTC_l_camera camCommit 0;
+ showCinemaBorder false;
+ BTC_l_camera_created = true;
+};
+BTC_l_destroy_camera =
+{
+ player cameraEffect ["TERMINATE", "BACK"];
+ camDestroy BTC_l_camera;
+ BTC_l_camera = objNull;
+ BTC_l_camera_placement = false;
+ BTC_l_camera_created = false;
+ BTC_l_camera_nvg = false;
+};
+BTC_l_keydown =
+{
+ private ["_key","_dir"];
+ if (count _this > 1) then
+ {
+ _key = _this select 1;
+ _ctrl = _this select 3;
+ _alt = _this select 4;
+ //player globalchat format ["%1 - %2",_key,_this];
+ switch (true) do
+ {
+ case (_key == 14) : {BTC_l_end = true;};
+ case (_key == 30 && !_alt && !_ctrl) : {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0) - 0.1,(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2)];if ([BTC_l_central_pos,BTC_l_plac_obj] call BIS_fnc_distance2D > BTC_l_placement_area) then {player sideChat "Out of the placement zone!";BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0) + 0.1,(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2)];};};
+ case (_key == 32 && !_alt && !_ctrl) : {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0) + 0.1,(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2)];if ([BTC_l_central_pos,BTC_l_plac_obj] call BIS_fnc_distance2D > BTC_l_placement_area) then {player sideChat "Out of the placement zone!";BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0) - 0.1,(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2)];};};
+ case (_key == 31 && !_ctrl) : {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1) - 0.1,(getposATL BTC_l_plac_obj select 2)];if ([BTC_l_central_pos,BTC_l_plac_obj] call BIS_fnc_distance2D > BTC_l_placement_area) then {player sideChat "Out of the placement zone!";BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1) + 0.1,(getposATL BTC_l_plac_obj select 2)];};};
+ case (_key == 17 && !_ctrl) : {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1) + 0.1,(getposATL BTC_l_plac_obj select 2)];if ([BTC_l_central_pos,BTC_l_plac_obj] call BIS_fnc_distance2D > BTC_l_placement_area) then {player sideChat "Out of the placement zone!";BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1) - 0.1,(getposATL BTC_l_plac_obj select 2)];};};
+ case (_key == 44 && !_ctrl) : {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2) - 0.1];if (abs (((BTC_l_central_pos) select 2) - ((getposATL BTC_l_plac_obj) select 2)) > BTC_l_placement_area) then {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2) + 0.1];};};
+ case (_key == 16 && !_ctrl) : {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2) + 0.1];if (abs (((BTC_l_central_pos) select 2) - ((getposATL BTC_l_plac_obj) select 2)) > BTC_l_placement_area) then {BTC_l_plac_obj setpos [(getpos BTC_l_plac_obj select 0),(getpos BTC_l_plac_obj select 1),(getposATL BTC_l_plac_obj select 2) - 0.1];};};
+ case (_key == 30 && _alt && !_ctrl) : {_dir = getdir BTC_l_plac_obj;BTC_l_plac_obj setDir (_dir - 1);};
+ case (_key == 32 && _alt && !_ctrl) : {_dir = getdir BTC_l_plac_obj;BTC_l_plac_obj setDir (_dir + 1);};
+ case (_key == 46) : {if (BTC_l_camera_placement) then {BTC_l_camera_placement = false;} else {BTC_l_camera_placement = true;};};
+ case (_key == 49) : {if (BTC_l_camera_nvg) then {BTC_l_camera_nvg = false;} else {BTC_l_camera_nvg = true;};};
+
+ case (BTC_l_camera_placement && _key == 30 && _ctrl) : {private ["_n"];_n = (BTC_cam_rel_pos select 0) - 0.5;if !((abs _n) > BTC_l_placement_area) then {BTC_cam_rel_pos = [_n,BTC_cam_rel_pos select 1,BTC_cam_rel_pos select 2];};};
+ case (BTC_l_camera_placement && _key == 32 && _ctrl) : {private ["_n"];_n = (BTC_cam_rel_pos select 0) + 0.5;if !((abs _n) > BTC_l_placement_area) then {BTC_cam_rel_pos = [_n,BTC_cam_rel_pos select 1,BTC_cam_rel_pos select 2];};};
+ case (BTC_l_camera_placement && _key == 31 && _ctrl) : {private ["_n"];_n = (BTC_cam_rel_pos select 1) - 0.5;if !((abs _n) > BTC_l_placement_area) then {BTC_cam_rel_pos = [BTC_cam_rel_pos select 0,_n,BTC_cam_rel_pos select 2];};};
+ case (BTC_l_camera_placement && _key == 17 && _ctrl) : {private ["_n"];_n = (BTC_cam_rel_pos select 1) + 0.5;if !((abs _n) > BTC_l_placement_area) then {BTC_cam_rel_pos = [BTC_cam_rel_pos select 0,_n,BTC_cam_rel_pos select 2];};};
+ case (BTC_l_camera_placement && _key == 44 && _ctrl) : {private ["_n"];_n = (BTC_cam_rel_pos select 2) - 0.5;if !((abs _n) > BTC_l_placement_area) then {BTC_cam_rel_pos = [BTC_cam_rel_pos select 0,BTC_cam_rel_pos select 1,_n];};};
+ case (BTC_l_camera_placement && _key == 16 && _ctrl) : {private ["_n"];_n = (BTC_cam_rel_pos select 2) + 0.5;if !((abs _n) > BTC_l_placement_area) then {BTC_cam_rel_pos = [BTC_cam_rel_pos select 0,BTC_cam_rel_pos select 1,_n];};};
+ };
+ };
+};
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_fast_roping/=BTC=_fast_roping_init.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_fast_roping/=BTC=_fast_roping_init.sqf
new file mode 100644
index 0000000..865c68b
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_fast_roping/=BTC=_fast_roping_init.sqf
@@ -0,0 +1,22 @@
+/*
+Created by =BTC= Giallustio
+
+Date: 20/03/2013
+Visit us at: http://www.blacktemplars.altervista.org/
+*/
+waitUntil {!isNull player};
+waitUntil {player == player};
+#include "=BTC=_functions.sqf"
+_rope = player addaction [("") + ("Deploy rope") + "",BTC_dir_action,[[],BTC_deploy_rope],-10,true,false,"","typeOf (vehicle player) in BTC_roping_chopper && player == driver vehicle player && format [""%1"",(vehicle player) getVariable ""BTC_rope""] != ""1"" && ((getPos (vehicle player)) select 2) < BTC_fast_rope_h && ((getPos (vehicle player)) select 2) > BTC_fast_rope_h_min && speed (vehicle player) < 2"];
+_rope = player addaction [("") + ("Cut rope") + "",BTC_dir_action,[[],BTC_cut_rope],-10,true,false,"","typeOf (vehicle player) in BTC_roping_chopper && player == driver (vehicle player) && format [""%1"",(vehicle player) getVariable ""BTC_rope""] == ""1"""];
+_out = player addaction [("") + ("Fast rope") + "",BTC_dir_action,[[player],BTC_fast_rope],-10,true,false,"","player in (assignedCargo (vehicle player)) && format [""%1"",(vehicle player) getVariable ""BTC_rope""] == ""1"""];
+_eh = player addEventHandler ["respawn",
+{
+ _actions = [] spawn
+ {
+ waitUntil {Alive player};
+ _rope = player addaction [("") + ("Deploy rope") + "",BTC_dir_action,[[],BTC_deploy_rope],-10,true,false,"","typeOf (vehicle player) in BTC_roping_chopper && player == driver vehicle player && format [""%1"",(vehicle player) getVariable ""BTC_rope""] != ""1"" && ((getPos (vehicle player)) select 2) < BTC_fast_rope_h && ((getPos (vehicle player)) select 2) > BTC_fast_rope_h_min && speed (vehicle player) < 2"];
+ _rope = player addaction [("") + ("Cut rope") + "",BTC_dir_action,[[],BTC_cut_rope],-10,true,false,"","typeOf (vehicle player) in BTC_roping_chopper && player == driver (vehicle player) && format [""%1"",(vehicle player) getVariable ""BTC_rope""] == ""1"""];
+ _out = player addaction [("") + ("Fast rope") + "",BTC_dir_action,[[player],BTC_fast_rope],-10,true,false,"","player in (assignedCargo (vehicle player)) && format [""%1"",(vehicle player) getVariable ""BTC_rope""] == ""1"""];
+ };
+}];
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_fast_roping/=BTC=_functions.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_fast_roping/=BTC=_functions.sqf
new file mode 100644
index 0000000..0570753
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_fast_roping/=BTC=_functions.sqf
@@ -0,0 +1,32 @@
+BTC_deploy_rope =
+{
+ hint "Rope deployed";
+ _veh = vehicle player;
+ _veh setVariable ["BTC_rope",1,true];
+ WaitUntil {!Alive _veh || !Alive player || (((getPos player) select 2) > BTC_fast_rope_h) || format ["%1",_veh getVariable "BTC_rope"] != "1"};
+ _veh setVariable ["BTC_rope",0,true];
+};
+BTC_cut_rope =
+{
+ hint "Rope cut";
+ _veh = vehicle player;
+ _veh setVariable ["BTC_rope",0,true];
+};
+BTC_fast_rope =
+{
+ hint "Fast roping";
+ _unit = _this select 0;
+ _veh = vehicle _unit;
+ _unit action ["EJECT",_veh];unassignVehicle _unit;
+ _unit setPos (_veh modelToWorld [2,1,-2]);
+ _unit switchMove "LadderRifleStatic";
+ _unit setDir (getDir _veh - 90);
+ While {Alive _unit && (((getPos _unit) select 2) > 1.5)} do {_unit switchMove "LadderRifleStatic";};
+ if (Alive _unit && format ["%1",_veh getVariable "BTC_rope"] == "1") then
+ {
+ _unit setVelocity [0,0,0];
+ _unit playMove "LadderRifleDownOff";
+ if !(isPlayer _unit) then {_unit move [((getPos _unit) select 0) + 3,((getPos _unit) select 1) + 3,0];};
+ };
+ if (format ["%1",_veh getVariable "BTC_rope"] != "1") then {hint "The chopper flew away! The rope has been cut!";_unit playMove "LadderRifleDownOff";};
+};
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/=BTC=_Hud.h b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/=BTC=_Hud.h
new file mode 100644
index 0000000..bd33524
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/=BTC=_Hud.h
@@ -0,0 +1,94 @@
+/*
+x = (_xPos/100) * safezoneW + safezoneX;
+y = (_yPos/100) * safezoneH + safezoneY;
+w = (_width/100) * safezoneW;
+h = (_height/100) * safezoneH;
+*/
+class BTC_Hud
+{
+ idd = 1000;
+ movingEnable=0;
+ duration=1e+011;
+ name = "BTC_Hud_Name";
+ onLoad = "uiNamespace setVariable [""HUD"", _this select 0];";
+ controlsBackground[] = {};
+ objects[] = {};
+ class controls
+ {
+ class Radar
+ {
+ type = 0;
+ idc = 1001;
+ style = 48;
+ x = (SafeZoneW+2*SafeZoneX) - 0.3;//safezonex + 0.1;//0.9//- 0.1
+ y = (SafeZoneH+2*SafeZoneY) - 0.15;//safezoney + 0.1;//0.85
+ w = 0.3;
+ h = 0.4;
+ font = "PuristaMedium";
+ sizeEx = 0.03;
+ colorBackground[] = {0, 0, 0, 0};
+ colorText[] = {1, 1, 1, 1};
+ text = "=BTC=_Logistic\=BTC=_Lift\img\igui_radar_air_ca.paa";
+ };
+ class Img_Obj
+ {
+ type = 0;
+ idc = 1002;
+ style = 48;
+ x = (SafeZoneW+2*SafeZoneX) - 0.155;
+ y = (SafeZoneH+2*SafeZoneY) + 0.045;
+ w = 0.01;
+ h = 0.01;
+ font = "PuristaMedium";
+ sizeEx = 0.04;
+ colorBackground[] = {0, 0, 0, 0};
+ colorText[] = {1, 1, 1, 1};
+ text = "=BTC=_Logistic\=BTC=_Lift\img\=BTC=_Obj.paa";
+ };
+ class Pic_Obj
+ {
+ type = 0;
+ idc = 1003;
+ style = 48;
+ x = (SafeZoneW+2*SafeZoneX) - 0.325;
+ y = (SafeZoneH+2*SafeZoneY) - 0.23;
+ w = 0.1;
+ h = 0.1;
+ font = "PuristaMedium";
+ sizeEx = 0.03;
+ colorBackground[] = {0, 0, 0, 0};
+ colorText[] = {1, 1, 1, 1};
+ text = "";
+ };
+ class Arrow
+ {
+ type = 0;
+ idc = 1004;
+ style = 48;
+ x = (SafeZoneW+2*SafeZoneX) - 0.05;
+ y = (SafeZoneH+2*SafeZoneY) - 0.15;
+ w = 0.05;
+ h = 0.05;
+ font = "PuristaMedium";
+ sizeEx = 0.03;
+ colorBackground[] = {0, 0, 0, 0};
+ colorText[] = {1, 1, 1, 1};
+ text = "";
+ };
+ class Type_Obj
+ {
+ type = 0;
+ idc = 1005;
+ style = 0x00;
+ x = (SafeZoneW+2*SafeZoneX) - 0.23;
+ y = (SafeZoneH+2*SafeZoneY) - 0.335;
+ w = 0.3;
+ h = 0.3;
+ font = "PuristaMedium";
+ sizeEx = 0.03;
+ colorBackground[] = {0, 0, 0, 0};
+ colorText[] = {1, 1, 1, 1};
+ text = "";
+ };
+ };
+ };
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/=BTC=_lift_init.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/=BTC=_lift_init.sqf
new file mode 100644
index 0000000..3d157e5
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/=BTC=_lift_init.sqf
@@ -0,0 +1,190 @@
+/*
+Created by =BTC= Giallustio
+
+Date: 20/03/2013
+Visit us at: http://www.blacktemplars.altervista.org/
+*/
+waitUntil {!isNull player};
+waitUntil {player == player};
+
+_cond = true;
+if ((count BTC_lift_pilot) > 0) then
+{
+ if ((BTC_lift_pilot find (typeof player)) == - 1) exitWith {hint "No lift";_cond = false;};
+};
+if !(_cond) exitWith {hint "No lift";};
+if (BTC_def_hud == 1) then
+{
+ disableSerialization;
+ cutRsc ["BTC_Hud","PLAIN"];
+ _ui = uiNamespace getVariable "HUD";
+ _radar = _ui displayCtrl 1001;
+ _obj_img = _ui displayCtrl 1002;
+ _obj_pic = _ui displayCtrl 1003;
+ _arrow = _ui displayCtrl 1004;
+ _obj_name = _ui displayCtrl 1005;
+ _array_hud = [_radar,_obj_img,_obj_pic,_arrow,_obj_name];
+ {_x ctrlShow false;} foreach _array_hud;
+ BTC_arrow_up = "=BTC=_Logistic\=BTC=_Lift\img\arrow_up_ca.paa";
+ BTC_arrow_down = "=BTC=_Logistic\=BTC=_Lift\img\arrow_down_ca.paa";
+ BTC_complete = "=BTC=_Logistic\=BTC=_Lift\img\objective_complete_ca.paa";
+ BTC_incomplete = "=BTC=_Logistic\=BTC=_Lift\img\objective_incomplete_ca.paa";
+};
+BTC_cargo = ObjNull;
+//Functions
+BTC_lift_check =
+{
+ private ["_rel_pos"];
+ if (!(vehicle player isKindOf "Helicopter") || BTC_lifted == 1) exitWith {false};
+ _array = [vehicle player] call BTC_get_liftable_array;
+ _chopper = vehicle player;
+ _can_lift = false;
+ _cargo_array = nearestObjects [_chopper, _array, 50];
+ if (count _cargo_array > 0) then {if (driver (_cargo_array select 0) == player) then {_cargo_array set [0,0];_cargo_array = _cargo_array - [0];};};
+ if (count _cargo_array > 0) then {BTC_cargo = _cargo_array select 0;} else {BTC_cargo = objNull;_can_lift = false;};
+ if (({BTC_cargo isKindOf _x} count _array) > 0 && speed BTC_cargo < 2) then {_can_lift = true;} else {_can_lift = false;};
+ if (_can_lift && ((BTC_cargo isKindOf "Air" && getdammage BTC_cargo != 1) || (format ["%1", BTC_cargo getVariable "BTC_cannot_lift"] == "1"))) then {_can_lift = false;};
+ if (!isNull BTC_cargo && _can_lift) then
+ {
+ _cargo_pos = getPosATL BTC_cargo;
+ _rel_pos = _chopper worldToModel _cargo_pos;
+ BTC_cargo_x = _rel_pos select 0;
+ BTC_cargo_y = _rel_pos select 1;
+ BTC_cargo_z = _rel_pos select 2;//hintSilent format ["%1 - %2 - %3",BTC_cargo_x,BTC_cargo_y,BTC_cargo_z];
+ };
+ if (((abs BTC_cargo_z) < BTC_lift_max_h) && ((abs BTC_cargo_z) > BTC_lift_min_h) && ((abs BTC_cargo_x) < BTC_lift_radius) && ((abs BTC_cargo_y) < BTC_lift_radius)) then
+ {_can_lift = true;} else {_can_lift = false;};
+ //hintSilent format ["%1 - %2", BTC_cargo,_cargo_array];
+ _can_lift
+};
+BTC_attach_cargo =
+{
+ private ["_cargo"];
+ _chopper = vehicle player;
+ _array = [vehicle player] call BTC_get_liftable_array;
+ _cargo_array = nearestObjects [_chopper, _array, 50];
+ if (count _cargo_array > 0 && driver (_cargo_array select 0) == player) then {_cargo_array set [0,0];_cargo_array = _cargo_array - [0];};
+ if (count _cargo_array > 0) then {_cargo = _cargo_array select 0;} else {_cargo = objNull;};
+ if (isNull _cargo) exitWith {};
+ BTC_lifted = 1;
+ _cargo_pos = getPosATL _cargo;
+ _rel_pos = _chopper worldToModel _cargo_pos;
+ _height = (_rel_pos select 2) + 2.5;
+ _cargo attachTo [_chopper, [0,0,_height]];
+ _name_cargo = getText (configFile >> "cfgVehicles" >> typeof _cargo >> "displayName");
+ _chopper vehicleChat format ["%1 lifted", _name_cargo];
+ BTC_cargo_lifted = _cargo;
+};
+BTC_detach_cargo =
+{
+ detach BTC_cargo_lifted;
+ _name_cargo = getText (configFile >> "cfgVehicles" >> typeof BTC_cargo_lifted >> "displayName");
+ vehicle player vehicleChat format ["%1 dropped", _name_cargo];
+ if (BTC_cargo_lifted isKindOf "Strategic") then {_obj_fall = [BTC_cargo_lifted] spawn BTC_l_Obj_Fall;} else
+ {
+ _vel = velocity (vehicle player);
+ BTC_cargo_lifted setVelocity _vel;
+ };
+ BTC_cargo_lifted = ObjNull;
+ BTC_lifted = 0;
+};
+BTC_fnc_hud =
+{
+ private ["_can_lift"];
+ disableSerialization;
+ _ui = uiNamespace getVariable "HUD";
+ _radar = _ui displayCtrl 1001;
+ _obj_img = _ui displayCtrl 1002;
+ _obj_pic = _ui displayCtrl 1003;
+ _arrow = _ui displayCtrl 1004;
+ _obj_name = _ui displayCtrl 1005;
+ _array_hud = [_radar,_obj_img,_obj_pic,_arrow,_obj_name];
+ {_x ctrlShow true;} foreach _array_hud;_obj_img ctrlShow false;
+ _can_lift = false;
+ while {(Alive player && vehicle player != player) && BTC_Hud_Cond} do
+ {
+ private ["_cargo"];
+ _array = [vehicle player] call BTC_get_liftable_array;
+ _cargo_array = nearestObjects [vehicle player, _array, 50];
+ if (count _cargo_array > 0 && driver (_cargo_array select 0) == player) then {_cargo_array set [0,0];_cargo_array = _cargo_array - [0];};
+ if (count _cargo_array > 0) then {_cargo = _cargo_array select 0;} else {_cargo = objNull;};
+ if (({_cargo isKindOf _x} count _array) > 0) then {_can_lift = true;} else {_can_lift = false;};
+ if (_can_lift && ((_cargo isKindOf "Air" && getdammage _cargo != 1) || !(isNil {_cargo getVariable "BTC_cannot_lift"}))) then {_can_lift = false;};
+ if (!isNull _cargo) then
+ {
+ _cargo_pos = getPosATL _cargo;
+ _rel_pos = (vehicle player) worldToModel _cargo_pos;
+ _cargo_x = _rel_pos select 0;
+ _cargo_y = _rel_pos select 1;
+ _cargo_z = _rel_pos select 2;
+ _obj_img ctrlShow true;
+ _hud_x = _cargo_x / 100;
+ _hud_y = 0;
+ switch (true) do
+ {
+ case (_cargo_y < 0): {_hud_y = (abs _cargo_y) / 100};
+ case (_cargo_y > 0): {_hud_y = (0 - _cargo_y) / 100};
+ };
+ _hud_x_1 = BTC_HUD_x + _hud_x;
+ _hud_y_1 = BTC_HUD_y + _hud_y;
+ _obj_img ctrlsetposition [_hud_x_1, _hud_y_1];
+ _obj_img ctrlCommit 0;
+ _pic_cargo = "";
+ if (_cargo isKindOf "LandVehicle") then {_pic_cargo = getText (configFile >> "cfgVehicles" >> typeof _cargo >> "picture");} else {_pic_cargo = "";};
+ _name_cargo = getText (configFile >> "cfgVehicles" >> typeof _cargo >> "displayName");
+ _obj_pic ctrlSetText _pic_cargo;
+ if (BTC_lifted == 1) then {_obj_name ctrlSetText (format ["[%1 m] ",(round((getpos _cargo select 2) * 10))/10] + _name_cargo);} else {_obj_name ctrlSetText _name_cargo;};
+ if ((abs _cargo_z) > BTC_lift_max_h) then {_arrow ctrlSetText BTC_arrow_down;};
+ if ((abs _cargo_z) < BTC_lift_min_h) then {_arrow ctrlSetText BTC_arrow_up;};
+ if ((abs _cargo_z) > BTC_lift_min_h && (abs _cargo_z) < BTC_lift_max_h) then {_arrow ctrlSetText BTC_complete;};
+ if !(_can_lift) then {_arrow ctrlSetText BTC_incomplete;};
+ } else {_obj_img ctrlShow false;_obj_pic ctrlSetText "";_obj_name ctrlSetText "";_arrow ctrlSetText "";};
+ sleep 0.1;
+ };
+ {_x ctrlShow false;} foreach _array_hud;
+};
+BTC_l_camera =
+{
+ if (BTC_l_pip_cond) then
+ {
+ BTC_l_pip_cond = false;
+ [] call BIS_fnc_liveFeedTerminate;
+ }
+ else
+ {
+ hint "Activating camera...";
+ BTC_l_pip_cond = true;
+ BTC_l_feed_target = "Land_HelipadEmpty_F" createVehicle (position player);
+ [] spawn {while {BTC_l_pip_cond} do {BTC_l_feed_target setpos [getPos (vehicle player) select 0,(getPos (vehicle player) select 1) + 1,0];sleep 0.1;};deleteVehicle BTC_l_feed_target;};
+ [player, player, player] call BIS_fnc_liveFeed;
+ waitUntil {!(isNil "BIS_liveFeed")};
+ hintSilent "";
+ BIS_liveFeed attachTo [vehicle player,[0, - 1, -3]];
+ BTC_l_feed_target call BIS_fnc_liveFeedSetTarget;
+ WaitUntil {sleep 1; (!(vehicle player isKindOf "Helicopter") || !Alive player)};
+ if (BTC_l_pip_cond) then {BTC_l_pip_cond = false;[] call BIS_fnc_liveFeedTerminate;};
+ };
+};
+[] spawn
+{
+
+ if (BTC_def_hud == 1) then {player addAction [("" + ("Hud On\Off") + ""),BTC_dir_action, [[],{if (BTC_Hud_Cond) then {BTC_Hud_Cond = false;} else {BTC_Hud_Cond = true;_hud = [] spawn BTC_fnc_hud;};}], -8, false, false, "", "(vehicle player) isKindOf ""Helicopter"" && driver (vehicle player) == player"];};
+ if (BTC_def_pip == 1) then {player addAction [("" + ("Camera On\Off") + ""),BTC_dir_action, [[],BTC_l_camera], -9, false, false, "", "typeOf (vehicle player) in BTC_l_def_veh_pip"];};
+ player addAction [("" + ("Lift") + ""),BTC_dir_action, [[],BTC_attach_cargo], 9, true, false, "", "[] call BTC_lift_check"];
+ player addAction [("" + ("Release") + ""),BTC_dir_action, [[],BTC_detach_cargo], -9, true, false, "", "BTC_lifted == 1"];
+ player addEventHandler ["Respawn",
+ {
+ [] spawn
+ {
+ WaitUntil {sleep 1; Alive player};
+ BTC_l_pip_cond = false;
+ BTC_cargo = ObjNull;
+ BTC_Hud_Cond = false;
+ BTC_lifted = 0;
+ if (BTC_def_hud == 1) then {player addAction [("" + ("Hud On\Off") + ""),BTC_dir_action, [[],{if (BTC_Hud_Cond) then {BTC_Hud_Cond = false;} else {BTC_Hud_Cond = true;_hud = [] spawn BTC_fnc_hud;};}], -8, false, false, "", "(vehicle player) isKindOf ""Helicopter"" && driver (vehicle player) == player"];};
+ if (BTC_def_pip == 1) then {player addAction [("" + ("Camera On\Off") + ""),BTC_dir_action, [[],BTC_l_camera], -9, false, false, "", "typeOf (vehicle player) in BTC_l_def_veh_pip"];};
+ player addAction [("" + ("Lift") + ""),BTC_dir_action, [[],BTC_attach_cargo], 9, true, false, "", "[] call BTC_lift_check"];
+ player addAction [("" + ("Release") + ""),BTC_dir_action, [[],BTC_detach_cargo], -9, true, false, "", "BTC_lifted == 1"];
+ };
+ }];
+};
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/=BTC=_Obj.paa b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/=BTC=_Obj.paa
new file mode 100644
index 0000000..bebf73a
Binary files /dev/null and b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/=BTC=_Obj.paa differ
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/arrow_down_ca.paa b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/arrow_down_ca.paa
new file mode 100644
index 0000000..8bfac0b
Binary files /dev/null and b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/arrow_down_ca.paa differ
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/arrow_up_ca.paa b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/arrow_up_ca.paa
new file mode 100644
index 0000000..3034f05
Binary files /dev/null and b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/arrow_up_ca.paa differ
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/igui_radar_air_ca.paa b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/igui_radar_air_ca.paa
new file mode 100644
index 0000000..36e6013
Binary files /dev/null and b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/igui_radar_air_ca.paa differ
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/objective_complete_ca.paa b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/objective_complete_ca.paa
new file mode 100644
index 0000000..8727813
Binary files /dev/null and b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/objective_complete_ca.paa differ
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/objective_incomplete_ca.paa b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/objective_incomplete_ca.paa
new file mode 100644
index 0000000..7f20fbc
Binary files /dev/null and b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_lift/img/objective_incomplete_ca.paa differ
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_logistic_init.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_logistic_init.sqf
new file mode 100644
index 0000000..0b15af0
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/=BTC=_logistic_init.sqf
@@ -0,0 +1,130 @@
+/*
+Created by =BTC= Giallustio
+Version: 0.14 rc 1
+Date: 20/03/2013
+Visit us at: http://www.blacktemplars.altervista.org/
+*/
+if (isServer) then
+{
+ BTC_id_repo = 10;publicVariable "BTC_id_repo";
+ BTC_cargo_repo = "Land_HBarrierBig_F" createVehicle [- 5000,- 5000,0];publicVariable "BTC_cargo_repo";
+};
+if (isDedicated) exitwith {};
+BTC_active_lift = 1;
+BTC_active_fast_rope = 1;
+BTC_active_cargo = 1;
+//Common
+BTC_dir_action = "=BTC=_logistic\=BTC=_addAction.sqf";
+BTC_l_placement_area = 20;
+if (BTC_active_lift == 1) then
+{
+ //Lift
+ BTC_lift_pilot = ["B_Helipilot_F"];
+ BTC_lift = 1;
+ BTC_lifted = 0;
+ BTC_lift_min_h = 7;
+ BTC_lift_max_h = 12;
+ BTC_lift_radius = 3;
+ BTC_def_hud = 1;
+ BTC_def_pip = 1;
+ BTC_l_def_veh_pip = ["B_Heli_Light_01_F","O_Heli_Light_02_F","B_Heli_Transport_01_F","I_Heli_Transport_02_F"];
+ BTC_l_pip_cond = false;
+ BTC_cargo_lifted = objNull;
+ BTC_Hud_Cond = false;
+ BTC_HUD_x = (SafeZoneW+2*SafeZoneX) - 0.155;//+ 0.045;
+ BTC_HUD_y = (SafeZoneH+2*SafeZoneY) + 0.045;
+ _lift = [] execVM "=BTC=_logistic\=BTC=_lift\=BTC=_lift_init.sqf";
+ BTC_get_liftable_array =
+ {
+ _chopper = _this select 0;
+ _array = [];
+ switch (typeOf _chopper) do
+ {
+ //MH9
+ case "B_Heli_Light_01_F" : {_array = ["Motorcycle","ReammoBox","ReammoBox_F","Quadbike_01_base_F","Strategic"];};
+ //PO-30
+ case "O_Heli_Light_02_F" : {_array = ["Motorcycle","ReammoBox","ReammoBox_F","Strategic","StaticWeapon","Car"];};
+ //UH80
+ case "B_Heli_Transport_01_F" : {_array = ["Motorcycle","ReammoBox","ReammoBox_F","Strategic","StaticWeapon","Car","Truck","Wheeled_APC","Air","Ship"];};
+ //CH49
+ case "I_Heli_Transport_02_F" : {_array = ["Motorcycle","ReammoBox","ReammoBox_F","Strategic","StaticWeapon","Car","Truck","Wheeled_APC","Tracked_APC","APC_Tracked_01_base_F","APC_Tracked_02_base_F","Air","Ship"];};
+
+ };
+ _array
+ };
+};
+if (BTC_active_fast_rope == 1) then
+{
+ //Fast roping
+ BTC_fast_rope_h = 35;
+ BTC_fast_rope_h_min = 5;
+ BTC_roping_chopper = ["B_Heli_Light_01_F","O_Heli_Light_02_F","B_Heli_Transport_01_F","I_Heli_Transport_02_F"];
+ _rope = [] execVM "=BTC=_logistic\=BTC=_fast_roping\=BTC=_fast_roping_init.sqf";
+};
+if (BTC_active_cargo == 1) then
+{
+ //Cargo System
+ _cargo = [] execVM "=BTC=_logistic\=BTC=_cargo_system\=BTC=_cargo_system_init.sqf";
+ BTC_def_vehicles = ["Tank","Wheeled_APC","Truck","Car","Helicopter"];
+ BTC_def_cargo = ["Motorcycle","ReammoBox","ReammoBox_F","Strategic"];
+ BTC_def_drag = ["ReammoBox","ReammoBox_F","Strategic"];
+ BTC_def_placement = ["ReammoBox","ReammoBox_F","Strategic"];
+ BTC_cargo_selected = objNull;
+ BTC_def_cc =
+ [
+ "B_Quadbike_01_F",2,
+ //Trucks
+ "B_Truck_01_transport_F",10,
+ "B_Truck_01_covered_F",10,
+ "I_Truck_02_covered_F",10,
+ "O_Truck_02_covered_F",10,
+ "I_Truck_02_transport_F",10,
+ "O_Truck_02_transport_F",10,
+ "O_Truck_02_transport_F",10
+ ];
+ BTC_def_rc =
+ [
+ "Land_BagBunker_Small_F",4
+ ];
+};
+//Functions
+BTC_l_paradrop =
+{
+ _veh = _this select 0;
+ _dropped = _this select 1;
+ _chute_type = _this select 2;
+ private ["_chute"];
+ _dropped_type = typeOf _dropped;
+ _dropped attachTo [_veh,[0,2,-5]];
+ sleep 0.1;
+ detach _dropped;
+ _dropped setvariable ["BTC_cannot_lift",1,false];
+ waitUntil {_dropped distance _veh > 50};
+ _dropped setvariable ["BTC_cannot_lift",0,false];
+ _chute = createVehicle [_chute_type, getposatl _dropped, [], 0, "FLY"];
+ _smoke = "SmokeshellGreen" createVehicle position _dropped;
+ _chem = "Chemlight_green" createVehicle position _dropped;
+ _smoke attachto [_dropped,[0,0,0]];
+ _chem attachto [_dropped,[0,0,0]];
+ _dropped attachTo [_chute,[0,0,0]];
+ _heigh = 0;
+ while {((getPos _chute) select 2) > 0.3} do {sleep 1;_heigh = (getPos _chute) select 2;};
+ detach _dropped;
+
+};
+BTC_l_obj_fall =
+{
+ _obj = _this select 0;
+ _height = (getPos _obj) select 2;
+ _fall = 0.09;
+ while {((getPos _obj) select 2) > 0.1} do
+ {
+
+ _fall = (_fall * 1.1);
+ _obj setPos [getPos _obj select 0, getPos _obj select 1, _height];
+ _height = _height - _fall;
+ //hint format ["%1 - %2", (getPos _obj) select 2,_height];
+ sleep 0.01;
+ };
+ //if (((getPos _obj) select 2) < 0.3) then {_obj setPos [getPos _obj select 0, getPos _obj select 1, 0.2];};
+};
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logistic/Hint&Tips.sqf b/MPMissions/epoch.Altis/=BTC=_logistic/Hint&Tips.sqf
new file mode 100644
index 0000000..1b3429d
--- /dev/null
+++ b/MPMissions/epoch.Altis/=BTC=_logistic/Hint&Tips.sqf
@@ -0,0 +1,27 @@
+/*
+Hint & Tips
+
+obj setvariable ["BTC_cannot_lift",1,true]; // Make an object not liftable
+obj setVariable ["BTC_cannot_drag",1,true]; // Make an object not draggable
+obj setVariable ["BTC_cannot_load",1,true]; // Make an object not loadable
+BTC_lift_min_h = 7; // Min height required to lift an object
+BTC_lift_max_h = 12; // Max height required to lift an object
+BTC_lift_radius = 2; // You have to stay in this radius to lift an object
+BTC_lift_pilot = []; // Leave empty if all soldiers can use choppers to lift. If only pilot can -> BTC_lift_pilot = ["US_Soldier_Pilot_EP1","USMC_Soldier_Pilot", ...etc etc];
+
+BTC_Get_liftable_array =
+{
+ _chopper = _this select 0;
+ _array = [];
+ switch (typeOf _chopper) do
+ {
+ case "MH6J_EP1" : {_array = ["Motorcycle","ReammoBox"];}; // Modify the array to change liftable objects by the chopper ex -> _array = ["Motorcycle","ReammoBox","Wheeled_APC", ... etc etc];
+ // To add a new chopper class: copy the previous line:
+ // case "MH6J_EP1" : {_array = ["Motorcycle","ReammoBox"];};
+ // modify the class in the "" -> "Mi17_Ins"
+ // case "Mi17_Ins" : {_array = ["Motorcycle","ReammoBox"];};
+ // modify the _array as u want like above
+ };
+ _array
+};
+*/
\ No newline at end of file
diff --git a/MPMissions/epoch.Altis/=BTC=_logo.paa b/MPMissions/epoch.Altis/=BTC=_logo.paa
new file mode 100644
index 0000000..9edd612
Binary files /dev/null and b/MPMissions/epoch.Altis/=BTC=_logo.paa differ