Skip to content

Commit d2e0494

Browse files
Timi007rautamiekkaLinkIsGrimjohnb432PabstMirror
authored
Add placeable and carryable flags (#8943)
* Add ability to carry and place flags * Add white icons * Fix cache * Fix icon paths * Fix action text * Fix placing and picking up flags * Disable debugging * Rename var * Remove hack * Casing * Add setting to hide place or carry actions * Refactor * Fix function rename * Add purple, black and orange flags * Add new flags to weapons array * Add description * Fix stringtable checks * Lazy eval Co-authored-by: Jouni Järvinen <rautamiekka@users.noreply.github.com> * Save CfgWeapons in var * Refactor clamping height * Fix docs * Add existing translation * Use macro * Remove obsolete line * Fix hemtt build * Fix hemtt warnings * Fix floating * Increase mass * Use new script_component path * Use EFUNC and check canInteractWith * Correct spelling Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> * Build item cache in preStart * Add private * Move config cache to fnc_scanConfig * Make flag carrier customizable * More descriptive var * Reduce round brackets * Improve German translation * Improve spelling * Rename to isCarryingFlag * Remove explicit _this * Add check for already picked up flag * Formatting * Use cancel STR from common * Fix finding * Add carrier for each flag * Add editor previews * Fix hook * Apply suggestions from code review --------- Co-authored-by: Jouni Järvinen <rautamiekka@users.noreply.github.com> Co-authored-by: Grim <69561145+LinkIsGrim@users.noreply.github.com> Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com> Co-authored-by: PabstMirror <pabstmirror@gmail.com>
1 parent 9010fe5 commit d2e0494

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+809
-0
lines changed

addons/flags/$PBOPREFIX$

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
z\ace\addons\flags

addons/flags/CfgEventHandlers.hpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Extended_PreStart_EventHandlers {
2+
class ADDON {
3+
init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
4+
};
5+
};
6+
7+
class Extended_PreInit_EventHandlers {
8+
class ADDON {
9+
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
10+
};
11+
};
12+
13+
class Extended_PostInit_EventHandlers {
14+
class ADDON {
15+
init = QUOTE(call COMPILE_SCRIPT(XEH_postInit));
16+
};
17+
};
18+
19+
class Extended_DisplayLoad_EventHandlers {
20+
class RscDisplayMission {
21+
ADDON = QUOTE(_this call COMPILE_SCRIPT(XEH_missionDisplayLoad));
22+
};
23+
};

addons/flags/CfgVehicles.hpp

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
class CBA_Extended_EventHandlers;
2+
3+
class CfgVehicles {
4+
class Man;
5+
class CAManBase: Man {
6+
class ACE_SelfActions {
7+
class ACE_Equipment {
8+
class ADDON {
9+
displayName = CSTRING(ActionCategory);
10+
insertChildren = QUOTE(call FUNC(getActions));
11+
icon = QPATHTOF(data\icons\place\white_place_icon.paa);
12+
exceptions[] = {"isNotSwimming", "isNotOnLadder"};
13+
14+
class GVAR(furlFlag) {
15+
displayName = CSTRING(Furl);
16+
condition = QUOTE(_player call FUNC(isCarryingFlag));
17+
exceptions[] = {"isNotSwimming", "isNotOnLadder"};
18+
statement = QUOTE(_player call FUNC(furlFlag));
19+
icon = QPATHTOF(data\icons\carry\white_furl_icon.paa);
20+
};
21+
};
22+
};
23+
};
24+
};
25+
26+
class FlagChecked_F;
27+
class GVAR(carrier_white): FlagChecked_F {
28+
scope = 2;
29+
scopeCurator = 2;
30+
author = ECSTRING(common,ACETeam);
31+
32+
displayName = CSTRING(White);
33+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_white.jpg);
34+
35+
class EventHandlers {
36+
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; // Required for ACE_Actions
37+
init = QUOTE([_this select 0] call FUNC(setFlagTexture));
38+
};
39+
40+
class ACE_Actions {
41+
class GVAR(pickup) {
42+
displayName = CSTRING(Pickup);
43+
icon = QPATHTOF(data\icons\place\white_pickup_icon.paa);
44+
position = "[0, -0.45, 0.75]";
45+
distance = 2.0;
46+
condition = QUOTE((typeOf _target) in GVAR(carrierItemMapping));
47+
statement = QUOTE([ARR_3(_player,(GVAR(carrierItemMapping) get (typeOf _target)),_target)] call FUNC(pickupFlag));
48+
modifierFunction = QUOTE(call FUNC(modifyPickupAction));
49+
exceptions[] = {"isNotSwimming", "isNotOnLadder"};
50+
};
51+
};
52+
};
53+
class GVAR(carrier_red): GVAR(carrier_white) {
54+
displayName = CSTRING(Red);
55+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_red.jpg);
56+
};
57+
class GVAR(carrier_blue): GVAR(carrier_white) {
58+
displayName = CSTRING(Blue);
59+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_blue.jpg);
60+
};
61+
class GVAR(carrier_green): GVAR(carrier_white) {
62+
displayName = CSTRING(Green);
63+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_green.jpg);
64+
};
65+
class GVAR(carrier_yellow): GVAR(carrier_white) {
66+
displayName = CSTRING(Yellow);
67+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_yellow.jpg);
68+
};
69+
class GVAR(carrier_orange): GVAR(carrier_white) {
70+
displayName = CSTRING(Orange);
71+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_orange.jpg);
72+
};
73+
class GVAR(carrier_purple): GVAR(carrier_white) {
74+
displayName = CSTRING(Purple);
75+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_purple.jpg);
76+
};
77+
class GVAR(carrier_black): GVAR(carrier_white) {
78+
displayName = CSTRING(Black);
79+
editorPreview = QPATHTOF(data\editorpreviews\ace_flags_carrier_black.jpg);
80+
};
81+
};

