Merge branch 'master' of https://github.com/KoffeinFlummi/ACE3 into kestrel4500

This commit is contained in:
ulteq 2015-04-08 21:28:17 +02:00
commit a6e3d1917d
46 changed files with 529 additions and 2613 deletions

Binary file not shown.

View File

@ -32,7 +32,7 @@ GVAR(openedMenuType) = _menuType;
GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) ||
visibleMap || visibleMap ||
(GVAR(AlwaysUseCursorSelfInteraction) && _menuType == 1); {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction)}};
if (GVAR(useCursorMenu)) then { if (GVAR(useCursorMenu)) then {
createDialog QGVAR(cursorMenu); createDialog QGVAR(cursorMenu);
// The dialog sets: // The dialog sets:

View File

@ -39,14 +39,14 @@ class RscDisplayInventory {
x = X_PART(1); x = X_PART(1);
y = Y_PART(1); y = Y_PART(1);
w = W_PART(12); w = W_PART(12);
h = H_PART(22.5); h = H_PART(22.5); //default 23
}; };
class CA_PlayerBackground: RscText { class CA_PlayerBackground: RscText {
//center player's container: decrease height because of progressbar height decrease //center player's container: decrease height because of progressbar height decrease
x = X_PART(14.6); x = X_PART(14.6);
y = Y_PART(2); y = Y_PART(2);
w = W_PART(24.4); w = W_PART(24.4);
h = H_PART(21.5); h = H_PART(21.5); //default 22
}; };
class TitleBackground: RscText { class TitleBackground: RscText {
x = X_PART(14.6); x = X_PART(14.6);
@ -87,25 +87,31 @@ class RscDisplayInventory {
class BackgroundSlotPrimaryMuzzle: BackgroundSlotPrimary { class BackgroundSlotPrimaryMuzzle: BackgroundSlotPrimary {
x = X_PART(26.6); x = X_PART(26.6);
y = Y_PART(9.1); y = Y_PART(9.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotPrimaryUnderBarrel: BackgroundSlotPrimary {
x = X_PART(29);
y = Y_PART(9.1);
w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotPrimaryFlashlight: BackgroundSlotPrimary { class BackgroundSlotPrimaryFlashlight: BackgroundSlotPrimary {
x = X_PART(29.6); x = X_PART(31.4);
y = Y_PART(9.1); y = Y_PART(9.2); //not sure why different (double check release)
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotPrimaryOptics: BackgroundSlotPrimary { class BackgroundSlotPrimaryOptics: BackgroundSlotPrimary {
x = X_PART(32.6); x = X_PART(33.8);
y = Y_PART(9.1); y = Y_PART(9.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotPrimaryMagazine: BackgroundSlotPrimary { class BackgroundSlotPrimaryMagazine: BackgroundSlotPrimary {
x = X_PART(35.6); x = X_PART(36.2);
y = Y_PART(9.1); y = Y_PART(9.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotSecondary: BackgroundSlotPrimary { class BackgroundSlotSecondary: BackgroundSlotPrimary {
@ -117,25 +123,31 @@ class RscDisplayInventory {
class BackgroundSlotSecondaryMuzzle: BackgroundSlotPrimary { class BackgroundSlotSecondaryMuzzle: BackgroundSlotPrimary {
x = X_PART(26.6); x = X_PART(26.6);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotSecondaryUnderBarrel: BackgroundSlotPrimary {
x = X_PART(29);
y = Y_PART(14.6);
w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotSecondaryFlashlight: BackgroundSlotPrimary { class BackgroundSlotSecondaryFlashlight: BackgroundSlotPrimary {
x = X_PART(29.6); x = X_PART(31.4);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotSecondaryOptics: BackgroundSlotPrimary { class BackgroundSlotSecondaryOptics: BackgroundSlotPrimary {
x = X_PART(32.6); x = X_PART(33.8);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotSecondaryMagazine: BackgroundSlotPrimary { class BackgroundSlotSecondaryMagazine: BackgroundSlotPrimary {
x = X_PART(35.6); x = X_PART(36.2);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotHandgun: BackgroundSlotPrimary { class BackgroundSlotHandgun: BackgroundSlotPrimary {
@ -147,25 +159,31 @@ class RscDisplayInventory {
class BackgroundSlotHandgunMuzzle: BackgroundSlotPrimary { class BackgroundSlotHandgunMuzzle: BackgroundSlotPrimary {
x = X_PART(26.6); x = X_PART(26.6);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2);
};
class BackgroundSlotHandgunUnderBarrel: BackgroundSlotPrimary {
x = X_PART(29);
y = Y_PART(20.1);
w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotHandgunFlashlight: BackgroundSlotPrimary { class BackgroundSlotHandgunFlashlight: BackgroundSlotPrimary {
x = X_PART(29.6); x = X_PART(31.4);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotHandgunOptics: BackgroundSlotPrimary { class BackgroundSlotHandgunOptics: BackgroundSlotPrimary {
x = X_PART(32.6); x = X_PART(33.8);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotHandgunMagazine: BackgroundSlotPrimary { class BackgroundSlotHandgunMagazine: BackgroundSlotPrimary {
x = X_PART(35.6); x = X_PART(36.2);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class BackgroundSlotHeadgear: BackgroundSlotPrimary { class BackgroundSlotHeadgear: BackgroundSlotPrimary {
@ -263,7 +281,7 @@ class RscDisplayInventory {
x = X_PART(1.5); x = X_PART(1.5);
y = Y_PART(22.5); y = Y_PART(22.5);
w = W_PART(11); w = W_PART(11);
h = H_PART(0.5); h = H_PART(0.5); //Default 1
}; };
class SlotPrimary: GroundTab { class SlotPrimary: GroundTab {
x = X_PART(26.6); x = X_PART(26.6);
@ -274,31 +292,31 @@ class RscDisplayInventory {
class SlotPrimaryMuzzle: SlotPrimary { class SlotPrimaryMuzzle: SlotPrimary {
x = X_PART(26.6); x = X_PART(26.6);
y = Y_PART(9.1); y = Y_PART(9.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotPrimaryGrip: SlotPrimary { class SlotPrimaryUnderBarrel: SlotPrimary {
w = 0; x = X_PART(29);
h = 0; y = Y_PART(9.1);
x = X_PART(39); w = W_PART(2.3);
y = Y_PART(9); h = H_PART(2);
}; };
class SlotPrimaryFlashlight: SlotPrimary { class SlotPrimaryFlashlight: SlotPrimary {
x = X_PART(29.6); x = X_PART(31.4);
y = Y_PART(9.1); y = Y_PART(9.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotPrimaryOptics: SlotPrimary { class SlotPrimaryOptics: SlotPrimary {
x = X_PART(32.6); x = X_PART(33.8);
y = Y_PART(9.1); y = Y_PART(9.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotPrimaryMagazine: SlotPrimary { class SlotPrimaryMagazine: SlotPrimary {
x = X_PART(35.6); x = X_PART(36.2);
y = Y_PART(9.1); y = Y_PART(9.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotSecondary: SlotPrimary { class SlotSecondary: SlotPrimary {
@ -310,31 +328,31 @@ class RscDisplayInventory {
class SlotSecondaryMuzzle: SlotPrimary { class SlotSecondaryMuzzle: SlotPrimary {
x = X_PART(26.6); x = X_PART(26.6);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotSecondaryGrip: SlotPrimary { class SlotSecondaryUnderBarrel: SlotPrimary {
w = 0; x = X_PART(29);
h = 0; y = Y_PART(14.59); //Why is this different? (check release)
x = X_PART(39); w = W_PART(2.3);
y = Y_PART(14.5); h = H_PART(2);
}; };
class SlotSecondaryFlashlight: SlotPrimary { class SlotSecondaryFlashlight: SlotPrimary {
x = X_PART(29.6); x = X_PART(31.4);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotSecondaryOptics: SlotPrimary { class SlotSecondaryOptics: SlotPrimary {
x = X_PART(32.6); x = X_PART(33.8);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotSecondaryMagazine: SlotPrimary { class SlotSecondaryMagazine: SlotPrimary {
x = X_PART(35.6); x = X_PART(36.2);
y = Y_PART(14.6); y = Y_PART(14.6);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotHandgun: SlotPrimary { class SlotHandgun: SlotPrimary {
@ -346,31 +364,31 @@ class RscDisplayInventory {
class SlotHandgunMuzzle: SlotPrimary { class SlotHandgunMuzzle: SlotPrimary {
x = X_PART(26.6); x = X_PART(26.6);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotHandgunGrip: SlotPrimary { class SlotHandgunUnderBarrel: SlotPrimary {
w = 0; x = X_PART(29);
h = 0; y = Y_PART(20.1);
x = X_PART(39); W = W_PART(2.3);
y = Y_PART(20); H = H_PART(2);
}; };
class SlotHandgunFlashlight: SlotPrimary { class SlotHandgunFlashlight: SlotPrimary {
x = X_PART(29.6); x = X_PART(31.4);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotHandgunOptics: SlotPrimary { class SlotHandgunOptics: SlotPrimary {
x = X_PART(32.6); x = X_PART(33.8);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotHandgunMagazine: SlotPrimary { class SlotHandgunMagazine: SlotPrimary {
x = X_PART(35.6); x = X_PART(36.2);
y = Y_PART(20.1); y = Y_PART(20.1);
w = W_PART(2.9); w = W_PART(2.3);
h = H_PART(2); h = H_PART(2);
}; };
class SlotHeadgear: SlotPrimary { class SlotHeadgear: SlotPrimary {
@ -492,7 +510,7 @@ class RscDisplayInventory {
x = X_PART(15.1); x = X_PART(15.1);
y = Y_PART(22.5); y = Y_PART(22.5);
w = W_PART(23.4); w = W_PART(23.4);
h = H_PART(0.5); h = H_PART(0.5); //Default 1
}; };
class ContainerMarker: GroundTab { class ContainerMarker: GroundTab {
x = X_PART(0); x = X_PART(0);

View File

@ -51,6 +51,7 @@ class CfgPatches {
"a3_anims_f_epc", "a3_anims_f_epc",
"a3_anims_f_heli", "a3_anims_f_heli",
"a3_anims_f_kart", "a3_anims_f_kart",
"a3_anims_f_mark_deployment",
"a3_armor_f", "a3_armor_f",
"a3_armor_f_amv", "a3_armor_f_amv",
"a3_armor_f_apc_wheeled_03", "a3_armor_f_apc_wheeled_03",
@ -93,6 +94,7 @@ class CfgPatches {
"a3_characters_f_heads", "a3_characters_f_heads",
"a3_characters_f_indep", "a3_characters_f_indep",
"a3_characters_f_kart", "a3_characters_f_kart",
"a3_characters_f_mark",
"a3_characters_f_opfor", "a3_characters_f_opfor",
"a3_characters_f_proxies", "a3_characters_f_proxies",
"a3_data_f", "a3_data_f",
@ -108,6 +110,7 @@ class CfgPatches {
"a3_data_f_hook", "a3_data_f_hook",
"a3_data_f_kart", "a3_data_f_kart",
"a3_data_f_kart_particleeffects", "a3_data_f_kart_particleeffects",
"a3_data_f_mark",
"a3_data_f_particleeffects", "a3_data_f_particleeffects",
"a3_dubbing_radio_f", "a3_dubbing_radio_f",
"a3_editor_f", "a3_editor_f",
@ -117,6 +120,8 @@ class CfgPatches {
"a3_functions_f_epa", "a3_functions_f_epa",
"a3_functions_f_epc", "a3_functions_f_epc",
"a3_functions_f_heli", "a3_functions_f_heli",
"a3_functions_f_mark",
"a3_functions_f_mp_mark",
"a3_language_f", "a3_language_f",
"a3_language_f_beta", "a3_language_f_beta",
"a3_language_f_bootcamp", "a3_language_f_bootcamp",
@ -127,10 +132,13 @@ class CfgPatches {
"a3_language_f_gamma", "a3_language_f_gamma",
"a3_language_f_heli", "a3_language_f_heli",
"a3_language_f_kart", "a3_language_f_kart",
"a3_language_f_mark",
"a3_language_f_mp_mark",
"a3_languagemissions_f", "a3_languagemissions_f",
"a3_languagemissions_f_beta", "a3_languagemissions_f_beta",
"a3_languagemissions_f_gamma", "a3_languagemissions_f_gamma",
"a3_languagemissions_f_kart", "a3_languagemissions_f_kart",
"a3_languagemissions_f_mp_mark",
"a3_map_altis", "a3_map_altis",
"a3_map_altis_scenes", "a3_map_altis_scenes",
"a3_map_data", "a3_map_data",
@ -149,6 +157,8 @@ class CfgPatches {
"a3_missions_f_gamma", "a3_missions_f_gamma",
"a3_missions_f_heli", "a3_missions_f_heli",
"a3_missions_f_kart", "a3_missions_f_kart",
"a3_missions_f_mark",
"a3_missions_f_mp_mark",
"a3_modules_f", "a3_modules_f",
"a3_modules_f_beta", "a3_modules_f_beta",
"a3_modules_f_beta_firingdrills", "a3_modules_f_beta_firingdrills",
@ -184,8 +194,12 @@ class CfgPatches {
"a3_modules_f_kart", "a3_modules_f_kart",
"a3_modules_f_kart_timetrials", "a3_modules_f_kart_timetrials",
"a3_modules_f_livefeed", "a3_modules_f_livefeed",
"a3_modules_f_mark",
"a3_modules_f_mark_firingdrills",
"a3_modules_f_mark_objectives",
"a3_modules_f_marta", "a3_modules_f_marta",
"a3_modules_f_misc", "a3_modules_f_misc",
"a3_modules_f_mp_mark",
"a3_modules_f_multiplayer", "a3_modules_f_multiplayer",
"a3_modules_f_objectmodifiers", "a3_modules_f_objectmodifiers",
"a3_modules_f_sites", "a3_modules_f_sites",
@ -199,6 +213,7 @@ class CfgPatches {
"a3_music_f_epb", "a3_music_f_epb",
"a3_music_f_epc", "a3_music_f_epc",
"a3_music_f_heli", "a3_music_f_heli",
"a3_music_f_mark",
"a3_plants_f_bush", "a3_plants_f_bush",
"a3_roads_f", "a3_roads_f",
"a3_rocks_f", "a3_rocks_f",
@ -244,6 +259,8 @@ class CfgPatches {
"a3_static_f_gamma_aa", "a3_static_f_gamma_aa",
"a3_static_f_gamma_at", "a3_static_f_gamma_at",
"a3_static_f_gamma_mortar_01", "a3_static_f_gamma_mortar_01",
"a3_static_f_mark_designator_01",
"a3_static_f_mark_designator_02",
"a3_static_f_mortar_01", "a3_static_f_mortar_01",
"a3_structures_f", "a3_structures_f",
"a3_structures_f_bootcamp_civ_camping", "a3_structures_f_bootcamp_civ_camping",
@ -385,6 +402,13 @@ class CfgPatches {
"a3_structures_f_kart_civ_sportsgrounds", "a3_structures_f_kart_civ_sportsgrounds",
"a3_structures_f_kart_mil_flags", "a3_structures_f_kart_mil_flags",
"a3_structures_f_kart_signs_companies", "a3_structures_f_kart_signs_companies",
"a3_structures_f_mark_items_military",
"a3_structures_f_mark_items_sport",
"a3_structures_f_mark_mil_flags",
"a3_structures_f_mark_training",
"a3_structures_f_mark_vr_helpers",
"a3_structures_f_mark_vr_shapes",
"a3_structures_f_mark_vr_targets",
"a3_structures_f_mil", "a3_structures_f_mil",
"a3_structures_f_mil_bagbunker", "a3_structures_f_mil_bagbunker",
"a3_structures_f_mil_bagfence", "a3_structures_f_mil_bagfence",
@ -416,6 +440,7 @@ class CfgPatches {
"a3_supplies_f_heli_cargonets", "a3_supplies_f_heli_cargonets",
"a3_supplies_f_heli_fuel", "a3_supplies_f_heli_fuel",
"a3_supplies_f_heli_slingload", "a3_supplies_f_heli_slingload",
"a3_supplies_f_mark",
"a3_uav_f_characters_f_gamma", "a3_uav_f_characters_f_gamma",
"a3_uav_f_weapons_f_gamma_ammoboxes", "a3_uav_f_weapons_f_gamma_ammoboxes",
"a3_ui_f", "a3_ui_f",
@ -423,6 +448,8 @@ class CfgPatches {
"a3_ui_f_curator", "a3_ui_f_curator",
"a3_ui_f_heli", "a3_ui_f_heli",
"a3_ui_f_kart", "a3_ui_f_kart",
"a3_ui_f_mark",
"a3_ui_f_mp_mark",
"a3_uifonts_f", "a3_uifonts_f",
"a3_weapons_f", "a3_weapons_f",
"a3_weapons_f_aaf", "a3_weapons_f_aaf",
@ -474,6 +501,28 @@ class CfgPatches {
"a3_weapons_f_longrangerifles_m320", "a3_weapons_f_longrangerifles_m320",
"a3_weapons_f_machineguns_m200", "a3_weapons_f_machineguns_m200",
"a3_weapons_f_machineguns_zafir", "a3_weapons_f_machineguns_zafir",
"a3_weapons_f_mark",
"a3_weapons_f_mark_acc",
"a3_weapons_f_mark_ebr",
"a3_weapons_f_mark_longrangerifles_dmr_01",
"a3_weapons_f_mark_longrangerifles_dmr_02",
"a3_weapons_f_mark_longrangerifles_dmr_03",
"a3_weapons_f_mark_longrangerifles_dmr_04",
"a3_weapons_f_mark_longrangerifles_dmr_05",
"a3_weapons_f_mark_longrangerifles_dmr_06",
"a3_weapons_f_mark_longrangerifles_gm6",
"a3_weapons_f_mark_longrangerifles_gm6_camo",
"a3_weapons_f_mark_longrangerifles_m320",
"a3_weapons_f_mark_longrangerifles_m320_camo",
"a3_weapons_f_mark_machineguns_m200",
"a3_weapons_f_mark_machineguns_mmg_01",
"a3_weapons_f_mark_machineguns_mmg_02",
"a3_weapons_f_mark_machineguns_zafir",
"a3_weapons_f_mark_rifles_khaybar",
"a3_weapons_f_mark_rifles_mk20",
"a3_weapons_f_mark_rifles_mx",
"a3_weapons_f_mark_rifles_sdar",
"a3_weapons_f_mark_rifles_trg20",
"a3_weapons_f_nato", "a3_weapons_f_nato",
"a3_weapons_f_pistols_acpc2", "a3_weapons_f_pistols_acpc2",
"a3_weapons_f_pistols_p07", "a3_weapons_f_pistols_p07",

View File

@ -1,4 +1,3 @@
class Extended_PreInit_EventHandlers { class Extended_PreInit_EventHandlers {
class ADDON { class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit)); init = QUOTE(call COMPILE_FILE(XEH_preInit));

View File

@ -1,4 +1,3 @@
class RscPicture; class RscPicture;
class RscText; class RscText;
class RscStructuredText; class RscStructuredText;
@ -13,91 +12,34 @@ class RscXSliderH;
class RscDisplayInsertMarker { class RscDisplayInsertMarker {
onLoad = QUOTE(_this call DFUNC(initInsertMarker);); onLoad = QUOTE(_this call DFUNC(initInsertMarker););
onUnload = QUOTE(_this call DFUNC(placeMarker);); onUnload = QUOTE(_this call DFUNC(placeMarker););
idd = 54; // idd = 54;
movingEnable = 1; movingEnable = 1;
class controlsBackground { class controlsBackground {
class RscText_1000: RscText { // class RscText_1000: RscText {idc = 1000;};
idc = 1000;
/*x = "0 * GUI_GRID_INSERTMARKER_W + GUI_GRID_INSERTMARKER_X";
y = "0 * GUI_GRID_INSERTMARKER_H + GUI_GRID_INSERTMARKER_Y";
w = "8 * GUI_GRID_INSERTMARKER_W";
h = "2.5 * GUI_GRID_INSERTMARKER_H";
colorBackground[] = {0,0,0,0.5};*/
};
class Description: RscStructuredText {
colorBackground[] = {0,0,0,0.7};
idc = 1100;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "9.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
}; };
class controls { class controls {
//delete ButtonOK; // class ButtonMenuOK: RscButtonMenuOK {idc = 1;};
class ButtonMenuOK: RscButtonMenuOK { // class ButtonMenuCancel: RscButtonMenuCancel {idc = 2;};
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)"; // class Title: RscText {idc = 1001;};
y = "15.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))"; // class Description: RscStructuredText {idc = 1100;};
w = "8.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; // class DescriptionChannel: RscStructuredText {idc = 1101;};
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; // class MarkerPicture: RscPicture {idc = 102;};
// size = "0.85 * ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; // class MarkerText: RscEdit {idc = 101;};
// sizeEx = "0.85 * ( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; // class MarkerChannel: RscCombo {idc = 103;};
text = "";
};
class ButtonMenuCancel: RscButtonMenuCancel {
x = "23 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "15.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "1.1 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "X"; class MarkerShape: RscCombo {
colorBackground[] = {0.75,0,0,0.5}; idc = 1210;
colorBackgroundFocused[] = {0.75,0,0,0.5};
colorBackground2[] = {1,0,0,0.5};
}; };
/*class ButtonMenuInfo: RscButtonMenu { class MarkerColor: RscCombo {
idc = 2400; idc = 1211;
text = "$STR_A3_RscDisplayInsertMarker_ButtonMenuInfo";
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};*/
delete ButtonMenuInfo;
class Title: RscText {
moving = 1;
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])","(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])"};
idc = 1001;
text = "$STR_A3_RscDisplayInsertMarker_Title";
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "8.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
}; };
delete Description; class MarkerAngle: RscXSliderH {
/*class Info: RscStructuredText { idc = 1220;
colorBackground[] = {0,0,0,0.7};
idc = 1101;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};*/
delete Info;
class Picture: RscPicture {
idc = 102;
x = 0.259984;
y = 0.4;
w = 0.05;
h = 0.0666667;
}; };
class Text: RscEdit { class MarkerAngleText: RscText {
idc = 101; idc = 1221;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "10.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
}; };
/*class SizeX: RscEdit { /*class SizeX: RscEdit {
idc = 1200; idc = 1200;
text = "10"; text = "10";
@ -114,34 +56,5 @@ class RscDisplayInsertMarker {
w = "5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; w = "5 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};*/ };*/
class MarkerShape: RscCombo {
idc = 1210;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "11.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class MarkerColor: RscCombo {
idc = 1211;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "12.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class MarkerAngle: RscXSliderH {
idc = 1220;
text = "10";
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "13.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
class MarkerAngleText: RscText {
idc = 1221;
x = "14 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX)";
y = "14.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
}; };
}; };

View File

@ -11,6 +11,12 @@
if (isMultiplayer && {!isServer} && {hasInterface}) then { if (isMultiplayer && {!isServer} && {hasInterface}) then {
private "_logic"; private "_logic";
_logic = createGroup sideLogic createUnit ["Logic", [0,0,0], [], 0, "NONE"]; _logic = createGroup sideLogic createUnit ["Logic", [0,0,0], [], 0, "NONE"];
[QGVAR(sendMarkersJIP), [_logic]] call EFUNC(common,serverEvent);
[QGVAR(sendMarkersJIP), _logic] call EFUNC(common,serverEvent);
}; };
GVAR(mapDisplaysWithDrawEHs) = [];
GVAR(currentMarkerPosition) = [];
GVAR(currentMarkerAngle) = 0;
GVAR(currentMarkerColorConfigName) = "";
GVAR(currentMarkerConfigName) = "";

View File

@ -3,6 +3,7 @@
ADDON = false; ADDON = false;
PREP(initInsertMarker); PREP(initInsertMarker);
PREP(mapDrawEH);
PREP(onLBSelChangedColor); PREP(onLBSelChangedColor);
PREP(onLBSelChangedShape); PREP(onLBSelChangedShape);
PREP(onSliderPosChangedAngle); PREP(onSliderPosChangedAngle);
@ -14,25 +15,15 @@ PREP(setMarkerNetwork);
// init marker types // init marker types
if (isNil QGVAR(MarkersCache)) then { if (isNil QGVAR(MarkersCache)) then {
_config = configfile >> "CfgMarkers"; _config = configfile >> "CfgMarkers";
_index = 0;
GVAR(MarkersCache) = []; GVAR(MarkersCache) = [];
for "_a" from 0 to (count _config - 1) do { for "_a" from 0 to (count _config - 1) do {
_marker = _config select _a; _marker = _config select _a;
_scope = getNumber (_marker >> "scope"); _scope = getNumber (_marker >> "scope");
if (_scope == 2) then {
_name = getText (_marker >> "name"); _name = getText (_marker >> "name");
_icon = getText (_marker >> "icon"); _icon = getText (_marker >> "icon");
if (_scope == 2) then {
_shape lbAdd _name;
_shape lbSetValue [_index, _a];
_shape lbSetPicture [_index, _icon];
GVAR(MarkersCache) pushBack [_name, _a, _icon]; GVAR(MarkersCache) pushBack [_name, _a, _icon];
_index = _index + 1;
}; };
}; };
}; };
@ -40,39 +31,27 @@ if (isNil QGVAR(MarkersCache)) then {
// init marker colors // init marker colors
if (isNil QGVAR(MarkerColorsCache)) then { if (isNil QGVAR(MarkerColorsCache)) then {
_config = configfile >> "CfgMarkerColors"; _config = configfile >> "CfgMarkerColors";
_index = 0;
GVAR(MarkerColorsCache) = []; GVAR(MarkerColorsCache) = [];
for "_a" from 0 to (count _config - 1) do { for "_a" from 0 to (count _config - 1) do {
_marker = _config select _a; _marker = _config select _a;
_scope = getNumber (_marker >> "scope"); _scope = getNumber (_marker >> "scope");
_name = getText (_marker >> "name");
if (_scope == 2) then { if (_scope == 2) then {
_color lbAdd _name; _name = getText (_marker >> "name");
_color lbSetValue [_index, _a];
_rgba = getArray (_marker >> "color"); _rgba = getArray (_marker >> "color");
{ {
if (typeName _x != "SCALAR") then { if (typeName _x != "SCALAR") then {
_rgba set [_forEachIndex, call compile _x]; _rgba set [_forEachIndex, call compile _x];
}; };
} forEach _rgba; } forEach _rgba;
_icon = format ["#(argb,8,8,3)color(%1,%2,%3,%4)", _rgba select 0, _rgba select 1, _rgba select 2, _rgba select 3]; _icon = format ["#(argb,8,8,3)color(%1,%2,%3,%4)", _rgba select 0, _rgba select 1, _rgba select 2, _rgba select 3];
_color lbSetPicture [_index, _icon];
GVAR(MarkerColorsCache) pushBack [_name, _a, _icon]; GVAR(MarkerColorsCache) pushBack [_name, _a, _icon];
_index = _index + 1;
}; };
}; };
}; };
//Server Sync JIP markers:
[QGVAR(sendMarkersJIP), FUNC(sendMarkersJIP)] call EFUNC(common,addEventHandler); [QGVAR(sendMarkersJIP), FUNC(sendMarkersJIP)] call EFUNC(common,addEventHandler);
ADDON = true; ADDON = true;

View File

@ -1,87 +1,84 @@
// stuff taken from bohemia, edited by commy2 /*
* Author: BIS, commy2
* Sets up the marker placement
* Run instead of \a3\ui_f\scripts\GUI\RscDisplayInsertMarker.sqf
*
* Arguments:
* 0: RscDisplayInsertMarker <DISPLAY>
*
* Return Value:
* Nothing
*
* Example:
* [onLoad] call ace_markers_fnc_initInsertMarker;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
#define BORDER 0.005 #define BORDER 0.005
[{ [{
disableserialization; disableserialization;
_display = _this select 0; PARAMS_1(_display);
//Prevent Captive Players from placing markers //Can't place markers when can't interact
/*if (ACE_player getVariable ["ACE_isCaptive", false]) exitWith { if (!([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith))) exitWith {
_display closeDisplay 2; //emulate "Cancel" button _display closeDisplay 2; //emulate "Cancel" button
};*/ };
// prevent vanilla key input
_display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}];
//BIS Controls:
_text = _display displayctrl 101; _text = _display displayctrl 101;
_picture = _display displayctrl 102; _picture = _display displayctrl 102;
_channel = _display displayctrl 103;
_buttonOK = _display displayctrl 1; _buttonOK = _display displayctrl 1;
_buttonCancel = _display displayctrl 2; _buttonCancel = _display displayctrl 2;
_description = _display displayctrl 1100; _description = _display displayctrl 1100;
_title = _display displayctrl 1001; _title = _display displayctrl 1001;
_sizeX = _display displayctrl 1200; _descriptionChannel = _display displayctrl 1101;
_sizeY = _display displayctrl 1201;
_shape = _display displayctrl 1210;
_color = _display displayctrl 1211;
_angle = _display displayctrl 1220;
_angleText = _display displayctrl 1221;
//ACE Controls:
// _sizeX = _display displayctrl 1200;
// _sizeY = _display displayctrl 1201;
_aceShapeLB = _display displayctrl 1210;
_aceColorLB = _display displayctrl 1211;
_aceAngleSlider = _display displayctrl 1220;
_aceAngleSliderText = _display displayctrl 1221;
//Install MapDrawEH on current map
_mapIDD = -1;
{
if (!isNull (findDisplay _x)) exitWith {_mapIDD = _x};
} forEach [12, 37, 52, 53, 160];
if (_mapIDD == -1) exitWith {ERROR("No Map?");};
if (!(_mapIDD in GVAR(mapDisplaysWithDrawEHs))) then {
GVAR(mapDisplaysWithDrawEHs) pushBack _mapIDD;
((finddisplay _mapIDD) displayctrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(mapDrawEH)}];
};
//Calculate center position of the marker placement ctrl
_pos = ctrlPosition _picture;
_pos = [(_pos select 0) + (_pos select 2) / 2, (_pos select 1) + (_pos select 3) / 2];
GVAR(currentMarkerPosition) = ((findDisplay _mapIDD) displayCtrl 51) ctrlMapScreenToWorld _pos;
//Hide the bis picture:
_picture ctrlShow false;
// prevent vanilla key input
_display displayAddEventHandler ["KeyDown", {(_this select 1) in [200, 208]}];
//Focus on the text input
ctrlSetFocus _text; ctrlSetFocus _text;
//Change ok button's text based on current channel
[{
EXPLODE_2_PVT(_this,_params,_pfhId);
EXPLODE_1_PVT(_params,_buttonOK);
if (isNull _buttonOK) exitWith {
[_pfhId] call CBA_fnc_removePerFrameHandler;
};
_channel = "";
_textColor = [1,1,1,1];
switch (call EFUNC(common,currentChannel)) do {
case ("global"): {
_channel = localize "str_channel_global";
_textColor = [(216/255),(216/255),(216/255),1];
};
case ("side"): {
_channel = localize "str_channel_side";
_textColor = [(70/255),(211/255),(252/255),1];
};
case ("group"): {
_channel = localize "str_channel_group";
_textColor = [(181/255),(248/255),(98/255),1];
};
case ("vehicle"): {
_channel = localize "str_channel_vehicle";
_textColor = [(255/255),(208/255),(0/255),1];
};
case ("direct"): {
_channel = localize "str_channel_direct";
_textColor = [(255/255),(255/255),(255/255),1];
};
case ("command"): {
_channel = localize "str_channel_command";
_textColor = [(255/255),(255/255),(70/255),1];
};
};
//If localization not found, then don't touch anything (default is RscButtonMenuOK's localized text)
if (_channel != "") then {
_buttonOK ctrlSetTextColor _textColor;
_buttonOK ctrlSetText format [localize "STR_ACE_Markers_PlaceIn", _channel];
};
}, 0, [_buttonOK]] call CBA_fnc_addPerFrameHandler;
//--- Background //--- Background
_pos = ctrlposition _text; _pos = ctrlposition _text;
_posX = (_pos select 0) + 0.01; _posX = (_pos select 0) + 0.01;
_posY = _pos select 1; _posY = _pos select 1;
_posW = _pos select 2; _posW = _pos select 2;
_posH = _pos select 3; _posH = _pos select 3;
_posY = _posY min ((safeZoneH + safeZoneY) - (6 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen _posY = _posY min ((safeZoneH + safeZoneY) - (8 * _posH + 8 * BORDER)); //prevent buttons being placed below bottom edge of screen
_pos set [0,_posX]; _pos set [0,_posX];
_pos set [1,_posY]; _pos set [1,_posY];
_text ctrlsetposition _pos; _text ctrlsetposition _pos;
@ -96,46 +93,67 @@
//--- Description //--- Description
_pos set [1,_posY - 1*_posH]; _pos set [1,_posY - 1*_posH];
_pos set [3,6*_posH + 6 * BORDER]; _pos set [3,6*_posH + 6 * BORDER];
_description ctrlenable false;
_description ctrlsetposition _pos; _description ctrlsetposition _pos;
_description ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>","Description:"]; //--- ToDo: Localze _description ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>", (localize "str_lib_label_description")];
_description ctrlcommit 0; _description ctrlcommit 0;
_activeColor = (["IGUI","WARNING_RGB"] call bis_fnc_displaycolorget) call bis_fnc_colorRGBtoHTML;
//--- Shape //--- Shape
_pos set [1,_posY + 1 * _posH + 2 * BORDER]; _pos set [1,_posY + 1 * _posH + 2 * BORDER];
_pos set [2,_posW]; _pos set [2,_posW];
_pos set [3,_posH]; _pos set [3,_posH];
_shape ctrlsetposition _pos; _aceShapeLB ctrlsetposition _pos;
_shape ctrlcommit 0; _aceShapeLB ctrlcommit 0;
//--- Color //--- Color
_pos set [1,_posY + 2 * _posH + 3 * BORDER]; _pos set [1,_posY + 2 * _posH + 3 * BORDER];
_pos set [2,_posW]; _pos set [2,_posW];
_color ctrlsetposition _pos; _aceColorLB ctrlsetposition _pos;
_color ctrlcommit 0; _aceColorLB ctrlcommit 0;
//--- Angle //--- Angle
_pos set [1,_posY + 3 * _posH + 4 * BORDER]; _pos set [1,_posY + 3 * _posH + 4 * BORDER];
_pos set [2,_posW]; _pos set [2,_posW];
_angle ctrlsetposition _pos; _aceAngleSlider ctrlsetposition _pos;
_angle ctrlcommit 0; _aceAngleSlider ctrlcommit 0;
//--- Angle Text //--- Angle Text
_pos set [1,_posY + 4 * _posH + 5 * BORDER]; _pos set [1,_posY + 4 * _posH + 5 * BORDER];
_pos set [2,_posW]; _pos set [2,_posW];
_angleText ctrlsetposition _pos; _aceAngleSliderText ctrlsetposition _pos;
_angleText ctrlcommit 0; _aceAngleSliderText ctrlcommit 0;
_offsetButtons = 0;
if (isMultiplayer) then {
_pos set [1,_posY + 5 * _posH + 7 * BORDER];
_pos set [3,_posH];
_descriptionChannel ctrlsetstructuredtext parsetext format ["<t size='0.8'>%1</t>", (localize "str_a3_cfgvehicles_modulerespawnposition_f_arguments_marker_0") + ":"];
_descriptionChannel ctrlsetposition _pos;
_descriptionChannel ctrlcommit 0;
_pos set [1,_posY + 6 * _posH + 7 * BORDER];
_pos set [3,_posH];
_channel ctrlsetposition _pos;
_channel ctrlcommit 0;
_offsetButtons = 7 * _posH + 8 * BORDER;
} else {
_descriptionChannel ctrlshow false;
_channel ctrlshow false;
_offsetButtons = 5 * _posH + 7 * BORDER;
};
//--- ButtonOK //--- ButtonOK
_pos set [1,_posY + 5 * _posH + 7 * BORDER]; _pos set [1,_posY + _offsetButtons];
_pos set [2,_posW * (8.9/10) - BORDER]; _pos set [2,_posW / 2 - BORDER];
_pos set [3,_posH];
_buttonOk ctrlsetposition _pos; _buttonOk ctrlsetposition _pos;
_buttonOk ctrlcommit 0; _buttonOk ctrlcommit 0;
//--- ButtonCancel //--- ButtonCancel
_pos set [0,_posX + _posW * (8.9 / 10)]; _pos set [0,_posX + _posW / 2];
_pos set [2,_posW * (1.1 / 10)]; _pos set [1,_posY + _offsetButtons];
_pos set [2,_posW / 2];
_pos set [3,_posH];
_buttonCancel ctrlsetposition _pos; _buttonCancel ctrlsetposition _pos;
_buttonCancel ctrlcommit 0; _buttonCancel ctrlcommit 0;
@ -151,56 +169,41 @@
// init marker shape lb // init marker shape lb
lbClear _aceShapeLB;
{ {
_shape lbAdd (_x select 0); _aceShapeLB lbAdd (_x select 0);
_shape lbSetValue [_forEachIndex, _x select 1]; _aceShapeLB lbSetValue [_forEachIndex, _x select 1];
_shape lbSetPicture [_forEachIndex, _x select 2]; _aceShapeLB lbSetPicture [_forEachIndex, _x select 2];
} forEach GVAR(MarkersCache); } forEach GVAR(MarkersCache);
_shape ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedShape)}];
_curSelShape = GETGVAR(curSelMarkerShape,0); _curSelShape = GETGVAR(curSelMarkerShape,0);
_shape lbSetCurSel _curSelShape; _aceShapeLB lbSetCurSel _curSelShape;
_data = _shape lbValue _curSelShape;
_config = (configfile >> "CfgMarkers") select _data; //Update now and add eventHandler:
_icon = getText (_config >> "icon"); [_aceShapeLB, _curSelShape] call FUNC(onLBSelChangedShape);
_picture ctrlSetText _icon; _aceShapeLB ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedShape)}];
// init marker color lb // init marker color lb
lbClear _aceColorLB;
{ {
_color lbAdd (_x select 0); _aceColorLB lbAdd (_x select 0);
_color lbSetValue [_forEachIndex, _x select 1]; _aceColorLB lbSetValue [_forEachIndex, _x select 1];
_color lbSetPicture [_forEachIndex, _x select 2]; _aceColorLB lbSetPicture [_forEachIndex, _x select 2];
} forEach GVAR(MarkerColorsCache); } forEach GVAR(MarkerColorsCache);
_color ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedColor)}];
_curSelColor = GETGVAR(curSelMarkerColor,0); _curSelColor = GETGVAR(curSelMarkerColor,0);
_color lbSetCurSel _curSelColor; _aceColorLB lbSetCurSel _curSelColor;
_data = _color lbValue _curSelColor;
_config = (configfile >> "CfgMarkerColors") select _data; //Update now and add eventHandler:
_rgba = getArray (_config >> "color"); [_aceColorLB, _curSelColor] call FUNC(onLBSelChangedColor);
{ _aceColorLB ctrlAddEventHandler ["LBSelChanged", {_this call FUNC(onLBSelChangedColor)}];
if (typeName _x != "SCALAR") then {
_rgba set [_forEachIndex, call compile _x];
};
} forEach _rgba;
_picture ctrlSetTextColor _rgba;
// init marker angle slider // init marker angle slider
_angle sliderSetRange [-180, 180]; _aceAngleSlider sliderSetRange [-180, 180];
_angle ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedAngle)}]; _curSelAngle = GETGVAR(currentMarkerAngle,0);
_aceAngleSlider sliderSetPosition _curSelAngle;
_curSelAngle = GETGVAR(curSelMarkerAngle,0); //Update now and add eventHandler:
_angle sliderSetPosition _curSelAngle; [_aceAngleSlider, _curSelAngle] call FUNC(onSliderPosChangedAngle);
_aceAngleSlider ctrlAddEventHandler ["SliderPosChanged", {_this call FUNC(onSliderPosChangedAngle)}];
_curSelAngle = round _curSelAngle;
if (_curSelAngle < 0) then {
_curSelAngle = _curSelAngle + 360;
};
_angleText ctrlSetText format [localize "STR_ACE_Markers_MarkerDirection", _curSelAngle];
}, _this] call EFUNC(common,execNextFrame); }, _this] call EFUNC(common,execNextFrame);

View File

@ -0,0 +1,45 @@
/*
* Author: PabstMirror
* Draws the current temp marker. Allows rotation.
*
* Arguments:
* 0: TheMap <Control>
*
* Return Value:
* Nothing
*
* Example:
* [theMapControl] call ace_markers_fnc_mapDrawEH;
*
* Public: No
*/
#include "script_component.hpp"
private ["_theMap", "_sizeX", "_sizeY", "_textureConfig", "_texture", "_markerSize", "_markerShadow", "_colorConfig", "_drawColor"];
PARAMS_1(_theMap);
//Only show if marker place is open:
if (isNull (findDisplay 54)) exitWith {};
//Error checking:
if ((GVAR(currentMarkerConfigName) == "") || {GVAR(currentMarkerColorConfigName) == ""} || {GVAR(currentMarkerPosition) isEqualTo []}) exitWith {ERROR("Bad Data");};
_sizeX = 1;
_sizeY = 1;
_textureConfig = configFile >> "CfgMarkers" >> GVAR(currentMarkerConfigName);
_texture = getText (_textureConfig >> "icon");
_markerSize = getNumber (_textureConfig >> "size");
_markerShadow = getNumber (_textureConfig >> "shadow");
_colorConfig = (configFile >> "CfgMarkerColors" >> GVAR(currentMarkerColorConfigName));
_drawColor = getArray (_colorConfig >> "color");
//Convert possible code into numbers
{
if (typeName _x == "STRING") then {
_drawColor set [_forEachIndex, (call compile _x)];
};
} forEach _drawColor;
_drawColor set [3, ((_drawColor select 3) * 0.875)]; //Arma adds a slight transparency
_theMap drawIcon [_texture, _drawColor, GVAR(currentMarkerPosition), (_sizeX * _markerSize), (_sizeY * _markerSize), GVAR(currentMarkerAngle), "", _markerShadow];

View File

@ -1,23 +1,28 @@
// by commy2 /*
* Author: commy2
* When the color list box is changed.
*
* Arguments:
* 0: Color ListBox (idc 1211) <CONTROL>
* 1: Selected Index <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [ColorLB, 5] call ace_markers_fnc_onLBSelChangedColor;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
private ["_ctrl", "_data", "_config", "_color"]; private ["_data", "_config"];
_ctrl = _this select 0; PARAMS_2(_ctrl,_index);
_data = _ctrl lbValue (_this select 1); _data = _ctrl lbValue _index;
GVAR(curSelMarkerColor) = _this select 1; GVAR(curSelMarkerColor) = _index;
_config = (configfile >> "CfgMarkerColors") select _data; _config = (configfile >> "CfgMarkerColors") select _data;
_color = getArray (_config >> "color");
{
if (typeName _x != "SCALAR") then {
_color set [_forEachIndex, call compile _x];
};
} forEach _color;
((ctrlParent _ctrl) displayCtrl 102) ctrlSetTextColor _color;
GVAR(currentMarkerColorConfigName) = (configName _config); GVAR(currentMarkerColorConfigName) = (configName _config);

View File

@ -1,17 +1,28 @@
// by commy2 /*
* Author: commy2
* When the shape list box is changed.
*
* Arguments:
* 0: Shape ListBox (idc 1210) <CONTROL>
* 1: Selected Index <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [ColorLB, 5] call ace_markers_fnc_onLBSelChangedShape;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
private ["_ctrl", "_data", "_config", "_icon"]; private ["_data", "_config"];
_ctrl = _this select 0; PARAMS_2(_ctrl,_index);
_data = _ctrl lbValue (_this select 1); _data = _ctrl lbValue _index;
GVAR(curSelMarkerShape) = _this select 1; GVAR(curSelMarkerShape) = _index;
_config = (configfile >> "CfgMarkers") select _data; _config = (configfile >> "CfgMarkers") select _data;
_icon = getText (_config >> "icon");
((ctrlParent _ctrl) displayCtrl 102) ctrlSetText _icon;
GVAR(currentMarkerConfigName) = (configName _config); GVAR(currentMarkerConfigName) = (configName _config);

View File

@ -1,12 +1,24 @@
// by commy2 /*
* Author: commy2
* Angle Slider Pos changed
*
* Arguments:
* 0: Slider (idc 1210) <CONTROL>
* 1: Slider Data (angle: -180..180) <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [Slider, 2] call ace_markers_fnc_onSliderPosChangedAngle;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
private ["_ctrl", "_data", "_direction"]; private ["_direction"];
_ctrl = _this select 0; PARAMS_2(_ctrl,_data);
_data = _this select 1;
GVAR(curSelMarkerAngle) = _data;
_direction = round _data; _direction = round _data;
if (_direction < 0) then { if (_direction < 0) then {

View File

@ -1,46 +1,36 @@
// by commy2 /*
* Author: commy2
* MarkerPlacement closed
*
* Arguments:
* 0: RscDisplayInsertMarker <DISPLAY>
* 1: CloseNumber (1 = ButtonOk) <NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* [onUnloadEvent] call ace_markers_fnc_placeMarker;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
if (_this select 1 == 1) then { disableserialization;
disableserialization; PARAMS_2(_display,_closeNum);
_display = _this select 0;
_pos = ctrlPosition (_display displayCtrl 102); if (_closeNum == 1) then {
_pos = [
(_pos select 0) + (_pos select 2) / 2,
(_pos select 1) + (_pos select 3) / 2
];
switch (true) do {
case (!isNull findDisplay 12): {
_pos = (findDisplay 12 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
case (!isNull findDisplay 37): {
_pos = (findDisplay 37 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
case (!isNull findDisplay 52): {
_pos = (findDisplay 52 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
case (!isNull findDisplay 53): {
_pos = (findDisplay 53 displayCtrl 51) ctrlMapScreenToWorld _pos;
};
};
// set and send marker data the next frame. the actual marker isn't created yet // set and send marker data the next frame. the actual marker isn't created yet
[ [{
{
[QGVAR(setMarkerNetwork), [ [QGVAR(setMarkerNetwork), [
allMapMarkers select (count allMapMarkers - 1), [ allMapMarkers select (count allMapMarkers - 1), [
GETGVAR(currentMarkerConfigName,""), GETGVAR(currentMarkerConfigName,""),
GETGVAR(currentMarkerColorConfigName,""), GETGVAR(currentMarkerColorConfigName,""),
_this, GETGVAR(currentMarkerPosition,[]),
GETGVAR(currentMarkerAngle,0) GETGVAR(currentMarkerAngle,0)
] ]
]] call EFUNC(common,globalEvent); ]] call EFUNC(common,globalEvent);
}, }, []] call EFUNC(common,execNextFrame);
_pos
] call EFUNC(common,execNextFrame);
}; };

View File

@ -1,13 +1,25 @@
// by commy2 /*
* Author: commy2
* Server: Recives a dummy logic, sends marker data back to the owner.
*
* Arguments:
* 0: Logic <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [onUnloadEvent] call ace_markers_fnc_sendMarkerJIP;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
private "_logic"; PARAMS_1(_logic);
_logic = _this; [QGVAR(setMarkerJIP), [_logic], [
GETGVAR(allMapMarkers,[]),
[QGVAR(setMarkerJIP), _logic, [ GETGVAR(allMapMarkersProperties,[]),
GETGVAR(allMapMarkers,[]), _logic
GETGVAR(allMapMarkersProperties,[]), ]
_logic
]
] call EFUNC(common,targetEvent); ] call EFUNC(common,targetEvent);

View File

@ -1,11 +1,25 @@
// by commy2 /*
* Author: commy2
* Client: Recives a marker data from server.
*
* Arguments:
* 0: Array of map marker names <ARRAY>
* 1: Array of map marker data <ARRAY>
* 2: Logic <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [[],[],dummyLogic] call ace_markers_fnc_setMarkerJIP;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
private ["_allMapMarkers", "_allMapMarkersProperties", "_index", "_data", "_config"]; private ["_index", "_data", "_config"];
_allMapMarkers = _this select 0; PARAMS_3(_allMapMarkers,_allMapMarkersProperties,_logic);
_allMapMarkersProperties = _this select 1;
_logic = _this select 2;
{ {
_index = _allMapMarkers find _x; _index = _allMapMarkers find _x;

View File

@ -1,34 +1,50 @@
// by commy2 /*
* Author: commy2
* Sets newly placed marker
* Handles the QGVAR(setMarkerNetwork) event.
*
* Arguments:
* 0: Markername <STRING>
* 1: Marker Data <ARRAY>
*
* Return Value:
* Nothing
*
* Example:
* [[],[],dummyLogic] call ace_markers_fnc_setMarkerJIP;
*
* Public: No
*/
#include "script_component.hpp" #include "script_component.hpp"
private ["_marker", "_data", "_config"]; private ["_config"];
_marker = _this select 0; PARAMS_2(_marker,_data);
_data = _this select 1; EXPLODE_4_PVT(_data,_markerClassname,_colorClassname,_markerPos,_markerDir);
_config = (configfile >> "CfgMarkers") >> (_data select 0); _config = (configfile >> "CfgMarkers") >> _markerClassname;
if (!isClass _config) then { if (!isClass _config) then {
WARNING("CfgMarker not found, changed to milDot"); WARNING("CfgMarker not found, changed to milDot");
_config == (configFile >> "CfgMarkers" >> "MilDot"); _config == (configFile >> "CfgMarkers" >> "MilDot");
}; };
_marker setMarkerTypeLocal (configName _config); _marker setMarkerTypeLocal (configName _config);
_config = (configfile >> "CfgMarkerColors") >> (_data select 1); _config = (configfile >> "CfgMarkerColors") >> _colorClassname;
if (!isClass _config) then { if (!isClass _config) then {
WARNING("CfgMarkerColors not found, changed to Default"); WARNING("CfgMarkerColors not found, changed to Default");
_config == (configFile >> "CfgMarkerColors" >> "Default"); _config == (configFile >> "CfgMarkerColors" >> "Default");
}; };
_marker setMarkerColorLocal configName _config; _marker setMarkerColorLocal configName _config;
_marker setMarkerPosLocal (_data select 2); _marker setMarkerPosLocal _markerPos;
_marker setMarkerDirLocal (_data select 3); _marker setMarkerDirLocal _markerDir;
// save properties on server machine for JIP, marker editing ready // save properties on server machine for JIP, marker editing ready
if (isMultiplayer && {isServer}) then { if (isMultiplayer && {isServer}) then {
private ["_allMapMarkers", "_allMapMarkersProperties", "_index"]; private ["_allMapMarkers", "_allMapMarkersProperties", "_index"];
_allMapMarkers = GETMVAR(allMapMarkers,[]); _allMapMarkers = GETGVAR(allMapMarkers,[]);
_allMapMarkersProperties = GETMVAR(allMapMarkersProperties,[]); _allMapMarkersProperties = GETGVAR(allMapMarkersProperties,[]);
_index = _allMapMarkers find _marker; _index = _allMapMarkers find _marker;

View File

@ -11,13 +11,5 @@
<Spanish>Dirección: %1°</Spanish> <Spanish>Dirección: %1°</Spanish>
<Russian>Направление: %1</Russian> <Russian>Направление: %1</Russian>
</Key> </Key>
<Key ID="STR_ACE_Markers_PlaceIn">
<English>Place in: %1</English>
<German>Platz in: %1</German>
<Spanish>Colocar en: %1</Spanish>
<Polish>Umieść na: %1</Polish>
<Czech>Umístit do: %1</Czech>
<Russian>Место в: %1</Russian>
</Key>
</Package> </Package>
</Project> </Project>

View File

@ -95,3 +95,12 @@ class RscDisplayInterruptEditor3D: RscStandardDisplay {
class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {};
}; };
}; };
class RscDisplayMain: RscStandardDisplay {
class controls {
class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {
action = "if (missionName != '') then {createDialog 'ACE_settingsMenu';};";
y = "4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + safezoneY";
};
};
};

View File

@ -1,43 +0,0 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
};
};
class Extended_FiredBis_EventHandlers {
class CAManBase {
class ADDON {
clientFiredBis = QUOTE(if (_this select 0 == ACE_player) then {_this call FUNC(camShake); _this call FUNC(burstDispersion);};);
};
};
class Tank {
class ADDON {
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
};
};
class Car {
class ADDON {
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
};
};
class Helicopter {
class ADDON {
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
};
};
class Plane {
class ADDON {
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
};
};
class Ship_F {
class ADDON {
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
};
};
class StaticWeapon {
class ADDON {
clientFiredBis = QUOTE(if (_this select 0 == vehicle ACE_player) then {_this call FUNC(camShake);};);
};
};
};

View File

@ -1,8 +0,0 @@
#include "script_component.hpp"
ADDON = false;
PREP(burstDispersion);
PREP(camShake);
ADDON = true;

View File

@ -6,14 +6,12 @@ class CfgPatches {
weapons[] = {}; weapons[] = {};
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"}; requiredAddons[] = {"ace_common"};
author[] = {"KoffeinFlummi", "TaoSensai", "commy2"}; author[] = {"KoffeinFlummi","TaoSensai","commy2"};
authorUrl = "https://github.com/Taosenai/tmr"; authorUrl = "https://github.com/Taosenai/tmr";
VERSION_CONFIG; VERSION_CONFIG;
}; };
}; };
#include "CfgEventHandlers.hpp"
// DOC: http://forums.bistudio.com/showthread.php?94464-explaining-the-cfgRecoils-array // DOC: http://forums.bistudio.com/showthread.php?94464-explaining-the-cfgRecoils-array
class CfgRecoils { class CfgRecoils {
#define KICKBACK 0.07 #define KICKBACK 0.07
@ -114,17 +112,18 @@ class CfgRecoils {
recoil_single_titan[] = {0,0,0}; recoil_single_titan[] = {0,0,0};
}; };
class CfgCameraShake { /*class CfgCameraShake {
// Seems to be ignored by Arma // Seems to be ignored by Arma
defaultCaliberCoefWeaponFire = 0; defaultCaliberCoefWeaponFire = 0;
}; };*/
// Completely disable BI's camshake on fire. // Completely disable BI's camshake on fire.
class CfgMovesBasic { /*class CfgMovesBasic {
class Default { class Default {
camShakeFire = 0; camShakeFire = 0;
}; };
}; };
class CfgMovesMaleSdr : CfgMovesBasic { class CfgMovesMaleSdr : CfgMovesBasic {
class States { class States {
class AmovPercMstpSlowWrflDnon; class AmovPercMstpSlowWrflDnon;
@ -183,128 +182,4 @@ class CfgMovesMaleSdr : CfgMovesBasic {
camShakeFire = 0; camShakeFire = 0;
}; };
}; };
}; };*/
// Ammo
class CfgAmmo {
class MissileCore;
class MissileBase: MissileCore {
GVAR(shakeMultiplier) = 2;
};
class BombCore;
class LaserBombCore: BombCore {
GVAR(shakeMultiplier) = 2;
};
class Bo_Mk82: BombCore {
GVAR(shakeMultiplier) = 2;
};
class RocketCore;
class ArtilleryRocketCore: RocketCore {
GVAR(shakeMultiplier) = 1.4;
};
class RocketBase: RocketCore {
GVAR(shakeMultiplier) = 1.4;
};
class BulletCore;
class BulletBase: BulletCore {
GVAR(shakeMultiplier) = 1;
};
class ShotgunCore;
class ShotgunBase: ShotgunCore {
GVAR(shakeMultiplier) = 1.1;
};
class ShellCore;
class ShellBase: ShellCore {
GVAR(shakeMultiplier) = 3;
};
class SubmunitionCore;
class SubmunitionBase: SubmunitionCore {
GVAR(shakeMultiplier) = 3;
};
class ShotDeployCore;
class ShotDeployBase: ShotDeployCore {
GVAR(shakeMultiplier) = 3;
};
};
// Weapons
// 1. Set the recoil profiles for all fire modes.
// 2. Set the shake multiplier. This determines the camshake for the weapon.
// Ex: GVAR(shakeMultiplier) = 1; (disabled currently)
class CfgWeapons {
class CannonCore;
class autocannon_Base_F: CannonCore {
GVAR(shakeMultiplier) = 0;
};
class autocannon_35mm: CannonCore {
GVAR(shakeMultiplier) = 0;
};
class cannon_120mm: CannonCore {
GVAR(shakeMultiplier) = 0;
};
class mortar_155mm_AMOS: CannonCore {
GVAR(shakeMultiplier) = 0;
};
class mortar_82mm: CannonCore {
GVAR(shakeMultiplier) = 0;
};
// No camshake for gatlings
class gatling_20mm: CannonCore {
GVAR(shakeMultiplier) = 0;
};
class gatling_25mm: CannonCore {
GVAR(shakeMultiplier) = 0;
};
class gatling_30mm: CannonCore {
GVAR(shakeMultiplier) = 0;
};
class MGunCore;
class MGun: MGunCore {
GVAR(shakeMultiplier) = 0;
};
// No camshake for smoke launchers
class SmokeLauncher: MGun {
GVAR(shakeMultiplier) = 0;
};
// No camshake for coax machine guns
class LMG_RCWS;
class LMG_M200: LMG_RCWS {
GVAR(shakeMultiplier) = 0;
};
class LMG_coax: LMG_RCWS {
GVAR(shakeMultiplier) = 0;
};
class LMG_Minigun: LMG_RCWS {
GVAR(shakeMultiplier) = 0;
};
};
// Vehicles
class CfgVehicles {
class LandVehicle;
class Tank: LandVehicle {
GVAR(enableCamshake) = 1;
};
class Car: LandVehicle {
GVAR(enableCamshake) = 1;
};
class StaticWeapon: LandVehicle {
GVAR(enableCamshake) = 1;
};
class Allvehicles;
class Air: Allvehicles {
GVAR(enableCamshake) = 1;
};
};

View File

@ -1,62 +0,0 @@
// TMR: Small Arms - Recoil initialization and functions
// (C) 2013 Ryan Schultz. See LICENSE.
// Edited for compatability in ACE by KoffeinFlummi
// Edited by commy2
#include "script_component.hpp"
private ["_unit", "_weapon", "_projectile"];
_unit = _this select 0;
_weapon = _this select 1;
_projectile = _this select 6;
if (_weapon in ["Throw", "Put"]) exitWith {};
private ["_lastFired", "_burst"];
_lastFired = _unit getVariable [QUOTE(GVAR(lastFired)), -1];
_burst = _unit getVariable [QUOTE(GVAR(burst)), 0];
if (time - _lastFired < 0.45) then {
private "_startDisperse";
_burst = _burst + 1;
_unit setVariable [QUOTE(GVAR(burst)), _burst, false];
_startDisperse = [1, 3] select (cameraView == "GUNNER");
if (_burst > _startDisperse) then {
// Reset burst size for calcs
_burst = _burst - _startDisperse;
// Increase dispersion cap if player is not using sights
_sightsBurst = [30, 0] select (cameraView == "GUNNER");
// Increase initial dispersion and cap if player is moving
if (speed _unit > 0.5) then {
_sightsBurst = 25;
_burst = _burst + 15;
};
// Maximum possible dispersion (without _sightsBurst mod)
_maxBurst = 50;
if (_unit getVariable [QUOTE(EGVAR(resting,weaponRested)), false]) then {_maxBurst = 25};
if (_unit getVariable [QUOTE(EGVAR(resting,bipodDeployed)), false]) then {_maxBurst = 18};
// Cap the dispersion
_burst = (_burst min _maxBurst) + _sightsBurst;
// Add random variance
_elevAngle = (_burst / 300) - random (_burst / 300) * 2;
_travAngle = (_burst / 260) - random (_burst / 260) * 2;
[_projectile, _travAngle, _elevAngle] call EFUNC(common,changeProjectileDirection);
};
} else {
// Long enough delay, reset burst
_unit setVariable [QUOTE(GVAR(burst)), 0, false];
};
_unit setVariable [QUOTE(GVAR(lastFired)), time, false];

View File

@ -1,61 +0,0 @@
// TMR: Small Arms - Recoil initialization and functions
// (C) 2013 Ryan Schultz. See LICENSE.
// Edited for compatability in ACE by KoffeinFlummi
// Edited by commy2
#include "script_component.hpp"
#define BASE_POWER 0.40
#define BASE_TIME 0.19
#define BASE_FREQ 13
#define RECOIL_COEF 40
private ["_unit", "_weapon", "_muzzle", "_ammo"];
_unit = _this select 0;
_weapon = _this select 1;
_muzzle = _this select 2;
_ammo = _this select 4;
if (_weapon in [handgunWeapon _unit, "Throw", "Put"]) exitWith {};
private ["_powerMod", "_timeMod", "_freqMod", "_powerCoef"];
_powerMod = ([0, -0.1, -0.1, 0, -0.2] select (["STAND", "CROUCH", "PRONE", "UNDEFINED", ""] find stance _unit)) + ([0, -1, 0, -1] select (["INTERNAL", "EXTERNAL", "GUNNER", "GROUP"] find cameraView));
_timeMod = 0;
_freqMod = 0;
_powerCoef = 0;
if (_unit != vehicle _unit) then {
_powerCoef = getNumber (configFile >> "CfgWeapons" >> _weapon >> QUOTE(GVAR(shakeMultiplier)));
_powerCoef = _powerCoef * getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(GVAR(shakeMultiplier)));
} else {
private ["_type", "_config", "_recoil"];
_type = ["recoil", "recoilProne"] select (stance _unit == "PRONE");
_config = configFile >> "CfgWeapons" >> _weapon;
_recoil = if (_muzzle == _weapon) then {
getText (_config >> _type)
} else {
getText (_config >> _muzzle >> _type)
};
_recoil = getArray (configFile >> "CfgRecoils" >> _recoil);
if (count _recoil < 2) exitWith {};
_powerCoef = _recoil select 1;
_powerCoef = (call compile format ["%1", _powerCoef]) * RECOIL_COEF;
};
if (_unit getVariable [QUOTE(EGVAR(resting,weaponRested)), false]) then {_powerMod = _powerMod - 0.07};
if (_unit getVariable [QUOTE(EGVAR(resting,bipodDeployed)), false]) then {_powerMod = _powerMod - 0.11};
private "_camshake";
_camshake = [
_powerCoef * (BASE_POWER + _powerMod) max 0,
BASE_TIME + _timeMod max 0,
BASE_FREQ + _freqMod max 0
];
addCamShake _camshake;

View File

@ -1,12 +0,0 @@
#define COMPONENT recoil
#include "\z\ace\Addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_RECOIL
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_RECOIL
#define DEBUG_SETTINGS DEBUG_SETTINGS_RECOIL
#endif
#include "\z\ace\Addons\main\script_macros.hpp"

View File

@ -1 +0,0 @@
z\ace\addons\resting

View File

@ -1,12 +0,0 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE( call COMPILE_FILE(XEH_postInit) );
};
};

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +0,0 @@
class CfgSounds {
class GVAR(rest)
{
name=QGVAR(rest);
sound[]={QUOTE(PATHTOF(sounds\weaponrest_rest.wav)),1,1};
titles[]={};
};
class GVAR(unrest)
{
name=QGVAR(unrest);
sound[]={QUOTE(PATHTOF(sounds\weaponrest_unrest.wav)),1,1};
titles[]={};
};
};

View File

@ -1,22 +0,0 @@
class CfgWeapons {
class Rifle_Long_Base_F;
class arifle_MX_Base_F;
class arifle_MX_SW_F : arifle_MX_Base_F {
ACE_Bipod = 1;
};
class LMG_Mk200_F : Rifle_Long_Base_F {
ACE_Bipod = 1;
};
class LMG_Zafir_F: Rifle_Long_Base_F {
ACE_Bipod = 1;
};
class LRR_base_F : Rifle_Long_Base_F {
ACE_Bipod = 1;
};
class GM6_base_F : Rifle_Long_Base_F {
ACE_Bipod = 1;
};
};

View File

@ -1,12 +0,0 @@
ace_resting
===========
Introduces weapon resting and bipod deployment, allowing the player to increase the stability of his weapon.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [KoffeinFlummi](https://github.com/KoffeinFlummi)
- [commy2](https://github.com/commy2)

View File

@ -1,23 +0,0 @@
// by esteldunedain
#include "script_component.hpp"
if !(hasInterface) exitWith {};
// Add keybinds
["ACE3", QGVAR(RestWeapon), localize "STR_ACE_Resting_RestWeapon",
{
// Conditions: canInteract
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if !([ACE_player] call EFUNC(common,canUseWeapon) &&
{inputAction 'reloadMagazine' == 0} &&
{!weaponLowered ACE_player} &&
{speed ACE_player < 1}) exitWith {false};
// Statement
[ACE_player, vehicle ACE_player, currentWeapon ACE_player] call FUNC(restWeapon);
// Return false so it doesn't block other actions
false
},
{false},
[15, [false, false, false]], false] call cba_fnc_addKeybind;

View File

@ -1,11 +0,0 @@
#include "script_component.hpp"
ADDON = false;
PREP(getIntersection);
PREP(hasBipod);
PREP(pfhCheckRest);
PREP(restWeapon);
PREP(unRestWeapon);
ADDON = true;

View File

@ -1,21 +0,0 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[] = {"KoffeinFlummi", "TaoSensai", "esteldunedain"};
authorUrl = "https://github.com/KoffeinFlummi/";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "CfgWeapons.hpp"
#include "CfgMoves.hpp"
#include "CfgSounds.hpp"

View File

@ -1,70 +0,0 @@
/*
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
*
* Prepares intersects
*
* Arguments:
* 0: unit
* 1: vehicle
* 2: weapon
*
* Return Values:
* [_intersectsMiddle, _intersectsLeft, _intersectsRight, _intersectsDown]
*
*/
#include "script_component.hpp"
EXPLODE_3_PVT(_this,_unit,_vehicle,_weapon);
private ["_weaponPos", "_weaponDir", "_weaponPosDown"];
_weaponPos = ATLtoASL (_unit modelToWorldVisual (_unit selectionPosition "RightHand"));
_weaponDir = _unit weaponDirection _weapon;
_weaponPosDown = _weaponPos vectorAdd [0,0,-MAXHEIGHT];
private ["_checkPosMiddle", "_checkPosLeft", "_checkPosRight", "_checkPosDown"];
_checkPosMiddle = [
(_weaponPos select 0) + MAXDISTANCE * (_weaponDir select 0),
(_weaponPos select 1) + MAXDISTANCE * (_weaponDir select 1),
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2)
];
_checkPosLeft = [
(_weaponPos select 0) + MAXDISTANCE * sin (((_weaponDir select 0) atan2 (_weaponDir select 1)) + 360 - MAXANGLE),
(_weaponPos select 1) + MAXDISTANCE * cos (((_weaponDir select 0) atan2 (_weaponDir select 1)) + 360 - MAXANGLE),
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2)
];
_checkPosRight = [
(_weaponPos select 0) + MAXDISTANCE * sin (((_weaponDir select 0) atan2 (_weaponDir select 1)) + MAXANGLE),
(_weaponPos select 1) + MAXDISTANCE * cos (((_weaponDir select 0) atan2 (_weaponDir select 1)) + MAXANGLE),
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2)
];
_checkPosDown = [
(_weaponPos select 0) + MAXDISTANCE * (_weaponDir select 0),
(_weaponPos select 1) + MAXDISTANCE * (_weaponDir select 1),
(_weaponPos select 2) + MAXDISTANCE * (_weaponDir select 2) - MAXHEIGHT
];
/* UNCOMMENT THIS FOR DEBUGGING
weaponPos = ASLtoATL _weaponPos;
weaponPosDown = ASLtoATL _weaponPosDown;
checkPosMiddle = ASLtoATL _checkPosMiddle;
checkPosLeft = ASLtoATL _checkPosLeft;
checkPosRight = ASLtoATL _checkPosRight;
checkPosDown = ASLtoATL _checkPosDown;
onEachFrame {
drawLine3D [weaponPos, checkPosMiddle, [1,0,0,1]];
drawLine3D [weaponPos, checkPosLeft, [1,0,0,1]];
drawLine3D [weaponPos, checkPosRight, [1,0,0,1]];
drawLine3D [weaponPosDown, checkPosDown, [1,0,0,1]];
};*/
private ["_intersectsMiddle", "_intersectsLeft", "_intersectsRight", "_intersectsDown"];
_intersectsMiddle = lineIntersects [_weaponPos, _checkPosMiddle];
_intersectsLeft = lineIntersects [_weaponPos, _checkPosLeft];
_intersectsRight = lineIntersects [_weaponPos, _checkPosRight];
_intersectsDown = lineIntersects [_weaponPos, _checkPosDown] || {terrainIntersectASL [_weaponPosDown, _checkPosDown]};
[_intersectsMiddle, _intersectsLeft, _intersectsRight, _intersectsDown]

View File

@ -1,22 +0,0 @@
/*
* Author: Commy2
*
* Check if the weapon has a bipod
*
* Arguments:
* 0: weapon
*
* Return Values:
* Boolean
*
*/
#include "script_component.hpp"
EXPLODE_1_PVT(_this,_weapon);
private ["_config"];
_config = configFile >> "CfgWeapons" >> _weapon;
getNumber (_config >> "ACE_Bipod") == 1 ||
getNumber (_config >> "AGM_Bipod") == 1 ||
{getNumber (_config >> "tmr_autorest_deployable") == 1}

View File

@ -1,41 +0,0 @@
/*
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
*
* PFH that check for player moving away, changing weapon, etc
* and unrests the weapon if necessary
*
* Arguments:
* 0: unit
* 1: vehicle
* 2: weapon
* 3: rested position
*
* Return Values:
* None
*
*/
#include "script_component.hpp"
EXPLODE_2_PVT(_this,_params,_pfhId);
EXPLODE_4_PVT(_params,_unit,_vehicle,_weapon,_restedPosition);
if !(_unit getVariable ["ACE_weaponRested", false]) exitWith {
[_pfhId] call cba_fnc_removePerFrameHandler;
};
private ["_intersects"];
_intersects = _params call FUNC(getIntersection);
if (
_unit != ACE_player
|| {_vehicle != vehicle _unit}
|| {inputAction "reloadMagazine" != 0}
|| {weaponLowered _unit}
|| {speed _unit > 1}
|| {currentWeapon _unit != _weapon}
|| {getPosASL _unit distanceSqr _restedPosition > 1}
|| {!(true in _intersects)}
) exitWith {
[_pfhId] call cba_fnc_removePerFrameHandler;
[_unit, _vehicle, _weapon] call FUNC(unRestWeapon);
};

View File

@ -1,66 +0,0 @@
/*
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
*
* Rests the player's weapon if possible.
*
* Arguments:
* None
*
* Return Values:
* None
*
*/
#include "script_component.hpp"
EXPLODE_3_PVT(_this,_unit,_vehicle,_weapon);
if (_weapon != primaryWeapon _unit) exitWith {};
if (_unit getVariable ["ACE_weaponRested", false]) exitWith {_this call FUNC(unRestWeapon)};
// exit if this is not an available animation
if (!isClass (configFile >> "CfgMovesMaleSdr" >> "States" >> format ["%1_ace_deploy", animationState _unit])) exitWith {};
// CHECK FOR APPROPRIATE SURFACE
private "_intersects";
_intersects = _this call FUNC(getIntersection);
if (true in _intersects) then {
_unit setVariable ["ACE_weaponRested", true];
if (_unit == ACE_PLAYER) then {
[QGVAR(bipodDeployed), true, QUOTE(PATHTOF(data\icons\icon_bipod.paa)), [1,1,1,1], -1] call EFUNC(common,displayIcon);
};
private "_restedPosition";
_restedPosition = getPosASL _unit;
// REST THE WEAPON
addCamShake CAMSHAKE;
playSound QGVAR(rest);
if ([_weapon] call FUNC(hasBipod) && {_intersects select 3}) then {
_unit setVariable ["ACE_bipodDeployed", true];
_unit setUnitRecoilCoefficient (BIPODRECOIL * unitRecoilCoefficient _unit);
//[_unit, format ["%1_ace_deploy", animationState _unit], 2] call EFUNC(common,doAnimation);
_unit switchMove format ["%1_ace_deploy", animationState _unit];
private "_picture";
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
[localize "STR_ACE_Resting_BipodDeployed", _picture] call EFUNC(common,displayTextPicture);
} else {
_unit setVariable ["ACE_bipodDeployed", false];
_unit setUnitRecoilCoefficient (RESTEDRECOIL * unitRecoilCoefficient _unit);
//[_unit, format ["%1_ace_rested", animationState _unit], 2] call EFUNC(common,doAnimation);
_unit switchMove format ["%1_ace_rested", animationState _unit];
private "_picture";
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
[localize "STR_ACE_Resting_WeaponRested", _picture] call EFUNC(common,displayTextPicture);
};
// Launch a PFH to check for player moving away, changing weapon, etc
[FUNC(pfhCheckRest), 0.2, [_unit, _vehicle, _weapon, _restedPosition] ] call CBA_fnc_addPerFrameHandler;
};

View File

@ -1,53 +0,0 @@
/*
* Author: KoffeinFlummi, edited by commy2 and esteldunedain
*
* Un Rests the player's weapon
*
* Arguments:
* 0: unit
* 1: vehicle
* 2: weapon
*
* Return Values:
* None
*
*/
#include "script_component.hpp"
EXPLODE_3_PVT(_this,_unit,_vehicle,_weapon);
addCamShake CAMSHAKE;
private "_animation";
_animation = animationState _unit;
if (_unit getVariable ["ACE_bipodDeployed", false]) then {
_unit setUnitRecoilCoefficient (unitRecoilCoefficient _unit / BIPODRECOIL);
if (_animation find "_ace_deploy" != -1) then {
//[_unit, [_animation, "_ace_deploy", ""] call CBA_fnc_replace, 2] call EFUNC(common,doAnimation);
_unit switchMove ([_animation, "_ace_deploy", ""] call CBA_fnc_replace);
};
private "_picture";
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
[localize "STR_ACE_Resting_BipodUndeployed", _picture] call EFUNC(common,displayTextPicture);
} else {
_unit setUnitRecoilCoefficient (unitRecoilCoefficient _unit / RESTEDRECOIL);
if (_animation find "_ace_rested" != -1) then {
//[_unit, [_animation, "_ace_rested", ""] call CBA_fnc_replace, 2] call EFUNC(common,doAnimation);
_unit switchMove ([_animation, "_ace_rested", ""] call CBA_fnc_replace);
};
private "_picture";
_picture = getText (configFile >> "CfgWeapons" >> _weapon >> "picture");
[localize "STR_ACE_Resting_WeaponLifted", _picture] call EFUNC(common,displayTextPicture);
};
playSound QGVAR(unrest);
_unit setVariable ["ACE_weaponRested", false];
_unit setVariable ["ACE_bipodDeployed", false];
if (_unit == ACE_PLAYER) then {
[QGVAR(bipodDeployed), false, "", [1,1,1,1], -1] call EFUNC(common,displayIcon);
};

View File

@ -1 +0,0 @@
#include "\z\ace\addons\resting\script_component.hpp"

View File

@ -1,19 +0,0 @@
#define COMPONENT resting
#include "\z\ace\Addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_RESTING
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_RESTING
#define DEBUG_SETTINGS DEBUG_SETTINGS_RESTING
#endif
#include "\z\ace\Addons\main\script_macros.hpp"
#define RESTEDRECOIL 0.6
#define BIPODRECOIL 0.3
#define MAXDISTANCE 1
#define MAXANGLE 15
#define MAXHEIGHT 0.45
#define CAMSHAKE [1,0.5,5]

View File

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Resting">
<Key ID="STR_ACE_Resting_RestWeapon">
<English>Rest Weapon</English>
<German>Waffe auflegen</German>
<Spanish>Apoyar el arma</Spanish>
<Polish>Oprzyj broń</Polish>
<Czech>Zapřít zbraň</Czech>
<French>Appuyer l'arme</French>
<Russian>Зафиксировать оружие</Russian>
<Hungarian>Fegyver kitámasztása</Hungarian>
<Portuguese>Apoiar Arma</Portuguese>
<Italian>Appoggia l'arma</Italian>
</Key>
<Key ID="STR_ACE_Resting_BipodDeployed">
<English>Bipod deployed</English>
<German>Zweibein ausgeklappt</German>
<Spanish>Bípode desplegado</Spanish>
<Polish>Dwójnóg rozstawiony</Polish>
<Czech>Dvojnožka rozložena</Czech>
<French>Bipied déployé</French>
<Russian>Сошки установлены</Russian>
<Hungarian>Állványon</Hungarian>
<Portuguese>Bipé apoiado</Portuguese>
<Italian>Bipiede appoggiato</Italian>
</Key>
<Key ID="STR_ACE_Resting_WeaponRested">
<English>Weapon rested</English>
<German>Waffe aufgelegt</German>
<Spanish>Arma apoyada</Spanish>
<Polish>Broń oparta</Polish>
<Czech>Zbraň zapřena</Czech>
<French>Arme appuyée</French>
<Russian>Оружие зафиксировано</Russian>
<Hungarian>Fegyver kitámasztva</Hungarian>
<Portuguese>Arma apoiada</Portuguese>
<Italian>Arma appoggiata</Italian>
</Key>
<Key ID="STR_ACE_Resting_BipodUndeployed">
<English>Bipod undeployed</English>
<German>Zweibein eingeklappt</German>
<Spanish>Bípode plegado</Spanish>
<Polish>Dwójnóg złożony</Polish>
<Czech>Dvojnožka rozložena</Czech>
<French>Bipied replié</French>
<Russian>Сошки убраны</Russian>
<Hungarian>Állvány csukva</Hungarian>
<Portuguese>Bipé recolhido</Portuguese>
<Italian>Bipiede richiuso</Italian>
</Key>
<Key ID="STR_ACE_Resting_WeaponLifted">
<English>Weapon lifted</English>
<German>Waffe gehoben</German>
<Spanish>Arma levantada</Spanish>
<Polish>Broń podniesiona</Polish>
<Czech>Zbraň zdvihnuta</Czech>
<French>Arme relevée</French>
<Russian>Оружие не зафиксировано</Russian>
<Hungarian>Fegyver nincs támasztva</Hungarian>
<Portuguese>Arma levantada</Portuguese>
<Italian>Arma sollevata</Italian>
</Key>
</Package>
</Project>

View File

@ -21,7 +21,7 @@
#include <string> #include <string>
#define MAXELEVATION 20 #define MAXELEVATION 20
#define MAXITERATIONS 120 #define MAXITERATIONS 600
#define PRECISION 0.1 #define PRECISION 0.1
#define RADIANS(X) (X / (180 / M_PI)) #define RADIANS(X) (X / (180 / M_PI))