Merge branch 'master' into pr/8215

This commit is contained in:
PabstMirror 2023-02-24 13:50:35 -06:00
commit 28c166d650
71 changed files with 1292 additions and 351 deletions

2
.gitignore vendored
View File

@ -7,7 +7,7 @@ extensions/vcproj64/*
.vscode/*
hemtt
hemtt.exe
.hemtt/
.hemttout
tools/temp
*.cache
*.pbo

37
.hemtt/project.toml Normal file
View File

@ -0,0 +1,37 @@
name = "ACE3"
prefix = "ace"
author = "ACE-Team"
[files]
include = [
"*.dll",
"*.so",
"mod.cpp",
"README.md",
"docs/README_*.md",
"AUTHORS.txt",
"LICENSE",
"logo_ace3_ca.paa",
"meta.cpp",
]
[version]
git_hash = 0
# TODO Enable once templating is added in v0.10
#[properties]
#version = "{{git \"id 8\"}}"
[asc]
enabled = true
exclude = [
"/initsettings.sqf",
"/initkeybinds.sqf",
"/xeh_prep.sqf",
"dev",
"medical_ai/statemachine.sqf",
"common/functions/fnc_dummy.sqf",
]
[hemtt.config]
preset = "Hemtt" # TODO will change after v0.10-a14

View File

@ -145,6 +145,7 @@ PiZZADOX <509thParachuteInfantry@gmail.com>
pokertour
Professor <lukas.trneny@wo.cz>
Pterolatypus <pterolatypus@gmail.com>
QuantX
QuickDagger
rakowozz
ramius86 <pasini86@hotmail.com>
@ -182,4 +183,4 @@ wizpig64
YetheSamartaka
xrufix
Zakant <Zakant@gmx.de>
zGuba
zGuba

View File

@ -50,7 +50,6 @@ class GVAR(rangeTableDialog) {
};
class ChargeListBox: RscListbox {
idc = IDC_CHARGELIST;
style = ST_RIGHT;
x = "13 *(safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH) / 2)";
y = "2 * ((safeZoneH / 1.2) / 25) + (safezoneY + (safezoneH - (safeZoneH / 1.2)) / 2)";
w = "5 * (safeZoneH / 40)";

View File

@ -36,7 +36,9 @@ if (_item isEqualType "") then {
_validItem =
(alive _item) &&
{_ignoreInteraction || {([_item, _vehicle] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE}} &&
{!(_item getVariable [QEGVAR(cookoff,isCookingOff), false])};
{!(_item getVariable [QEGVAR(cookoff,isCookingOff), false])} &&
{isNull(_item getVariable [QEGVAR(refuel,nozzle), objNull])} && // Objects which have a refueling nozzle connected to them cannot be loaded
{isNull(_item getVariable [QEGVAR(refuel,ownedNozzle), objNull])}; // Fuel sources which have their nozzle out cannot be loaded
};
_validItem &&

View File

@ -6,7 +6,8 @@ class CfgUIGrids {
grid_ACE_displayText[] = {
{
"((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40))",
"safeZoneY + 0.175 * safezoneH, (10 *(((safezoneW / safezoneH) min 1.2) / 40))",
"safeZoneY + 0.175 * safezoneH",
"(10 *(((safezoneW / safezoneH) min 1.2) / 40))",
"(3 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))"
},
"(((safezoneW / safezoneH) min 1.2) / 40)",

View File

@ -1,4 +1,3 @@
class ctrlMapEmpty;
class GVAR(DisableMouse_Dialog) {
idd = -1;
movingEnable = 0;

View File

@ -1,19 +1,20 @@
class GVAR(ProgressBar_Dialog) {
idd = -1;
movingEnable = 0;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBG)),(_this select 0) displayCtrl 1)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBar)),(_this select 0) displayCtrl 2)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBarTitle)),(_this select 0) displayCtrl 3)];);
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QUOTE(QGVAR(dlgProgress)),_this select 0)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBG)),(_this select 0) displayCtrl 1)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBar)),(_this select 0) displayCtrl 2)]; uiNamespace setVariable [ARR_2(QUOTE(QGVAR(ctrlProgressBarTitle)),(_this select 0) displayCtrl 3)];);
objects[] = {};
class controlsBackground {
class Background {
idc = -1;
class Background: ctrlMapEmpty {
idc = 101;
moving = 0;
fade = 1;
font = "TahomaB";
text = "";
sizeEx = 0;
lineSpacing = 0;
type = 0;
style = 0;
style = 48;
type = 101;
size = 1;
colorBackground[] = {0, 0, 0, 0.0};
colorText[] = {0, 0, 0, 0};

View File

@ -64,6 +64,7 @@ PREP(getDefaultAnim);
PREP(getDefinedVariable);
PREP(getDefinedVariableDefault);
PREP(getDefinedVariableInfo);
PREP(getFiremodeIndex);
PREP(getFirstObjectIntersection);
PREP(getFirstTerrainIntersection);
PREP(getGunner);

View File

@ -59,6 +59,16 @@ GVAR(hexArray) = [
"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
];
GVAR(canDigSurfaces) = createHashMapFromArray [
["int_concrete",false],["int_pavement_exp",false],["int_solidwood_exp",false],["tiling",false],["roof_tiles",false],["stony",false],
["wavymetal",false],["int_wood",false],["int_tiles",false],["softwood_exp",false],["int_concrete_exp",false],["tiles_int",false],
["metalplate_exp",false],["int_metalplate_exp",false],["steel_exp",false],["metal",false],["int_lino_exp",false],["metal_int",false],
["wavymetal_exp",false],["int_metal",false],["asphalt_exp",false],["pavement_exp",false],["gridmetal_exp",false],
["rooftiles_exp",false],["rock",false],["int_mat_exp",false],["wood_int",false],["concrete_int",false],["tarmac",false],["wood",false],
["roof_tin",false],["lino_exp",false],["concrete",false],["int_softwood_exp",false], ["concrete_exp",false],["stones_exp",false],
["forest_exp",true],["snow",true],["grasstall_exp",true],["grass",true]
];
isHC = !hasInterface && !isDedicated; // deprecated because no tag
missionNamespace setVariable ["ACE_isHC", ACE_isHC];
uiNamespace setVariable ["ACE_isHC", ACE_isHC];

View File

@ -58,6 +58,8 @@ class ACE_Rsc_Control_Base {
h = 0;
};
class ctrlMapEmpty;
#include "ACE_Settings.hpp"
#include "define.hpp"
#include "ProgressScreen.hpp"

View File

@ -4,34 +4,36 @@
* Checks if the player can dig on the surface below (enough dust).
*
* Arguments:
* 0: Unit <OBJECT>
* 0: Unit or Position (2d/3d) <OBJECT><ARRAY>
*
* Return Value:
* Can Dig <BOOL>
*
* Example:
* [ACE_player] call ace_common_fnc_canDig
* [[1000,2000]] call ace_common_fnc_canDig
*
* Public: No
*/
params ["_unit"];
params ["_input"];
private _posASL = getPosASL _unit;
private _posASL = _input;
if ((getPosATL _unit) select 2 > 0.05 || // Walking on objects, such as buildings, pavements, etc.
if ((_input isEqualType objNull) && {
_posASL = getPosASL _input;
(getPosATL _unit) select 2 > 0.05 || // Walking on objects, such as buildings, pavements, etc.
{surfaceIsWater _posASL} // posATL in low water (not as low to allow awalking) is negative
) exitWith {false};
}) exitWith {false};
private _surfaceClass = (surfaceType _posASL) select [1];
private _config = configFile >> "CfgSurfaces" >> _surfaceClass;
private _surfaceType = getText (_config >> "soundEnviron");
private _surfaceDust = getNumber (_config >> "dust");
TRACE_2("Surface",_surfaceType,_surfaceDust);
TRACE_3("",_surfaceClass,getText (_config >> "soundEnviron"),getNumber (_config >> "dust"));
if (isNumber (_config >> "ACE_canDig")) then {
(getNumber (_config >> "ACE_canDig")) == 1 // return
} else {
!(_surfaceType in DIG_SURFACE_BLACKLIST) && {(_surfaceDust >= 0.1) || {_surfaceType in DIG_SURFACE_WHITELIST}} // return
private _surfaceType = getText (_config >> "soundEnviron");
GVAR(canDigSurfaces) getOrDefault [_surfaceType, getNumber (_config >> "dust") >= 0.1, true] // return
};

View File

@ -1,5 +1,5 @@
#include "script_component.hpp"
#include "\a3\ui_f_curator\ui\defineresincldesign.inc"
#include "\a3\ui_f_curator\ui\defineResinclDesign.inc"
/*
* Author: commy2
* Disables key input. ESC can still be pressed to open the menu.
@ -107,11 +107,24 @@ if (_state) then {
};
GVAR(disableInputPFH) = [{
if (isNull (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) && {!visibleMap && {isNull findDisplay IDD_INTERRUPT} && {isNull findDisplay IDD_RSCDISPLAYCURATOR} && {isNull findDisplay IDD_TEAMSWITCH}}) then {
if (isNull (uiNamespace getVariable [QGVAR(dlgDisableMouse), displayNull]) && {!visibleMap && {isNull findDisplay IDD_INTERRUPT} && {isNull findDisplay IDD_RSCDISPLAYCURATOR} && {isNull findDisplay IDD_TEAMSWITCH}}) exitWith {
[GVAR(disableInputPFH)] call CBA_fnc_removePerFrameHandler;
GVAR(disableInputPFH) = nil;
[true] call FUNC(disableUserInput);
};
// Allow user input if the player is respawning and a respawn template (menu position or spectator)
// is open (otherwise they cannot click the respawn button)
if (
!alive player
&& {playerRespawnTime != -1}
&& {
missionNamespace getVariable ["BIS_RscRespawnControlsMap_shown", false]
|| {missionNamespace getVariable ["BIS_RscRespawnControlsSpectate_shown", false]}
}
) exitWith {
[false] call FUNC(disableUserInput);
};
}, 0, []] call CBA_fnc_addPerFrameHandler;
} else {
if (!isNil QGVAR(disableInputPFH)) then {

View File

@ -0,0 +1,31 @@
#include "script_component.hpp"
/*
* Author: PabstMirror
* Get the firemode index of the weapon for use with "SwitchWeapon"
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Muzzle <STRING> (Optional)
* 2: Firemode <STRING> (Optional)
*
* Return Value:
* Weapon/Mode index <NUMBER>
*
* Example:
* [player] call ace_common_fnc_getFiremodeIndex
*
* Public: Yes
*/
params ["_unit"];
(weaponState _unit) params ["", "_currentMuzzle", "_currentFiremode"];
params ["", ["_muzzle", _currentMuzzle], ["_firemode", _currentFireMode]];
private _weapons = _unit weaponsInfo [_muzzle, false];
private _index = -1;
{
_x params ["_xIndex", "", "", "", "_xFiremode"];
if (_xFiremode == _firemode) exitWith { _index = _xIndex; };
} forEach _weapons;
_index

View File

@ -30,6 +30,15 @@ private _player = ACE_player;
closeDialog 0;
createDialog QGVAR(ProgressBar_Dialog);
private _display = uiNamespace getVariable QGVAR(dlgProgress);
// Ensure CBA keybindings are hooked into the display
_display call (uiNamespace getVariable "CBA_events_fnc_initDisplayCurator");
// Hide cursor by using custom transparent cursor
private _map = _display displayCtrl 101;
_map ctrlMapCursor ["", QGVAR(blank)];
(uiNamespace getVariable QGVAR(ctrlProgressBarTitle)) ctrlSetText _localizedTitle;
//Adjust position based on user setting:

View File

@ -15,18 +15,3 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#define DIG_SURFACE_BLACKLIST [ \
"concrete", "concrete_exp", "concrete_int", "int_concrete", "int_concrete_exp", \
"pavement_exp", "int_pavement_exp", \
"tiling", "tiles_int", "int_tiles", \
"roof_tin", "roof_tiles", "rooftiles_exp", \
"tarmac", "asphalt_exp", \
"stones_exp", "rock", "stony", \
"metal", "gridmetal_exp", "metalplate_exp", "int_metalplate_exp", "metal_int", "wavymetal", "wavymetal_exp", "int_metal", "steel_exp", \
"lino_exp", "int_lino_exp", "int_mat_exp", \
"wood", "wood_int", "int_wood", "softwood_exp", "int_softwood_exp", "int_solidwood_exp" \
]
#define DIG_SURFACE_WHITELIST ["grass", "grasstall_exp", "forest_exp", "snow"]

View File

@ -51,7 +51,7 @@ params ["_listBoxCtrl", "_itemsCountArray"];
_picture = getText (_configPath >> _classname >> "picture");
};
default {
ERROR(format ["[%1] - bad classname", _classname]);
ERROR_1("[%1] - bad classname",_classname);
};
};

Binary file not shown.

View File

@ -48,7 +48,12 @@ if (_target isKindOf "CAManBase" || {animationState _unit in CARRY_ANIMATIONS})
_unit removeWeapon "ACE_FakePrimaryWeapon";
// reselect weapon and re-enable sprint
_unit selectWeapon primaryWeapon _unit;
private _previousWeaponIndex = _unit getVariable [QGVAR(previousWeapon), -1];
_unit setVariable [QGVAR(previousWeapon), nil, true];
if (_previousWeaponIndex != -1) then {
_unit action ["SwitchWeapon", _unit, _unit, _previousWeaponIndex];
};
[_unit, "forceWalk", "ACE_dragging", false] call EFUNC(common,statusEffect_set);
[_unit, "blockThrow", "ACE_dragging", false] call EFUNC(common,statusEffect_set);

View File

@ -51,13 +51,13 @@ if (_target isKindOf "CAManBase") then {
_timer = CBA_missionTime + 10;
} else {
// select no weapon and stop sprinting
private _previousWeaponIndex = [_unit] call EFUNC(common,getFiremodeIndex);
_unit setVariable [QGVAR(previousWeapon), _previousWeaponIndex, true];
_unit action ["SwitchWeapon", _unit, _unit, 299];
[_unit, "AmovPercMstpSnonWnonDnon", 0] call EFUNC(common,doAnimation);
[_unit, "forceWalk", "ACE_dragging", true] call EFUNC(common,statusEffect_set);
};
[_unit, "blockThrow", "ACE_dragging", true] call EFUNC(common,statusEffect_set);