addons/flags/CfgWeapons.hpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
class CfgWeapons {
2+
class ACE_ItemCore;
3+
class CBA_MiscItem_ItemInfo;
4+
5+
class GVAR(white): ACE_ItemCore {
6+
scope = 2;
7+
author = ECSTRING(common,ACETeam);
8+
descriptionShort = CSTRING(Description);
9+
descriptionUse = CSTRING(Description);
10+
11+
displayName = CSTRING(White);
12+
picture = QPATHTOF(data\pictures\white_item.paa);
13+
14+
GVAR(texture) = "\a3\data_f\flags\flag_white_co.paa";
15+
GVAR(carrier) = QGVAR(carrier_white);
16+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\white_place_icon.paa);
17+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\white_carry_icon.paa);
18+
19+
class ItemInfo: CBA_MiscItem_ItemInfo {
20+
mass = 6.6; // Assuming 300g
21+
};
22+
};
23+
class GVAR(red): GVAR(white) {
24+
displayName = CSTRING(Red);
25+
picture = QPATHTOF(data\pictures\red_item.paa);
26+
27+
GVAR(texture) = "\a3\data_f\flags\flag_red_co.paa";
28+
GVAR(carrier) = QGVAR(carrier_red);
29+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\red_place_icon.paa);
30+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\red_carry_icon.paa);
31+
};
32+
class GVAR(blue): GVAR(white) {
33+
displayName = CSTRING(Blue);
34+
picture = QPATHTOF(data\pictures\blue_item.paa);
35+
36+
GVAR(texture) = "\a3\data_f\flags\Flag_blue_co.paa";
37+
GVAR(carrier) = QGVAR(carrier_blue);
38+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\blue_place_icon.paa);
39+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\blue_carry_icon.paa);
40+
};
41+
class GVAR(green): GVAR(white) {
42+
displayName = CSTRING(Green);
43+
picture = QPATHTOF(data\pictures\green_item.paa);
44+
45+
GVAR(texture) = "\a3\data_f\flags\flag_green_co.paa";
46+
GVAR(carrier) = QGVAR(carrier_green);
47+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\green_place_icon.paa);
48+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\green_carry_icon.paa);
49+
};
50+
class GVAR(yellow): GVAR(white) {
51+
displayName = CSTRING(Yellow);
52+
picture = QPATHTOF(data\pictures\yellow_item.paa);
53+
54+
GVAR(texture) = QPATHTOF(data\Flag_yellow_co.paa);
55+
GVAR(carrier) = QGVAR(carrier_yellow);
56+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\yellow_place_icon.paa);
57+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\yellow_carry_icon.paa);
58+
};
59+
class GVAR(orange): GVAR(white) {
60+
displayName = CSTRING(Orange);
61+
picture = QPATHTOF(data\pictures\orange_item.paa);
62+
63+
GVAR(texture) = QPATHTOF(data\flag_orange_co.paa);
64+
GVAR(carrier) = QGVAR(carrier_orange);
65+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\orange_place_icon.paa);
66+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\orange_carry_icon.paa);
67+
};
68+
class GVAR(purple): GVAR(white) {
69+
displayName = CSTRING(Purple);
70+
picture = QPATHTOF(data\pictures\purple_item.paa);
71+
72+
GVAR(texture) = QPATHTOF(data\flag_purple_co.paa);
73+
GVAR(carrier) = QGVAR(carrier_purple);
74+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\purple_place_icon.paa);
75+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\purple_carry_icon.paa);
76+
};
77+
class GVAR(black): GVAR(white) {
78+
displayName = CSTRING(Black);
79+
picture = QPATHTOF(data\pictures\black_item.paa);
80+
81+
GVAR(texture) = QPATHTOF(data\flag_black_co.paa);
82+
GVAR(carrier) = QGVAR(carrier_black);
83+
GVAR(actionIconPlace) = QPATHTOF(data\icons\place\black_place_icon.paa);
84+
GVAR(actionIconCarry) = QPATHTOF(data\icons\carry\black_carry_icon.paa);
85+
};
86+
};

