diff --git a/.gibot.yml b/.gibot.yml new file mode 100644 index 0000000000..4b8dffb6f7 --- /dev/null +++ b/.gibot.yml @@ -0,0 +1,55 @@ +stages: + mark_for_closing: + days: 30 + labels: + - need more info + - invalid + - can't reproduce + - wontfix + - information required + exclude: + - marked for cleanup + comment: + - 'Hello @{author}! There has been no activity on this ticket for over a period of {days} days. I am automatically replying to let you know we will close this ticket within 1 week due to inactivity and consider this resolved.' + - 'If you believe this in error, please reply with the requested information.' + - 'Thank you. :robot:' + action: + close: false + comment: true + assign_label: + - marked for cleanup + clean_up: + days: 7 + labels: + - marked for cleanup + comment: + - 'Hello @{author}! We have detected no activity for {days} days on this ticket. We therefore assume that the original reporter has lost interest or the issue has been resolved.' + - 'Since we have marked this ticket for deletion, we will be closing it.' + - 'If this has been closed in error, please create a comment below and we can reopen this issue. Note that you may need to provide additional information that was requested.' + - 'Thank you. :robot:' + action: + close: true + comment: true + assign_label: + - closed by bot + remove_label: + - marked for cleanup + remind_about_old_ticket: + days: 130 + labels: + - bug + - critical bug + exclude: + - need more info + - invalid + - can't reproduce + - wontfix + - information required + - marked for cleanup + - inactive + comment: + - 'Hello @acemod/maintainers. This ticket has been open for over {days} days without any activity.' + action: + comment: true + assign_label: + - inactive diff --git a/.lgtm b/.lgtm deleted file mode 100644 index 6bcc0cd7b8..0000000000 --- a/.lgtm +++ /dev/null @@ -1,3 +0,0 @@ -approvals = 1 -pattern = "(?i)LGTM|(?i):\\+1:|(?i):shipit:" -self_approval_off = true diff --git a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf index 9fed872a6b..503b932ee2 100644 --- a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf +++ b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf @@ -22,6 +22,7 @@ _initStartTime = CBA_missionTime; _mapSize = getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize"); if (("ace_advanced_ballistics" callExtension format["init:%1:%2", worldName, _mapSize]) == "Terrain already initialized") exitWith { + ACE_LOGINFO_1("Terrain already initialized [world: %1]", worldName); #ifdef DEBUG_MODE_FULL systemChat "AdvancedBallistics: Terrain already initialized"; #endif @@ -32,11 +33,14 @@ _gridCells = _mapGrids * _mapGrids; GVAR(currentGrid) = 0; +ACE_LOGINFO_2("Starting Terrain Extension [cells: %1] [world: %2]", _gridCells, worldName); + [{ params ["_args","_idPFH"]; _args params ["_mapGrids", "_gridCells", "_initStartTime"]; if (GVAR(currentGrid) >= _gridCells) exitWith { + ACE_LOGINFO_2("Finished terrain initialization in %1 seconds [world: %2]", ceil(CBA_missionTime - _initStartTime), worldName); #ifdef DEBUG_MODE_FULL systemChat format["AdvancedBallistics: Finished terrain initialization in %1 seconds", ceil(CBA_missionTime - _initStartTime)]; #endif diff --git a/addons/advanced_fatigue/XEH_PREP.hpp b/addons/advanced_fatigue/XEH_PREP.hpp index 1ec7705695..c6250516f5 100644 --- a/addons/advanced_fatigue/XEH_PREP.hpp +++ b/addons/advanced_fatigue/XEH_PREP.hpp @@ -5,6 +5,6 @@ PREP(getMetabolicCosts); PREP(handleEffects); PREP(handlePlayerChanged); PREP(handleStaminaBar); +PREP(mainLoop); PREP(moduleSettings); -PREP(pfhMain); PREP(removeDutyFactor); diff --git a/addons/advanced_fatigue/XEH_postInit.sqf b/addons/advanced_fatigue/XEH_postInit.sqf index 2eff26abdf..d566e3b042 100644 --- a/addons/advanced_fatigue/XEH_postInit.sqf +++ b/addons/advanced_fatigue/XEH_postInit.sqf @@ -18,25 +18,27 @@ if (!hasInterface) exitWith {}; ["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; // - Duty factors ------------------------------------------------------------- - [QEGVAR(medical,pain), { - 1 + (((_this getVariable [QEGVAR(medical,pain), 0]) min 1) / 10) - }] call FUNC(addDutyFactor); - [QEGVAR(medical,bloodVolume), { - 2 - (((_this getVariable [QEGVAR(medical,bloodVolume), 100]) min 100) / 100) - }] call FUNC(addDutyFactor); - [QEGVAR(dragging,isCarrying), { - if (_this getVariable [QEGVAR(dragging,isCarrying), false]) then { - 3 - } else { - 1 - }; - }] call FUNC(addDutyFactor); - [QEGVAR(weather,temperature), { - (((missionNamespace getVariable [QEGVAR(weather,currentTemperature), 25]) - 35) / 10) max 2 min 1 - }] call FUNC(addDutyFactor); + if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then { + [QEGVAR(medical,pain), { // 0->1.0, 0.5->1.05, 1->1.1 + linearConversion [0, 1, (_this getVariable [QEGVAR(medical,pain), 0]), 1, 1.1, true]; + }] call FUNC(addDutyFactor); + [QEGVAR(medical,bloodVolume), { // 100->1.0, 90->1.1, 80->1.2 + linearConversion [100, 0, (_this getVariable [QEGVAR(medical,bloodVolume), 100]), 1, 2, true]; + }] call FUNC(addDutyFactor); + }; + if (["ACE_Dragging"] call EFUNC(common,isModLoaded)) then { + [QEGVAR(dragging,isCarrying), { + [1, 3] select (_this getVariable [QEGVAR(dragging,isCarrying), false]); + }] call FUNC(addDutyFactor); + }; + if (["ACE_Weather"] call EFUNC(common,isModLoaded)) then { + [QEGVAR(weather,temperature), { // 35->1, 45->2 + linearConversion [35, 45, (missionNamespace getVariable [QEGVAR(weather,currentTemperature), 25]), 1, 2, true]; + }] call FUNC(addDutyFactor); + }; - // - Add main PFH ------------------------------------------------------------- - [FUNC(pfhMain), 1, []] call CBA_fnc_addPerFrameHandler; + // - Add main loop at 1 second interval ------------------------------------------------------------- + [FUNC(mainLoop), [], 1] call CBA_fnc_waitAndExecute; }] call CBA_fnc_addEventHandler; ["ace_settingChanged", { diff --git a/addons/advanced_fatigue/functions/fnc_pfhMain.sqf b/addons/advanced_fatigue/functions/fnc_mainLoop.sqf similarity index 91% rename from addons/advanced_fatigue/functions/fnc_pfhMain.sqf rename to addons/advanced_fatigue/functions/fnc_mainLoop.sqf index 9e7ad381d6..6430643cac 100644 --- a/addons/advanced_fatigue/functions/fnc_pfhMain.sqf +++ b/addons/advanced_fatigue/functions/fnc_mainLoop.sqf @@ -1,6 +1,6 @@ /* * Author: BaerMitUmlaut - * Main perFrameHandler that updates fatigue values. + * Main looping function that updates fatigue values. * * Arguments: * None @@ -9,7 +9,9 @@ * None */ #include "script_component.hpp" -if (!alive ACE_player) exitWith {}; // Dead people don't breath, Will also handle null (Map intros) +if (!alive ACE_player) exitWith { // Dead people don't breath, Will also handle null (Map intros) + [FUNC(mainLoop), [], 1] call CBA_fnc_waitAndExecute; +}; private _currentWork = REE; private _currentSpeed = (vectorMagnitude (velocity ACE_player)) min 6; @@ -61,3 +63,5 @@ private _perceivedFatigue = 1 - (_anReservePercentage min _aeReservePercentage); if (GVAR(enableStaminaBar)) then { [GVAR(anReserve) / AN_MAXRESERVE] call FUNC(handleStaminaBar); }; + +[FUNC(mainLoop), [], 1] call CBA_fnc_waitAndExecute; diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index b720b16797..9915a0cfbc 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -5,66 +5,79 @@ Performance Factor Leistungsfaktor パフォーマンス要因 + Współczynnik wydolności Influences the overall performance of all players with no custom factor. Higher means better. Beinflusst die Leistungsfähigkeit aller Spieler ohne eigenen Leistungsfaktor. Ein höherer Wert bedeutet bessere Leistung. 非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。 + Wpływa na ogólną wydolność organizmu u wszystkich graczy bez ustawionego niestandardowego współczynnika. Więcej znaczy lepiej. Influences the overall performance of this unit. Higher means better. Beinflusst die Leistungsfähigkeit dieser Einheit. Ein höherer Wert bedeutet bessere Leistung. 非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。 + Wpływa na ogólną wydolność tej jednostki. Więcej znaczy lepiej. Recovery Factor Erholungsfaktor 回復要因 + Współczynnik regeneracji Changes how fast the player recovers when resting. Higher is faster. Ändert, wie schnell ein Spieler Ausdauer regeneriert. Ein höherer Wert bedeutet eine schnellere Regeneration. 休憩時は、プレイヤーが早く回復します。高いほど早くなります。 + Wpływa na czas regeneracji podczas postoju. Więcej znaczy szybciej. Load Factor Gewichtsfaktor 負荷要因 + Współczynnik masy ekwipunku Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence. Erhöht oder verringert, wie viel Einfluss das Ausrüstungsgewicht auf die Leistung hat. Null heißt, dass es keinen Einfluss hat. 重量によりプレイヤーの動作への影響下増加したり、低下します。装備を持っていない場合、影響はしません。 + Zmniejsza lub zwiększa wpływ ciężaru ekwipunku na wydolność gracza. Zero oznacza kompletny brak wpływu na wydolność. Terrain Gradient Factor Terrainsteigungsfaktor 地形の勾配による要因 + Współczynnik terenu Sets how much steep terrain increases stamina loss. Higher means higher stamina loss. Beeinflusst, wie stark Steigungen den Ausdauerverbrauch erhöhen. Ein höherer Wert erhöht den Ausdauerverbrauch. 地形によって影響する体力の消費量を決定します。高数値ではより体力を消費します。 + Wpływa na to w jakim stopniu stromy teren wpływa na utratę wytrzymałości. Więcej oznacza szybszą utratę wytrzymałości. Enabled Aktiv 有効化 + Włączone Enables/disables Advanced Fatigue. Aktiviert/deaktiviert Advanced Fatigue. アドバンスド疲労の有効化と無効化 + Włącza/wyłącza zaawansowaną wytrzymałość Show stamina bar Zeige Ausdauerleiste 体力バーを表示 + Pokaż pasek wytrzymałości Shows the stamina bar. Zeigt die Ausdauerleiste an. 体力バーを表示します。 + Pokazuje pasek wytrzymałości. - \ No newline at end of file + diff --git a/addons/advanced_throwing/CfgEventHandlers.hpp b/addons/advanced_throwing/CfgEventHandlers.hpp index 9426fa861e..0d3301d6e0 100644 --- a/addons/advanced_throwing/CfgEventHandlers.hpp +++ b/addons/advanced_throwing/CfgEventHandlers.hpp @@ -12,6 +12,6 @@ class Extended_PreInit_EventHandlers { class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient)); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/advanced_throwing/XEH_postInitClient.sqf b/addons/advanced_throwing/XEH_postInit.sqf similarity index 95% rename from addons/advanced_throwing/XEH_postInitClient.sqf rename to addons/advanced_throwing/XEH_postInit.sqf index f188becbb4..4cb4f320e2 100644 --- a/addons/advanced_throwing/XEH_postInitClient.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -1,5 +1,8 @@ #include "script_component.hpp" +// Fired XEH +[QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler; + // Exit on HC if (!hasInterface) exitWith {}; @@ -63,6 +66,13 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; [_this select 1, "Player changed"] call FUNC(exitThrowMode); }] call CBA_fnc_addPlayerEventhandler; +["visibleMap", { + if (visibleMap && {ACE_player getVariable [QGVAR(inHand), false]}) then { + [ACE_player, "Opened Map"] call FUNC(exitThrowMode); + }; +}] call CBA_fnc_addPlayerEventhandler; + + ["ace_interactMenuOpened", { // Exit if advanced throwing is disabled (pick up only supports advanced throwing) if (!GVAR(enabled)) exitWith {}; @@ -80,9 +90,6 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; }] call CBA_fnc_addEventHandler; -// Fired XEH -[QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler; - // Set last thrown time on Vanilla Throwing and Advanced Throwing ["ace_firedPlayer", { if (_weapon == "Throw") then { diff --git a/addons/advanced_throwing/functions/fnc_drawArc.sqf b/addons/advanced_throwing/functions/fnc_drawArc.sqf index 53398f7b2f..0935b75ab5 100644 --- a/addons/advanced_throwing/functions/fnc_drawArc.sqf +++ b/addons/advanced_throwing/functions/fnc_drawArc.sqf @@ -47,11 +47,15 @@ for "_i" from 0.05 to 1.45 step 0.1 do { if (_newTrajASL distance (getPosASLVisual ACE_player) <= 20) then { if ((ASLToATL _newTrajASL) select 2 <= 0) then { - _cross = 1 + _cross = 1; // 1: Distance Limit (Green) } else { // Even vanilla throwables go through glass, only "GEOM" LOD will stop it but that will also stop it when there is glass in a window - if (lineIntersects [_prevTrajASL, _newTrajASL]) then { - _cross = 2; + if (lineIntersects [_prevTrajASL, _newTrajASL]) then { // Checks the "VIEW" LOD + _cross = 2; // 2: View LOD Block (Red) + } else { + if (!((lineIntersectsSurfaces [_prevTrajASL, _newTrajASL, _activeThrowable, ACE_player, true, 1, "GEOM", "FIRE"]) isEqualTo [])) then { + _cross = 3; // 3: GEOM/FIRE LOD Block (Yellow) - pass a3 bulding glass, but blocked on some CUP glass + }; }; }; @@ -60,7 +64,7 @@ for "_i" from 0.05 to 1.45 step 0.1 do { private _movePerc = linearConversion [3, 0, vectorMagnitude (velocity ACE_player), 0, 1, true]; _alpha = _alpha * _movePerc; - private _col = [ [1, 1, 1, _alpha], [0, 1, 0, _alpha], [1, 0, 0, _alpha] ] select _cross; + private _col = [ [1, 1, 1, _alpha], [0, 1, 0, _alpha], [1, 0, 0, _alpha], [1, 1, 0, _alpha] ] select _cross; if (_cross != 2 && {lineIntersects [eyePos ACE_player, _newTrajASL]}) then { _col set [3, 0.1] diff --git a/addons/advanced_throwing/functions/fnc_prime.sqf b/addons/advanced_throwing/functions/fnc_prime.sqf index 5068cf3ab8..727ace4e23 100644 --- a/addons/advanced_throwing/functions/fnc_prime.sqf +++ b/addons/advanced_throwing/functions/fnc_prime.sqf @@ -31,6 +31,12 @@ private _muzzle = _unit getVariable [QGVAR(activeMuzzle), ""]; // Set muzzle ammo to 0 to block vanilla throwing (can only be 0 or 1), removeItem above resets it _unit setAmmo [_muzzle, 0]; +// Handle weird scripted grenades (RHS) which could cause unexpected behaviour +private _nonInheritedCfg = configProperties [configFile >> "CfgAmmo" >> _throwableType, 'configName _x == QGVAR(replaceWith)', false]; +if ((count _nonInheritedCfg) == 1) then { + _throwableType = getText (_nonInheritedCfg select 0); +}; + // Create actual throwable globally private _activeThrowableOld = _unit getVariable [QGVAR(activeThrowable), objNull]; private _activeThrowable = createVehicle [_throwableType, _activeThrowableOld, [], 0, "CAN_COLLIDE"]; diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 4794289478..dfd346a9e1 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -5,106 +5,127 @@ Advanced Throwing Улучшенный бросок гранат アドバンスド投てき + Zaawansowane rzucanie Allows changing advanced throwing behaviour. Позволяет настраивать поведение улучшенного броска гранат. アドバンスド投てきの挙動変更を許可します。 + Zezwala na zmianę zachowania zaawansowanego trybu rzucania. Enable Advanced Throwing Включить улучшенный бросок アドバンスド投てきを有効化 + Aktywuj zaawansowane rzucanie Enables advanced throwing system. Включает систему улучшенного броска. アドバンスド投てきシステムを有効化 + Aktywuje system zaawansowanego rzucania. Show Throw Arc Показать траекторию броска 軌道を表示 + Pokaż trasę lotu Enables visualization of the throw arc (where throwable will fly). Включает визуализацию траектории броска (как полетит граната). 投てき物の予測軌道の表示を有効化します。 + Wyświetla wizualizację trasy przelotu granatu. Show Throwing Mouse Controls Показывать управление мышью 投てきのマウス操作を表示 + Pokaż podpowiedzi sterowania myszą Enables visual cues for mouse controls when throwable is prepared. Включает отображение подсказок по управлению мышью, когда граната подготовлена. 投てき物を投げるとき、マウス操作の説明表示を有効化します。 + Wyświetla podpowiedzi sterowania myszą kiedy obiekt miotany jest w ręku. Enable Throwables Pick Up Включить подбор гранат 投てき物の拾い上げを有効化 + Zezwól na podnoszenie obiektów miotanych Enables ability to pick up throwables from the ground. Включает возможность подбирать гранаты с земли. 地面に落ちている投てき物の拾い上げ動作を有効化します。 + Umożliwia podnoszenie obiektów miotanych z ziemi. Enable Attached Throwables Pick Up Включить подбор прикрепленных гранат 拾い上げた投てき物の取り付けを有効化 + Zezwól na podnoszenie przyczepionych obiektów miotanych Enables ability to pick up throwables from attached objects. Включает возможность подбирать гранаты, прикрепленные к объектам. オブジェクトに取り付けられていた投てき物を拾い上げられるようにします。 + Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów. Prepare/Change Throwable Подготовить/заменить гранату 機能の起動/変更 + Przygotuj/zmień ob. miotany Throwable Drop Mode (Hold) Режим броска гранаты (удерживать) 投てきモード (押しっぱ) + Tryb upuszczania ob. miotanego (przytrzymaj) Throwable Drop Mode (Toggle) Режим броска гранаты (переключить) 投てきモード (トグル) + Tryb upuszczania ob. miotanego (przełącz) Primed Подготовлена 起動した + Odbezpieczony Throw Бросить 投げる + Rzuć (Scroll) Change Mode (Скролл) Изменить режим (スクロール) モード変更 + (Kółko m.) zmień tryb (Scroll) Extend (Скролл) Увеличить (スクロール) 遠くに + (Kółko m.) przedłuż (Click) Cook (Клик) Подготовить (クリック) 起爆 + (Kliknięcie) Odbezpiecz Pick Up Подобрать 拾い上げる + Podnieś - \ No newline at end of file + diff --git a/addons/ai/CfgWeapons.hpp b/addons/ai/CfgWeapons.hpp index be3245cce3..03dfe2d6a0 100644 --- a/addons/ai/CfgWeapons.hpp +++ b/addons/ai/CfgWeapons.hpp @@ -22,6 +22,7 @@ class CfgWeapons { }; class Rifle_Base_F: Rifle {}; + class Rifle_Short_Base_F: Rifle_Base_F {}; class Rifle_Long_Base_F: Rifle_Base_F {}; // MX @@ -470,7 +471,7 @@ class CfgWeapons { }; // PD2000 - class pdw2000_base_F: Rifle_Base_F { + class pdw2000_base_F: Rifle_Short_Base_F { aiDispersionCoefY = 18.0; aiDispersionCoefX = 12.0; @@ -484,7 +485,7 @@ class CfgWeapons { }; // Vector - class SMG_01_Base: Rifle_Base_F { + class SMG_01_Base: Rifle_Short_Base_F { aiDispersionCoefY = 18.0; aiDispersionCoefX = 12.0; diff --git a/addons/atragmx/config.cpp b/addons/atragmx/config.cpp index aec53ba837..d7cb846c60 100644 --- a/addons/atragmx/config.cpp +++ b/addons/atragmx/config.cpp @@ -18,7 +18,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "RscTitles.hpp" - -class ACE_newEvents { - RangerfinderData = QEGVAR(vector,rangefinderData); -}; diff --git a/addons/attach/config.cpp b/addons/attach/config.cpp index cadc84705b..f862a008a2 100644 --- a/addons/attach/config.cpp +++ b/addons/attach/config.cpp @@ -19,7 +19,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "GUI_VirtualAmmo.hpp" - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; -}; \ No newline at end of file diff --git a/addons/backpacks/config.cpp b/addons/backpacks/config.cpp index 80439533e2..9b63e4df9f 100644 --- a/addons/backpacks/config.cpp +++ b/addons/backpacks/config.cpp @@ -15,7 +15,3 @@ class CfgPatches { }; #include "CfgEventHandlers.hpp" - -class ACE_newEvents { - backpackOpened = "ace_backpackOpened"; -}; diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 0344e618bb..2446aeb3b3 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -9,7 +9,8 @@ class CfgWeapons { class MMG_01_base_F; class MMG_02_base_F; class Rifle_Base_F; - class Rifle_Long_Base_F; + class Rifle_Short_Base_F: Rifle_Base_F {}; + class Rifle_Long_Base_F: Rifle_Base_F {}; class MuzzleSlot; /* Long Rifles */ @@ -189,8 +190,8 @@ class CfgWeapons { dispersion = 0.0008727; // radians. Equal to 3 MOA. }; }; - class pdw2000_base_F: Rifle_Base_F {}; - class SMG_01_Base: Rifle_Base_F {}; + class pdw2000_base_F: Rifle_Short_Base_F {}; + class SMG_01_Base: Rifle_Short_Base_F {}; class SMG_02_base_F: Rifle_Base_F {}; /* Pistols */ diff --git a/addons/captives/config.cpp b/addons/captives/config.cpp index b879e906fa..e9055e896a 100644 --- a/addons/captives/config.cpp +++ b/addons/captives/config.cpp @@ -20,11 +20,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "CfgEden.hpp" - -class ACE_newEvents { - SetSurrendered = QGVAR(setSurrendered); - SetHandcuffed = QGVAR(setHandcuffed); - MoveOutCaptive = QGVAR(moveOutCaptive); - MoveInCaptive = QGVAR(moveInCaptive); - CaptiveStatusChanged = "ace_captiveStatusChanged"; -}; diff --git a/addons/cargo/config.cpp b/addons/cargo/config.cpp index c368cab8d5..1912740903 100644 --- a/addons/cargo/config.cpp +++ b/addons/cargo/config.cpp @@ -18,13 +18,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "menu.hpp" - -class ACE_newEvents { - LoadCargo = "ace_loadCargo"; - cargoUnloaded = "ace_cargoUnloaded"; - cargoLoaded = "ace_cargoLoaded"; - AddCargoByClass = "ace_addCargo"; - ServerUnloadCargo = QGVAR(serverUnload); - UnloadCargo = "ace_unloadCargo"; - cargoAddedByClass = "ace_cargoAdded"; -}; diff --git a/addons/cargo/functions/fnc_paradropItem.sqf b/addons/cargo/functions/fnc_paradropItem.sqf index 7631cdf21f..2eb59fee1d 100644 --- a/addons/cargo/functions/fnc_paradropItem.sqf +++ b/addons/cargo/functions/fnc_paradropItem.sqf @@ -49,7 +49,7 @@ private _itemObject = if (_item isEqualType objNull) then { _newItem }; -_newItem setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply 10)); +_itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply 10)); // open parachute and ir light effect [{ @@ -57,13 +57,16 @@ _newItem setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDi if (isNull _item || {getPos _item select 2 < 1}) exitWith {}; - private _itemPosASL = getPosASL _item; - private _itemVelocity = velocity _item; private _parachute = createVehicle ["B_Parachute_02_F", [0,0,0], [], 0, "CAN_COLLIDE"]; - _item attachTo [_parachute, [0,0,0.2]]; - _parachute setPosASL _itemPosASL; - _parachute setVelocity _itemVelocity; + // cannot use setPos on parachutes without them closing down + _parachute attachTo [_item, [0,0,0]]; + detach _parachute; + + private _velocity = velocity _item; + + _item attachTo [_parachute, [0,0,-1]]; + _parachute setVelocity _velocity; private _light = "Chemlight_yellow" createVehicle [0,0,0]; _light attachTo [_item, [0,0,0]]; diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 4a95355750..51ab414120 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -223,11 +223,13 @@ Airdrop Türlast 空中投下 + Zrzut zaopatrzenia Unlevel Flight Schieflage 機体が水平ではありません + Nierówny lot - \ No newline at end of file + diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index 221d91f54f..72ac033d3e 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -4,14 +4,17 @@ Chemlights ケミライト + Świetliki Prepare %1 %1 をつかう + Przygotuj %1 %1<br/>Prepared %1&lt;br/&gt; をつかった + %1<br/>Przygotowany No inventory space @@ -29,146 +32,181 @@ [ACE] Chemlights [ACE] ケミライト + [ACE] Świetliki Chemlight (Orange) ケミライト (オレンジ) + Świetlik (pomarańczowy) Orange Light オレンジ色 + Pomarańczowe światło Type: Light - Orange<br />Rounds: 1<br />Used in: Hand 種類: 照明 - オレンジ&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + Typ: Światło - pomarańczowe<br/>Pociski: 1<br/>Używany w: ręce Chemlight (White) ケミライト (白) + Świetlik (biały) White Light 白色 + Białe światło Type: Light - White<br />Rounds: 1<br />Used in: Hand 種類: 照明 - 白&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + Typ: Światło - białe<br/>Pociski: 1<br/>Używany w: ręce Chemlight (Hi Red) ケミライト (高輝度 赤) + Świetlik (jaskrawy czerwony) Red Hi Light 高輝度の赤色 + Jaskrawe czerwone światło Type: Light - Red Hi (5 minute)<br />Rounds: 1<br />Used in: Hand 種類: 照明 - 高輝度 赤 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + Typ: Światło - jaskrawe czerwone (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Chemlight (Hi Yellow) ケミライト (高輝度 黄) + Świetlik (jaskrawy żółty) Yellow Hi Light 高輝度の黄色 + Jaskrawe żółte światło Type: Light - Yellow Hi (5 minute)<br />Rounds: 1<br />Used in: Hand 種類: 照明 - 高輝度 黄 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + Typ: Światło - jaskrawe żółte (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Chemlight (Hi Orange) ケミライト (高輝度 オレンジ) + Świetlik (jaskrawy pomarańczowy) Orange Hi Light 高輝度のオレンジ + Jaskrawe pomarańczowe światło Type: Light - Orange Hi (5 minute)<br />Rounds: 1<br />Used in: Hand 種類: 照明 - 高輝度 オレンジ (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + Typ: Światło - jaskrawe pomarańczowe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Chemlight (Hi White) ケミライト (高輝度 白) + Świetlik (jaskrawy biały) White Hi Light 高輝度の白色 + Jaskrawe białe światło Type: Light - White Hi (5 minute)<br />Rounds: 1<br />Used in: Hand 種類: 照明 - 高輝度 白 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + Typ: Światło - jaskrawe białe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Chemlight (IR) ケミライト (IR) + Świetlik (podczerwony) IR Light 赤外線光 + Światło podczerwone Type: Light - Infrared<br />Rounds: 1<br />Used in: Hand 種類: 照明 - 赤外線&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + Typ: Światło - podczerwone<br/>Pociski: 1<br/>Używany w: ręce Chemlight Shield (Empty) ケミライト シールド (空) + Osłona na świetlik (pusta) Shield for chemlights. Combine with chemlight to prepare reading light. ケミライトを入れられます。シールドとケミライトを組み合わせることで、照明にもなりえます。 + Osłona na świetliki. Połącz ją ze świetlikiem by stworzyć lampkę do czytania. Chemlight Shield (Green) ケミライト シールド (緑) + Osłona na świetlik (zielona) Green reading light. 緑色の照明。 + Zielona lampka. Chemlight Shield (Red) ケミライト シールド (赤) + Osłona na świetlik (czerwona) Red reading light. 赤色の照明。 + Czerwona lampka. Chemlight Shield (Blue) ケミライト シールド (青) + Osłona na świetlik (niebieska) Blue reading light. 青色の照明。 + Niebieska lampka. Chemlight Shield (Yellow) ケミライト シールド (黄) + Osłona na świetlik (żółta) Yellow reading light. 黄色の照明。 + Żółta lampka. Chemlight Shield (Orange) ケミライト シールド (オレンジ) + Osłona na świetlik (pomarańczowa) Orange reading light. オレンジの照明。 + Pomarańczowa lampka. Chemlight Shield (White) ケミライト シールド (白) + Osłona na świetlik (biała) White reading light. 白の照明。 - \ No newline at end of file + diff --git a/addons/common/CfgEden.hpp b/addons/common/CfgEden.hpp index 1b833b0342..a58896b6fc 100644 --- a/addons/common/CfgEden.hpp +++ b/addons/common/CfgEden.hpp @@ -8,4 +8,14 @@ class Cfg3DEN { }; }; }; + + class Group { + class AttributeCategories { + class ace_attributes { + displayName = CSTRING(Options); + collapsed = 1; + class Attributes {}; + }; + }; + }; }; diff --git a/addons/common/HintConfig.hpp b/addons/common/HintConfig.hpp index 04c6995318..e3912e56f3 100644 --- a/addons/common/HintConfig.hpp +++ b/addons/common/HintConfig.hpp @@ -2,8 +2,24 @@ class RscStructuredText; class RscMapControl; +class ctrlStructuredText; + +class GVAR(debug_structuredText): ctrlStructuredText { + sizeEx = "16 * pixelH"; + size = "16 * pixelH"; +}; class RscTitles { + class GVAR(watchVariableUI) { + idd = -1; + onLoad = QUOTE(with uiNameSpace do {GVAR(watchVariableUI) = _this select 0};); + movingEnable = 0; + duration = 999999; + fadeIn = "false"; + fadeOut = "false"; + class controls {}; + }; + class ACE_RscHint { idd = -1; onLoad = "uiNamespace setVariable ['ACE_ctrlHint', (_this select 0) displayCtrl 1];"; diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index d8b22a8198..1f6086b24e 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -38,7 +38,6 @@ PREP(dropBackpack); PREP(endRadioTransmission); PREP(eraseCache); PREP(errorMessage); -PREP(execNextFrame); PREP(findUnloadPosition); PREP(firedEH); PREP(fixCollision); @@ -85,12 +84,10 @@ PREP(hadamardProduct); PREP(handleEngine); PREP(handleModifierKey); PREP(handleModifierKeyUp); -PREP(handleScrollWheel); PREP(hasItem); PREP(hasMagazine); PREP(headBugFix); PREP(hideUnit); -PREP(insertionSort); PREP(interpolateFromArray); PREP(inTransitionAnim); PREP(isAwake); @@ -172,8 +169,7 @@ PREP(unloadPersonLocal); PREP(unmuteUnit); PREP(useItem); PREP(useMagazine); -PREP(waitAndExecute); -PREP(waitUntilAndExecute); +PREP(watchVariable); PREP(waveHeightAt); PREP(translateToWeaponSpace); @@ -183,14 +179,12 @@ PREP(translateToModelSpace); PREP(worldToScreenBounds); // config items -PREP(getConfigType); PREP(getItemType); PREP(getWeaponType); PREP(getWeaponModes); PREP(getWeaponMuzzles); // config objects -PREP(getConfigTypeObject); PREP(getConfigGunner); PREP(getConfigCommander); PREP(getSelectionsWithoutHitPoints); @@ -211,10 +205,6 @@ PREP(getTurretsFFV); PREP(getTurretsOther); PREP(hasHatch); -// missing inventory commands -PREP(binocularMagazine); -PREP(removeBinocularMagazine); - // ACE_Debug PREP(getChildren); PREP(getDisplayConfigName); @@ -224,15 +214,6 @@ PREP(showUser); PREP(dumpPerformanceCounters); PREP(dumpArray); -PREP(globalEvent); -PREP(addEventHandler); -PREP(objectEvent); -PREP(targetEvent); -PREP(serverEvent); -PREP(localEvent); -PREP(removeEventHandler); -PREP(removeAlLEventHandlers); - // Synchronized Events PREP(syncedEventPFH); PREP(addSyncedEventHandler); @@ -247,17 +228,8 @@ PREP(_handleRequestAllSyncedEvents); // other eventhandlers PREP(addActionEventHandler); PREP(addActionMenuEventHandler); -PREP(addScrollWheelEventHandler); PREP(addMapMarkerCreatedEventHandler); PREP(removeActionEventHandler); PREP(removeActionMenuEventHandler); -PREP(removeScrollWheelEventHandler); PREP(removeMapMarkerCreatedEventHandler); - -// hashes -PREP(hashCreate); -PREP(hashSet); -PREP(hashGet); -PREP(hashHasKey); -PREP(hashRem); diff --git a/addons/common/XEH_missionDisplayLoad.sqf b/addons/common/XEH_missionDisplayLoad.sqf index a07c301288..f1657703c0 100644 --- a/addons/common/XEH_missionDisplayLoad.sqf +++ b/addons/common/XEH_missionDisplayLoad.sqf @@ -1,4 +1,3 @@ #include "script_component.hpp" -call COMPILE_FILE(init_handleScrollWheel); call COMPILE_FILE(init_handleModifierKey); diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index a930fba126..2beb6ea291 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -306,71 +306,6 @@ if (!isNull (missionNamespace getVariable ["cba_events_oldUnit", objNull])) then // "playerChanged" event ["unit", { ACE_player = (_this select 0); - ["ace_playerChanged", _this] call CBA_fnc_localEvent; -}] call CBA_fnc_addPlayerEventHandler; - -// "playerVehicleChanged" event -["vehicle", { - ["ace_playerVehicleChanged", _this] call CBA_fnc_localEvent; -}] call CBA_fnc_addPlayerEventHandler; - -// "playerTurretChanged" event -["turret", { - ["ace_playerTurretChanged", _this] call CBA_fnc_localEvent; -}] call CBA_fnc_addPlayerEventHandler; - -// "playerWeaponChanged" event -["weapon", { - ["ace_playerWeaponChanged", _this] call CBA_fnc_localEvent; -}] call CBA_fnc_addPlayerEventHandler; - -// "playerInventoryChanged" event -["loadout", { - private _fnc_getAllGear = { - if (isNull _this) exitWith {[ - "", - "", - "", [], - "", [], - "", [], - "", ["","","",""], [], - "", ["","","",""], [], - "", ["","","",""], [], - [], - "", - "" - ]}; - - [ - headgear _this, - goggles _this, - uniform _this, uniformItems _this, - vest _this, vestItems _this, - backpack _this, backpackItems _this, - primaryWeapon _this, primaryWeaponItems _this, primaryWeaponMagazine _this, - secondaryWeapon _this, secondaryWeaponItems _this, secondaryWeaponMagazine _this, - handgunWeapon _this, handgunItems _this, handgunMagazine _this, - assignedItems _this, - binocular _this, - _this call CBA_fnc_binocularMagazine - ] - }; - - ["ace_playerInventoryChanged", [ACE_player, ACE_player call _fnc_getAllGear]] call CBA_fnc_localEvent; -}] call CBA_fnc_addPlayerEventHandler; - -// "playerVisionModeChanged" event -["visionMode", { - ["ace_playerVisionModeChanged", _this] call CBA_fnc_localEvent; -}] call CBA_fnc_addPlayerEventHandler; - -// "cameraViewChanged" event -["cameraView", { - ["ace_cameraViewChanged", _this] call CBA_fnc_localEvent; -}] call CBA_fnc_addPlayerEventHandler; - -["visibleMap", { - ["ace_visibleMapChanged", _this] call CBA_fnc_localEvent; }] call CBA_fnc_addPlayerEventHandler; GVAR(OldIsCamera) = false; diff --git a/addons/common/config.cpp b/addons/common/config.cpp index 74e5691973..2cddf76bd8 100644 --- a/addons/common/config.cpp +++ b/addons/common/config.cpp @@ -14,70 +14,6 @@ class CfgPatches { }; }; -// This class will be deprecated in version 3.8.0 -class ACE_newEvents { - // Status effect events - forceWalk = QGVAR(forceWalk); - blockSprint = QGVAR(blockSprint); - setCaptive = QGVAR(setCaptive); - blockDamage = QGVAR(blockDamage); - blockEngine = QGVAR(blockEngine); - - // Public listenable events - PlayerJip = "ace_playerJIP"; - activeCameraChanged = "ace_activeCameraChanged"; - visibleMapChanged = "ace_visibleMapChanged"; - cameraViewChanged = "ace_cameraViewChanged"; - playerVisionModeChanged = "ace_playerVisionModeChanged"; - playerInventoryChanged = "ace_playerInventoryChanged"; - playerWeaponChanged = "ace_playerWeaponChanged"; - playerTurretChanged = "ace_playerTurretChanged"; - playerVehicleChanged = "ace_playerVehicleChanged"; - playerChanged = "ace_playerChanged"; - SettingsInitialized = "ace_settingsInitialized"; - SettingChanged = "ace_settingChanged"; - firedNonPlayerVehicle = "ace_firedNonPlayerVehicle"; - firedPlayerVehicleNonLocal = "ace_firedPlayerVehicleNonLocal"; - firedPlayerVehicle = "ace_firedPlayerVehicle"; - firedNonPlayer = "ace_firedNonPlayer"; - firedPlayerNonLocal = "ace_firedPlayerNonLocal"; - firedPlayer = "ace_firedPlayer"; - unloadPersonEvent = "ace_unloadPersonEvent"; - loadPersonEvent = "ace_loadPersonEvent"; - useItem = "ace_useItem"; - infoDisplayChanged = "ace_infoDisplayChanged"; - - // Internal callable events - setStatusEffect = QGVAR(setStatusEffect); - HeadbugFixUsed = QGVAR(headbugFixUsed); - InitSettingsFromModules = QGVAR(initSettingsFromModules); - enableSimulationGlobal = QGVAR(enableSimulationGlobal); - hideObjectGlobal = QGVAR(hideObjectGlobal); - fixPosition = QGVAR(fixPosition); - fixFloating = QGVAR(fixFloating); - fixCollision = QGVAR(fixCollision); - unlockVehicle = QGVAR(unlockVehicle); - lockVehicle = QGVAR(lockVehicle); - displayTextPicture = QGVAR(displayTextPicture); - displayTextStructured = QGVAR(displayTextStructured); - setVanillaHitPointDamage = QGVAR(setVanillaHitPointDamage); - setVectorDirAndUp = QGVAR(setVectorDirAndUp); - switchMove = QGVAR(switchMove); - playMoveNow = QGVAR(playMoveNow); - playMove = QGVAR(playMove); - setVelocity = QGVAR(setVelocity); - selectLeader = QGVAR(selectLeader); - setSpeaker = QGVAR(setSpeaker); - engineOn = QGVAR(engineOn); - setFuel = QGVAR(setFuel); - setDir = QGVAR(setDir); - - // Events framework - SEH_s = "ACEs"; - SEH = "ACEe"; - SEH_all = "ACEa"; -}; - #include "CfgEventHandlers.hpp" #include "CfgLocationTypes.hpp" diff --git a/addons/common/functions/fnc_addEventHandler.sqf b/addons/common/functions/fnc_addEventHandler.sqf deleted file mode 100644 index 6ded410c87..0000000000 --- a/addons/common/functions/fnc_addEventHandler.sqf +++ /dev/null @@ -1,14 +0,0 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" - -params ["_eventName", "_eventCode"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -[_eventName, _eventCode] call CBA_fnc_addEventHandler; - -ACE_DEPRECATED("ace_common_fnc_addEventHandler","3.8.0","CBA_fnc_addEventHandler"); diff --git a/addons/common/functions/fnc_addScrollWheelEventHandler.sqf b/addons/common/functions/fnc_addScrollWheelEventHandler.sqf deleted file mode 100644 index 2a9b26e71c..0000000000 --- a/addons/common/functions/fnc_addScrollWheelEventHandler.sqf +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Author: commy2 - * Add an event handler that executes every time the scroll wheel is used. This is needed, because adding a MouseZ display event handler to display 46 will break in save games. - * _this will be [Interval] where 'Interval' is a number. - * - * Arguments: - * 0: Code to execute - * - * Return Value: - * ID of the event script (used to remove it later). - * - * Public: Yes - */ -#include "script_component.hpp" - -params ["_statement"]; - -ACE_DEPRECATED("ace_common_fnc_addScrollWheelEventHandler", "3.8.0", "'MouseZChanged' Display EventHandler"); - -if (_statement isEqualType "") then { - _statement = compile _statement; -}; - -private _actionsVar = missionNamespace getVariable ["ACE_EventHandler_ScrollWheel", [-1, [], []]]; - -_actionsVar params ["_id", "_actionIDs", "_actions"]; - -_id = _id + 1; - -_actionIDs pushBack _id; -_actions pushBack _statement; - -missionNamespace setVariable ["ACE_EventHandler_ScrollWheel", [_id, _actionIDs, _actions]]; - -_id diff --git a/addons/common/functions/fnc_binocularMagazine.sqf b/addons/common/functions/fnc_binocularMagazine.sqf deleted file mode 100644 index aacac7c142..0000000000 --- a/addons/common/functions/fnc_binocularMagazine.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Author: commy2 - * Returns the magazine of the units rangefinder. - * - * Arguments: - * 0: Unit - * - * Return Value: - * Magazine of the units binocular - * - * Example: - * player call ace_common_fnc_binocularMagazine - * - * Public: Yes - */ -#include "script_component.hpp" - -ACE_DEPRECATED("ace_common_fnc_binocularMagazine","3.8.0","CBA_fnc_binocularMagazine"); - -_this call CBA_fnc_binocularMagazine diff --git a/addons/common/functions/fnc_execNextFrame.sqf b/addons/common/functions/fnc_execNextFrame.sqf deleted file mode 100644 index c1c4b81592..0000000000 --- a/addons/common/functions/fnc_execNextFrame.sqf +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Author: esteldunedain - * Executes a code on the next frame - * - * Arguments: - * 0: Code to execute - * 1: Parameters to run the code with - * - * Return Value: - * PFH handler ID - * - * Public: Yes - */ -#include "script_component.hpp" - -ACE_DEPRECATED("ace_common_fnc_execNextFrame","3.8.0","CBA_fnc_execNextFrame"); - -_this call CBA_fnc_execNextFrame; diff --git a/addons/common/functions/fnc_getConfigType.sqf b/addons/common/functions/fnc_getConfigType.sqf deleted file mode 100644 index 34aaa03172..0000000000 --- a/addons/common/functions/fnc_getConfigType.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Author: commy2 - * Determins type of item. Can be CfgMagaines, CfgWeapons or CfgGlasses. - * - * Arguments: - * 0: Item Classname - * - * Return Value: - * Config category ("CfgWeapons", "CfgMagazines", "CfgGlasses", "") - * - * Public: Yes - */ -#include "script_component.hpp" - -ACE_DEPRECATED("ace_common_fnc_getConfigType","3.8.0","CBA_fnc_getItemConfig"); - -configName (configHierarchy (_item call CBA_fnc_getItemConfig) param [1, configNull]) diff --git a/addons/common/functions/fnc_getConfigTypeObject.sqf b/addons/common/functions/fnc_getConfigTypeObject.sqf deleted file mode 100644 index 92a6d43a42..0000000000 --- a/addons/common/functions/fnc_getConfigTypeObject.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Author: commy2 - * Determins type of object. Can be CfgVehicles or CfgAmmo. - * - * Arguments: - * 0: Object classname - * - * Return Value: - * Config category ("CfgWeapons", "Cfgmagazines", "CfgGlasses", "") - * - * Public: Yes - */ -#include "script_component.hpp" - -ACE_DEPRECATED("ace_common_fnc_getConfigTypeObject","3.8.0","CBA_fnc_getObjectConfig"); - -configName (configHierarchy (_item call CBA_fnc_getObjectConfig) param [1, configNull]) diff --git a/addons/common/functions/fnc_globalEvent.sqf b/addons/common/functions/fnc_globalEvent.sqf deleted file mode 100644 index b58a0f092c..0000000000 --- a/addons/common/functions/fnc_globalEvent.sqf +++ /dev/null @@ -1,14 +0,0 @@ -#define DEBUG_MODE_FULL -#include "script_component.hpp" - -params ["_eventName", "_eventArgs"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -[_eventName, _eventArgs] call CBA_fnc_globalEvent; - -ACE_DEPRECATED("ace_common_fnc_globalEvent","3.8.0","CBA_fnc_globalEvent"); diff --git a/addons/common/functions/fnc_handleScrollWheel.sqf b/addons/common/functions/fnc_handleScrollWheel.sqf deleted file mode 100644 index 037b7b640b..0000000000 --- a/addons/common/functions/fnc_handleScrollWheel.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Author: commy2 - * Handles MouseZChanged event. - * - * Arguments: - * None - * - * Return Value: - * None - * - * Public : No - */ -#include "script_component.hpp" - -{ - [_this select 1] call _x; - false -} count ((missionNamespace getVariable ["ACE_EventHandler_ScrollWheel", [-1, [], []]]) select 2); - -nil diff --git a/addons/common/functions/fnc_hashCreate.sqf b/addons/common/functions/fnc_hashCreate.sqf deleted file mode 100644 index c3ff836573..0000000000 --- a/addons/common/functions/fnc_hashCreate.sqf +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Author: ? - * Returns an empty hash structure - * - * Arguments: - * None - * - * Return Value: - * Empty Hash Structure - * - * Public: No - */ -#include "script_component.hpp" - -ACE_DEPRECATED(QFUNC(hashCreate),"3.8.0","CBA_fnc_hashCreate"); - -[[],[]] diff --git a/addons/common/functions/fnc_hashGet.sqf b/addons/common/functions/fnc_hashGet.sqf deleted file mode 100644 index e7bee04eec..0000000000 --- a/addons/common/functions/fnc_hashGet.sqf +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Author: ? - * Returns value attached to key in given hash. - * - * Arguments: - * 0: Hash - * 1: Key - * - * Return Value: - * Value - * - * Public: No - */ -#include "script_component.hpp" - -ACE_DEPRECATED(QFUNC(hashGet),"3.8.0","CBA_fnc_hashGet"); - -params ["_hash", "_key"]; - -ERRORDATA(2); -private _val = nil; -try { - if(VALIDHASH(_hash)) then { - private _index = (_hash select 0) find _key; - if(_index != -1) then { - _val = (_hash select 1) select _index; - if(IS_STRING(_val) && {_val == "ACREHASHREMOVEDONOTUSETHISVAL"}) then { - _val = nil; - }; - }; - } else { - ERROR("Input hash is not valid"); - }; -} catch { - HANDLECATCH; -}; - -if (isNil "_val") exitWith { nil }; - -_val diff --git a/addons/common/functions/fnc_hashHasKey.sqf b/addons/common/functions/fnc_hashHasKey.sqf deleted file mode 100644 index 65c1517e4f..0000000000 --- a/addons/common/functions/fnc_hashHasKey.sqf +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Author: ? - * ? - * - * Arguments: - * ? - * - * Return Value: - * ? - * - * Public: ? - */ -#include "script_component.hpp" - -ACE_DEPRECATED(QFUNC(hashHasKey),"3.8.0","CBA_fnc_hashHasKey"); - -// diag_log text format["%1 HASH HAS KEY: %2", diag_tickTime, _this]; - -params ["_hash", "_key"]; - -ERRORDATA(2); -private _val = false; -try { - if(VALIDHASH(_hash)) then { - private _index = (_hash select 0) find _key; - if(_index != -1) then { - _val = true; - }; - } else { - ERROR("Input hash is not valid"); - }; -} catch { - HANDLECATCH; -}; -_val diff --git a/addons/common/functions/fnc_hashRem.sqf b/addons/common/functions/fnc_hashRem.sqf deleted file mode 100644 index a09f87ee2e..0000000000 --- a/addons/common/functions/fnc_hashRem.sqf +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Author: ? - * ? - * - * Arguments: - * ? - * - * Return Value: - * ? - * - * Public: ? - */ -#include "script_component.hpp" - -ACE_DEPRECATED(QFUNC(hashRem),"3.8.0","CBA_fnc_hashRem"); - -params ["_hash", "_key"]; - -ERRORDATA(2); -private _val = nil; -try { - if(VALIDHASH(_hash)) then { - private _index = (_hash select 0) find _key; - if(_index != -1) then { - (_hash select 1) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; - // is this hash is not part of a hash list? - // if it is we need to leave the keys intact. - if((count _hash) == 2) then { - // if this is a standalone hash then we can clean it up - (_hash select 0) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"]; - _hash set[0, ((_hash select 0) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; - _hash set[1, ((_hash select 1) - ["ACREHASHREMOVEDONOTUSETHISVAL"])]; - }; - }; - } else { - ERROR("Input hash is not valid"); - }; -} catch { - HANDLECATCH; -}; -true diff --git a/addons/common/functions/fnc_hashSet.sqf b/addons/common/functions/fnc_hashSet.sqf deleted file mode 100644 index 8344b50f92..0000000000 --- a/addons/common/functions/fnc_hashSet.sqf +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Author: ? - * ? - * - * Arguments: - * ? - * - * Return Value: - * ? - * - * Public: ? - */ -#include "script_component.hpp" - -ACE_DEPRECATED(QFUNC(hashSet),"3.8.0","CBA_fnc_hashSet"); - -// diag_log text format["%1 HASH SET: %2", diag_tickTime, _this]; - -params ["_hash", "_key", "_val"]; - -ERRORDATA(3); -try { - if(VALIDHASH(_hash)) then { - private _index = (_hash select 0) find _key; - if(_index == -1) then { - _index = (_hash select 0) find "ACREHASHREMOVEDONOTUSETHISVAL"; - if(_index == -1) then { - _index = (count (_hash select 0)); - }; - (_hash select 0) set[_index, _key]; - }; - (_hash select 1) set[_index, _val]; - } else { - ERROR("Input hash is not valid"); - }; -} catch { - HANDLECATCH; -}; diff --git a/addons/common/functions/fnc_insertionSort.sqf b/addons/common/functions/fnc_insertionSort.sqf deleted file mode 100644 index 1b664e1fd6..0000000000 --- a/addons/common/functions/fnc_insertionSort.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Author: Ruthberg - * Sorts an array of numbers - * - * Arguments: - * 0: array - * 1: ascending (optional) - * - * Return Value: - * sortedArray (ARRAY) - * - * Public: No - */ -#include "script_component.hpp" - -ACE_DEPRECATED(QFUNC(insertionSort),"3.8.0","sort"); - -params [["_list", [], [[]]], ["_ascending", true, [false]]]; - -_list = + _list; // copy array to not alter the original one -_list sort _ascending; -_list diff --git a/addons/common/functions/fnc_localEvent.sqf b/addons/common/functions/fnc_localEvent.sqf deleted file mode 100644 index fb473b75b8..0000000000 --- a/addons/common/functions/fnc_localEvent.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -params ["_eventName", "_eventArgs"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -[_eventName, _eventArgs] call CBA_fnc_localEvent; - -ACE_DEPRECATED("ace_common_fnc_localEvent","3.8.0","CBA_fnc_localEvent"); diff --git a/addons/common/functions/fnc_objectEvent.sqf b/addons/common/functions/fnc_objectEvent.sqf deleted file mode 100644 index 878b0d80d1..0000000000 --- a/addons/common/functions/fnc_objectEvent.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -params ["_eventName", "_eventTargets", "_eventArgs"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -[_eventName, _eventArgs, _eventTargets] call CBA_fnc_targetEvent; - -ACE_DEPRECATED("ace_common_fnc_objectEvent","3.8.0","CBA_fnc_targetEvent"); diff --git a/addons/common/functions/fnc_removeAllEventHandlers.sqf b/addons/common/functions/fnc_removeAllEventHandlers.sqf deleted file mode 100644 index 958923f808..0000000000 --- a/addons/common/functions/fnc_removeAllEventHandlers.sqf +++ /dev/null @@ -1,14 +0,0 @@ -#include "script_component.hpp" - -params ["_eventName"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -CBA_events_eventNamespace setVariable [_eventName,nil]; -CBA_events_eventHashes setVariable [_eventName,nil]; - -ACE_DEPRECATED("ace_common_fnc_removeAllEventHandlers","3.8.0","N/A (remove events individually w/ CBA_fnc_removeEventHandler)"); diff --git a/addons/common/functions/fnc_removeBinocularMagazine.sqf b/addons/common/functions/fnc_removeBinocularMagazine.sqf deleted file mode 100644 index 4f1e0fcdd6..0000000000 --- a/addons/common/functions/fnc_removeBinocularMagazine.sqf +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Author: commy2 - * Removes the magazine of the units rangefinder. - * - * Arguments: - * 0: Unit - * - * Return Value: - * None - * - * Example: - * player call ace_common_fnc_removeBinocularMagazine - * - * Public: Yes - */ -#include "script_component.hpp" - -ACE_DEPRECATED("ace_common_fnc_removeBinocularMagazine","3.8.0","CBA_fnc_removeBinocularMagazine"); - -_this call CBA_fnc_removeBinocularMagazine diff --git a/addons/common/functions/fnc_removeEventHandler.sqf b/addons/common/functions/fnc_removeEventHandler.sqf deleted file mode 100644 index ff89571a6e..0000000000 --- a/addons/common/functions/fnc_removeEventHandler.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -params ["_eventName", "_eventCode"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -[_eventName, _eventCode] call CBA_fnc_removeEventHandler; - -ACE_DEPRECATED("ace_common_fnc_removeEventHandler","3.8.0","CBA_fnc_removeEventHandler"); diff --git a/addons/common/functions/fnc_removeScrollWheelEventHandler.sqf b/addons/common/functions/fnc_removeScrollWheelEventHandler.sqf deleted file mode 100644 index d7a8ae28cc..0000000000 --- a/addons/common/functions/fnc_removeScrollWheelEventHandler.sqf +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Author: commy2 - * Remove a scroll wheel event handler. - * - * Arguments: - * 0: ID of the event handler - * - * Return Value: - * None - * - * Public: Yes - */ -#include "script_component.hpp" - -params ["_id"]; - -private _actionsVar = missionNamespace getVariable ["ACE_EventHandler_ScrollWheel", [-1, [], []]]; - -_actionsVar params ["_currentId", "_actionIDs", "_actions"]; - -_id = _actionIDs find _id; - -if (_id == -1) exitWith {}; - -_actionIDs set [_id, -1]; -_actionIDs = _actionIDs - [-1]; - -_actions set [_id, []];//{} -_actions = _actions - [[]];//[{}] - -missionNamespace setVariable ["ACE_EventHandler_ScrollWheel", [_currentId, _actionIDs, _actions]]; diff --git a/addons/common/functions/fnc_serverEvent.sqf b/addons/common/functions/fnc_serverEvent.sqf deleted file mode 100644 index 5b116e9661..0000000000 --- a/addons/common/functions/fnc_serverEvent.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -params ["_eventName", "_eventArgs"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -[_eventName, _eventArgs] call CBA_fnc_serverEvent; - -ACE_DEPRECATED("ace_common_fnc_serverEvent","3.8.0","CBA_fnc_serverEvent"); diff --git a/addons/common/functions/fnc_targetEvent.sqf b/addons/common/functions/fnc_targetEvent.sqf deleted file mode 100644 index 8cce931547..0000000000 --- a/addons/common/functions/fnc_targetEvent.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -params ["_eventName", "_eventTargets", "_eventArgs"]; - -private _newName = getText (configFile >> "ACE_newEvents" >> _eventName); -if (_newName != "") then { - TRACE_2("Switching Names",_eventName,_newName); - _eventName = _newName; -}; - -[_eventName,_eventArgs,_eventTargets] call CBA_fnc_targetEvent; - -ACE_DEPRECATED("ace_common_fnc_targetEvent","3.8.0","CBA_fnc_targetEvent"); diff --git a/addons/common/functions/fnc_waitAndExecute.sqf b/addons/common/functions/fnc_waitAndExecute.sqf deleted file mode 100644 index 1ac0d3f54d..0000000000 --- a/addons/common/functions/fnc_waitAndExecute.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Author: esteldunedain - * Executes a code once with a given game time delay, using a PFH - * - * Arguments: - * 0: Code to execute - * 1: Parameters to run the code with - * 2: Delay in seconds before executing the code - * - * Return Value: - * None - * - * Example: - * [{(_this select 0) setVelocity [0,0,200];}, [player], 10] call ace_common_fnc_waitAndExecute - * - * Public: Yes - */ -#include "script_component.hpp" - -ACE_DEPRECATED("ace_common_fnc_waitAndExecute","3.8.0","CBA_fnc_waitAndExecute"); - -_this call CBA_fnc_waitAndExecute; diff --git a/addons/common/functions/fnc_waitUntilAndExecute.sqf b/addons/common/functions/fnc_waitUntilAndExecute.sqf deleted file mode 100644 index 52c596c70a..0000000000 --- a/addons/common/functions/fnc_waitUntilAndExecute.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Author: joko // Jonas - * Executes a code once with after the Condition is True, using a PFH - * - * Arguments: - * 0: Condition - * 1: Code to execute - * 2: Parameters to run the code with - * - * Return Value: - * None - * - * Example: - * [{(_this select 0) == vehicle (_this select 0)}, {(_this select 0) setDamage 1;}, [ACE_player]] call ace_common_fnc_waitUntilAndExecute - * - * Public: No - */ -#include "script_component.hpp" - -ACE_DEPRECATED("ace_common_fnc_waitUntilAndExecute","3.8.0","CBA_fnc_waitUntilAndExecute"); - -_this call CBA_fnc_waitUntilAndExecute; - -nil diff --git a/addons/common/functions/fnc_watchVariable.sqf b/addons/common/functions/fnc_watchVariable.sqf new file mode 100644 index 0000000000..931450bd22 --- /dev/null +++ b/addons/common/functions/fnc_watchVariable.sqf @@ -0,0 +1,149 @@ +/* + * Author: PabstMirror + * Shows multiple watched variables on the main display (for easy debugging) + * + * Arguments: + * 0: Title (var name) + * 1: Code to generate result (passed nothing, can return any) + * 2: Array containing modifiers + * For Numbers: + * 0: Show Delta change (default: true) + * 1: Slider Min Value (default: 0) + * 1: Slider Max Value (default: 0) + * For Anything else: + * 0: Number of structured text lines (default: 1) + * + * Return Value: + * Nothing + * + * Example: + * ["CBA_missionTime"] call ace_common_fnc_watchVariable; // Uses title as code + * ["diag_frameNo", {diag_frameNo}, [false]] call ace_common_fnc_watchVariable; // Won't show delta + * ["blood", {player getVariable "ace_medical_bloodVolume"}, [true, 0, 100]] call ace_common_fnc_watchVariable; // Shows slider + * ["multiLine text", {"Line 1
Line 2"}, [2]] call ace_common_fnc_watchVariable; + * ["player names", {allPlayers apply {name _x}}, [5]] call ace_common_fnc_watchVariable; // handles any data types + * + * Public: Yes + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +#define TEXT_HEIGHT 16 + +params [["_name", "", [""]],["_code", {}, [{}]], ["_mods", [], [[]]]]; +TRACE_3("params",_name,_code,_mods); + +if (!hasInterface) exitWith {}; + +if (canSuspend) exitWith { // Ensure atomic - (fix `disableSerialization` error when called from init.sqf) + [FUNC(watchVariable), _this] call CBA_fnc_directCall; +}; + +if (isNull (findDisplay 46)) exitWith { + TRACE_1("waiting for main display to be ready",isNull (findDisplay 46)); + [{!isNull (findDisplay 46)}, {_this call FUNC(watchVariable);}, _this] call CBA_fnc_waitUntilAndExecute; +}; + +if (_code isEqualTo {}) then {TRACE_1("using title as code",_title); _code = compile _name;}; + +private _trackedDisplay = uiNamespace getVariable [QGVAR(watchVariableUI), displayNull]; +if (isNull _trackedDisplay) then { + TRACE_1("creating display and adding PFEH",time); + QGVAR(watchVariableUI) cutRsc [QGVAR(watchVariableUI), "PLAIN", 1, true]; + + [{ + private _trackedDisplay = uiNamespace getVariable [QGVAR(watchVariableUI), displayNull]; + private _varArray = _trackedDisplay getVariable [QGVAR(vars), []]; + TRACE_1("updating watched variables",count _varArray); + { + _x params ["_ctrlGroup", "_code", "_showDelta", "_lastNumber", "_barMin", "_barMax"]; + private _result = [] call _code; + if (isNil "_result") then { + (_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["NIL"]; + } else { + if (_result isEqualType 0) then { + (_ctrlGroup controlsGroupCtrl 2) progressSetPosition linearConversion [_barMin, _barMax, _result, 0, 1, true]; + if (_showDelta) then { + private _delta = _result - _lastNumber; + _x set [3, _result]; + if (_delta < 0) then { + (_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1 (%2)", _result, _delta]; + } else { + (_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1 (%2)", _result, _delta]; + }; + } else { + (_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1", _result]; + }; + } else { + (_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1", _result]; + }; + }; + } forEach _varArray; + }, 1, []] call CBA_fnc_addPerFrameHandler; +}; + +// Add curent call: + +private _trackedDisplay = uiNamespace getVariable [QGVAR(watchVariableUI), displayNull]; +private _varArray = _trackedDisplay getVariable [QGVAR(vars), []]; +private _freePositionY = _trackedDisplay getVariable [QGVAR(freePosition), safeZoneY + 100 * pixelH]; + +private _height = 2 * TEXT_HEIGHT * pixelH; + +private _ctrlGroup = _trackedDisplay ctrlCreate ["ctrlControlsGroupNoScrollbars", -1]; + +private _ctrlBackground = (_trackedDisplay ctrlCreate ["ctrlStaticBackground", -1, _ctrlGroup]); +_ctrlBackground ctrlSetBackgroundColor [0.2, 0.2, 0.2, 0.5]; + +private _ctrlTitle = (_trackedDisplay ctrlCreate ["ctrlStatic", -1, _ctrlGroup]); +_ctrlTitle ctrlSetFontHeight (TEXT_HEIGHT * pixelH); +_ctrlTitle ctrlSetFont "EtelkaMonospacePro"; +_ctrlTitle ctrlSetPosition [0, 0, 300 * pixelW, TEXT_HEIGHT * pixelW]; +_ctrlTitle ctrlCommit 0; +_ctrlTitle ctrlSetText _name; + +if ((_mods param [0, true, [0, false]]) isEqualType false) then { + _mods params [["_showDelta", true, [false]], ["_barMin", 0, [0]], ["_barMax", 0, [0]]]; + TRACE_3("adding number",_barMin,_barMax,_showDelta); + + if (_barMin != _barMax) then { + TRACE_2("creating bar",_barMin,_barMax); + private _ctrlSlider = _trackedDisplay ctrlCreate ["RscProgress", 2, _ctrlGroup]; + _ctrlSlider ctrlSetPosition [0 * pixelW, TEXT_HEIGHT * pixelH, 300 * pixelW, TEXT_HEIGHT * pixelH]; + _ctrlSlider ctrlSetFade 0.25; + _ctrlSlider ctrlSetTextColor [0, 0, 0.2, 1]; + _ctrlSlider ctrlCommit 0; + }; + + private _ctrlResultText = _trackedDisplay ctrlCreate [QGVAR(debug_structuredText), 1, _ctrlGroup]; + _ctrlResultText ctrlSetPosition [25 * pixelW, TEXT_HEIGHT * pixelH, 275 * pixelW, TEXT_HEIGHT * pixelH]; + _ctrlResultText ctrlCommit 0; + + _varArray pushBack [_ctrlGroup, _code, _showDelta, 0, _barMin, _barMax]; + +} else { + _mods params [["_lines", 1, [1]]]; + _lines = _lines max 1; + TRACE_1("adding text",_lines); + + private _ctrlResultText = _trackedDisplay ctrlCreate [QGVAR(debug_structuredText), 1, _ctrlGroup]; + _ctrlResultText ctrlSetPosition [25 * pixelW, TEXT_HEIGHT * pixelH, 275 * pixelW, _lines * TEXT_HEIGHT * pixelH]; + _ctrlResultText ctrlCommit 0; + + _height = (1 + _lines) * TEXT_HEIGHT * pixelH; + + _varArray pushBack [_ctrlGroup, _code, false, -1, 0, 0]; +}; + +_trackedDisplay setVariable [QGVAR(vars), _varArray]; + +_ctrlGroup ctrlSetPosition [safeZoneX, _freePositionY, 300 * pixelW, _height]; +_ctrlGroup ctrlCommit 0; +_ctrlBackground ctrlSetPosition [0, 0, 300 * pixelW, _height]; +_ctrlBackground ctrlCommit 0; + + +_freePositionY = _freePositionY + _height + 5 * pixelH; +_trackedDisplay setVariable [QGVAR(freePosition), _freePositionY]; + +nil diff --git a/addons/common/init_handleScrollWheel.sqf b/addons/common/init_handleScrollWheel.sqf deleted file mode 100644 index 0acb84a5f2..0000000000 --- a/addons/common/init_handleScrollWheel.sqf +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Author: commy2 - * Initializes the MouseZChanged eventhandler. - * - * Arguments: - * None - * - * Return Value: - * None - * - * Public : No - */ -#include "script_component.hpp" - -disableSerialization; - -params ["_display"]; - -_display displayAddEventHandler ["MouseZChanged", QUOTE(_this call FUNC(handleScrollWheel))]; diff --git a/addons/concertina_wire/config.cpp b/addons/concertina_wire/config.cpp index 326c1cd0ea..438822a93b 100644 --- a/addons/concertina_wire/config.cpp +++ b/addons/concertina_wire/config.cpp @@ -16,7 +16,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; -}; diff --git a/addons/cookoff/CfgEden.hpp b/addons/cookoff/CfgEden.hpp new file mode 100644 index 0000000000..1cc406463f --- /dev/null +++ b/addons/cookoff/CfgEden.hpp @@ -0,0 +1,21 @@ + +class Cfg3DEN { + class Object { + class AttributeCategories { + class ace_attributes { + class Attributes { + class GVAR(enable) { + property = QGVAR(enable); + control = "Checkbox"; + displayName = CSTRING(enable_name); + tooltip = CSTRING(enable_tooltip); + expression = QUOTE(if !(_value) then {_this setVariable [ARR_3('%s',_value,true)];};); + typeName = "BOOL"; + condition = "objectVehicle"; + defaultValue = "(true)"; // fix pbo project preprocessing bug + }; + }; + }; + }; + }; +}; diff --git a/addons/cookoff/CfgVehicles.hpp b/addons/cookoff/CfgVehicles.hpp index 845eb55d94..26453ef286 100644 --- a/addons/cookoff/CfgVehicles.hpp +++ b/addons/cookoff/CfgVehicles.hpp @@ -11,15 +11,19 @@ class CfgVehicles { class ThingX; class GVAR(Turret_MBT_01): ThingX { author = ECSTRING(common,ACETeam); - _generalMacro = QGVAR(TurretDummy); + _generalMacro = QGVAR(Turret_MBT_01); scope = 1; + displayName = CSTRING(generic_turret_wreck); model = "\A3\Structures_F\Wrecks\Wreck_Slammer_turret_F.p3d"; + icon = "\A3\armor_f_gamma\MBT_01\Data\ui\map_slammer_mk4_ca.paa"; }; class GVAR(Turret_MBT_02): ThingX { author = ECSTRING(common,ACETeam); - _generalMacro = QGVAR(TurretDummy); + _generalMacro = QGVAR(Turret_MBT_02); scope = 1; + displayName = CSTRING(generic_turret_wreck); model = "\A3\Structures_F\Wrecks\Wreck_T72_turret_F.p3d"; + icon = "\A3\armor_f_gamma\MBT_02\Data\UI\map_MBT_02_ca.paa"; }; class Tank; @@ -53,4 +57,20 @@ class CfgVehicles { class O_MBT_02_cannon_F: O_MBT_02_base_F { GVAR(turret)[] = {QGVAR(Turret_MBT_02),{0,-1,0}}; }; + + class MRAP_01_base_F: Car_F { + GVAR(engineSmokeOffset)[] = {0,-2,0}; + }; + + class MRAP_02_base_F: Car_F { + GVAR(engineSmokeOffset)[] = {0,-2,0}; + }; + + class MRAP_03_base_F: Car_F { + GVAR(engineSmokeOffset)[] = {0,-2,0}; + }; + + class Quadbike_01_base_F: Car_F { + GVAR(engineSmokeOffset)[] = {0,1,0}; + }; }; diff --git a/addons/cookoff/XEH_postInit.sqf b/addons/cookoff/XEH_postInit.sqf index 411f9d5a78..ab4d89b934 100644 --- a/addons/cookoff/XEH_postInit.sqf +++ b/addons/cookoff/XEH_postInit.sqf @@ -8,37 +8,45 @@ GVAR(cacheTankDuplicates) = call CBA_fnc_createNamespace; // cookoff and burning engine ["Tank", "init", { params ["_vehicle"]; + private _typeOf = typeOf _vehicle; + if (isNil {GVAR(cacheTankDuplicates) getVariable _typeOf}) then { private _hitpoints = (getAllHitPointsDamage _vehicle param [0, []]) apply {toLower _x}; private _duplicateHitpoints = []; + { if ((_x != "") && {_x in (_hitpoints select [0,_forEachIndex])}) then { _duplicateHitpoints pushBack _forEachIndex; }; } forEach _hitpoints; + TRACE_2("dupes",_typeOf,_duplicateHitpoints); GVAR(cacheTankDuplicates) setVariable [_typeOf, _duplicateHitpoints]; }; _vehicle addEventHandler ["HandleDamage", { - if (GVAR(enable)) then { + if ((_this select 0) getVariable [QGVAR(enable), GVAR(enable)]) then { ["tank", _this] call FUNC(handleDamage); }; }]; }, nil, nil, true] call CBA_fnc_addClassEventHandler; ["Wheeled_APC_F", "init", { - (_this select 0) addEventHandler ["HandleDamage", { - if (GVAR(enable)) then { + params ["_vehicle"]; + + _vehicle addEventHandler ["HandleDamage", { + if ((_this select 0) getVariable [QGVAR(enable), GVAR(enable)]) then { ["tank", _this] call FUNC(handleDamage); }; }]; }, nil, nil, true] call CBA_fnc_addClassEventHandler; ["Car", "init", { - (_this select 0) addEventHandler ["HandleDamage", { - if (GVAR(enable)) then { + params ["_vehicle"]; + + _vehicle addEventHandler ["HandleDamage", { + if ((_this select 0) getVariable [QGVAR(enable), GVAR(enable)]) then { ["car", _this] call FUNC(handleDamage); }; }]; @@ -46,14 +54,31 @@ GVAR(cacheTankDuplicates) = call CBA_fnc_createNamespace; // secondary explosions ["AllVehicles", "killed", { - if (GVAR(enable)) then { - (_this select 0) call FUNC(secondaryExplosions); + params ["_vehicle"]; + + if (_vehicle getVariable [QGVAR(enable), GVAR(enable)]) then { + _vehicle call FUNC(secondaryExplosions); }; }, nil, ["Man"]] call CBA_fnc_addClassEventHandler; // blow off turret effect ["Tank", "killed", { - if (GVAR(enable)) then { - (_this select 0) call FUNC(blowOffTurret); + params ["_vehicle"]; + + if (_vehicle getVariable [QGVAR(enable), GVAR(enable)]) then { + _vehicle call FUNC(blowOffTurret); }; }] call CBA_fnc_addClassEventHandler; + +// event to add a turret to a curator if the vehicle already belonged to that curator +if (isServer) then { + [QGVAR(addTurretToEditable), { + params ["_vehicle", "_turret"]; + + { + if (_vehicle in curatorEditableObjects _x) then { + _x addCuratorEditableObjects [[_turret], false]; + }; + } forEach allCurators; + }] call CBA_fnc_addEventHandler; +}; diff --git a/addons/cookoff/config.cpp b/addons/cookoff/config.cpp index 902f02740d..cc89a2d917 100644 --- a/addons/cookoff/config.cpp +++ b/addons/cookoff/config.cpp @@ -15,6 +15,7 @@ class CfgPatches { }; #include "ACE_Settings.hpp" +#include "CfgEden.hpp" #include "CfgEventHandlers.hpp" #include "CfgCloudlets.hpp" diff --git a/addons/cookoff/functions/fnc_blowOffTurret.sqf b/addons/cookoff/functions/fnc_blowOffTurret.sqf index 1ff505f7ef..fed5afc188 100644 --- a/addons/cookoff/functions/fnc_blowOffTurret.sqf +++ b/addons/cookoff/functions/fnc_blowOffTurret.sqf @@ -30,4 +30,7 @@ _turret setVectorUp [random 1, random 1, 1]; _turret setVelocity [random 7, random 7, 8 + random 5]; + + // add turret to all curators that already own the wreck + [QGVAR(addTurretToEditable), [_vehicle, _turret]] call CBA_fnc_serverEvent; }, _this, 1] call CBA_fnc_waitAndExecute; diff --git a/addons/cookoff/functions/fnc_engineFire.sqf b/addons/cookoff/functions/fnc_engineFire.sqf index f9598fe7cf..580bd5d54d 100644 --- a/addons/cookoff/functions/fnc_engineFire.sqf +++ b/addons/cookoff/functions/fnc_engineFire.sqf @@ -24,11 +24,17 @@ if (local _vehicle) then { [QGVAR(engineFire), _vehicle] call CBA_fnc_remoteEvent; }; +private _offset = getArray (_vehicle call CBA_fnc_getObjectConfig >> QGVAR(engineSmokeOffset)); + +if (_offset isEqualTo []) then { + _offset = [0,0,0]; +}; + private _position = [ 0, - (boundingBoxReal _vehicle select 1 select 1) - 4, + (boundingBoxReal _vehicle select 1 select 1) - 2, (boundingBoxReal _vehicle select 0 select 2) + 2 -]; +] vectorAdd _offset; private _smoke = "#particlesource" createVehicleLocal [0,0,0]; _smoke setParticleClass "ObjectDestructionSmoke1_2Smallx"; diff --git a/addons/cookoff/functions/fnc_handleDamage.sqf b/addons/cookoff/functions/fnc_handleDamage.sqf index 2a0f2d54bc..b6ce9f45c9 100644 --- a/addons/cookoff/functions/fnc_handleDamage.sqf +++ b/addons/cookoff/functions/fnc_handleDamage.sqf @@ -70,7 +70,7 @@ if (_simulationType == "tank") exitWith { _vehicle call FUNC(cookOff); }; } else { - if (_hitpoint in ["hitbody", "hitturret", "#structural"] && {_newDamage > 0.6 + random 0.3}) then { + if (_hitpoint in ["hithull", "hitturret", "#structural"] && {_newDamage > 0.6 + random 0.3}) then { _vehicle call FUNC(cookOff); }; }; diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index c675ef9c0b..60339b2f9a 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -7,6 +7,7 @@ Povolit explozi munice Включить воспламенение 誘爆を有効化 + Aktywuj efekty zapłonu Enables cook off and related vehicle destruction effects. @@ -14,6 +15,21 @@ Povolí explozi munice a její následné ničivé efekty. Включает воспламенение и сопутствующие эффекты повреждения техники. 誘爆を有効化し、車両が誘爆によって破壊されていきます。 + Aktywuje efekt zapłonu na zniszczonych pojazdach. + + + Wreck (Turret) + Épave (tourelle) + Restos (torreta) + Rottami (torretta) + Wrak (wieżyczka) + Обломки (башня) + Wrack (Geschützturm) + Vrak (věž) + Wreck (Turret) + Ruínas (torre) + 잔해(포탑) + 残骸(タレット) - \ No newline at end of file + diff --git a/addons/dagr/config.cpp b/addons/dagr/config.cpp index f84f4aeb38..b923c3ea94 100644 --- a/addons/dagr/config.cpp +++ b/addons/dagr/config.cpp @@ -19,7 +19,3 @@ class CfgPatches { #include "CfgWeapons.hpp" #include "Dialog.hpp" #include "RscTitles.hpp" - -class ACE_newEvents { - RangerfinderData = QEGVAR(vector,rangefinderData); -}; diff --git a/addons/disarming/config.cpp b/addons/disarming/config.cpp index d8f249a9c6..e38f4346ab 100644 --- a/addons/disarming/config.cpp +++ b/addons/disarming/config.cpp @@ -19,8 +19,3 @@ class CfgPatches { #include "CfgWeapons.hpp" #include "gui_disarm.hpp" - -class ACE_newEvents { - DisarmDebugCallback = QGVAR(debugCallback); - DisarmDropItems = QGVAR(dropItems); -}; diff --git a/addons/dogtags/CfgVehicles.hpp b/addons/dogtags/CfgVehicles.hpp index 9757ac1c53..f2e0fc6ad7 100644 --- a/addons/dogtags/CfgVehicles.hpp +++ b/addons/dogtags/CfgVehicles.hpp @@ -2,30 +2,29 @@ class CfgVehicles { class Man; class CAManBase: Man { class ACE_Actions { - class ACE_MainActions { - class ACE_Dogtag { - displayName = CSTRING(itemName); - condition = ""; - statement = ""; + class ACE_Dogtag { + displayName = CSTRING(itemName); + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeDogtag)); + statement = ""; + showDisabled = 0; + distance = 1.75; + icon = QPATHTOF(data\dogtag_icon_ca.paa); + selection = "neck"; + class ACE_CheckDogtag { + displayName = CSTRING(checkDogtag); + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canCheckDogtag)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(checkDogtag)); + showDisabled = 0; + priority = 3; + icon = QPATHTOF(data\dogtag_icon_ca.paa); + }; + class ACE_TakeDogtag { + displayName = CSTRING(takeDogtag); + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeDogtag)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(takeDogtag)); showDisabled = 0; priority = 3; icon = QPATHTOF(data\dogtag_icon_ca.paa); - class ACE_CheckDogtag { - displayName = CSTRING(checkDogtag); - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canCheckDogtag)); - statement = QUOTE([ARR_2(_player,_target)] call FUNC(checkDogtag)); - showDisabled = 0; - priority = 3; - icon = QPATHTOF(data\dogtag_icon_ca.paa); - }; - class ACE_TakeDogtag { - displayName = CSTRING(takeDogtag); - condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeDogtag)); - statement = QUOTE([ARR_2(_player,_target)] call FUNC(takeDogtag)); - showDisabled = 0; - priority = 3; - icon = QPATHTOF(data\dogtag_icon_ca.paa); - }; }; }; }; diff --git a/addons/dogtags/XEH_postInit.sqf b/addons/dogtags/XEH_postInit.sqf index 729ae7eb04..b0352c39ef 100644 --- a/addons/dogtags/XEH_postInit.sqf +++ b/addons/dogtags/XEH_postInit.sqf @@ -10,25 +10,27 @@ // - Adding actions via config would create a dependency if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then { if (hasInterface) then { - private _checkTagAction = [ - "ACE_CheckDogtag", - format ["%1: %2", localize LSTRING(itemName), localize LSTRING(checkDogtag)], - QPATHTOF(data\dogtag_icon_ca.paa), - {[_player,_target] call FUNC(checkDogtag)}, - {!isNil {_target getVariable QGVAR(dogtagData)}} - ] call ace_interact_menu_fnc_createAction; + "ACE_CheckDogtag", + format ["%1: %2", localize LSTRING(itemName), localize LSTRING(checkDogtag)], + QPATHTOF(data\dogtag_icon_ca.paa), + {[_player,_target] call FUNC(checkDogtag)}, + {!isNil {_target getVariable QGVAR(dogtagData)}} + ] call EFUNC(interact_menu,createAction); + ["ACE_bodyBagObject", 0, ["ACE_MainActions"], _checkTagAction] call EFUNC(interact_menu,addActionToClass); private _takeTagAction = [ - "ACE_TakeDogtag", - format ["%1: %2", localize LSTRING(itemName), localize LSTRING(takeDogtag)], - QPATHTOF(data\dogtag_icon_ca.paa), - {[_player,_target] call FUNC(takeDogtag)}, - {(!isNil {_target getVariable QGVAR(dogtagData)}) && {((_target getVariable [QGVAR(dogtagTaken), objNull]) != _target)}} - ] call ace_interact_menu_fnc_createAction; + "ACE_TakeDogtag", + format ["%1: %2", localize LSTRING(itemName), localize LSTRING(takeDogtag)], + QPATHTOF(data\dogtag_icon_ca.paa), + {[_player,_target] call FUNC(takeDogtag)}, + {(!isNil {_target getVariable QGVAR(dogtagData)}) && {((_target getVariable [QGVAR(dogtagTaken), objNull]) != _target)}} + ] call EFUNC(interact_menu,createAction); + ["ACE_bodyBagObject", 0, ["ACE_MainActions"], _takeTagAction] call EFUNC(interact_menu,addActionToClass); }; + if (isServer) then { ["ace_placedInBodyBag", { params ["_target", "_bodyBag"]; diff --git a/addons/dogtags/config.cpp b/addons/dogtags/config.cpp index a3ad6b7cf0..183b59e67e 100644 --- a/addons/dogtags/config.cpp +++ b/addons/dogtags/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_common"}; + requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); authors[] = {"SzwedzikPL"}; url = ECSTRING(main,URL); diff --git a/addons/dogtags/functions/fnc_addDogtagItem.sqf b/addons/dogtags/functions/fnc_addDogtagItem.sqf index e734b6f38f..09d07f1d13 100644 --- a/addons/dogtags/functions/fnc_addDogtagItem.sqf +++ b/addons/dogtags/functions/fnc_addDogtagItem.sqf @@ -24,4 +24,8 @@ if (_item == "") exitWith {}; _dogtagData params ["_nickName"]; private _displayText = format [localize LSTRING(takeDogtagSuccess), _nickName]; -[_displayText] call EFUNC(common,displayText); + +// display message +[{ + [_this, 2.5] call EFUNC(common,displayTextStructured); +}, _displayText, DOGTAG_SHOW_DELAY] call CBA_fnc_waitAndExecute; diff --git a/addons/dogtags/functions/fnc_checkDogtag.sqf b/addons/dogtags/functions/fnc_checkDogtag.sqf index 7b703b995c..7c032259c1 100644 --- a/addons/dogtags/functions/fnc_checkDogtag.sqf +++ b/addons/dogtags/functions/fnc_checkDogtag.sqf @@ -18,7 +18,26 @@ params ["_player", "_target"]; +// animation +_player call EFUNC(common,goKneeling); + +// sound +private _position = AGLToASL (_target modelToWorld (_target selectionPosition "neck")); + +playSound3D [ + selectRandom RUSTLING_SOUNDS, + objNull, + false, + _position, + 1, + 1, + 50 +]; + +// display dogtag private _doubleTags = (_target getVariable [QGVAR(dogtagTaken), objNull]) != _target; private _dogTagData = [_target] call FUNC(getDogTagData); -[QGVAR(showDogtag), [_dogTagData, _doubleTags]] call CBA_fnc_localEvent; +[{ + [QGVAR(showDogtag), _this] call CBA_fnc_localEvent; +}, [_dogTagData, _doubleTags], DOGTAG_SHOW_DELAY] call CBA_fnc_waitAndExecute; diff --git a/addons/dogtags/functions/fnc_takeDogtag.sqf b/addons/dogtags/functions/fnc_takeDogtag.sqf index 0b779c029b..5073ff73f7 100644 --- a/addons/dogtags/functions/fnc_takeDogtag.sqf +++ b/addons/dogtags/functions/fnc_takeDogtag.sqf @@ -19,8 +19,27 @@ params ["_player", "_target"]; +// animation +_player call EFUNC(common,goKneeling); + +// sound +private _position = AGLToASL (_target modelToWorld (_target selectionPosition "neck")); + +playSound3D [ + selectRandom RUSTLING_SOUNDS, + objNull, + false, + _position, + 1, + 1, + 50 +]; + +// display message if ((_target getVariable [QGVAR(dogtagTaken), objNull]) == _target) then { - [localize LSTRING(dogtagAlreadyTaken)] call EFUNC(common,displayText); + [{ + [_this, 2.5] call EFUNC(common,displayTextStructured); + }, localize LSTRING(dogtagAlreadyTaken), DOGTAG_SHOW_DELAY] call CBA_fnc_waitAndExecute; } else { _target setVariable [QGVAR(dogtagTaken), _target, true]; [QGVAR(getDogtagItem), [_player, _target]] call CBA_fnc_serverEvent; diff --git a/addons/dogtags/script_component.hpp b/addons/dogtags/script_component.hpp index c5912f2d2c..d57471d367 100644 --- a/addons/dogtags/script_component.hpp +++ b/addons/dogtags/script_component.hpp @@ -16,3 +16,12 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define DOGTAG_SHOW_DELAY 1 + +#define RUSTLING_SOUNDS [\ + "a3\sounds_f\characters\ingame\AinvPknlMstpSlayWpstDnon_medic.wss",\ + "a3\sounds_f\characters\ingame\AinvPknlMstpSlayWrflDnon_medic.wss",\ + "a3\sounds_f\characters\ingame\AinvPpneMstpSlayWpstDnon_medic.wss",\ + "a3\sounds_f\characters\ingame\AinvPpneMstpSlayWrflDnon_medic.wss"\ +] diff --git a/addons/explosives/config.cpp b/addons/explosives/config.cpp index 9c323af6c1..71952c2eec 100644 --- a/addons/explosives/config.cpp +++ b/addons/explosives/config.cpp @@ -45,8 +45,3 @@ class CfgMineTriggers { mineTriggerRange = 1; }; }; - -class ACE_newEvents { - clientRequestsOrientations = QGVAR(sendOrientations); - serverSendsOrientations = QGVAR(orientationsSent); -}; diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 131b311d90..ecc97a4d7e 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -819,11 +819,13 @@ Tripwire Flare Сигнальная растяжка 仕掛け型照明地雷 + Flara na linkę Type: Tripwire flare - Ignites a non-lethal flare when triggered.<br />Rounds: 1<br />Used on: Ground Тип: Сигнальная растяжка - При срабатывании выпускает несмертельную сгнальную вспышку.<br />Зарядов: 1<br />Используется на: Земле 種類: 仕掛け型照明地雷 - 発動したとき、非致死性の照明を発炎します。<br />装填数: 1<br />次で使用: 地表 + Typ: Flara na linkę - Wystrzeliwuje nieszkodliwą flarę przy nadepnięciu linki.<br/>Pociski: 1<br/>Używane na: ziemia - \ No newline at end of file + diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml index 08a91654d1..9719c58053 100644 --- a/addons/fastroping/stringtable.xml +++ b/addons/fastroping/stringtable.xml @@ -105,6 +105,7 @@ LAISSER LES UNITES UTILISER LA CORDE ДЕСАНТИРОВАНИЕ ПО КАНАТУ ユニットへファスト ロープをさせる + ZJAZD NA LINACH - \ No newline at end of file + diff --git a/addons/flashsuppressors/CfgWeapons.hpp b/addons/flashsuppressors/CfgWeapons.hpp index e807dc2ae9..bf5aee16f1 100644 --- a/addons/flashsuppressors/CfgWeapons.hpp +++ b/addons/flashsuppressors/CfgWeapons.hpp @@ -9,6 +9,12 @@ class asdg_MuzzleSlot_762: asdg_MuzzleSlot { // for 7.62x51 universal mount supp ACE_muzzle_mzls_B = 1; }; }; +class asdg_MuzzleSlot_65: asdg_MuzzleSlot_762 { // for 6.5 weapons, mostly to deal with BIS vanilla compatibility + class compatibleItems: compatibleItems { + ACE_muzzle_mzls_H = 1; + ACE_muzzle_mzls_B = 0; + }; +}; class asdg_MuzzleSlot_93x64: asdg_MuzzleSlot { // for 9.3x64 universal mount suppressors class compatibleItems { ACE_muzzle_mzls_93mmg = 1; @@ -19,6 +25,11 @@ class asdg_MuzzleSlot_9MM_SMG: asdg_MuzzleSlot { // for 9x19mm universal mount S ACE_muzzle_mzls_smg_02 = 1; }; }; +class asdg_MuzzleSlot_9MM: asdg_MuzzleSlot { // for 9x19mm universal mount pistol suppressors + class compatibleItems { + ACE_muzzle_mzls_smg_02 = 1; + }; +}; class asdg_MuzzleSlot_556: asdg_MuzzleSlot { // for 5.56x45 universal mount suppressors class compatibleItems { ACE_muzzle_mzls_L = 1; @@ -29,12 +40,16 @@ class asdg_MuzzleSlot_45ACP_SMG: asdg_MuzzleSlot { // for .45ACP universal mount ACE_muzzle_mzls_smg_01 = 1; }; }; +class asdg_MuzzleSlot_45ACP: asdg_MuzzleSlot { // for .45ACP universal mount pistol suppressors + class compatibleItems { + ACE_muzzle_mzls_smg_01 = 1; + }; +}; class asdg_MuzzleSlot_762MG: asdg_MuzzleSlot { // for 7.62, 6.5 and 5.56 universal mount MG suppressors class compatibleItems { ACE_muzzle_mzls_B = 1; }; }; - class MuzzleSlot; class CfgWeapons { @@ -44,100 +59,6 @@ class CfgWeapons { class WeaponSlotsInfo; }; - /* MX */ - class arifle_MX_Base_F: Rifle_Base_F { - class WeaponSlotsInfo; - }; - - class arifle_MXC_F: arifle_MX_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762 { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - class arifle_MX_F: arifle_MX_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762 { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - class arifle_MX_GL_F: arifle_MX_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762 { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - class arifle_MX_SW_F: arifle_MX_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762MG { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - class arifle_MXM_F: arifle_MX_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762 { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - - - /* Katiba */ - - class arifle_Katiba_Base_F: Rifle_Base_F { - class WeaponSlotsInfo; - }; - class arifle_Katiba_F: arifle_Katiba_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762 { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - class arifle_Katiba_C_F: arifle_Katiba_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762 { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - class arifle_Katiba_GL_F: arifle_Katiba_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: asdg_MuzzleSlot_762 { - class compatibleItems: compatibleItems { - ACE_muzzle_mzls_H = 1; - ACE_muzzle_mzls_B = 0; - }; - }; - }; - }; - - /* Other */ class LMG_Mk200_F: Rifle_Long_Base_F { class WeaponSlotsInfo: WeaponSlotsInfo { @@ -150,56 +71,6 @@ class CfgWeapons { }; }; - /* Pistols */ - - class Pistol; - class Pistol_Base_F: Pistol { - class WeaponSlotsInfo; - }; - - class hgun_P07_F: Pistol_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: MuzzleSlot { - linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; - compatibleItems[] += {"ACE_muzzle_mzls_smg_02"}; - }; - }; - }; - - class hgun_Rook40_F: Pistol_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: MuzzleSlot { - linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; - compatibleItems[] += {"ACE_muzzle_mzls_smg_02"}; - }; - }; - }; - - class hgun_ACPC2_F: Pistol_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: MuzzleSlot { - compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; - }; - }; - }; - - class hgun_Pistol_heavy_01_F: Pistol_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot: MuzzleSlot { - compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; - }; - }; - }; - - /*class hgun_Pistol_heavy_02_F: Pistol_Base_F { - class WeaponSlotsInfo: WeaponSlotsInfo { - class MuzzleSlot { - linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE"; - compatibleItems[] += {"ACE_muzzle_mzls_smg_01"}; - }; - }; - };*/ - /* Flashsuppressors */ diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml index de50563a05..a1597eb6d5 100644 --- a/addons/gforces/stringtable.xml +++ b/addons/gforces/stringtable.xml @@ -10,6 +10,7 @@ Effets de force gravitationnelle Эффекты перегрузок G による効果 + Efekty przeciążeń Only Aircraft @@ -20,6 +21,7 @@ Avions seulement Только для летательных аппаратов 航空機のみ + Tylko samoloty - \ No newline at end of file + diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp index 8341caa9f4..9102b7fbf0 100644 --- a/addons/goggles/config.cpp +++ b/addons/goggles/config.cpp @@ -270,8 +270,3 @@ class CfgCloudlets { destroyOnWaterSurface = 1; }; }; - -class ACE_newEvents { - GlassesChanged = "ace_glassesChanged"; - GlassesCracked = "ace_glassesCracked"; -}; diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index dcad158b75..fa31607242 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -31,16 +31,19 @@ Goggle Effects Эффект очков ゴーグルによる効果 + Efekty gogli Tint Тонировка 色彩のみ + Winieta Tint + Effects Тонировка + эффекты 色彩 + 効果 + Winieta + Efekty - \ No newline at end of file + diff --git a/addons/grenades/config.cpp b/addons/grenades/config.cpp index a06d5f74d8..c836b613e1 100644 --- a/addons/grenades/config.cpp +++ b/addons/grenades/config.cpp @@ -28,7 +28,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "Effects.hpp" - -class ACE_newEvents { - flashbangExplosion = "ace_flashbangExploded"; -}; diff --git a/addons/grenades/functions/fnc_incendiary.sqf b/addons/grenades/functions/fnc_incendiary.sqf index e9267a155e..c143a3c63f 100644 --- a/addons/grenades/functions/fnc_incendiary.sqf +++ b/addons/grenades/functions/fnc_incendiary.sqf @@ -34,6 +34,8 @@ params ["_projectile", "_timeToLive"]; +if (isNull _projectile) exitWith {TRACE_1("null",_projectile);}; + private _position = position _projectile; // --- fire @@ -144,7 +146,7 @@ if (isServer) then { //systemChat format ["burn: %1", _x]; // --- destroy nearby static weapons and ammo boxes - if (_x isKindOf "StaticWeapon" || {_x isKindOf "ReammoBox_F"}) then { + if (_x isKindOf "StaticWeapon" || {_x isKindOf "ReammoBox_F"} || {_x isKindOf "ACE_RepairItem_Base"}) then { _x setDamage 1; }; @@ -158,11 +160,39 @@ if (isServer) then { }; } forEach (_position nearObjects EFFECT_SIZE); -// --- burn car engine +// --- damage local vehicle private _vehicle = _position nearestObject "Car"; -if (!local _vehicle || {_vehicle isKindOf "Wheeled_APC_F"}) exitWith {}; -private _engineSelection = getText (_vehicle call CBA_fnc_getObjectConfig >> "HitPoints" >> "HitEngine" >> "name"); +if (!local _vehicle) exitWith {}; + +private _config = _vehicle call CBA_fnc_getObjectConfig; + +// --- burn tyres +private _fnc_isWheelHitPoint = { + params ["_selectionName"]; + + // wheels must use a selection named "wheel_X_Y_steering" for PhysX to work + _selectionName select [0, 6] == "wheel_" && { + _selectionName select [count _selectionName - 9] == "_steering" + } // return +}; + +{ + private _wheelSelection = getText (_config >> "HitPoints" >> _x >> "name"); + + if (_wheelSelection call _fnc_isWheelHitPoint) then { + private _wheelPosition = _vehicle modelToWorld (_vehicle selectionPosition _wheelSelection); + + if (_position distance _wheelPosition < EFFECT_SIZE * 2) then { + _vehicle setHit [_wheelSelection, 1]; + }; + }; +} forEach (getAllHitPointsDamage _vehicle param [0, []]); + +// --- burn car engine +if (_vehicle isKindOf "Wheeled_APC_F") exitWith {}; + +private _engineSelection = getText (_config >> "HitPoints" >> "HitEngine" >> "name"); private _enginePosition = _vehicle modelToWorld (_vehicle selectionPosition _engineSelection); if (_position distance _enginePosition < EFFECT_SIZE * 2) then { diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 5c84d5ff98..0ec7622796 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -279,18 +279,21 @@ AN-M14 Brandsatz AN-M14 Зажигательная граната AN-M14 焼夷手榴弾 + Granat zapalający AN-M14 AN-M14 AN-M14 AN-M14 AN-M14 + AN-M14 Incendiary grenade used to destroy weapons, ammunition and other equipment. Brandsatzgranate. Verwendet um Waffen, Munition und andere Ausrüstung zu zerstören. Зажигательная граната используется для уничтожения оружия, боеприпасов и прочего оборудования. 焼夷手榴弾は武器や弾薬箱などの装備を破壊するために使われます。 + Granat zapalający, używany do niszczenia broni, amunicji i innego sprzętu. - \ No newline at end of file + diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index 4f4ab53872..84758e6f36 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -8,6 +8,7 @@ Чехол Pouzdro na zbraň ガンバッグ + Torba na broń Gunbag (Tan) @@ -16,6 +17,7 @@ Чехол (желтовато-коричневый) Pouzdro na zbraň (Žlutohnědá) ガンバッグ (タン) + Torba na broń (jasnobrązowa) Put weapon into gunbag @@ -24,6 +26,7 @@ Зачехлить оружие Vložit zbraň do pouzdra ガンバッグへ武器を入れる + Włóż broń do torby Get weapon out of gunbag @@ -32,6 +35,7 @@ Расчехлить оружие Vytáhnout zbraň z pouzdra ガンバッグから武器を出す + Wyciągnij broń z torby Status @@ -40,6 +44,7 @@ Статус Status 中身 + Status Gunbag Empty @@ -48,6 +53,7 @@ Чехол пуст Prázdné pouzdro na zbraň ガンバッグは空 + Torba jest pusta - \ No newline at end of file + diff --git a/addons/interact_menu/config.cpp b/addons/interact_menu/config.cpp index 95561f4579..687d644924 100644 --- a/addons/interact_menu/config.cpp +++ b/addons/interact_menu/config.cpp @@ -25,9 +25,3 @@ class CfgPatches { class ACE_Extensions { extensions[] += {"ace_break_line", "ace_parse_imagepath"}; }; - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; - clearConditionCaches = QGVAR(clearConditionCaches); - interactMenuClosed = "ace_interactMenuClosed"; -}; diff --git a/addons/interact_menu/functions/fnc_addActionToClass.sqf b/addons/interact_menu/functions/fnc_addActionToClass.sqf index 1b4ea27b46..2a0eeda1d2 100644 --- a/addons/interact_menu/functions/fnc_addActionToClass.sqf +++ b/addons/interact_menu/functions/fnc_addActionToClass.sqf @@ -22,6 +22,7 @@ if (!params [["_objectType", "", [""]], ["_typeNum", 0, [0]], ["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith { ERROR("Bad Params"); + [] }; TRACE_4("params",_objectType,_typeNum,_parentPath,_action); @@ -38,6 +39,9 @@ if (param [4, false, [false]]) exitwith { ', _index]; TRACE_2("Added inheritable action",_objectType,_index); [_objectType, "init", _initEH, true, [], true] call CBA_fnc_addClassEventHandler; + + // Return the full path + (_parentPath + [_action select 0]) }; // Ensure the config menu was compiled first @@ -62,10 +66,11 @@ private _parentNode = [_actionTrees, _parentPath] call FUNC(findActionNode); if (isNil {_parentNode}) exitWith { ERROR("Failed to add action"); ACE_LOGERROR_4("action (%1) to parent %2 on object %3 [%4]",(_action select 0),_parentPath,_objectType,_typeNum); + [] }; // Add action node as children of the correct node of action tree (_parentNode select 1) pushBack [_action,[]]; // Return the full path -(+ _parentPath) pushBack (_action select 0) +(_parentPath + [_action select 0]) diff --git a/addons/interact_menu/functions/fnc_addActionToObject.sqf b/addons/interact_menu/functions/fnc_addActionToObject.sqf index d307f8b9ad..31c8301735 100644 --- a/addons/interact_menu/functions/fnc_addActionToObject.sqf +++ b/addons/interact_menu/functions/fnc_addActionToObject.sqf @@ -21,6 +21,7 @@ if (!params [["_object", objNull, [objNull]], ["_typeNum", 0, [0]], ["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith { ERROR("Bad Params"); + [] }; private _varName = [QGVAR(actions),QGVAR(selfActions)] select _typeNum; @@ -38,4 +39,4 @@ if (_parentPath isEqualTo ["ACE_MainActions"]) then { _actionList pushBack [_action, +_parentPath]; // Return the full path -(+ _parentPath) pushBack (_action select 0) +(_parentPath + [_action select 0]) diff --git a/addons/interaction/config.cpp b/addons/interaction/config.cpp index c6aff730cf..77c2b408af 100644 --- a/addons/interaction/config.cpp +++ b/addons/interaction/config.cpp @@ -19,12 +19,3 @@ class CfgPatches { #include "RscTitles.hpp" #include "ACE_Settings.hpp" #include "ACE_ZeusActions.hpp" - -class ACE_newEvents { - getDown = QGVAR(getDown); - pardon = QGVAR(pardon); - tapShoulder = QGVAR(tapShoulder); - sendAway = QGVAR(sendAway); - lampTurnOff = QGVAR(setLampOff); - lampTurnOn = QGVAR(setLampOn); -}; diff --git a/addons/laser/config.cpp b/addons/laser/config.cpp index d989c4f85b..fd51886dc5 100644 --- a/addons/laser/config.cpp +++ b/addons/laser/config.cpp @@ -17,8 +17,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "RscInGameUI.hpp" - -class ACE_newEvents { - laser_laserOff = "ace_laserOff"; - laser_laserOn = "ace_laserOn"; -}; diff --git a/addons/laserpointer/config.cpp b/addons/laserpointer/config.cpp index add36aeff5..4058157660 100644 --- a/addons/laserpointer/config.cpp +++ b/addons/laserpointer/config.cpp @@ -19,8 +19,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "CfgJointRails.hpp" - -class ACE_newEvents { - GunLightOff = "ace_gunLightOff"; - SetHandcuffed = QEGVAR(captives,setHandcuffed); -}; diff --git a/addons/logistics_wirecutter/config.cpp b/addons/logistics_wirecutter/config.cpp index 25c58f1604..e1bdf84e47 100644 --- a/addons/logistics_wirecutter/config.cpp +++ b/addons/logistics_wirecutter/config.cpp @@ -17,7 +17,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; -}; \ No newline at end of file diff --git a/addons/map/Cfg3DEN.hpp b/addons/map/Cfg3DEN.hpp new file mode 100644 index 0000000000..bf230829f4 --- /dev/null +++ b/addons/map/Cfg3DEN.hpp @@ -0,0 +1,21 @@ + +class Cfg3DEN { + class Group { + class AttributeCategories { + class ace_attributes { + class Attributes { + class GVAR(hideBlueForceMarker) { + property = QGVAR(hideBlueForceMarker); + control = "Checkbox"; + displayName = CSTRING(disableBFT); + tooltip = CSTRING(disableBFT_description); + // groups are kaputt. have to delay setVariable public for it to work. + expression = QUOTE(if (_value) then {[ARR_2({(_this select 0) setVariable [ARR_3('%s',_this select 1,true)];},[ARR_2(_this,_value)])] call CBA_fnc_execNextFrame};); + typeName = "BOOL"; + defaultValue = "(false)"; // fix pbo project preprocessing bug + }; + }; + }; + }; + }; +}; diff --git a/addons/map/config.cpp b/addons/map/config.cpp index b619d96d10..aab52c3536 100644 --- a/addons/map/config.cpp +++ b/addons/map/config.cpp @@ -26,6 +26,7 @@ class RscButtonMenu; class RscEdit; #include "ACE_Settings.hpp" +#include "Cfg3DEN.hpp" #include "CfgEventHandlers.hpp" #include "CfgMarkers.hpp" #include "CfgVehicles.hpp" diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index d78dc404a5..440d376f0e 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -406,5 +406,13 @@ Change le canal de communication par défaut au début de la mission. ミッション開始時にあらかじめ設定されているマーカ チャンネルを変更します + + Disable BFT + BFT deaktivieren + + + Always disable Blue Force Tracking for this group. + Blue Force Tracking für diese Gruppe immer deaktivieren. + - \ No newline at end of file + diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 3bf5bc2d37..4fe6db6e1a 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -149,12 +149,14 @@ Touche de rotation des outils de naviguation Клавиша поворота инструментов карты マップ ツールの回転キー + Klawisz obrotu narzędzi nawigacyjnych Modifier key to allow rotating map tools Touche modificatrice permettant la rotation des outils de naviguation Клавиша-модификатор, позволяющая поворачивать инструменты карты マップ ツールを回転させるキーを編集できます。 + Modyfikator pozwalający na obracanie narzędzi nawigacyjnych - \ No newline at end of file + diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index c3e40c3496..7a54167f12 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -4517,7 +4517,7 @@ Whether or not the object will be a medical vehicle. - Czy pojazdy ma być pojazdem medycznym? + Czy pojazd ma być pojazdem medycznym? L'oggetto in questione sarà un veicolo medico o meno. Legt fest, ob das Objekt ein Sanitätsfahrzeug ist. Es un vehículo médico? @@ -4535,12 +4535,13 @@ Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales Задержка прекращения огня ботами, когда игрок теряет сознание по медицинским причинам. AI はプレイヤーが医療的な理由で気絶している場合にかぎり、撃つのをためらいます。 + Opóźnij stan wstrzymania ognia u AI kiedy gracz jest nieprzytomny z powodów medycznych. Delay cease fire of AI for unconsciousness Verzögert Ende des KI-Beschusses bei medizinischer Bewustlosigkeit Demora antes de volverse neutral al caer inconsciente - Opóźnij status captive u nieprzytomnych osób + Opóźnij wstrzymanie ognia AI dla nieprzytomnych osób Ritarda il cessate il fuoco dell'IA quando si è svenuti Prodleva zastavení palby AI na bezvědomé Atraso durante cessar fogo da AI durante inconsciência @@ -4549,4 +4550,4 @@ AI は気絶している人へ、ためらってから射撃します - \ No newline at end of file + diff --git a/addons/medical_ai/ACE_Settings.hpp b/addons/medical_ai/ACE_Settings.hpp index a4962dfbc8..8a43c34484 100644 --- a/addons/medical_ai/ACE_Settings.hpp +++ b/addons/medical_ai/ACE_Settings.hpp @@ -1,5 +1,6 @@ class ACE_Settings { class GVAR(enabledFor) { + category = ECSTRING(medical,Category_Medical); value = 2; typeName = "SCALAR"; values[] = {ECSTRING(Common,Disabled), CSTRING(enabledFor_OnlyServerAndHC), ECSTRING(Common,Enabled)}; diff --git a/addons/medical_ai/functions/fnc_canRequestMedic.sqf b/addons/medical_ai/functions/fnc_canRequestMedic.sqf index a73b7a7822..75a4a0fb32 100644 --- a/addons/medical_ai/functions/fnc_canRequestMedic.sqf +++ b/addons/medical_ai/functions/fnc_canRequestMedic.sqf @@ -19,7 +19,7 @@ if ([_this] call EFUNC(medical,isMedic) || {vehicle _this != _this}) exitWith {false}; { - if ([_x] call EFUNC(medical,isMedic)) exitWith { + if ([_x] call EFUNC(medical,isMedic) && {!([_x] call EFUNC(common,isPlayer))}) exitWith { _this setVariable [QGVAR(assignedMedic), _x]; true }; diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index 09e2209c07..44a8f770c9 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -7,6 +7,7 @@ Sólo Server y HC Нур сервера унд HC サーバーと HC のみ + Tylko serwer i HC - \ No newline at end of file + diff --git a/addons/medical_blood/$PBOPREFIX$ b/addons/medical_blood/$PBOPREFIX$ new file mode 100644 index 0000000000..352725c3fd --- /dev/null +++ b/addons/medical_blood/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\medical_blood diff --git a/addons/medical_blood/ACE_Settings.hpp b/addons/medical_blood/ACE_Settings.hpp new file mode 100644 index 0000000000..b5e1f0db21 --- /dev/null +++ b/addons/medical_blood/ACE_Settings.hpp @@ -0,0 +1,10 @@ +class ACE_Settings { + class GVAR(enabledFor) { + category = ECSTRING(medical,Category_Medical); + displayName = CSTRING(MedicalBloodSettings_enabledFor_DisplayName); + description = CSTRING(MedicalBloodSettings_enabledFor_Description); + value = 2; + typeName = "SCALAR"; + values[] = {ECSTRING(Common,Disabled), CSTRING(enabledFor_OnlyPlayers), ECSTRING(Common,Enabled)}; + }; +}; diff --git a/addons/medical_blood/CfgEventHandlers.hpp b/addons/medical_blood/CfgEventHandlers.hpp new file mode 100644 index 0000000000..becf395052 --- /dev/null +++ b/addons/medical_blood/CfgEventHandlers.hpp @@ -0,0 +1,18 @@ + +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; + +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)); + }; +}; diff --git a/addons/medical_blood/XEH_PREP.hpp b/addons/medical_blood/XEH_PREP.hpp new file mode 100644 index 0000000000..64ebbae911 --- /dev/null +++ b/addons/medical_blood/XEH_PREP.hpp @@ -0,0 +1,6 @@ + +PREP(hit); +PREP(isBleeding); +PREP(onBleeding); +PREP(createBlood); +PREP(spurt); diff --git a/addons/medical_blood/XEH_postInit.sqf b/addons/medical_blood/XEH_postInit.sqf new file mode 100644 index 0000000000..ed76b8770c --- /dev/null +++ b/addons/medical_blood/XEH_postInit.sqf @@ -0,0 +1,37 @@ +#include "script_component.hpp" + +GVAR(useAceMedical) = ["ace_medical"] call EFUNC(common,isModLoaded); + +// To support public API regardless of component settings +[QGVAR(spurt), { + _this call FUNC(spurt); +}] call CBA_fnc_addEventHandler; + +if (isServer) then { + GVAR(bloodDrops) = []; + + [QGVAR(bloodDropCreated), { + params ["_bloodDrop"]; + GVAR(bloodDrops) pushBack _bloodDrop; + if (count GVAR(bloodDrops) >= MAX_BLOOD_OBJECTS) then { + private _deletedBloodDrop = GVAR(bloodDrops) deleteAt 0; + deleteVehicle _deletedBloodDrop; + }; + + [{deleteVehicle _this}, _bloodDrop, BLOOD_OBJECT_LIFETIME] call CBA_fnc_waitAndExecute; + }] call CBA_fnc_addEventHandler; +}; + +["ace_settingsInitialized", { + TRACE_1("settingsInitialized", GVAR(enabledFor)); + if (GVAR(enabledFor) == 0) exitWith {}; // 0: disabled + + [configFile >> QGVAR(stateMachine)] call CBA_statemachine_fnc_createFromConfig; + + ["CAManBase", "hit", { + params ["_unit"]; + if (GVAR(enabledFor) == 1 && {!isPlayer _unit || {_unit == ACE_player}}) exitWith {}; + _this call FUNC(hit); + }] call CBA_fnc_addClassEventHandler; + +}] call CBA_fnc_addEventHandler; diff --git a/addons/medical_blood/XEH_preInit.sqf b/addons/medical_blood/XEH_preInit.sqf new file mode 100644 index 0000000000..2845c08ebc --- /dev/null +++ b/addons/medical_blood/XEH_preInit.sqf @@ -0,0 +1,27 @@ +#include "script_component.hpp" + +ADDON = false; + +#include "XEH_PREP.hpp" + +// blood object model namespace +GVAR(models) = [] call CBA_fnc_createNamespace; + +{ + _x params ["_name", "_model"]; + + // createSimpleObject expects a path without the leading slash + if ((_model select [0,1]) isEqualTo "\") then { + _model = _model select [1]; + }; + + GVAR(models) setVariable [_name, _model]; +} forEach [ + // higher number means bigger model + ["blooddrop_1", QPATHTOF(data\drop_1.p3d)], + ["blooddrop_2", QPATHTOF(data\drop_2.p3d)], + ["blooddrop_3", QPATHTOF(data\drop_3.p3d)], + ["blooddrop_4", QPATHTOF(data\drop_4.p3d)] +]; + +ADDON = true; diff --git a/addons/medical_blood/XEH_preStart.sqf b/addons/medical_blood/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/medical_blood/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/medical_blood/config.cpp b/addons/medical_blood/config.cpp new file mode 100644 index 0000000000..9d0fe1c985 --- /dev/null +++ b/addons/medical_blood/config.cpp @@ -0,0 +1,18 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_main"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Glowbal","Sickboy","commy2"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "state_machine.hpp" diff --git a/addons/medical_blood/data/blood.rvmat b/addons/medical_blood/data/blood.rvmat new file mode 100644 index 0000000000..691515d6b4 --- /dev/null +++ b/addons/medical_blood/data/blood.rvmat @@ -0,0 +1,91 @@ +class StageTI { + texture = "z\ace\addons\medical_blood\data\blood_ti_ca.paa"; +}; + +ambient[] = {1.0,1.0,1.0,1.0}; +diffuse[] = {1.0,1.0,1.0,1.0}; +forcedDiffuse[] = {0.0,0.0,0.0,0.0}; +emmisive[] = {0.0,0.0,0.0,1.0}; +specular[] = {0.0,0.0,0.0,1.0}; +specularPower = 1.0; +PixelShaderID = "Super"; +VertexShaderID = "Super"; +renderFlags[] = {"NoZWrite"}; + +class Stage1 { + texture = "z\ace\addons\medical_blood\data\blood_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1.0,0.0,0.0}; + up[] = {0.0,1.0,0.0}; + dir[] = {0.0,0.0,0.0}; + pos[] = {0.0,0.0,0.0}; + }; +}; + +class Stage2 { + texture = "#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1.0,0.0,0.0}; + up[] = {0.0,1.0,0.0}; + dir[] = {0.0,0.0,0.0}; + pos[] = {0.0,0.0,0.0}; + }; +}; + +class Stage3 { + texture = "#(argb,8,8,3)color(0.0,0.0,0.0,0.0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1.0,0.0,0.0}; + up[] = {0.0,1.0,0.0}; + dir[] = {0.0,0.0,0.0}; + pos[] = {0.0,0.0,0.0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1.0,1.0,1.0,1.0,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1.0,0.0,0.0}; + up[] = {0.0,1.0,0.0}; + dir[] = {0.0,0.0,0.0}; + pos[] = {0.0,0.0,0.0}; + }; +}; + +class Stage5 { + texture = "z\ace\addons\medical_blood\data\blood_smdi.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1.0,0.0,0.0}; + up[] = {0.0,1.0,0.0}; + dir[] = {0.0,0.0,0.0}; + pos[] = {0.0,0.0,0.0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnel(0.7,0.001)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1.0,0.0,0.0}; + up[] = {0.0,1.0,0.0}; + dir[] = {0.0,0.0,0.0}; + pos[] = {0.0,0.0,0.0}; + }; +}; + +class Stage7 { + texture = "a3\data_f\env_land_co.paa"; + useWorldEnvMap = "false"; + uvSource = "tex"; + class uvTransform { + aside[] = {1.0,0.0,0.0}; + up[] = {0.0,1.0,0.0}; + dir[] = {0.0,0.0,0.0}; + pos[] = {0.0,0.0,0.0}; + }; +}; diff --git a/addons/medical_blood/data/blood_ca.paa b/addons/medical_blood/data/blood_ca.paa new file mode 100644 index 0000000000..9ae34f8eb0 Binary files /dev/null and b/addons/medical_blood/data/blood_ca.paa differ diff --git a/addons/medical_blood/data/blood_nohq.paa b/addons/medical_blood/data/blood_nohq.paa new file mode 100644 index 0000000000..bae0ed1075 Binary files /dev/null and b/addons/medical_blood/data/blood_nohq.paa differ diff --git a/addons/medical_blood/data/blood_smdi.paa b/addons/medical_blood/data/blood_smdi.paa new file mode 100644 index 0000000000..36e4728b16 Binary files /dev/null and b/addons/medical_blood/data/blood_smdi.paa differ diff --git a/addons/medical_blood/data/blood_ti_ca.paa b/addons/medical_blood/data/blood_ti_ca.paa new file mode 100644 index 0000000000..9172b23d5f Binary files /dev/null and b/addons/medical_blood/data/blood_ti_ca.paa differ diff --git a/addons/medical_blood/data/drop_1.p3d b/addons/medical_blood/data/drop_1.p3d new file mode 100644 index 0000000000..b72f206a6f Binary files /dev/null and b/addons/medical_blood/data/drop_1.p3d differ diff --git a/addons/medical_blood/data/drop_2.p3d b/addons/medical_blood/data/drop_2.p3d new file mode 100644 index 0000000000..bb155f3e65 Binary files /dev/null and b/addons/medical_blood/data/drop_2.p3d differ diff --git a/addons/medical_blood/data/drop_3.p3d b/addons/medical_blood/data/drop_3.p3d new file mode 100644 index 0000000000..de564cfd0b Binary files /dev/null and b/addons/medical_blood/data/drop_3.p3d differ diff --git a/addons/medical_blood/data/drop_4.p3d b/addons/medical_blood/data/drop_4.p3d new file mode 100644 index 0000000000..fd9e0de0a0 Binary files /dev/null and b/addons/medical_blood/data/drop_4.p3d differ diff --git a/addons/medical_blood/functions/fnc_createBlood.sqf b/addons/medical_blood/functions/fnc_createBlood.sqf new file mode 100644 index 0000000000..51a937f35d --- /dev/null +++ b/addons/medical_blood/functions/fnc_createBlood.sqf @@ -0,0 +1,31 @@ +/* + * Author: Glowbal + * Spawn a blood drop. + * Available blood drop classes are blooddrop_1 through blooddrop_4. + * + * Arguments: + * 0: classname of blood drop + * 1: Position + * + * Return Value: + * Created blood drop + * + * Example: + * ["blooddrop_2", getPos player] call ace_medical_blood_fnc_createBlood + * + * Public: No + */ + +#include "script_component.hpp" + +params ["_type", "_pos"]; + +private _model = GVAR(models) getVariable _type; + +private _object = createSimpleObject [_model, [0,0,0]]; +_object setDir random 360; +_object setPos _pos; + +[QGVAR(bloodDropCreated), [_object]] call CBA_fnc_serverEvent; + +_object diff --git a/addons/medical_blood/functions/fnc_hit.sqf b/addons/medical_blood/functions/fnc_hit.sqf new file mode 100644 index 0000000000..8a11ba5975 --- /dev/null +++ b/addons/medical_blood/functions/fnc_hit.sqf @@ -0,0 +1,29 @@ +/* + * Author: Glowbal + * Handle unit hit eventhandler + * + * Arguments: + * 0: unit + * 1: caused by + * 2: damage + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_causedBy", "_damage"]; + +if (isNull _causedBy) exitWith { // won't be able to calculate the direction properly, so instead we pick something at random + [QGVAR(spurt), [_unit, random 360, _damage]] call CBA_fnc_serverEvent; +}; + +// Calculate bulletDirection +private _unitPos = getPosASL _unit; +private _causedByPos = getPosASL _causedBy; + +private _bulletDir = ((_unitPos select 0) - (_causedByPos select 0)) atan2 ((_unitPos select 1) - (_causedByPos select 1)); + +[QGVAR(spurt), [_unit, _bulletDir, _damage]] call CBA_fnc_serverEvent; diff --git a/addons/medical_blood/functions/fnc_isBleeding.sqf b/addons/medical_blood/functions/fnc_isBleeding.sqf new file mode 100644 index 0000000000..57f68c7c8d --- /dev/null +++ b/addons/medical_blood/functions/fnc_isBleeding.sqf @@ -0,0 +1,23 @@ +/* + * Author: Glowbal + * Check if is bleeding + * + * Arguments: + * 0: unit + * + * Return Value: + * is Bleeding + * + * Example: + * [UNIT] call ace_medical_blood_fnc_isBleeding + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit"]; + +if (GVAR(useAceMedical)) exitWith { + _unit getVariable [QEGVAR(medical,isBleeding), false]; +}; +alive _unit && {getDammage _unit > 0.3}; diff --git a/addons/medical_blood/functions/fnc_onBleeding.sqf b/addons/medical_blood/functions/fnc_onBleeding.sqf new file mode 100644 index 0000000000..d4dcdd6de9 --- /dev/null +++ b/addons/medical_blood/functions/fnc_onBleeding.sqf @@ -0,0 +1,38 @@ +/* + * Author: Glowbal + * handle bleeding state (state machine) + * + * Arguments: + * 0: unit + * + * Return Value: + * is Bleeding + * + * Example: + * [UNIT] call ace_medical_blood_fnc_onBleeding + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit"]; + +if (GVAR(enabledFor) == 1 && {!isPlayer _unit || {_unit == ACE_player}}) exitWith {}; + +private _lastTime = _unit getVariable [QGVAR(lastTime), -10]; +private _bloodLoss = (if (GVAR(useAceMedical)) then {([_unit] call EFUNC(medical,getBloodLoss)) * 2.5} else {getDammage _unit * 2}) min 6; + +if ((CBA_missionTime - _lastTime) + _bloodLoss >= 8 + random 2) then { + _unit setVariable [QGVAR(lastTime), CBA_missionTime]; + + private _position = getPosASL _unit; + _position = _position vectorAdd [ + random 0.4 - 0.2, + random 0.4 - 0.2, + 0 + ]; + _position set [2, 0]; + + private _bloodDrop = ["blooddrop_1", "blooddrop_2", "blooddrop_3", "blooddrop_4"] select floor (_bloodLoss max 3); + [_bloodDrop, _position, getDir _unit] call FUNC(createBlood); +}; diff --git a/addons/medical_blood/functions/fnc_spurt.sqf b/addons/medical_blood/functions/fnc_spurt.sqf new file mode 100644 index 0000000000..d17139988d --- /dev/null +++ b/addons/medical_blood/functions/fnc_spurt.sqf @@ -0,0 +1,38 @@ +/* + * Author: Sickboy + * Spurt blood on the ground + * + * Arguments: + * 0: unit + * 1: direction + * 2: damage + * + * Return Value: + * None + * + * Example: + * [UNIT, random 360, 1] call ace_medical_blood_fnc_spurt + * + * Public: No + */ + +#include "script_component.hpp" + +#define MAXIMUM_DROPS 4 +#define DISTANCE_BETWEEN_DROPS 0.20 +#define OFFSET 0.25 + +params ["_unit", "_dir", "_damage"]; + +private _distanceBetweenDrops = DISTANCE_BETWEEN_DROPS * _damage; +private _offset = OFFSET + _distanceBetweenDrops; +private _pos = _unit getPos [_offset, _dir]; +["blooddrop_2", _pos, _dir] call FUNC(createBlood); + +private _dropAmount = ceil (MAXIMUM_DROPS * _damage); +if (_dropAmount > 1) then { + for "_i" from 2 to _dropAmount do { + _pos = _pos getPos [_distanceBetweenDrops, _dir]; + ["blooddrop_1", _pos, _dir] call FUNC(createBlood); + }; +}; diff --git a/addons/medical_blood/functions/script_component.hpp b/addons/medical_blood/functions/script_component.hpp new file mode 100644 index 0000000000..8f2dd066de --- /dev/null +++ b/addons/medical_blood/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\medical_blood\script_component.hpp" diff --git a/addons/medical_blood/script_component.hpp b/addons/medical_blood/script_component.hpp new file mode 100644 index 0000000000..9991357648 --- /dev/null +++ b/addons/medical_blood/script_component.hpp @@ -0,0 +1,21 @@ +#define COMPONENT medical_blood +#define COMPONENT_BEAUTIFIED Medical Blood +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_ENABLED_MEDICAL_BLOOD +// #define DISABLE_COMPILE_CACHE +// #define CBA_DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_MEDICAL_BLOOD + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_MEDICAL_BLOOD + #define DEBUG_SETTINGS DEBUG_SETTINGS_MEDICAL_BLOOD +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#define MAX_BLOOD_OBJECTS 500 +#define BLOOD_OBJECT_LIFETIME 900 diff --git a/addons/medical_blood/state_machine.hpp b/addons/medical_blood/state_machine.hpp new file mode 100644 index 0000000000..a05beb7c2b --- /dev/null +++ b/addons/medical_blood/state_machine.hpp @@ -0,0 +1,7 @@ +class GVAR(stateMachine) { + list = QUOTE(allUnits select {[_x] call FUNC(isBleeding)}); + skipNull = 1; + class Bleeding { + onState = QUOTE(call FUNC(onBleeding)); + }; +}; diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml new file mode 100644 index 0000000000..35902a1a06 --- /dev/null +++ b/addons/medical_blood/stringtable.xml @@ -0,0 +1,14 @@ + + + + + Only Players + + + Enable Blood Drops + + + Enable or disable Blood Drops created on bleeding and taking damage + + + diff --git a/addons/microdagr/config.cpp b/addons/microdagr/config.cpp index 5d33c073e1..c3ca72b454 100644 --- a/addons/microdagr/config.cpp +++ b/addons/microdagr/config.cpp @@ -19,7 +19,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "gui.hpp" #include "ACE_Settings.hpp" - -class ACE_newEvents { - RangerfinderData = QEGVAR(vector,rangefinderData); -}; diff --git a/addons/minedetector/stringtable.xml b/addons/minedetector/stringtable.xml index 5bb1fe840b..ff67757cb3 100644 --- a/addons/minedetector/stringtable.xml +++ b/addons/minedetector/stringtable.xml @@ -7,6 +7,7 @@ Детектор металла Detektor kovů 地雷探知機 + Wykrywacz metali Metal detector @@ -14,6 +15,7 @@ Детектор металла Detektor kovů 地雷探知機 + Wykrywacz metali Activate @@ -21,6 +23,7 @@ Включить Aktivovat 起動 + Aktywuj Deactivate @@ -28,30 +31,35 @@ Выключить Deaktivovat 停止 + Deaktywuj Connect Headphones Подключить наушники Připojit sluchátka ヘッドホンへつなぐ + Podłącz słuchawki Disconnect Headphones Отключить наушники Odpojit sluchátka ヘッドホンからはずす + Odłącz słuchawki Headphones Connected Наушники подключены Sluchátka připojena ヘッドホンへ接続された + Słuchawki podpięte Headphones Disconnected Наушники отключены Sluchátka odpojena ヘッドホンから外された + Słuchawki odpięte - \ No newline at end of file + diff --git a/addons/mk6mortar/config.cpp b/addons/mk6mortar/config.cpp index a63f7086f9..f387632446 100644 --- a/addons/mk6mortar/config.cpp +++ b/addons/mk6mortar/config.cpp @@ -34,7 +34,3 @@ class RscStructuredText; #include "RscInGameUI.hpp" #include "RscRangeTable.hpp" - -class ACE_newEvents { - initMortar = "ace_initMortar"; -}; diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index b7395b231c..9a0ba8d53e 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -433,6 +433,7 @@ Fade on screen border Am Bildschirmrand ausblenden 画面端では非表示 + Ukryj na brzegach ekranu - \ No newline at end of file + diff --git a/addons/optionsmenu/CfgEventHandlers.hpp b/addons/optionsmenu/CfgEventHandlers.hpp index d6451e638d..dc5816df05 100644 --- a/addons/optionsmenu/CfgEventHandlers.hpp +++ b/addons/optionsmenu/CfgEventHandlers.hpp @@ -20,8 +20,5 @@ class Extended_PostInit_EventHandlers { class Extended_DisplayLoad_EventHandlers { class RscDisplayMain { GVAR(loadMainMenuBox) = QUOTE(_this call COMPILE_FILE(init_loadMainMenuBox)); - - //Hide the button if there is no world (-world=empty) - GVAR(hideButtonEmptyWorld) = "((_this select 0) displayCtrl 80085) ctrlShow (missionName != '');"; }; }; diff --git a/addons/optionsmenu/gui/pauseMenu.hpp b/addons/optionsmenu/gui/pauseMenu.hpp index 75177fa3b6..79aed168de 100644 --- a/addons/optionsmenu/gui/pauseMenu.hpp +++ b/addons/optionsmenu/gui/pauseMenu.hpp @@ -102,14 +102,6 @@ class RscDisplayMovieInterrupt: RscStandardDisplay { }; class RscDisplayMain: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase { - action = "if (missionName != '') then {createDialog 'ACE_settingsMenu';};"; - x = "safezoneX"; - y = "safezoneY"; - idc = 80085; - }; - - class ACE_news_apex: RscControlsGroupNoHScrollbars { idc = 80090; x = "safezoneX + safezoneW - 10 * (pixelW * pixelGrid * 2) - (4 * pixelH)"; diff --git a/addons/overheating/config.cpp b/addons/overheating/config.cpp index 8ef1ac2d51..bedd96fa30 100644 --- a/addons/overheating/config.cpp +++ b/addons/overheating/config.cpp @@ -52,10 +52,3 @@ class CfgGesturesMale { }; }; }; -class ACE_newEvents { - initiateSwapBarrelAssisted = QGVAR(initiateSwapBarrelAssisted); - showWeaponTemperature = QGVAR(showWeaponTemperature); - loadCoolestSpareBarrel = QGVAR(loadCoolestSpareBarrel); - sendSpareBarrelTemperatureHint = QGVAR(sendSpareBarrelTemperatureHint); - weaponJammed = "ace_weaponJammed"; -}; diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 3c8255c939..cd5559282b 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -309,6 +309,7 @@ Проверить температуру запасных стволов Zkontrolovat teplotu náhradní hlavně 予備銃身の温度を測る + Sprawdź temperaturę zapasowych luf Checking spare barrels temperatures... @@ -317,6 +318,7 @@ Проверка температуры запасных стволов... Kontroluji teplotu náhradní hlavně... 予備銃身の温度を測っている・・・ + Sprawdzanie temperatury zapasowych luf... Temperature @@ -338,6 +340,7 @@ Прохладные Studená náhrandí hlaveň 予備銃身は冷たい + Zimne zapasowe lufy Warm Spare Barrel/s @@ -346,6 +349,7 @@ Теплые Teplá náhrandí hlaveň 予備銃身は温かい + Ciepłe zapasowe lufy Hot Spare Barrel/s @@ -354,6 +358,7 @@ Горячие Horká náhrandí hlaveň 予備銃身は熱い + Gorące zapasowe lufy Very Hot Spare Barrel/s @@ -362,6 +367,7 @@ Очень горячие Velmi horká náhrandí hlaveň 予備銃身はとても熱い + Bardzo gorące zapasowe lufy Extremely Hot Spare Barrel/s @@ -370,6 +376,7 @@ Запредельно горячие Extrémně horká náhrandí hlaveň 予備銃身は極めて熱い + Ekstremalnie gorące zapasowe lufy Overheating Enabled @@ -380,6 +387,7 @@ Перегрев включен Přehřívání povoleno 過熱を有効化 + Przegrzewanie włączone Master enable for the overheating/jamming module @@ -387,6 +395,7 @@ Activateur maître pour le module de surchauffe / enrayement Главный включатель для модуля перегрева/заклинивания 過熱と弾詰まりモジュールを全て有効化します + Główny włącznik modułu przegrzewania/zacinania się broni - \ No newline at end of file + diff --git a/addons/overpressure/config.cpp b/addons/overpressure/config.cpp index 0aa455de7d..75b58d5988 100644 --- a/addons/overpressure/config.cpp +++ b/addons/overpressure/config.cpp @@ -16,7 +16,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgWeapons.hpp" - -class ACE_newEvents { - overpressure = "ace_overpressure"; -}; diff --git a/addons/realisticweights/CfgWeapons.hpp b/addons/realisticweights/CfgWeapons.hpp index 5c60f8d464..d84b13ab72 100644 --- a/addons/realisticweights/CfgWeapons.hpp +++ b/addons/realisticweights/CfgWeapons.hpp @@ -3,6 +3,9 @@ class CfgWeapons { class Rifle_Long_Base_F: Rifle_Base_F { class WeaponSlotsInfo; }; + class Rifle_Short_Base_F: Rifle_Base_F { + class WeaponSlotsInfo; + }; class Launcher; class Launcher_Base_F: Launcher { class WeaponSlotsInfo; @@ -176,7 +179,7 @@ class CfgWeapons { // - SMGs --------------------------------------------------------------------- // - CPW ------------------------------------------------------------------ - class pdw2000_base_F: Rifle_Base_F { + class pdw2000_base_F: Rifle_Short_Base_F { class WeaponSlotsInfo; }; class hgun_PDW2000_F: pdw2000_base_F { @@ -186,7 +189,7 @@ class CfgWeapons { }; // - KRISS Vector --------------------------------------------------------- - class SMG_01_Base: Rifle_Base_F { + class SMG_01_Base: Rifle_Short_Base_F { class WeaponSlotsInfo; }; class SMG_01_F: SMG_01_Base { diff --git a/addons/reload/config.cpp b/addons/reload/config.cpp index 9c66dd4828..21e28d35f5 100644 --- a/addons/reload/config.cpp +++ b/addons/reload/config.cpp @@ -20,9 +20,3 @@ class CfgPatches { #include "CfgActions.hpp" #include "ACE_Settings.hpp" #include "ACE_UI.hpp" - -class ACE_newEvents { - setAmmoSync = QGVAR(syncAmmo); - returnedAmmo = QGVAR(ammoReturned); - linkedAmmo = QGVAR(ammoLinked); -}; diff --git a/addons/reloadlaunchers/config.cpp b/addons/reloadlaunchers/config.cpp index 16ae8cb867..09f01e0594 100644 --- a/addons/reloadlaunchers/config.cpp +++ b/addons/reloadlaunchers/config.cpp @@ -18,7 +18,3 @@ class CfgPatches { #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - -class ACE_newEvents { - reloadLauncher = QGVAR(reloadLauncher); -}; diff --git a/addons/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index c2f2bfacc7..847258f6da 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -15,7 +15,7 @@ }; \ }; -class CBA_Extended_EventHandlers; +class CBA_Extended_EventHandlers_base; class CfgVehicles { class ACE_Module; @@ -311,14 +311,17 @@ class CfgVehicles { class ThingX; class ACE_RepairItem_Base: ThingX { class EventHandlers { - class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; + class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers_base {}; + }; + class ACE_Actions { + class ACE_MainActions { + modifierFunction = QUOTE(_this call FUNC(modifyInteraction)); + }; }; - icon = "iconObject_circle"; - mapSize = 0.7; accuracy = 0.2; vehicleClass = "ACE_Logistics_Items"; - destrType = "DesturctNo"; + destrType = "DesturctNo"; // scripted delayed destruction }; class ACE_Track: ACE_RepairItem_Base { @@ -328,6 +331,25 @@ class CfgVehicles { scope = 2; model = QPATHTOF(data\ace_track.p3d); displayName = CSTRING(SpareTrack); + icon = "iconObject_2x1"; + mapSize = 0.5; + + // damage handling + armor = 0.6; + armorStructural = 1; + minTotalDamageThreshold = 0.01; + explosionShielding = 1; + replaceDamagedLimit = 0.9; + selectionDamage = "mat_track"; + + class Damage { + tex[] = {}; + mat[] = { + QPATHTO_R(data\trailObjects_steel.rvmat), + QPATHTO_R(data\trailObjects_steel_damage.rvmat), + QPATHTO_R(data\trailObjects_steel_destruct.rvmat) + }; + }; }; class ACE_Wheel: ACE_RepairItem_Base { @@ -338,6 +360,41 @@ class CfgVehicles { model = QPATHTOF(data\ace_wheel.p3d); displayName = CSTRING(SpareWheel); picture = QPATHTOF(ui\tire_ca.paa); + icon = "iconObject_circle"; + mapSize = 0.7; + + // damage handling + armor = 0.05; + armorStructural = 1; + minTotalDamageThreshold = 0.01; + explosionShielding = 1; + replaceDamagedLimit = 0.9; + selectionDamage = "mat_tyre"; //"mat_rim" + + // necessary because only one "selectionDamage" (== "visual") is allowed for simple damage objects + // can not take damage individually though, because of limitations of the thingX simulation type + class HitPoints { + class HitBody { + armor = 0.6; + material = -1; + name = "zbytek"; + visual = "mat_rim"; + passThrough = 1; + explosionShielding = 1; + }; + }; + + class Damage { + tex[] = {}; + mat[] = { + QPATHTO_R(data\trailObjects_tyre.rvmat), + QPATHTO_R(data\trailObjects_tyre_damage.rvmat), + QPATHTO_R(data\trailObjects_tyre_damage.rvmat), + QPATHTO_R(data\trailObjects_steel.rvmat), + QPATHTO_R(data\trailObjects_steel_damage.rvmat), + QPATHTO_R(data\trailObjects_steel_destruct.rvmat) + }; + }; }; // disable vanilla repair diff --git a/addons/repair/XEH_PREP.hpp b/addons/repair/XEH_PREP.hpp index e3604c95a7..692bee6112 100644 --- a/addons/repair/XEH_PREP.hpp +++ b/addons/repair/XEH_PREP.hpp @@ -23,6 +23,7 @@ PREP(isEngineer); PREP(isInRepairFacility); PREP(isNearRepairVehicle); PREP(isRepairVehicle); +PREP(modifyInteraction); PREP(moduleAddSpareParts); PREP(moduleAssignEngineer); PREP(moduleAssignRepairVehicle); diff --git a/addons/repair/XEH_preInit.sqf b/addons/repair/XEH_preInit.sqf index a7feade1c3..7d9578b8ec 100644 --- a/addons/repair/XEH_preInit.sqf +++ b/addons/repair/XEH_preInit.sqf @@ -4,4 +4,10 @@ ADDON = false; #include "XEH_PREP.hpp" +["ACE_RepairItem_Base", "killed", { + params ["_object"]; + + [{deleteVehicle _this}, _object, 5] call CBA_fnc_waitAndExecute; +}] call CBA_fnc_addClassEventHandler; + ADDON = true; diff --git a/addons/repair/config.cpp b/addons/repair/config.cpp index 71a990ea73..a8904a0a0a 100644 --- a/addons/repair/config.cpp +++ b/addons/repair/config.cpp @@ -20,10 +20,3 @@ class CfgPatches { #include "CfgActions.hpp" #include "CfgVehicles.hpp" #include "CfgEden.hpp" - -class ACE_newEvents { - setWheelHitPointDamage = QGVAR(setWheelHitPointDamage); - setVehicleHitPointDamage = QGVAR(setVehicleHitPointDamage); - setVehicleDamage = QGVAR(setVehicleDamage); - AddCargoByClass = "ace_addCargo"; -}; diff --git a/addons/repair/data/ace_track.p3d b/addons/repair/data/ace_track.p3d index 988499c32b..749de18239 100644 Binary files a/addons/repair/data/ace_track.p3d and b/addons/repair/data/ace_track.p3d differ diff --git a/addons/repair/data/ace_wheel.p3d b/addons/repair/data/ace_wheel.p3d index c24f804b4f..52d753ab98 100644 Binary files a/addons/repair/data/ace_wheel.p3d and b/addons/repair/data/ace_wheel.p3d differ diff --git a/addons/repair/data/material_dummy.p3d b/addons/repair/data/material_dummy.p3d new file mode 100644 index 0000000000..0926cc0f73 Binary files /dev/null and b/addons/repair/data/material_dummy.p3d differ diff --git a/addons/repair/data/model.cfg b/addons/repair/data/model.cfg new file mode 100644 index 0000000000..95f4bfb2e5 --- /dev/null +++ b/addons/repair/data/model.cfg @@ -0,0 +1,44 @@ +class CfgSkeletons { + class Default { + isDiscrete = 1; + skeletonInherit = ""; + skeletonBones[] = {}; + }; + + class ace_wheel: Default { + skeletonBones[] = { + "zbytek", "" + }; + }; + + class ace_track: Default { + skeletonBones[] = { + "zbytek", "" + }; + }; +}; + +class CfgModels { + class Default { + skeletonName = ""; + sectionsInherit = ""; + sections[] = {}; + }; + + class ace_wheel: Default { + skeletonName = "ace_wheel"; + sectionsInherit = ""; + sections[] = { + "mat_tyre", + "mat_rim" + }; + }; + + class ace_track: Default { + skeletonName = "ace_track"; + sectionsInherit = ""; + sections[] = { + "mat_track" + }; + }; +}; diff --git a/addons/repair/data/trailObjects.rvmat b/addons/repair/data/trailObjects.rvmat deleted file mode 100644 index 8692493699..0000000000 --- a/addons/repair/data/trailObjects.rvmat +++ /dev/null @@ -1,100 +0,0 @@ -#define _ARMA_ - -class StageTI -{ - texture = "a3\data_f\default_ti_ca.paa"; -}; -ambient[] = {1,1,1,1}; -diffuse[] = {1,1,1,1}; -forcedDiffuse[] = {0,0,0,0}; -emmisive[] = {0,0,0,0}; -specular[] = {0.0099999998,0.0099999998,0.0099999998,0.0099999998}; -specularPower = 500; -surfaceInfo="a3\data_f\penetration\metal.bisurf"; -PixelShaderID = "Super"; -VertexShaderID = "Super"; -class Stage1 -{ - texture = "z\ace\addons\repair\data\trailObjects_nohq.paa"; - uvSource = "tex"; - class uvTransform - { - aside[] = {1,0,0}; - up[] = {0,1,0}; - dir[] = {0,0,1}; - pos[] = {0,0,0}; - }; -}; -class Stage2 -{ - texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)"; - uvSource = "tex"; - class uvTransform - { - aside[] = {1,0,0}; - up[] = {0,1,0}; - dir[] = {0,0,1}; - pos[] = {0,0,0}; - }; -}; -class Stage3 -{ - texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; - uvSource = "tex"; - class uvTransform - { - aside[] = {1,0,0}; - up[] = {0,1,0}; - dir[] = {0,0,1}; - pos[] = {0,0,0}; - }; -}; -class Stage4 -{ - texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; - uvSource = "tex"; - class uvTransform - { - aside[] = {1,0,0}; - up[] = {0,1,0}; - dir[] = {0,0,1}; - pos[] = {0,0,0}; - }; -}; -class Stage5 -{ - texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; - uvSource = "tex"; - class uvTransform - { - aside[] = {1,0,0}; - up[] = {0,1,0}; - dir[] = {0,0,1}; - pos[] = {0,0,0}; - }; -}; -class Stage6 -{ - texture = "#(ai,64,64,1)fresnelGlass(2)"; - uvSource = "tex"; - class uvTransform - { - aside[] = {1,0,0}; - up[] = {0,1,0}; - dir[] = {0,0,1}; - pos[] = {0,0,0}; - }; -}; -class Stage7 -{ - useWorldEnvMap = "true"; - texture = "a3\data_f\env_land_ca.paa"; - uvSource = "tex"; - class uvTransform - { - aside[] = {1,0,0}; - up[] = {0,1,0}; - dir[] = {0,0,1}; - pos[] = {0,0,0}; - }; -}; diff --git a/addons/repair/data/trailObjects_steel.rvmat b/addons/repair/data/trailObjects_steel.rvmat new file mode 100644 index 0000000000..f92ea9113f --- /dev/null +++ b/addons/repair/data/trailObjects_steel.rvmat @@ -0,0 +1,91 @@ +class StageTI { + texture = "a3\data_f\default_ti_ca.paa"; +}; + +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,0}; +specular[] = {0.01,0.01,0.01,0.01}; +specularPower = 500; +surfaceInfo = "a3\data_f\penetration\metal.bisurf"; +PixelShaderID = "Super"; +VertexShaderID = "Super"; + +class Stage1 { + texture = "z\ace\addons\repair\data\trailObjects_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage2 { + texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage5 { + texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnelGlass(2)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage7 { + useWorldEnvMap = "true"; + texture = "a3\data_f\env_land_ca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; diff --git a/addons/repair/data/trailObjects_steel_damage.rvmat b/addons/repair/data/trailObjects_steel_damage.rvmat new file mode 100644 index 0000000000..1850a7396c --- /dev/null +++ b/addons/repair/data/trailObjects_steel_damage.rvmat @@ -0,0 +1,91 @@ +class StageTI { + texture = "a3\data_f\default_ti_ca.paa"; +}; + +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,0}; +specular[] = {0.01,0.01,0.01,0.01}; +specularPower = 500; +surfaceInfo = "a3\data_f\penetration\metal.bisurf"; +PixelShaderID = "Super"; +VertexShaderID = "Super"; + +class Stage1 { + texture = "z\ace\addons\repair\data\trailObjects_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage2 { + texture = "a3\data_f\destruct\damage_metal_cdt.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {5,0,0}; + up[] = {0,5,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; + +class Stage3 { + texture = "a3\data_f\destruct\damage_metal_mc.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {3,0,0}; + up[] = {0,3,0}; + dir[] = {0,0,0}; + pos[] = {0.1,0.23,0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage5 { + texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnelGlass(2)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage7 { + useWorldEnvMap = "true"; + texture = "a3\data_f\env_land_ca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; diff --git a/addons/repair/data/trailObjects_steel_destruct.rvmat b/addons/repair/data/trailObjects_steel_destruct.rvmat new file mode 100644 index 0000000000..5be6a7c912 --- /dev/null +++ b/addons/repair/data/trailObjects_steel_destruct.rvmat @@ -0,0 +1,91 @@ +class StageTI { + texture = "a3\data_f\default_ti_ca.paa"; +}; + +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,0}; +specular[] = {0.01,0.01,0.01,0.01}; +specularPower = 500; +surfaceInfo = "a3\data_f\penetration\metal.bisurf"; +PixelShaderID = "Super"; +VertexShaderID = "Super"; + +class Stage1 { + texture = "z\ace\addons\repair\data\trailObjects_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage2 { + texture = "a3\data_f\destruct\destruct_rust_cdt.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {8,8,0}; + up[] = {-8,8,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; + +class Stage3 { + texture = "a3\data_f\destruct\destruct_rust_mca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {2,0,0}; + up[] = {0,2,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage5 { + texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnelGlass(2)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage7 { + useWorldEnvMap = "true"; + texture = "a3\data_f\env_land_ca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; diff --git a/addons/repair/data/trailObjects_tyre.rvmat b/addons/repair/data/trailObjects_tyre.rvmat new file mode 100644 index 0000000000..f92ea9113f --- /dev/null +++ b/addons/repair/data/trailObjects_tyre.rvmat @@ -0,0 +1,91 @@ +class StageTI { + texture = "a3\data_f\default_ti_ca.paa"; +}; + +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,0}; +specular[] = {0.01,0.01,0.01,0.01}; +specularPower = 500; +surfaceInfo = "a3\data_f\penetration\metal.bisurf"; +PixelShaderID = "Super"; +VertexShaderID = "Super"; + +class Stage1 { + texture = "z\ace\addons\repair\data\trailObjects_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage2 { + texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage5 { + texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnelGlass(2)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage7 { + useWorldEnvMap = "true"; + texture = "a3\data_f\env_land_ca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; diff --git a/addons/repair/data/trailObjects_tyre_damage.rvmat b/addons/repair/data/trailObjects_tyre_damage.rvmat new file mode 100644 index 0000000000..00bb746293 --- /dev/null +++ b/addons/repair/data/trailObjects_tyre_damage.rvmat @@ -0,0 +1,91 @@ +class StageTI { + texture = "a3\data_f\default_ti_ca.paa"; +}; + +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,0}; +specular[] = {0.01,0.01,0.01,0.01}; +specularPower = 500; +surfaceInfo = "a3\data_f\penetration\metal.bisurf"; +PixelShaderID = "Super"; +VertexShaderID = "Super"; + +class Stage1 { + texture = "z\ace\addons\repair\data\trailObjects_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage2 { + texture = "a3\data_f\destruct\destr_rubber_half_dt.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {5,0,0}; + up[] = {0,5,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; + +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {3,0,0}; + up[] = {0,3,0}; + dir[] = {0,0,0}; + pos[] = {0.1,0.23,0}; + }; +}; + +class Stage4 { + texture = "#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage5 { + texture = "#(argb,8,8,3)color(0,0.6,1,1,SMDI)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage6 { + texture = "#(ai,64,64,1)fresnelGlass(2)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; + +class Stage7 { + useWorldEnvMap = "true"; + texture = "a3\data_f\env_land_ca.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,0}; + }; +}; diff --git a/addons/repair/functions/fnc_modifyInteraction.sqf b/addons/repair/functions/fnc_modifyInteraction.sqf new file mode 100644 index 0000000000..cff0fbe6e8 --- /dev/null +++ b/addons/repair/functions/fnc_modifyInteraction.sqf @@ -0,0 +1,28 @@ +/* + * Author: PabstMirror + * Modifies the base interaction point for repair items to show it's current damage + * + * Arguments: + * 0: Target + * 1: Player + * 2: Args + * 3: Action Data + * + * Return Value: + * Nothing + * + * Example: + * [cursorObject, player, [], []] call ace_repair_fnc_modifyInteraction; + * + * Public: No + */ +#include "script_component.hpp" + +params ["_target", "_player", "_args", "_actionData"]; +TRACE_4("params",_target,_player,_args,_actionData); + +// Interaction dots numbered 0..8, white to red. +// Convert damage to number (rounding up), so that even slight damage can bee seen + +private _fileName = format [QPATHTOF(ui\damage_%1_ca.paa), ceil (linearConversion [0, 1, damage _target, 0, 8, true])]; +_actionData set [2, _fileName]; diff --git a/addons/repair/functions/fnc_setHitPointDamage.sqf b/addons/repair/functions/fnc_setHitPointDamage.sqf index 01a29eb377..090a0e868f 100644 --- a/addons/repair/functions/fnc_setHitPointDamage.sqf +++ b/addons/repair/functions/fnc_setHitPointDamage.sqf @@ -26,12 +26,6 @@ private ["_damageNew", "_damageOld", "_hitPointDamageRepaired", "_hitPointDamage // can't execute all commands if the vehicle isn't local. exit here. if !(local _vehicle) exitWith {ACE_LOGERROR_1("Vehicle Not Local %1", _vehicle);}; -//Check for bad typeName (changed from orignal v3.3 that took string) -if (_hitPointIndex isEqualType "") then { - ACE_DEPRECATED("repair-setHitPointDamage (hit point name ","3.5.0","hit index "); - _hitPointIndex = _allHitPoints find _hitPointIndex; -}; - // get all hitpoints and selections and damages (getAllHitPointsDamage _vehicle) params [["_allHitPoints", []], ["_allHitPointsSelections", []], ["_allHitPointDamages", []]]; diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index f82f3b065f..caff823745 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -1444,6 +1444,7 @@ Le moteur doit être éteins pour réparer Двигатель должен быть выключен для ремонта 修理のためにエンジンを停止させる必要があります。 + Silnik musi być wyłączony w celu naprawy - \ No newline at end of file + diff --git a/addons/repair/ui/damage_0_ca.paa b/addons/repair/ui/damage_0_ca.paa new file mode 100644 index 0000000000..f7c2348f29 Binary files /dev/null and b/addons/repair/ui/damage_0_ca.paa differ diff --git a/addons/repair/ui/damage_1_ca.paa b/addons/repair/ui/damage_1_ca.paa new file mode 100644 index 0000000000..b143d3cb43 Binary files /dev/null and b/addons/repair/ui/damage_1_ca.paa differ diff --git a/addons/repair/ui/damage_2_ca.paa b/addons/repair/ui/damage_2_ca.paa new file mode 100644 index 0000000000..062c4e5a6c Binary files /dev/null and b/addons/repair/ui/damage_2_ca.paa differ diff --git a/addons/repair/ui/damage_3_ca.paa b/addons/repair/ui/damage_3_ca.paa new file mode 100644 index 0000000000..88bc0b87ab Binary files /dev/null and b/addons/repair/ui/damage_3_ca.paa differ diff --git a/addons/repair/ui/damage_4_ca.paa b/addons/repair/ui/damage_4_ca.paa new file mode 100644 index 0000000000..24584de084 Binary files /dev/null and b/addons/repair/ui/damage_4_ca.paa differ diff --git a/addons/repair/ui/damage_5_ca.paa b/addons/repair/ui/damage_5_ca.paa new file mode 100644 index 0000000000..41a7e5b42d Binary files /dev/null and b/addons/repair/ui/damage_5_ca.paa differ diff --git a/addons/repair/ui/damage_6_ca.paa b/addons/repair/ui/damage_6_ca.paa new file mode 100644 index 0000000000..68dffc516f Binary files /dev/null and b/addons/repair/ui/damage_6_ca.paa differ diff --git a/addons/repair/ui/damage_7_ca.paa b/addons/repair/ui/damage_7_ca.paa new file mode 100644 index 0000000000..087359e324 Binary files /dev/null and b/addons/repair/ui/damage_7_ca.paa differ diff --git a/addons/repair/ui/damage_8_ca.paa b/addons/repair/ui/damage_8_ca.paa new file mode 100644 index 0000000000..1e78785d0c Binary files /dev/null and b/addons/repair/ui/damage_8_ca.paa differ diff --git a/addons/respawn/config.cpp b/addons/respawn/config.cpp index cd87087e20..79fbf69d74 100644 --- a/addons/respawn/config.cpp +++ b/addons/respawn/config.cpp @@ -19,8 +19,3 @@ class CfgPatches { #include "CfgVehicleClasses.hpp" #include "CfgVehicles.hpp" #include "ACE_Settings.hpp" - -class ACE_newEvents { - rallypointMoved = "ace_rallypointMoved"; - killedByFriendly = "ace_killedByFriendly"; -}; diff --git a/addons/sandbag/config.cpp b/addons/sandbag/config.cpp index 9c28b948ac..80e3f71808 100644 --- a/addons/sandbag/config.cpp +++ b/addons/sandbag/config.cpp @@ -17,7 +17,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; -}; diff --git a/addons/sitting/config.cpp b/addons/sitting/config.cpp index 785cb75aeb..a19334946c 100644 --- a/addons/sitting/config.cpp +++ b/addons/sitting/config.cpp @@ -18,7 +18,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgMoves.hpp" #include "CfgVehicles.hpp" - -class ACE_newEvents { - SetHandcuffed = QEGVAR(captives,setHandcuffed); -}; diff --git a/addons/smallarms/CfgWeapons.hpp b/addons/smallarms/CfgWeapons.hpp index 1cb7979d5b..d998ceb1da 100644 --- a/addons/smallarms/CfgWeapons.hpp +++ b/addons/smallarms/CfgWeapons.hpp @@ -4,7 +4,8 @@ class Mode_FullAuto; class CfgWeapons { class Rifle_Base_F; - class Rifle_Long_Base_F; + class Rifle_Short_Base_F: Rifle_Base_F {}; + class Rifle_Long_Base_F: Rifle_Base_F {}; /////////////////////////////////////////////////////////////////////////////// //////////// SMALL ARMS WEAPONS /////////////////////////////////////////////// @@ -91,7 +92,7 @@ class CfgWeapons { // SMG Vermin //////////////////////////////////////////////////// - class SMG_01_Base: Rifle_Base_F { + class SMG_01_Base: Rifle_Short_Base_F { // http://kriss-usa.com/pdf/operatormanual/ // 1200 rpm class Single: Mode_SemiAuto { @@ -131,7 +132,7 @@ class CfgWeapons { // SMG PDW2000 /////////////////////////////////////////////////// - class pdw2000_base_F: Rifle_Base_F { + class pdw2000_base_F: Rifle_Short_Base_F { modes[] = {"Single", "FullAuto"}; // No burst on this thing class Single: Mode_SemiAuto { diff --git a/addons/spectator/config.cpp b/addons/spectator/config.cpp index cadde0db9d..92736edb48 100644 --- a/addons/spectator/config.cpp +++ b/addons/spectator/config.cpp @@ -25,8 +25,3 @@ class CfgRespawnTemplates { onPlayerRespawn = QFUNC(respawnTemplate); }; }; - -class ACE_newEvents { - spectatorStaged = "ace_spectatorStaged"; - spectatorSet = "ace_spectatorSet"; -}; \ No newline at end of file diff --git a/addons/tacticalladder/config.cpp b/addons/tacticalladder/config.cpp index eddca58449..def7b0ce96 100644 --- a/addons/tacticalladder/config.cpp +++ b/addons/tacticalladder/config.cpp @@ -16,7 +16,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; -}; diff --git a/addons/tagging/config.cpp b/addons/tagging/config.cpp index e066bcafe5..6ec32da0a6 100644 --- a/addons/tagging/config.cpp +++ b/addons/tagging/config.cpp @@ -19,8 +19,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - -class ACE_newEvents { - createTag = QGVAR(createTag); - tagCreated = "ace_tagCreated"; -}; diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index b25c382e7b..bbcaead48d 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -5,42 +5,49 @@ Tagging Маркировка タグ付け + Tagowanie Configure how the tagging system will operate by default. Настройка работы системы спрей-маркеров по-умолчанию. 標準で開くタグ付けシステムの設定を行います。 + Skonfiguruj zachowanie systemu tagowania. Quick Tag Быстрый маркер クイック タグ + Szybkie tagowanie Action performed on main tag interaction point. Действие, выполняемое при выборе главного пункта меню маркировки. インタラクション ポインにむけてタグ付けをします。 + Akcja wykonywana na głównym punkcie interakcji tagu. Last Used Повторить последний 最後の使用 + Ostatnio użyte Random X Случайный Х 無作為な X印 + Losowy X Random Случайный 無作為 + Losowy Tag Markieren Marcar - Oznakuj + Taguj Tag Marca Označit @@ -157,4 +164,4 @@ スプレー缶は壁にタグ付できます。 - \ No newline at end of file + diff --git a/addons/trenches/config.cpp b/addons/trenches/config.cpp index 2b4f3c9051..3f76f012ed 100644 --- a/addons/trenches/config.cpp +++ b/addons/trenches/config.cpp @@ -17,7 +17,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; -}; diff --git a/addons/tripod/config.cpp b/addons/tripod/config.cpp index 8251e0c469..8d068d2d9a 100644 --- a/addons/tripod/config.cpp +++ b/addons/tripod/config.cpp @@ -17,7 +17,3 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - -class ACE_newEvents { - interactMenuOpened = "ace_interactMenuOpened"; -}; diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 42cfe66fff..f039bfd7e7 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -8,6 +8,7 @@ Interface utilisateur Интерфейс ユーザ インタフェイス + Interfejs użytkownika User Interface @@ -16,6 +17,7 @@ Interface utilisateur Пользовательский интерфейс ユーザ インタフェイス + Interfejs użytkownika This module allows toggling visible user interface parts. @@ -23,6 +25,7 @@ Ce module permet le basculement de parties visibles de l'interface utlisateur Этот модуль позволяет переключать видимость элементов пользовательского интерфейса. モジュールではユーザ インタフェイスの一部をトグル表示できます。 + Moduł ten pozwala zmienić stan widoczności poszczególnych elementów UI. Allow Selective UI @@ -31,6 +34,7 @@ Permettre l'IU selective Включить настраиваемый интерфейс 選択できるユーザ インタフェイスを有効化します + Zezwól na selektywne UI Allow client to modify their UI. @@ -39,6 +43,7 @@ Permet aux clients de modifier leur IU Позволить клиентам изменять их пользовательский интерфейс. クライアントがユーザ インタフェイスを編集できるようにします。 + Zezwól klientowi na modyfikację UI. Soldier/Vehicle/Weapon Information @@ -47,6 +52,7 @@ Soldat/Véhicule/Arme/Informations Информация о Солдате/Технике/Оружии 兵士/車両/武器の情報 + Informacje o żołnierzu/pojeździe/broni Vehicle Radar @@ -55,6 +61,7 @@ Radar de véhicule Радар в технике 車両のレーダ + Radar w pojeździe Vehicle Compass @@ -63,6 +70,7 @@ Compas de véhicule Компас в технике 車両のレーダ + Kompas w pojeździe Command Menu @@ -71,6 +79,7 @@ Menu de commandement Командное меню 指揮メニュー + Menu dowodzenia Group Bar @@ -79,6 +88,7 @@ Barre de groupe Панель командира 指揮メニュー + Pasek grupy Weapon Name @@ -87,6 +97,7 @@ Nom de l''arme Название оружия 武器名 + Nazwa broni Weapon Name Background @@ -95,6 +106,7 @@ Arrière-plan du nom de l'arme Фон названия оружия 武器名の背景表示 + Tło nazwy broni Firing Mode @@ -103,6 +115,7 @@ Mode de tir Режим стрельбы 射撃モード + Tryb ognia Ammo Type @@ -111,6 +124,7 @@ Type de munitions Тип боеприпасов 弾種 + Typ amunicji Ammo Count @@ -119,6 +133,7 @@ Nombre de munitions Количество боеприпасов 弾薬数 + Ilość amunicji Magazine Count @@ -127,6 +142,7 @@ Nombre de chargeurs Количество магазинов 弾倉装填数 + Ilość magazynków Throwable Type @@ -135,6 +151,7 @@ Type d'objets de lancer Тип гранаты 投げる種類 + Typ granatu Throwable Count @@ -143,6 +160,7 @@ Nombre d'objets de lancer Количество гранат 投げられる数 + Ilość granatów Zeroing @@ -151,6 +169,7 @@ Mise à zéro Дальность стрельбы ゼロイン + Wyzerowanie broni Weapon Lower Info Background @@ -158,6 +177,7 @@ Arrière-plan des informations inférieures de l'arme Фон ниформации об оружии снизу 武器名の背景表示 (下側) + Tło dolnej części informacji o broni Stance @@ -166,6 +186,7 @@ Posture Стойка 姿勢 + Postura Stamina Bar @@ -174,6 +195,7 @@ Barre d'endurance Полоса выносливости 体力バー + Pasek staminy Gunner Weapon Name @@ -181,6 +203,7 @@ Nom de l'arme du tireur Название орудия наводчика 射手用の武器名 + Nazwa broni strzelca Gunner Weapon Name Background @@ -188,6 +211,7 @@ Arrière-plan du nom de l'arme (tireur) Фон названия орудия наводчика 射手用の武器名の背景表示 + Tło nazwy broni strzelca Gunner Firing Mode @@ -195,6 +219,7 @@ Mode de tir (tireur) Режим стрельбы наводчика 射手用の発射モード + Tryb ognia strzelca Gunner Ammo Type @@ -202,6 +227,7 @@ Type de munitions (tireur) Тип боеприпасов наводчика 射手用の弾種 + Typ amunicji strzelca Gunner Ammo Count @@ -209,6 +235,7 @@ Nombre de munitions (tireur) Количество боеприпасов наводчика 射手用の弾数 + Ilość amunicji strzelca Gunner Magazine Count @@ -216,6 +243,7 @@ Nombre de chargeurs (tireur) Количество магазинов наводчика 射手用の弾倉数 + Ilość magazynków strzelca Gunner Launchable Type @@ -223,6 +251,7 @@ Type d'objets jetable ( tireur) Тип пусковой установки наводчика 射手用のランチャーの種類 + Typ rakiet strzelca Gunner Launchable Count @@ -230,6 +259,7 @@ Nombre d'objets jetable (tireur) Количество снарядов пусковой установки наводчика 射手用のランチャー弾薬数 + Ilość rakiet strzelca Gunner Zeroing @@ -237,6 +267,7 @@ Mise à zéro ( tireur) Дальность стрельбы наводчика 射手用ゼロイン + Wyzerowanie broni strzelca Gunner Weapon Lower Info Background @@ -244,6 +275,7 @@ Arrière-plan des informations inférieures (tireur) Фон ниформации об орудии наводчика снизу 射手用の武器名の背景表示 (下側) + Tło dolnej części informacji o broni strzelca Vehicle Name @@ -252,6 +284,7 @@ Nom du véhicule Название техники 車両名 + Nazwa pojazdu Vehicle Name Background @@ -260,6 +293,7 @@ Arrière-plan du nom du véhicule Фон названия техники 車両名の背景 + Tło nazwy pojazdu Vehicle Fuel Bar @@ -268,6 +302,7 @@ Barre d'éssence du véhicule Полоса топлива 車両の給油計 + Pasek paliwa Vehicle Speed @@ -276,6 +311,7 @@ Vitesse du véhicule Скорость техники 車両の速度計 + Prędkościomierz Vehicle Altitude @@ -284,6 +320,7 @@ Altitude du véhicule Высота полета 車両の高度計 + Wysokościomierz radarowy Vehicle Damage @@ -292,6 +329,7 @@ Dégats du véhicule Повреждение техники 車両の損傷表示 + Uszkodzenia pojazdu Vehicle Info Background @@ -300,6 +338,7 @@ Arrière-plan des informations du véhicule Фон информации о технике 車両状態の背景 + Tło informacji o pojeździe Requires Soldier/Vehicle/Weapon Information. @@ -308,6 +347,7 @@ Requiert les informations de soldat/Vehicule/Arme. Требуется Информация о Солдате/Технике/Оружии. 兵士/車両/武器の情報を必要とします。 + Wymaga informacji o żołnierzu/pojeździe/broni. Modifying User Interface is disabled. @@ -316,6 +356,7 @@ Modifications de l'interface utilisateur désactivé. Изменение пользовательского интерфейса запрещено. 変更されたユーザ インタフェイスを無効化します。 + Modyfikacja interfejsu użytkownika jest wyłączona. Cannot modify a forced User Interface element. @@ -323,6 +364,7 @@ Impossible de modifier un élément de l'interface utilisateur forcé Невозможно изменить зафиксированный элемент пользовательского интерфейса. ユーザー インタフェイス要素は変更できません。 + Nie można modyfikować wymuszonego elementu interfejsu użytkownika. - \ No newline at end of file + diff --git a/addons/vector/config.cpp b/addons/vector/config.cpp index 2f2302d9af..cf6f235a5e 100644 --- a/addons/vector/config.cpp +++ b/addons/vector/config.cpp @@ -20,7 +20,3 @@ class CfgPatches { #include "CfgWeapons.hpp" #include "RscInGameUI.hpp" - -class ACE_newEvents { - RangerfinderData = QGVAR(rangefinderData); -}; diff --git a/addons/vehiclelock/config.cpp b/addons/vehiclelock/config.cpp index 52299ca512..454fb4952a 100644 --- a/addons/vehiclelock/config.cpp +++ b/addons/vehiclelock/config.cpp @@ -20,8 +20,3 @@ class CfgPatches { #include "CfgMagazines.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" - -class ACE_newEvents { - VehicleLock_SetVehicleLock = QGVAR(setVehicleLock); - VehicleLock_SetupCustomKey = QGVAR(setupCustomKey); -}; diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf index 08a6f38568..2b222c2d8b 100644 --- a/addons/weather/functions/fnc_getMapData.sqf +++ b/addons/weather/functions/fnc_getMapData.sqf @@ -15,7 +15,11 @@ */ #include "script_component.hpp" -// Assume default wind values +private _worldName = toLower worldName; +TRACE_1("getting map data",_worldName); + +// Set default values + // Source: https://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece GVAR(WindSpeedMax) = [[8.8, 5.5], [8.8, 5], [8.6, 4.8], [7.6, 3.4], [7.0, 3.0], [7.1, 3.0], [7.5, 3.1], [8.0, 3.2], [7.6, 3.5], [7.8, 4.6], [7.9, 5.0], [8.2, 5.5]]; GVAR(WindSpeedMean) = [4.8, 4.9, 4.6, 4.1, 3.5, 3.5, 4.3, 4.4, 4.1, 4.5, 4.5, 5.0]; @@ -35,23 +39,42 @@ GVAR(WindDirectionProbabilities) = [ [0.06, 0.37, 0.05, 0.03, 0.18, 0.04, 0.02, 0.02] // December ]; -// Check if the wind data is defined in the map config -if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean")) then { - GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMin"); - GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMean"); - GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindSpeedMax"); - GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_WindDirectionProbabilities"); -}; +GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2]; +GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; +GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; -// Check if the weather data is defined in the map config -if (isArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay")) exitWith { - GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempDay"); - GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_TempNight"); - GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> worldName >> "ACE_Humidity"); +GVAR(currentTemperature) = 20; +GVAR(currentHumidity) = 0.5; + +// Get all non inherited arrays to filter maps that inherit from Stratis/Altis/Tanoa +private _nonInheritedArrays = configProperties [configFile >> "CfgWorlds" >> _worldName, "isArray _x", false]; +// And check if any custom non-inherited weather is defined through config and use that if so +if ((configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay") in _nonInheritedArrays) exitWith { + if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay")) then { + GVAR(TempDay) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempDay"); + }; + if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempNight")) then { + GVAR(TempNight) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_TempNight"); + }; + if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_Humidity")) then { + GVAR(Humidity) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_Humidity"); + }; + if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMin")) then { + GVAR(WindSpeedMin) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMin"); + }; + if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMean")) then { + GVAR(WindSpeedMean) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMean"); + }; + if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMax")) then { + GVAR(WindSpeedMax) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindSpeedMax"); + }; + if (isArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindDirectionProbabilities")) then { + GVAR(WindDirectionProbabilities) = getArray (configFile >> "CfgWorlds" >> _worldName >> "ACE_WindDirectionProbabilities"); + }; }; // Check if the map is among the most popular -if (toLower worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) then { +if (_worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) then { // Source: http://www.iten-online.ch/klima/europa/tschechien/prag.htm GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2]; GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; @@ -78,7 +101,7 @@ if (toLower worldName in ["chernarus", "bootcamp_acr", "woodland_acr", "utes"]) ]; }; -if (toLower worldName in ["takistan", "zargabad", "mountains_acr", "shapur_baf", "provinggrounds_pmc"]) exitWith { +if (_worldName in ["takistan", "zargabad", "mountains_acr", "shapur_baf", "provinggrounds_pmc"]) exitWith { // Source: http://www.iten-online.ch/klima/asien/afghanistan/kabul.htm GVAR(TempDay) = [4.5, 5.5, 12.5, 19.2, 24.4, 30.2, 32.1, 32, 28.5, 22.4, 15, 8.3]; GVAR(TempNight) = [-7.1, -5.7, 0.7, 6, 8.8, 12.4, 15.3, 14.3, 9.4, 3.9, -1.2, -4.7]; @@ -105,7 +128,7 @@ if (toLower worldName in ["takistan", "zargabad", "mountains_acr", "shapur_baf", ]; }; -if (toLower worldName in ["fallujah"]) exitWith { +if (_worldName in ["fallujah"]) exitWith { // Source: http://www.iten-online.ch/klima/asien/irak/bagdad.htm GVAR(TempDay) = [16, 19, 23, 29, 36, 41, 43, 43, 40, 33, 24, 17]; GVAR(TempNight) = [4, 6, 10, 15, 20, 23, 25, 25, 21, 16, 10, 5]; @@ -113,8 +136,8 @@ if (toLower worldName in ["fallujah"]) exitWith { GVAR(Humidity) = [69, 60, 55, 50, 36, 23, 21, 22, 29, 38, 58, 68]; }; -if (toLower worldName in ["fata", "Abbottabad"]) exitWith { - // Source: http://www.iten-online.ch/klima/asien/pakistan/zhob.htm +if (_worldName in ["fata", "abbottabad"]) exitWith { + // Source: http://www.iten-online.ch/klima/asien/pakistan/zhob.htm GVAR(TempDay) = [12.4, 15.8, 20.8, 26.9, 32.8, 37, 36.8, 35.9, 33.8, 28.2, 22.2, 16.2]; GVAR(TempNight) = [-0.6, 2.4, 7.4, 13.1, 18.2, 22.8, 23.8, 22.9, 19.2, 12, 5.6, 1.2]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Zhob,Pakistan @@ -140,24 +163,24 @@ if (toLower worldName in ["fata", "Abbottabad"]) exitWith { ]; }; -if (worldName in ["sfp_wamako"]) exitWith { - // Source: http://www.iten-online.ch/klima/afrika/niger/tahoua.htm +if (_worldName in ["sfp_wamako"]) exitWith { + // Source: http://www.iten-online.ch/klima/afrika/niger/tahoua.htm GVAR(TempDay) = [33.4, 35, 38.4, 41.5, 41.4, 40, 35.6, 32.9, 35.8, 38.2, 36.4, 33.1]; GVAR(TempNight) = [14.9, 16.3, 20.4, 23.7, 25.8, 24.8, 23.1, 22, 22.6, 21.6, 18.6, 15.3]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Tahoua,Niger GVAR(Humidity) = [68, 60, 57, 50, 32, 22, 20, 21, 25, 38, 58, 69]; }; -if (worldName in ["sfp_sturko"]) exitWith { - // Source: http://www.iten-online.ch/klima/afrika/niger/tahoua.htm +if (_worldName in ["sfp_sturko"]) exitWith { + // Source: http://www.iten-online.ch/klima/afrika/niger/tahoua.htm GVAR(TempDay) = [2.2, 2.4, 5.1, 10.2, 16.1, 20.1, 21.1, 20.9, 17.2, 12.7, 7.4, 3.9]; GVAR(TempNight) = [-2, -2.3, -0.7, 2.6, 7.1, 11.4, 13.1, 12.7, 10, 6.9, 3.1, -0.1]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,karlskrona,Sweden GVAR(Humidity) = [86, 85, 80, 72, 68, 69, 74, 77, 79, 81, 86, 88]; }; -if (worldName in ["Bornholm"]) exitWith { - // Source: http://www.iten-online.ch/klima/afrika/niger/tahoua.htm +if (_worldName in ["bornholm"]) exitWith { + // Source: http://www.iten-online.ch/klima/afrika/niger/tahoua.htm GVAR(TempDay) = [1.9, 1.7, 3.8, 8.1, 14, 18.1, 19.6, 19.8, 16.2, 11.9, 7.3, 3.9]; GVAR(TempNight) = [-1.6, -2.1, -0.7, 1.7, 6.2, 10.7, 13, 13.1, 10.6, 7.2, 3.5, 0.1]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,allinge,Denmark @@ -182,15 +205,15 @@ if (worldName in ["Bornholm"]) exitWith { [0.08, 0.05, 0.06, 0.04, 0.10, 0.14, 0.19, 0.07] // December ]; }; -if (worldName in ["Imrali"]) exitWith { - // Source: http://www.iten-online.ch/klima/europa/tuerkei/bursa.htm +if (_worldName in ["imrali"]) exitWith { + // Source: http://www.iten-online.ch/klima/europa/tuerkei/bursa.htm GVAR(TempDay) = [9.3, 10.7, 13.6, 18.8, 23.5, 28.2, 30.3, 30.2, 27, 21.4, 16.5, 11.8]; GVAR(TempNight) = [1.4, 2.4, 3.7, 7.1, 10.9, 14.3, 16.5, 16.3, 13, 9.5, 6, 3.8]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Bursa,Turkey GVAR(Humidity) = [78, 75, 70, 70, 71, 61, 58, 59, 63, 69, 77, 76]; }; -if (worldName in ["Kunduz"]) exitWith { - // Source: http://www.iten-online.ch/klima/asien/afghanistan/kunduz.htm +if (_worldName in ["kunduz"]) exitWith { + // Source: http://www.iten-online.ch/klima/asien/afghanistan/kunduz.htm GVAR(TempDay) = [6.3, 9.5, 15.8, 23, 29.8, 37.3, 39, 36.9, 31.8, 24.5, 16, 9.7]; GVAR(TempNight) = [-2.4, 0, 5.7, 11.6, 15.7, 20.9, 21.5, 21.5, 16.3, 10.6, 4.1, 0]; // Source: http://www.weather-and-climate.com/average-monthly-Humidity-perc,Kabul,Afghanistan @@ -215,11 +238,3 @@ if (worldName in ["Kunduz"]) exitWith { [0.04, 0.02, 0.05, 0.14, 0.19, 0.07, 0.10, 0.07] // December ]; }; - -// Assume default values -GVAR(TempDay) = [1, 3, 9, 14, 19, 23, 25, 24, 21, 13, 7, 2]; -GVAR(TempNight) = [-4, -3, 0, 4, 9, 12, 14, 14, 10, 6, 2, -2]; -GVAR(Humidity) = [82, 80, 78, 70, 71, 72, 70, 73, 78, 80, 83, 82]; - -GVAR(currentTemperature) = 20; -GVAR(currentHumidity) = 0.5; diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp index 4c9a831fd0..ac7ac9832a 100644 --- a/addons/zeus/config.cpp +++ b/addons/zeus/config.cpp @@ -53,10 +53,3 @@ class ACE_Curator { #include "CfgVehicles.hpp" #include "ACE_Settings.hpp" #include "ui\RscAttributes.hpp" - -class ACE_newEvents { - zeusUnitAssigned = QGVAR(zeusUnitAssigned); - SetSurrendered = QEGVAR(captives,setSurrendered); - SetHandcuffed = QEGVAR(captives,setHandcuffed); - AddCargoByClass = "ace_addCargo"; -}; diff --git a/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf b/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf index decdb21999..2a43f26ed1 100644 --- a/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf +++ b/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf @@ -41,3 +41,5 @@ if (_group) then { [_x, _attached] call BIS_fnc_moveToRespawnPosition; }; } forEach _player; + +deleteVehicle _logic; diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 38fa6b2fdd..6a6f75a450 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -202,6 +202,7 @@ Защитить зону Bránit oblast 防衛範囲 + Osłaniaj obszar Global AI Skill @@ -209,6 +210,7 @@ Мастерство ботов Globální zkušenosti AI 総合的な AI スキル + Globalne umiejętności AI General Skill @@ -216,6 +218,7 @@ Общий уровень Primární zkušenosti 総合スキル + Ogólne umiejętności Changes: general, commanding, courage @@ -223,6 +226,7 @@ Изменяет: general, commanding, courage Upravuje: general, commanding, courage 変更:general, commanding, courage + Zmienia: ogólne, dowodzenie, odwaga Accuracy @@ -230,6 +234,7 @@ Меткость Přesnost 精度 + Precyzja Changes: aimingAccuracy @@ -237,6 +242,7 @@ Изменяет: aimingAccuracy Upravuje: aimingAccuracy 変更:aimingAccuracy + Zmienia: precyzję celowania Weapon Handling @@ -244,6 +250,7 @@ Владение оружием Zacházení se zbraní 武器の扱い + Obsługa broni Changes: aimingShake, aimingSpeed, reloadSpeed @@ -251,6 +258,7 @@ Изменяет: aimingShake, aimingSpeed, reloadSpeed Upravuje: aimingShake, aimingSpeed, reloadSpeed 変更:aimingShake, aimingSpeed, reloadSpeed + Zmienia: drżenie broni, szybkość celowania, szybkość przeładowania Spotting @@ -258,6 +266,7 @@ Обнаружение Vnímavost 索敵 + Rozpoznanie Changes: spotDistance, spotTime @@ -265,6 +274,7 @@ Изменяет: spotDistance, spotTime Upravuje: spotDistance, spotTime 変更:spotDistance, spotTime + Zmienia: zasięg rozpoznawania, czas rozpoznawania Seek Cover @@ -272,6 +282,7 @@ Поиск укрытий Vyhledávat krytí 遮蔽 + Szukaj osłon Should AI seek cover @@ -279,6 +290,7 @@ Должны ли боты искать укрытия AI se bude snažit vyhledávat krytí AI は遮蔽を取るようになります + Czy AI powinno szukać osłon Auto Combat @@ -286,6 +298,7 @@ Авто режим боя Automatický režim boje 自動戦闘 + Auto walka Should AI automatically switch to combat mode @@ -293,6 +306,7 @@ Должны ли боты автоматически переходить в режим боя AI se automaticky přepne do bojového režimu AI は自動的に戦闘状態へ切り替えます + Czy AI powinno automatycznie przechodzić w tryb walki Group Side @@ -300,6 +314,7 @@ Сторона группы Strana skupiny グループ側 + Strona grupy Patrol Area @@ -307,6 +322,7 @@ Патрулировать зону Oblast hlídkování 哨戒範囲 + Patrol obszaru Toggle Surrender @@ -327,6 +343,7 @@ Телепортиваровать игроков Teleportovat hráče プレイヤーを移動 + Teleportuj graczy Player @@ -334,6 +351,7 @@ Игрока Hráč プレイヤー + Gracz Teleport selected player to module position @@ -341,6 +359,7 @@ Телепортирует выбранного игрока к местоположению модуля Teleportuje vybraného hráče na pozici modulu 選択したプレイヤーをプレイヤーをモジュール位置へ移動します + Teleportuje wybranego gracza na pozycję modułu Teleport Group @@ -348,6 +367,7 @@ Телепортировать Группу Teleportovat skupinu グループを移動 + Teleport grupy Teleports all units in group @@ -355,6 +375,7 @@ Телепортирует всех юнитов в группе Teleportuje všechny jednotky ve skupině グループ内の全ユニットを移動させます + Teleportuje wszystkie jednostki w grupie Toggle Unconscious @@ -375,6 +396,7 @@ Обыскать зону Prohledat oblast 捜索範囲 + Przeszukaj teren Search Nearby Building @@ -382,6 +404,7 @@ Обыскать ближайшие здания Prohledat nejbližší budovu 近くの建物を創作します + Przeszukaj najbliższy budynek Assign Medic @@ -536,6 +559,7 @@ Юнит должен принадлежать соответствующей стороне Jednotka musí patřit k příslušné straně ユニットを適切な陣営にします + Jednostka musi należeć do odpowiedniej strony Nearest building is too far away @@ -543,6 +567,7 @@ Ближайшие здания слишком далеко Nejbližší budova je příliš daleko 近くに建物がありません。 + Najbliższy budynek jest zbyt daleko Place on a unit @@ -600,6 +625,7 @@ Груз: Náklad: カーゴ: + Ładunek: Task Position @@ -607,24 +633,28 @@ Местоположение задания Pozice úkolu タスクの位置 + Pozycja zadania Select a position to perform the task at Sélectionne une position où accomplir la tâche Выбрать местоположение для выполнения задания 次の選択位置をタスクとして実行 + Wybierz pozycję na której wykonać zadanie Task Radius Rayon de la tâche Радиус задания タスク範囲 + Obszar zadania Radius to perform the task within Rayon dans lequel la tâche prend place Радиус выполнения задания 次の範囲をタスクとして実行 + Obszar na którym zadanie powinno zostać wykonane Invalid radius entered @@ -632,6 +662,7 @@ Введен неправильный радиус Vložen neplatný parametr 無効な半径が入力されました + Wpisano nieprawidłowy promień - \ No newline at end of file + diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 35a5f744ab..0961f3f768 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -75,7 +75,7 @@ {% endif %} {% if include.component == "dogtags" %} -`ace_common` +`ace_interaction` {% endif %} {% if include.component == "dragging" %} @@ -214,6 +214,10 @@ `ace_medical` {% endif %} +{% if include.component == "medical_blood" %} +`ace_main` +{% endif %} + {% if include.component == "medical_menu" %} `ace_medical` {% endif %} @@ -426,3 +430,63 @@ `ace_common` {% endif %} +{% if include.component == "compat_adr_97" %} +`A3_Weapons_F_Mod` +{% endif %} + +{% if include.component == "compat_r3f" %} +`r3f_armes_c`, `r3f_armes`, `r3f_acc` +{% endif %} + +{% if include.component == "compat_rh_acc" %} +`RH_acc` +{% endif %} + +{% if include.component == "compat_rh_de" %} +`RH_de_cfg` +{% endif %} + +{% if include.component == "compat_rh_m4" %} +`RH_m4_cfg` +{% endif %} + +{% if include.component == "compat_rh_pdw" %} +`RH_PDW` +{% endif %} + +{% if include.component == "compat_rhs_afrf3" %} +`ace_rearm`, `ace_refuel`, `ace_repair`, `rhs_c_weapons`, `rhs_c_troops`, `rhs_c_bmd`, `rhs_c_bmp`, `rhs_c_bmp3`, `rhs_c_a2port_armor`, `rhs_c_btr`, `rhs_c_sprut`, `rhs_c_t72`, `rhs_c_tanks`, `rhs_c_a2port_air`, `rhs_c_a2port_car`, `rhs_c_cars`, `rhs_c_trucks`, `rhs_c_2s3`, `rhs_c_rva` +{% endif %} + +{% if include.component == "compat_rhs_usf3" %} +`ace_javelin`, `ace_rearm`, `ace_refuel`, `ace_repair`, `rhsusf_c_weapons`, `rhsusf_c_troops`, `rhsusf_c_m1a1`, `rhsusf_c_m1a2`, `RHS_US_A2_AirImport`, `rhsusf_c_m109`, `rhsusf_c_HEMTT_A4`, `rhsusf_c_hmmwv`, `rhsusf_c_rg33`, `rhsusf_c_fmtv`, `rhsusf_c_m113`, `RHS_US_A2Port_Armor` +{% endif %} + +{% if include.component == "compat_rksl_pm_ii" %} +`RKSL_PMII` +{% endif %} + +{% if include.component == "compat_sma3_iansky" %} +`iansky_opt` +{% endif %} + +{% if include.component == "noactionmenu" %} +`ace_common` +{% endif %} + +{% if include.component == "nocrosshair" %} +`ace_common` +{% endif %} + +{% if include.component == "particles" %} +`ace_common` +{% endif %} + +{% if include.component == "server" %} +`ace_common` +{% endif %} + +{% if include.component == "tracers" %} +`ace_ballistics` +{% endif %} + diff --git a/docs/_posts/2016-09-17-ace3-version370.md b/docs/_posts/2016-09-17-ace3-version370.md new file mode 100644 index 0000000000..44ce8a956c --- /dev/null +++ b/docs/_posts/2016-09-17-ace3-version370.md @@ -0,0 +1,76 @@ +--- +title: ACEREP #00006 +description: Status report on ACE3 version 3.7.0 +parent: posts +image: /img/news/160912_grenade.jpg +author: glowbal +layout: post +--- + +It is [here](https://github.com/acemod/ace3/releases/v3.7.0){:target="_blank"}! The new ACE 3.7.0 update. We've been hard at work adding in a couple of exciting new features. As is per usual for us, we have also worked on a large collection of bug fixes, optimizations and general improvements to existing functionality. + + + +At this stage, we'd like to take the opportunity to briefly look back to the past year. Almost a year ago, in December 2015, we released ACE 3.3.2. At that time we had over 31.000 Steam subscribers and over 23.000 downloads on Github for ACE3. + +Since then, we've introduced a large number of new functionality; trenches, fast roping, mine detectors and our initial release for ACEX are just a few. We have worked on stability and polishing existing functionality, and our team has grown with new members ([@jonpas](https://github.com/jonpas){:target="_blank"}, [@BaerMitUmlaut](https://github.com/BaerMitUmlaut){:target="_blank"}). + +Now, we are close to 150.000 subscribers on Steam, and nearly 193.000 downloads combined on Github. That's a huge growth. Thanks to all our supporters! + +## What's new + +It is time to tell you about some of the exciting new things that come with the new update. + +### Advanced Throwing + +Earlier this year, [@dslyecxi](https://twitter.com/Dslyecxi){:target="_blank"} posted a YouTube video showing his implementation of a grenade throwing system. He has kindly donated his proof of concept to ACE3. Since then we've been hard at work integrating it into ACE3. And the result pays off! + + + + + Here is a video showing it in action: + +
+ +### Chemlight improvements + +One of the things we love about Arma 3 are the chemlights. With the 3.7.0 release, [@voiperr](https://github.com/voiperr){:target="_blank"}, one of our valued contributors has submitted his Chemlight enchancements. Here are some comparison screenshots: + +- [Vanilla Normal](http://i.imgur.com/zn61eiy.jpg){:target="_blank"} vs [ACE3 Normal](http://i.imgur.com/uOkzGwB.jpg){:target="_blank"} +- [Vanilla Night Vision](http://i.imgur.com/aR0p59M.jpg){:target="_blank"} vs [ACE3 Night Vision](http://i.imgur.com/QqM7iDI.jpg){:target="_blank"} + +### Cook off + +Back in the ACE2 days, this was one of the big features. And now it's back. Our own [@commy2](https://github.com/commy2){:target="_blank"} has implemented ammo cook off again. Here is a video: + + + + +### Medical AI + +Since the CBA release 2.5.1 the state machine implementation from [@BaerMitUmlaut](https://github.com/BaerMitUmlaut){:target="_blank"} has been available. Within ACE, we are using this to add our first implementation of medical AI. This means that AI medics will be able to treat themselves and members from their squad. + +For now, this is only enabled for Basic Medical. We are looking to expand this to Advanced Medical as well. + +## Future + +We are still at work on improving medical. Unfortunally we did not manage to finish our overhaul for the 3.7.0 release, but we hope to have the first stages completed and included before the end of the year. + +We are also working on new features such as Blue Force Tracking, Burning and more ports from ACE2, AGM and CSE. We are also open to any features submitted for ACE3. If you have exciting functionality that you feel could belong in ACE3, we are accepting pull requests. + +## The End Things + +The full changelog for ACE3 v3.7.0 can be found here: [https://github.com/acemod/ACE3/releases/v3.7.0](https://github.com/acemod/ACE3/releases/v3.7.0){:target="_blank"} + +We are still in need for translations for some languages within the ACE3 project. Please have a look at [this github issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is appreciated. + +
+
+ Slack Monochrome black logo +
+
+ +And most finally, we would like to invite you to our ACE3 public Slack chat. Here you can chat with fellow ACE3 users and developers, ask questions and receive help. +Registration is open for everyone: [http://slackin.ace3mod.com](http://slackin.ace3mod.com){:target="_blank"}. + +Make sure to [follow us on twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}. diff --git a/docs/img/news/160912_grenade.jpg b/docs/img/news/160912_grenade.jpg new file mode 100644 index 0000000000..6b9a3ad00c Binary files /dev/null and b/docs/img/news/160912_grenade.jpg differ diff --git a/docs/img/news/160912_slack_monochrome_black-950x442.png b/docs/img/news/160912_slack_monochrome_black-950x442.png new file mode 100644 index 0000000000..09446f582e Binary files /dev/null and b/docs/img/news/160912_slack_monochrome_black-950x442.png differ diff --git a/docs/img/wiki/feature/ace_blood_screen.jpg b/docs/img/wiki/feature/ace_blood_screen.jpg new file mode 100644 index 0000000000..89a07bdfb6 Binary files /dev/null and b/docs/img/wiki/feature/ace_blood_screen.jpg differ diff --git a/docs/wiki/class-names.md b/docs/wiki/class-names.md index ebd8236f1b..a3c270ef5b 100644 --- a/docs/wiki/class-names.md +++ b/docs/wiki/class-names.md @@ -244,7 +244,7 @@ ACE_1Rnd_82mm_Mo_Illum | 82mm Illumination Round | Magazine | ACE_1Rnd_82mm_Mo_HE_Guided | 82mm Guided HE Round | Magazine | ACE_1Rnd_82mm_Mo_HE_LaserGuided | 82mm Laser Guided HE Round | Magazine | -### M2XA +### MX2A `Added in 3.1.1` Class Name | In-Game Name | Type | diff --git a/docs/wiki/development/documentation-guidelines-and-tips.md b/docs/wiki/development/documentation-guidelines-and-tips.md index aeba472518..ba2d14df13 100644 --- a/docs/wiki/development/documentation-guidelines-and-tips.md +++ b/docs/wiki/development/documentation-guidelines-and-tips.md @@ -66,7 +66,7 @@ Short description of sub-feature 2. ## 3. Dependencies -{% raw %}{% include dependencies_list.md component="ace_something" %}{% endraw %} +{% raw %}{% include dependencies_list.md component="blank" %}{% endraw %} ## 4. Guides diff --git a/docs/wiki/feature/advanced-fatigue.md b/docs/wiki/feature/advanced-fatigue.md new file mode 100644 index 0000000000..acf7df8276 --- /dev/null +++ b/docs/wiki/feature/advanced-fatigue.md @@ -0,0 +1,99 @@ +--- +layout: wiki +title: Advanced Fatigue +description: Human fatigue simulation based on scientific formulas. +group: feature +category: realism +parent: wiki +mod: ace +version: + major: 3 + minor: 7 + patch: 0 +--- + +## 1. Overview + +Advanced Fatigue is a human fatigue simulation based on the information and formulas provided by Bohemia Interactive Simulations, which are [publicly available online](https://manuals.bisimulations.com/vbs3/3-0/downloads/VBS_AdvFatigueSys.pdf) and apparently used in VBS3. However, just to make this clear again, none of VBS3 code was taken over, this is an independent implementation. + + +### 1.1 Basics + +Advanced Fatigue is based on scientific formulas that try to predict human performance, which enables ACE to provide a fairly accurate fatigue simulation with understandable in-game results in terms of performance. This means that any movement will be taken into account and may have an impact on both your short term and your long term fatigue: running around all mission will influence how long and how far you can run later, but if you're more conservative with your energy, you might benefit from that when you actually need more power. + + +### 1.2 Fatigue Influences + +Your stamina will be drained more or less depending on various factors, some of them more severe than others. Here's a short list of all currently implemented fatigue influences: + +- **Character stance:** Moving upright, crouched or prone. +- **Weapon holding:** Lowering your weapon, raising it or moving with the gun high ready +- **Movement speed:** Running, jogging or walking +- **Gear weight** +- **Terrain steepness:** Walking on slopes, up or down hill +- **Injuries:** Pain and blood volume +- **Carrying:** Both units and objects +- **Environment temperature** + + +### 1.3 Effects of High Fatigue + +Depending on how much your character is fatigued you will experience various visual, audible and physical symptoms: + +- Breathing sounds (with different intensity and frequency) +- Black flashing border when hitting the bodies limits +- Not being able to sprint +- Not being able to jog +- Slowed down movement whilst swimming or diving +- Weapon sway (majorly reduced when crouched or prone) + + +### 1.4 Stamina Bar + +ACE provides a stamina bar similar to the one in vanilla Arma 3. You can enable and disable it through your ACE options menu. If you want to move the stamina bar, simply move the vanilla one in the GUI game options, the Advanced Fatigue one will move to the same location (this requires a restart though). + +The Advanced Fatigue stamina bar has a few changes compared to the vanilla one to improve both immersion and user feedback, inspired by Dslyecxi's custom stamina bar. It will initially have a very low opacity which rises with the loss of stamina. Additionally it will first turn from white to orange and bright red afterwards. + + + +## 2. Simulation Details + +Since Advanced Fatigue is based on real life biological systems we will explain some of them in more detail here. + + +### 2.1 How Human Stamina Works + +Human stamina is based on the availability of adenosine triphosphate (ATP), which is a molecule used by the body to transfer power. Small amounts of ATP are already stored readily available within muscle cells and larger amounts are generated by several pathways, which then transfer the ATP through blood to the muscles. There are quite a few pathways which generate and store ATP, so instead of simulating all of them, we merge them into 3 generic pathways. + + +### 2.2 ATP Pathways + +Each pathway has different properties: They store different amounts of ATP and can provide and regenerate different amounts of ATP per second. You can compare this to having three differently sized barrels filled with water, each having a differently sized faucet and opening at the top to refill it with water. + + +#### 2.2.1 Anaerobic Pathway + +This pathway is essentially responsible for your short term stamina. It has a very small capacity of ATP available (2300 mmol), which is can provide a lot of ATP very fast (13.3 mmol/s), but also replenished very quickly (56.7 mmol/s). This pathway is pretty much what limits how long you can jog or sprint in one go, which is why we use it as an indicator for the stamina bar. + + +#### 2.2.2 Aerobic Pathways + +The two aerobic pathways store way bigger amounts of ATP than the anaerobic one, the first one stores over 1700 times as much ATP (4000 mol) and the second one still over 36 times as much ATP (84 mol) as the anaerobic pathway. However, they can also provide (13.3 and 16.7 mmol) and replenish (6.6 and 5.83 mmol) a lot less ATP then the anaerobic pathway. + +This means that while these will last a lot longer, they do not have such a large impact on your short term performance. Instead, they will drain slowly during the day, which means that at the end you will have less power available than at the beginning, depending on how much you exhausted yourself. However, at that point they will start influencing your short term performance. + + +### 2.3 ATP Consumption + +At any time the body consumes a certain amount of ATP - even when not moving. Since the aerobic pathways have so much ATP available, they will be drained first, and when you're not moving they can usually cover all the ATP you need. They can actually mostly regenerate the same amount of ATP that is used as is consumed, which means standing still has no effect on your performance. Once you exert yourself a little more, by jogging for example, more ATP is needed, and the anaerobic pathway comes into play. It will fill in the rest of the ATP needed. + + +### 2.4 ATP Pathway Fatigue + +Another factor that comes into play here is pathway fatigue - the pathways themselves can fatigue too! That means, the more ATP the pathways have to provide, the slower they will will be able to, limiting how much ATP can overall be provided by each pathway. If we take into account that the aerobic pathways have provide their ATP first for any consumption, that means that the anaerobic pathway will have to provide more ATP if the aerobic ones are fatigued. This is how the long term fatigue effect is created. + + + +## 3. Dependencies + +{% include dependencies_list.md component="advanced_fatigue" %} diff --git a/docs/wiki/feature/advanced-throwing.md b/docs/wiki/feature/advanced-throwing.md index 7c8dbc06b9..e440ab9641 100644 --- a/docs/wiki/feature/advanced-throwing.md +++ b/docs/wiki/feature/advanced-throwing.md @@ -27,11 +27,24 @@ After cooking a grenade any mode can be used to throw it further or it can simpl Grenade will be thrown where you are currently looking at, free-look (including TrackIR) is fully supported. However, the further to the side and back you are looking, the lower the throw power will be. -### 1.2 Rethrowing +### 1.2 Indicators + +When enabled, an arc of colored filled circles will indicate the path grenade will fly through. + +Color | Meaning +----- | -------- +White | Flight path +Green | Collision with ground surface +Red | Collision with object +Yellow | Possible collision (_added in ACE3 v3.8.0_) + +Possible collisions are collisions that might happen, but there is also a chance that the grenade will not collide with that object. It is impossible to predict in many cases due to different object configurations. + +### 1.3 Rethrowing Advanced Throwing allows you to pick up grenades that have already been thrown. You have to be very close to it to effectively pick it up. Useful for rethrowing smoke grenades or repositioning chemlights. Frag grenades can also be thrown back, for example out of the house, however doing so is extremely risky. -### 1.3 Settings +### 1.4 Settings Various settings can be set according to your likeness. Next to global toggle to disable Advanced Throwing there are settings to hide the throw arc indicating approximate throw distance and the arc it will fly through and hide mouse controls. Additionally for server administrators and mission makers, picking up grenades can be entirely disabled, as well as a setting to enable picking up attached items such as chemlights attached to vehicles or other player's shoulder. diff --git a/docs/wiki/feature/grenades.md b/docs/wiki/feature/grenades.md index d043d67d0b..348425d3d9 100644 --- a/docs/wiki/feature/grenades.md +++ b/docs/wiki/feature/grenades.md @@ -12,6 +12,11 @@ version: patch: 0 --- +
+
Note:
+

Check out the Advanced Throwing page for the new alternative system introduced in version 3.7.0.

+
+ ## 1. Overview ### 1.1 Throw modes diff --git a/docs/wiki/feature/medical-ai.md b/docs/wiki/feature/medical-ai.md new file mode 100644 index 0000000000..cecf8d53b1 --- /dev/null +++ b/docs/wiki/feature/medical-ai.md @@ -0,0 +1,38 @@ +--- +layout: wiki +title: Medical AI +description: Makes AI heal themselves and each other with the ACE Medical system. +group: feature +category: realism +parent: wiki +mod: ace +version: + major: 3 + minor: 7 + patch: 0 +--- + +
+
Note:
+

Medical AI is currently only able to deal with the basic medical system! Read further for more details.

+
+ +## 1. Overview + +ACE Medical AI makes AI units heal themselves and each other when ACE Medical is enabled. They will do this automatically when they consider themselves *fairly safe*, as in they're not suppressed and haven't fired a shot since a few seconds. + + +## 2. Usage + +### 2.1 Multiplayer + +The Medical AI will only become active if the AI units use the basic medical system (which is the default setting) and run on locally hosted multiplayer, dedicated servers and headless clients. In case you are concerned about performance, Medical AI is based on a CBA state machine, which means there is next to no performance loss caused by it. + +### 2.2 Singleplayer + +AI units will also heal themselves in singleplayer. If the player is in control of an AI group and uses basic medical, Medical AI is also enabled and will run for the players group as well. The AI subordinates will automatically start healing themselves and do not need to be told to do so manually through the command menu, additionally the groups medic will also start healing other units (including the player). + + +## 3. Dependencies + +{% include dependencies_list.md component="medical_ai" %} diff --git a/docs/wiki/feature/medical-blood.md b/docs/wiki/feature/medical-blood.md new file mode 100644 index 0000000000..79ed10ab02 --- /dev/null +++ b/docs/wiki/feature/medical-blood.md @@ -0,0 +1,30 @@ +--- +layout: wiki +title: Medical Blood +description: Spawn blood drops for bleeding units. +group: feature +category: realism +parent: wiki +mod: ace +version: + major: 3 + minor: 8 + patch: 0 +--- + +
+
Note:
+

This component supports both ACE medical as well as the vanilla medical systems.

+
+ +## 1. Overview + +When any unit is bleeding, this component will spawn blood drops on the ground. The same happens for units that are taking damage. It can be configured to run only for players, for all units (AI and Players) or disabled through the ACE Settings framework. + +## 2. In game + +ACE Blood in game + +## 3. Dependencies + +{% include dependencies_list.md component="medical_blood" %} diff --git a/docs/wiki/framework/advanced-fatigue-framework.md b/docs/wiki/framework/advanced-fatigue-framework.md new file mode 100644 index 0000000000..7ef836b7f2 --- /dev/null +++ b/docs/wiki/framework/advanced-fatigue-framework.md @@ -0,0 +1,28 @@ +--- +layout: wiki +title: Advanced Fatigue Framework +description: Explains the effects of various Advanced Fatigue mission settings. +group: framework +parent: wiki +mod: ace +version: + major: 3 + minor: 7 + patch: 0 +--- + +## 1. Global Settings + +ACE provides four settings to tweak Advanced Fatigue. Adjust these factors depending on how hard you want your experience to be. + +- **Performance factor:** This influences the overall performance of players, malnourished or super soldiers, everything is possible. +- **Recovery factor:** Do you like looking at the landscape or think breaks are boring? Whatever the case, this influences the length of your stamina breaks. +- **Load factor:** If you believe a Javelin is the perfect companion for your .50 BMG sniper rifle you probably should tweak this setting. +- **Terrain factor**: Not everyone is used to mountainous terrain. Tweak this until you feel more at home. + +Note that while there currently is no restriction on the value of these settings, it's generally recommended to keep them between 0 and 2. + + +## 2. Unit Specific Settings + +When double clicking a unit you can find a performance factor slider under the ACE options. This unit specific factor will override the global setting, but is only applied to that unit, unless you select multiple and change the slider for all of them at once of course. diff --git a/docs/wiki/framework/cookoff-framework.md b/docs/wiki/framework/cookoff-framework.md new file mode 100644 index 0000000000..2c8f0948af --- /dev/null +++ b/docs/wiki/framework/cookoff-framework.md @@ -0,0 +1,29 @@ +--- +layout: wiki +title: Cook Off Framework +description: Explains the Cook off system for developers & mission makers. +group: framework +order: 5 +parent: wiki +mod: ace +version: + major: 3 + minor: 7 + patch: 0 +--- + +## 1. Disabling / Enabling Cook off for individual vehicles + +You can dynamically enable and/or disable vehicle cook off for individual vehicles by using `setVariable`: + +``` +VEHICLE setVariable ["ace_cookoff_enable", true, true]; +``` + +The above will enable cook off for that specific vehicle, no matter the mission settings. + +Likewise, cook off can also be disabled for a specific vehicle: + +``` +VEHICLE setVariable ["ace_cookoff_enable", false, true]; +``` diff --git a/optionals/compat_rhs_afrf3/CfgAmmo.hpp b/optionals/compat_rhs_afrf3/CfgAmmo.hpp index 0ab559f96c..6f335be3a8 100644 --- a/optionals/compat_rhs_afrf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_afrf3/CfgAmmo.hpp @@ -163,6 +163,8 @@ class CfgAmmo { ace_frag_force = 1; }; class rhs_ammo_rgn: rhs_ammo_rgn_base { + // RGN is scripted grenade that deletes itself, which will break advanced throwing, replace with it's base + ace_advanced_throwing_replaceWith = "rhs_ammo_rgn_base"; ace_frag_enabled = 0; ace_frag_skip = 1; ace_frag_force = 0; diff --git a/optionals/nocrosshair/$PBOPREFIX$ b/optionals/nocrosshair/$PBOPREFIX$ new file mode 100644 index 0000000000..8296f48d6e --- /dev/null +++ b/optionals/nocrosshair/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\nocrosshair \ No newline at end of file diff --git a/optionals/nocrosshair/CfgInGameUI.hpp b/optionals/nocrosshair/CfgInGameUI.hpp new file mode 100644 index 0000000000..cdaf4eba78 --- /dev/null +++ b/optionals/nocrosshair/CfgInGameUI.hpp @@ -0,0 +1,6 @@ + +class CfgInGameUI { + class Cursor { + weapon = ""; // "\A3\ui_f\data\igui\cfg\cursors\weapon_ca.paa"; + }; +}; diff --git a/optionals/nocrosshair/README.md b/optionals/nocrosshair/README.md new file mode 100644 index 0000000000..ac9bcf43e0 --- /dev/null +++ b/optionals/nocrosshair/README.md @@ -0,0 +1,11 @@ +ace_nocrosshair +=========== + +Removes weapon crosshair. + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [commy2](https://github.com/commy2) diff --git a/optionals/nocrosshair/config.cpp b/optionals/nocrosshair/config.cpp new file mode 100644 index 0000000000..b7528917ef --- /dev/null +++ b/optionals/nocrosshair/config.cpp @@ -0,0 +1,18 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + ACE_isOptional = 1; + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author = ECSTRING(common,ACETeam); + authors[] = {"commy2"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgInGameUI.hpp" diff --git a/optionals/nocrosshair/script_component.hpp b/optionals/nocrosshair/script_component.hpp new file mode 100644 index 0000000000..5f3bea04c6 --- /dev/null +++ b/optionals/nocrosshair/script_component.hpp @@ -0,0 +1,18 @@ +#define COMPONENT nocrosshair +#define COMPONENT_BEAUTIFIED No Crosshair +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define CBA_DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_NOCROSSHAIR + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_ENABLED_NOCROSSHAIR + #define DEBUG_SETTINGS DEBUG_ENABLED_NOCROSSHAIR +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/tools/extract_dependencies.py b/tools/extract_dependencies.py index e048448613..e1e29e58d1 100644 --- a/tools/extract_dependencies.py +++ b/tools/extract_dependencies.py @@ -30,10 +30,12 @@ def main(): script_path = os.path.realpath(__file__) project_path = os.path.dirname(os.path.dirname(script_path)) addons_path = os.path.join(project_path, "addons") + optionals_path = os.path.join(project_path, "optionals") if "--acex" in sys.argv: projectx_path = sys.argv[sys.argv.index("--acex") + 1] addonsx_path = os.path.join(projectx_path, "addons") + optionalsx_path = os.path.join(projectx_path, "optionals") # Documentation paths include_path = os.path.join(project_path, "docs", "_includes") @@ -47,14 +49,20 @@ def main(): sys.exit(0) open(dependencies_path, "w", newline="\n").close() - addons = next(os.walk(addons_path))[1] + if os.path.exists(addons_path): + addons = next(os.walk(addons_path))[1] + if os.path.exists(optionals_path): + addons += ["."] + next(os.walk(optionals_path))[1] + dependencies_path_current = dependencies_path addons_path_current = addons_path if "--acex" in sys.argv: open(dependenciesx_path, "w", newline="\n").close() - addons.append(".") - addons += next(os.walk(addonsx_path))[1] + if os.path.exists(addonsx_path): + addons += [".."] + next(os.walk(addonsx_path))[1] + if os.path.exists(optionalsx_path): + addons += ["."] + next(os.walk(optionalsx_path))[1] # Iterate through folders in the addons directories for folder in addons: @@ -62,8 +70,16 @@ def main(): if folder == "main": continue - # Change to ACEX list on "." separator + # Change to optionals list on "." separator if folder == ".": + if addons_path_current == addons_path: + addons_path_current = optionals_path + else: + addons_path_current = optionalsx_path + continue + + # Change to ACEX list on ".." separator + if folder == "..": dependencies_path_current = dependenciesx_path addons_path_current = addonsx_path continue @@ -97,22 +113,22 @@ def main(): data += get_dependencies(line) continue - data = "`, `".join(data) - data = "`{}`".format(data) + data = "`, `".join(data) + data = "`{}`".format(data) - jekyll_statement = "".join([ - "{% if include.component == \"" + folder + "\" %}\n", - "{}\n".format(data), - "{% endif %}\n" - ]) + jekyll_statement = "".join([ + "{% if include.component == \"" + folder + "\" %}\n", + "{}\n".format(data), + "{% endif %}\n" + ]) - with open(dependencies_path_current, "a", newline="\n") as file: - file.writelines([jekyll_statement, "\n"]) + with open(dependencies_path_current, "a", newline="\n") as file: + file.writelines([jekyll_statement, "\n"]) - if "--markdown" not in sys.argv: - print("{}: {}".format(folder,data)) - else: - print(jekyll_statement) + if "--markdown" not in sys.argv: + print("{}: {}".format(folder,data)) + else: + print(jekyll_statement) if __name__ == "__main__":