mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Add fast mouse actions to refuel, add refuel eden attributes (#5418)
* Add fast mouse actions to refuel * nobody seen that * Add interaction condition and refuel on ladder * Add car hit, fix change weapon on uncon * Replace objNull with nil in setVar, unify var names * Delete *ConnectNozzle functions * Delete reset* functions * Add public function and eden attributes * Remove static actions from RHS compat * Remove statusEffect_set on respawn * Fix dual menu, add deprecating message * Optimize fnc_takeNozzle * Cleanup
This commit is contained in:
parent
635b667a74
commit
559a498e6d
@ -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",
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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};
|
||||
|
||||
|
36
addons/refuel/Cfg3DEN.hpp
Normal file
36
addons/refuel/Cfg3DEN.hpp
Normal file
@ -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)";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -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));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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];
|
@ -15,6 +15,7 @@ class CfgPatches {
|
||||
};
|
||||
|
||||
#include "ACE_Settings.hpp"
|
||||
#include "Cfg3DEN.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel Truck/Station <OBJECT>
|
||||
* 1: Fuel Source <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can Check Fuel <BOOL>
|
||||
@ -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)})
|
||||
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Author: GitHawk
|
||||
* Check if a unit can connect a fuel nozzle
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Target <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can Connect Nozzle <BOOL>
|
||||
*
|
||||
* 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])})
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel truck <OBJECT>
|
||||
* 1: Fuel Source <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can Return Nozzle <BOOL>
|
||||
@ -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])}
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel Station or Nozzle <OBJECT>
|
||||
* 1: Fuel Source or Nozzle <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can connect <BOOL>
|
||||
@ -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])}
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel Truck <OBJECT>
|
||||
* 1: Fuel Source <OBJECT>
|
||||
*
|
||||
* 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);
|
||||
|
@ -1,62 +0,0 @@
|
||||
/*
|
||||
* Author: GitHawk et.al.
|
||||
* Connect a fuel nozzle.
|
||||
* With code from ace_attach
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Target <OBJECT>
|
||||
*
|
||||
* 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 ["<t color='#FF0000'>%1</t>", 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;
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Target <OBJECT>
|
||||
* 1: Vehicle <OBJECT>
|
||||
* 2: Visual Position ASL <ARRAY>
|
||||
* 3: Nozzle <OBJECT>
|
||||
*
|
||||
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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];
|
||||
|
@ -3,7 +3,7 @@
|
||||
* Get the remaining fuel amount.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target <OBJECT>
|
||||
* 0: Fuel Source <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Fuel left (in liters) <NUMBER>
|
||||
@ -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
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Author: GitHawk
|
||||
* Cleans up refuel
|
||||
* Cleans up refuel on client disconnect.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Player <OBJECT>
|
||||
@ -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);
|
||||
|
@ -1,26 +0,0 @@
|
||||
/*
|
||||
* Author: GitHawk, Jonpas
|
||||
* Handles medical on set dead event.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
*
|
||||
* 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);
|
||||
};
|
@ -1,29 +0,0 @@
|
||||
/*
|
||||
* Author: Jonpas
|
||||
* Drops nozzle or jerry can when selecting a weapon.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Weapon <STRING> (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);
|
||||
};
|
||||
};
|
26
addons/refuel/functions/fnc_handleRespawn.sqf
Normal file
26
addons/refuel/functions/fnc_handleRespawn.sqf
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Author: Dystopian
|
||||
* Clean variables on unit respawn.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
*
|
||||
* 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];
|
@ -1,27 +0,0 @@
|
||||
/*
|
||||
* Author: GitHawk, Jonpas
|
||||
* Handles medical on unconscious event.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Is Unconscious <BOOL>
|
||||
*
|
||||
* 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);
|
||||
};
|
26
addons/refuel/functions/fnc_initSource.sqf
Normal file
26
addons/refuel/functions/fnc_initSource.sqf
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Author: Dystopian
|
||||
* Adds refuel menu to object.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Source <OBJECT>
|
||||
*
|
||||
* 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);
|
@ -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)},
|
||||
{},
|
||||
[],
|
||||
|
63
addons/refuel/functions/fnc_makeSource.sqf
Normal file
63
addons/refuel/functions/fnc_makeSource.sqf
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Author: Dystopian
|
||||
* Makes an object into a refuel source.
|
||||
* Run on server only.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Fuel Source <OBJECT>
|
||||
* 1: Fuel amount (in liters) <NUMBER> (default: 0)
|
||||
* 2: Hooks positions <ARRAY> (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];
|
||||
}];
|
@ -1,64 +0,0 @@
|
||||
/*
|
||||
* Author: GitHawk, Jonpas
|
||||
* Drops the nozzle at maximum hose distance.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel Truck <OBJECT>
|
||||
* 2: End Pos Offset <ARRAY>
|
||||
* 3: Nozzle <OBJECT> (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;
|
53
addons/refuel/functions/fnc_onMouseButtonDown.sqf
Normal file
53
addons/refuel/functions/fnc_onMouseButtonDown.sqf
Normal file
@ -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);
|
||||
};
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel Truck <OBJECT>
|
||||
* 1: Fuel Source <OBJECT>
|
||||
*
|
||||
* 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);
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Target <OBJECT>
|
||||
* 1: Vehicle <OBJECT>
|
||||
* 2: Nozzle <OBJECT>
|
||||
* 3: Connection Point <ARRAY>
|
||||
*
|
||||
@ -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
|
||||
|
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Author: GitHawk
|
||||
* Resets a fuel vehicle in case is got bugged
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Fuel truck <OBJECT>
|
||||
*
|
||||
* 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];
|
@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Author: GitHawk
|
||||
* Resets a player
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Fuel nozzle <OBJECT>
|
||||
*
|
||||
* 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];
|
||||
};
|
@ -4,10 +4,10 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel Truck <OBJECT>
|
||||
* 1: Fuel Source <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Returned Nozzle <BOOL>
|
||||
* 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
|
||||
|
@ -3,7 +3,7 @@
|
||||
* Set the remaining fuel amount.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Fuel Truck <OBJECT>
|
||||
* 0: Fuel Source <OBJECT>
|
||||
* 1: Amount (in liters)<NUMBER>
|
||||
*
|
||||
* 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];
|
||||
|
113
addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf
Normal file
113
addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf
Normal file
@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Author: Dystopian
|
||||
* PFH while nozzle is in hands.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Nozzle <OBJECT>
|
||||
*
|
||||
* 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;
|
@ -4,15 +4,13 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Fuel Truck <OBJECT>
|
||||
* 2: Nozzle <OBJECT> (optional)
|
||||
* 1: Fuel Source or Nozzle <OBJECT>
|
||||
*
|
||||
* 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 ["<t color='#FF0000'>%1</t>", 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 ["<t color='#FF0000'>%1</t>", 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);
|
||||
|
@ -31,5 +31,5 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]];
|
||||
"",
|
||||
localize LSTRING(TurnOffAction),
|
||||
{true},
|
||||
["isnotinside"]
|
||||
[INTERACT_EXCEPTIONS]
|
||||
] call EFUNC(common,progressBar);
|
||||
|
@ -31,5 +31,5 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]];
|
||||
"",
|
||||
localize LSTRING(TurnOnAction),
|
||||
{true},
|
||||
["isnotinside"]
|
||||
[INTERACT_EXCEPTIONS]
|
||||
] call EFUNC(common,progressBar);
|
||||
|
@ -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"
|
||||
|
@ -476,5 +476,22 @@
|
||||
<Chinese>加油軟管長度</Chinese>
|
||||
<Polish>Długość węża paliwowego</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Refuel_fuelCargo_edenName">
|
||||
<English>Fuel Cargo Volume</English>
|
||||
<Russian>Объем топлива для заправки</Russian>
|
||||
</Key>
|
||||
<!-- REFUEL_INFINITE_FUEL, REFUEL_DISABLED_FUEL are used here -->
|
||||
<Key ID="STR_ACE_Refuel_fuelCargo_edenDesc">
|
||||
<English>The fuel volume available for refueling (-1 disable, -10 if infinite)</English>
|
||||
<Russian>Объем топлива, доступный для заправки других машин (-1 отключить, -10 если неограничен)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Refuel_hooks_edenName">
|
||||
<English>Refuel Hose attach coordinates</English>
|
||||
<Russian>Координаты крепления шланга</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Refuel_hooks_edenDesc">
|
||||
<English>Model coordinates used to attach refuel hose</English>
|
||||
<Russian>Координаты модели, куда крепится заправочный шланг</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -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
|
||||
|
@ -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;`
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user