mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
364 lines
12 KiB
C++
364 lines
12 KiB
C++
|
class CfgPatches {
|
||
|
class AGM_Captives {
|
||
|
units[] = {};
|
||
|
weapons[] = {"AGM_CableTie"};
|
||
|
requiredVersion = 0.60;
|
||
|
requiredAddons[] = {AGM_Core, AGM_Interaction};
|
||
|
version = "0.95";
|
||
|
versionStr = "0.95";
|
||
|
versionAr[] = {0,95,0};
|
||
|
author[] = {"commy2", "KoffeinFlummi"};
|
||
|
authorUrl = "https://github.com/commy2/";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class CfgFunctions {
|
||
|
class AGM_Captives {
|
||
|
class AGM_Captives {
|
||
|
file = "\AGM_Captives\functions";
|
||
|
class canFriskPerson;
|
||
|
class canLoadCaptive;
|
||
|
class canUnloadCaptive;
|
||
|
class escortCaptive;
|
||
|
class handleGetOut;
|
||
|
class handleKnockedOut;
|
||
|
class handlePlayerChanged;
|
||
|
class handleWokeUp;
|
||
|
class initPost;
|
||
|
class initUnit;
|
||
|
class loadCaptive;
|
||
|
class openFriskMenu;
|
||
|
class setCaptive;
|
||
|
class surrender;
|
||
|
class unloadCaptive;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//release escorted captive when entering a vehicle
|
||
|
class Extended_GetIn_EventHandlers {
|
||
|
class All {
|
||
|
class AGM_Captives_AutoDetachCaptive {
|
||
|
getIn = "if (local (_this select 2) && {(_this select 2) getVariable ['AGM_isEscorting', false]}) then {(_this select 2) setVariable ['AGM_isEscorting', false, true]}";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//reset captive animation after leaving vehicle
|
||
|
class Extended_GetOut_EventHandlers {
|
||
|
class All {
|
||
|
class AGM_Captives_LeaveVehicle {
|
||
|
getOut = "if (local (_this select 2) && {(_this select 2) getVariable ['AGM_isCaptive', false]}) then {_this call AGM_Captives_fnc_handleGetOut}";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//reset captivity and escorting status when getting killed
|
||
|
class Extended_Killed_EventHandlers {
|
||
|
class CAManBase {
|
||
|
class AGM_Captives_AutoDetachCaptive {
|
||
|
killed = "if ((_this select 0) getVariable ['AGM_isCaptive', false]) then {(_this select 0) setVariable ['AGM_isCaptive', false, true]}; if ((_this select 0) getVariable ['AGM_isEscorting', false]) then {(_this select 0) setVariable ['AGM_isEscorting', false, true]};";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//handle captive and unconsciousness state
|
||
|
class Extended_Init_EventHandlers {
|
||
|
class CAManBase {
|
||
|
class AGM_Captives_AutoDetachCaptive {
|
||
|
init = "_this call AGM_Captives_fnc_initUnit";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//mission start
|
||
|
class Extended_InitPost_EventHandlers {
|
||
|
class CAManBase {
|
||
|
class AGM_Captives_InitPost {
|
||
|
init = "if (local (_this select 0)) then {_this call AGM_Captives_fnc_initPost};";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class Extended_PostInit_EventHandlers {
|
||
|
class AGM_Captives {
|
||
|
clientInit = "call compile preprocessFileLineNumbers '\AGM_Captives\clientInit.sqf'";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class AGM_Core_canInteractConditions {
|
||
|
class AGM_Interaction_isNotEscorting {
|
||
|
condition = "!(_player getVariable ['AGM_isEscorting', false])";
|
||
|
};
|
||
|
class AGM_Interaction_isNotCaptive {
|
||
|
condition = "!(_player getVariable ['AGM_isCaptive', false])";
|
||
|
};
|
||
|
class AGM_Interaction_isNotSurrendering {
|
||
|
condition = "!(_player getVariable ['AGM_isSurrender', false])";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class CfgVehicles {
|
||
|
class Man;
|
||
|
class CAManBase: Man {
|
||
|
class AGM_Actions {
|
||
|
class AGM_SetCaptive {
|
||
|
displayName = "$STR_AGM_Captives_SetCaptive";
|
||
|
distance = 4;
|
||
|
condition = "'AGM_CableTie' in items _player && {alive _target} && {!(_target getVariable ['AGM_isCaptive', false])}";
|
||
|
statement = "player removeItem 'AGM_CableTie'; [_target, true] call AGM_Captives_fnc_setCaptive";
|
||
|
showDisabled = 0;
|
||
|
priority = 2.4;
|
||
|
icon = "\AGM_Captives\UI\handcuff_ca.paa";
|
||
|
hotkey = "C";
|
||
|
};
|
||
|
class AGM_ReleaseCaptive {
|
||
|
displayName = "$STR_AGM_Captives_ReleaseCaptive";
|
||
|
distance = 4;
|
||
|
condition = "_target getVariable ['AGM_isCaptive', false] && {isNull (attachedTo _target)}";
|
||
|
statement = "[_target, false] call AGM_Captives_fnc_setCaptive";
|
||
|
exceptions[] = {"AGM_Interaction_isNotEscorting"};
|
||
|
showDisabled = 0;
|
||
|
priority = 2.4;
|
||
|
icon = "\AGM_Captives\UI\handcuff_ca.paa";
|
||
|
hotkey = "R";
|
||
|
};
|
||
|
class AGM_EscortCaptive {
|
||
|
displayName = "$STR_AGM_Captives_EscortCaptive";
|
||
|
distance = 4;
|
||
|
condition = "_target getVariable ['AGM_isCaptive', false] && {isNull (attachedTo _target)} && {alive _target} && {!(_target getVariable ['AGM_isUnconscious', false])}";
|
||
|
statement = "[_target, true] call AGM_Captives_fnc_escortCaptive";
|
||
|
exceptions[] = {"AGM_Interaction_isNotEscorting"};
|
||
|
showDisabled = 0;
|
||
|
icon = "\AGM_Captives\UI\captive_ca.paa";
|
||
|
priority = 2.3;
|
||
|
hotkey = "E";
|
||
|
};
|
||
|
class AGM_StopEscorting {
|
||
|
displayName = "$STR_AGM_Captives_StopEscorting";
|
||
|
distance = 4;
|
||
|
condition = "_target getVariable ['AGM_isCaptive', false] && {_target in attachedObjects _player}";
|
||
|
statement = "[_target, false] call AGM_Captives_fnc_escortCaptive";
|
||
|
exceptions[] = {"AGM_Interaction_isNotEscorting"};
|
||
|
showDisabled = 0;
|
||
|
icon = "\AGM_Captives\UI\captive_ca.paa";
|
||
|
priority = 2.3;
|
||
|
hotkey = "E";
|
||
|
};
|
||
|
class AGM_LoadCaptive {
|
||
|
displayName = "$STR_AGM_Captives_LoadCaptive";
|
||
|
distance = 4;
|
||
|
condition = "[_player, _target, objNull] call AGM_Captives_fnc_canLoadCaptive";
|
||
|
statement = "[_player, _target, objNull] call AGM_Captives_fnc_loadCaptive";
|
||
|
exceptions[] = {"AGM_Interaction_isNotEscorting"};
|
||
|
showDisabled = 0;
|
||
|
icon = "\AGM_Captives\UI\captive_ca.paa";
|
||
|
priority = 2.2;
|
||
|
hotkey = "L";
|
||
|
};
|
||
|
class AGM_FriskPerson {
|
||
|
displayName = "$STR_AGM_Captives_FriskPerson";
|
||
|
distance = 2;
|
||
|
condition = "[_player, _target] call AGM_Captives_fnc_canFriskPerson";
|
||
|
statement = "[_player, _target] call AGM_Captives_fnc_openFriskMenu";
|
||
|
showDisabled = 0;
|
||
|
//icon = ""; //@todo
|
||
|
priority = 3;
|
||
|
hotkey = "F";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class AGM_SelfActions {
|
||
|
class AGM_StopEscortingSelf {
|
||
|
displayName = "$STR_AGM_Captives_StopEscorting";
|
||
|
condition = "(_player getVariable ['AGM_escortedUnit', objNull]) getVariable ['AGM_isCaptive', false] && {(_player getVariable ['AGM_escortedUnit', objNull]) in attachedObjects _player}";
|
||
|
statement = "[_player getVariable ['AGM_escortedUnit', objNull], false] call AGM_Captives_fnc_escortCaptive;";
|
||
|
exceptions[] = {"AGM_Interaction_isNotEscorting"};
|
||
|
showDisabled = 0;
|
||
|
priority = 2.3;
|
||
|
hotkey = "C";
|
||
|
};
|
||
|
/*class AGM_LoadCaptiveSelf {
|
||
|
displayName = "$STR_AGM_Captives_LoadCaptive";
|
||
|
condition = "[_player, objNull, objNull] call AGM_Captives_fnc_canLoadCaptiveIntoVehicle";
|
||
|
statement = "[_player, objNull, objNull] call AGM_Captives_fnc_loadCaptiveIntoVehicle";
|
||
|
exceptions[] = {"AGM_Interaction_isNotEscorting"};
|
||
|
showDisabled = 0;
|
||
|
priority = 2.2;
|
||
|
hotkey = "K";
|
||
|
};*/
|
||
|
};
|
||
|
};
|
||
|
|
||
|
#define MACRO_LOADUNLOADCAPTIVE \
|
||
|
class AGM_Actions { \
|
||
|
class AGM_LoadCaptive { \
|
||
|
displayName = "$STR_AGM_Captives_LoadCaptive"; \
|
||
|
distance = 4; \
|
||
|
condition = "[_player, objNull, _target] call AGM_Captives_fnc_canLoadCaptive"; \
|
||
|
statement = "[_player, objNull, _target] call AGM_Captives_fnc_loadCaptive"; \
|
||
|
exceptions[] = {"AGM_Interaction_isNotEscorting"}; \
|
||
|
showDisabled = 0; \
|
||
|
priority = 1.2; \
|
||
|
hotkey = "L"; \
|
||
|
}; \
|
||
|
class AGM_UnloadCaptive { \
|
||
|
displayName = "$STR_AGM_Captives_UnloadCaptive"; \
|
||
|
distance = 4; \
|
||
|
condition = "[_player, _target] call AGM_Captives_fnc_canUnloadCaptive"; \
|
||
|
statement = "[_player, _target] call AGM_Captives_fnc_unloadCaptive"; \
|
||
|
showDisabled = 0; \
|
||
|
priority = 1.2; \
|
||
|
hotkey = "C"; \
|
||
|
}; \
|
||
|
};
|
||
|
|
||
|
class LandVehicle;
|
||
|
class Car: LandVehicle {
|
||
|
MACRO_LOADUNLOADCAPTIVE
|
||
|
};
|
||
|
class Tank: LandVehicle {
|
||
|
MACRO_LOADUNLOADCAPTIVE
|
||
|
};
|
||
|
|
||
|
class Air;
|
||
|
class Helicopter: Air {
|
||
|
MACRO_LOADUNLOADCAPTIVE
|
||
|
};
|
||
|
class Plane: Air {
|
||
|
MACRO_LOADUNLOADCAPTIVE
|
||
|
};
|
||
|
|
||
|
class Ship;
|
||
|
class Ship_F: Ship {
|
||
|
MACRO_LOADUNLOADCAPTIVE
|
||
|
};
|
||
|
|
||
|
class StaticWeapon: LandVehicle {
|
||
|
MACRO_LOADUNLOADCAPTIVE
|
||
|
};
|
||
|
|
||
|
class StaticMortar;
|
||
|
class Mortar_01_base_F: StaticMortar {
|
||
|
MACRO_LOADUNLOADCAPTIVE
|
||
|
};
|
||
|
|
||
|
#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \
|
||
|
name = #ITEM; \
|
||
|
count = COUNT; \
|
||
|
};
|
||
|
|
||
|
class Box_NATO_Support_F;
|
||
|
class AGM_Box_Misc: Box_NATO_Support_F {
|
||
|
class TransportItems {
|
||
|
MACRO_ADDITEM(AGM_CableTie,12)
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class CfgWeapons {
|
||
|
class AGM_ItemCore;
|
||
|
class InventoryItem_Base_F;
|
||
|
|
||
|
class AGM_CableTie: AGM_ItemCore {
|
||
|
displayName = "$STR_AGM_Captives_CableTie";
|
||
|
descriptionShort = "$STR_AGM_Captives_CableTieDescription";
|
||
|
model = "\AGM_Captives\agm_cabletie.p3d";
|
||
|
picture = "\AGM_Captives\UI\agm_cabletie_x_ca.paa";
|
||
|
scope = 2;
|
||
|
class ItemInfo: InventoryItem_Base_F {
|
||
|
mass = 1;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/*class CfgMovesBasic;
|
||
|
class CfgMovesMaleSdr: CfgMovesBasic {
|
||
|
class States {
|
||
|
class CutSceneAnimationBase;
|
||
|
class AmovPercMstpSnonWnonDnon_EaseIn: CutSceneAnimationBase {
|
||
|
head = "headDefault";
|
||
|
static = 1;
|
||
|
disableWeapons = 0;
|
||
|
forceAim = 0;
|
||
|
InterpolateTo[] = {"AmovPercMstpSnonWnonDnon_EaseOut",0.02,"Unconscious",0.1};
|
||
|
};
|
||
|
class AmovPercMstpSnonWnonDnon_Ease: AmovPercMstpSnonWnonDnon_EaseIn {
|
||
|
looped = 1;
|
||
|
InterpolateTo[] = {"Unconscious",0.1};
|
||
|
};
|
||
|
class AmovPercMstpSnonWnonDnon_EaseOut: AmovPercMstpSnonWnonDnon_EaseIn {
|
||
|
InterpolateTo[] = {"AmovPercMstpSnonWnonDnon_EaseIn",0.02,"Unconscious",0.1};
|
||
|
};
|
||
|
|
||
|
class AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon: CutSceneAnimationBase {
|
||
|
InterpolateTo[] = {"Unconscious",0.01,"AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon",0.1};
|
||
|
};
|
||
|
|
||
|
class AmovPercMstpSsurWnonDnon: AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon {
|
||
|
looped = 1;
|
||
|
InterpolateTo[] = {"Unconscious",0.01};
|
||
|
};
|
||
|
|
||
|
class AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon: AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon {
|
||
|
InterpolateTo[] = {"Unconscious",0.01,"AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon",0.1};
|
||
|
};
|
||
|
};
|
||
|
};*/
|
||
|
|
||
|
class CfgMovesBasic {
|
||
|
class Actions {
|
||
|
class CivilStandActions;
|
||
|
class AGM_CivilStandCaptiveActions: CivilStandActions {
|
||
|
turnL = "";
|
||
|
turnR = "";
|
||
|
stop = "AGM_AmovPercMstpScapWnonDnon";
|
||
|
StopRelaxed = "AGM_AmovPercMstpScapWnonDnon";
|
||
|
default = "AGM_AmovPercMstpScapWnonDnon";
|
||
|
getOver = "";
|
||
|
throwPrepare = "";
|
||
|
throwGrenade[] = {"","Gesture"};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
class CfgMovesMaleSdr: CfgMovesBasic {
|
||
|
class StandBase;
|
||
|
class States {
|
||
|
class AmovPercMstpSnonWnonDnon: StandBase {
|
||
|
ConnectTo[] += {"AGM_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon",0.1};
|
||
|
};
|
||
|
|
||
|
class CutSceneAnimationBase;
|
||
|
class AGM_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon: CutSceneAnimationBase {
|
||
|
actions = "AGM_CivilStandCaptiveActions";
|
||
|
file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\AmovPercMstpSnonWnonDnon_EaseIn";
|
||
|
speed = 1;
|
||
|
looped = 0;
|
||
|
interpolationRestart = 2;
|
||
|
ConnectTo[] = {"AGM_AmovPercMstpScapWnonDnon",0.1};
|
||
|
InterpolateTo[] = {"Unconscious",0.01,"AGM_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon",0.1};
|
||
|
};
|
||
|
|
||
|
class AGM_AmovPercMstpScapWnonDnon: AGM_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon {
|
||
|
file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\AmovPercMstpSnonWnonDnon_Ease";
|
||
|
speed = 0;
|
||
|
ConnectTo[] = {"AGM_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon",0.1};
|
||
|
InterpolateTo[] = {"Unconscious",0.01};
|
||
|
looped = 1;
|
||
|
};
|
||
|
|
||
|
class AGM_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon: AGM_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon {
|
||
|
actions = "CivilStandActions";
|
||
|
file = "\A3\anims_f\Data\Anim\Sdr\mov\erc\stp\non\non\amovpercmstpsnonwnondnon_easeout";
|
||
|
ConnectTo[] = {"AmovPercMstpSnonWnonDnon",0.1};
|
||
|
InterpolateTo[] = {"Unconscious",0.01,"AGM_AmovPercMstpSnonWnonDnon_AmovPercMstpScapWnonDnon",0.1};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
player playMove "AGM_AmovPercMstpScapWnonDnon";
|
||
|
player switchMove "AGM_AmovPercMstpScapWnonDnon_AmovPercMstpSnonWnonDnon";
|
||
|
*/
|