Binary file not shown.

View File

@ -1,119 +0,0 @@
class cfgSkeletons {
class OFP2_ManSkeleton {
isDiscrete = 0;
skeletonInherit = "";
skeletonBones[] = {
"Pelvis","",
"Spine","Pelvis",
"Spine1","Spine",
"Spine2","Spine1",
"Spine3","Spine2",
"camera","Pelvis",// case has changed for arma3
"weapon","Spine1",
"launcher","Spine1",
"Neck","Spine3",
"Neck1","Neck",
"Head","Neck1", //Head skeleton in hierarchy
//Left upper side
"LeftShoulder","Spine3",
"LeftArm","LeftShoulder",
"LeftArmRoll","LeftArm",
"LeftForeArm","LeftArmRoll",
"LeftForeArmRoll","LeftForeArm",
"LeftHand","LeftForeArmRoll",
"LeftHandRing","LeftHand",
"LeftHandRing1","LeftHandRing",
"LeftHandRing2","LeftHandRing1",
"LeftHandRing3","LeftHandRing2",
"LeftHandPinky1","LeftHandRing",
"LeftHandPinky2","LeftHandPinky1",
"LeftHandPinky3","LeftHandPinky2",
"LeftHandMiddle1","LeftHand",
"LeftHandMiddle2","LeftHandMiddle1",
"LeftHandMiddle3","LeftHandMiddle2",
"LeftHandIndex1","LeftHand",
"LeftHandIndex2","LeftHandIndex1",
"LeftHandIndex3","LeftHandIndex2",
"LeftHandThumb1","LeftHand",
"LeftHandThumb2","LeftHandThumb1",
"LeftHandThumb3","LeftHandThumb2",
//Right upper side
"RightShoulder","Spine3",
"RightArm","RightShoulder",
"RightArmRoll","RightArm",
"RightForeArm","RightArmRoll",
"RightForeArmRoll","RightForeArm",
"RightHand","RightForeArmRoll",
"RightHandRing","RightHand",
"RightHandRing1","RightHandRing",
"RightHandRing2","RightHandRing1",
"RightHandRing3","RightHandRing2",
"RightHandPinky1","RightHandRing",
"RightHandPinky2","RightHandPinky1",
"RightHandPinky3","RightHandPinky2",
"RightHandMiddle1","RightHand",
"RightHandMiddle2","RightHandMiddle1",
"RightHandMiddle3","RightHandMiddle2",
"RightHandIndex1","RightHand",
"RightHandIndex2","RightHandIndex1",
"RightHandIndex3","RightHandIndex2",
"RightHandThumb1","RightHand",
"RightHandThumb2","RightHandThumb1",
"RightHandThumb3","RightHandThumb2",
//Left lower side
"LeftUpLeg","Pelvis",
"LeftUpLegRoll","LeftUpLeg",
"LeftLeg","LeftUpLegRoll",
"LeftLegRoll","LeftLeg",
"LeftFoot","LeftLegRoll",
"LeftToeBase","LeftFoot",
//Right lower side
"RightUpLeg","Pelvis",
"RightUpLegRoll","RightUpLeg",
"RightLeg","RightUpLegRoll",
"RightLegRoll","RightLeg",
"RightFoot","RightLegRoll",
"RightToeBase","RightFoot",
//New facial features arma3 only
"Face_Hub","Head",
"Face_Jawbone","Face_Hub",
"Face_Jowl","Face_Jawbone",
"Face_chopRight","Face_Jawbone",
"Face_chopLeft","Face_Jawbone",
"Face_LipLowerMiddle","Face_Jawbone",
"Face_LipLowerLeft","Face_Jawbone",
"Face_LipLowerRight","Face_Jawbone",
"Face_Chin","Face_Jawbone",
"Face_Tongue","Face_Jawbone",
"Face_CornerRight","Face_Hub",
"Face_CheekSideRight","Face_CornerRight",
"Face_CornerLeft","Face_Hub",
"Face_CheekSideLeft","Face_CornerLeft",
"Face_CheekFrontRight","Face_Hub",
"Face_CheekFrontLeft","Face_Hub",
"Face_CheekUpperRight","Face_Hub",
"Face_CheekUpperLeft","Face_Hub",
"Face_LipUpperMiddle","Face_Hub",
"Face_LipUpperRight","Face_Hub",
"Face_LipUpperLeft","Face_Hub",
"Face_NostrilRight","Face_Hub",
"Face_NostrilLeft","Face_Hub",
"Face_Forehead","Face_Hub",
"Face_BrowFrontRight","Face_Forehead",
"Face_BrowFrontLeft","Face_Forehead",
"Face_BrowMiddle","Face_Forehead",
"Face_BrowSideRight","Face_Forehead",
"Face_BrowSideLeft","Face_Forehead",
"Face_Eyelids","Face_Hub",
"Face_EyelidUpperRight","Face_Hub",
"Face_EyelidUpperLeft","Face_Hub",
"Face_EyelidLowerRight","Face_Hub",
"Face_EyelidLowerLeft","Face_Hub",
"EyeLeft","Face_Hub",
"EyeRight","Face_Hub"
};// end of skeleton array
// location of pivot points (local axes) for hierarchical animation
pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d";
};
};

Binary file not shown.

View File

@ -3,7 +3,7 @@
#define CREATE_SCREAM(no)\
class GVAR(DOUBLES(scream,no)) { \
name = QUOTE(GVAR(CONCAT(scream,no)));\
sound[] = {QUOTE(PATHTOF(CONCAT(sounds\scream,no).ogg)), "db + 8", 1};\
sound[] = {QUOTE(PATHTOF(CONCAT(sounds\scream,no).ogg)), QUOTE(db+8), 1};\
titles[] = {}; \
}

View File

@ -38,7 +38,7 @@
<English>Auto add fortify item</English>
<German>Füge das Bauwerkzeug automatisch hinzu</German>
<Japanese>自動的に要塞ツールを追加</Japanese>
<Korean>자동 추가 요새 항목</Korean>
<Korean>요새화 도구 자동으로 추가</Korean>
<Chinese>自動增加要塞物品</Chinese>
<Chinesesimp>自动增加设防物品</Chinesesimp>
<Polish>Automatycznie dodaj narzędzie do fortyfikowania</Polish>

Binary file not shown.

Binary file not shown.

View File

@ -10,8 +10,8 @@ Fast Recompiling via function
#define PREP_RECOMPILE_END }; call _recomp; ACE_RECOMPILES pushBack _recomp;
#else
#define LINKFUNC(x) FUNC(x)
#define PREP_RECOMPILE_START /* */
#define PREP_RECOMPILE_END /* */
#define PREP_RECOMPILE_START ; /* disabled */
#define PREP_RECOMPILE_END ; /* disabled */
#endif
@ -32,7 +32,7 @@ STACK TRACING
#else
#define CALLSTACK(function) function
#define CALLSTACK_NAMED(function, functionName) function
#define DUMPSTACK
#define DUMPSTACK ; /* disabled */
#endif
@ -51,8 +51,8 @@ PERFORMANCE COUNTERS SECTION
#define DUMP_COUNTERS ([__FILE__, __LINE__] call ACE_DUMPCOUNTERS_FNC)
#else
#define CREATE_COUNTER(x) /* disabled */
#define BEGIN_COUNTER(x) /* disabled */
#define END_COUNTER(x) /* disabled */
#define DUMP_COUNTERS /* disabled */
#define CREATE_COUNTER(x) ; /* disabled */
#define BEGIN_COUNTER(x) ; /* disabled */
#define END_COUNTER(x) ; /* disabled */
#define DUMP_COUNTERS ; /* disabled */
#endif

View File

@ -9,10 +9,10 @@ if (isServer) then {
GVAR(bloodDrops) = [];
[QGVAR(bloodDropCreated), {
params ["_bloodDrop"];
params ["_bloodDrop", "_source"];
// Add to created queue with format: [expire time, blood object]
private _index = GVAR(bloodDrops) pushBack [CBA_missionTime + GVAR(bloodLifetime), _bloodDrop];
// Add to created queue with format: [expire time, blood object, source unit]
private _index = GVAR(bloodDrops) pushBack [CBA_missionTime + GVAR(bloodLifetime), _bloodDrop, _source];
if (count GVAR(bloodDrops) >= GVAR(maxBloodObjects)) then {
(GVAR(bloodDrops) deleteAt 0) params ["", "_deletedBloodDrop"];

View File

@ -7,18 +7,19 @@
* Arguments:
* 0: Blood Drop Type <STRING>
* 1: Position <ARRAY>
* 2: Source <OBJECT>
*
* Return Value:
* Blood Drop <OBJECT>
*
* Example:
* ["blooddrop_2", getPos player] call ace_medical_blood_fnc_createBlood
* ["blooddrop_2", getPos player, player] call ace_medical_blood_fnc_createBlood
*
* Public: No
*/
params ["_type", "_position"];
TRACE_2("Creating blood",_type,_position);
params ["_type", "_position", "_source"];
TRACE_3("Creating blood",_type,_position,_source);
private _model = GVAR(models) getVariable _type;
@ -26,6 +27,6 @@ private _bloodDrop = createSimpleObject [_model, [0, 0, 0]];
_bloodDrop setDir random 360;
_bloodDrop setPos _position;
[QGVAR(bloodDropCreated), _bloodDrop] call CBA_fnc_serverEvent;
[QGVAR(bloodDropCreated), [_bloodDrop, _source]] call CBA_fnc_serverEvent;
_bloodDrop

View File

@ -35,5 +35,5 @@ if (CBA_missionTime > (_unit getVariable [QGVAR(nextTime), -10])) then {
_position set [2, 0];
private _bloodDrop = ["blooddrop_1", "blooddrop_2", "blooddrop_3", "blooddrop_4"] select floor (_bloodLoss min 3);
[_bloodDrop, _position] call FUNC(createBlood);
[_bloodDrop, _position, _unit] call FUNC(createBlood);
};

View File

@ -27,7 +27,7 @@ private _distanceBetweenDrops = DISTANCE_BETWEEN_DROPS * _damage;
private _offset = OFFSET + _distanceBetweenDrops;
private _position = _unit getPos [_offset, _direction];
["blooddrop_2", _position, _direction] call FUNC(createBlood);
["blooddrop_2", _position, _unit] call FUNC(createBlood);
private _dropAmount = ceil (MAXIMUM_DROPS * _damage);
TRACE_2("Spurting blood",_dropAmount,_damage);
@ -35,6 +35,6 @@ TRACE_2("Spurting blood",_dropAmount,_damage);
if (_dropAmount > 1) then {
for "_i" from 2 to _dropAmount do {
_position = _position getPos [_distanceBetweenDrops, _direction];
["blooddrop_1", _position, _direction] call FUNC(createBlood);
["blooddrop_1", _position, _unit] call FUNC(createBlood);
};
};

Binary file not shown.

View File

@ -74,10 +74,10 @@ if (_isRespawn) then {
_unit setVariable [VAR_MEDICATIONS, [], true];
// Unconscious spontanious wake up chance
_unit setVariable [QEGVAR(medical,lastWakeUpCheck), nil];
_unit setVariable [QEGVAR(medical,lastWakeUpCheck), nil, true];
// Cause of death
_unit setVariable [QEGVAR(medical,causeOfDeath), nil];
_unit setVariable [QEGVAR(medical,causeOfDeath), nil, true];
};
[{

View File

@ -29,6 +29,7 @@ GVAR(enabled)
}
&& {alive _vehicle}
&& {2 > locked _vehicle}
&& {isNull getConnectedUAVUnit _unit}
&& {simulationEnabled _vehicle}
&& {
-1 == crew _vehicle findIf {alive _x}

View File

@ -43,14 +43,16 @@ _source setVariable [QGVAR(currentSupply), _currentSupply + _rearmCargo, true];
private _rearmCargoConfig = getNumber (configOf _source >> QGVAR(defaultSupply));
// already initialized because this is a config rearm vehicle
if (_rearmCargoConfig > 0 || _source getVariable [QGVAR(isSupplyVehicle), false]) exitWith {};
// initialize if it's not a config rearm vehicle
if (!(_rearmCargoConfig > 0 && _source getVariable [QGVAR(isSupplyVehicle), false])) then {
_source setVariable [QGVAR(isSupplyVehicle), true, true];
_source setVariable [QGVAR(isSupplyVehicle), true, true];
// only add if menu does not already exist
if (isNil {_source getVariable QGVAR(initSupplyVehicle_jipID)}) then {
private _jipID = [QGVAR(initSupplyVehicle), [_source]] call CBA_fnc_globalEventJIP;
[_jipID, _source] call CBA_fnc_removeGlobalEventJIP;
_source setVariable [QGVAR(initSupplyVehicle_jipID), _jipID];
};
};
// check if menu already exists
if (!isNil {_source getVariable QGVAR(initSupplyVehicle_jipID)}) exitWith {};
private _jipID = [QGVAR(initSupplyVehicle), [_source]] call CBA_fnc_globalEventJIP;
[_jipID, _source] call CBA_fnc_removeGlobalEventJIP;
_source setVariable [QGVAR(initSupplyVehicle_jipID), _jipID];
[QGVAR(rearmSourceInitalized), [_source]] call CBA_fnc_globalEvent;

View File

@ -1,45 +1,3 @@
#define MACRO_NOZZLE_ACTIONS \
class ACE_Actions { \
class ACE_MainActions { \
displayName = CSTRING(Refuel); \
distance = REFUEL_ACTION_DISTANCE; \
position = "[0,-0.025,0.125]"; \
condition = "true"; \
statement = ""; \
exceptions[] = {INTERACT_EXCEPTIONS}; \
showDisabled = 0; \
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_2(_player,_target)] call FUNC(takeNozzle)); \
exceptions[] = {INTERACT_EXCEPTIONS_REFUELING}; \
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[] = {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[] = {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[] = {INTERACT_EXCEPTIONS_REFUELING}; \
icon = QPATHTOF(ui\icon_refuel_interact.paa); \
}; \
}; \
}
class CBA_Extended_EventHandlers;
class CfgNonAIVehicles {
@ -91,12 +49,59 @@ class CfgVehicles {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
MACRO_NOZZLE_ACTIONS;
displayName = QGVAR(fuelNozzle);
scope = 1;
scopeCurator = 1;
model = QPATHTOF(data\nozzle.p3d);
destrType = "DestructNo";
class ACE_Actions {
class ACE_MainActions {
displayName = CSTRING(Refuel);
distance = REFUEL_ACTION_DISTANCE;
position = "[0,-0.025,0.125]";
condition = "true";
statement = "";
exceptions[] = {INTERACT_EXCEPTIONS};
showDisabled = 0;
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_2(_player,_target)] call FUNC(takeNozzle));
exceptions[] = {INTERACT_EXCEPTIONS_REFUELING};
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 FUNC(turnOn));
exceptions[] = {INTERACT_EXCEPTIONS};
icon = QPATHTOF(ui\icon_refuel_interact.paa);
};
class GVAR(TurnOn_Container) {
displayName = CSTRING(TurnOn_Container);
condition = QUOTE([ARR_3(_player,_target,true)] call FUNC(canTurnOn));
statement = QUOTE([ARR_3(_player,_target,true)] call FUNC(turnOn));
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 FUNC(turnOff));
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 FUNC(disconnect));
exceptions[] = {INTERACT_EXCEPTIONS_REFUELING};
icon = QPATHTOF(ui\icon_refuel_interact.paa);
};
};
};
};
class Rope;

