mirror of
https://github.com/slb2k11/Exile_Igiload.git
synced 2024-08-30 17:32:13 +00:00
Igiload TaruPodMod
This commit is contained in:
parent
574469944b
commit
85b4768ab6
File diff suppressed because it is too large
Load Diff
@ -7,10 +7,11 @@ waitUntil { time > 0 };
|
||||
IL_EV_Count = 0;
|
||||
IL_Veh_Array = [];
|
||||
|
||||
cutText ["IgiLoad is loading. Please wait...","PLAIN",2];
|
||||
|
||||
//cutText ["IgiLoad is loading. Please wait...","PLAIN",2];
|
||||
sleep (random 30);
|
||||
|
||||
cutText [Format ["IgiLoad init Player: %1", Player],"PLAIN",2];
|
||||
//cutText [Format ["IgiLoad init Player: %1", Player],"PLAIN",2];
|
||||
|
||||
_null = [Player] execVM "IgiLoad\IgiLoad.sqf";
|
||||
waitUntil {scriptDone _null};
|
||||
@ -26,7 +27,8 @@ sleep (random (IL_Check_Veh_Max - IL_Check_Veh_Min));
|
||||
};
|
||||
} forEach (vehicles);
|
||||
|
||||
cutText ["IgiLoad loaded. Have fun :)","PLAIN",2];
|
||||
call compileFinal preprocessFileLineNumbers "IgiLoad\IgiLoadTaru.sqf";
|
||||
//cutText ["IgiLoad loaded. Have fun :)","PLAIN",2];
|
||||
|
||||
while {true} do
|
||||
{
|
||||
|
478
Igiload/IgiLoadTaru.sqf
Normal file
478
Igiload/IgiLoadTaru.sqf
Normal file
@ -0,0 +1,478 @@
|
||||
/*
|
||||
This script is based on Xeno Taru mod from NorX Aengell.
|
||||
http://www.armaholic.com/page.php?id=27532
|
||||
|
||||
Original author: NorX Aengell
|
||||
Rewrite and Epoch adaptation: Slayer
|
||||
|
||||
*/
|
||||
|
||||
IL_Taru_DevMod = false;
|
||||
|
||||
//above this altitude dropping with parachute
|
||||
IL_Taru_Parachute_Altitude = 70;
|
||||
|
||||
//open parachute when altitude is less or equal this parameter
|
||||
IL_Taru_Parachute_Open_Altitude = 120;
|
||||
//IL_Taru_Parachute_Altitude must be greater then IL_Taru_Parachute_Open_Altitude
|
||||
|
||||
IL_Taru_Disable_Deattaching_Altitude = 3;
|
||||
//Not posible to deattach when altitude is extrely low, because new position of pod will be under terrain level.
|
||||
//Recomended values are between 3 and 10.
|
||||
|
||||
if (hasInterface && !isDedicated) then {
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log "Igi Load Taru started";
|
||||
};
|
||||
|
||||
IL_Taru_Init =
|
||||
{
|
||||
waituntil
|
||||
{
|
||||
sleep 2;
|
||||
|
||||
{
|
||||
if (isnil {_x getVariable "IL_Taru_Action_Attach"}) then
|
||||
{
|
||||
_x setVariable ["IL_Taru_Action_Attach",true,false];
|
||||
|
||||
IL_Taru_Action_Attach = _x addAction ["<img image='IgiLoad\images\load.paa' /><t color=""#007f0e""> Attach the Pod</t>", "[""attach"",_this] call IL_Taru_Do_Action;", nil, 2, false, true, "",
|
||||
"[_this] call IL_Verify_Heli and {[vehicle _this] call IL_Verify_Pod} and {!([vehicle _this] call IL_Verify_Attached_Object)}"];
|
||||
};
|
||||
|
||||
if (isnil {_x getVariable "IL_Taru_Action_Deattach"}) then
|
||||
{
|
||||
_x setVariable ["IL_Taru_Action_Deattach",true,false];
|
||||
|
||||
IL_Taru_Action_Deattach = _x addAction ["<img image='IgiLoad\images\unload.paa' /><t color=""#ff0000""> Detach the Pod</t>", "[""deattach"",_this] call IL_Taru_Do_Action;", nil, 2, false, true, "",
|
||||
"[_this] call IL_Verify_Heli and [_this] call IL_Verify_Altitude and {[vehicle _this] call IL_Verify_Attached_Object}"];
|
||||
};
|
||||
|
||||
if (isnil {_x getVariable "IL_Taru_Action_Drop"}) then
|
||||
{
|
||||
_x setVariable ["IL_Taru_Action_Drop",true,false];
|
||||
|
||||
IL_Taru_Action_Drop = _x addAction ["<img image='IgiLoad\images\unload_para.paa' /><t color=""#b200ff""> Drop the Pod</t>", "[""drop"",_this] call IL_Taru_Do_Action;", nil, 2, false, true, "",
|
||||
"[_this] call IL_Verify_Heli and {[vehicle _this] call IL_Verify_Attached_Object}"];
|
||||
};
|
||||
} foreach units group player;
|
||||
};
|
||||
};
|
||||
|
||||
IL_Verify_Attached_Object =
|
||||
{
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log "IL_Verify_Attached_Object called";
|
||||
};
|
||||
_helico = (_this select 0);
|
||||
_object_Verifier = false;
|
||||
if (count (attachedObjects _helico) isEqualTo 0) exitwith {_object_Verifier};
|
||||
{
|
||||
if (_x isKindOf "Pod_Heli_Transport_04_base_F") exitwith {_object_Verifier = true;};
|
||||
} foreach attachedObjects _helico;
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log format["IL_Verify_Attached_Object returns %1",_object_Verifier];
|
||||
};
|
||||
_object_Verifier
|
||||
};
|
||||
|
||||
IL_Verify_Pod =
|
||||
{
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log "IL_Verify_Pod called";
|
||||
};
|
||||
_pod = getSlingLoad (_this select 0);
|
||||
_pod_Verifier = false;
|
||||
if (isnull (getSlingLoad vehicle player)) exitwith {_pod_Verifier};
|
||||
if (_pod isKindOf "Pod_Heli_Transport_04_base_F") then {_pod_Verifier = true;};
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log format["IL_Verify_Pod returns %1",_pod_Verifier];
|
||||
};
|
||||
_pod_Verifier
|
||||
};
|
||||
|
||||
IL_Verify_Heli =
|
||||
{
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log "IL_Verify_Heli called";
|
||||
};
|
||||
_helico = vehicle (_this select 0);
|
||||
_helico_Verifier = false;
|
||||
if (_helico isKindOf "Heli_Transport_04_base_F") then {_helico_Verifier = true;};
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log format["IL_Verify_Heli returns %1",_helico_Verifier];
|
||||
};
|
||||
_helico_Verifier
|
||||
};
|
||||
|
||||
IL_Verify_Altitude = {
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log "IL_Verify_Altitude called";
|
||||
};
|
||||
_helico = vehicle (_this select 0);
|
||||
_allow_deattach = false;
|
||||
if ((getPosATL _helico) select 2 > IL_Taru_Disable_Deattaching_Altitude) then {_allow_deattach = true;};
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log format["IL_Verify_Altitude returns %1",_allow_deattach];
|
||||
};
|
||||
_allow_deattach
|
||||
};
|
||||
|
||||
IL_Taru_Do_Action =
|
||||
{
|
||||
_action = _this select 0;
|
||||
_helico = "";
|
||||
|
||||
if (typename (_this select 1) isEqualTo "OBJECT") then {_helico = vehicle (_this select 1);};
|
||||
if (typename (_this select 1) isEqualTo "ARRAY") then {_helico = vehicle ((_this select 1) select 0);};
|
||||
|
||||
_cables = ropes _helico;
|
||||
|
||||
if (ropeUnwound (_cables select 0)) then
|
||||
{
|
||||
[_action, _helico] call IL_Pod_Manager;
|
||||
};
|
||||
};
|
||||
|
||||
IL_Taru_Transmission =
|
||||
{
|
||||
private ["_soundToPlay", "_helico", "_soundToPlay","_args","_pod"];
|
||||
_args = _this select 1;
|
||||
_helico = vehicle (_args select 1);
|
||||
_soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString;
|
||||
|
||||
switch (_args select 0) do {
|
||||
case 'rope_unwind': {
|
||||
_pod = _args select 2;
|
||||
_helico disableCollisionWith _pod;
|
||||
{ropeUnwind [_x, _args select 3, _args select 4];} foreach ropes _helico;
|
||||
sleep 4;
|
||||
_helico enableCollisionWith _pod;
|
||||
};
|
||||
case 'rope_unwind_and_wait': {
|
||||
_pod = _args select 2;
|
||||
_helico disableCollisionWith _pod;
|
||||
{ropeUnwind [_x, _args select 3, _args select 4];} foreach ropes _helico;
|
||||
waituntil {ropeLength ((ropes _helico) select 0) isEqualTo 1};
|
||||
sleep 4;
|
||||
_helico enableCollisionWith _pod;
|
||||
};
|
||||
case 'chat_attach': {
|
||||
if (!(player in crew _helico)) exitWith{};
|
||||
["Success",["Pod successfully attached!"]] call ExileClient_gui_notification_event_addNotification;
|
||||
};
|
||||
case 'chat_deattach': {
|
||||
if (!(player in crew _helico)) exitWith{};
|
||||
["Success",["Pod successfully dettached!"]] call ExileClient_gui_notification_event_addNotification;
|
||||
};
|
||||
case 'chat_drop_with_parachute': {
|
||||
if (!(player in crew _helico)) exitWith{};
|
||||
["Success",["Pod Paradropt!"]] call ExileClient_gui_notification_event_addNotification;
|
||||
};
|
||||
case 'chat_drop_without_parachute': {
|
||||
if (!(player in crew _helico)) exitWith{};
|
||||
["Success",["Pod drop without Parachut!"]] call ExileClient_gui_notification_event_addNotification;
|
||||
};
|
||||
case 'sound_attach': {
|
||||
if (!(player in crew _helico)) exitWith{};
|
||||
_soundToPlay = _soundPath + "IgiLoad\sounds\attach.wss";
|
||||
playSound3D [_soundToPlay, _helico, false, getPosATL _helico, 10, 1, 0];
|
||||
};
|
||||
case 'sound_deattach': {
|
||||
if (!(player in crew _helico)) exitWith{};
|
||||
_soundToPlay = _soundPath + "IgiLoad\sounds\deattach.wss";
|
||||
playSound3D [_soundToPlay, _helico, false, getPosATL _helico, 10, 1, 0];
|
||||
};
|
||||
case 'sound_drop': {
|
||||
if (!(player in crew _helico)) exitWith{};
|
||||
_soundToPlay = _soundPath + "IgiLoad\sounds\drop.wss";
|
||||
playSound3D [_soundToPlay, _helico, false, getPosATL _helico, 10, 1, 0];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
waitUntil {!isNull player};
|
||||
[] spawn IL_Taru_Init;
|
||||
IL_Taru_EH_Respawn = player addEventHandler ["Respawn", "[] spawn IL_Taru_Init;"];
|
||||
};
|
||||
|
||||
IL_Pod_Manager = {
|
||||
IL_CLient_Pod_Manager = _this;
|
||||
if (isDedicated || isServer) then
|
||||
{
|
||||
IL_CLient_Pod_Manager spawn IL_Server_Pod_Manager;
|
||||
}
|
||||
else
|
||||
{
|
||||
publicVariableServer "IL_CLient_Pod_Manager";
|
||||
};
|
||||
};
|
||||
"IL_Client_Pod_Manager" addPublicVariableEventHandler IL_Pod_Manager;
|
||||
|
||||
IL_Client_Control = {
|
||||
private ["_nearBy","_heli","_heli_pos"];
|
||||
IL_Server_Client_Control = _this;
|
||||
if (hasInterface && !isDedicated) then
|
||||
{
|
||||
IL_Server_Client_Control spawn IL_Taru_Transmission; Exile_
|
||||
}
|
||||
else
|
||||
{
|
||||
_heli = IL_Server_Client_Control select 1;
|
||||
_nearBy = (getPosATL _heli) nearEntities [["Exile_Unit_Player","LandVehicle","Ship","Air"], 300];
|
||||
{
|
||||
if (isPlayer _x) then {
|
||||
(owner _x) publicVariableClient "IL_Server_Client_Control";
|
||||
};
|
||||
} forEach _nearBy;
|
||||
};
|
||||
};
|
||||
"IL_Server_Client_Control" addPublicVariableEventHandler IL_Client_Control;
|
||||
|
||||
|
||||
if (isDedicated || isServer) then {
|
||||
if (IL_Taru_DevMod) then {
|
||||
diag_log "Igi Load Taru started";
|
||||
};
|
||||
|
||||
IL_Server_Pod_Manager = {
|
||||
private ["_args"];
|
||||
_args = _this select 1;
|
||||
switch (_args select 0) do {
|
||||
case "attach": {
|
||||
[_args select 1] spawn IL_Taru_Attach_Pod;
|
||||
};
|
||||
case "deattach": {
|
||||
[_args select 1] spawn IL_Taru_Deattach_Pod;
|
||||
};
|
||||
case "drop": {
|
||||
[_args select 1] spawn IL_Taru_Drop_Pod;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
IL_Taru_Attach_Pod =
|
||||
{
|
||||
_helico = _this select 0;
|
||||
_pod = getSlingLoad _helico;
|
||||
_mass_of_pod = getmass getSlingLoad _helico;
|
||||
_mass_of_heli = getmass _helico;
|
||||
|
||||
if (!isTouchingGround _helico) then
|
||||
{
|
||||
|
||||
["sound_attach", _helico] call IL_Client_Control;
|
||||
["rope_unwind_and_wait", _helico, _pod, 1.9, 1, 1] call IL_Client_Control;
|
||||
sleep 1;
|
||||
{ropeUnwind [_x, 1.9, 1];} foreach ropes _helico;
|
||||
|
||||
waituntil {ropeLength (ropes _helico select 0) isEqualTo 1};
|
||||
|
||||
};
|
||||
|
||||
_helico disableCollisionWith _pod;
|
||||
[] call {
|
||||
_pod_type = typeOf _pod;
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_bench_F") exitwith
|
||||
{
|
||||
_pod attachTo [_helico,[0,0.1,-1.13]];
|
||||
_helico setCustomWeightRTD 680;
|
||||
_helico setmass _mass_of_pod + _mass_of_heli;
|
||||
};
|
||||
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_covered_F") exitwith
|
||||
{
|
||||
_pod attachTo [_helico,[-0.1,-1.05,-0.82]];
|
||||
_helico setCustomWeightRTD 1413;
|
||||
_helico setmass _mass_of_pod + _mass_of_heli;
|
||||
};
|
||||
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_fuel_F") exitwith
|
||||
{
|
||||
_pod attachTo [_helico,[0,-0.282,-1.25]];
|
||||
_helico setCustomWeightRTD 13311;
|
||||
_helico setmass _mass_of_pod + _mass_of_heli;
|
||||
};
|
||||
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_medevac_F") exitwith
|
||||
{
|
||||
_pod attachTo [_helico,[-0.14,-1.05,-0.92]];
|
||||
_helico setCustomWeightRTD 1321;
|
||||
_helico setmass _mass_of_pod + _mass_of_heli;
|
||||
};
|
||||
|
||||
if (_pod_type in ["Land_Pod_Heli_Transport_04_repair_F","Land_Pod_Heli_Transport_04_box_F","Land_Pod_Heli_Transport_04_ammo_F"]) exitwith
|
||||
{
|
||||
_pod attachTo [_helico,[-0.09,-1.05,-1.1]];
|
||||
_helico setCustomWeightRTD 1270;
|
||||
_helico setmass _mass_of_pod + _mass_of_heli;
|
||||
};
|
||||
};
|
||||
|
||||
["rope_unwind", _helico, _pod, 250, 1] call IL_Client_Control;
|
||||
sleep 1;
|
||||
{ropeUnwind [_x, 250, 1];} foreach ropes _helico;
|
||||
_helico enableCollisionWith _pod;
|
||||
["sound_attach", _helico] call IL_Client_Control;
|
||||
["chat_attach", _helico] call IL_Client_Control;
|
||||
|
||||
if (isnil {_helico getVariable "EH_GetOut_Taru"}) then
|
||||
{
|
||||
_helico addEventHandler ["Getin", "[_this] spawn IL_Taru_GetIn;"];
|
||||
_helico setVariable ["EH_GetIn_Taru", true, false];
|
||||
};
|
||||
};
|
||||
|
||||
IL_Taru_Deattach_Pod =
|
||||
{
|
||||
_helico = _this select 0;
|
||||
_attached_object = [];
|
||||
_mass_of_heli = getmass _helico;
|
||||
{
|
||||
if (_x isKindOf "Pod_Heli_Transport_04_base_F") exitwith {_attached_object = _x;};
|
||||
} foreach attachedObjects _helico;
|
||||
|
||||
_mass_of_pod = getmass _attached_object;
|
||||
_helico disableCollisionWith _attached_object;
|
||||
|
||||
[] call {
|
||||
_pod_type = typeOf _attached_object;
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_bench_F") exitwith
|
||||
{
|
||||
_attached_object attachTo [_helico,[0,0.1,-2.83]];
|
||||
};
|
||||
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_covered_F") exitwith
|
||||
{
|
||||
_attached_object attachTo [_helico,[-0.1,-1.05,-2.52]];
|
||||
};
|
||||
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_fuel_F") exitwith
|
||||
{
|
||||
_attached_object attachTo [_helico,[0,-0.282,-3.05]];
|
||||
};
|
||||
|
||||
if (_pod_type isEqualTo "Land_Pod_Heli_Transport_04_medevac_F") exitwith
|
||||
{
|
||||
_attached_object attachTo [_helico,[-0.14,-1.05,-2.62]];
|
||||
};
|
||||
|
||||
if (_pod_type in ["Land_Pod_Heli_Transport_04_repair_F","Land_Pod_Heli_Transport_04_box_F","Land_Pod_Heli_Transport_04_ammo_F"]) exitwith
|
||||
{
|
||||
_attached_object attachTo [_helico,[-0.09,-1.05,-2.8]];
|
||||
};
|
||||
};
|
||||
|
||||
["rope_unwind", _helico, _attached_object, 1,9, 10] call IL_Client_Control;
|
||||
sleep 1;
|
||||
{
|
||||
ropeUnwind [_x, 1.9, 10];
|
||||
} foreach ropes _helico;
|
||||
["sound_deattach", _helico] call IL_Client_Control;
|
||||
|
||||
_helico setCustomWeightRTD 0;
|
||||
_helico setmass _mass_of_heli - _mass_of_pod;
|
||||
["sound_deattach", _helico] call IL_Client_Control;
|
||||
["chat_deattach", _helico] call IL_Client_Control;
|
||||
detach _attached_object;
|
||||
sleep 4;
|
||||
_helico enableCollisionWith _attached_object;
|
||||
//if (!isTouchingGround _helico) then {waituntil {ropeLength (ropes _helico select 0) isEqualTo 10};};
|
||||
};
|
||||
|
||||
IL_Taru_Drop_Pod =
|
||||
{
|
||||
_helico = _this select 0;
|
||||
_attached_object = [];
|
||||
|
||||
{
|
||||
if (_x isKindOf "Pod_Heli_Transport_04_base_F") exitwith {_attached_object = _x;};
|
||||
} foreach attachedObjects _helico;
|
||||
|
||||
_helico disableCollisionWith _attached_object;
|
||||
{ropeCut [_x, 0];} foreach ropes _helico;
|
||||
_helico setCustomWeightRTD 0;
|
||||
["sound_drop", _helico] call IL_Client_Control;
|
||||
detach _attached_object;
|
||||
sleep 4;
|
||||
_helico enableCollisionWith _attached_object;
|
||||
|
||||
sleep 0.5;
|
||||
|
||||
if ((getPosATL _attached_object) select 2 >= IL_Taru_Parachute_Altitude) exitwith
|
||||
{
|
||||
["chat_drop_with_parachute", _helico] call IL_Client_Control;
|
||||
|
||||
waituntil {(getPosATL _attached_object) select 2 <= IL_Taru_Parachute_Open_Altitude};
|
||||
|
||||
_parachute = createVehicle ["B_Parachute_02_F",getposatl _attached_object, [], 0, "CAN COLLIDE"];
|
||||
_parachute attachTo [_attached_object,[0,0,-1]];
|
||||
|
||||
[_attached_object,_parachute,_helico] spawn
|
||||
{
|
||||
_attached_object = _this select 0;
|
||||
_parachute = _this select 1;
|
||||
_helico = _this select 2;
|
||||
|
||||
waituntil
|
||||
{
|
||||
if ((getPosATL _attached_object) select 2 <= 5) exitwith
|
||||
{
|
||||
detach _attached_object;
|
||||
_vitesse_nacelle = velocity _attached_object;
|
||||
_parachute setVelocity [_vitesse_nacelle select 0 + 1, _vitesse_nacelle select 1 + 1, 0];
|
||||
true
|
||||
};
|
||||
false
|
||||
};
|
||||
};
|
||||
|
||||
waituntil
|
||||
{
|
||||
if (getposasl _helico distance getposasl _attached_object >= 50) exitwith
|
||||
{
|
||||
detach _parachute;
|
||||
_attached_object attachTo [_parachute,[0,0,-1]];
|
||||
true
|
||||
};
|
||||
false
|
||||
};
|
||||
};
|
||||
|
||||
["chat_drop_without_parachute", _helico] call IL_Client_Control;
|
||||
};
|
||||
|
||||
IL_Taru_GetIn =
|
||||
{
|
||||
_vehicle = _this select 0 select 0;
|
||||
if ([_vehicle] call IL_Verify_Heli) then
|
||||
{
|
||||
if (count attachedObjects _vehicle > 0) then
|
||||
{
|
||||
_time = time + 2;
|
||||
waituntil
|
||||
{
|
||||
_vehicle setvelocity [0, 0, 0];
|
||||
if (time > _time or {time > _time + 15}) exitwith {true};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
IL_Save_Pod_Position =
|
||||
{
|
||||
while{true}do {
|
||||
sleep 20;
|
||||
{
|
||||
sleep 2;
|
||||
//when you dropping with parachute or deattaching pod without player, new position of the pod is not saved to db.
|
||||
//with following ugly hack we are saving pod position every 20 seconds
|
||||
if (_x isKindOf "Pod_Heli_Transport_04_base_F") then {
|
||||
_x call ExileServer_object_vehicle_database_update;
|
||||
};
|
||||
} forEach vehicles;
|
||||
};
|
||||
};
|
||||
|
||||
[] spawn IL_Save_Pod_Position;
|
||||
};
|
BIN
Igiload/sounds/attach.wss
Normal file
BIN
Igiload/sounds/attach.wss
Normal file
Binary file not shown.
BIN
Igiload/sounds/deattach.wss
Normal file
BIN
Igiload/sounds/deattach.wss
Normal file
Binary file not shown.
BIN
Igiload/sounds/drop.wss
Normal file
BIN
Igiload/sounds/drop.wss
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user