addons/flags/README.md

Lines changed: 4 additions & 0 deletions

addons/flags/XEH_PREP.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
PREP(carryFlag);
2+
PREP(furlFlag);
3+
PREP(getActions);
4+
PREP(getFlags);
5+
PREP(handleScrollWheel);
6+
PREP(isCarryingFlag);
7+
PREP(modifyPickupAction);
8+
PREP(pickupFlag);
9+
PREP(placeFlag);
10+
PREP(scanConfig);
11+
PREP(setFlagTexture);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#include "script_component.hpp"
2+
3+
if (!hasInterface) exitWith {};
4+
5+
params ["_display"];
6+
7+
_display displayAddEventHandler ["MouseZChanged", {
8+
params ["", "_scroll"];
9+
[_scroll] call FUNC(handleScrollWheel);
10+
}];
11+
12+
_display displayAddEventHandler ["MouseButtonDown", {
13+
params ["", "_button"];
14+
if (GVAR(isPlacing) isNotEqualTo PLACE_WAITING) exitWith {false};
15+
if (_button isNotEqualTo 1) exitWith {false}; // 1 = Left mouse button
16+
GVAR(isPlacing) = PLACE_CANCEL;
17+
}];

addons/flags/XEH_postInit.sqf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#include "script_component.hpp"
2+
3+
if (hasInterface) then {
4+
GVAR(isPlacing) = PLACE_CANCEL;
5+
["ace_interactMenuOpened", {GVAR(isPlacing) = PLACE_CANCEL;}] call CBA_fnc_addEventHandler;
6+
};

addons/flags/XEH_preInit.sqf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include "script_component.hpp"
2+
3+
ADDON = false;
4+
5+
PREP_RECOMPILE_START;
6+
#include "XEH_PREP.hpp"
7+
PREP_RECOMPILE_END;
8+
9+
#include "initSettings.inc.sqf"
10+
11+
GVAR(flagItemCache) = +(uiNamespace getVariable [QGVAR(flagItemCache), createHashMap]);
12+
GVAR(carrierItemMapping) = +(uiNamespace getVariable [QGVAR(carrierItemMapping), createHashMap]);
13+
14+
ADDON = true;

addons/flags/XEH_preStart.sqf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include "script_component.hpp"
2+
3+
#include "XEH_PREP.hpp"
4+
5+
call FUNC(scanConfig);

0 commit comments

Comments
 (0)