View File

@ -1,4 +1,5 @@
PREP(canCheckFuel);
PREP(canConnectNozzle);
PREP(canDisconnect);
PREP(canReturnNozzle);
PREP(canTakeNozzle);
@ -8,6 +9,7 @@ PREP(checkFuel);
PREP(connectNozzleAction);
PREP(disconnect);
PREP(dropNozzle);
PREP(getCapacity);
PREP(getFuel);
PREP(handleDisconnect);
PREP(handleRespawn);

View File

@ -20,7 +20,7 @@ GVAR(mainAction) = [
{
alive _target
&& {[_player, _target, [INTERACT_EXCEPTIONS]] call EFUNC(common,canInteractWith)}
&& {REFUEL_DISABLED_FUEL != [_target] call FUNC(getFuel)}
&& {REFUEL_DISABLED_FUEL != ([_target] call FUNC(getCapacity))}
},
{}, [], [0,0,0],
REFUEL_ACTION_DISTANCE

View File

@ -8,7 +8,7 @@ class CfgPatches {
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction"};
author = ECSTRING(common,ACETeam);
authors[] = {"GitHawk"};
authors[] = {"GitHawk", "QuantX"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};

View File

@ -23,4 +23,4 @@ params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]];
{!local _unit} ||
{!alive _source} ||
{([_unit, _source] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} ||
{(_source call FUNC(getFuel) == REFUEL_INFINITE_FUEL)})
{(_source call FUNC(getCapacity)) in [REFUEL_INFINITE_FUEL, REFUEL_DISABLED_FUEL]})

View File

@ -0,0 +1,30 @@
#include "script_component.hpp"
/*
* Author: QuantX
* Checks if an object can have a nozzle connected to it.
*
* Arguments:
* 0: Object <OBJECT>
*
* Return Value:
* Can nozzle be connected <BOOL>
*
* Example:
* [myVehicle] call ace_refuel_fnc_canConnectNozzle;
* [myJerryCan] call ace_refuel_fnc_canConnectNozzle;
*
* Public: No
*/
params [["_object", objNull, [objNull]]];
// Make sure object doesn't already have a nozzle connected
if (isNull _object || {!isNull (_object getVariable [QGVAR(nozzle), objNull])} ) exitWith {false};
// Can't fuel a jerry can that is connected to another object
if (_object getVariable [QGVAR(jerryCan), false]) exitWith {!(_object getVariable [QGVAR(isConnected), false])};
// We need to check "canReceive" before we check if the tank can be filled
// This handles the edge case where a fuel truck has an infintite supply (i.e. the truck can be refueled, but the tank cannot)
(getNumber ((configOf _object) >> QGVAR(canReceive)) == 1) ||
{!(([_object] call FUNC(getCapacity)) in [REFUEL_INFINITE_FUEL, REFUEL_DISABLED_FUEL])}

View File

@ -22,7 +22,8 @@ if (isNull _unit ||
{!(_unit isKindOf "CAManBase")} ||
{!local _unit} ||
{!alive _object} ||
{!isNull (_unit getVariable [QGVAR(nozzle), objNull])} ||
{!isNull (_unit getVariable [QGVAR(nozzle), objNull])} || // Not already carrying a nozzle
{(_object getVariable [QGVAR(jerryCan), false]) && {!isNull (_object getVariable [QGVAR(nozzle), objNull])}} || // Prevent jerry cans from being picked up if they have a nozzle connected
{typeOf _object == QGVAR(fuelNozzle) && {!isNull (attachedTo _object)}} || // Not carried by someone else
{([_unit, _object] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE}) exitWith {false};

View File

@ -1,11 +1,12 @@
#include "script_component.hpp"
/*
* Author: GitHawk
* Check if a unit can turn on a fuel nozzle
* Check if a unit can turn on a fuel nozzle.
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Nozzle <OBJECT>
* 2: Refuel container <BOOL> (default: false)
*
* Return Value:
* Can turn on <BOOL>
@ -16,7 +17,7 @@
* Public: No
*/
params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]];
params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_refuelContainer", false, [false]]];
if (isNull _unit ||
{isNull _nozzle} ||
@ -24,7 +25,18 @@ if (isNull _unit ||
{!local _unit} ||
{(_nozzle distance _unit) > REFUEL_ACTION_DISTANCE}) exitWith {false};
private _source = _nozzle getVariable [QGVAR(source), objNull];
private _sink = _nozzle getVariable [QGVAR(sink), objNull];
if (isNull _source || {isNull _sink}) exitWith {false};
private _isSinkFull = if (_refuelContainer) then {
([_sink] call FUNC(getCapacity)) in [REFUEL_DISABLED_FUEL, REFUEL_INFINITE_FUEL, [_sink] call FUNC(getFuel)]
} else {
fuel _sink == 1
};
!(_nozzle getVariable [QGVAR(isRefueling), false]) &&
{[_nozzle getVariable QGVAR(source)] call FUNC(getFuel) != 0} &&
{!isNull (_nozzle getVariable [QGVAR(sink), objNull])} &&
{(fuel (_nozzle getVariable QGVAR(sink))) < 1}
{(([_source] call FUNC(getCapacity)) == REFUEL_INFINITE_FUEL) || {[_source] call FUNC(getFuel) > 0}} && // Make sure the source has fuel
{!_isSinkFull} && // Make sure the sink isn't full
{!(_refuelContainer && {_source == _sink})}; // No endless container ot itself loop

View File

@ -72,6 +72,8 @@ private _attachPosModel = _sink worldToModel (ASLtoAGL _bestPosASL);
_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];
private _source = _nozzle getVariable QGVAR(source);
detach _nozzle;
_nozzle attachTo [_sink, _endPosTestOffset];
@ -111,21 +113,34 @@ private _attachPosModel = _sink worldToModel (ASLtoAGL _bestPosASL);
_nozzle setVariable [QGVAR(isConnected), true, true];
_sink setVariable [QGVAR(nozzle), _nozzle, true];
_source = _nozzle getVariable QGVAR(source);
private _fuel = [_source] call FUNC(getFuel);
if (_fuel == REFUEL_INFINITE_FUEL) then {
_source setVariable [QGVAR(fuelCounter), 0, true];
} else {
_source setVariable [QGVAR(fuelCounter), _fuel, true];
};
// Reset fuel counter
_source setVariable [QGVAR(fuelCounter), 0, true];
[_unit, _sink, _nozzle, _endPosTestOffset] call FUNC(refuel);
if ([_unit, _nozzle] call FUNC(canTurnOn)) then {
_unit setVariable [QGVAR(tempFuel), nil];
[_unit, _nozzle] call FUNC(turnOn);
} else {
[localize LSTRING(CouldNotTurnOn)] call EFUNC(common,displayText);
private _canReceive = getNumber ((configOf _sink) >> QGVAR(canReceive)) == 1;
private _isContainer = ([_sink] call FUNC(getCapacity)) != REFUEL_DISABLED_FUEL;
// Decide if cargo or vehicle will be refueled
switch (true) do {
case (_canReceive && {!_isContainer || {_sink == _source}}): {
// is not a refueling vehicle or refueling vehicle tries to refuel itself
if ([_unit, _nozzle, false] call FUNC(canTurnOn)) then {
[_unit, _nozzle, false] call FUNC(turnOn);
} else {
[localize LSTRING(CouldNotTurnOn)] call EFUNC(common,displayText);
};
};
case (!_canReceive && _isContainer): {
if ([_unit, _nozzle, true] call FUNC(canTurnOn)) then {
[_unit, _nozzle, true] call FUNC(turnOn);
} else {
[localize LSTRING(CouldNotTurnOn)] call EFUNC(common,displayText);
};
};
default {
/* Target is a refueling vehicle, let user manually decide if he wants to refuel cargo or vehicle itself */
};
};
},
"",

View File

@ -1,10 +1,10 @@
#include "script_component.hpp"
/*
* Author: GitHawk
* Disconnect a fuel nozzle.
* Disconnects a fuel nozzle and makes unit pick it up.
*
* Arguments:
* 0: Unit <OBJECT>
* 0: Unit <OBJECT> (default: objNull)
* 1: Nozzle <OBJECT>
*
* Return Value:
@ -27,4 +27,6 @@ _nozzle setVariable [QGVAR(sink), nil, true];
_nozzle setVariable [QGVAR(isConnected), false, true];
[objNull, _nozzle, true] call FUNC(dropNozzle);
[_unit, _nozzle] call FUNC(takeNozzle);
if (!isNull _unit) then {
[_unit, _nozzle] call FUNC(takeNozzle);
};

View File

@ -4,7 +4,7 @@
* Detaches the fuel nozzle, drops it and removes player variables.
*
* Arguments:
* 0: Unit <OBJECT> (optional)
* 0: Unit <OBJECT> (default: objNull)
* 1: Nozzle <OBJECT>
* 2: Disconnect Only <BOOL>
*

View File

@ -0,0 +1,35 @@
#include "script_component.hpp"
/*
* Author: QuantX
* Gets the capacity of a fuel source's tank.
*
* Arguments:
* 0: Fuel Source <OBJECT>
*
* Return Value:
* Fuel capacity <NUMBER> (-10 means infinte fuel, -1 means not a fuel source, >0 is a capacity in liters)
*
* Example:
* [fuelTruck] call ace_refuel_fnc_getCapacity
*
* Public: Yes
*/
params [["_source", objNull, [objNull]]];
if (isNull _source) exitWith {REFUEL_DISABLED_FUEL};
private _capacity = _source getVariable QGVAR(capacity);
// Initialize fuel truck if needed
if (isNil "_capacity") then {
// Check if this object has a fuelCargo config entry
private _fuelCargo = configOf _source >> QGVAR(fuelCargo);
_capacity = if (isNumber _fuelCargo) then {getNumber _fuelCargo} else {REFUEL_DISABLED_FUEL};
// Set capacity even if this isn't a fuel source to save on config lookup time in the event this function is used in a loop
_source setVariable [QGVAR(capacity), _capacity, true];
[_source, _capacity] call FUNC(setFuel);
};
_capacity;

View File

@ -22,8 +22,8 @@ if (isNull _source) exitWith {0};
private _fuel = _source getVariable QGVAR(currentFuelCargo);
if (isNil "_fuel") then {
_fuel = getNumber (configOf _source >> QGVAR(fuelCargo));
_source setVariable [QGVAR(currentFuelCargo), _fuel, true];
// Calling getCapacity will initialize the fuel source and return the amount of fuel in the tank
_fuel = [_source] call FUNC(getCapacity);
};
_fuel

View File

