diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index 9209447630..b4d969667b 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -117,7 +117,7 @@ private _actions = [ // Dummy statement so it's not collapsed when there's no available actions true }, - {[ACE_player, _target, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting", "isNotOnLadder"]] call EFUNC(common,canInteractWith)}, + {[ACE_player, _target, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting", "isNotOnLadder", "isNotRefueling"]] call EFUNC(common,canInteractWith)}, {}, {}, "Spine3", diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index f3a04c6fc8..5d19434c79 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -21,7 +21,7 @@ if (GVAR(openedMenuType) == _menuType) exitWith {true}; // Conditions: canInteract (these don't apply to zeus) if ((isNull curatorCamera) && { - !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting", "isNotOnLadder"]] call EFUNC(common,canInteractWith)) + !([ACE_player, objNull, ["isNotInside","isNotDragging", "isNotCarrying", "isNotSwimming", "notOnMap", "isNotEscorting", "isNotSurrendering", "isNotSitting", "isNotOnLadder", "isNotRefueling"]] call EFUNC(common,canInteractWith)) }) exitWith {false}; while {dialog} do { diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 2829b488cc..59be0b34b0 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -248,7 +248,7 @@ class CfgVehicles { class ACE_TeamManagement { displayName = CSTRING(TeamManagement); condition = QUOTE(GVAR(EnableTeamManagement)); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = ""; showDisabled = 1; priority = 3.2; @@ -257,7 +257,7 @@ class CfgVehicles { class ACE_JoinTeamRed { displayName = CSTRING(JoinTeamRed); condition = QUOTE(true); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = QUOTE([ARR_2(_player,'RED')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.4; @@ -266,7 +266,7 @@ class CfgVehicles { class ACE_JoinTeamGreen { displayName = CSTRING(JoinTeamGreen); condition = QUOTE(true); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = QUOTE([ARR_2(_player,'GREEN')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.3; @@ -275,7 +275,7 @@ class CfgVehicles { class ACE_JoinTeamBlue { displayName = CSTRING(JoinTeamBlue); condition = QUOTE(true); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = QUOTE([ARR_2(_player,'BLUE')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.2; @@ -284,7 +284,7 @@ class CfgVehicles { class ACE_JoinTeamYellow { displayName = CSTRING(JoinTeamYellow); condition = QUOTE(true); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = QUOTE([ARR_2(_player,'YELLOW')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.1; @@ -293,7 +293,7 @@ class CfgVehicles { class ACE_LeaveTeam { displayName = CSTRING(LeaveTeam); condition = QUOTE(assignedTeam _player != 'MAIN'); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = QUOTE([ARR_2(_player,'MAIN')] call DFUNC(joinTeam)); showDisabled = 1; priority = 2.5; @@ -302,7 +302,7 @@ class CfgVehicles { class ACE_BecomeLeader { displayName = CSTRING(BecomeLeader); condition = QUOTE(_this call DFUNC(canBecomeLeader)); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = QUOTE(_this call DFUNC(doBecomeLeader)); showDisabled = 1; priority = 1.0; @@ -311,7 +311,7 @@ class CfgVehicles { class ACE_LeaveGroup { displayName = CSTRING(LeaveGroup); condition = QUOTE(count (units group _player) > 1); - exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder"}; + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; statement = QUOTE(_oldGroup = units group _player; _newGroup = createGroup side _player; [_player] joinSilent _newGroup; {_player reveal _x} forEach _oldGroup;); showDisabled = 1; priority = 1.2; diff --git a/addons/nightvision/XEH_postInitClient.sqf b/addons/nightvision/XEH_postInitClient.sqf index de0b629d76..bbc31d2b74 100644 --- a/addons/nightvision/XEH_postInitClient.sqf +++ b/addons/nightvision/XEH_postInitClient.sqf @@ -40,7 +40,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; // Add keybinds ["ACE3 Equipment", QGVAR(IncreaseNVGBrightness), localize LSTRING(IncreaseNVGBrightness), { // Conditions: canInteract - if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific if ((currentVisionMode ACE_player != 1)) exitWith {false}; @@ -51,7 +51,7 @@ GVAR(ppEffectMuzzleFlash) ppEffectCommit 0; ["ACE3 Equipment", QGVAR(DecreaseNVGBrightness), localize LSTRING(DecreaseNVGBrightness), { // Conditions: canInteract - if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific if ((currentVisionMode ACE_player != 1)) exitWith {false}; diff --git a/addons/refuel/Cfg3DEN.hpp b/addons/refuel/Cfg3DEN.hpp new file mode 100644 index 0000000000..3dbc91c2cf --- /dev/null +++ b/addons/refuel/Cfg3DEN.hpp @@ -0,0 +1,36 @@ +#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default}) +#define GET_1ST_ARRAY(config) (if (isArray (config)) then {getArray (config) select 0} else {[ARR_3(0,0,0)]}) + +#define DEFAULT_FUELCARGO GET_NUMBER(configFile >> 'CfgVehicles' >> typeOf _this >> QQGVAR(fuelCargo),REFUEL_DISABLED_FUEL) +#define DEFAULT_HOOKS GET_1ST_ARRAY(configFile >> 'CfgVehicles' >> typeOf _this >> QQGVAR(hooks)) + +class Cfg3DEN { + class Object { + class AttributeCategories { + class ace_attributes { + class Attributes { + class GVAR(fuelCargo) { + displayName = CSTRING(fuelCargo_edenName); + tooltip = CSTRING(fuelCargo_edenDesc); + property = QGVAR(fuelCargo); + control = "EditShort"; + expression = QUOTE(if (_value != DEFAULT_FUELCARGO) then {[ARR_2(_this,_value)] call DFUNC(makeSource)}); + defaultValue = QUOTE(DEFAULT_FUELCARGO); + validate = "number"; + condition = "(1-objectBrain)*(1-objectAgent)"; + typeName = "NUMBER"; + }; + class GVAR(hooks) { + displayName = CSTRING(hooks_edenName); + tooltip = CSTRING(hooks_edenDesc); + property = QGVAR(hooks); + control = "EditXYZ"; + expression = QUOTE(if !(_value isEqualTo DEFAULT_HOOKS) then {_this setVariable [ARR_3('%s',[_value],true)]}); + defaultValue = QUOTE(DEFAULT_HOOKS); + condition = "(1-objectBrain)*(1-objectAgent)"; + }; + }; + }; + }; + }; +}; diff --git a/addons/refuel/CfgEventHandlers.hpp b/addons/refuel/CfgEventHandlers.hpp index 20f482c8ca..c8d6e21596 100644 --- a/addons/refuel/CfgEventHandlers.hpp +++ b/addons/refuel/CfgEventHandlers.hpp @@ -19,15 +19,7 @@ class Extended_PostInit_EventHandlers { class Extended_Respawn_EventHandlers { class CAManBase { class ADDON { - respawn = QUOTE(call COMPILE_FILE(XEH_respawn)); - }; - }; -}; - -class Extended_Killed_EventHandlers { - class CAManBase { - class ADDON { - killed = QUOTE(_this call FUNC(handleKilled)); + respawn = QUOTE(call DFUNC(handleRespawn)); }; }; }; @@ -35,7 +27,7 @@ class Extended_Killed_EventHandlers { class Extended_InitPost_EventHandlers { class Land_CanisterFuel_F { class ADDON { - init = QUOTE(_this call DFUNC(makeJerryCan)); + init = QUOTE(call DFUNC(makeJerryCan)); }; }; }; diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index de361a6816..60ccd106cc 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -1,61 +1,3 @@ - -#define MACRO_REFUEL_ACTIONS \ - class ACE_Actions: ACE_Actions { \ - class ACE_MainActions: ACE_MainActions { \ - class GVAR(Refuel) { \ - displayName = CSTRING(Refuel); \ - distance = REFUEL_ACTION_DISTANCE; \ - condition = "alive _target"; \ - statement = ""; \ - showDisabled = 0; \ - priority = 2; \ - icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - class GVAR(TakeNozzle) { \ - displayName = CSTRING(TakeNozzle); \ - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeNozzle)); \ - statement = QUOTE([ARR_3(_player,_target,objNull)] call FUNC(TakeNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - }; \ - class GVAR(CheckFuelCounter) { \ - displayName = CSTRING(CheckFuelCounter); \ - condition = "true"; \ - statement = QUOTE([ARR_2(_player,_target)] call FUNC(readFuelCounter)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - }; \ - class GVAR(CheckFuel) { \ - displayName = CSTRING(CheckFuel); \ - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canCheckFuel)); \ - statement = QUOTE([ARR_2(_player,_target)] call FUNC(checkFuel)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - }; \ - class GVAR(Return) { \ - displayName = CSTRING(Return); \ - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canReturnNozzle)); \ - statement = QUOTE([ARR_2(_player,_target)] call DFUNC(returnNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - }; \ - }; \ - }; \ - }; - -#define MACRO_CONNECT_ACTIONS \ - class ACE_Actions { \ - class ACE_MainActions { \ - class GVAR(Connect) { \ - displayName = CSTRING(Connect); \ - distance = REFUEL_ACTION_DISTANCE; \ - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canConnectNozzle)); \ - statement = QUOTE([ARR_2(_player,_target)] call DFUNC(connectNozzle)); \ - icon = QPATHTOF(ui\icon_refuel_interact.paa); \ - exceptions[] = {"isNotInside"}; \ - }; \ - }; \ - }; - #define MACRO_NOZZLE_ACTIONS \ class ACE_Actions { \ class ACE_MainActions { \ @@ -64,35 +6,36 @@ position = "[0,-0.025,0.125]"; \ condition = "true"; \ statement = ""; \ + exceptions[] = {INTERACT_EXCEPTIONS}; \ showDisabled = 0; \ priority = 2; \ icon = QPATHTOF(ui\icon_refuel_interact.paa); \ class GVAR(PickUpNozzle) { \ displayName = CSTRING(TakeNozzle); \ condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeNozzle)); \ - statement = QUOTE([ARR_3(_player,objNull,_target)] call FUNC(takeNozzle)); \ - exceptions[] = {"isNotInside"}; \ + statement = QUOTE([ARR_2(_player,_target)] call FUNC(takeNozzle)); \ + exceptions[] = {"isNotInside", "isNotOnLadder"}; \ icon = QPATHTOF(ui\icon_refuel_interact.paa); \ }; \ class GVAR(TurnOn) { \ displayName = CSTRING(TurnOn); \ condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTurnOn)); \ statement = QUOTE([ARR_2(_player,_target)] call DFUNC(turnOn)); \ - exceptions[] = {"isNotInside"}; \ + exceptions[] = {INTERACT_EXCEPTIONS}; \ icon = QPATHTOF(ui\icon_refuel_interact.paa); \ }; \ class GVAR(TurnOff) { \ displayName = CSTRING(TurnOff); \ condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTurnOff)); \ statement = QUOTE([ARR_2(_player,_target)] call DFUNC(turnOff)); \ - exceptions[] = {"isNotInside"}; \ + exceptions[] = {INTERACT_EXCEPTIONS}; \ icon = QPATHTOF(ui\icon_refuel_interact.paa); \ }; \ class GVAR(Disconnect) { \ displayName = CSTRING(Disconnect); \ condition = QUOTE([ARR_2(_player,_target)] call FUNC(canDisconnect)); \ statement = QUOTE([ARR_2(_player,_target)] call DFUNC(disconnect)); \ - exceptions[] = {"isNotInside"}; \ + exceptions[] = {"isNotInside", "isNotOnLadder"}; \ icon = QPATHTOF(ui\icon_refuel_interact.paa); \ }; \ }; \ @@ -164,31 +107,27 @@ class CfgVehicles { class Land: AllVehicles {}; class LandVehicle: Land {}; class Car: LandVehicle { - MACRO_CONNECT_ACTIONS + GVAR(canReceive) = 1; }; class Tank: LandVehicle { - MACRO_CONNECT_ACTIONS + GVAR(canReceive) = 1; GVAR(flowRate) = 4; }; - class StaticWeapon: LandVehicle { - MACRO_CONNECT_ACTIONS - }; - class Air: AllVehicles { GVAR(flowRate) = 8; }; class Helicopter: Air { - MACRO_CONNECT_ACTIONS + GVAR(canReceive) = 1; }; class Helicopter_Base_F: Helicopter {}; class Helicopter_Base_H: Helicopter_Base_F {}; class Plane: Air { - MACRO_CONNECT_ACTIONS + GVAR(canReceive) = 1; GVAR(flowRate) = 16; }; @@ -197,7 +136,7 @@ class CfgVehicles { class Ship: AllVehicles {}; class Ship_F: Ship { - MACRO_CONNECT_ACTIONS + GVAR(canReceive) = 1; GVAR(flowRate) = 4; }; @@ -217,7 +156,7 @@ class CfgVehicles { }; class SDV_01_base_F: Boat_F { // SDV is using electrical propulsion - GVAR(fuelCapacity) = 0; + GVAR(canReceive) = 0; }; class Car_F: Car { @@ -301,7 +240,6 @@ class CfgVehicles { }; class Van_01_fuel_base_F: Van_01_base_F { - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0.38,-3.17,-.7},{-0.41,-3.17,-.7}}; GVAR(fuelCargo) = 2000; }; @@ -326,7 +264,6 @@ class CfgVehicles { class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { transportFuel = 0; //3k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{-1.08,-4.81,-.8}}; GVAR(fuelCargo) = 1000; }; @@ -412,7 +349,7 @@ class CfgVehicles { class UAV_01_base_F: Helicopter_Base_F { // Darter is electrical - GVAR(fuelCapacity) = 0; + GVAR(canReceive) = 0; }; class UAV: Plane {}; @@ -430,21 +367,18 @@ class CfgVehicles { // Vanilla fuel vehicles class Truck_02_fuel_base_F: Truck_02_base_F { transportFuel = 0; //3k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0.99,-3.47,-0.67},{-1.04,-3.47,-0.67}}; GVAR(fuelCargo) = 10000; }; class B_Truck_01_fuel_F: B_Truck_01_mover_F { transportFuel = 0; //3k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{.28,-4.99,-.3},{-.25,-4.99,-.3}}; GVAR(fuelCargo) = 10000; }; class O_Truck_03_fuel_F: Truck_03_base_F { transportFuel = 0; //3k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{1.3,-1.59,-.62},{-1.16,-1.59,-.62}}; GVAR(fuelCargo) = 10000; }; @@ -459,7 +393,6 @@ class CfgVehicles { class Pod_Heli_Transport_04_base_F: Slingload_base_F {}; class Land_Pod_Heli_Transport_04_fuel_F: Pod_Heli_Transport_04_base_F { transportFuel = 0; //3k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{-1.49,1.41,-.3}}; GVAR(fuelCargo) = 10000; }; @@ -467,14 +400,12 @@ class CfgVehicles { class Slingload_01_Base_F: Slingload_base_F {}; class B_Slingload_01_Fuel_F: Slingload_01_Base_F { transportFuel = 0; //3k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0.55,3.02,-0.5},{-0.52,3.02,-0.5}}; GVAR(fuelCargo) = 10000; }; class O_Heli_Transport_04_fuel_F: Heli_Transport_04_base_F { transportFuel = 0; //3k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{-1.52,1.14,-1.18}}; GVAR(fuelCargo) = 10000; }; @@ -496,7 +427,6 @@ class CfgVehicles { }; transportFuel = 0; //60k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{-3.35,2.45,0.17}}; GVAR(fuelCargo) = 60000; }; @@ -513,7 +443,6 @@ class CfgVehicles { }; class Land_FlexibleTank_01_F: FlexibleTank_base_F { transportFuel = 0; //300 - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0, 0, 0.5}}; GVAR(fuelCargo) = 300; }; @@ -521,27 +450,23 @@ class CfgVehicles { // Vanilla buildings class Land_Fuelstation_Feed_F: House_Small_F { transportFuel = 0; //50k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0,0,-0.5}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; class Land_fs_feed_F: House_Small_F { transportFuel = 0; //50k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{-0.4,0.022,-.23}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; class Land_FuelStation_01_pump_F: House_F { transportFuel = 0; //50k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0, 0.4, -0.5}, {0, -0.4, -0.5}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; class Land_FuelStation_01_pump_malevil_F: House_F { transportFuel = 0; //50k - MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{0, 0.4, -0.5}, {0, -0.4, -0.5}}; GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; diff --git a/addons/refuel/XEH_PREP.hpp b/addons/refuel/XEH_PREP.hpp index 282b008fca..e4c5298036 100644 --- a/addons/refuel/XEH_PREP.hpp +++ b/addons/refuel/XEH_PREP.hpp @@ -1,30 +1,26 @@ - PREP(canCheckFuel); -PREP(canConnectNozzle); PREP(canDisconnect); PREP(canReturnNozzle); PREP(canTakeNozzle); PREP(canTurnOff); PREP(canTurnOn); PREP(checkFuel); -PREP(connectNozzle); PREP(connectNozzleAction); PREP(disconnect); PREP(dropNozzle); PREP(getFuel); PREP(handleDisconnect); -PREP(handleKilled); -PREP(handlePlayerWeaponChanged); -PREP(handleUnconscious); +PREP(handleRespawn); +PREP(initSource); PREP(makeJerryCan); -PREP(maxDistanceDropNozzle); +PREP(makeSource); PREP(moduleRefuelSettings); +PREP(onMouseButtonDown); PREP(readFuelCounter); PREP(refuel); -PREP(reset); -PREP(resetLocal); PREP(returnNozzle); PREP(setFuel); +PREP(startNozzleInHandsPFH); PREP(takeNozzle); PREP(turnOff); PREP(turnOn); diff --git a/addons/refuel/XEH_postInit.sqf b/addons/refuel/XEH_postInit.sqf index 8f4a4fc09c..b2d55e1f7f 100644 --- a/addons/refuel/XEH_postInit.sqf +++ b/addons/refuel/XEH_postInit.sqf @@ -1,38 +1,110 @@ #include "script_component.hpp" -["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; -["weapon", FUNC(handlePlayerWeaponChanged)] call CBA_fnc_addPlayerEventHandler; - if (isServer) then { - addMissionEventHandler ["HandleDisconnect", {_this call FUNC(handleDisconnect)}]; + addMissionEventHandler ["HandleDisconnect", LINKFUNC(handleDisconnect)]; }; -[QGVAR(resetLocal), { - _this call FUNC(resetLocal); -}] call CBA_fnc_addEventHandler; +[QGVAR(initSource), LINKFUNC(initSource)] call CBA_fnc_addEventHandler; -// workaround for static fuel stations -if (hasInterface) then { +if (!hasInterface) exitWith {}; + +["isNotRefueling", {!((_this select 0) getVariable [QGVAR(isRefueling), false])}] call EFUNC(common,addCanInteractWithCondition); + +["MouseButtonDown", LINKFUNC(onMouseButtonDown)] call CBA_fnc_addDisplayHandler; + +GVAR(mainAction) = [ + QGVAR(Refuel), + localize LSTRING(Refuel), + QPATHTOF(ui\icon_refuel_interact.paa), + {}, { - if ( - configName _x isKindOf "Building" && - {isClass (_x >> "ACE_Actions" >> "ACE_MainActions" >> QGVAR(Refuel))} && - {getNumber (_x >> "scope") == 2} - ) then { - TRACE_1("Compiling menu",configName _x); - [configName _x] call EFUNC(interact_menu,compileMenu); + alive _target + && {[_player, _target, [INTERACT_EXCEPTIONS]] call EFUNC(common,canInteractWith)} + && {REFUEL_DISABLED_FUEL != [_target] call FUNC(getFuel)} + }, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE +] call EFUNC(interact_menu,createAction); + +GVAR(actions) = [ + [QGVAR(TakeNozzle), + localize LSTRING(TakeNozzle), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(TakeNozzle)}, + {[_player, _target] call FUNC(canTakeNozzle)}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction), + [QGVAR(CheckFuelCounter), + localize LSTRING(CheckFuelCounter), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(readFuelCounter)}, + {true}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction), + [QGVAR(CheckFuel), + localize LSTRING(CheckFuel), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(checkFuel)}, + {[_player, _target] call FUNC(canCheckFuel)}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction), + [QGVAR(Return), + localize LSTRING(Return), + QPATHTOF(ui\icon_refuel_interact.paa), + {[_player, _target] call FUNC(returnNozzle)}, + {[_player, _target] call FUNC(canReturnNozzle)}, + {}, [], [0,0,0], + REFUEL_ACTION_DISTANCE + ] call EFUNC(interact_menu,createAction) +]; + +// init menu for config refuel vehicles +private _sourceClasses = []; +{ + private _fuelCargo = getNumber (_x >> QGVAR(fuelCargo)); + if (_fuelCargo > 0 || {_fuelCargo == REFUEL_INFINITE_FUEL}) then { + private _sourceClass = configName _x; + if (isClass (_x >> "ACE_Actions" >> "ACE_MainActions" >> QGVAR(Refuel))) exitWith { + if (!isClass (inheritsFrom _x >> "ACE_Actions" >> "ACE_MainActions" >> QGVAR(Refuel))) then { + ACE_DEPRECATED(FORMAT_1(QUOTE(GVAR(Refuel) interaction menu in %1),_sourceClass),"3.13.0",QUOTE(GVAR(fuelCargo) config value)); + }; }; - } count ('true' configClasses (configFile >> "CfgVehicles")); -}; + // check if we can use actions with inheritance + if ( + !isText (_x >> "EventHandlers" >> "CBA_Extended_EventHandlers" >> "init") // addActionToClass relies on XEH init + || {configName _x isKindOf "Static"} // CBA_fnc_addClassEventHandler doesn't support "Static" class + ) then { + if (2 == getNumber (_x >> "scope")) then { + [_sourceClass, 0, ["ACE_MainActions"], GVAR(mainAction)] call EFUNC(interact_menu,addActionToClass); + { + [_sourceClass, 0, ["ACE_MainActions", QGVAR(Refuel)], _x] call EFUNC(interact_menu,addActionToClass); + } forEach GVAR(actions); + TRACE_1("add menu to static",_sourceClass); + }; + } else { + if (0 == {_sourceClass isKindOf _x} count _sourceClasses) then { + _sourceClasses pushBack _sourceClass; + [_sourceClass, 0, ["ACE_MainActions"], GVAR(mainAction), true] call EFUNC(interact_menu,addActionToClass); + { + [_sourceClass, 0, ["ACE_MainActions", QGVAR(Refuel)], _x, true] call EFUNC(interact_menu,addActionToClass); + } forEach GVAR(actions); + TRACE_1("add menu to dynamic",_sourceClass); + }; + }; + }; +} forEach ('true' configClasses (configFile >> "CfgVehicles")); #ifdef DRAW_HOOKS_POS addMissionEventHandler ["Draw3D", { - private _target = cursorObject; - private _cfgPos = getArray (configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(hooks)); - private _dynPos = _target getVariable [QGVAR(dev_hooks), []]; + private _source = cursorObject; + private _cfgPos = getArray (configFile >> "CfgVehicles" >> typeOf _source >> QGVAR(hooks)); + private _dynPos = _source getVariable [QGVAR(hooks), []]; { - drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,1,1,1], _target modelToWorldVisual _x, 1, 1, 0, format ["Hook %1", _forEachIndex]]; + drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,1,1,1], _source modelToWorldVisual _x, 1, 1, 0, format ["Hook %1", _forEachIndex]]; } forEach ([_dynPos, _cfgPos] select (_dynPos isEqualTo [])); }]; #endif diff --git a/addons/refuel/XEH_respawn.sqf b/addons/refuel/XEH_respawn.sqf deleted file mode 100644 index 085361e7dc..0000000000 --- a/addons/refuel/XEH_respawn.sqf +++ /dev/null @@ -1,9 +0,0 @@ -#include "script_component.hpp" - -params ["_unit"]; - -if !(local _unit) exitWith {}; - -[_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); -_unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; -_unit setVariable [QGVAR(isRefueling), false]; diff --git a/addons/refuel/config.cpp b/addons/refuel/config.cpp index 63538726ca..39765e323c 100644 --- a/addons/refuel/config.cpp +++ b/addons/refuel/config.cpp @@ -15,6 +15,7 @@ class CfgPatches { }; #include "ACE_Settings.hpp" +#include "Cfg3DEN.hpp" #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" diff --git a/addons/refuel/functions/fnc_canCheckFuel.sqf b/addons/refuel/functions/fnc_canCheckFuel.sqf index 57514e4b8f..6e86092652 100644 --- a/addons/refuel/functions/fnc_canCheckFuel.sqf +++ b/addons/refuel/functions/fnc_canCheckFuel.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Unit - * 1: Fuel Truck/Station + * 1: Fuel Source * * Return Value: * Can Check Fuel @@ -16,11 +16,11 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]]; !(isNull _unit || {!(_unit isKindOf "CAManBase")} || {!local _unit} || - {!alive _target} || - {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} || - {(_target call FUNC(getFuel) == REFUEL_INFINITE_FUEL)}) + {!alive _source} || + {([_unit, _source] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} || + {(_source call FUNC(getFuel) == REFUEL_INFINITE_FUEL)}) diff --git a/addons/refuel/functions/fnc_canConnectNozzle.sqf b/addons/refuel/functions/fnc_canConnectNozzle.sqf deleted file mode 100644 index 03cd79d3c6..0000000000 --- a/addons/refuel/functions/fnc_canConnectNozzle.sqf +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Author: GitHawk - * Check if a unit can connect a fuel nozzle - * - * Arguments: - * 0: Unit - * 1: Target - * - * Return Value: - * Can Connect Nozzle - * - * Example: - * [player, tank] call ace_refuel_fnc_canConnectNozzle - * - * Public: No - */ -#include "script_component.hpp" - -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; - -private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; -private _engine = false; - -if (_target isKindOf "AllVehicles") then { - _engine = isEngineOn _target; -}; - -!(isNull _nozzle || - {!alive _target} || - {_engine} || - {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} || - {!isNull (_target getVariable [QGVAR(nozzle), objNull])}) diff --git a/addons/refuel/functions/fnc_canReturnNozzle.sqf b/addons/refuel/functions/fnc_canReturnNozzle.sqf index 04849c5ca0..226576be0d 100644 --- a/addons/refuel/functions/fnc_canReturnNozzle.sqf +++ b/addons/refuel/functions/fnc_canReturnNozzle.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Unit - * 1: Fuel truck + * 1: Fuel Source * * Return Value: * Can Return Nozzle @@ -16,10 +16,10 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]]; private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; (!isNull _nozzle) && -{([_unit, _target] call EFUNC(interaction,getInteractionDistance)) < REFUEL_ACTION_DISTANCE} && -{_target == (_nozzle getVariable [QGVAR(source), objNull])} +{([_unit, _source] call EFUNC(interaction,getInteractionDistance)) < REFUEL_ACTION_DISTANCE} && +{_source == (_nozzle getVariable [QGVAR(source), objNull])} diff --git a/addons/refuel/functions/fnc_canTakeNozzle.sqf b/addons/refuel/functions/fnc_canTakeNozzle.sqf index d3852a668c..8847675058 100644 --- a/addons/refuel/functions/fnc_canTakeNozzle.sqf +++ b/addons/refuel/functions/fnc_canTakeNozzle.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Unit - * 1: Fuel Station or Nozzle + * 1: Fuel Source or Nozzle * * Return Value: * Can connect @@ -16,14 +16,14 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]], ["_object", objNull, [objNull]]]; if (isNull _unit || {!(_unit isKindOf "CAManBase")} || {!local _unit} || - {!alive _target} || + {!alive _object} || {!isNull (_unit getVariable [QGVAR(nozzle), objNull])} || - {typeOf _target == QGVAR(fuelNozzle) && {!isNull (attachedTo _target)}} || // Not carried by someone else - {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE}) exitWith {false}; + {typeOf _object == QGVAR(fuelNozzle) && {!isNull (attachedTo _object)}} || // Not carried by someone else + {([_unit, _object] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE}) exitWith {false}; -!(_target getVariable [QGVAR(isConnected), false]) && {!(_unit getVariable [QGVAR(isRefueling), false])} +!(_object getVariable [QGVAR(isConnected), false]) && {!(_unit getVariable [QGVAR(isRefueling), false])} diff --git a/addons/refuel/functions/fnc_checkFuel.sqf b/addons/refuel/functions/fnc_checkFuel.sqf index 081f344732..fdb4a525d2 100644 --- a/addons/refuel/functions/fnc_checkFuel.sqf +++ b/addons/refuel/functions/fnc_checkFuel.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Unit - * 1: Fuel Truck + * 1: Fuel Source * * Return Value: * None @@ -16,16 +16,16 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]]; -private _fuel = [_target] call FUNC(getFuel); +private _fuel = [_source] call FUNC(getFuel); [ TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION * 2), - [_unit, _target, _fuel], + [_unit, _source, _fuel], { params ["_args"]; - _args params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_fuel", 0, [0]]]; + _args params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]], ["_fuel", 0, [0]]]; if (_fuel > 0 ) then { [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RemainingFuel), _fuel], 2, _unit], _unit] call CBA_fnc_targetEvent; } else { @@ -36,5 +36,5 @@ private _fuel = [_target] call FUNC(getFuel); {true}, localize LSTRING(CheckFuelAction), {true}, - ["isnotinside"] + [INTERACT_EXCEPTIONS] ] call EFUNC(common,progressBar); diff --git a/addons/refuel/functions/fnc_connectNozzle.sqf b/addons/refuel/functions/fnc_connectNozzle.sqf deleted file mode 100644 index 807960977e..0000000000 --- a/addons/refuel/functions/fnc_connectNozzle.sqf +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Author: GitHawk et.al. - * Connect a fuel nozzle. - * With code from ace_attach - * - * Arguments: - * 0: Unit - * 1: Target - * - * Return Value: - * None - * - * Example: - * [player, tank] call ace_refuel_fnc_connectNozzle - * - * Public: No - */ -#include "script_component.hpp" - -#define PLACE_WAITING -1 -#define PLACE_CANCEL 0 -#define PLACE_APPROVE 1 - -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; - -private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; -if (isNull _nozzle) exitWith {}; - -GVAR(placeAction) = PLACE_WAITING; - -[{[localize LSTRING(Connect_Action), ""] call EFUNC(interaction,showMouseHint)}, []] call CBA_fnc_execNextFrame; -_unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {true}, {GVAR(placeAction) = PLACE_APPROVE;}] call EFUNC(common,AddActionEventHandler)]; - -private _actionID = _unit addAction [format ["%1", localize LSTRING(Cancel)], {GVAR(placeAction) = PLACE_CANCEL;}]; - -[{ - params ["_args","_pfID"]; - _args params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_actionID", -1, [0]]]; - - private _virtualPosASL = (eyePos _unit) vectorAdd (positionCameraToWorld [0,0,0.6]) vectorDiff (positionCameraToWorld [0,0,0]); - if (cameraView == "EXTERNAL") then { - _virtualPosASL = _virtualPosASL vectorAdd ((positionCameraToWorld [0.3,0,0]) vectorDiff (positionCameraToWorld [0,0,0])); - }; - private _lineInterection = lineIntersects [eyePos ace_player, _virtualPosASL, ace_player]; - - //Don't allow placing in a bad position: - if (_lineInterection && {GVAR(placeAction) == PLACE_APPROVE}) then {GVAR(placeAction) = PLACE_WAITING;}; - - if ((GVAR(placeAction) != PLACE_WAITING) || - {_unit != ace_player} || - {!([_unit, _target, []] call EFUNC(common,canInteractWith))}) then { - - [_pfID] call CBA_fnc_removePerFrameHandler; - [] call EFUNC(interaction,hideMouseHint); - [_unit, "DefaultAction", (_unit getVariable [QGVAR(placeActionEH), -1])] call EFUNC(common,removeActionEventHandler); - _unit removeAction _actionID; - - if (GVAR(placeAction) == PLACE_APPROVE) then { - [_unit, _target, _virtualPosASL, _nozzle] call FUNC(ConnectNozzleAction); - }; - }; // TODO add model like in attach/functions/fnc_attach -}, 0, [_unit, _target, _nozzle, _actionID] ] call cba_fnc_addPerFrameHandler; diff --git a/addons/refuel/functions/fnc_connectNozzleAction.sqf b/addons/refuel/functions/fnc_connectNozzleAction.sqf index 31ebe1bfdc..e52e7ae971 100644 --- a/addons/refuel/functions/fnc_connectNozzleAction.sqf +++ b/addons/refuel/functions/fnc_connectNozzleAction.sqf @@ -5,7 +5,7 @@ * * Arguments: * 0: Unit - * 1: Target + * 1: Vehicle * 2: Visual Position ASL * 3: Nozzle * @@ -20,14 +20,14 @@ #include "script_component.hpp" private ["_closeInDistance", "_endPosTestOffset"]; -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_startingPosASL", [0,0,0], [[]], 3], ["_nozzle", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]], ["_sink", objNull, [objNull]], ["_startingPosASL", [0,0,0], [[]], 3], ["_nozzle", objNull, [objNull]]]; private _bestPosASL = []; private _bestPosDistance = 1e99; private _viewPos = _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0,0,1])) vectorMultiply 3); -private _modelVector = _startingPosASL vectorFromTo (AGLtoASL (_target modelToWorld [0,0,0])); -private _modelVectorLow = _startingPosASL vectorFromTo (AGLtoASL (_target modelToWorld [0,0,-1])); +private _modelVector = _startingPosASL vectorFromTo (AGLtoASL (_sink modelToWorld [0,0,0])); +private _modelVectorLow = _startingPosASL vectorFromTo (AGLtoASL (_sink modelToWorld [0,0,-1])); { private _endPosASL = _x; @@ -35,7 +35,7 @@ private _modelVectorLow = _startingPosASL vectorFromTo (AGLtoASL (_target modelT private _intersections = lineIntersectsSurfaces [_startingPosASL, _endPosASL, _unit]; { _x params ["_intersectPosASL", "", "_intersectObject"]; - if (_intersectObject == _target) then { + if (_intersectObject == _sink) then { private _distance = _startingPosASL distance _intersectPosASL; if (_distance < _bestPosDistance) then { _bestPosDistance = _distance; @@ -51,8 +51,8 @@ private _modelVectorLow = _startingPosASL vectorFromTo (AGLtoASL (_target modelT _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0,-0.25,1])) vectorMultiply 3), _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [-0.25,-0.25,1])) vectorMultiply 3), _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0.25,-0.25,1])) vectorMultiply 3), - AGLtoASL (_target modelToWorld [0,0,0]), // Try old method of just using model center - AGLtoASL (_target modelToWorld [0,0,-0.5]) + AGLtoASL (_sink modelToWorld [0,0,0]), // Try old method of just using model center + AGLtoASL (_sink modelToWorld [0,0,-0.5]) ]; //Checks (too close to center or can't attach) @@ -64,28 +64,21 @@ if (_bestPosASL isEqualTo []) exitWith { //Move it out slightly, for visibility sake (better to look a little funny than be embedded//sunk in the hull and be useless) _bestPosASL = _bestPosASL vectorAdd ((_bestPosASL vectorFromTo _startingPosASL) vectorMultiply 0.05); -private _attachPosModel = _target worldToModel (ASLtoAGL _bestPosASL); +private _attachPosModel = _sink worldToModel (ASLtoAGL _bestPosASL); [ TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), - [_unit, _nozzle, _target, _attachPosModel], + [_unit, _nozzle, _sink, _attachPosModel], { params ["_args"]; - _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_target", objNull, [objNull]], ["_endPosTestOffset", [0,0,0], [[]], 3]]; + _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_sink", objNull, [objNull]], ["_endPosTestOffset", [0,0,0], [[]], 3]]; _unit setVariable [QGVAR(nozzle), nil, true]; _unit setVariable [QGVAR(isRefueling), false]; - [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); - REFUEL_UNHOLSTER_WEAPON - private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; - if (_actionID != -1) then { - _unit removeAction _actionID; - _unit setVariable [QGVAR(ReleaseActionID), nil]; - }; detach _nozzle; - _nozzle attachTo [_target, _endPosTestOffset]; + _nozzle attachTo [_sink, _endPosTestOffset]; _endPosTestOffset params ["_x", "_y"]; - private _bb = boundingBoxReal _target; + private _bb = boundingBoxReal _sink; _bb params ["_ll", "_rr"]; _ll set [2, 0]; _rr set [2, 0]; @@ -115,9 +108,9 @@ private _attachPosModel = _target worldToModel (ASLtoAGL _bestPosASL); }; }; [QEGVAR(common,setVectorDirAndUp), [_nozzle, _dirAndUp], _nozzle] call CBA_fnc_targetEvent; - _nozzle setVariable [QGVAR(sink), _target, true]; + _nozzle setVariable [QGVAR(sink), _sink, true]; _nozzle setVariable [QGVAR(isConnected), true, true]; - _target setVariable [QGVAR(nozzle), _nozzle, true]; + _sink setVariable [QGVAR(nozzle), _nozzle, true]; _source = _nozzle getVariable QGVAR(source); private _fuel = [_source] call FUNC(getFuel); @@ -127,10 +120,10 @@ private _attachPosModel = _target worldToModel (ASLtoAGL _bestPosASL); _source setVariable [QGVAR(fuelCounter), _fuel, true]; }; - [_unit, _target, _nozzle, _endPosTestOffset] call FUNC(refuel); + [_unit, _sink, _nozzle, _endPosTestOffset] call FUNC(refuel); }, "", localize LSTRING(ConnectAction), {true}, - ["isnotinside"] + [INTERACT_EXCEPTIONS] ] call EFUNC(common,progressBar); diff --git a/addons/refuel/functions/fnc_disconnect.sqf b/addons/refuel/functions/fnc_disconnect.sqf index 41fde6d365..94020b29e9 100644 --- a/addons/refuel/functions/fnc_disconnect.sqf +++ b/addons/refuel/functions/fnc_disconnect.sqf @@ -21,9 +21,9 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; private _sink = _nozzle getVariable [QGVAR(sink), objNull]; if (isNull _sink) exitWith {}; -_sink setVariable [QGVAR(nozzle), objNull, true]; -_nozzle setVariable [QGVAR(sink), objNull, true]; +_sink setVariable [QGVAR(nozzle), nil, true]; +_nozzle setVariable [QGVAR(sink), nil, true]; _nozzle setVariable [QGVAR(isConnected), false, true]; [objNull, _nozzle, true] call FUNC(dropNozzle); -[_unit, objNull, _nozzle] call FUNC(takeNozzle); +[_unit, _nozzle] call FUNC(takeNozzle); diff --git a/addons/refuel/functions/fnc_dropNozzle.sqf b/addons/refuel/functions/fnc_dropNozzle.sqf index 21b700a757..fac88d6591 100644 --- a/addons/refuel/functions/fnc_dropNozzle.sqf +++ b/addons/refuel/functions/fnc_dropNozzle.sqf @@ -41,5 +41,5 @@ _nozzle setPosASL _groundPosition; TRACE_1("finalPos",getPosATL _nozzle); if (isNull _unit) exitWith {}; -_unit setVariable [QGVAR(isRefueling), false, true]; +_unit setVariable [QGVAR(isRefueling), false]; _unit setVariable [QGVAR(nozzle), objNull, true]; diff --git a/addons/refuel/functions/fnc_getFuel.sqf b/addons/refuel/functions/fnc_getFuel.sqf index 863c017102..1ec128cb68 100644 --- a/addons/refuel/functions/fnc_getFuel.sqf +++ b/addons/refuel/functions/fnc_getFuel.sqf @@ -3,7 +3,7 @@ * Get the remaining fuel amount. * * Arguments: - * 0: Target + * 0: Fuel Source * * Return Value: * Fuel left (in liters) @@ -15,15 +15,15 @@ */ #include "script_component.hpp" -params [["_target", objNull, [objNull]]]; +params [["_source", objNull, [objNull]]]; -if (isNull _target) exitWith {0}; +if (isNull _source) exitWith {0}; -private _fuel = _target getVariable QGVAR(currentFuelCargo); +private _fuel = _source getVariable QGVAR(currentFuelCargo); if (isNil "_fuel") then { - _fuel = getNumber (configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(fuelCargo)); - _target setVariable [QGVAR(currentFuelCargo), _fuel, true]; + _fuel = getNumber (configFile >> "CfgVehicles" >> typeOf _source >> QGVAR(fuelCargo)); + _source setVariable [QGVAR(currentFuelCargo), _fuel, true]; }; _fuel diff --git a/addons/refuel/functions/fnc_handleDisconnect.sqf b/addons/refuel/functions/fnc_handleDisconnect.sqf index edc3393cb4..a7e46e23fe 100644 --- a/addons/refuel/functions/fnc_handleDisconnect.sqf +++ b/addons/refuel/functions/fnc_handleDisconnect.sqf @@ -1,6 +1,6 @@ /* * Author: GitHawk - * Cleans up refuel + * Cleans up refuel on client disconnect. * * Arguments: * 0: Player @@ -15,12 +15,13 @@ */ #include "script_component.hpp" -params [["_disconnectedPlayer", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]]]; +TRACE_1("disconnect",_unit); -if (isNull _disconnectedPlayer) exitWith {}; - -private _nozzle = _disconnectedPlayer getVariable [QGVAR(nozzle), objNull]; +if (isNull _unit) exitWith {}; +private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; if (isNull _nozzle) exitWith {}; -[_disconnectedPlayer, _nozzle] call FUNC(dropNozzle); +[_unit, _nozzle] call FUNC(dropNozzle); +[_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); diff --git a/addons/refuel/functions/fnc_handleKilled.sqf b/addons/refuel/functions/fnc_handleKilled.sqf deleted file mode 100644 index 045bf47028..0000000000 --- a/addons/refuel/functions/fnc_handleKilled.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Author: GitHawk, Jonpas - * Handles medical on set dead event. - * - * Arguments: - * 0: Unit - * - * Return Value: - * None - * - * Example: - * [player] call ace_refuel_fnc_handleKilled - * - * Public: No - */ -#include "script_component.hpp" - -params [["_unit", objNull, [objNull]]]; - -if (!local _unit) exitWith {}; - -_unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; -private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; -if !(isNull _nozzle) then { - [_unit, _nozzle] call FUNC(dropNozzle); -}; diff --git a/addons/refuel/functions/fnc_handlePlayerWeaponChanged.sqf b/addons/refuel/functions/fnc_handlePlayerWeaponChanged.sqf deleted file mode 100644 index 57897aef89..0000000000 --- a/addons/refuel/functions/fnc_handlePlayerWeaponChanged.sqf +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Author: Jonpas - * Drops nozzle or jerry can when selecting a weapon. - * - * Arguments: - * 0: Unit - * 1: Weapon (unused) - * - * Return Value: - * None - * - * Example: - * [_unit, "gun"] call ace_refuel_fnc_handlePlayerWeaponChanged; - * - * Public: No -*/ -#include "script_component.hpp" - -params ["_unit"]; - -// Drop nozzle/jerry can when selecting a non-primary weapon -if (_unit getVariable [QGVAR(isRefueling), false]) then { - private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; - if !(isNull _nozzle) then { - [_unit, _nozzle] call FUNC(dropNozzle); - _unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; - [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); - }; -}; diff --git a/addons/refuel/functions/fnc_handleRespawn.sqf b/addons/refuel/functions/fnc_handleRespawn.sqf new file mode 100644 index 0000000000..145cd16e60 --- /dev/null +++ b/addons/refuel/functions/fnc_handleRespawn.sqf @@ -0,0 +1,26 @@ +/* + * Author: Dystopian + * Clean variables on unit respawn. + * + * Arguments: + * 0: Unit + * + * Return Value: + * None + * + * Example: + * [player] call ace_refuel_fnc_handleRespawn + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit"]; +TRACE_1("respawn",_unit); + +if (isNull (_unit getVariable [QGVAR(nozzle), objNull])) exitWith {}; + +_unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; +_unit setVariable [QGVAR(isRefueling), false]; +_unit setVariable [QGVAR(nozzle), nil, true]; +_unit setVariable [QGVAR(hint), nil]; diff --git a/addons/refuel/functions/fnc_handleUnconscious.sqf b/addons/refuel/functions/fnc_handleUnconscious.sqf deleted file mode 100644 index bfcdcb3776..0000000000 --- a/addons/refuel/functions/fnc_handleUnconscious.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Author: GitHawk, Jonpas - * Handles medical on unconscious event. - * - * Arguments: - * 0: Unit - * 1: Is Unconscious - * - * Return Value: - * None - * - * Example: - * [player, true] call ace_refuel_fnc_handleUnconscious - * - * Public: No - */ -#include "script_component.hpp" - -params [["_unit", objNull, [objNull]], ["_isUnconscious", false, [false]]]; - -if (!local _unit || {!_isUnconscious}) exitWith {}; - -[_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); -private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; -if !(isNull _nozzle) then { - [_unit, _nozzle] call FUNC(dropNozzle); -}; diff --git a/addons/refuel/functions/fnc_initSource.sqf b/addons/refuel/functions/fnc_initSource.sqf new file mode 100644 index 0000000000..51daa5f03e --- /dev/null +++ b/addons/refuel/functions/fnc_initSource.sqf @@ -0,0 +1,26 @@ +/* + * Author: Dystopian + * Adds refuel menu to object. + * + * Arguments: + * 0: Source + * + * Return Value: + * None + * + * Example: + * [cursorObject] call ace_refuel_fnc_initSource + * + * Public: No + */ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +params ["_source"]; +TRACE_2("init",_source,typeOf _source); + +[_source, 0, ["ACE_MainActions"], GVAR(mainAction)] call EFUNC(interact_menu,addActionToObject); +{ + [_source, 0, ["ACE_MainActions", QGVAR(Refuel)], _x] call EFUNC(interact_menu,addActionToObject); +} forEach GVAR(actions); diff --git a/addons/refuel/functions/fnc_makeJerryCan.sqf b/addons/refuel/functions/fnc_makeJerryCan.sqf index f42808d40a..782a63eb6d 100644 --- a/addons/refuel/functions/fnc_makeJerryCan.sqf +++ b/addons/refuel/functions/fnc_makeJerryCan.sqf @@ -44,7 +44,7 @@ private _action = [QGVAR(Refuel), _action = [QGVAR(PickUpNozzle), localize LSTRING(TakeNozzle), QPATHTOF(ui\icon_refuel_interact.paa), - {[_player, objNull, _target] call FUNC(TakeNozzle)}, + {[_player, _target] call FUNC(TakeNozzle)}, {[_player, _target] call FUNC(canTakeNozzle)}, {}, [], diff --git a/addons/refuel/functions/fnc_makeSource.sqf b/addons/refuel/functions/fnc_makeSource.sqf new file mode 100644 index 0000000000..2ea940f2db --- /dev/null +++ b/addons/refuel/functions/fnc_makeSource.sqf @@ -0,0 +1,63 @@ +/* + * Author: Dystopian + * Makes an object into a refuel source. + * Run on server only. + * + * Arguments: + * 0: Fuel Source + * 1: Fuel amount (in liters) (default: 0) + * 2: Hooks positions (default: [[0,0,0]]) + * + * Return Value: + * None + * + * Example: + * [cursorObject, 100] call ace_refuel_fnc_makeSource + * + * Public: Yes + */ +#include "script_component.hpp" + +if (!isServer) exitWith {}; + +// Only run this after the settings are initialized +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(makeSource), _this]; +}; + +params [ + ["_source", objNull, [objNull]], + ["_fuelCargo", 0, [0]], + ["_hooks", nil, [[]]] +]; +TRACE_3("makeSource",_source,_fuelCargo,_hooks); + +private _fuelCargoConfig = getNumber (configFile >> "CfgVehicles" >> typeOf _source >> QGVAR(fuelCargo)); + +if ( + isNull _source + || {_fuelCargo < 0 && {!(_fuelCargo in [REFUEL_INFINITE_FUEL, REFUEL_DISABLED_FUEL])}} + || {_fuelCargo != 0 && {_fuelCargo == _fuelCargoConfig}} +) exitWith {}; + +[_source, _fuelCargo] call FUNC(setFuel); + +if (_fuelCargo == REFUEL_DISABLED_FUEL) exitWith {}; + +if ( + !isNil "_hooks" + && {_hooks isEqualTypeAll []} + && {0 == {!(_x isEqualTypeParams [0,0,0]) || {3 < count _x}} count _hooks} +) then { + _source setVariable [QGVAR(hooks), _hooks, true]; +}; + +// check if menu already exists +if (_fuelCargoConfig != 0 || {!isNil {_source getVariable QGVAR(initSource_jipID)}}) exitWith {}; + +private _jipID = [QGVAR(initSource), [_source]] call CBA_fnc_globalEventJIP; +_source setVariable [QGVAR(initSource_jipID), _jipID]; +_source addEventHandler ["Deleted", { + // delete event from JIP stack to prevent deleted vehicle init + cba_events_eventNamespaceJIP setVariable [(_this select 0) getVariable QGVAR(initSource_jipID), nil, true]; +}]; diff --git a/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf b/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf deleted file mode 100644 index 0f83f48fbb..0000000000 --- a/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Author: GitHawk, Jonpas - * Drops the nozzle at maximum hose distance. - * - * Arguments: - * 0: Unit - * 1: Fuel Truck - * 2: End Pos Offset - * 3: Nozzle (optional) - * - * Return Value: - * None - * - * Example: - * [player, fuelTruck, [0, 0, 0], nozzle] call ace_refuel_fnc_maxDistanceDropNozzle - * - * Public: No - */ -#include "script_component.hpp" - -params ["_unit", "_source", "_endPosOffset", "_nozzle"]; - -// Exit if jerry can (no maximum distance there as it's not connected to anything) -if (_nozzle getVariable [QGVAR(jerryCan), false]) exitWith {}; - -// Check distance periodically to drop it at maximum hose length -[{ - params ["_args", "_pfID"]; - _args params [ - ["_unit", player, [objNull]], - ["_source", objNull, [objNull]], - ["_endPosOffset", [0, 0, 0], [[]], 3], - ["_nozzle", (_args select 0) getVariable [QGVAR(nozzle), objNull], [objNull]] - ]; - - if (!(_unit getVariable [QGVAR(isRefueling), false])) exitWith { - TRACE_1("player not isRefueling",_unit); - [_pfID] call CBA_fnc_removePerFrameHandler; - }; - - private _hoseLength = _source getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; - if (isNull _source || {_unit distance (_source modelToWorld _endPosOffset) > (_hoseLength - 2)} || {!alive _source}) exitWith { - if !(isNull _nozzle) then { - [_unit, _nozzle] call FUNC(dropNozzle); - REFUEL_UNHOLSTER_WEAPON - - [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); - if (isNull _source || {!alive _source}) then { - private _rope = _nozzle getVariable [QGVAR(rope), objNull]; - if !(isNull _rope) then { - ropeDestroy _rope; - }; - private _helper = _nozzle getVariable [QGVAR(helper), objNull]; - if !(isNull _helper) then { - deleteVehicle _helper; - }; - deleteVehicle _nozzle; - } else { - [LSTRING(Hint_TooFar), 2, _unit] call EFUNC(common,displayTextStructured); - }; - }; - [_pfID] call CBA_fnc_removePerFrameHandler; - }; -}, 0, [_unit, _target, _endPosOffset, _nozzle]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/refuel/functions/fnc_onMouseButtonDown.sqf b/addons/refuel/functions/fnc_onMouseButtonDown.sqf new file mode 100644 index 0000000000..5c1951b280 --- /dev/null +++ b/addons/refuel/functions/fnc_onMouseButtonDown.sqf @@ -0,0 +1,53 @@ +/* + * Author: Dystopian + * Mouse button down event. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_refuel_fnc_onMouseButtonDown + * + * Public: No + */ +#include "script_component.hpp" + +private _button = _this select 1; +private _unit = ACE_player; +private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; + +if (_button > 1 || {isNull _nozzle}) exitWith {}; + +getCursorObjectParams params ["_cursorObject", "", "_distance"]; + +// RMB +if (_button == 1) exitWith { + if ( + !isNull _cursorObject + && {_distance < REFUEL_NOZZLE_ACTION_DISTANCE} + && {[_unit, _cursorObject] call FUNC(canReturnNozzle)} + ) then { + [_unit, _cursorObject] call FUNC(returnNozzle); + } else { + [_unit, _nozzle] call FUNC(dropNozzle); + }; +}; + +// LMB +// code from attach, don't know what it is +private _virtualPosASL = (eyePos _unit) vectorAdd (positionCameraToWorld [0,0,0.6]) vectorDiff (positionCameraToWorld [0,0,0]); +if (cameraView == "EXTERNAL") then { + _virtualPosASL = _virtualPosASL vectorAdd ((positionCameraToWorld [0.3,0,0]) vectorDiff (positionCameraToWorld [0,0,0])); +}; +if ( + !isNull _cursorObject + && {_distance < REFUEL_NOZZLE_ACTION_DISTANCE} + && {1 == getNumber (configFile >> "CfgVehicles" >> (typeOf _cursorObject) >> QGVAR(canReceive))} + && {isNull (_cursorObject getVariable [QGVAR(nozzle), objNull])} + && {!lineIntersects [eyePos _unit, _virtualPosASL, _unit]} +) then { + [_unit, _cursorObject, _virtualPosASL, _nozzle] call FUNC(connectNozzleAction); +}; diff --git a/addons/refuel/functions/fnc_readFuelCounter.sqf b/addons/refuel/functions/fnc_readFuelCounter.sqf index 98393e69ea..08f4010fde 100644 --- a/addons/refuel/functions/fnc_readFuelCounter.sqf +++ b/addons/refuel/functions/fnc_readFuelCounter.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Unit - * 1: Fuel Truck + * 1: Fuel Source * * Return Value: * None @@ -16,26 +16,26 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]]; [ TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), - [_unit, _target], + [_unit, _source], { params ["_args"]; - _args params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; + _args params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]]; - private _currentFuel = [_target] call FUNC(getFuel); + private _currentFuel = [_source] call FUNC(getFuel); if (_currentFuel == REFUEL_INFINITE_FUEL) then { - private _fuelCounter = 0.01 * round (100 * (_target getVariable [QGVAR(fuelCounter), 0])); + private _fuelCounter = 0.01 * round (100 * (_source getVariable [QGVAR(fuelCounter), 0])); [[LSTRING(Hint_FuelCounter), _fuelCounter], 1.5, _unit] call EFUNC(common,displayTextStructured); } else { - private _fuelCounter = 0.01 * round (100 * ((_target getVariable [QGVAR(fuelCounter), _currentFuel]) - _currentFuel)); + private _fuelCounter = 0.01 * round (100 * ((_source getVariable [QGVAR(fuelCounter), _currentFuel]) - _currentFuel)); [[LSTRING(Hint_FuelCounter), _fuelCounter], 1.5, _unit] call EFUNC(common,displayTextStructured); }; }, "", localize LSTRING(CheckFuelCounterAction), {true}, - ["isnotinside"] + [INTERACT_EXCEPTIONS] ] call EFUNC(common,progressBar); diff --git a/addons/refuel/functions/fnc_refuel.sqf b/addons/refuel/functions/fnc_refuel.sqf index 15fef426d2..848739994a 100644 --- a/addons/refuel/functions/fnc_refuel.sqf +++ b/addons/refuel/functions/fnc_refuel.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: Unit - * 1: Target + * 1: Vehicle * 2: Nozzle * 3: Connection Point * @@ -19,9 +19,9 @@ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_connectToPoint", [0,0,0], [[]], 3]]; +params [["_unit", objNull, [objNull]], ["_sink", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_connectToPoint", [0,0,0], [[]], 3]]; -private _config = configFile >> "CfgVehicles" >> typeOf _target; +private _config = configFile >> "CfgVehicles" >> typeOf _sink; private _rate = getNumber (_config >> QGVAR(flowRate)) * GVAR(rate); private _maxFuel = getNumber (_config >> QGVAR(fuelCapacity)); @@ -43,8 +43,8 @@ if (_maxFuel == 0) then { if (!alive _source || {!alive _sink}) exitWith { [objNull, _nozzle] call FUNC(dropNozzle); _nozzle setVariable [QGVAR(isConnected), false, true]; - _nozzle setVariable [QGVAR(sink), objNull, true]; - _sink setVariable [QGVAR(nozzle), objNull, true]; + _nozzle setVariable [QGVAR(sink), nil, true]; + _sink setVariable [QGVAR(nozzle), nil, true]; [_pfID] call CBA_fnc_removePerFrameHandler; }; private _hoseLength = _source getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; @@ -54,8 +54,8 @@ if (_maxFuel == 0) then { [objNull, _nozzle] call FUNC(dropNozzle); _nozzle setVariable [QGVAR(isConnected), false, true]; - _nozzle setVariable [QGVAR(sink), objNull, true]; - _sink setVariable [QGVAR(nozzle), objNull, true]; + _nozzle setVariable [QGVAR(sink), nil, true]; + _sink setVariable [QGVAR(nozzle), nil, true]; [_pfID] call CBA_fnc_removePerFrameHandler; }; @@ -108,11 +108,11 @@ if (_maxFuel == 0) then { }; }, 1, [ _nozzle getVariable QGVAR(source), - _target, + _sink, _unit, _nozzle, _rate, - fuel _target, + fuel _sink, _maxFuel, _nozzle getVariable [QGVAR(attachPos), [0,0,0]], _connectToPoint diff --git a/addons/refuel/functions/fnc_reset.sqf b/addons/refuel/functions/fnc_reset.sqf deleted file mode 100644 index 480beb6ca0..0000000000 --- a/addons/refuel/functions/fnc_reset.sqf +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Author: GitHawk - * Resets a fuel vehicle in case is got bugged - * - * Arguments: - * 0: Fuel truck - * - * Return Value: - * None - * - * Example: - * [truck] call ace_refuel_fnc_reset - * - * Public: Yes - */ -#include "script_component.hpp" - -params [["_target", objNull, [objNull]]]; - -[_target, "blockEngine", "ACE_Refuel", false] call EFUNC(common,statusEffect_set); -_target setVariable [QGVAR(isConnected), false, true]; - -private _nozzle = _target getVariable [QGVAR(ownedNozzle), nil]; -if !(isNil "_nozzle") then { - private _nozzleTarget = _nozzle getVariable [QGVAR(sink), nil]; - if !(isNil "_nozzleTarget") then { - _nozzleTarget setVariable [QGVAR(nozzle), nil, true]; - }; - - private _rope = _nozzle getVariable [QGVAR(rope), objNull]; - if !(isNull _rope) then { - ropeDestroy _rope; - }; - private _helper = _nozzle getVariable [QGVAR(helper), objNull]; - if !(isNull _helper) then { - deleteVehicle _helper; - }; - - { - [QGVAR(resetLocal), [_x, _nozzle], _x] call CBA_fnc_targetEvent; - } count allPlayers; - deleteVehicle _nozzle; -}; -_target setVariable [QGVAR(ownedNozzle), nil, true]; diff --git a/addons/refuel/functions/fnc_resetLocal.sqf b/addons/refuel/functions/fnc_resetLocal.sqf deleted file mode 100644 index 2e80ab98d7..0000000000 --- a/addons/refuel/functions/fnc_resetLocal.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Author: GitHawk - * Resets a player - * - * Arguments: - * 0: Fuel nozzle - * - * Return Value: - * None - * - * Example: - * [nozzle] call ace_refuel_fnc_resetLocal - * - * Public: No - */ -#include "script_component.hpp" - -params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; - -if (isNull _unit || - {isNull _nozzle} || - {!(_unit isKindOf "CAManBase")} || - {!local _unit}) exitWith {}; - -private _attachedNozzle = _unit getVariable [QGVAR(nozzle), nil]; -if (isNil "_attachedNozzle") exitWith {}; - -if (_nozzle != _attachedNozzle) exitWith {}; - -private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; -if (_actionID != -1) then { - _unit removeAction _actionID; - _unit setVariable [QGVAR(isRefueling), false, true]; - _unit setVariable [QGVAR(ReleaseActionID), nil]; - _unit setVariable [QGVAR(nozzle), nil, true]; -}; diff --git a/addons/refuel/functions/fnc_returnNozzle.sqf b/addons/refuel/functions/fnc_returnNozzle.sqf index 2b1ac64f8b..5da5935fd2 100644 --- a/addons/refuel/functions/fnc_returnNozzle.sqf +++ b/addons/refuel/functions/fnc_returnNozzle.sqf @@ -4,10 +4,10 @@ * * Arguments: * 0: Unit - * 1: Fuel Truck + * 1: Fuel Source * * Return Value: - * Returned Nozzle + * None * * Example: * [player, fuelTruck] call ace_refuel_fnc_returnNozzle @@ -16,32 +16,24 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; +params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]]; private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; -private _source = _nozzle getVariable QGVAR(source); -if (isNull _nozzle || {_source != _target}) exitWith {false}; +if (isNull _nozzle || {_source != _nozzle getVariable QGVAR(source)}) exitWith {}; [ TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), - [_unit, _nozzle, _target], + [_unit, _nozzle, _source], { params ["_args"]; - _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_target", objNull, [objNull]]]; + _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_source", objNull, [objNull]]]; _unit setVariable [QGVAR(nozzle), nil, true]; detach _nozzle; - [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); - REFUEL_UNHOLSTER_WEAPON _unit setVariable [QGVAR(isRefueling), false]; - private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; - if (_actionID != -1) then { - _unit removeAction _actionID; - _unit setVariable [QGVAR(ReleaseActionID), nil]; - }; - _target setVariable [QGVAR(isConnected), false, true]; - _target setVariable [QGVAR(ownedNozzle), nil, true]; + _source setVariable [QGVAR(isConnected), false, true]; + _source setVariable [QGVAR(ownedNozzle), nil, true]; private _rope = _nozzle getVariable [QGVAR(rope), objNull]; if !(isNull _rope) then { ropeDestroy _rope; @@ -52,12 +44,10 @@ if (isNull _nozzle || {_source != _target}) exitWith {false}; }; deleteVehicle _nozzle; - [_target, "blockEngine", "ACE_Refuel", false] call EFUNC(common,statusEffect_set); + [_source, "blockEngine", "ACE_Refuel", false] call EFUNC(common,statusEffect_set); }, "", localize LSTRING(ReturnAction), {true}, - ["isnotinside"] + [INTERACT_EXCEPTIONS] ] call EFUNC(common,progressBar); - -true diff --git a/addons/refuel/functions/fnc_setFuel.sqf b/addons/refuel/functions/fnc_setFuel.sqf index 6033660a48..0732160f4c 100644 --- a/addons/refuel/functions/fnc_setFuel.sqf +++ b/addons/refuel/functions/fnc_setFuel.sqf @@ -3,7 +3,7 @@ * Set the remaining fuel amount. * * Arguments: - * 0: Fuel Truck + * 0: Fuel Source * 1: Amount (in liters) * * Return Value: @@ -16,9 +16,9 @@ */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_fuel", nil, [0]]]; +params [["_source", objNull, [objNull]], ["_fuel", nil, [0]]]; -if (isNull _target || +if (isNull _source || {isNil "_fuel"}) exitWith {}; -_target setVariable [QGVAR(currentFuelCargo), _fuel, true]; +_source setVariable [QGVAR(currentFuelCargo), _fuel, true]; diff --git a/addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf b/addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf new file mode 100644 index 0000000000..1360a8df86 --- /dev/null +++ b/addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf @@ -0,0 +1,113 @@ +/* + * Author: Dystopian + * PFH while nozzle is in hands. + * + * Arguments: + * 0: Unit + * 1: Nozzle + * + * Return Value: + * None + * + * Example: + * [player, nozzle] call ace_refuel_fnc_startNozzleInHandsPFH + * + * Public: No + */ +#include "script_component.hpp" + +#define DROP_NOZZLE [_unit, _nozzle] call FUNC(dropNozzle); +#define UNHOLSTER_WEAPON \ + _unit selectWeapon (_unit getVariable QGVAR(selectedWeaponOnRefuel)); \ + _unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; +#define END_PFH \ + _unit setVariable [QGVAR(hint), nil]; \ + call EFUNC(interaction,hideMouseHint); \ + [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); \ + [_idPFH] call CBA_fnc_removePerFrameHandler; + +params ["_unit", "_nozzle"]; +TRACE_2("start",_unit,_nozzle); + +[{ + params ["_args", "_idPFH"]; + _args params ["_unit", "_nozzle"]; + + if !( + alive _unit + && {"" isEqualTo currentWeapon _unit} + && {[_unit, objNull, [INTERACT_EXCEPTIONS, "notOnMap"]] call EFUNC(common,canInteractWith)} + && {!("unconscious" isEqualTo toLower animationState _unit)} + && {!(_unit getVariable ["ACE_isUnconscious", false])} + ) exitWith { + TRACE_3("stop dead/weapon/interact/uncon",_unit,alive _unit,currentWeapon _unit); + DROP_NOZZLE + _unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; + END_PFH + }; + + // check drop from external events + if (isNull (_unit getVariable [QGVAR(nozzle), objNull])) exitWith { + TRACE_2("stop drop",_unit,_nozzle); + UNHOLSTER_WEAPON + END_PFH + }; + + private _source = _nozzle getVariable [QGVAR(source), objNull]; + if !(alive _source) exitWith { + TRACE_3("stop source",_unit,_nozzle,_source); + DROP_NOZZLE + private _rope = _nozzle getVariable [QGVAR(rope), objNull]; + if !(isNull _rope) then { + ropeDestroy _rope; + }; + private _helper = _nozzle getVariable [QGVAR(helper), objNull]; + if !(isNull _helper) then { + deleteVehicle _helper; + }; + deleteVehicle _nozzle; + UNHOLSTER_WEAPON + END_PFH + }; + + if !(_unit == vehicle _unit && {_unit isEqualTo ACE_player}) exitWith { + TRACE_1("stop vehicle/player",_unit,vehicle _unit); + DROP_NOZZLE + UNHOLSTER_WEAPON + END_PFH + }; + + // check hoseLength < distance + if ( + !(_nozzle getVariable [QGVAR(jerryCan), false]) + && {((_source getVariable [QGVAR(hoseLength), GVAR(hoseLength)]) - 2) < _unit distance (_source modelToWorld (_nozzle getVariable QGVAR(attachPos)))} + ) exitWith { + TRACE_1("stop length",_unit); + DROP_NOZZLE + UNHOLSTER_WEAPON + END_PFH + [LSTRING(Hint_TooFar), 2, _unit] call EFUNC(common,displayTextStructured); + }; + + private _hintLMB = ""; + private _hintRMB = localize ELSTRING(dragging,Drop); + + getCursorObjectParams params ["_cursorObject", "", "_distance"]; + if (!isNull _cursorObject && {_distance < REFUEL_NOZZLE_ACTION_DISTANCE}) then { + if ( + 1 == getNumber (configFile >> "CfgVehicles" >> (typeOf _cursorObject) >> QGVAR(canReceive)) + && {isNull (_cursorObject getVariable [QGVAR(nozzle), objNull])} + ) then { + _hintLMB = localize LSTRING(Connect); + }; + if ([_unit, _cursorObject] call FUNC(canReturnNozzle)) then { + _hintRMB = localize LSTRING(Return); + }; + }; + + private _hint = [_hintLMB, _hintRMB]; + if !(_hint isEqualTo (_unit getVariable [QGVAR(hint), []])) then { + _unit setVariable [QGVAR(hint), _hint]; + _hint call EFUNC(interaction,showMouseHint); + }; +}, 0, [_unit, _nozzle]] call cba_fnc_addPerFrameHandler; diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index 1b0baac80c..570a16b1ba 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -4,15 +4,13 @@ * * Arguments: * 0: Unit - * 1: Fuel Truck - * 2: Nozzle (optional) + * 1: Fuel Source or Nozzle * * Return Value: * None * * Example: - * [player, fuelTruck] call ace_refuel_fnc_takeNozzle - * [player, objNull, nozzle] call ace_refuel_fnc_takeNozzle + * [player, cursorObject] call ace_refuel_fnc_takeNozzle * * Public: No */ @@ -20,133 +18,81 @@ params [ ["_unit", objNull, [objNull]], - ["_target", objNull, [objNull]], - ["_nozzle", objNull, [objNull]] + ["_object", objNull, [objNull]] ]; -REFUEL_HOLSTER_WEAPON +[ + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), + [_unit, _object], + { + params ["_args"]; + _args params ["_unit", "_object"]; -private _endPosOffset = [0, 0, 0]; -if (isNull _nozzle) then { // func is called on fuel truck - _endPosOffset = getArray (configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(hooks)); - if (count _endPosOffset == 2) then { - if (_unit distance (_target modelToWorld (_endPosOffset select 0)) < _unit distance (_target modelToWorld (_endPosOffset select 1))) then { - _endPosOffset = _endPosOffset select 0; - } else { - _endPosOffset = _endPosOffset select 1; - }; - } else { - _endPosOffset = _endPosOffset select 0; - }; - [ - TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), - [_unit, _target, _endPosOffset], - { - params ["_args"]; - _args params [ - ["_unit", objNull, [objNull]], - ["_target", objNull, [objNull]], - ["_endPosOffset", [0, 0, 0], [[]], 3] - ]; - - private _newNozzle = QGVAR(fuelNozzle) createVehicle position _unit; - _newNozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; - _unit setVariable [QGVAR(nozzle), _newNozzle, true]; - - private _ropeTarget = _target; - if (!(_target isKindOf "AllVehicles")) then { - private _helper = QGVAR(helper) createVehicle [0,0,0]; - [QEGVAR(common,hideObjectGlobal), [_helper, true]] call CBA_fnc_serverEvent; - if ((getText (configFile >> "CfgVehicles" >> typeOf _target >> "simulation")) isEqualTo "thingX") then { - _helper attachTo [_target, [0,0,0]]; - } else { - _helper setPosWorld (getPosWorld _target); - _helper setDir (getDir _target); - _helper setVectorUp (vectorUp _target); - }; - _newNozzle setVariable [QGVAR(helper), _helper, true]; - _ropeTarget = _helper; - }; - private _hoseLength = _target getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; - private _rope = ropeCreate [_ropeTarget, _endPosOffset, _newNozzle, [0, -0.20, 0.12], _hoseLength]; - _newNozzle setVariable [QGVAR(rope), _rope, true]; - _newNozzle setVariable [QGVAR(attachPos), _endPosOffset, true]; - _newNozzle setVariable [QGVAR(source), _target, true]; - - [_target, "blockEngine", "ACE_Refuel", true] call EFUNC(common,statusEffect_set); - _target setVariable [QGVAR(isConnected), true, true]; - _target setVariable [QGVAR(ownedNozzle), _newNozzle, true]; - - [_unit, "forceWalk", "ACE_refuel", true] call EFUNC(common,statusEffect_set); - _unit setVariable [QGVAR(isRefueling), true]; - private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; - if (_actionID != -1) then { - _unit removeAction _actionID; - }; - _actionID = _unit addAction [ - format ["%1", localize ELSTRING(dragging,Drop)], - '_unit = _this select 0; _nozzle = _unit getVariable QGVAR(nozzle); [_unit, _nozzle] call FUNC(dropNozzle); [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); REFUEL_UNHOLSTER_WEAPON', - nil, - 20, - false, - true, - "", - '!isNull (_target getVariable [QGVAR(nozzle), objNull])' - ]; - _unit setVariable [QGVAR(ReleaseActionID), _actionID]; - - // Drop nozzle at maximum hose distance - [_unit, _target, _endPosOffset, _nozzle] call FUNC(maxDistanceDropNozzle); - }, - "", - localize LSTRING(TakeNozzleAction), - {true}, - ["isnotinside"] - ] call EFUNC(common,progressBar); -} else { // func is called on muzzle either connected or on ground - [ - TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), - [_unit, _nozzle], - { - params ["_args"]; - _args params [ - ["_unit", objNull, [objNull]], - ["_nozzle", objNull, [objNull]] - ]; + if !([_unit, _object] call FUNC(canTakeNozzle)) exitWith {}; + private _source = _object; + private _nozzle = _object; + if (typeOf _object isEqualTo QGVAR(fuelNozzle) || {_object getVariable [QGVAR(jerryCan), false]}) then { // func is called on muzzle either connected or on ground + _source = _nozzle getVariable QGVAR(source); if (_nozzle getVariable [QGVAR(jerryCan), false]) then { _nozzle attachTo [_unit, [0,1,0], "pelvis"]; } else { _nozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; }; - _unit setVariable [QGVAR(nozzle), _nozzle, true]; + } else { // func is called on fuel truck + _nozzle = QGVAR(fuelNozzle) createVehicle [0,0,0]; + _nozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; - [_unit, "forceWalk", "ACE_refuel", true] call EFUNC(common,statusEffect_set); - _unit setVariable [QGVAR(isRefueling), true]; - private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; - if (_actionID != -1) then { - _unit removeAction _actionID; + private _ropeTarget = _source; + if !(_source isKindOf "AllVehicles") then { + private _helper = QGVAR(helper) createVehicle [0,0,0]; + [QEGVAR(common,hideObjectGlobal), [_helper, true]] call CBA_fnc_serverEvent; + if ((getText (configFile >> "CfgVehicles" >> typeOf _source >> "simulation")) isEqualTo "thingX") then { + _helper attachTo [_source, [0,0,0]]; + } else { + _helper setPosWorld (getPosWorld _source); + _helper setDir (getDir _source); + _helper setVectorUp (vectorUp _source); + }; + _nozzle setVariable [QGVAR(helper), _helper, true]; + _ropeTarget = _helper; }; - _actionID = _unit addAction [ - format ["%1", localize ELSTRING(dragging,Drop)], - '_unit = _this select 0; _nozzle = _unit getVariable QGVAR(nozzle); [_unit, _nozzle] call FUNC(dropNozzle); [_unit, "forceWalk", "ACE_refuel", false] call EFUNC(common,statusEffect_set); REFUEL_UNHOLSTER_WEAPON', - nil, - 20, - false, - true, - "", - '!isNull (_target getVariable [QGVAR(nozzle), objNull])' - ]; - _unit setVariable [QGVAR(ReleaseActionID), _actionID]; + private _attachPos = _source getVariable [QGVAR(hooks), getArray (configFile >> "CfgVehicles" >> typeOf _source >> QGVAR(hooks))]; + if (_attachPos isEqualTo []) then { + _attachPos = [[0,0,0]]; + }; + if (count _attachPos == 1) then { + _attachPos = _attachPos select 0; + } else { + // select closest hook + private _hookDistances = _attachPos apply {_unit distance (_source modelToWorld _x)}; + _attachPos = _attachPos select (_hookDistances find selectMin _hookDistances); + }; + private _hoseLength = _source getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; + private _rope = ropeCreate [_ropeTarget, _attachPos, _nozzle, [0, -0.20, 0.12], _hoseLength]; + _nozzle setVariable [QGVAR(rope), _rope, true]; + _nozzle setVariable [QGVAR(attachPos), _attachPos, true]; + _nozzle setVariable [QGVAR(source), _source, true]; - // Drop nozzle at maximum hose distance - private _target = _nozzle getVariable QGVAR(source); - private _endPosOffset = _nozzle getVariable QGVAR(attachPos); - [_unit, _target, _endPosOffset, _nozzle] call FUNC(maxDistanceDropNozzle); - }, - "", - localize LSTRING(TakeNozzleAction), - {true}, - ["isnotinside"] - ] call EFUNC(common,progressBar); -}; + [_source, "blockEngine", "ACE_Refuel", true] call EFUNC(common,statusEffect_set); + _source setVariable [QGVAR(isConnected), true, true]; + _source setVariable [QGVAR(ownedNozzle), _nozzle, true]; + }; + + _unit setVariable [QGVAR(nozzle), _nozzle, true]; + _unit setVariable [QGVAR(isRefueling), true]; + + // holster weapon + _unit setVariable [QGVAR(selectedWeaponOnRefuel), currentWeapon _unit]; + _unit call EFUNC(common,fixLoweredRifleAnimation); + _unit action ["SwitchWeapon", _unit, _unit, 299]; + + [_unit, "forceWalk", "ACE_refuel", true] call EFUNC(common,statusEffect_set); + + [_unit, _nozzle] call FUNC(startNozzleInHandsPFH); + }, + {}, + localize LSTRING(TakeNozzleAction), + {true}, + ["isNotInside", "isNotOnLadder"] +] call EFUNC(common,progressBar); diff --git a/addons/refuel/functions/fnc_turnOff.sqf b/addons/refuel/functions/fnc_turnOff.sqf index 2c2b8de158..d4733a9cd8 100644 --- a/addons/refuel/functions/fnc_turnOff.sqf +++ b/addons/refuel/functions/fnc_turnOff.sqf @@ -31,5 +31,5 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; "", localize LSTRING(TurnOffAction), {true}, - ["isnotinside"] + [INTERACT_EXCEPTIONS] ] call EFUNC(common,progressBar); diff --git a/addons/refuel/functions/fnc_turnOn.sqf b/addons/refuel/functions/fnc_turnOn.sqf index cf8656f558..cf70a28d3b 100644 --- a/addons/refuel/functions/fnc_turnOn.sqf +++ b/addons/refuel/functions/fnc_turnOn.sqf @@ -31,5 +31,5 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; "", localize LSTRING(TurnOnAction), {true}, - ["isnotinside"] + [INTERACT_EXCEPTIONS] ] call EFUNC(common,progressBar); diff --git a/addons/refuel/script_component.hpp b/addons/refuel/script_component.hpp index a4d6f6df31..e46be9b72b 100644 --- a/addons/refuel/script_component.hpp +++ b/addons/refuel/script_component.hpp @@ -19,21 +19,15 @@ #include "\z\ace\addons\main\script_macros.hpp" #define REFUEL_INFINITE_FUEL -10 +#define REFUEL_DISABLED_FUEL -1 #define REFUEL_ACTION_DISTANCE 7 +#define REFUEL_NOZZLE_ACTION_DISTANCE 2 #define REFUEL_PROGRESS_DURATION 2 -#define REFUEL_HOLSTER_WEAPON \ - _unit setVariable [QGVAR(selectedWeaponOnRefuel), currentWeapon _unit]; \ - _unit call EFUNC(common,fixLoweredRifleAnimation); \ - _unit action ["SwitchWeapon", _unit, _unit, 299]; - -#define REFUEL_UNHOLSTER_WEAPON \ - _weaponSelect = _unit getVariable QGVAR(selectedWeaponOnRefuel); \ - _unit selectWeapon _weaponSelect; \ - _unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; - #ifdef FAST_PROGRESSBARS #define TIME_PROGRESSBAR(X) ((X) * 0.075) #else #define TIME_PROGRESSBAR(X) (X) #endif + +#define INTERACT_EXCEPTIONS "isNotInside", "isNotOnLadder", "isNotRefueling" diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index 53ead6b4bc..115d710836 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -476,5 +476,22 @@ 加油軟管長度 Długość węża paliwowego + + Fuel Cargo Volume + Объем топлива для заправки + + + + The fuel volume available for refueling (-1 disable, -10 if infinite) + Объем топлива, доступный для заправки других машин (-1 отключить, -10 если неограничен) + + + Refuel Hose attach coordinates + Координаты крепления шланга + + + Model coordinates used to attach refuel hose + Координаты модели, куда крепится заправочный шланг + diff --git a/docs/wiki/feature/refuel.md b/docs/wiki/feature/refuel.md index b069d9dba2..936b82bd23 100644 --- a/docs/wiki/feature/refuel.md +++ b/docs/wiki/feature/refuel.md @@ -62,9 +62,6 @@ While refueling, you can't move the fuel truck. Return the nozzle. ### How do I replenish the fuel supply on a fuel truck? Please check the framework description for more details. -### Something broke, I can't use the fuel truck / nozzle any longer. What to do? -You can reset the fuel truck and its nozzle by calling `ace_refuel_fnc_reset` with its first parameter being the fuel truck object. - ### How do I increase the length of the hose? There is a global setting that will effect all vehicles and static pumps. To only effect a specific vehicle put the following in it's init box: ```cpp diff --git a/docs/wiki/framework/refuel-framework.md b/docs/wiki/framework/refuel-framework.md index 4ffa5fb9b6..21b006bf20 100644 --- a/docs/wiki/framework/refuel-framework.md +++ b/docs/wiki/framework/refuel-framework.md @@ -77,26 +77,7 @@ The jerry can will have the default 20 liters volume. The jerry can will now have a volume of 200 liters. -### 2.3 Reset a broken fuel truck - -`ace_refuel_fnc_reset` - - | Arguments | Type | Optional (default value) ----| --------- | ---- | ------------------------ -0 | Fuel Truck | Object | Required -**R** | None | None | Return value - -#### 2.3.1 Example - -`[truck] call ace_refuel_fnc_reset;` - - | Arguments | Explanation ----| --------- | ----------- -0 | `truck` | My object - -This function will try to reset the fuel truck to a pristine state. - -### 2.4 Setting the fuel supply +### 2.3 Setting the fuel supply `ace_refuel_fnc_setFuel` @@ -106,7 +87,7 @@ This function will try to reset the fuel truck to a pristine state. 1 | Amount (in liters) | Number | Required **R** | None | None | Return value -#### 2.4.1 Example +#### 2.3.1 Example `[fuelTruck, 428] call ace_refuel_fnc_setFuel;` diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index aa3b001640..028844ff8d 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -1,53 +1,3 @@ -#define MACRO_REFUEL_ACTIONS \ - class ACE_Actions: ACE_Actions { \ - class ACE_MainActions: ACE_MainActions { \ - class EGVAR(refuel,Refuel) { \ - displayName = ECSTRING(refuel,Refuel); \ - distance = 7; \ - condition = "alive _target"; \ - statement = ""; \ - showDisabled = 0; \ - priority = 2; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - class EGVAR(refuel,TakeNozzle) { \ - displayName = ECSTRING(refuel,TakeNozzle); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canTakeNozzle)); \ - statement = QUOTE([ARR_3(_player,_target,objNull)] call EFUNC(refuel,TakeNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,CheckFuelCounter) { \ - displayName = ECSTRING(refuel,CheckFuelCounter); \ - condition = "true"; \ - statement = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,readFuelCounter)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,CheckFuel) { \ - displayName = ECSTRING(refuel,CheckFuel); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canCheckFuel)); \ - statement = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,checkFuel)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,Connect) { \ - displayName = ECSTRING(refuel,Connect); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canConnectNozzle)); \ - statement = QUOTE([ARR_2(_player,_target)] call DEFUNC(refuel,connectNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,Return) { \ - displayName = ECSTRING(refuel,Return); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canReturnNozzle)); \ - statement = QUOTE([ARR_2(_player,_target)] call DEFUNC(refuel,returnNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - }; \ - }; \ - }; - class CfgVehicles { class LandVehicle; class Tank: LandVehicle { @@ -371,7 +321,6 @@ class CfgVehicles { class RHS_Ural_Support_MSV_Base_01: RHS_Ural_MSV_Base {}; class RHS_Ural_Fuel_MSV_01: RHS_Ural_Support_MSV_Base_01 { transportFuel = 0; - MACRO_REFUEL_ACTIONS EGVAR(refuel,hooks)[] = {{-0.05,-3.6,-0.45}}; EGVAR(refuel,fuelCargo) = 10000; }; diff --git a/optionals/compat_rhs_usf3/CfgVehicles.hpp b/optionals/compat_rhs_usf3/CfgVehicles.hpp index d8b7fe4bea..b6751dd5c7 100644 --- a/optionals/compat_rhs_usf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_usf3/CfgVehicles.hpp @@ -11,56 +11,6 @@ }; \ } -#define MACRO_REFUEL_ACTIONS \ - class ACE_Actions: ACE_Actions { \ - class ACE_MainActions: ACE_MainActions { \ - class EGVAR(refuel,Refuel) { \ - displayName = ECSTRING(refuel,Refuel); \ - distance = 7; \ - condition = "alive _target"; \ - statement = ""; \ - showDisabled = 0; \ - priority = 2; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - class EGVAR(refuel,TakeNozzle) { \ - displayName = ECSTRING(refuel,TakeNozzle); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canTakeNozzle)); \ - statement = QUOTE([ARR_3(_player,_target,objNull)] call EFUNC(refuel,TakeNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,CheckFuelCounter) { \ - displayName = ECSTRING(refuel,CheckFuelCounter); \ - condition = "true"; \ - statement = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,readFuelCounter)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,CheckFuel) { \ - displayName = ECSTRING(refuel,CheckFuel); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canCheckFuel)); \ - statement = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,checkFuel)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,Connect) { \ - displayName = ECSTRING(refuel,Connect); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canConnectNozzle)); \ - statement = QUOTE([ARR_2(_player,_target)] call DEFUNC(refuel,connectNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - class EGVAR(refuel,Return) { \ - displayName = ECSTRING(refuel,Return); \ - condition = QUOTE([ARR_2(_player,_target)] call EFUNC(refuel,canReturnNozzle)); \ - statement = QUOTE([ARR_2(_player,_target)] call DEFUNC(refuel,returnNozzle)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(refuel,ui\icon_refuel_interact.paa); \ - }; \ - }; \ - }; \ - }; - class CfgVehicles { class LandVehicle; class Car: LandVehicle { @@ -310,14 +260,12 @@ class CfgVehicles { class rhsusf_M978A4_usarmy_wd: rhsusf_M977A4_usarmy_wd { transportFuel = 0; - MACRO_REFUEL_ACTIONS EGVAR(refuel,hooks)[] = {{-0.44,-4.87,0}, {0.5,-4.87,0}}; EGVAR(refuel,fuelCargo) = 10000; }; class rhsusf_M978A4_BKIT_usarmy_wd: rhsusf_M977A4_usarmy_wd { transportFuel = 0; - MACRO_REFUEL_ACTIONS EGVAR(refuel,hooks)[] = {{-0.44,-4.87,0}, {0.5,-4.87,0}}; EGVAR(refuel,fuelCargo) = 10000; };