diff --git a/bwa3_comp_ace/CfgEventhandlers.hpp b/bwa3_comp_ace/CfgEventhandlers.hpp new file mode 100644 index 0000000..b928bc2 --- /dev/null +++ b/bwa3_comp_ace/CfgEventhandlers.hpp @@ -0,0 +1,5 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; diff --git a/bwa3_comp_ace/CfgMagazines.hpp b/bwa3_comp_ace/CfgMagazines.hpp index 4eed5b5..9349dc3 100644 --- a/bwa3_comp_ace/CfgMagazines.hpp +++ b/bwa3_comp_ace/CfgMagazines.hpp @@ -8,6 +8,19 @@ class CfgMagazines { ACE_isBelt = 1; }; + class 60Rnd_30mm_APFSDS_shells; + class BWA3_240Rnd_APFSDS_shells: 60Rnd_30mm_APFSDS_shells { + BWA3_MagazineRearmTime = 30; + }; + class 140Rnd_30mm_MP_shells; + class BWA3_160Rnd_HE_shells: 140Rnd_30mm_MP_shells { + BWA3_MagazineRearmTime = 30; + }; + + class BWA3_160Rnd_ABM_shells: BWA3_160Rnd_HE_shells { + BWA3_MagazineRearmTime = 30; + }; + class BWA3_DM31AT_Mag: CA_Magazine { ACE_explosives_Placeable = 1; useAction = 0; diff --git a/bwa3_comp_ace/CfgVehicles.hpp b/bwa3_comp_ace/CfgVehicles.hpp index 6aa1cf8..02b0970 100644 --- a/bwa3_comp_ace/CfgVehicles.hpp +++ b/bwa3_comp_ace/CfgVehicles.hpp @@ -73,6 +73,17 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { position = "[0,-1.0,1.3]"; + class BWA3_MagazineDialog { + displayName = "$STR_BWA3_Comp_Ace_ConfigureAmmoLoad"; + selection = ""; + position = ""; + showDisabled = 0; + priority = 2; + distance = 4; + icon = "\A3\ui_f\data\igui\cfg\simpletasks\types\rearm_ca.paa"; + condition = "[_target] call BWA3_fnc_canOpenMagazineDialog"; + statement = "[_target,[0]] call BWA3_fnc_OpenMagazineDialog"; + }; }; class BWA3_CamoNet_show { @@ -160,6 +171,17 @@ class CfgVehicles { class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { position = "[0,-1.5,1.3]"; + class BWA3_MagazineDialog { + displayName = "$STR_BWA3_Comp_Ace_ConfigureAmmoLoad"; + selection = ""; + position = ""; + showDisabled = 0; + priority = 2; + distance = 4; + icon = "\A3\ui_f\data\igui\cfg\simpletasks\types\rearm_ca.paa"; + condition = "[_target] call BWA3_fnc_canOpenMagazineDialog"; + statement = "[_target,[0]] call BWA3_fnc_OpenMagazineDialog"; + }; }; class BWA3_CamoNet_show { diff --git a/bwa3_comp_ace/XEH_PREP.sqf b/bwa3_comp_ace/XEH_PREP.sqf new file mode 100644 index 0000000..a17ded2 --- /dev/null +++ b/bwa3_comp_ace/XEH_PREP.sqf @@ -0,0 +1,3 @@ +PREP(canOpenMagazineDialog); +PREP(OpenMagazineDialog); +PREP(loadMagazines); \ No newline at end of file diff --git a/bwa3_comp_ace/XEH_preInit.sqf b/bwa3_comp_ace/XEH_preInit.sqf new file mode 100644 index 0000000..6e56dd8 --- /dev/null +++ b/bwa3_comp_ace/XEH_preInit.sqf @@ -0,0 +1,21 @@ +#include "script_component.h" + +ADDON = false; + +#include "XEH_PREP.sqf" + +ADDON = true; + +If (isNil "BWA3_MagazineDialogDistance") then { + BWA3_MagazineDialogDistance = 25; +}; + +[ + "BWA3_MagazineDialogAllowed", + "CHECKBOX", + "STR_BWA3_Comp_Ace_ConfigureMagazinesLoadAllowed", + localize "STR_BWA3_FactionClassBundeswehrName", + true, + 1 +] call CBA_Settings_fnc_init; + diff --git a/bwa3_comp_ace/config.cpp b/bwa3_comp_ace/config.cpp index a9283c7..29b77ea 100644 --- a/bwa3_comp_ace/config.cpp +++ b/bwa3_comp_ace/config.cpp @@ -5,7 +5,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = 0.1; - requiredAddons[] = {BWA3_Common, BWA3_Eagle, BWA3_Weapons, BWA3_VehicleWeapons, BWA3_Explosives, BWA3_Units, BWA3_Puma, BWA3_Leopard2A6M, BWA3_Tiger}; + requiredAddons[] = {BWA3_Common, BWA3_Eagle, BWA3_Weapons, BWA3_VehicleWeapons, BWA3_Explosives, BWA3_Units, BWA3_Puma, BWA3_Leopard2A6M, BWA3_Tiger, ace_interact_menu}; versionAr[] = {1,0,0}; }; }; @@ -16,3 +16,5 @@ class CfgPatches { #include "CfgAmmo.hpp" #include "CfgGlasses.hpp" #include "CfgRecoils.hpp" +#include "CfgEventhandlers.hpp" +#include "dialog.hpp" diff --git a/bwa3_comp_ace/dialog.hpp b/bwa3_comp_ace/dialog.hpp new file mode 100644 index 0000000..eef1924 --- /dev/null +++ b/bwa3_comp_ace/dialog.hpp @@ -0,0 +1,137 @@ +/* + copied macros from: "\a3\ui_f\hpp\defineCommon.inc" +*/ +#define GUI_GRID_WAbs ((safezoneW / safezoneH) min 1.2) +#define GUI_GRID_HAbs (GUI_GRID_WAbs / 1.2) +#define GUI_GRID_W (GUI_GRID_WAbs / 40) +#define GUI_GRID_H (GUI_GRID_HAbs / 25) +#define GUI_GRID_CENTER_X (safezoneX + (safezoneW - GUI_GRID_WAbs)/2) +#define GUI_GRID_CENTER_Y (safezoneY + (safezoneH - GUI_GRID_HAbs)/2) + +/*extern*/ class RscText; +/*extern*/ class RscButtonMenu; + +class BWA3_MagazineDialog { + idd = IDD_BWA3_MAGAZINEDIALOG; + name = "$STR_BWA3_Comp_Ace_MagazineDialog"; + enableSimulation = 1; + + class Controls { + class TextTitlebar: RscText { + idc = IDC_BWA3_MAGAZINEDIALOG_TITLE; + text = "$STR_BWA3_Comp_Ace_MagazineDialog"; + x = GUI_GRID_CENTER_X + GUI_GRID_W * 8; + y = GUI_GRID_CENTER_Y; + w = GUI_GRID_W * 24; + h = GUI_GRID_H; + sizeEx = GUI_GRID_H; + colorBackground[] = {"(profileNamespace getVariable ['GUI_BCG_RGB_R', 0.13])","(profileNamespace getVariable ['GUI_BCG_RGB_G', 0.54])","(profileNamespace getVariable ['GUI_BCG_RGB_B', 0.21])",1}; + }; + class BackgroundDialog: RscText { + idc = IDC_BWA3_MAGAZINEDIALOG_BACK; + x = GUI_GRID_CENTER_X + GUI_GRID_W * 8; + y = GUI_GRID_CENTER_Y + GUI_GRID_H; + w = GUI_GRID_W * 24; + h = GUI_GRID_H * 15; + colorBackground[] = {0,0,0,0.5}; + text = ""; + }; + class ButtonApply: RscButtonMenu { + idc = 1; + text = "$STR_ui_debug_but_apply"; + x = GUI_GRID_CENTER_X + GUI_GRID_W * 24; + y = GUI_GRID_CENTER_Y + GUI_GRID_H * 16; + w = GUI_GRID_W * 8; + h = GUI_GRID_H; + }; + class ButtonClose: ButtonApply { + idc = 2; + text = "$STR_disp_cancel"; + x = GUI_GRID_CENTER_X + GUI_GRID_W * 16; + }; + class ControlsTable { + idc = IDC_BWA3_MAGAZINEDIALOG_CONTROLSTABLE; + x = GUI_GRID_CENTER_X + GUI_GRID_W * 9; + y = GUI_GRID_CENTER_Y + GUI_GRID_H * 2; + w = GUI_GRID_W * 22; + h = GUI_GRID_H * 13; + + type = 19; + style = 0x10; + + lineSpacing = 0.1 * GUI_GRID_H; + rowHeight = 1.1 * GUI_GRID_H; + headerHeight = 1.2 * GUI_GRID_H; + + firstIDC = IDC_BWA3_MAGAZINEDIALOG_CONTROLSTABLE_START; + lastIDC = IDC_BWA3_MAGAZINEDIALOG_CONTROLSTABLE_END; + + selectedRowColorFrom[] = {0.7, 0.85, 1, 0.25}; + selectedRowColorTo[] = {0.7, 0.85, 1, 0.5}; + selectedRowAnimLength = 1.2; + + class VScrollBar { + color[] = {1,1,1,0.6}; + colorActive[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.3}; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + shadow = 0; + scrollSpeed = 0.06; + width = GUI_GRID_W * 0.8; + autoScrollEnabled = 0; + autoScrollDelay = 1; + autoScrollRewind = 1; + autoScrollSpeed = 1; + }; + class HScrollBar: VScrollBar { + height = 0; + width = 0; + }; + class HeaderTemplate { + class HeaderBackground { + controlBaseClassPath[] = {"RscText"}; + columnX = 0; + columnW = GUI_GRID_W * 22; + controlOffsetY = 0; + }; + class Column1 { + controlBaseClassPath[] = {"RscText"}; + columnX = GUI_GRID_W * 3; + columnW = GUI_GRID_W * 16; + controlOffsetY = 0; + }; + }; + class RowTemplate { + class RowBackground { + controlBaseClassPath[] = {"RscText"}; + columnX = 0; + columnW = GUI_GRID_W * 22; + controlOffsetY = 0; + }; + class Column1 { + controlBaseClassPath[] = {"RscText"}; + columnX = 0; + columnW = 7 * GUI_GRID_W; + controlOffsetY = 0; + }; + class Column2 { + controlBaseClassPath[] = {"RscXSliderH"}; + columnX = 8 * GUI_GRID_W; + columnW = 11 * GUI_GRID_W; + controlOffsetY = 0.3 * GUI_GRID_H; + controlH = 0.8 * GUI_GRID_H; + }; + class Column3 { + controlBaseClassPath[] = {"RscEdit"}; + columnX = 20 * GUI_GRID_W; + columnW = 2 * GUI_GRID_W; + controlOffsetY = 0.3 * GUI_GRID_H; + controlH = 1 * GUI_GRID_H; + }; + }; + }; + }; +}; diff --git a/bwa3_comp_ace/functions/fn_canOpenMagazineDialog.sqf b/bwa3_comp_ace/functions/fn_canOpenMagazineDialog.sqf new file mode 100644 index 0000000..921eb25 --- /dev/null +++ b/bwa3_comp_ace/functions/fn_canOpenMagazineDialog.sqf @@ -0,0 +1,7 @@ +params ["_target"]; + +private _vehicles = nearestObjects [_target, ["Air", "LandVehicle", "Slingload_base_F", "ReammoBox_F"], BWA3_MagazineDialogDistance]; +private _filter = ["transportAmmo", "ace_rearm_defaultSupply"] select (["ace_rearm"] call ace_common_fnc_isModLoaded); +private _rearmVehicles = {(getNumber (configFile >> "CfgVehicles" >> typeOf _x >> _filter)) > 0} count _vehicles; + +(_rearmVehicles > 0 && {[ace_player, _target] call ace_common_fnc_canInteractWith} && {missionNamespace getVariable ["BWA3_MagazineDialogAllowed", true]}) diff --git a/bwa3_comp_ace/functions/fn_loadMagazines.sqf b/bwa3_comp_ace/functions/fn_loadMagazines.sqf new file mode 100644 index 0000000..79e3cb3 --- /dev/null +++ b/bwa3_comp_ace/functions/fn_loadMagazines.sqf @@ -0,0 +1,55 @@ +params ["_vehicle", "_turret", ["_magazines", [], [[]]]]; + +If (_magazines isEqualTo []) exitWith {}; + +// magazine specific reloadTime +private _reloadTime = getNumber(configFile >> "CfgMagazines" >> ((_magazines select 0) select 0) >> "BWA3_MagazineRearmTime"); +If (_reloadTime == 0) then {_reloadTime = 7;}; + +private _curMagazine = (_magazines select 0) select 0; +private _addMagazine = ({(_x select 0) isEqualTo _curMagazine} count ((magazinesAllTurrets _vehicle) select {((_x select 1) isEqualTo _turret) && ((_x select 2) > 0)})) < ((_magazines select 0) select 1); + + + +[ + _reloadTime, + [_vehicle, _turret, _magazines], + { + (_this select 0) params ["_vehicle", "_turret", "_magazines"]; + + (_magazines select 0) params ["_curMagazine", "_targetAmount"]; + + private _curAmount = {(_x select 0) isEqualTo _curMagazine} count ((magazinesAllTurrets _vehicle) select {((_x select 1) isEqualTo _turret) && ((_x select 2) > 0)}); + + private _modify = _targetAmount - _curAmount; + + If (_modify < 0) then { + _vehicle removeMagazinesTurret [_curMagazine, _turret]; + for "_i" from 1 to (_curAmount - 1) do { + _vehicle addMagazineTurret [_curMagazine, _turret]; + }; + }; + If (_modify > 0) then { + _vehicle removeMagazinesTurret [_curMagazine, _turret]; + for "_i" from (_curAmount + 1) to 1 step -1 do { + _vehicle addMagazineTurret [_curMagazine, _turret]; + }; + }; + If (abs _modify <= 1) then { + _magazines deleteAt 0; + }; + + [_vehicle, _turret, _magazines] call BWA3_fnc_loadMagazines; + }, + { + [localize "STR_BWA3_Comp_Ace_loadingStopped", false, 5] call ace_common_fnc_displayText; + }, + If (_addMagazine) then { + format[localize "STR_BWA3_Comp_Ace_addMagazine", getText(configFile >> "CfgMagazines" >> _curMagazine >> "displayNameShort")]; + } else { + format[localize "STR_BWA3_Comp_Ace_removeMagazine", getText(configFile >> "CfgMagazines" >> _curMagazine >> "displayNameShort")]; + }, + { + [ACE_player, _vehicle] call ace_common_fnc_canInteractWith + } +] call ace_common_fnc_progressBar; diff --git a/bwa3_comp_ace/functions/fn_openMagazineDialog.sqf b/bwa3_comp_ace/functions/fn_openMagazineDialog.sqf new file mode 100644 index 0000000..3083bac --- /dev/null +++ b/bwa3_comp_ace/functions/fn_openMagazineDialog.sqf @@ -0,0 +1,132 @@ +#include "\BWA3_Comp_ACE\script_component.h" + +params [["_vehicle", objNull, [objNull]], ["_turret", [0], [[]]]]; + +If ((!alive _vehicle) || {!(createDialog "BWA3_MagazineDialog")}) exitWith {}; + +disableSerialization; + +private _dialog = findDisplay IDD_BWA3_MAGAZINEDIALOG; +private _ctrlTable = _dialog displayCtrl IDC_BWA3_MAGAZINEDIALOG_CONTROLSTABLE; + +_dialog setVariable ["BWA3_comp_ace_magazineDialog_vehicle", _vehicle]; +_dialog setVariable ["BWA3_comp_ace_magazineDialog_turret", _turret]; + +(ctAddHeader _ctrlTable) params ["_headerindex", "_headercontrols"]; +_headercontrols params ["_background", "_headertext"]; +_background ctrlSetBackgroundColor [ + (profileNamespace getVariable ['GUI_BCG_RGB_R', 0.13]), + (profileNamespace getVariable ['GUI_BCG_RGB_G', 0.54]), + (profileNamespace getVariable ['GUI_BCG_RGB_B', 0.21]), + 0.5 +]; +_headertext ctrlsetText getText(configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName"); + +private _hash = [] call CBA_fnc_hashCreate; +_dialog setVariable ["BWA3_comp_ace_magazineDialog_hash", _hash]; +private _MaxMagazineAmount = _vehicle getVariable ["BWA3_maxMagazineLoad", count (getArray((_this call CBA_fnc_getTurret) >> "magazines"))]; +_dialog setVariable ["BWA3_comp_ace_magazineDialog_MaxMagazineAmount", _MaxMagazineAmount]; +private _Weapons = _vehicle weaponsTurret _turret; +private _curMagazinesTurret = (((magazinesAllTurrets _vehicle) select {((_x select 1) isEqualTo _turret) && ((_x select 2) > 0)})) apply {_x select 0}; + +{ + private _possibleMagazines = getArray(configFile >> "CfgWeapons" >> _x >> "magazines"); + _possibleMagazines = _possibleMagazines select { + (_x isKindOf ["VehicleMagazine", configFile >> "CfgMagazines"]) || + {getNumber(configFile >> "CfgMagazines" >> _x >> "scope") isEqualTo 1} + }; + + { + private _curMag = _x; + [_hash, _curMag, [({_x == _curMag} count _curMagazinesTurret) min _MaxMagazineAmount]] call CBA_fnc_hashSet; + nil + } count _possibleMagazines; + nil +} count (_vehicle weaponsTurret _turret); + +#define UPDATE_VALUES private _curMagazinesAmout = ((ctrlParent _ctrl) getVariable "BWA3_comp_ace_magazineDialog_MaxMagazineAmount") - _value; \ +{ \ + ([_hash, _x] call CBA_fnc_hashGet) params ["_curAmount", "_ctrlSlider", "_ctrlEdit"]; \ + If ((_curMagazinesAmout - _curAmount) <= 0) then { \ + _curAmount = _curMagazinesAmout; \ + _ctrlSlider sliderSetPosition _curAmount; \ + _ctrlEdit ctrlsetText str _curAmount; \ + [_hash, _x, [_curAmount, _ctrlSlider, _ctrlEdit]] call CBA_fnc_hashSet; \ + }; \ + _curMagazinesAmout = _curMagazinesAmout - _curAmount; \ + nil \ +} count (([_hash] call CBA_fnc_hashKeys) - [_curMagazine]); \ +[_hash, _curMagazine, [_value, _ctrlSlider, _ctrlEdit]] call CBA_fnc_hashSet + +#define GET_VALUES private _curMagazine = _ctrl getVariable "BWA3_comp_ace_magazineDialog_magazineClass"; \ +private _hash = (ctrlParent _ctrl) getVariable "BWA3_comp_ace_magazineDialog_hash"; \ +([_hash, _curMagazine] call CBA_fnc_hashGet) params ["_curAmount", "_ctrlSlider", "_ctrlEdit"] + +{ + private _curMagazine = _x; + ([_hash, _curMagazine] call CBA_fnc_hashGet) params ["_curMagazineAmount"]; + + (ctAddRow _ctrlTable) params ["_index","_controls"]; + _controls params ["_background","_ctrlText","_ctrlSlider","_ctrlEdit"]; + _ctrlText ctrlsetText getText(configFile >> "CfgMagazines" >> _curMagazine >> "displayNameShort"); + + _ctrlSlider sliderSetRange [0, _MaxMagazineAmount]; + _ctrlSlider sliderSetPosition _curMagazineAmount; + _ctrlSlider setVariable ["BWA3_comp_ace_magazineDialog_magazineClass", _curMagazine]; + + _ctrlSlider ctrlAddEventHandler ["SliderPosChanged", { + params ["_ctrl", "_value"]; + GET_VALUES; + _value = round _value; + _ctrlEdit ctrlSetText (str _value); + UPDATE_VALUES; + }]; + + _ctrlEdit ctrlSetText str _curMagazineAmount; + _ctrlEdit setVariable ["BWA3_comp_ace_magazineDialog_magazineClass", _curMagazine]; + _ctrlEdit ctrlAddEventHandler ["KeyUp", { + params ["_ctrl"]; + GET_VALUES; + private _value = parseNumber ctrlText _ctrlEdit; + _ctrlSlider sliderSetPosition (round _value); + UPDATE_VALUES; + }]; + _ctrlEdit ctrlAddEventHandler ["KillFocus", { + params ["_ctrl"]; + GET_VALUES; + private _value = sliderPosition _ctrlSlider; + _value = round _value; + _ctrlEdit ctrlSetText (str _value); + UPDATE_VALUES; + }]; + + [_hash, _curMagazine, [_curMagazineAmount, _ctrlSlider, _ctrlEdit]] call CBA_fnc_hashSet; + nil +} count ([_hash] call CBA_fnc_hashKeys); + +_dialog displayAddEventHandler ["Unload", { + params ["_dialog","_exitCode"]; + if !(_exitCode isEqualTo 1) exitWith {}; + + private _vehicle = _dialog getVariable "BWA3_comp_ace_magazineDialog_vehicle"; + private _turret = _dialog getVariable "BWA3_comp_ace_magazineDialog_turret"; + private _hash = _dialog getVariable "BWA3_comp_ace_magazineDialog_hash"; + + private _magazines = []; + { + private _curMagazine = _x; + ([_hash, _curMagazine] call CBA_fnc_hashGet) params ["_amount"]; + + // make sure to remove magazines before adding magazines + private _curAmount = {(_x select 0) isEqualTo _curMagazine} count ((magazinesAllTurrets _vehicle) select {((_x select 1) isEqualTo _turret) && ((_x select 2) > 0)}); + If (_curAmount < _amount) then { + _magazines pushBack [_curMagazine, _amount]; + }; + If (_curAmount > _amount) then { + _magazines = [[_curMagazine, _amount]] + _magazines; + }; + nil; + } count ([_hash] call CBA_fnc_hashKeys); + + [BWA3_fnc_loadMagazines, [_vehicle, _turret, _magazines]] call CBA_fnc_execNextFrame; +}]; diff --git a/bwa3_comp_ace/script_component.h b/bwa3_comp_ace/script_component.h index 4f4863b..e66ecd0 100644 --- a/bwa3_comp_ace/script_component.h +++ b/bwa3_comp_ace/script_component.h @@ -1,3 +1,10 @@ -//#include "\bwa3_common\script_component.h" +#include "script_macros.h" #define ADDON BWA3_Comp_ACE + +#define IDD_BWA3_MAGAZINEDIALOG 10815 +#define IDC_BWA3_MAGAZINEDIALOG_TITLE 10816 +#define IDC_BWA3_MAGAZINEDIALOG_BACK 10817 +#define IDC_BWA3_MAGAZINEDIALOG_CONTROLSTABLE 10818 +#define IDC_BWA3_MAGAZINEDIALOG_CONTROLSTABLE_START 10819 +#define IDC_BWA3_MAGAZINEDIALOG_CONTROLSTABLE_END 10900 diff --git a/bwa3_comp_ace/script_macros.h b/bwa3_comp_ace/script_macros.h new file mode 100644 index 0000000..ea2d676 --- /dev/null +++ b/bwa3_comp_ace/script_macros.h @@ -0,0 +1,82 @@ + +#define MACRO_ADDWEAPON(WEAPON,COUNT) class _xx_##WEAPON { \ + weapon = #WEAPON; \ + count = COUNT; \ +} + +#define MACRO_ADDITEM(ITEM,COUNT) class _xx_##ITEM { \ + name = #ITEM; \ + count = COUNT; \ +} + +#define MACRO_ADDMAGAZINE(MAGAZINE,COUNT) class _xx_##MAGAZINE { \ + magazine = #MAGAZINE; \ + count = COUNT; \ +} + +#define MACRO_ADDBACKPACK(BACKPACK,COUNT) class _xx_##BACKPACK { \ + backpack = #BACKPACK; \ + count = COUNT; \ +} + +#define QUOTE(text) #text + +#define COMPILE_FILE(func) compile preprocessFileLineNumbers '\ADDON\func##.sqf' + +#ifdef DISABLE_FUNCTION_CACHE + #define PREP(func) BWA3_fnc_##func = compileFinal preprocessFileLineNumbers '\ADDON\functions\fn_##func.sqf' +#else + #define PREP(func) BWA3_fnc_##func = if (isNil {uiNamespace getVariable 'BWA3_fnc_##func'}) then {compileFinal preprocessFileLineNumbers '\ADDON\functions\fn_##func.sqf'} else {uiNamespace getVariable 'BWA3_fnc_##func'} +#endif + +#define FORMAT_1(message,arg1) format [message, arg1] +#define FORMAT_2(message,arg1,arg2) format [message, arg1, arg2] +#define FORMAT_3(message,arg1,arg2,arg3) format [message, arg1, arg2, arg3] +#define FORMAT_4(message,arg1,arg2,arg3,arg4) format [message, arg1, arg2, arg3, arg4] +#define FORMAT_5(message,arg1,arg2,arg3,arg4,arg5) format [message, arg1, arg2, arg3, arg4, arg5] +#define FORMAT_6(message,arg1,arg2,arg3,arg4,arg5,arg6) format [message, arg1, arg2, arg3, arg4, arg5, arg6] +#define FORMAT_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7) format [message, arg1, arg2, arg3, arg4, arg5, arg6, arg7] +#define FORMAT_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) format [message, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8] + +#define BWA3_LOG(level,message) diag_log text BWA3_LOGFORMAT(level,message) +#define BWA3_LOGFORMAT(level,message) FORMAT_2(QUOTE([BWA3] %1: %2),level,message) + +#define BWA3_LOGERROR(message) BWA3_LOG("ERROR",message) +#define BWA3_LOGERROR_1(message,arg1) BWA3_LOGERROR(FORMAT_1(message,arg1)) +#define BWA3_LOGERROR_2(message,arg1,arg2) BWA3_LOGERROR(FORMAT_2(message,arg1,arg2)) +#define BWA3_LOGERROR_3(message,arg1,arg2,arg3) BWA3_LOGERROR(FORMAT_3(message,arg1,arg2,arg3)) +#define BWA3_LOGERROR_4(message,arg1,arg2,arg3,arg4) BWA3_LOGERROR(FORMAT_4(message,arg1,arg2,arg3,arg4)) +#define BWA3_LOGERROR_5(message,arg1,arg2,arg3,arg4,arg5) BWA3_LOGERROR(FORMAT_5(message,arg1,arg2,arg3,arg4,arg5)) +#define BWA3_LOGERROR_6(message,arg1,arg2,arg3,arg4,arg5,arg6) BWA3_LOGERROR(FORMAT_6(message,arg1,arg2,arg3,arg4,arg5,arg6)) +#define BWA3_LOGERROR_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7) BWA3_LOGERROR(FORMAT_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7)) +#define BWA3_LOGERROR_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) BWA3_LOGERROR(FORMAT_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)) + +#define BWA3_LOGWARNING(message) BWA3_LOG("WARNING",message) +#define BWA3_LOGWARNING_1(message,arg1) BWA3_LOGWARNING(FORMAT_1(message,arg1)) +#define BWA3_LOGWARNING_2(message,arg1,arg2) BWA3_LOGWARNING(FORMAT_2(message,arg1,arg2)) +#define BWA3_LOGWARNING_3(message,arg1,arg2,arg3) BWA3_LOGWARNING(FORMAT_3(message,arg1,arg2,arg3)) +#define BWA3_LOGWARNING_4(message,arg1,arg2,arg3,arg4) BWA3_LOGWARNING(FORMAT_4(message,arg1,arg2,arg3,arg4)) +#define BWA3_LOGWARNING_5(message,arg1,arg2,arg3,arg4,arg5) BWA3_LOGWARNING(FORMAT_5(message,arg1,arg2,arg3,arg4,arg5)) +#define BWA3_LOGWARNING_6(message,arg1,arg2,arg3,arg4,arg5,arg6) BWA3_LOGWARNING(FORMAT_6(message,arg1,arg2,arg3,arg4,arg5,arg6)) +#define BWA3_LOGWARNING_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7) BWA3_LOGWARNING(FORMAT_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7)) +#define BWA3_LOGWARNING_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) BWA3_LOGWARNING(FORMAT_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)) + +#define BWA3_LOGINFO(message) BWA3_LOG("INFO",message) +#define BWA3_LOGINFO_1(message,arg1) BWA3_LOGINFO(FORMAT_1(message,arg1)) +#define BWA3_LOGINFO_2(message,arg1,arg2) BWA3_LOGINFO(FORMAT_2(message,arg1,arg2)) +#define BWA3_LOGINFO_3(message,arg1,arg2,arg3) BWA3_LOGINFO(FORMAT_3(message,arg1,arg2,arg3)) +#define BWA3_LOGINFO_4(message,arg1,arg2,arg3,arg4) BWA3_LOGINFO(FORMAT_4(message,arg1,arg2,arg3,arg4)) +#define BWA3_LOGINFO_5(message,arg1,arg2,arg3,arg4,arg5) BWA3_LOGINFO(FORMAT_5(message,arg1,arg2,arg3,arg4,arg5)) +#define BWA3_LOGINFO_6(message,arg1,arg2,arg3,arg4,arg5,arg6) BWA3_LOGINFO(FORMAT_6(message,arg1,arg2,arg3,arg4,arg5,arg6)) +#define BWA3_LOGINFO_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7) BWA3_LOGINFO(FORMAT_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7)) +#define BWA3_LOGINFO_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) BWA3_LOGINFO(FORMAT_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)) + +#define BWA3_LOGDEBUG(message) BWA3_LOG("DEBUG",message) +#define BWA3_LOGDEBUG_1(message,arg1) BWA3_LOGDEBUG(FORMAT_1(message,arg1)) +#define BWA3_LOGDEBUG_2(message,arg1,arg2) BWA3_LOGDEBUG(FORMAT_2(message,arg1,arg2)) +#define BWA3_LOGDEBUG_3(message,arg1,arg2,arg3) BWA3_LOGDEBUG(FORMAT_3(message,arg1,arg2,arg3)) +#define BWA3_LOGDEBUG_4(message,arg1,arg2,arg3,arg4) BWA3_LOGDEBUG(FORMAT_4(message,arg1,arg2,arg3,arg4)) +#define BWA3_LOGDEBUG_5(message,arg1,arg2,arg3,arg4,arg5) BWA3_LOGDEBUG(FORMAT_5(message,arg1,arg2,arg3,arg4,arg5)) +#define BWA3_LOGDEBUG_6(message,arg1,arg2,arg3,arg4,arg5,arg6) BWA3_LOGDEBUG(FORMAT_6(message,arg1,arg2,arg3,arg4,arg5,arg6)) +#define BWA3_LOGDEBUG_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7) BWA3_LOGDEBUG(FORMAT_7(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7)) +#define BWA3_LOGDEBUG_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) BWA3_LOGDEBUG(FORMAT_8(message,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)) diff --git a/bwa3_comp_ace/stringtable.xml b/bwa3_comp_ace/stringtable.xml index 49d08aa..eefb522 100644 --- a/bwa3_comp_ace/stringtable.xml +++ b/bwa3_comp_ace/stringtable.xml @@ -17,5 +17,29 @@ 磁性感应器 (底部攻击) 磁性感應器 (底部攻擊) + + Ammunition Dialog + Munitionsauswahl + + + Configure Ammo Load + Munitionsauswahl + + + Magazine dialog allowed + Munitionsauswahl erlaubt + + + Loading %1... + Lade %1... + + + Removing %1... + Entlade %1... + + + Rearming stopped + Aufmunitionieren abgebrochen +