@ -22,11 +22,14 @@ if (isNull _target ||
{_target isKindOf "AllVehicles"} ||
{_target getVariable [QGVAR(jerryCan), false]}) exitWith {};
if (isServer) then {
[_target, _fuelAmount] call FUNC(setFuel); // has global effects
};
_target setVariable [QGVAR(jerryCan), true];
_target setVariable [QGVAR(source), _target];
_target setVariable [QGVAR(capacity), _fuelAmount];
if (isServer) then {
[_target, _fuelAmount] call FUNC(setFuel); // has global effects
[QGVAR(jerryCanInitalized), [_target]] call CBA_fnc_globalevent;
};
// Main Action
private _action = [QGVAR(Refuel),
@ -64,6 +67,30 @@ _action = [QGVAR(TurnOn),
REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction);
[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject);
// Add turnOn container
_action = [QGVAR(TurnOn_Container),
localize LSTRING(TurnOn_Container),
QPATHTOF(ui\icon_refuel_interact.paa),
{[_player, _target, true] call FUNC(turnOn)},
{[_player, _target, true] call FUNC(canTurnOn)},
{},
[],
[0, 0, 0],
REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction);
[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject);
// Add check fuel
_action = [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),
[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject);
// Add turnOff
_action = [QGVAR(TurnOff),
localize LSTRING(TurnOff),

View File

@ -40,10 +40,14 @@ if (
|| {_fuelCargo != 0 && {_fuelCargo == _fuelCargoConfig}}
) exitWith {};
[_source, _fuelCargo] call FUNC(setFuel);
private _capacity = if (_fuelCargo < 0) then {_fuelCargo} else {_fuelCargoConfig max _fuelCargo};
_source setVariable [QGVAR(capacity), _capacity, true];
if (_fuelCargo == REFUEL_DISABLED_FUEL) exitWith {};
[_source, _fuelCargo] call FUNC(setFuel);
if (
!isNil "_hooks"
&& {_hooks isEqualTypeAll []}
@ -52,9 +56,11 @@ if (
_source setVariable [QGVAR(hooks), _hooks, true];
};
// check if menu already exists
if (_fuelCargoConfig != 0 || {!isNil {_source getVariable QGVAR(initSource_jipID)}}) exitWith {};
// only add if menu doesn't already exist
if (!(_fuelCargoConfig != 0 && {!isNil {_source getVariable QGVAR(initSource_jipID)}})) then {
private _jipID = [QGVAR(initSource), [_source]] call CBA_fnc_globalEventJIP;
[_jipID, _source] call CBA_fnc_removeGlobalEventJIP;
_source setVariable [QGVAR(initSource_jipID), _jipID];
};
private _jipID = [QGVAR(initSource), [_source]] call CBA_fnc_globalEventJIP;
[_jipID, _source] call CBA_fnc_removeGlobalEventJIP;
_source setVariable [QGVAR(initSource_jipID), _jipID];
[QGVAR(sourceInitialized), [_source]] call CBA_fnc_globalEvent;

View File

@ -42,10 +42,11 @@ private _virtualPosASL = (eyePos _unit) vectorAdd (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 (configOf _cursorObject >> QGVAR(canReceive))}
&& {[_cursorObject] call FUNC(canConnectNozzle)}
&& {isNull (_cursorObject getVariable [QGVAR(nozzle), objNull])}
&& {!lineIntersects [eyePos _unit, _virtualPosASL, _unit]}
) then {

View File

@ -18,12 +18,6 @@
params [["_unit", objNull, [objNull]], ["_source", objNull, [objNull]]];
private _currentFuel = [_source] call FUNC(getFuel);
private _fuelCounter = if (_currentFuel == REFUEL_INFINITE_FUEL) then {
_source getVariable [QGVAR(fuelCounter), 0]
} else {
(_source getVariable [QGVAR(fuelCounter), _currentFuel]) - _currentFuel
};
private _fuelCounter = 0.01 * round (100 * _fuelCounter);
private _fuelCounter = _source getVariable [QGVAR(fuelCounter), 0];
_fuelCounter = 0.01 * round (100 * _fuelCounter);
[[LSTRING(Hint_FuelCounter), _fuelCounter], 1.5, _unit] call EFUNC(common,displayTextStructured);

View File

@ -1,6 +1,6 @@
#include "script_component.hpp"
/*
* Author: GitHawk
* Author: GitHawk, QuantX
* Refuels the vehicle.
*
* Arguments:
@ -21,93 +21,111 @@
params [["_unit", objNull, [objNull]], ["_sink", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_connectToPoint", [0,0,0], [[]], 3]];
private _config = configOf _sink;
private _rate = if (isNumber (_config >> QGVAR(flowRate))) then {
getNumber (_config >> QGVAR(flowRate)) * GVAR(rate)
} else {
// Jerry cans for example have no flow rate defined, default to 1
GVAR(rate)
};
private _rate = getNumber (_config >> QGVAR(flowRate)) * GVAR(rate);
private _maxFuel = getNumber (_config >> QGVAR(fuelCapacity));
// How much fuel is in a vehicle's fuel tank
private _maxFuelTank = getNumber (_config >> QGVAR(fuelCapacity));
// Fall back to vanilla fuelCapacity value (only air and sea vehicles don't have this defined by default by us)
// Air and sea vehicles have that value properly defined in liters, unlike ground vehicles which is is formula of (range * tested factor) - different fuel consumption system than ground vehicles
if (_maxFuel == 0) then {
_maxFuel = getNumber (_config >> "fuelCapacity");
if (_maxFuelTank == 0) then {
_maxFuelTank = getNumber (_config >> "fuelCapacity");
};
[{
params ["_args", "_pfID"];
_args params [["_source", objNull, [objNull]], ["_sink", objNull, [objNull]], ["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_rate", 1, [0]], ["_startFuel", 0, [0]], ["_maxFuel", 0, [0]], ["_connectFromPoint", [0,0,0], [[]], 3], ["_connectToPoint", [0,0,0], [[]], 3]];
_args params [["_source", objNull, [objNull]], ["_sink", objNull, [objNull]], ["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_rate", 1, [0]], ["_maxFuelTank", 1, [0]], ["_connectFromPoint", [0,0,0], [[]], 3], ["_connectToPoint", [0,0,0], [[]], 3]];
if !(_nozzle getVariable [QGVAR(isConnected), false]) exitWith {
[_pfID] call CBA_fnc_removePerFrameHandler;
};
// Quit if target or fuel tank got destroyed
if (!alive _source || {!alive _sink}) exitWith {
[objNull, _nozzle] call FUNC(dropNozzle);
_nozzle setVariable [QGVAR(isConnected), false, true];
if (_nozzle isKindOf "Land_CanisterFuel_F") then { _nozzle setVariable [QEGVAR(cargo,canLoad), true, true]; };
_nozzle setVariable [QGVAR(sink), nil, true];
_sink setVariable [QGVAR(nozzle), nil, true];
[objNull, _nozzle] call FUNC(disconnect);
[_pfID] call CBA_fnc_removePerFrameHandler;
};
// Quit if hose distance was exceeded
private _hoseLength = _source getVariable [QGVAR(hoseLength), GVAR(hoseLength)];
private _tooFar = ((_sink modelToWorld _connectToPoint) distance (_source modelToWorld _connectFromPoint)) > (_hoseLength - 2);
if (_tooFar && {!(_nozzle getVariable [QGVAR(jerryCan), false])}) exitWith {
[LSTRING(Hint_TooFar), 2, _unit] call EFUNC(common,displayTextStructured);
[objNull, _nozzle] call FUNC(dropNozzle);
_nozzle setVariable [QGVAR(isConnected), false, true];
if (_nozzle isKindOf "Land_CanisterFuel_F") then { _nozzle setVariable [QEGVAR(cargo,canLoad), true, true]; };
_nozzle setVariable [QGVAR(sink), nil, true];
_sink setVariable [QGVAR(nozzle), nil, true];
[objNull, _nozzle] call FUNC(disconnect);
[_pfID] call CBA_fnc_removePerFrameHandler;
};
// Main fueling process
private _finished = false;
private _fueling = _nozzle getVariable [QGVAR(isRefueling), false];
if (_fueling) then {
private _fuelInSource = [_source] call FUNC(getFuel);
if (_fuelInSource == 0) exitWith {
[LSTRING(Hint_SourceEmpty), 2, _unit] call EFUNC(common,displayTextStructured);
_nozzle setVariable [QGVAR(lastTickMissionTime), nil];
_nozzle setVariable [QGVAR(isRefueling), false, true];
};
private _refuelContainer = _nozzle getVariable [QGVAR(refuelContainer), false];
// Use special cargo refuel rate when refueling containers
// TODO: Add flow dedicated input/output flow rates for every container and use the lower of the two instead
if (_refuelContainer) then {_rate = GVAR(cargoRate)};
// Calculate rate using mission time to take time acceleration and pause into account
private _rateTime = _rate * (CBA_missionTime - (_nozzle getVariable [QGVAR(lastTickMissionTime), CBA_missionTime]));
private _addedFuel = _rate * (CBA_missionTime - (_nozzle getVariable [QGVAR(lastTickMissionTime), CBA_missionTime]));
_nozzle setVariable [QGVAR(lastTickMissionTime), CBA_missionTime];
if (_fuelInSource != REFUEL_INFINITE_FUEL) then {
if (_rateTime > _fuelInSource) then {
_rateTime = _fuelInSource;
// Figure out exactly how much fuel to transfer while being sure not to take too much from source
private _fuelInSource = [_source] call FUNC(getFuel);
if (([_source] call FUNC(getCapacity)) != REFUEL_INFINITE_FUEL) then {
if (_addedFuel > _fuelInSource) then {
_addedFuel = _fuelInSource;
_fuelInSource = 0;
_finished = true;
[LSTRING(Hint_SourceEmpty), 2, _unit] call EFUNC(common,displayTextStructured);
} else {
_fuelInSource = _fuelInSource - _rateTime;
_fuelInSource = _fuelInSource - _addedFuel;
};
};
private _fuelInSink = (if (_refuelContainer) then {
[_sink] call FUNC(getFuel)
} else {
_source setVariable [QGVAR(fuelCounter), (_source getVariable [QGVAR(fuelCounter), 0]) + _rateTime, true];
};
if (_fuelInSource <= 0 && {_fuelInSource != REFUEL_INFINITE_FUEL}) then {
_fuelInSource = 0;
[_source, _fuelInSource] call FUNC(setFuel);
_finished = true;
[LSTRING(Hint_SourceEmpty), 2, _unit] call EFUNC(common,displayTextStructured);
};
private _fuelInSink = (_unit getVariable [QGVAR(tempFuel), _startFuel]) + ( _rateTime / _maxFuel);
if (_fuelInSink > 1) then {
_fuelInSink = 1;
// How full the gas tank is. We keep our own record, since `fuel _sink` doesn't update quick enough
(_nozzle getVariable [QGVAR(tempFuel), fuel _sink]) * _maxFuelTank
}) + _addedFuel;
// Add fuel to target while being sure not to put too much into sink
private _maxFuelContainer = [_sink] call FUNC(getCapacity);
private _maxFuel = [_maxFuelTank, _maxFuelContainer] select _refuelContainer;
if (_fuelInSink >= _maxFuel) then {
// Put any extra fuel back
_fuelInSource = _fuelInSource + (_fuelInSink - _maxFuel);
_addedFuel = _maxFuel - _fuelInSink;
// We're done
_fuelInSink = _maxFuel;
_finished = true;
[LSTRING(Hint_Completed), 2, _unit] call EFUNC(common,displayTextStructured);
};
_unit setVariable [QGVAR(tempFuel), _fuelInSink];
if (_refuelContainer) then {
[_sink, _fuelInSink] call FUNC(setFuel);
} else {
private _fillRatio = _fuelInSink / _maxFuelTank;
[QEGVAR(common,setFuel), [_sink, _fillRatio], _sink] call CBA_fnc_targetEvent;
_nozzle setVariable [QGVAR(tempFuel), _fillRatio];
};
// Increment fuel counter
_source setVariable [QGVAR(fuelCounter), (_source getVariable [QGVAR(fuelCounter), 0]) + _addedFuel, true];
[QGVAR(tick), [_source, _sink, _rateTime]] call CBA_fnc_localEvent;
[QGVAR(tick), [_source, _sink, _addedFuel, _refuelContainer]] call CBA_fnc_localEvent;
[QEGVAR(common,setFuel), [_sink, _fuelInSink], _sink] call CBA_fnc_targetEvent;
[_source, _fuelInSource] call FUNC(setFuel);
} else {
_unit setVariable [QGVAR(tempFuel), fuel _sink];
_nozzle setVariable [QGVAR(tempFuel), fuel _sink];
};
if (_finished) exitWith {
// Reset variables when done
if (_finished) then {
[QGVAR(stopped), [_source, _sink]] call CBA_fnc_localEvent;
_nozzle setVariable [QGVAR(lastTickMissionTime), nil];
_nozzle setVariable [QGVAR(isRefueling), false, true];
@ -118,8 +136,7 @@ if (_maxFuel == 0) then {
_unit,
_nozzle,
_rate,
fuel _sink,
_maxFuel,
_maxFuelTank,
_nozzle getVariable [QGVAR(attachPos), [0,0,0]],
_connectToPoint
]] call CBA_fnc_addPerFrameHandler;

View File

@ -43,6 +43,10 @@ if (isNull _nozzle || {_source != _nozzle getVariable QGVAR(source)}) exitWith {
deleteVehicle _helper;
};
deleteVehicle _nozzle;
// Restore ability to drag and carry this object
_source setVariable [QEGVAR(dragging,canCarry), _source getVariable [QGVAR(canCarryLast), false], true];
_source setVariable [QEGVAR(dragging,canDrag), _source getVariable [QGVAR(canDragLast), false], true];
[_source, "blockEngine", "ACE_Refuel", false] call EFUNC(common,statusEffect_set);
},

View File

@ -18,7 +18,12 @@
params [["_source", objNull, [objNull]], ["_fuel", nil, [0]]];
if (isNull _source ||
{isNil "_fuel"}) exitWith {};
// Ensure valid fuel quantity
if (isNull _source || {isNil "_fuel"}) exitWith {};
_source setVariable [QGVAR(currentFuelCargo), _fuel, true];
// Make sure this is actually a finite fuel source
private _capacity = [_source] call FUNC(getCapacity);
if (_capacity in [REFUEL_INFINITE_FUEL, REFUEL_DISABLED_FUEL]) exitWith {};
// Don't overfill or underfill tank
_source setVariable [QGVAR(currentFuelCargo), (_fuel min _capacity) max 0, true];

View File

@ -95,10 +95,7 @@ TRACE_2("start",_unit,_nozzle);
getCursorObjectParams params ["_cursorObject", "", "_distance"];
if (!isNull _cursorObject && {_distance < REFUEL_NOZZLE_ACTION_DISTANCE}) then {
if (
1 == getNumber (configOf _cursorObject >> QGVAR(canReceive))
&& {isNull (_cursorObject getVariable [QGVAR(nozzle), objNull])}
) then {
if ([_cursorObject] call FUNC(canConnectNozzle)) then {
_hintLMB = localize LSTRING(Connect);
};
if ([_unit, _cursorObject] call FUNC(canReturnNozzle)) then {

View File

@ -77,6 +77,13 @@ params [
[_source, "blockEngine", "ACE_Refuel", true] call EFUNC(common,statusEffect_set);
_source setVariable [QGVAR(isConnected), true, true];
_source setVariable [QGVAR(ownedNozzle), _nozzle, true];
// Prevent moving the fuel source while the hose is out
_source setVariable [QGVAR(canCarryLast), _source getVariable [QEGVAR(dragging,canCarry), false], true];
_source setVariable [QGVAR(canDragLast), _source getVariable [QEGVAR(dragging,canDrag), false], true];
_source setVariable [QEGVAR(dragging,canCarry), false, true];
_source setVariable [QEGVAR(dragging,canDrag), false, true];
};
_unit setVariable [QGVAR(nozzle), _nozzle, true];

View File

@ -6,6 +6,7 @@
* Arguments:
* 0: Unit <OBJECT>
* 1: Nozzle <OBJECT>
* 2: Refuel container <BOOL> (default: false)
*
* Return Value:
* None
@ -16,9 +17,10 @@
* Public: No
*/
params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]];
params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_refuelContainer", false, [false]]];
_nozzle setVariable [QGVAR(lastTickMissionTime), CBA_missionTime];
_nozzle setVariable [QGVAR(refuelContainer), _refuelContainer];
_nozzle setVariable [QGVAR(isRefueling), true, true];
[LSTRING(Hint_Started), 1.5, _unit] call EFUNC(common,displayTextStructured);
[QGVAR(started), [_nozzle getVariable QGVAR(source), _nozzle getVariable QGVAR(sink)]] call CBA_fnc_localEvent;

View File

@ -7,6 +7,15 @@
{[QGVAR(rate), _this] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting;
[
QGVAR(cargoRate), "SLIDER",
[LSTRING(RefuelSettings_speedCargo_DisplayName), LSTRING(RefuelSettings_speedCargo_Description)],
[localize ELSTRING(OptionsMenu,CategoryLogistics), localize "str_state_refuel"],
[0,250,10,1], // [min, max, default value, trailing decimals (-1 for whole numbers only)]
true, // isGlobal
{[QGVAR(cargoRate), _this] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting;
[
QGVAR(hoseLength), "SLIDER",
[LSTRING(RefuelSettings_hoseLength_DisplayName)],

View File

@ -49,6 +49,12 @@
<Chinese>載具多快會加油完畢?</Chinese>
<Turkish>Bir araca ne kadar hızlı yakıt ikmali yapılmalıdır?</Turkish>
</Key>
<Key ID="STR_ACE_Refuel_RefuelSettings_speedCargo_DisplayName">
<English>Cargo Flow Rate</English>
</Key>
<Key ID="STR_ACE_Refuel_RefuelSettings_speedCargo_Description">
<English>How fast should a fuel source's tank be filled?</English>
</Key>
<Key ID="STR_ACE_Refuel_Refuel">
<English>Refuel</English>
<German>Betankung</German>
@ -289,6 +295,10 @@
<Chinese>開始加油</Chinese>
<Turkish>Yakıt Doldurmayı Başlat</Turkish>
</Key>
<Key ID="STR_ACE_Refuel_TurnOn_Container">
<English>Start fueling (container)</English>
<German>Betankung beginnen (Container)</German>
</Key>
<Key ID="STR_ACE_Refuel_CouldNotTurnOn">
<English>Couldn't turn on fuel nozzle</English>
<German>Kann Zapfpistole nicht anschalten</German>

View File

@ -13,7 +13,6 @@ class RscInGameUI {
controls[] += {QGVAR(speedIndicator)};
class GVAR(speedIndicator): RscPictureKeepAspect {
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(speedIndicator),_this select 0)]);
test = QUOTE(ace_IGUI_GRID_STANCE_X);
x = QUOTE(ace_IGUI_GRID_STANCE_X + IGUI_GRID_STANCE_WAbs / 2 - SPEED_INDICATOR_W / 2);
y = QUOTE(ace_IGUI_GRID_STANCE_Y + IGUI_GRID_STANCE_HAbs - SPEED_INDICATOR_Y_OFFSET);
w = QUOTE(SPEED_INDICATOR_W);

View File

@ -21,4 +21,5 @@
#define MOUSE_SCROLL_UP 0xF8
#define MOUSE_SCROLL_DOWN 0xF9
#define FUEL_FACTOR 0.165 // fuel capacity = range in km * FUEL_FACTOR
// fuel capacity = range in km * FUEL_FACTOR
#define FUEL_FACTOR 0.165

View File

@ -183,18 +183,18 @@ if (!hasInterface) exitWith {};
{false},
[0, [false, false, false]], false] call CBA_fnc_addKeybind; //Unbound (was 5 Key)
["ACE3 Vehicles", QGVAR(FireSmokeLauncher), localize LSTRING(FireSmokeLauncher), {
// Conditions: canInteract
if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if !(ACE_player != vehicle ACE_player && {ACE_player == commander vehicle ACE_player}) exitWith {false};
// ["ACE3 Vehicles", QGVAR(FireSmokeLauncher), localize LSTRING(FireSmokeLauncher), {
// // Conditions: canInteract
// if !([ACE_player, vehicle ACE_player, []] call EFUNC(common,canInteractWith)) exitWith {false};
// // Conditions: specific
// if !(ACE_player != vehicle ACE_player && {ACE_player == commander vehicle ACE_player}) exitWith {false};
// Statement
[vehicle ACE_player] call FUNC(fireSmokeLauncher);
true
},
{false},
[10, [false, false, false]], false] call CBA_fnc_addKeybind; //9 Key
// // Statement
// [vehicle ACE_player] call FUNC(fireSmokeLauncher);
// true
// },
// {false},
// [10, [false, false, false]], false] call CBA_fnc_addKeybind; //9 Key
["ACE3 Vehicles", QGVAR(CollisionLights), localize LSTRING(CollisionLights), {
// Conditions: canInteract

View File

@ -51,7 +51,7 @@ switch (false) do {
private _units = units _unit;
// Make sure all units are disembarked
{
if (vehicle _x != _x) then {
if (vehicle _x != _x && {!isPlayer _x}) then {
moveOut _x;
};
} forEach _units;

View File

@ -20,4 +20,4 @@
TRACE_1("params",_this);
#include "\a3\ui_f_curator\UI\Displays\RscDisplayAttributes.sqf"
#include "\a3\ui_f_curator\ui\displays\RscDisplayAttributes.sqf"

View File

@ -58,7 +58,7 @@ mklink /J "[Arma 3 installation folder]\z\ace" "[location of the ACE3 project]"
mklink /J "P:\z\ace" "[location of the ACE3 project]"
```
Then, copy the `cba` folder from the `tools` folder to `P:\x\cba`. Create the `x` folder if needed. That folder contains the parts of the CBA source code that are required for the macros to work.
Then, copy the `cba` folder from the `include\x` folder to `P:\x\cba`. Create the `x` folder if needed. That folder contains the parts of the CBA source code that are required for the macros to work.
## 4.2 Creating a Test Build

View File

@ -235,3 +235,9 @@ This function sets the current supply count of the ammo truck. It can be used to
---| --------- | -----------
0 | `ammo_truck` | My ammo truck object
1 | `1000`| Supply Count
## 4. Events
| Name | Arguments | Global? | Added in |
| ------------- | ------------- | ------------- |
| ace_rearm_sourceInitalized | Yes | Ammo truck (OBJECT) | 3.16.0 |

View File

@ -125,3 +125,10 @@ The jerry can will now have a volume of 200 liters.
---| --------- | -----------
0 | `cursorObject` | Fuel source object
1 | `100` | Fuel supply
## 3. Events
| Name | Arguments | Global? | Added in |
| ------------- | ------------- | ------------- |
| ace_refuel_sourceInitialized | Fuel source (OBJECT), items (BOOL or ARRAY) | Yes | 3.16.0 |
| ace_refuel_jerryCanInitalized | Jerry can (OBJECT) | Yes | 3.16.0 |

View File

@ -0,0 +1,624 @@
#include "\a3\ui_f\hpp\defineResincl.inc"
//--- RscDisplayCurator
#define IDC_RSCDISPLAYCURATOR_CREATEBACKGROUND 15505
#define IDC_RSCDISPLAYCURATOR_CLOCKDURATION 15506
#define IDC_RSCDISPLAYCURATOR_ENTITIESBACKGROUND 15508
#define IDC_RSCDISPLAYCURATOR_CLOCKDAYTIME 15509
#define IDC_RSCDISPLAYCURATOR_CREATECLASSESBACKGROUND 15510
#define IDC_RSCDISPLAYCURATOR_CLOCKCOUNTDOWN 15511
#define IDC_RSCDISPLAYCURATOR_FEEDBACKMESSAGE 15512
#define IDC_RSCDISPLAYCURATOR_POINTSBACKGROUND 15513
#define IDC_RSCDISPLAYCURATOR_POINTS 15515
#define IDC_RSCDISPLAYCURATOR_POINTSPREVIEW 15516
#define IDC_RSCDISPLAYCURATOR_COMPASSBACKGROUND 15518
#define IDC_RSCDISPLAYCURATOR_MODEUNITS 15704
#define IDC_RSCDISPLAYCURATOR_MODEGROUPS 15705
#define IDC_RSCDISPLAYCURATOR_MODEMODULES 15706
#define IDC_RSCDISPLAYCURATOR_MODEMARKERS 15708
#define IDC_RSCDISPLAYCURATOR_SIDEBLUFOR 15709
#define IDC_RSCDISPLAYCURATOR_SIDEOPFOR 15710
#define IDC_RSCDISPLAYCURATOR_SIDEINDEPENDENT 15711
#define IDC_RSCDISPLAYCURATOR_SIDECIVILIAN 15712
#define IDC_RSCDISPLAYCURATOR_SIDEEMPTY 15713
#define IDC_RSCDISPLAYCURATOR_LOGO 15715
#define IDC_RSCDISPLAYCURATOR_WATERMARK 15717
#define IDC_RSCDISPLAYCURATOR_MISSIONBARTITLE 16104
#define IDC_RSCDISPLAYCURATOR_ADDBARTITLE 16105
#define IDC_RSCDISPLAYCURATOR_MODEFRAME 16304
#define IDC_RSCDISPLAYCURATOR_SIDEFRAME 16305
#define IDC_RSCDISPLAYCURATOR_POINTSFRAME 16306
#define IDC_RSCDISPLAYCURATOR_CREATEFRAME 16307
#define IDC_RSCDISPLAYCURATOR_ENTITIESFRAME 16308
#define IDC_RSCDISPLAYCURATOR_ADDBARFRAME 16309
#define IDC_RSCDISPLAYCURATOR_CLOCKFRAME 16310
#define IDC_RSCDISPLAYCURATOR_MISSIONBARFRAME 16311
#define IDC_RSCDISPLAYCURATOR_COMPASSFRAME 16312
#define IDC_RSCDISPLAYCURATOR_COMPASSCARET 16314
#define IDC_RSCDISPLAYCURATOR_MISSION 16804
#define IDC_RSCDISPLAYCURATOR_ADDBAR 16805
#define IDC_RSCDISPLAYCURATOR_MAIN 16806
#define IDC_RSCDISPLAYCURATOR_ADD 16807
#define IDC_RSCDISPLAYCURATOR_CLOCK 16808
#define IDC_RSCDISPLAYCURATOR_MISSIONBAR 16809
#define IDC_RSCDISPLAYCURATOR_COMPASS 16810
//--- Engine Curator
#define IDD_RSCDISPLAYCURATOR 312
#define IDC_RSCDISPLAYCURATOR_SIDEBLUFOR 155
#define IDC_RSCDISPLAYCURATOR_SIDEOPFOR 156
#define IDC_RSCDISPLAYCURATOR_SIDEINDEPENDENT 157
#define IDC_RSCDISPLAYCURATOR_SIDECIVILIAN 158
#define IDC_RSCDISPLAYCURATOR_SIDEEMPTY 159
#define IDC_RSCDISPLAYCURATOR_MODEUNITS 150
#define IDC_RSCDISPLAYCURATOR_MODEGROUPS 151
#define IDC_RSCDISPLAYCURATOR_MODEMODULES 152
#define IDC_RSCDISPLAYCURATOR_MODEMARKERS 154
#define IDC_RSCDISPLAYCURATOR_MODERECENT 170
#define IDC_RSCDISPLAYCURATOR_ADD 450
#define IDC_RSCDISPLAYCURATOR_MISSION 453
#define IDC_RSCDISPLAYCURATOR_MAINMAP 50
#define IDC_RSCDISPLAYCURATOR_MOUSEAREA 53
#define IDC_RSCDISPLAYCURATOR_POINTS 111
#define IDC_RSCDISPLAYCURATOR_POINTSPREVIEW 112
#define IDC_RSCDISPLAYCURATOR_ENTITIES 251
#define IDC_RSCDISPLAYCURATOR_CREATE_UNITS_WEST 270
#define IDC_RSCDISPLAYCURATOR_CREATE_UNITS_EAST 271
#define IDC_RSCDISPLAYCURATOR_CREATE_UNITS_GUER 272
#define IDC_RSCDISPLAYCURATOR_CREATE_UNITS_CIV 273
#define IDC_RSCDISPLAYCURATOR_CREATE_UNITS_EMPTY 274
#define IDC_RSCDISPLAYCURATOR_CREATE_GROUPS_WEST 275
#define IDC_RSCDISPLAYCURATOR_CREATE_GROUPS_EAST 276
#define IDC_RSCDISPLAYCURATOR_CREATE_GROUPS_GUER 277
#define IDC_RSCDISPLAYCURATOR_CREATE_GROUPS_CIV 278
#define IDC_RSCDISPLAYCURATOR_CREATE_GROUPS_EMPTY 279
#define IDC_RSCDISPLAYCURATOR_CREATE_MODULES 280
#define IDC_RSCDISPLAYCURATOR_CREATE_MARKERS 281
#define IDC_RSCDISPLAYCURATOR_CREATE_RECENT 282
#define IDC_RSCDISPLAYCURATOR_CREATE_SEARCH 283
//#define IDC_RSCDISPLAYCURATOR_FILTERPLAYERS 282
//#define IDC_RSCDISPLAYCURATOR_FILTERAI 283
//#define IDC_RSCDISPLAYCURATOR_FILTERCREW 284
//#define IDC_RSCDISPLAYCURATOR_FILTERDEAD 285
//#define IDC_RSCDISPLAYCURATOR_FILTEREMPTY 286
//#define IDC_RSCDISPLAYCURATOR_FILTERMODULE 287
#define IDC_RSCDISPLAYCURATOR_BLACK 999
//--- RscCuratorPing
#define IDC_RSCCURATORPING_ICON 10674
#define IDC_RSCCURATORPING_PLAYER 10675
//--- RSCCURATORVISIONMODES
#define IDC_RSCCURATORVISIONMODES_VISIONMODE0 10463
#define IDC_RSCCURATORVISIONMODES_VISIONMODE1 10464
#define IDC_RSCCURATORVISIONMODES_VISIONMODE2 10465
#define IDC_RSCCURATORVISIONMODES_VISIONMODE3 10466
#define IDC_RSCCURATORVISIONMODES_VISIONMODE4 10467
#define IDC_RSCCURATORVISIONMODES_VISIONMODE5 10468
#define IDC_RSCCURATORVISIONMODES_VISIONMODE6 10469
#define IDC_RSCCURATORVISIONMODES_VISIONMODE7 10470
#define IDC_RSCCURATORVISIONMODES_VISIONMODE8 10471
#define IDC_RSCCURATORVISIONMODES_VISIONMODE9 10472
#define IDC_RSCCURATORVISIONMODES_FRAME 11263
#define IDC_RSCCURATORVISIONMODES_VISIONMODES 11763
//--- RscDisplayModuleSkiptime
#define IDC_RSCDISPLAYMODULESKIPTIME_BACKGROUND 1000
#define IDC_RSCDISPLAYMODULESKIPTIME_TITLE 1001
#define IDC_RSCDISPLAYMODULESKIPTIME_DESCRIPTION 1100
#define IDC_RSCDISPLAYMODULESKIPTIME_SLIDERVALUE 1003
#define IDC_RSCDISPLAYMODULESKIPTIME_SLIDER 1900
#define IDC_RSCDISPLAYMODULESKIPTIME_BUTTONOK 2600
#define IDC_RSCDISPLAYMODULESKIPTIME_BUTTONCANCEL 2700
//--- RscDisplayAttributes
#define IDC_RSCDISPLAYATTRIBUTES_BACKGROUND 30001
#define IDC_RSCDISPLAYATTRIBUTES_TITLE 30002
#define IDC_RSCDISPLAYATTRIBUTES_CONTENT 30003
#define IDC_RSCDISPLAYATTRIBUTES_BUTTONCUSTOM 30004
#define IDC_RSCDISPLAYATTRIBUTES_BUTTONOK 30005
#define IDC_RSCDISPLAYATTRIBUTES_BUTTONCANCEL 30006
#define IDC_RSCDISPLAYCURATORATTRIBUTES_TEXT 1000
#define IDC_RSCDISPLAYCURATORATTRIBUTES_STRUCTUREDTEXT 1100
#define IDC_RSCDISPLAYCURATORATTRIBUTES_PICTURE 1200
#define IDC_RSCDISPLAYCURATORATTRIBUTES_ACTIVETEXT 1300
#define IDC_RSCDISPLAYCURATORATTRIBUTES_EDIT 1400
#define IDC_RSCDISPLAYCURATORATTRIBUTES_COMBO 2100
#define IDC_RSCDISPLAYCURATORATTRIBUTES_LISTBOX 1500
#define IDC_RSCDISPLAYCURATORATTRIBUTES_SLIDER 1900
//--- RscAttributeRank
#define IDC_RSCATTRIBUTERANK_BACKGROUND 13469
#define IDC_RSCATTRIBUTERANK_TITLE 13471
#define IDC_RSCATTRIBUTERANK_PRIVATE 13669
#define IDC_RSCATTRIBUTERANK_CORPORAL 13670
#define IDC_RSCATTRIBUTERANK_SERGEANT 13671
#define IDC_RSCATTRIBUTERANK_LIEUTENANT 13672
#define IDC_RSCATTRIBUTERANK_CAPTAIN 13673
#define IDC_RSCATTRIBUTERANK_MAJOR 13674
#define IDC_RSCATTRIBUTERANK_COLONEL 13675
#define IDC_RSCATTRIBUTERANK_RSCATTRIBUTERANK 14769
//--- RscAttributeUnitPos
#define IDC_RSCATTRIBUTEUNITPOS_BACKGROUND 18976
#define IDC_RSCATTRIBUTEUNITPOS_TITLE 18978
#define IDC_RSCATTRIBUTEUNITPOS_DOWN 19176
#define IDC_RSCATTRIBUTEUNITPOS_CROUCH 19177
#define IDC_RSCATTRIBUTEUNITPOS_UP 19178
#define IDC_RSCATTRIBUTEUNITPOS_AUTO 19179
#define IDC_RSCATTRIBUTEUNITPOS_RSCATTRIBUTEUNITPOS 20276
//--- RscAttributeDamage
#define IDC_RSCATTRIBUTEDAMAGE_TITLE 16502
#define IDC_RSCATTRIBUTEDAMAGE_VALUE 17402
#define IDC_RSCATTRIBUTEDAMAGE_RSCATTRIBUTEDAMAGE 17802
//--- RscAttributeFuel
#define IDC_RSCATTRIBUTEFUEL_TITLE 13474
#define IDC_RSCATTRIBUTEFUEL_VALUE 14374
#define IDC_RSCATTRIBUTEFUEL_RSCATTRIBUTEFUEL 14774
//--- RscAttributeSide
#define IDC_RSCATTRIBUTESIDE_BACKGROUND 31000
#define IDC_RSCATTRIBUTESIDE_TITLE 31002
#define IDC_RSCATTRIBUTESIDE_BLUFOR 31200
#define IDC_RSCATTRIBUTESIDE_OPFOR 31201
#define IDC_RSCATTRIBUTESIDE_INDEPENDENT 31202
#define IDC_RSCATTRIBUTESIDE_CIVILIAN 31203
#define IDC_RSCATTRIBUTESIDE_RSCATTRIBUTESIDE 32300
//--- RscAttributeOwners
/*
#define IDC_RSCATTRIBUTEOWNERS_BACKGROUND 31000
#define IDC_RSCATTRIBUTEOWNERS_TITLE 31002
#define IDC_RSCATTRIBUTEOWNERS_BLUFOR 31200
#define IDC_RSCATTRIBUTEOWNERS_OPFOR 31201
#define IDC_RSCATTRIBUTEOWNERS_INDEPENDENT 31202
#define IDC_RSCATTRIBUTEOWNERS_CIVILIAN 31203
#define IDC_RSCATTRIBUTEOWNERS_RSCATTRIBUTEOWNERS 32300
*/
//--- RscAttributeOwners
#define IDC_RSCATTRIBUTEOWNERS_BACKGROUND 17408
#define IDC_RSCATTRIBUTEOWNERS_TITLE 17410
#define IDC_RSCATTRIBUTEOWNERS_BLUFOR 17608
#define IDC_RSCATTRIBUTEOWNERS_OPFOR 17609
#define IDC_RSCATTRIBUTEOWNERS_INDEPENDENT 17610
#define IDC_RSCATTRIBUTEOWNERS_CIVILIAN 17611
#define IDC_RSCATTRIBUTEOWNERS_TABSIDE 18010
#define IDC_RSCATTRIBUTEOWNERS_TABGROUP 18011
#define IDC_RSCATTRIBUTEOWNERS_TABUNIT 18012
#define IDC_RSCATTRIBUTEOWNERS_GROUPLIST 18508
#define IDC_RSCATTRIBUTEOWNERS_UNITLIST 18509
#define IDC_RSCATTRIBUTEOWNERS_RSCATTRIBUTEOWNERS 18708
//--- RscAttributeOwners2
#define IDC_RSCATTRIBUTEOWNERS2_BACKGROUND1 18308
#define IDC_RSCATTRIBUTEOWNERS2_TITLE2 18309
#define IDC_RSCATTRIBUTEOWNERS2_TITLE1 18310
#define IDC_RSCATTRIBUTEOWNERS2_BACKGROUND2 18311
#define IDC_RSCATTRIBUTEOWNERS2_BLUFOR1 18508
#define IDC_RSCATTRIBUTEOWNERS2_OPFOR1 18509
#define IDC_RSCATTRIBUTEOWNERS2_INDEPENDENT1 18510
#define IDC_RSCATTRIBUTEOWNERS2_CIVILIAN1 18511
#define IDC_RSCATTRIBUTEOWNERS2_BLUFOR2 18512
#define IDC_RSCATTRIBUTEOWNERS2_OPFOR2 18513
#define IDC_RSCATTRIBUTEOWNERS2_INDEPENDENT2 18514
#define IDC_RSCATTRIBUTEOWNERS2_CIVILIAN2 18515
#define IDC_RSCATTRIBUTEOWNERS2_RSCATTRIBUTEOWNERS2 19608
//--- RscAttributeTaskState
#define IDC_RSCATTRIBUTETASKSTATE_BACKGROUND 41000
#define IDC_RSCATTRIBUTETASKSTATE_TITLE 41002
#define IDC_RSCATTRIBUTETASKSTATE_ASSIGNED 41200
#define IDC_RSCATTRIBUTETASKSTATE_CREATED 41201
#define IDC_RSCATTRIBUTETASKSTATE_SUCCEEDED 41202
#define IDC_RSCATTRIBUTETASKSTATE_FAILED 41203
#define IDC_RSCATTRIBUTETASKSTATE_CANCELED 41204
#define IDC_RSCATTRIBUTETASKSTATE_RSCATTRIBUTETASKSTATE 42300
//--- RscAttributeTaskDescription
#define IDC_RSCATTRIBUTETASKDESCRIPTION_TITLEMARKER 38091
#define IDC_RSCATTRIBUTETASKDESCRIPTION_TITLEDESCRIPTION 38092
#define IDC_RSCATTRIBUTETASKDESCRIPTION_TITLETITLE 38093
#define IDC_RSCATTRIBUTETASKDESCRIPTION_TITLETEMPLATE 38094
#define IDC_RSCATTRIBUTETASKDESCRIPTION_EDITTITLE 38491
#define IDC_RSCATTRIBUTETASKDESCRIPTION_EDITMARKER 38492
#define IDC_RSCATTRIBUTETASKDESCRIPTION_EDITDESCRIPTION 38493
#define IDC_RSCATTRIBUTETASKDESCRIPTION_EDITTEMPLATE 39191
#define IDC_RSCATTRIBUTETASKDESCRIPTION_RSCATTRIBUTETASKDESCRIPTION 39391
//--- RscAttributeSkiptime
#define IDC_RSCATTRIBUTESKIPTIME_TITLE 21138
#define IDC_RSCATTRIBUTESKIPTIME_TIME 21139
#define IDC_RSCATTRIBUTESKIPTIME_BACKGROUND 21140
#define IDC_RSCATTRIBUTESKIPTIME_SKIPTIME 21141
#define IDC_RSCATTRIBUTESKIPTIME_VALUE 22038
#define IDC_RSCATTRIBUTESKIPTIME_RSCATTRIBUTESKIPTIME 22438
//--- RscAttributeSound
#define IDC_RSCATTRIBUTESOUND_TITLE 15406
#define IDC_RSCATTRIBUTESOUND_VALUE 16506
#define IDC_RSCATTRIBUTESOUND_RSCATTRIBUTESOUND 16706
//--- RscAttributeMusic
#define IDC_RSCATTRIBUTEMUSIC_TITLE 15293
#define IDC_RSCATTRIBUTEMUSIC_VALUE 16393
#define IDC_RSCATTRIBUTEMUSIC_RSCATTRIBUTEMUSIC 16593
//--- RscAttributeMusicVolume
#define IDC_RSCATTRIBUTEMUSICVOLUME_TITLE 27656
#define IDC_RSCATTRIBUTEMUSICVOLUME_VALUE 28556
#define IDC_RSCATTRIBUTEMUSICVOLUME_RSCATTRIBUTEMUSICVOLUME 28956
//--- RscAttributeGenericRadio
#define IDC_RSCATTRIBUTEGENERICRADIO_TITLE 29151
#define IDC_RSCATTRIBUTEGENERICRADIO_VALUE 29651
#define IDC_RSCATTRIBUTEGENERICRADIO_RSCATTRIBUTEGENERICRADIO 30451
//--- RscAttributeDiaryRecord
#define IDC_RSCATTRIBUTEDIARYRECORD_IMAGETITLE 27171
#define IDC_RSCATTRIBUTEDIARYRECORD_DESCRIPTIONTITLE 27172
#define IDC_RSCATTRIBUTEDIARYRECORD_TITLETITLE 27173
#define IDC_RSCATTRIBUTEDIARYRECORD_IMAGETREE 27174
#define IDC_RSCATTRIBUTEDIARYRECORD_TEMPLATETITLE 27175
#define IDC_RSCATTRIBUTEDIARYRECORD_IMAGEPREVIEW 27371
#define IDC_RSCATTRIBUTEDIARYRECORD_TITLEEDIT 27571
#define IDC_RSCATTRIBUTEDIARYRECORD_DESCRIPTIONEDIT 27573
#define IDC_RSCATTRIBUTEDIARYRECORD_TEMPLATELIST 28271
#define IDC_RSCATTRIBUTEDIARYRECORD_RSCATTRIBUTEDIARYRECORD 28471
//--- RscAttributeOvercast
#define IDC_RSCATTRIBUTEOVERCAST_BACKGROUND 21192
#define IDC_RSCATTRIBUTEOVERCAST_TITLE 21194
#define IDC_RSCATTRIBUTEOVERCAST_VALUE000 21392
#define IDC_RSCATTRIBUTEOVERCAST_VALUE025 21393
#define IDC_RSCATTRIBUTEOVERCAST_VALUE050 21394
#define IDC_RSCATTRIBUTEOVERCAST_VALUE075 21395
#define IDC_RSCATTRIBUTEOVERCAST_VALUE100 21396
#define IDC_RSCATTRIBUTEOVERCAST_RSCATTRIBUTEOVERCAST 22492
//--- RscAttributeFog
#define IDC_RSCATTRIBUTEFOG_TITLE 11804
#define IDC_RSCATTRIBUTEFOG_ALTTITLE 11805
#define IDC_RSCATTRIBUTEFOG_VALUE 12704
#define IDC_RSCATTRIBUTEFOG_ALTVALUE 12705
#define IDC_RSCATTRIBUTEFOG_RSCATTRIBUTEFOG 13104
//--- RscAttributePostprocess
#define IDC_RSCATTRIBUTEPOSTPROCESS_TITLE 28406
#define IDC_RSCATTRIBUTEPOSTPROCESS_VALUE 28906
#define IDC_RSCATTRIBUTEPOSTPROCESS_RSCATTRIBUTEPOSTPROCESS 29706
//--- RscAttributeGroupID
#define IDC_RSCATTRIBUTEGROUPID_TITLE 17979
#define IDC_RSCATTRIBUTEGROUPID_VALUE 18379
#define IDC_RSCATTRIBUTEGROUPID_RSCATTRIBUTEGROUPID 19279
//--- RscAttributeFormation
#define IDC_RSCATTRIBUTEFORMATION_BACKGROUND 23316
#define IDC_RSCATTRIBUTEFORMATION_TITLE 23318
#define IDC_RSCATTRIBUTEFORMATION_COLUMN 23516
#define IDC_RSCATTRIBUTEFORMATION_STAG_COLUMN 23517
#define IDC_RSCATTRIBUTEFORMATION_WEDGE 23518
#define IDC_RSCATTRIBUTEFORMATION_ECH_LEFT 23519
#define IDC_RSCATTRIBUTEFORMATION_ECH_RIGHT 23520
#define IDC_RSCATTRIBUTEFORMATION_VEE 23521
#define IDC_RSCATTRIBUTEFORMATION_LINE 23522
#define IDC_RSCATTRIBUTEFORMATION_FILE 23523
#define IDC_RSCATTRIBUTEFORMATION_DIAMOND 23524
#define IDC_RSCATTRIBUTEFORMATION_DEFAULT 23525
#define IDC_RSCATTRIBUTEFORMATION_RSCATTRIBUTEFORMATION 24616
//--- RscAttributeBehaviour
#define IDC_RSCATTRIBUTEBEHAVIOUR_BACKGROUND 23269
#define IDC_RSCATTRIBUTEBEHAVIOUR_TITLE 23271
#define IDC_RSCATTRIBUTEBEHAVIOUR_STEALTH 23469
#define IDC_RSCATTRIBUTEBEHAVIOUR_DEFAULT 23470
#define IDC_RSCATTRIBUTEBEHAVIOUR_SAFE 23471
#define IDC_RSCATTRIBUTEBEHAVIOUR_AWARE 23474
#define IDC_RSCATTRIBUTEBEHAVIOUR_COMBAT 23475
#define IDC_RSCATTRIBUTEBEHAVIOUR_RSCATTRIBUTEBEHAVIOUR 24569
//--- RscAttributeLock
#define IDC_RSCATTRIBUTELOCK_BACKGROUND 13425
#define IDC_RSCATTRIBUTELOCK_TITLE 13427
#define IDC_RSCATTRIBUTELOCK_LOCKED 13627
#define IDC_RSCATTRIBUTELOCK_UNLOCKED 13630
#define IDC_RSCATTRIBUTELOCK_RSCATTRIBUTELOCK 14725
//--- RscAttributeMarkerText
#define IDC_RSCATTRIBUTEMARKERTEXT_TITLE 25286
#define IDC_RSCATTRIBUTEMARKERTEXT_VALUE 25686
#define IDC_RSCATTRIBUTEMARKERTEXT_RSCATTRIBUTEMARKERTEXT 26586
//--- RscAttributeMarkerColor
#define IDC_RSCATTRIBUTEMARKERCOLOR_BACKGROUND 27333
#define IDC_RSCATTRIBUTEMARKERCOLOR_TITLE 27335
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR3 27533
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR4 27534
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR1 27535
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR5 27536
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR6 27537
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR2 27538
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR7 27539
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR8 27540
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR9 27541
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR10 27542
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR11 27543
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR12 27544
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR13 27545
#define IDC_RSCATTRIBUTEMARKERCOLOR_COLOR14 27546
#define IDC_RSCATTRIBUTEMARKERCOLOR_RSCATTRIBUTEMARKERCOLOR 28633
//--- RscAttributeRespawnVehicle
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_BACKGROUND 34763
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_TITLE 34765
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_START 34963
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_WEST 34964
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_EAST 34965
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_GUER 34966
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_CIV 34967
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_DISABLED 34968
#define IDC_RSCATTRIBUTERESPAWNVEHICLE_RSCATTRIBUTERESPAWNVEHICLE 36063
//--- RscAttributeSkill
#define IDC_RSCATTRIBUTESKILL_TITLE 15284
#define IDC_RSCATTRIBUTESKILL_VALUE 16184
#define IDC_RSCATTRIBUTESKILL_RSCATTRIBUTESKILL 16584
//--- RscAttributeRespawnPosition
#define IDC_RSCATTRIBUTERESPAWNPOSITION_BACKGROUND 38509
#define IDC_RSCATTRIBUTERESPAWNPOSITION_TITLE 38511
#define IDC_RSCATTRIBUTERESPAWNPOSITION_WEST 38710
#define IDC_RSCATTRIBUTERESPAWNPOSITION_EAST 38711
#define IDC_RSCATTRIBUTERESPAWNPOSITION_GUER 38712
#define IDC_RSCATTRIBUTERESPAWNPOSITION_CIV 38713
#define IDC_RSCATTRIBUTERESPAWNPOSITION_DISABLED 38714
#define IDC_RSCATTRIBUTERESPAWNPOSITION_RSCATTRIBUTERESPAWNPOSITION 39809
//--- RscAttributeText
#define IDC_RSCATTRIBUTETEXT_TITLE 13920
#define IDC_RSCATTRIBUTETEXT_RSCATTRIBUTETEXT 15120
//--- RscAttributeAreaSize
#define IDC_RSCATTRIBUTEAREASIZE_TITLE 20438
#define IDC_RSCATTRIBUTEAREASIZE_VALUE 20439
#define IDC_RSCATTRIBUTEAREASIZE_RSCATTRIBUTEAREASIZE 21738
//--- RscAttributeRespawnTickets
#define IDC_RSCATTRIBUTERESPAWNTICKETS_BACKGROUND 35332
#define IDC_RSCATTRIBUTERESPAWNTICKETS_WESTTEXT 35333
#define IDC_RSCATTRIBUTERESPAWNTICKETS_EASTTEXT 35334
#define IDC_RSCATTRIBUTERESPAWNTICKETS_GUERTEXT 35335
#define IDC_RSCATTRIBUTERESPAWNTICKETS_CIVTEXT 35336
#define IDC_RSCATTRIBUTERESPAWNTICKETS_TITLE 35337
#define IDC_RSCATTRIBUTERESPAWNTICKETS_VALUE 35338
#define IDC_RSCATTRIBUTERESPAWNTICKETS_WEST 35532
#define IDC_RSCATTRIBUTERESPAWNTICKETS_EAST 35533
#define IDC_RSCATTRIBUTERESPAWNTICKETS_GUER 35534
#define IDC_RSCATTRIBUTERESPAWNTICKETS_CIV 35535
#define IDC_RSCATTRIBUTERESPAWNTICKETS_WESTVALUE 36232
#define IDC_RSCATTRIBUTERESPAWNTICKETS_EASTVALUE 36233
#define IDC_RSCATTRIBUTERESPAWNTICKETS_GUERVALUE 36234
#define IDC_RSCATTRIBUTERESPAWNTICKETS_CIVVALUE 36235
#define IDC_RSCATTRIBUTERESPAWNTICKETS_RSCATTRIBUTERESPAWNTICKETS 36632
//--- RscAttributeCountdown
#define IDC_RSCATTRIBUTECOUNTDOWN_TITLE 23629
#define IDC_RSCATTRIBUTECOUNTDOWN_TIME 23630
#define IDC_RSCATTRIBUTECOUNTDOWN_BACKGROUND 23631
#define IDC_RSCATTRIBUTECOUNTDOWN_VALUE 24529
#define IDC_RSCATTRIBUTECOUNTDOWN_RSCATTRIBUTECOUNTDOWN 24929
//--- RscAttributeEndMission
#define IDC_RSCATTRIBUTEENDMISSION_TITLE 25122
#define IDC_RSCATTRIBUTEENDMISSION_TITLEDEBRIEFING 25123
#define IDC_RSCATTRIBUTEENDMISSION_DEBRIEFING 25522
#define IDC_RSCATTRIBUTEENDMISSION_VALUE 25622
#define IDC_RSCATTRIBUTEENDMISSION_RSCATTRIBUTEENDMISSION 26422
//--- RscAttributeName
#define IDC_RSCATTRIBUTENAME_TITLE 13317
#define IDC_RSCATTRIBUTENAME_VALUE 13717
#define IDC_RSCATTRIBUTENAME_RSCATTRIBUTENAME 14617
//--- RscAttributeInventory
#define IDC_RSCATTRIBUTEINVENTORY_LOAD 23868
#define IDC_RSCATTRIBUTEINVENTORY_LISTBACKGROUND 23869
#define IDC_RSCATTRIBUTEINVENTORY_FILTERBACKGROUND 23870
#define IDC_RSCATTRIBUTEINVENTORY_FILTER0 24068
#define IDC_RSCATTRIBUTEINVENTORY_FILTER1 24069
#define IDC_RSCATTRIBUTEINVENTORY_FILTER2 24070
#define IDC_RSCATTRIBUTEINVENTORY_FILTER3 24071
#define IDC_RSCATTRIBUTEINVENTORY_FILTER4 24072
#define IDC_RSCATTRIBUTEINVENTORY_FILTER5 24073
#define IDC_RSCATTRIBUTEINVENTORY_FILTER6 24074
#define IDC_RSCATTRIBUTEINVENTORY_FILTER7 24075
#define IDC_RSCATTRIBUTEINVENTORY_FILTER8 24076
#define IDC_RSCATTRIBUTEINVENTORY_FILTER9 24077
#define IDC_RSCATTRIBUTEINVENTORY_FILTER10 24078
#define IDC_RSCATTRIBUTEINVENTORY_FILTER11 24079
#define IDC_RSCATTRIBUTEINVENTORY_FILTER12 24080
#define IDC_RSCATTRIBUTEINVENTORY_LIST 24368
#define IDC_RSCATTRIBUTEINVENTORY_ARROWLEFT 24468
#define IDC_RSCATTRIBUTEINVENTORY_ARROWRIGHT 24469
#define IDC_RSCATTRIBUTEINVENTORY_RSCATTRIBUTEINVENTORY 25168
//--- RscAttributeRespawnInventory
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_LISTBACKGROUND 41829
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_FILTERBACKGROUND 41830
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_FILTER0 42028
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_FILTER1 42029
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_FILTER2 42030
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_FILTER3 42031
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_TREEWEST 42328
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_TREEEAST 42329
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_TREEGUER 42330
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_TREECIV 42331
#define IDC_RSCATTRIBUTERESPAWNINVENTORY_RSCATTRIBUTERESPAWNINVENTORY 43128
//--- RscAttributeCAS
#define IDC_RSCATTRIBUTECAS_TITLE 10890
#define IDC_RSCATTRIBUTECAS_VALUE 11390
#define IDC_RSCATTRIBUTECAS_RSCATTRIBUTECAS 12190
//--- RscAttributeExec
#define IDC_RSCATTRIBUTEEXEC_TITLE 13366
#define IDC_RSCATTRIBUTEEXEC_VALUE 13766
#define IDC_RSCATTRIBUTEEXEC_VALUETEMPLATE 14466
#define IDC_RSCATTRIBUTEEXEC_RSCATTRIBUTEEXEC 14666
//--- RSCATTRIBUTEMISSIONNAME
#define IDC_RSCATTRIBUTEMISSIONNAME_TITLE 20175
#define IDC_RSCATTRIBUTEMISSIONNAME_PREVIEWTITLE 20176
#define IDC_RSCATTRIBUTEMISSIONNAME_PREVIEW 20275
#define IDC_RSCATTRIBUTEMISSIONNAME_VALUE 20575
#define IDC_RSCATTRIBUTEMISSIONNAME_RSCATTRIBUTEMISSIONNAME 21475
//--- RscAttributeSpeedMode
#define IDC_RSCATTRIBUTESPEEDMODE_BACKGROUND 22287
#define IDC_RSCATTRIBUTESPEEDMODE_TITLE 22289
#define IDC_RSCATTRIBUTESPEEDMODE_DEFAULT 22488
#define IDC_RSCATTRIBUTESPEEDMODE_LIMITED 22489
#define IDC_RSCATTRIBUTESPEEDMODE_NORMAL 22492
#define IDC_RSCATTRIBUTESPEEDMODE_FULL 22493
#define IDC_RSCATTRIBUTESPEEDMODE_RSCATTRIBUTESPEEDMODE 23587
//--- RscAttributeTaskDestination
#define IDC_RSCATTRIBUTETASKDESTINATION_BACKGROUND 38009
#define IDC_RSCATTRIBUTETASKDESTINATION_VALUE 38010
#define IDC_RSCATTRIBUTETASKDESTINATION_TITLE 38011
#define IDC_RSCATTRIBUTETASKDESTINATION_RSCATTRIBUTETASKDESTINATION 39309
//--- RscAttributeWaypointType
#define IDC_RSCATTRIBUTEWAYPOINTTYPE_BACKGROUND 30511
#define IDC_RSCATTRIBUTEWAYPOINTTYPE_TITLE 30513
#define IDC_RSCATTRIBUTEWAYPOINTTYPE_VALUE 31011
#define IDC_RSCATTRIBUTEWAYPOINTTYPE_RSCATTRIBUTEWAYPOINTTYPE 31811
//--- RscAttributeWaypointTimeout
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_TITLE 38714
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_BUTTONTIME00 39314
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_BUTTONTIME05 39316
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_BUTTONTIME10 39317
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_BUTTONTIME15 39318
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_BUTTONTIME20 39319
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_BUTTONTIME25 39320
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_BUTTONTIME30 39321
#define IDC_RSCATTRIBUTEWAYPOINTTIMEOUT_RSCATTRIBUTEWAYPOINTTIMEOUT 40014
//--- RscAttributeTimeMultiplier
#define IDC_RSCATTRIBUTETIMEMULTIPLIER_TITLE 35379
#define IDC_RSCATTRIBUTETIMEMULTIPLIER_MULTIPLIER 35380
#define IDC_RSCATTRIBUTETIMEMULTIPLIER_BACKGROUND 35381
#define IDC_RSCATTRIBUTETIMEMULTIPLIER_EXAMPLE 35382
#define IDC_RSCATTRIBUTETIMEMULTIPLIER_VALUE 36279
#define IDC_RSCATTRIBUTETIMEMULTIPLIER_RSCATTRIBUTETIMEMULTIPLIER 36679
//--- RscAttributeHintTopics
#define IDC_RSCATTRIBUTEHINTTOPICS_TITLE 25225
#define IDC_RSCATTRIBUTEHINTTOPICS_VALUE 25725
#define IDC_RSCATTRIBUTEHINTTOPICS_RSCATTRIBUTEHINTTOPICS 26525
//--- RscAttributeBootcampStage
#define IDC_RSCATTRIBUTEBOOTCAMPSTAGE_BACKGROUND 31954
#define IDC_RSCATTRIBUTEBOOTCAMPSTAGE_TITLE 31956
#define IDC_RSCATTRIBUTEBOOTCAMPSTAGE_INFANTRY 32154
#define IDC_RSCATTRIBUTEBOOTCAMPSTAGE_MOTORIZEDVEHICLES 32155
#define IDC_RSCATTRIBUTEBOOTCAMPSTAGE_RSCATTRIBUTEBOOTCAMPSTAGE 33254
//--- RscAttributeHintCustom
#define IDC_RSCATTRIBUTEHINTCUSTOM_TITLETITLE 25434
#define IDC_RSCATTRIBUTEHINTCUSTOM_EDITTITLE 25832
#define IDC_RSCATTRIBUTEHINTCUSTOM_RSCATTRIBUTEHINTCUSTOM 26732
//--- RscAttributePunishmentAnimation
#define IDC_RSCATTRIBUTEPUNISHMENTANIMATION_BACKGROUND 50118
#define IDC_RSCATTRIBUTEPUNISHMENTANIMATION_TITLE 50120
#define IDC_RSCATTRIBUTEPUNISHMENTANIMATION_PUSHUPS 50318
#define IDC_RSCATTRIBUTEPUNISHMENTANIMATION_LEGPUSHUPS 50319
#define IDC_RSCATTRIBUTEPUNISHMENTANIMATION_RSCATTRIBUTEPUNISHMENTANIMATION 51418
//--- RscAttributeTargetPopup
#define IDC_RSCATTRIBUTETARGETPOPUP_BACKGROUND 27787
#define IDC_RSCATTRIBUTETARGETPOPUP_VALUE 27788
#define IDC_RSCATTRIBUTETARGETPOPUP_TITLE 27789
#define IDC_RSCATTRIBUTETARGETPOPUP_RSCATTRIBUTETARGETPOPUP 29087
//--- RscAttributeTargetPopupDelay
#define IDC_RSCATTRIBUTETARGETPOPUPDELAY_TITLE 40264
#define IDC_RSCATTRIBUTETARGETPOPUPDELAY_VALUE 41164
#define IDC_RSCATTRIBUTETARGETPOPUPDELAY_RSCATTRIBUTETARGETPOPUPDELAY 41564
//--- RscAttributeTargetData
#define IDC_RSCATTRIBUTETARGETDATA_VALUE 25001
#define IDC_RSCATTRIBUTETARGETDATA_RSCATTRIBUTETARGETDATA 25801
//--- RscAttributeTargetDataStore
#define IDC_RSCATTRIBUTETARGETDATASTORE_BACKGROUND 37135
#define IDC_RSCATTRIBUTETARGETDATASTORE_VALUE 37136
#define IDC_RSCATTRIBUTETARGETDATASTORE_TITLE 37137
#define IDC_RSCATTRIBUTETARGETDATASTORE_RSCATTRIBUTETARGETDATASTORE 38435
//--- RscAttributeTargetTexture
#define IDC_RSCATTRIBUTETARGETTEXTURE_BACKGROUND 32964
#define IDC_RSCATTRIBUTETARGETTEXTURE_TITLE 32966
#define IDC_RSCATTRIBUTETARGETTEXTURE_PREVIEW 33167
#define IDC_RSCATTRIBUTETARGETTEXTURE_TEXTURELIST 33464
#define IDC_RSCATTRIBUTETARGETTEXTURE_RSCATTRIBUTETARGETTEXTURE 34264
#define IDC_RSCATTRIBUTETARGETTEXTURE_OVERLAP 34265
//--- RscAttributeTargetState
#define IDC_RSCATTRIBUTETARGETSTATE_BACKGROUND 27373
#define IDC_RSCATTRIBUTETARGETSTATE_VALUE 27374
#define IDC_RSCATTRIBUTETARGETSTATE_TITLE 27375
#define IDC_RSCATTRIBUTETARGETSTATE_RSCATTRIBUTETARGETSTATE 28673
//--- RscDisplayTargetBoard
#define IDC_RSCDISPLAYTARGETBOARD_TABLE 22928
#define IDC_RSCDISPLAYTARGETBOARD_BACKGROUNDTITLE 23628
#define IDC_RSCDISPLAYTARGETBOARD_BACKGROUND 23629
#define IDC_RSCDISPLAYTARGETBOARD_BUTTONOK 24028
//--- RscDisplayFiringRangeBoard
#define IDC_RSCDISPLAYFIRINGRANGEBOARD_TABLE 34191
#define IDC_RSCDISPLAYFIRINGRANGEBOARD_BACKGROUNDTITLE 34891
#define IDC_RSCDISPLAYFIRINGRANGEBOARD_BUTTONOK 35291
//--- RscDisplayTimeTrialBoard
#define IDC_RSCDISPLAYTIMETRIALBOARD_TABLE 29399
#define IDC_RSCDISPLAYTIMETRIALBOARD_BACKGROUNDTITLE 30099
#define IDC_RSCDISPLAYTIMETRIALBOARD_BUTTONOK 30499
//--- RscRecruitStatus
#define IDC_RSCRECRUITSTATUS_PROGRESSBAR 13986
#define IDC_RSCRECRUITSTATUS_TITLE 14086
#define IDC_RSCRECRUITSTATUS_DESCRIPTION 14087
#define IDC_RSCRECRUITSTATUS_LIST 14486
#define IDC_RSCRECRUITSTATUS_BACKGROUND 15186
#define IDC_RSCMISSIONTEXT 20145
#define IDC_RSCMISSIONTEXT_TEXT 20146
//--- RscVRMeta
#define IDC_RSCVRMETA_BACKGROUNDFATIGUE 4478
#define IDC_RSCVRMETA_BACKGROUNDSPEED 4479
#define IDC_RSCVRMETA_BACKGROUNDLOAD 4480
#define IDC_RSCVRMETA_BACKGROUNDTGT 4481
#define IDC_RSCVRMETA_PROGRESSLOAD 4482
#define IDC_RSCVRMETA_PROGRESSFATIGUE 4483
#define IDC_RSCVRMETA_PROGRESSSPEED 4484
#define IDC_RSCVRMETA_TEXTLOAD 4485
#define IDC_RSCVRMETA_TEXTFATIGUE 4486
#define IDC_RSCVRMETA_TEXTSPEED 4487
#define IDC_RSCVRMETA_VALUELOAD 4488
#define IDC_RSCVRMETA_VALUEFATIGUE 4489
#define IDC_RSCVRMETA_VALUESPEED 4490
#define IDC_RSCVRMETA_TEXTTGT 4491
#define IDC_RSCVRMETA_PROGRESSTGT 4492
#define IDC_RSCVRMETA_VALUETGT 4494
#define IDC_RSCVRMETA_VALUETGTDMG 4495
#define IDC_RSCVRMETA_VRMETA 5778

View File

@ -0,0 +1,140 @@
#include "\a3\ui_f_curator\ui\defineResinclDesign.inc"
_mode = _this select 0;
_params = _this select 1;
_class = _this select 2;
switch _mode do {
case "onLoad": {
_display = _params select 0;
_displayConfig = configfile >> _class;
_ctrlBackground = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_BACKGROUND;
_ctrlTitle = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_TITLE;
_ctrlContent = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_CONTENT;
_ctrlButtonOK = _display displayctrl IDC_OK;
_ctrlButtonCancel = _display displayctrl IDC_CANCEL;
_ctrlButtonCustom = _display displayctrl IDC_RSCDISPLAYATTRIBUTES_BUTTONCUSTOM;
_ctrlBackgroundPos = ctrlposition _ctrlBackground;
_ctrlTitlePos = ctrlposition _ctrlTitle;
_ctrlContentPos = ctrlposition _ctrlContent;
_ctrlButtonOKPos = ctrlposition _ctrlButtonOK;
_ctrlButtonCancelPos = ctrlposition _ctrlButtonCancel;
_ctrlButtonCustomPos = ctrlposition _ctrlButtonCustom;
_ctrlTitleOffsetY = (_ctrlBackgroundPos select 1) - (_ctrlTitlePos select 1) - (_ctrlTitlePos select 3);
_ctrlContentOffsetY = (_ctrlContentPos select 1) - (_ctrlBackgroundPos select 1);
//--- Show fake map in the background
_ctrlMap = _display displayctrl IDC_RSCDISPLAYCURATOR_MAINMAP;
_ctrlMap ctrlenable false;
if (visiblemap) then {
_ctrlCuratorMap = (finddisplay IDD_RSCDISPLAYCURATOR) displayctrl IDC_RSCDISPLAYCURATOR_MAINMAP;
_ctrlMap ctrlmapanimadd [0,ctrlmapscale _ctrlCuratorMap,_ctrlCuratorMap ctrlmapscreentoworld [0.5,0.5]];
ctrlmapanimcommit _ctrlMap;
} else {
_ctrlMap ctrlshow false;
};
//--- Load default attributes
_attributes = if (getnumber (_displayConfig >> "filterAttributes") > 0) then {missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_attributes",[]]} else {["%ALL"]};
_allAttributes = "%ALL" in _attributes;
//--- Initialize attributes
_posY = _ctrlContentOffsetY;
_contentControls = _displayConfig >> "Controls" >> "Content" >> "Controls";
_enableDebugConsole = ["DebugConsole",getnumber (missionconfigfile >> "enableDebugConsole")] call bis_fnc_getParamValue;
_enableAdmin = (_enableDebugConsole == 1 && (isserver || serverCommandAvailable "#shutdown")) || _enableDebugConsole == 2;
for "_i" from 0 to (count _contentControls - 1) do {
_cfgControl = _contentControls select _i;
if (isclass _cfgControl) then {
_idc = getnumber (_cfgControl >> "idc");
_control = _display displayctrl _idc;
//--- Admin specific attribute
_show = if (getnumber (_cfgControl >> "adminOnly") > 0) then {_enableAdmin} else {true};
if ((_allAttributes || {_x == configname _cfgControl} count _attributes > 0) && _show) then {
_controlPos = ctrlposition _control;
_controlPos set [0,0];
_controlPos set [1,_posY];
_control ctrlsetposition _controlPos;
_control ctrlcommit 0;
_posY = _posY + (_controlPos select 3) + 0.005;
ctrlsetfocus _control;
} else {
_control ctrlsetposition [0,0,0,0];
_control ctrlcommit 0;
_control ctrlshow false;
};
};
};
_posH = ((_posY + _ctrlContentOffsetY) min 0.9) * 0.5;
_target = missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_target",objnull];
_name = switch (typename _target) do {
case (typename objnull): {gettext (configfile >> "cfgvehicles" >> typeof _target >> "displayname")};
case (typename grpnull): {groupid _target};
case (typename []): {format ["%1: %3 #%2",groupid (_target select 0),_target select 1,localize "str_a3_cfgmarkers_waypoint_0"]};
case (typename ""): {markertext _target};
};
_ctrlTitle ctrlsettext format [ctrltext _ctrlTitle,toupper _name];
_ctrlTitlePos set [1,(0.5 - _posH) - (_ctrlTitlePos select 3) - _ctrlTitleOffsetY];
_ctrlTitle ctrlsetposition _ctrlTitlePos;
_ctrlTitle ctrlcommit 0;
_ctrlContentPos set [1,0.5 - _posH];
_ctrlContentPos set [3,_posH * 2];
_ctrlContent ctrlsetposition _ctrlContentPos;
_ctrlContent ctrlcommit 0;
_ctrlBackgroundPos set [1,0.5 - _posH];
_ctrlBackgroundPos set [3,_posH * 2];
_ctrlBackground ctrlsetposition _ctrlBackgroundPos;
_ctrlBackground ctrlcommit 0;
_ctrlButtonOKPos set [1,0.5 + _posH + _ctrlTitleOffsetY];
_ctrlButtonOK ctrlsetposition _ctrlButtonOKPos;
_ctrlButtonOK ctrlcommit 0;
ctrlsetfocus _ctrlButtonOK;
_ctrlButtonCancelPos set [1,0.5 + _posH + _ctrlTitleOffsetY];
_ctrlButtonCancel ctrlsetposition _ctrlButtonCancelPos;
_ctrlButtonCancel ctrlcommit 0;
_ctrlButtonCustomPos set [1,0.5 + _posH + _ctrlTitleOffsetY];
_ctrlButtonCustom ctrlsetposition _ctrlButtonCustomPos;
_ctrlButtonCustom ctrlcommit 0;
//--- Close the display when entity is altered
[_display] spawn {
disableserialization;
_display = _this select 0;
_target = missionnamespace getvariable ["BIS_fnc_initCuratorAttributes_target",objnull];
switch (typename _target) do {
case (typename objnull): {
_isAlive = alive _target;
waituntil {isnull _display || (_isAlive && !alive _target)};
};
case (typename grpnull): {
waituntil {isnull _display || isnull _target};
};
case (typename []): {
_grp = _target select 0;
_wpCount = count waypoints _grp;
waituntil {isnull _display || (count waypoints _grp != _wpCount)};
};
case (typename ""): {
waituntil {isnull _display || markertype _target == ""};
};
};
_display closedisplay 2;
};
};
case "onUnload": {
};
};