Merge branch 'master' into 40mmBrass

This commit is contained in:
PabstMirror 2024-05-23 17:38:40 -05:00
commit 4b30e095bf
499 changed files with 4088 additions and 2307 deletions

View File

@ -23,14 +23,14 @@ All good? Then proceed and fill out the items below.
**Mods (complete and add to the following information):** **Mods (complete and add to the following information):**
- **Arma 3:** `x.xx` [e.g. 1.00 stable, rc, dev] - **Arma 3:** `x.xx` [e.g. 1.00 stable, rc, dev]
- **CBA:** `3.x.x` [e.g. 3.0.0 stable, commit hash] - **CBA:** `3.x.x` [e.g. 3.0.0 stable, commit hash]
- **ACE3:** `3.x.x` [eg. 3.0.0 stable, commit hash] - **ACE3:** `3.x.x` [e.g. 3.0.0 stable, commit hash]
<!-- Make sure to reproduce the issue with only CBA and ACE3 on a newly created mission! --> <!-- Make sure to reproduce the issue with only CBA and ACE3 on a newly created mission! -->
**Description:** **Description:**
A clear and concise description of what the bug is. A clear and concise description of what the bug is.
**Steps to reproduce:** **Steps to reproduce:**
_Follow [https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp](this flowchart)!_ _Follow [this flowchart](https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp)!_
1. _Go to ..._ 1. _Go to ..._
2. _Click ..._ 2. _Click ..._

View File

@ -11,11 +11,10 @@ sort-direction: ascending
categories: categories:
- title: '**ADDED:**' - title: '**ADDED:**'
labels: labels:
- 'kind/feature request' - 'kind/feature'
- 'kind/added feature'
- title: '**FIXED:**' - title: '**FIXED:**'
labels: labels:
- 'kind/bug fix' - 'kind/bug-fix'
- title: '**IMPROVED:**' - title: '**IMPROVED:**'
labels: labels:
- 'kind/enhancement' - 'kind/enhancement'
@ -23,17 +22,16 @@ categories:
- title: '**CHANGED:**' - title: '**CHANGED:**'
labels: labels:
- 'kind/cleanup' - 'kind/cleanup'
- 'area/compatibility'
- 'kind/change' - 'kind/change'
- title: '**SETTINGS:**' - title: '**SETTINGS:**'
labels: labels:
- 'kind/setting' - 'kind/setting'
- title: '**TRANSLATIONS:**' - title: '**TRANSLATIONS:**'
labels: labels:
- 'area/translations' - 'kind/translation'
exclude-labels: exclude-labels:
- 'ignore changelog' - 'ignore-changelog'
- 'dependencies' - 'dependencies'
change-template: '- $TITLE (#$NUMBER)' change-template: '- $TITLE (#$NUMBER)'

View File

@ -28,7 +28,7 @@ exclude = [
"zeus/functions/fnc_zeusAttributes.sqf", "zeus/functions/fnc_zeusAttributes.sqf",
] ]
[hemtt.launch] [hemtt.launch.default]
workshop = [ workshop = [
"450814997", # CBA_A3 "450814997", # CBA_A3
] ]

View File

@ -1,7 +1,5 @@
#include "script_component.hpp" #include "script_component.hpp"
#include "initKeybinds.inc.sqf"
GVAR(currentbulletID) = -1; GVAR(currentbulletID) = -1;
GVAR(Protractor) = false; GVAR(Protractor) = false;
@ -11,6 +9,8 @@ GVAR(currentGrid) = 0;
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};
#include "initKeybinds.inc.sqf"
["CBA_settingsInitialized", { ["CBA_settingsInitialized", {
//If not enabled, dont't add PFEH //If not enabled, dont't add PFEH
if (!GVAR(enabled)) exitWith {}; if (!GVAR(enabled)) exitWith {};
@ -19,11 +19,11 @@ if (!hasInterface) exitWith {};
[] call FUNC(initializeTerrainExtension); [] call FUNC(initializeTerrainExtension);
// Register fire event handler // Register fire event handler
["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; ["ace_firedPlayer", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler;
["ace_firedPlayerNonLocal", DFUNC(handleFired)] call CBA_fnc_addEventHandler; ["ace_firedPlayerNonLocal", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler;
// Register Perframe Handler // Register Perframe Handler
[FUNC(handleFirePFH), GVAR(simulationInterval)] call CBA_fnc_addPerFrameHandler; [LINKFUNC(handleFirePFH), GVAR(simulationInterval)] call CBA_fnc_addPerFrameHandler;
//Add warnings for missing compat PBOs (only if AB is on) //Add warnings for missing compat PBOs (only if AB is on)
{ {

View File

@ -44,6 +44,9 @@ if (!(_dragModel in [1, 2, 5, 6, 7, 8])) then {
_dragModel = 1; _dragModel = 1;
}; };
private _ballisticCoefficients = getArray(_ammoConfig >> "ACE_ballisticCoefficients"); private _ballisticCoefficients = getArray(_ammoConfig >> "ACE_ballisticCoefficients");
if (_ballisticCoefficients isEqualTo []) then {
_ballisticCoefficients = [0.5];
};
private _velocityBoundaries = getArray(_ammoConfig >> "ACE_velocityBoundaries"); private _velocityBoundaries = getArray(_ammoConfig >> "ACE_velocityBoundaries");
private _atmosphereModel = getText(_ammoConfig >> "ACE_standardAtmosphere"); private _atmosphereModel = getText(_ammoConfig >> "ACE_standardAtmosphere");
if (_atmosphereModel isEqualTo "") then { if (_atmosphereModel isEqualTo "") then {

View File

@ -2,7 +2,15 @@
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};
["baseline", { // recheck weapon inertia after weapon swap, change of attachments or switching unit
["weapon", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler;
["loadout", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler;
["unit", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler;
["CBA_settingsInitialized", {
if (!GVAR(enabled)) exitWith {};
["baseline", {
private _fatigue = ACE_player getVariable [QGVAR(aimFatigue), 0]; private _fatigue = ACE_player getVariable [QGVAR(aimFatigue), 0];
switch (stance ACE_player) do { switch (stance ACE_player) do {
case ("CROUCH"): { case ("CROUCH"): {
@ -15,29 +23,7 @@ if (!hasInterface) exitWith {};
(1.5 + _fatigue ^ 2 * 3.0) (1.5 + _fatigue ^ 2 * 3.0)
}; };
}; };
}, QUOTE(ADDON)] call EFUNC(common,addSwayFactor); }, QUOTE(ADDON)] call EFUNC(common,addSwayFactor);
["multiplier", {
switch (true) do {
case (isWeaponRested ACE_player): {
GVAR(swayFactor) * GVAR(restedSwayFactor)
};
case (isWeaponDeployed ACE_player): {
GVAR(swayFactor) * GVAR(deployedSwayFactor)
};
default {
GVAR(swayFactor)
};
};
}, QUOTE(ADDON)] call EFUNC(common,addSwayFactor);
// recheck weapon inertia after weapon swap, change of attachments or switching unit
["weapon", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler;
["loadout", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler;
["unit", {[ACE_player] call FUNC(getWeaponInertia)}, true] call CBA_fnc_addPlayerEventHandler;
["CBA_settingsInitialized", {
if (!GVAR(enabled)) exitWith {};
// - Post process effect ------------------------------------------------------ // - Post process effect ------------------------------------------------------
GVAR(ppeBlackout) = ppEffectCreate ["ColorCorrections", 4220]; GVAR(ppeBlackout) = ppEffectCreate ["ColorCorrections", 4220];

View File

@ -80,30 +80,3 @@
[0, 5, 1, 1], [0, 5, 1, 1],
true true
] call CBA_fnc_addSetting; ] call CBA_fnc_addSetting;
[
QGVAR(swayFactor),
"SLIDER",
[LSTRING(SwayFactor), LSTRING(SwayFactor_Description)],
LSTRING(DisplayName),
[0, 5, 1, 1],
true
] call CBA_fnc_addSetting;
[
QGVAR(restedSwayFactor),
"SLIDER",
[LSTRING(RestedSwayFactor), LSTRING(RestedSwayFactor_Description)],
LSTRING(DisplayName),
[0, 5, 1, 2],
true
] call CBA_fnc_addSetting;
[
QGVAR(deployedSwayFactor),
"SLIDER",
[LSTRING(DeployedSwayFactor), LSTRING(DeployedSwayFactor_Description)],
LSTRING(DisplayName),
[0, 5, 1, 2],
true
] call CBA_fnc_addSetting;

View File

@ -44,7 +44,7 @@
<Italian>Influenza la prestazione generale di tutti i giocatori smuniti di un fattore personalizzato. Maggiore significa migliore.</Italian> <Italian>Influenza la prestazione generale di tutti i giocatori smuniti di un fattore personalizzato. Maggiore significa migliore.</Italian>
<Chinese>影響所有玩家的體力表現,值越高代表體力越好</Chinese> <Chinese>影響所有玩家的體力表現,值越高代表體力越好</Chinese>
<Chinesesimp>影响所有玩家的体力表现,值越高代表体力越好</Chinesesimp> <Chinesesimp>影响所有玩家的体力表现,值越高代表体力越好</Chinesesimp>
<Russian>Влияет на общую производительность игроков, у которых не задано персональное значение.</Russian> <Russian>Влияет на общую производительность игроков, у которых не задано персональное значение. Чем выше, тем лучше.</Russian>
<Portuguese>Influencia na performance geral de todos os jogadores sem nenhum fator personalizado. Quanto maior, melhor.</Portuguese> <Portuguese>Influencia na performance geral de todos os jogadores sem nenhum fator personalizado. Quanto maior, melhor.</Portuguese>
<Czech>Ovlivňuje celkový výkon všech hráčů bez vlastního faktoru. Vyšší znamená lépe.</Czech> <Czech>Ovlivňuje celkový výkon všech hráčů bez vlastního faktoru. Vyšší znamená lépe.</Czech>
</Key> </Key>
@ -59,7 +59,7 @@
<Italian>Influenza la prestazione personalizzata di questa unità. Maggiore significa migliore.</Italian> <Italian>Influenza la prestazione personalizzata di questa unità. Maggiore significa migliore.</Italian>
<Chinese>影響這個單位的體力表現,值越高代表體力越好</Chinese> <Chinese>影響這個單位的體力表現,值越高代表體力越好</Chinese>
<Chinesesimp>影响这个单位的体力表现,值越高代表体力越好</Chinesesimp> <Chinesesimp>影响这个单位的体力表现,值越高代表体力越好</Chinesesimp>
<Russian>Влияет на общую производительность юнита.</Russian> <Russian>Влияет на общую производительность юнита.Чем выше, тем лучше.</Russian>
<Portuguese>Influencia na performance geral dessa unidade. Quanto maior, melhor.</Portuguese> <Portuguese>Influencia na performance geral dessa unidade. Quanto maior, melhor.</Portuguese>
<Czech>Ovlivňuje celkový výkon této jednotky. Vyšší znamená lépe.</Czech> <Czech>Ovlivňuje celkový výkon této jednotky. Vyšší znamená lépe.</Czech>
</Key> </Key>
@ -154,76 +154,6 @@
<Portuguese>Define o quanto que um terreno íngrime aumenta na perda de estamina. Quanto maior, maior a perda de estamina.</Portuguese> <Portuguese>Define o quanto que um terreno íngrime aumenta na perda de estamina. Quanto maior, maior a perda de estamina.</Portuguese>
<Czech>Nastavuje, o kolik strmý terén zvyšuje ztrátu výdrže. Vyšší znamená vyšší ztrátu výdrže.</Czech> <Czech>Nastavuje, o kolik strmý terén zvyšuje ztrátu výdrže. Vyšší znamená vyšší ztrátu výdrže.</Czech>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor">
<English>Sway factor</English>
<Spanish>Factor de balanceo de mira</Spanish>
<German>Verwacklungsfaktor</German>
<Japanese>手ぶれ因数</Japanese>
<Chinesesimp>抖动系数</Chinesesimp>
<Chinese>抖動因素</Chinese>
<French>Facteur de tremblement</French>
<Italian>Fattore di Oscillazione</Italian>
<Polish>Czynnik kołysania</Polish>
<Russian>Фактор колебания прицела</Russian>
<Portuguese>Fator de Balanço de Mira</Portuguese>
<Czech>Faktor kývání</Czech>
<Korean>손떨림 정도</Korean>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor_Description">
<English>Influences the amount of weapon sway. Higher means more sway.</English>
<Spanish>Afecta al la estabilidad de la mira. Más alto significa más balanceo</Spanish>
<German>Beeinflusst, wie ruhig man eine Waffe halten kann. Ein höherer Wert bedeutet weniger Stabilisierung.</German>
<Japanese>武器の手ぶれの量に影響します。値が高いほど、手ぶれが強くなります。</Japanese>
<Chinesesimp>影响手持武器的晃动程度,数值越高,抖动的越厉害。</Chinesesimp>
<Chinese>影響手持武器晃動程度,數值越高抖動越厲害</Chinese>
<French>Influe sur l'amplitude du tremblement de l'arme. Une valeur plus élevée signifie plus de tremblement.</French>
<Italian>Influenza l'aumento di oscillazione dell'arma quando affaticato. Maggiore significa più oscillazione.</Italian>
<Polish>Wpływa na poziom kołysania broni. Większa ilość znaczy większe kołysanie.</Polish>
<Russian>Влияет на колебания прицела оружия. Чем выше - тем больше.</Russian>
<Portuguese>Influencia a quantidade de balanço da mira da arma. Quanto maior, mais balanço.</Portuguese>
<Czech>Ovlivňuje množství kývání zbraní. Vyšší znamená více kývání.</Czech>
<Korean>손떨림의 정도를 정합니다. 높을 수록 많이 휘적입니다.</Korean>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_RestedSwayFactor">
<English>Rested sway factor</English>
<French>Facteur de balancement au repos</French>
<Korean>휴식 시 손떨림 정도</Korean>
<Portuguese>Fator de balanço de mira em repouso</Portuguese>
<German>Verwacklungsfaktor, wenn aufgelegt</German>
<Italian>Fattore di Oscillazione Appoggiato</Italian>
<Japanese>静止時の手ぶれ係数</Japanese>
<Russian>Коэффициент колебания в состоянии покоя</Russian>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_RestedSwayFactor_Description">
<English>Influences the amount of weapon sway while weapon is rested.</English>
<French>Influence le degré de balancement de l'arme au repos.</French>
<Korean>무기가 아무런 행동도 하지 않는 동안 무기가 흔들리는 정도를 정합니다.</Korean>
<Portuguese>Influencia a quantidade de balanço de mira enquanto a arma está em repouso.</Portuguese>
<German>Beeinflusst, wie ruhig man die Waffe hält, während sie aufgelegt ist.</German>
<Italian>Determina la quantità di oscillazione dell'arma quando questa è appoggiata.</Italian>
<Japanese>静止している時の武器の手ぶれの量に影響します。</Japanese>
<Russian>Влияет на величину колебания оружия в состоянии покоя.</Russian>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_DeployedSwayFactor">
<English>Deployed sway factor</English>
<French>Facteur de balancement déployé</French>
<Korean>거치 시 손떨림 정도</Korean>
<Portuguese>Fator de balanço de mira em posição de tiro</Portuguese>
<German>Verwacklungsfaktor, wenn Zweibein aufgestellt ist.</German>
<Italian>Fattore di Oscillazione su Bipode</Italian>
<Japanese>展開時の手ぶれ係数</Japanese>
<Russian>Коэффициент колебания при развертывании</Russian>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_DeployedSwayFactor_Description">
<English>Influences the amount of weapon sway while weapon is deployed.</English>
<French>Influence le degré de balancement de l'arme déployée.</French>
<Korean>무기를 거치하는 동안 무기를 흔드는 정도를 정합니다.</Korean>
<Portuguese>Influencia a quantidade de balanço de mira enquanto a arma está em posição de tiro.</Portuguese>
<German>Beeinflusst, wie ruhig man die Waffen hält, während das Zweibein aufgestellt ist.</German>
<Italian>Determina la quantità di oscillazione dell'arma quando questa è stabilizzata usando il bipode.</Italian>
<Japanese>武器の展開(Cキー)時の武器の手ぶれの量に影響します。</Japanese>
<Russian>Влияет на величину колебания оружия при его развертывании.</Russian>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_Enabled"> <Key ID="STR_ACE_Advanced_Fatigue_Enabled">
<English>Enabled</English> <English>Enabled</English>
<Spanish>Activada</Spanish> <Spanish>Activada</Spanish>
@ -250,7 +180,7 @@
<Italian>Abilita/Disabilita la Fatica Avanzata.</Italian> <Italian>Abilita/Disabilita la Fatica Avanzata.</Italian>
<Chinese>啟用/關閉進階體力.</Chinese> <Chinese>啟用/關閉進階體力.</Chinese>
<Chinesesimp>启用/关闭进阶体力。</Chinesesimp> <Chinesesimp>启用/关闭进阶体力。</Chinesesimp>
<Russian>Включает / Отключает Продвинутую усталость</Russian> <Russian>Включает/отключает Продвинутую усталость</Russian>
<Portuguese>Ativa/Desativa Fadiga Avançada.</Portuguese> <Portuguese>Ativa/Desativa Fadiga Avançada.</Portuguese>
<Czech>Aktivuje / deaktivuje Pokročilou únavu.</Czech> <Czech>Aktivuje / deaktivuje Pokročilou únavu.</Czech>
</Key> </Key>

View File

@ -2,20 +2,22 @@
// Fired XEH // Fired XEH
GVAR(ammoEventHandlers) = createHashMap; GVAR(ammoEventHandlers) = createHashMap;
[QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler; [QGVAR(throwFiredXEH), LINKFUNC(throwFiredXEH)] call CBA_fnc_addEventHandler;
// Exit on HC // Exit on HC
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};
// Temporary Wind Info indication
GVAR(tempWindInfo) = false;
// Ammo/Magazines look-up hash for correctness of initSpeed // Ammo/Magazines look-up hash for correctness of initSpeed
GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
{ {
{ {
private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo"); private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo");
if (_ammo != "") then { GVAR(ammoMagLookup) setVariable [_ammo, _x]; }; if (_ammo != "") then { GVAR(ammoMagLookup) setVariable [_ammo, _x]; };
} count (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines")); } forEach (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines"));
nil } forEach getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles");
} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles");
// Add keybinds // Add keybinds

View File

@ -19,7 +19,7 @@ params ["_unit"];
if !(_unit getVariable [QGVAR(inHand), false]) exitWith {false}; if !(_unit getVariable [QGVAR(inHand), false]) exitWith {false};
if (vehicle _unit != _unit) exitWith { if (!isNull objectParent _unit) exitWith {
private _startPos = eyePos _unit; private _startPos = eyePos _unit;
private _aimLinePos = AGLToASL (positionCameraToWorld [0, 0, 1]); private _aimLinePos = AGLToASL (positionCameraToWorld [0, 0, 1]);
private _intersections = lineIntersectsSurfaces [_startPos, _aimLinePos, _unit, objNull, false]; private _intersections = lineIntersectsSurfaces [_startPos, _aimLinePos, _unit, objNull, false];

View File

@ -53,6 +53,12 @@ _unit setVariable [QGVAR(dropDistance), DROP_DISTANCE_DEFAULT];
// Remove controls hint (check if ever enabled is inside the function) // Remove controls hint (check if ever enabled is inside the function)
call EFUNC(interaction,hideMouseHint); call EFUNC(interaction,hideMouseHint);
// Hide wind info after throw, if it was temporarily enabled for the throw
if (GVAR(tempWindInfo)) then {
EGVAR(weather,WindInfo) = false;
GVAR(tempWindInfo) = false;
};
// Remove throw action // Remove throw action
[_unit, "DefaultAction", _unit getVariable [QGVAR(throwAction), -1]] call EFUNC(common,removeActionEventHandler); [_unit, "DefaultAction", _unit getVariable [QGVAR(throwAction), -1]] call EFUNC(common,removeActionEventHandler);

View File

@ -35,6 +35,11 @@ if (isNull (_unit getVariable [QGVAR(activeThrowable), objNull]) && {(currentThr
TRACE_1("no throwables",_unit); TRACE_1("no throwables",_unit);
}; };
// Temporarily enable wind info, to aid in throwing smoke grenades effectively
if (GVAR(enableTempWindInfo) && {!(missionNamespace getVariable [QEGVAR(weather,WindInfo), false])}) then {
[] call EFUNC(weather,displayWindInfo);
GVAR(tempWindInfo) = true;
};
_unit setVariable [QGVAR(inHand), true]; _unit setVariable [QGVAR(inHand), true];

View File

@ -44,8 +44,7 @@
_addedPickUpHelpers pushBack _pickUpHelper; _addedPickUpHelpers pushBack _pickUpHelper;
_throwablesHelped pushBack _x; _throwablesHelped pushBack _x;
}; };
nil } forEach _nearThrowables;
} count _nearThrowables;
_args set [0, getPosASL ACE_player]; _args set [0, getPosASL ACE_player];
_args set [3, _nearThrowables]; _args set [3, _nearThrowables];
@ -56,11 +55,10 @@
{ {
// Only handling with attachTo works nicely // Only handling with attachTo works nicely
_x attachTo [_x getVariable [QGVAR(throwable), objNull], [0, 0, 0]]; _x attachTo [_x getVariable [QGVAR(throwable), objNull], [0, 0, 0]];
nil } forEach _addedPickUpHelpers;
} count _addedPickUpHelpers;
} else { } else {
TRACE_1("Cleaning Pick Up Helpers",count _addedPickUpHelpers); TRACE_1("Cleaning Pick Up Helpers",count _addedPickUpHelpers);
{deleteVehicle _x} count _addedPickUpHelpers; {deleteVehicle _x} forEach _addedPickUpHelpers;
[_idPFH] call CBA_fnc_removePerFrameHandler; [_idPFH] call CBA_fnc_removePerFrameHandler;
}; };
}, 0, [(getPosASL ACE_player) vectorAdd [-100, 0, 0], [], [], []]] call CBA_fnc_addPerFrameHandler; }, 0, [(getPosASL ACE_player) vectorAdd [-100, 0, 0], [], [], []]] call CBA_fnc_addPerFrameHandler;

View File

@ -45,7 +45,7 @@ if (!(_unit getVariable [QGVAR(primed), false])) then {
private _newVelocity = (_p1 vectorFromTo _p2) vectorMultiply _velocity; private _newVelocity = (_p1 vectorFromTo _p2) vectorMultiply _velocity;
// Adjust for throwing from inside vehicles, where we have a vehicle-based velocity that can't be compensated for by a human // Adjust for throwing from inside vehicles, where we have a vehicle-based velocity that can't be compensated for by a human
if (vehicle _unit != _unit) then { if (!isNull objectParent _unit) then {
_newVelocity = _newVelocity vectorAdd (velocity (vehicle _unit)); _newVelocity = _newVelocity vectorAdd (velocity (vehicle _unit));
}; };

View File

@ -40,3 +40,11 @@ private _category = format ["ACE %1", localize LSTRING(Category)];
true, true,
1 1
] call CBA_fnc_addSetting; ] call CBA_fnc_addSetting;
[
QGVAR(enableTempWindInfo), "CHECKBOX",
[LSTRING(EnableTempWindInfo_DisplayName), LSTRING(EnableTempWindInfo_Description)],
_category,
true,
0
] call CBA_fnc_addSetting;

View File

@ -185,6 +185,26 @@
<Portuguese>Permite que arremessáveis fixados em objetos sejam pegos.</Portuguese> <Portuguese>Permite que arremessáveis fixados em objetos sejam pegos.</Portuguese>
<Czech>Zapíná schopnost zvednutí předmětů z objektů ke kterým jsou připnuté.</Czech> <Czech>Zapíná schopnost zvednutí předmětů z objektů ke kterým jsou připnuté.</Czech>
</Key> </Key>
<Key ID="STR_ACE_Advanced_Throwing_EnableTempWindInfo_DisplayName">
<English>Show Temporary Wind Info</English>
<German>Zeige temporäre Windinformationen</German>
<Italian>Mostra informazioni sul vento temporaneamente</Italian>
<Japanese>一時的に風の情報を表示</Japanese>
<Korean>바람 정보 임시로 표시</Korean>
<French>Afficher temporairement les informations sur le vent</French>
<Russian>Временно показать информацию о ветре</Russian>
<Spanish>Mostrar información del viento temporalmente</Spanish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnableTempWindInfo_Description">
<English>Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively.</English>
<German>Zeige während des werfens Windinformationen an, um Rauchgranaten effektiver zu platzieren.</German>
<Italian>Mostra le informazioni sul vento durante il lancio di granate, facilitando il piazzamento ottimale di fumogeni.</Italian>
<Japanese>投擲行動中に風向きの情報を一時的に表示し、発煙手榴弾の煙幕を効果的に展開しやすくします。</Japanese>
<Korean>연막탄을 효과적으로 배치하는 데 도움이 되도록 투척하는 동안 일시적으로 바람 정보를 표시합니다.</Korean>
<French>Affiche les informations sur le vent pendant le lancement pour placer les grenades fumigènes plus efficacement.</French>
<Russian>Временно отображайте информацию о ветре во время броска, чтобы помочь эффективно разместить дымовые шашки.</Russian>
<Spanish>Mostrar información del viento temporalmente mientras se lanza, para ayudar a lanzar las granadas de humo de forma efectiva.</Spanish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Prepare"> <Key ID="STR_ACE_Advanced_Throwing_Prepare">
<English>Prepare/Change Throwable</English> <English>Prepare/Change Throwable</English>
<Spanish>Preparar/Cambiar objetos lanzables</Spanish> <Spanish>Preparar/Cambiar objetos lanzables</Spanish>

View File

@ -16,7 +16,7 @@
} forEach _sections; } forEach _sections;
}] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler;
[QGVAR(unGarrison), FUNC(unGarrison)] call CBA_fnc_addEventHandler; [QGVAR(unGarrison), LINKFUNC(unGarrison)] call CBA_fnc_addEventHandler;
[QGVAR(doMove), { [QGVAR(doMove), {
params ["_unitsArray"]; params ["_unitsArray"];
@ -73,6 +73,6 @@
if (isServer) then { if (isServer) then {
["CAManBase", "init", { ["CAManBase", "init", {
// wait for HMD to be assigned so `hmd _unit` works // wait for HMD to be assigned so `hmd _unit` works
[FUNC(assignNVG), _this, 1] call CBA_fnc_waitAndExecute; [LINKFUNC(assignNVG), _this, 1] call CBA_fnc_waitAndExecute;
}] call CBA_fnc_addClassEventHandler; }] call CBA_fnc_addClassEventHandler;
}; };

View File

@ -33,7 +33,7 @@ if (_startingPos isEqualTo [0,0,0]) exitWith {
[LSTRING(GarrisonInvalidPosition)] call EFUNC(common,displayTextStructured); [LSTRING(GarrisonInvalidPosition)] call EFUNC(common,displayTextStructured);
}; };
if (count _unitsArray == 0 || {isNull (_unitsArray select 0)}) exitWith { if (_unitsArray isEqualTo [] || {isNull (_unitsArray select 0)}) exitWith {
TRACE_1("fnc_garrison: Units error",_unitsArray); TRACE_1("fnc_garrison: Units error",_unitsArray);
[LSTRING(GarrisonNoUnits)] call EFUNC(common,displayTextStructured); [LSTRING(GarrisonNoUnits)] call EFUNC(common,displayTextStructured);
}; };
@ -43,7 +43,7 @@ if (_fillingRadius >= 50) then {
_buildings = [_buildings] call CBA_fnc_shuffle; _buildings = [_buildings] call CBA_fnc_shuffle;
}; };
if (count _buildings == 0) exitWith { if (_buildings isEqualTo []) exitWith {
TRACE_1("fnc_garrison: Building error",_buildings); TRACE_1("fnc_garrison: Building error",_buildings);
[LSTRING(GarrisonNoBuilding)] call EFUNC(common,displayTextStructured); [LSTRING(GarrisonNoBuilding)] call EFUNC(common,displayTextStructured);
}; };

View File

@ -91,6 +91,7 @@
<Portuguese>Equipar NVGs automaticamente</Portuguese> <Portuguese>Equipar NVGs automaticamente</Portuguese>
<Japanese>暗視装置の自動装備</Japanese> <Japanese>暗視装置の自動装備</Japanese>
<Russian>Автоматическое оснащение ПНВ</Russian> <Russian>Автоматическое оснащение ПНВ</Russian>
<Spanish>Auto equipar gafas de visión nocturna</Spanish>
</Key> </Key>
<Key ID="STR_ACE_AI_AssignNVG_Description"> <Key ID="STR_ACE_AI_AssignNVG_Description">
<English>Equips NVG in inventory during night time and unequips it during day time.\nDoes not add NVGs to inventory!</English> <English>Equips NVG in inventory during night time and unequips it during day time.\nDoes not add NVGs to inventory!</English>
@ -101,7 +102,8 @@
<French>Equipe des JVN pendant la nuit et les déséquipe le jour.\nN'ajoute pas les JVN dans l'intenvaire !</French> <French>Equipe des JVN pendant la nuit et les déséquipe le jour.\nN'ajoute pas les JVN dans l'intenvaire !</French>
<Portuguese>Equipa o NVG do inventário durante a noite e desequipa durante o dia.\nNão adiciona NVGs ao inventário!</Portuguese> <Portuguese>Equipa o NVG do inventário durante a noite e desequipa durante o dia.\nNão adiciona NVGs ao inventário!</Portuguese>
<Japanese>インベントリ内の暗視装置を夜間に装備し、日中は解除し収納します。\nこれはNVGをインベントリに追加しません。</Japanese> <Japanese>インベントリ内の暗視装置を夜間に装備し、日中は解除し収納します。\nこれはNVGをインベントリに追加しません。</Japanese>
<Russian>Оснащает ПНВ в инвентаре в ночное время и отключает его в дневное время.\nНе добавляет ПНВ в инвентарь!</Russian> <Russian>Экипирует ПНВ в ночное время и отключает его в дневное время.\nНе добавляет ПНВ в инвентарь!</Russian>
<Spanish>Equipa las gafas de visión nocturna en el inventario cuando es de noche, y las desequipa cuando es de día.\nNo añade las gafas al inventario!</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -30,6 +30,6 @@ _vehicle == vehicle _unit
if (_unit == _x select FULLCREW_UNIT) exitWith { if (_unit == _x select FULLCREW_UNIT) exitWith {
_ejectVarName = format [QGVAR(ejectAction_%1_%2), _x select FULLCREW_ROLE, _x select FULLCREW_TURRETPATH]; _ejectVarName = format [QGVAR(ejectAction_%1_%2), _x select FULLCREW_ROLE, _x select FULLCREW_TURRETPATH];
}; };
} count fullCrew _vehicle; } forEach fullCrew _vehicle;
_vehicle getVariable [_ejectVarName, false] _vehicle getVariable [_ejectVarName, false]
} }

View File

@ -123,7 +123,9 @@ class GVAR(stats) {
stats[] = {"maximumLoad"}; stats[] = {"maximumLoad"};
displayName = "$STR_a3_rscdisplayarsenal_stat_load"; displayName = "$STR_a3_rscdisplayarsenal_stat_load";
showBar = 1; showBar = 1;
showText = 1;
barStatement = QUOTE([ARR_3((_this select 0) select 0,_this select 1,[ARR_3([ARR_2(0,500)],[ARR_2(0.01,1)],false)])] call FUNC(statBarStatement_default)); barStatement = QUOTE([ARR_3((_this select 0) select 0,_this select 1,[ARR_3([ARR_2(0,500)],[ARR_2(0.01,1)],false)])] call FUNC(statBarStatement_default));
textStatement = QUOTE(call FUNC(statTextStatement_load));
tabs[] = {{3,4,5}, {}}; tabs[] = {{3,4,5}, {}};
}; };
class ACE_smokeChemTTL: statBase { class ACE_smokeChemTTL: statBase {

View File

@ -98,6 +98,7 @@ PREP(statBarStatement_rateOfFIre);
PREP(statTextStatement_accuracy); PREP(statTextStatement_accuracy);
PREP(statTextStatement_explosionTime); PREP(statTextStatement_explosionTime);
PREP(statTextStatement_illuminators); PREP(statTextStatement_illuminators);
PREP(statTextStatement_load);
PREP(statTextStatement_magCount); PREP(statTextStatement_magCount);
PREP(statTextStatement_mass); PREP(statTextStatement_mass);
PREP(statTextStatement_rateOfFire); PREP(statTextStatement_rateOfFire);

View File

@ -66,7 +66,8 @@ _items = _items select {
_x isKindOf ["CBA_MiscItem", _cfgWeapons] && {getNumber (_configItemInfo >> "type") in [TYPE_MUZZLE, TYPE_OPTICS, TYPE_FLASHLIGHT, TYPE_BIPOD]} || _x isKindOf ["CBA_MiscItem", _cfgWeapons] && {getNumber (_configItemInfo >> "type") in [TYPE_MUZZLE, TYPE_OPTICS, TYPE_FLASHLIGHT, TYPE_BIPOD]} ||
{getNumber (_configItemInfo >> "type") in [TYPE_FIRST_AID_KIT, TYPE_MEDIKIT, TYPE_TOOLKIT]} || {getNumber (_configItemInfo >> "type") in [TYPE_FIRST_AID_KIT, TYPE_MEDIKIT, TYPE_TOOLKIT]} ||
{getText (_cfgWeapons >> _x >> "simulation") == "ItemMineDetector"} || {getText (_cfgWeapons >> _x >> "simulation") == "ItemMineDetector"} ||
{getNumber (_cfgMagazines >> _x >> "ACE_isUnique") == 1} {getNumber (_cfgMagazines >> _x >> "ACE_isUnique") == 1} ||
{getNumber (_cfgMagazines >> _x >> "ACE_asItem") == 1}
}; };
GVAR(customRightPanelButtons) set [_position, [_items apply {_x call EFUNC(common,getConfigName)}, _picture, _tooltip, _moveOnOverwrite]]; GVAR(customRightPanelButtons) set [_position, [_items apply {_x call EFUNC(common,getConfigName)}, _picture, _tooltip, _moveOnOverwrite]];

View File

@ -26,6 +26,14 @@ private _cfgWeapons = configfile >> "CfgWeapons";
private _config = _cfgWeapons >> _item; private _config = _cfgWeapons >> _item;
_item = configName _config; _item = configName _config;
// If the switch config entries are inherited, ignore
if (
(inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo _config) ||
{inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo _config}
) exitWith {
_item // return
};
while { while {
_config = _cfgWeapons >> getText (_config >> "MRT_SwitchItemNextClass"); _config = _cfgWeapons >> getText (_config >> "MRT_SwitchItemNextClass");
isClass _config && {_switchableClasses pushBackUnique configName _config != -1} isClass _config && {_switchableClasses pushBackUnique configName _config != -1}

View File

@ -78,10 +78,10 @@ if (!isNull curatorCamera) then {
// Make face and voice selection JIP compatible; 3DEN doesn't need this though // Make face and voice selection JIP compatible; 3DEN doesn't need this though
if (isMultiplayer && {!is3DEN}) then { if (isMultiplayer && {!is3DEN}) then {
private _id = [QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(centerFace_) + netId GVAR(center)] call CBA_fnc_globalEventJIP; private _id = [QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(centerFace_) + hashValue GVAR(center)] call CBA_fnc_globalEventJIP;
[_id, GVAR(center)] call CBA_fnc_removeGlobalEventJIP; [_id, GVAR(center)] call CBA_fnc_removeGlobalEventJIP;
_id = [QGVAR(broadcastVoice), [GVAR(center), GVAR(currentVoice)], QGVAR(centerVoice_) + netId GVAR(center)] call CBA_fnc_globalEventJIP; _id = [QGVAR(broadcastVoice), [GVAR(center), GVAR(currentVoice)], QGVAR(centerVoice_) + hashValue GVAR(center)] call CBA_fnc_globalEventJIP;
[_id, GVAR(center)] call CBA_fnc_removeGlobalEventJIP; [_id, GVAR(center)] call CBA_fnc_removeGlobalEventJIP;
}; };

View File

@ -69,7 +69,14 @@ switch (_currentItemsIndex) do {
// Secondary weapon // Secondary weapon
case IDX_CURR_SECONDARY_WEAPON_ITEMS: { case IDX_CURR_SECONDARY_WEAPON_ITEMS: {
private _currentItemInSlot = (GVAR(currentItems) select IDX_CURR_SECONDARY_WEAPON_ITEMS) select _itemIndex; private _currentItemInSlot = (GVAR(currentItems) select IDX_CURR_SECONDARY_WEAPON_ITEMS) select _itemIndex;
private _isDisposable = CBA_disposable_replaceDisposableLauncher && {!isNil {CBA_disposable_loadedLaunchers getVariable (secondaryWeapon GVAR(center))}}; private _isDisposable = CBA_disposable_replaceDisposableLauncher && {!isNil "CBA_disposable_loadedLaunchers"} &&
{
if (CBA_disposable_loadedLaunchers isEqualType createHashMap) then { // after CBA 3.18
(secondaryWeapon GVAR(center)) in CBA_disposable_loadedLaunchers
} else {
!isNil {CBA_disposable_loadedLaunchers getVariable (secondaryWeapon player)}
}
};
// If removal // If removal
if (_item == "") then { if (_item == "") then {

View File

@ -160,7 +160,7 @@ private _magazineMiscItems = createHashMap;
{ {
_magazineMiscItems set [configName _x, nil]; _magazineMiscItems set [configName _x, nil];
} forEach ((toString {getNumber (_x >> "ACE_isUnique") == 1}) configClasses _cfgMagazines); } forEach ((toString {getNumber (_x >> "ACE_isUnique") == 1 || getNumber (_x >> "ACE_asItem") == 1}) configClasses _cfgMagazines);
// Remove invalid/non-existent entries // Remove invalid/non-existent entries
_grenadeList deleteAt ""; _grenadeList deleteAt "";

View File

@ -244,7 +244,7 @@ _for do {
// Sort alphabetically, find the previously selected item and select it again // Sort alphabetically, find the previously selected item and select it again
if (_right) then { if (_right) then {
[_panel, 1] lnbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, false]; [_panel, 1] lnbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, true]; // do not support unicode, as it's much more performance intensive (~3x more)
_for do { _for do {
// Remove sorting text, as it blocks the item name otherwise // Remove sorting text, as it blocks the item name otherwise
@ -258,7 +258,7 @@ if (_right) then {
}; };
}; };
} else { } else {
_panel lbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, false]; _panel lbSortBy ["TEXT", _sortDirection == ASCENDING, false, true, true]; // do not support unicode, as it's much more performance intensive (~3x more)
_for do { _for do {
_item = _panel lbData _i; _item = _panel lbData _i;

View File

@ -0,0 +1,26 @@
#include "..\script_component.hpp"
/*
* Author: PabstMirror
* Text statement for the load stat.
*
* Arguments:
* 0: Stats <ARRAY>
* 1: Item config path <CONFIG>
*
* Return Value:
* Stat Text <STRING>
*
* Public: No
*/
params ["_stats", "_config"];
TRACE_2("statTextStatement_load",_stats,_config);
if (!isNull (_config >> "ItemInfo" >> "containerClass")) then { // Uniform/Vest
_config = configfile >> "CfgVehicles" >> getText (_config >> "ItemInfo" >> "containerClass");
};
private _load = getNumber (_config >> (_stats # 0));
if (_load <= 0) exitWith { LELSTRING(common,none) };
format ["%1kg (%2lb)", (_load * 0.1 * (1 / 2.2046)) toFixed 2, (_load * 0.1) toFixed 2]

View File

@ -22,6 +22,10 @@ private _extendedInfo = createHashMap;
// Check if the provided loadout is a CBA extended loadout // Check if the provided loadout is a CBA extended loadout
if (count _loadout == 2) then { if (count _loadout == 2) then {
_extendedInfo = +(_loadout select 1); // Copy the hashmap to prevent events from modifiyng the profileNamespace extendedInfo _extendedInfo = +(_loadout select 1); // Copy the hashmap to prevent events from modifiyng the profileNamespace extendedInfo
if (_extendedInfo isEqualType []) then { // Hashmaps are serialized as arrays, convert back to hashmap
_extendedInfo = createHashMapFromArray _extendedInfo;
_loadout set [1, _extendedInfo]; // Also fix source variable, technically not needed but doesn't hurt
};
_loadout = _loadout select 0; _loadout = _loadout select 0;
}; };

View File

@ -1191,7 +1191,7 @@
<Chinesesimp>支持夜视仪</Chinesesimp> <Chinesesimp>支持夜视仪</Chinesesimp>
<Czech>Podpora nočního vidění</Czech> <Czech>Podpora nočního vidění</Czech>
<Turkish>Gece Görüş Desteği</Turkish> <Turkish>Gece Görüş Desteği</Turkish>
<Korean>야간투시 지원여부</Korean> <Korean>야간투시 지원</Korean>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_supPrim"> <Key ID="STR_ACE_Arsenal_statVisionMode_supPrim">
<English>Primary supported</English> <English>Primary supported</English>
@ -1206,7 +1206,7 @@
<Chinese>主武器支援</Chinese> <Chinese>主武器支援</Chinese>
<Chinesesimp>主镜支持</Chinesesimp> <Chinesesimp>主镜支持</Chinesesimp>
<Czech>Hlavní část hledí podporuje</Czech> <Czech>Hlavní část hledí podporuje</Czech>
<Korean>주무기 지원여부</Korean> <Korean>주무기 지원</Korean>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_supSec"> <Key ID="STR_ACE_Arsenal_statVisionMode_supSec">
<English>Secondary supported</English> <English>Secondary supported</English>
@ -1221,7 +1221,7 @@
<Chinese>次要武器支援</Chinese> <Chinese>次要武器支援</Chinese>
<Chinesesimp>副镜支持</Chinesesimp> <Chinesesimp>副镜支持</Chinesesimp>
<Czech>Vedlejší část hledí podporuje</Czech> <Czech>Vedlejší část hledí podporuje</Czech>
<Korean>보조무기 지원여부</Korean> <Korean>보조무기 지원</Korean>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_intPrim"> <Key ID="STR_ACE_Arsenal_statVisionMode_intPrim">
<English>Primary integrated</English> <English>Primary integrated</English>
@ -1236,17 +1236,25 @@
<Chinese>整合主武器</Chinese> <Chinese>整合主武器</Chinese>
<Chinesesimp>主镜内置</Chinesesimp> <Chinesesimp>主镜内置</Chinesesimp>
<Czech>Integrováno do hlavní části hledí</Czech> <Czech>Integrováno do hlavní části hledí</Czech>
<Korean>주무기 내장여부</Korean> <Korean>주무기 내장</Korean>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_ti"> <Key ID="STR_ACE_Arsenal_statVisionMode_ti">
<English>Thermal integrated</English> <English>Thermal integrated</English>
<Italian>Termico integrato</Italian>
<Japanese>熱画像装置内蔵</Japanese> <Japanese>熱画像装置内蔵</Japanese>
<Russian>Интегрирован в тепловизор.</Russian> <Russian>Интегрирован тепловизор.</Russian>
<Korean>열화상 내장</Korean>
<French>Thermique intégrée</French>
<Spanish>Térmica integrada</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_intPrimTi"> <Key ID="STR_ACE_Arsenal_statVisionMode_intPrimTi">
<English>Thermal &amp; Primary integrated</English> <English>Thermal &amp; Primary integrated</English>
<Italian>Termico e Primario integrato</Italian>
<Japanese>熱画像装置内蔵・プライマリに内蔵</Japanese> <Japanese>熱画像装置内蔵・プライマリに内蔵</Japanese>
<Russian>Интегрирован в тепловизор и осн.прицел.</Russian> <Russian>Интегрирован тепловизор и осн.прицел.</Russian>
<Korean>열화상과 주무기 내장</Korean>
<French>Thermique et primaire intégrés</French>
<Spanish>Térmica y Primaria integrada</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_NoSup"> <Key ID="STR_ACE_Arsenal_statVisionMode_NoSup">
<English>Not Supported</English> <English>Not Supported</English>
@ -1603,6 +1611,7 @@
<French>Décroissant</French> <French>Décroissant</French>
<Portuguese>Decrescente</Portuguese> <Portuguese>Decrescente</Portuguese>
<Russian>Нисходящий</Russian> <Russian>Нисходящий</Russian>
<Spanish>Descendiente</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_sortAscending"> <Key ID="STR_ACE_Arsenal_sortAscending">
<English>Ascending</English> <English>Ascending</English>
@ -1614,6 +1623,7 @@
<French>Croissant</French> <French>Croissant</French>
<Portuguese>Crescente</Portuguese> <Portuguese>Crescente</Portuguese>
<Russian>Восходящий</Russian> <Russian>Восходящий</Russian>
<Spanish>Ascendiente</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_toolsTab"> <Key ID="STR_ACE_Arsenal_toolsTab">
<English>Tools</English> <English>Tools</English>
@ -1641,6 +1651,7 @@
<French>Nombre de munitions</French> <French>Nombre de munitions</French>
<Portuguese>Quantidade de munição</Portuguese> <Portuguese>Quantidade de munição</Portuguese>
<Russian>Количество боеприпасов</Russian> <Russian>Количество боеприпасов</Russian>
<Spanish>Cantidad de munición</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_statIlluminators"> <Key ID="STR_ACE_Arsenal_statIlluminators">
<English>Illuminators</English> <English>Illuminators</English>
@ -1651,6 +1662,7 @@
<Portuguese>Iluminadores</Portuguese> <Portuguese>Iluminadores</Portuguese>
<Japanese>イルミネーター</Japanese> <Japanese>イルミネーター</Japanese>
<Russian>Осветители</Russian> <Russian>Осветители</Russian>
<Spanish>Iluminadores</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_defaultToFavoritesSetting"> <Key ID="STR_ACE_Arsenal_defaultToFavoritesSetting">
<English>Default to Favorites</English> <English>Default to Favorites</English>
@ -1662,6 +1674,7 @@
<French>Favoris par défaut</French> <French>Favoris par défaut</French>
<Portuguese>Favoritos por padrão</Portuguese> <Portuguese>Favoritos por padrão</Portuguese>
<Russian>По умолчанию - Избранное</Russian> <Russian>По умолчанию - Избранное</Russian>
<Spanish>Favoritos por defecto</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_defaultToFavoritesTooltip"> <Key ID="STR_ACE_Arsenal_defaultToFavoritesTooltip">
<English>Controls whether the ACE Arsenal defaults to showing all items or favorites.</English> <English>Controls whether the ACE Arsenal defaults to showing all items or favorites.</English>
@ -1673,6 +1686,7 @@
<French>Contrôle si l'arsenal ACE affiche par défaut tous les éléments ou les favoris.</French> <French>Contrôle si l'arsenal ACE affiche par défaut tous les éléments ou les favoris.</French>
<Portuguese>Controla se o Arsenal ACE exibe por padrão todos os itens ou favoritos.</Portuguese> <Portuguese>Controla se o Arsenal ACE exibe por padrão todos os itens ou favoritos.</Portuguese>
<Russian>Определяет, будет ли в арсенале ACE по умолчанию отображаться все предметы или избранное.</Russian> <Russian>Определяет, будет ли в арсенале ACE по умолчанию отображаться все предметы или избранное.</Russian>
<Spanish>Controla si el Arsenal de ACE muestra por defecto todos los objetos o sólo los favoritos</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_favoritesColorSetting"> <Key ID="STR_ACE_Arsenal_favoritesColorSetting">
<English>Favorites Color</English> <English>Favorites Color</English>
@ -1684,6 +1698,7 @@
<French>Couleurs favorites</French> <French>Couleurs favorites</French>
<Portuguese>Cor dos favoritos</Portuguese> <Portuguese>Cor dos favoritos</Portuguese>
<Russian>Избранный цвет</Russian> <Russian>Избранный цвет</Russian>
<Spanish>Color de Favoritos</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_favoritesColorTooltip"> <Key ID="STR_ACE_Arsenal_favoritesColorTooltip">
<English>Highlight color for favorited items.</English> <English>Highlight color for favorited items.</English>
@ -1695,6 +1710,7 @@
<French>Met en surbrillance les éléments favoris.</French> <French>Met en surbrillance les éléments favoris.</French>
<Portuguese>Cor de destaque para itens favoritados.</Portuguese> <Portuguese>Cor de destaque para itens favoritados.</Portuguese>
<Russian>Выделите цветом любимые предметы.</Russian> <Russian>Выделите цветом любимые предметы.</Russian>
<Spanish>Color de marcado para los objetos favoritos</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_buttonFavoritesTooltip"> <Key ID="STR_ACE_Arsenal_buttonFavoritesTooltip">
<English>Switch between displaying all items or your favorites.\nDouble click while holding Shift to add or remove an item.</English> <English>Switch between displaying all items or your favorites.\nDouble click while holding Shift to add or remove an item.</English>
@ -1706,6 +1722,7 @@
<French>Change entre l'affichage de tous les éléments ou de vos favoris.\nDouble-cliquez en maintenant la touche Maj enfoncée pour ajouter ou supprimer un élément.</French> <French>Change entre l'affichage de tous les éléments ou de vos favoris.\nDouble-cliquez en maintenant la touche Maj enfoncée pour ajouter ou supprimer un élément.</French>
<Portuguese>Alterna entre a exibição de todos os itens ou seus favoritos.\nClique duas vezes enquanto mantém pressionada a tecla Shift para adicionar ou remover um item.</Portuguese> <Portuguese>Alterna entre a exibição de todos os itens ou seus favoritos.\nClique duas vezes enquanto mantém pressionada a tecla Shift para adicionar ou remover um item.</Portuguese>
<Russian>Переключайтесь между отображением всех элементов или ваших избранных.\nДважды щелкните, удерживая Shift, чтобы добавить или удалить элемент.</Russian> <Russian>Переключайтесь между отображением всех элементов или ваших избранных.\nДважды щелкните, удерживая Shift, чтобы добавить или удалить элемент.</Russian>
<Spanish>Alterna entre mostrar todos los objetos o sólo los favoritos.\nDoble click mientras se pulsa Shift para añadir o quitar un objeto.</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_buttonSearchTooltip"> <Key ID="STR_ACE_Arsenal_buttonSearchTooltip">
<English>Search\nCTRL + Click to enable live results</English> <English>Search\nCTRL + Click to enable live results</English>
@ -1714,6 +1731,8 @@
<Japanese>検索\nCTRL + クリックで検索結果の即時表示を有効化</Japanese> <Japanese>検索\nCTRL + クリックで検索結果の即時表示を有効化</Japanese>
<Korean>검색\nCtrl + 클릭으로 실시간 검색 결과를 활성화</Korean> <Korean>검색\nCtrl + 클릭으로 실시간 검색 결과를 활성화</Korean>
<Russian>Поиск\nCtrl + Click для включения результатов в реальном времени</Russian> <Russian>Поиск\nCtrl + Click для включения результатов в реальном времени</Russian>
<French>Recherche\nCTRL + clic pour modifier les résultats tout en écrivant</French>
<Spanish>Buscar\nCTRL + Click habilita los objetos en directo</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,8 +1,10 @@
#include "script_component.hpp" #include "script_component.hpp"
if (!hasInterface) exitWith {};
#include "initKeybinds.inc.sqf" #include "initKeybinds.inc.sqf"
GVAR(active) = false; GVAR(active) = false;
GVAR(initialised) = false; GVAR(initialised) = false;
[QEGVAR(vector,rangefinderData), {_this call FUNC(sord)}] call CBA_fnc_addEventHandler; [QEGVAR(vector,rangefinderData), LINKFUNC(sord)] call CBA_fnc_addEventHandler;

View File

@ -3540,6 +3540,7 @@
<French>Utilisation de l'IA</French> <French>Utilisation de l'IA</French>
<Portuguese>Utilização por IA</Portuguese> <Portuguese>Utilização por IA</Portuguese>
<Russian>Использование ИИ</Russian> <Russian>Использование ИИ</Russian>
<Spanish>Uso de la IA</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Ballistics_ammoUsageShort_illumination"> <Key ID="STR_ACE_Ballistics_ammoUsageShort_illumination">
<English>Illum</English> <English>Illum</English>
@ -3551,6 +3552,7 @@
<French>Fusées éclairantes</French> <French>Fusées éclairantes</French>
<Portuguese>Sinalizadoras</Portuguese> <Portuguese>Sinalizadoras</Portuguese>
<Russian>Осветители</Russian> <Russian>Осветители</Russian>
<Spanish>Iluminación</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Ballistics_ammoUsageShort_concealment"> <Key ID="STR_ACE_Ballistics_ammoUsageShort_concealment">
<English>Smoke</English> <English>Smoke</English>
@ -3562,6 +3564,7 @@
<French>Fumigènes</French> <French>Fumigènes</French>
<Portuguese>Fumígenas</Portuguese> <Portuguese>Fumígenas</Portuguese>
<Russian>Дым</Russian> <Russian>Дым</Russian>
<Spanish>Humo</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Ballistics_ammoUsageShort_infantry"> <Key ID="STR_ACE_Ballistics_ammoUsageShort_infantry">
<English>Inf</English> <English>Inf</English>
@ -3573,6 +3576,7 @@
<French>Infanterie</French> <French>Infanterie</French>
<Portuguese>Infantaria</Portuguese> <Portuguese>Infantaria</Portuguese>
<Russian>Пехота</Russian> <Russian>Пехота</Russian>
<Spanish>Infantería</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Ballistics_ammoUsageShort_lightVehicle"> <Key ID="STR_ACE_Ballistics_ammoUsageShort_lightVehicle">
<English>Veh</English> <English>Veh</English>
@ -3584,6 +3588,7 @@
<French>Véhicule</French> <French>Véhicule</French>
<Portuguese>Veículo</Portuguese> <Portuguese>Veículo</Portuguese>
<Russian>Техника</Russian> <Russian>Техника</Russian>
<Spanish>Vehículo</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Ballistics_ammoUsageShort_armor"> <Key ID="STR_ACE_Ballistics_ammoUsageShort_armor">
<English>Armor</English> <English>Armor</English>
@ -3595,6 +3600,7 @@
<French>Blindage</French> <French>Blindage</French>
<Portuguese>Blindagem</Portuguese> <Portuguese>Blindagem</Portuguese>
<Russian>Бронетехника</Russian> <Russian>Бронетехника</Russian>
<Spanish>Blindados</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Ballistics_ammoUsageShort_aircraft"> <Key ID="STR_ACE_Ballistics_ammoUsageShort_aircraft">
<English>Air</English> <English>Air</English>
@ -3606,6 +3612,7 @@
<French>Aviation</French> <French>Aviation</French>
<Portuguese>Aeronaves</Portuguese> <Portuguese>Aeronaves</Portuguese>
<Russian>Авиация</Russian> <Russian>Авиация</Russian>
<Spanish>Aeronaves</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -25,14 +25,14 @@ if (isServer) then {
}; };
["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler; ["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler;
[QGVAR(moveInCaptive), FUNC(vehicleCaptiveMoveIn)] call CBA_fnc_addEventHandler; [QGVAR(moveInCaptive), LINKFUNC(vehicleCaptiveMoveIn)] call CBA_fnc_addEventHandler;
[QGVAR(moveOutCaptive), FUNC(vehicleCaptiveMoveOut)] call CBA_fnc_addEventHandler; [QGVAR(moveOutCaptive), LINKFUNC(vehicleCaptiveMoveOut)] call CBA_fnc_addEventHandler;
[QGVAR(setHandcuffed), FUNC(setHandcuffed)] call CBA_fnc_addEventHandler; [QGVAR(setHandcuffed), LINKFUNC(setHandcuffed)] call CBA_fnc_addEventHandler;
[QGVAR(setSurrendered), FUNC(setSurrendered)] call CBA_fnc_addEventHandler; [QGVAR(setSurrendered), LINKFUNC(setSurrendered)] call CBA_fnc_addEventHandler;
//Medical Integration Events //Medical Integration Events
["ace_unconscious", FUNC(handleOnUnconscious)] call CBA_fnc_addEventHandler; ["ace_unconscious", LINKFUNC(handleOnUnconscious)] call CBA_fnc_addEventHandler;
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};

View File

@ -27,7 +27,7 @@ if (_isUnconc) then {
}; };
} else { } else {
//Woke up: if handcuffed, goto animation //Woke up: if handcuffed, goto animation
if (_unit getVariable [QGVAR(isHandcuffed), false] && {vehicle _unit == _unit}) then { if (_unit getVariable [QGVAR(isHandcuffed), false] && {isNull objectParent _unit}) then {
[_unit] call EFUNC(common,fixLoweredRifleAnimation); [_unit] call EFUNC(common,fixLoweredRifleAnimation);
[_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation);
}; };

View File

@ -146,6 +146,7 @@
<Korean>포로 눈 가리기</Korean> <Korean>포로 눈 가리기</Korean>
<Japanese>目隠しをする</Japanese> <Japanese>目隠しをする</Japanese>
<Russian>Завязать глаза пленному</Russian> <Russian>Завязать глаза пленному</Russian>
<Spanish>Vendar ojos al prisionero</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Captives_RemoveBlindfoldCaptive"> <Key ID="STR_ACE_Captives_RemoveBlindfoldCaptive">
<English>Remove blindfold</English> <English>Remove blindfold</English>
@ -156,6 +157,7 @@
<Korean>눈가리개 풀기</Korean> <Korean>눈가리개 풀기</Korean>
<Japanese>目隠しを外す</Japanese> <Japanese>目隠しを外す</Japanese>
<Russian>Снять повязку с глаз</Russian> <Russian>Снять повязку с глаз</Russian>
<Spanish>Quitar vendas de los ojos</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Captives_CableTie"> <Key ID="STR_ACE_Captives_CableTie">
<English>Cable Tie</English> <English>Cable Tie</English>
@ -486,7 +488,7 @@
<Chinesesimp>设置在光标下的单位成俘虏状态。</Chinesesimp> <Chinesesimp>设置在光标下的单位成俘虏状态。</Chinesesimp>
<Korean>커서의 병력을 포박합니다.</Korean> <Korean>커서의 병력을 포박합니다.</Korean>
<Polish>Ustawia jednostkę pod kursorem jako jeniec.</Polish> <Polish>Ustawia jednostkę pod kursorem jako jeniec.</Polish>
<Russian>Арестовывает указанный курсором юнит</Russian> <Russian>Арестовывает указанный курсором юнит.</Russian>
<Portuguese>Torna a unidade sob o cursor um prisioneiro</Portuguese> <Portuguese>Torna a unidade sob o cursor um prisioneiro</Portuguese>
<French>Capture l'unité sous le curseur.</French> <French>Capture l'unité sous le curseur.</French>
<Czech>Nastaví jednotku pod kurzorem jako zajatce.</Czech> <Czech>Nastaví jednotku pod kurzorem jako zajatce.</Czech>

View File

@ -48,15 +48,7 @@ class CfgVehicles {
class Car: LandVehicle { class Car: LandVehicle {
GVAR(space) = 4; GVAR(space) = 4;
GVAR(hasCargo) = 1; GVAR(hasCargo) = 1;
class ACE_Cargo { class ADDON {};
/*
class Cargo {
class ACE_medicalSupplyCrate {
type = "ACE_medicalSupplyCrate";
amount = 1;
};
};*/
};
}; };
class Tank: LandVehicle { class Tank: LandVehicle {
@ -75,7 +67,7 @@ class CfgVehicles {
GVAR(hasCargo) = 1; GVAR(hasCargo) = 1;
}; };
// HEMTTs - Default at 10, some variants are altered based on model size and/or expected level of free space inside. // HEMTTs - Default at 30, some variants are altered based on model size and/or expected level of free space inside.
class Truck_01_base_F: Truck_F { class Truck_01_base_F: Truck_F {
GVAR(space) = 30; GVAR(space) = 30;
}; };
@ -510,7 +502,7 @@ class CfgVehicles {
}; };
GVAR(space) = 2; GVAR(space) = 2;
GVAR(hasCargo) = 2; GVAR(hasCargo) = 1;
GVAR(size) = 3; GVAR(size) = 3;
GVAR(canLoad) = 1; GVAR(canLoad) = 1;
@ -523,8 +515,9 @@ class CfgVehicles {
class EventHandlers { class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
}; };
GVAR(space) = 3; GVAR(space) = 3;
GVAR(hasCargo) = 3; GVAR(hasCargo) = 1;
GVAR(size) = 3; GVAR(size) = 3;
GVAR(canLoad) = 1; GVAR(canLoad) = 1;

View File

@ -86,7 +86,7 @@ GVAR(vehicleAction) = [
GVAR(enable) && GVAR(enable) &&
{alive _target} && {alive _target} &&
{locked _target < 2} && {locked _target < 2} &&
{(_target getVariable [QGVAR(hasCargo), getNumber (configOf _target >> QGVAR(hasCargo)) == 1])} && {_target getVariable [QGVAR(hasCargo), getNumber (configOf _target >> QGVAR(hasCargo)) == 1]} &&
{[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} && {[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} &&
{[_player, _target] call EFUNC(interaction,canInteractWithVehicleCrew)} && {[_player, _target] call EFUNC(interaction,canInteractWithVehicleCrew)} &&
{([_player, _target] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} {([_player, _target] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE}

View File

@ -7,9 +7,10 @@
* 0: Item to be loaded <STRING> or <OBJECT> * 0: Item to be loaded <STRING> or <OBJECT>
* 1: Holder object (vehicle) <OBJECT> * 1: Holder object (vehicle) <OBJECT>
* 2: Amount <NUMBER> (default: 1) * 2: Amount <NUMBER> (default: 1)
* 3: Ignore interaction distance and stability checks <BOOL> (default: false)
* *
* Return Value: * Return Value:
* None * Objects loaded <NUMBER>
* *
* Example: * Example:
* ["ACE_Wheel", cursorObject] call ace_cargo_fnc_addCargoItem * ["ACE_Wheel", cursorObject] call ace_cargo_fnc_addCargoItem
@ -17,21 +18,29 @@
* Public: No * Public: No
*/ */
params ["_item", "_vehicle", ["_amount", 1]]; params ["_item", "_vehicle", ["_amount", 1], ["_ignoreInteraction", false]];
TRACE_3("params",_item,_vehicle,_amount); TRACE_4("params",_item,_vehicle,_amount,_ignoreInteraction);
private _loaded = 0;
// Get config sensitive case name // Get config sensitive case name
if (_item isEqualType "") then { if (_item isEqualType "") then {
_item = _item call EFUNC(common,getConfigName); _item = _item call EFUNC(common,getConfigName);
for "_i" from 1 to _amount do { for "_i" from 1 to _amount do {
[_item, _vehicle] call FUNC(loadItem); if !([_item, _vehicle, _ignoreInteraction] call FUNC(loadItem)) exitWith {};
_loaded = _loaded + 1;
}; };
} else { } else {
[_item, _vehicle] call FUNC(loadItem); _loaded = parseNumber ([_item, _vehicle, _ignoreInteraction] call FUNC(loadItem));
_item = typeOf _item; _item = typeOf _item;
}; };
TRACE_1("loaded",_loaded);
// Invoke listenable event // Invoke listenable event
["ace_cargoAdded", [_item, _vehicle, _amount]] call CBA_fnc_globalEvent; ["ace_cargoAdded", [_item, _vehicle, _loaded]] call CBA_fnc_globalEvent;
_loaded // return

View File

@ -22,11 +22,11 @@ private _type = typeOf _vehicle;
private _config = configOf _vehicle; private _config = configOf _vehicle;
// If vehicle had space given to it via eden/public, then override config hasCargo setting // If vehicle had space given to it via eden/public, then override config hasCargo setting
private _hasCargoPublic = _item getVariable QGVAR(hasCargo); private _hasCargoPublic = _vehicle getVariable QGVAR(hasCargo);
private _hasCargoPublicDefined = !isNil "_canLoadPublic"; private _hasCargoPublicDefined = !isNil "_hasCargoPublic";
if (_hasCargoPublicDefined && {!(_hasCargoPublic isEqualType false)}) then { if (_hasCargoPublicDefined && {!(_hasCargoPublic isEqualType false)}) then {
WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_item,_type,QGVAR(hasCargo),_hasCargoPublic); WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_vehicle,_type,QGVAR(hasCargo),_hasCargoPublic);
}; };
private _hasCargoConfig = getNumber (_config >> QGVAR(hasCargo)) == 1; private _hasCargoConfig = getNumber (_config >> QGVAR(hasCargo)) == 1;
@ -52,14 +52,21 @@ if (isServer) then {
private _cargoClassname = ""; private _cargoClassname = "";
private _cargoCount = 0; private _cargoCount = 0;
private _loaded = 0;
{ {
_cargoClassname = getText (_x >> "type"); _cargoClassname = getText (_x >> "type");
_cargoCount = getNumber (_x >> "amount"); _cargoCount = getNumber (_x >> "amount");
TRACE_3("adding ACE_Cargo",configName _x,_cargoClassname,_cargoCount); TRACE_3("adding ace_cargo",configName _x,_cargoClassname,_cargoCount);
["ace_addCargo", [_cargoClassname, _vehicle, _cargoCount]] call CBA_fnc_localEvent; // Ignore stability check (distance check is also ignored with this, but it's ignored by default if item is a string)
_loaded = [_cargoClassname, _vehicle, _cargoCount, true] call FUNC(addCargoItem);
// Let loop continue until the end, so that it prints everything into the rpt (there might be smaller items that could still fit in cargo)
if (_loaded != _cargoCount) then {
WARNING_5("%1 (%2) could not fit %3 %4 inside its cargo, only %5 were loaded.",_vehicle,_type,_cargoCount,_cargoClassname,_loaded);
};
} forEach ("true" configClasses (_config >> QUOTE(ADDON) >> "cargo")); } forEach ("true" configClasses (_config >> QUOTE(ADDON) >> "cargo"));
}; };

View File

@ -35,8 +35,12 @@
</Key> </Key>
<Key ID="STR_ACE_Cargo_deployObject"> <Key ID="STR_ACE_Cargo_deployObject">
<English>Deploy</English> <English>Deploy</English>
<Italian>Piazza</Italian>
<Russian>Разместить</Russian> <Russian>Разместить</Russian>
<Japanese>配置する</Japanese> <Japanese>配置する</Japanese>
<Korean>배치하기</Korean>
<French>Déployer</French>
<Spanish>Desplegar</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Cargo_ScrollAction"> <Key ID="STR_ACE_Cargo_ScrollAction">
<English>Raise/Lower | (Ctrl + Scroll) Rotate</English> <English>Raise/Lower | (Ctrl + Scroll) Rotate</English>
@ -279,14 +283,20 @@
<Key ID="STR_ACE_Cargo_LoadingItem"> <Key ID="STR_ACE_Cargo_LoadingItem">
<English>Loading %1 into %2...</English> <English>Loading %1 into %2...</English>
<Spanish>Cargando %1 en %2...</Spanish> <Spanish>Cargando %1 en %2...</Spanish>
<Italian>Caricando %1 in %2...</Italian>
<Japanese>%1 を %2 に積み込んでいます・・・</Japanese> <Japanese>%1 を %2 に積み込んでいます・・・</Japanese>
<Russian>Загружаем %1 в %2...</Russian> <Russian>Загружаем %1 в %2...</Russian>
<Korean>%1을(를) %2에 싣는 중...</Korean>
<French>Chargement %1 dans %2...</French>
</Key> </Key>
<Key ID="STR_ACE_Cargo_UnloadingItem"> <Key ID="STR_ACE_Cargo_UnloadingItem">
<English>Unloading %1 from %2...</English> <English>Unloading %1 from %2...</English>
<Spanish>Descargando %1 de %2...</Spanish> <Spanish>Descargando %1 de %2...</Spanish>
<Italian>Scaricando %1 da %2...</Italian>
<Japanese>%1 を %2 から降ろしています・・・</Japanese> <Japanese>%1 を %2 から降ろしています・・・</Japanese>
<Russian>Выгружаем %1 из %2...</Russian> <Russian>Выгружаем %1 из %2...</Russian>
<Korean>%1을(를) %2(으)로부터 내리는 중...</Korean>
<French>Déchargement %1 de %2...</French>
</Key> </Key>
<Key ID="STR_ACE_Cargo_LoadingFailed"> <Key ID="STR_ACE_Cargo_LoadingFailed">
<English>%1&lt;br/&gt;could not be loaded</English> <English>%1&lt;br/&gt;could not be loaded</English>
@ -328,6 +338,7 @@
<Japanese>荷降ろし不可能です</Japanese> <Japanese>荷降ろし不可能です</Japanese>
<Korean>하역할 수가 없습니다</Korean> <Korean>하역할 수가 없습니다</Korean>
<Russian>Не может быть выгружен</Russian> <Russian>Не может быть выгружен</Russian>
<Spanish>No puede ser descargado</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Cargo_SizeMenu"> <Key ID="STR_ACE_Cargo_SizeMenu">
<English>Cargo Size: %1</English> <English>Cargo Size: %1</English>
@ -337,6 +348,7 @@
<Japanese>貨物のサイズ: %1</Japanese> <Japanese>貨物のサイズ: %1</Japanese>
<Korean>화물 크기: %1</Korean> <Korean>화물 크기: %1</Korean>
<Russian>Размер груза: %1</Russian> <Russian>Размер груза: %1</Russian>
<Spanish>Tamaño de carga: %1</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Cargo_customName_edenName"> <Key ID="STR_ACE_Cargo_customName_edenName">
<English>Custom Name</English> <English>Custom Name</English>
@ -504,10 +516,10 @@
<Key ID="STR_ACE_Cargo_loadTimeCoefficient_description"> <Key ID="STR_ACE_Cargo_loadTimeCoefficient_description">
<English>Modifies how long it takes to load/unload items.\nTime, in seconds, is the size of the item multiplied by this value.</English> <English>Modifies how long it takes to load/unload items.\nTime, in seconds, is the size of the item multiplied by this value.</English>
<German>Gibt an, wie lange das Laden / Entladen von Gegenständen dauern soll.\nZeit in Sekunden, die mit der Größe des Gegenstandes multipliziert wird.</German> <German>Gibt an, wie lange das Laden / Entladen von Gegenständen dauern soll.\nZeit in Sekunden, die mit der Größe des Gegenstandes multipliziert wird.</German>
<Japanese>貨物の積み込み/積み下ろしに掛かる時間を変更します。\n時間 (秒) は、貨物のサイズにこの値を掛けたものです。</Japanese> <Japanese>貨物の積み込み/積み下ろしに掛かる時間を変更します。\n時間 (秒単位) は、貨物のサイズにこの値を掛けたものです。</Japanese>
<Polish>Modyfikuje, jak długo zajmuje załadowywanie/wyładowywanie przedmiotów. \nCzasem, w sekundach, jest wielkość przedmiotu razy jego wartość.</Polish> <Polish>Modyfikuje, jak długo zajmuje załadowywanie/wyładowywanie przedmiotów. \nCzasem, w sekundach, jest wielkość przedmiotu razy jego wartość.</Polish>
<Italian>Modifica il tempo impiegato per caricare o scaricare gli oggetti.\nIl tempo, in secondi, equivale alla dimensione dell'oggetto moltiplicata per questo valore</Italian> <Italian>Modifica il tempo impiegato per caricare o scaricare gli oggetti.\nIl tempo, in secondi, equivale alla dimensione dell'oggetto moltiplicata per questo valore</Italian>
<Russian>Изменяет время для загрузки/выгрузки предметов. \n Время (сек) - это размер предмета, умноженный на это значение.</Russian> <Russian>Изменяет время для загрузки/выгрузки предметов. \nВремя (сек) - это размер предмета, умноженный на это значение.</Russian>
<Portuguese>Coeficiente de quanto tempo leva para carregar/descarregar itens.\nTempo, em segundos, é o tamanho do objeto multiplicado por esse valor.</Portuguese> <Portuguese>Coeficiente de quanto tempo leva para carregar/descarregar itens.\nTempo, em segundos, é o tamanho do objeto multiplicado por esse valor.</Portuguese>
<French>Modifie le temps nécessaire pour charger/décharger des objets.\nLe temps, en secondes, est calculé en multipliant la taille de l'élément par ce coefficient.</French> <French>Modifie le temps nécessaire pour charger/décharger des objets.\nLe temps, en secondes, est calculé en multipliant la taille de l'élément par ce coefficient.</French>
<Chinese>修改要花多長時間來裝載/卸載物品。\n時間以秒為單位而物品的大小數值與這個係數成比。</Chinese> <Chinese>修改要花多長時間來裝載/卸載物品。\n時間以秒為單位而物品的大小數值與這個係數成比。</Chinese>
@ -570,13 +582,21 @@
</Key> </Key>
<Key ID="STR_ACE_Cargo_enableDeploy"> <Key ID="STR_ACE_Cargo_enableDeploy">
<English>Enable deploy</English> <English>Enable deploy</English>
<Italian>Abilita Piazzamento</Italian>
<Russian>Включить размещение</Russian> <Russian>Включить размещение</Russian>
<Japanese>配置機能を有効化</Japanese> <Japanese>配置機能を有効化</Japanese>
<Korean>배치 활성화</Korean>
<French>Permettre le placement</French>
<Spanish>Habilitar despliegue</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Cargo_enableDeploy_description"> <Key ID="STR_ACE_Cargo_enableDeploy_description">
<English>Controls whether cargo items can be unloaded via the deploy method.</English> <English>Controls whether cargo items can be unloaded via the deploy method.</English>
<Italian>Determina se oggetti in carico possono essere scaricati e piazzati direttamente.</Italian>
<Russian>Определяет, можно ли выгружать грузы с помощью метода размещения.</Russian> <Russian>Определяет, можно ли выгружать грузы с помощью метода размещения.</Russian>
<Japanese>配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。</Japanese> <Japanese>配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。</Japanese>
<Korean>배치 방법을 통해 화물 아이템을 내릴 수 있는지 여부를 제어합니다.</Korean>
<French>Contrôler si les éléments de cargaison peuvent être déchargés via la méthode de déploiement.</French>
<Spanish>Controla si los objetos de la carga pueden ser descargados mediante el método de despliegue.</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -0,0 +1,6 @@
class CfgVehicles {
class FxCartridge;
class FxCartridge_65_caseless: FxCartridge {
GVAR(model) = ""; // note: the vanilla 6.5 caseless don't actually use this, just being safe
};
};

View File

@ -15,3 +15,4 @@ class CfgPatches {
}; };
#include "CfgEventHandlers.hpp" #include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"

View File

@ -20,31 +20,30 @@ params ["_unit", "", "", "", "_ammo"];
if (!isNull objectParent _unit) exitWith {}; if (!isNull objectParent _unit) exitWith {};
private _modelPath = GVAR(cachedCasings) get _ammo;
if (isNil "_modelPath") then { private _modelPath = GVAR(cachedCasings) getOrDefaultCall [_ammo, {
private _cartridge = getText (configFile >> "CfgAmmo" >> _ammo >> "cartridge"); private _cartridge = getText (configFile >> "CfgAmmo" >> _ammo >> "cartridge");
//Default cartridge is a 5.56mm model if (_cartridge == "") then { // return (note: can't use exitWith)
_modelPath = switch (_cartridge) do { ""
case "FxCartridge_9mm": { "A3\Weapons_f\ammo\cartridge_small.p3d" }; } else {
case "FxCartridge_65": { "A3\weapons_f\ammo\cartridge_65.p3d" }; private _cartridgeConfig = configFile >> "CfgVehicles" >> _cartridge;
case "FxCartridge_762": { "A3\weapons_f\ammo\cartridge_762.p3d" };
case "FxCartridge_762x39": { "A3\weapons_f_enoch\ammo\cartridge_762x39.p3d" }; // if explicitly defined, use ACE's config
case "FxCartridge_93x64_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_93x64.p3d" }; if (isText (_cartridgeConfig >> QGVAR(model))) exitWith {
case "FxCartridge_338_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_338_LM.p3d" }; getText (_cartridgeConfig >> QGVAR(model))
case "FxCartridge_338_NM": { "A3\Weapons_F_Mark\Ammo\cartridge_338_NM.p3d" };
case "FxCartridge_127": { "A3\weapons_f\ammo\cartridge_127.p3d" };
case "FxCartridge_127x54": { "A3\Weapons_F_Mark\Ammo\cartridge_127x54.p3d" };
case "FxCartridge_slug": { "A3\weapons_f\ammo\cartridge_slug.p3d" };
case "FxCartridge_12Gauge_HE_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_he_lxws.p3d" };
case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" };
case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" };
case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" };
case "": { "" };
default { "A3\Weapons_f\ammo\cartridge.p3d" };
}; };
GVAR(cachedCasings) set [_ammo, _modelPath]; // use casing's default model
}; private _model = getText (_cartridgeConfig >> "model");
if ("a3\weapons_f\empty" in toLowerANSI _model) exitWith { "" };
// Add file extension if missing (fileExists needs file extension)
if ((_model select [count _model - 4]) != ".p3d") then {
_model = _model + ".p3d";
};
["", _model] select (fileExists _model)
};
}, true];
if (_modelPath isEqualTo "") exitWith {}; if (_modelPath isEqualTo "") exitWith {};

View File

@ -2,6 +2,6 @@
if (!hasInterface) exitWith {}; if (!hasInterface) exitWith {};
["ace_firedPlayer", DFUNC(throwEH)] call CBA_fnc_addEventHandler; ["ace_firedPlayer", LINKFUNC(throwEH)] call CBA_fnc_addEventHandler;
// ["ace_firedPlayerNonLocal", DFUNC(throwEH)] call CBA_fnc_addEventHandler; // ["ace_firedPlayerNonLocal", LINKFUNC(throwEH)] call CBA_fnc_addEventHandler;
// ["ace_firedNonPlayer", DFUNC(throwEH)] call CBA_fnc_addEventHandler; // ["ace_firedNonPlayer", LINKFUNC(throwEH)] call CBA_fnc_addEventHandler;

View File

@ -355,7 +355,7 @@
</Key> </Key>
<Key ID="STR_ACE_Chemlights_HiGreen_DisplayName"> <Key ID="STR_ACE_Chemlights_HiGreen_DisplayName">
<English>Chemlight (Hi Green)</English> <English>Chemlight (Hi Green)</English>
<French>Cyalume HL (vert)</French> <French>Cyalume HL (Vert)</French>
<German>Knicklicht (Grün, Hell)</German> <German>Knicklicht (Grün, Hell)</German>
<Japanese>ケミカルライト(高輝度 緑)</Japanese> <Japanese>ケミカルライト(高輝度 緑)</Japanese>
<Polish>Świetlik (jaskrawy zielony)</Polish> <Polish>Świetlik (jaskrawy zielony)</Polish>
@ -533,9 +533,9 @@
<English>Chemlight Shield (Green)</English> <English>Chemlight Shield (Green)</English>
<Japanese>ケミカルライト シールド(緑)</Japanese> <Japanese>ケミカルライト シールド(緑)</Japanese>
<Polish>Osłona na świetlik (zielona)</Polish> <Polish>Osłona na świetlik (zielona)</Polish>
<German>Knicklicht-Abschirmung (grün)</German> <German>Knicklicht-Abschirmung (Grün)</German>
<Korean>화학조명 가림막 (초록)</Korean> <Korean>화학조명 가림막 (초록)</Korean>
<French>Etui avec cyalume (vert)</French> <French>Etui avec cyalume (Vert)</French>
<Italian>Scudo Luce Chimica (Verde)</Italian> <Italian>Scudo Luce Chimica (Verde)</Italian>
<Chinese>螢光棒保護殼 (綠色)</Chinese> <Chinese>螢光棒保護殼 (綠色)</Chinese>
<Chinesesimp>荧光棒保护壳(绿色)</Chinesesimp> <Chinesesimp>荧光棒保护壳(绿色)</Chinesesimp>

View File

@ -1,5 +1,6 @@
class CfgMovesBasic { class CfgMovesBasic {
class Default; class Default;
// From ACRE // From ACRE
class ManActions { class ManActions {
GVAR(stop) = QGVAR(stop); GVAR(stop) = QGVAR(stop);
@ -82,5 +83,14 @@ class CfgMovesMaleSdr: CfgMovesBasic {
class AinvPknlMstpSnonWnonDnon_medic0: HealBase { class AinvPknlMstpSnonWnonDnon_medic0: HealBase {
variantsPlayer[] = {}; variantsPlayer[] = {};
}; };
// Idle affects legs when weapon switching - fixes units sliding when holstering weapons
class AmovPercMstpSnonWnonDnon: StandBase {
idle = "";
};
// Need to reset idle, as it breaks animations otherwise
class CutSceneAnimationBase: AmovPercMstpSnonWnonDnon {
idle = "idleDefault";
};
}; };
}; };

View File

@ -13,6 +13,7 @@ PREP(addLineToDebugDraw);
PREP(addSwayFactor); PREP(addSwayFactor);
PREP(addToInventory); PREP(addToInventory);
PREP(addWeapon); PREP(addWeapon);
PREP(adjustMagazineAmmo);
PREP(assignedItemFix); PREP(assignedItemFix);
PREP(assignObjectsInList); PREP(assignObjectsInList);
PREP(ambientBrightness); PREP(ambientBrightness);

View File

@ -18,7 +18,7 @@
////////////////////////////////////////////////// //////////////////////////////////////////////////
//Status Effect EHs: //Status Effect EHs:
[QGVAR(setStatusEffect), {_this call FUNC(statusEffect_set)}] call CBA_fnc_addEventHandler; [QGVAR(setStatusEffect), LINKFUNC(statusEffect_set)] call CBA_fnc_addEventHandler;
["forceWalk", false, ["ace_advanced_fatigue", "ACE_SwitchUnits", "ACE_Attach", "ace_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_Sandbag", "ACE_refuel", "ACE_rearm", "ACE_Trenches", "ace_medical_fracture"]] call FUNC(statusEffect_addType); ["forceWalk", false, ["ace_advanced_fatigue", "ACE_SwitchUnits", "ACE_Attach", "ace_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_Sandbag", "ACE_refuel", "ACE_rearm", "ACE_Trenches", "ace_medical_fracture"]] call FUNC(statusEffect_addType);
["blockSprint", false, ["ace_advanced_fatigue", "ace_dragging", "ace_medical_fracture"]] call FUNC(statusEffect_addType); ["blockSprint", false, ["ace_advanced_fatigue", "ace_dragging", "ace_medical_fracture"]] call FUNC(statusEffect_addType);
["setCaptive", true, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered)]] call FUNC(statusEffect_addType); ["setCaptive", true, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered)]] call FUNC(statusEffect_addType);
@ -145,8 +145,7 @@ if (isServer) then {
INFO_3("[%1] DC - Was Zeus [%2] while controlling unit [%3] - manually clearing `bis_fnc_moduleRemoteControl_owner`",[_x] call FUNC(getName),_dcPlayer,_x); INFO_3("[%1] DC - Was Zeus [%2] while controlling unit [%3] - manually clearing `bis_fnc_moduleRemoteControl_owner`",[_x] call FUNC(getName),_dcPlayer,_x);
_x setVariable ["bis_fnc_moduleRemoteControl_owner", nil, true]; _x setVariable ["bis_fnc_moduleRemoteControl_owner", nil, true];
}; };
nil } forEach (curatorEditableObjects _zeusLogic);
} count (curatorEditableObjects _zeusLogic);
}; };
}]; }];
}; };
@ -157,9 +156,9 @@ if (isServer) then {
INFO_2("Headbug Used: Name: %1, Animation: %2",_profileName,_animation); INFO_2("Headbug Used: Name: %1, Animation: %2",_profileName,_animation);
}] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler;
[QGVAR(fixCollision), FUNC(fixCollision)] call CBA_fnc_addEventHandler; [QGVAR(fixCollision), LINKFUNC(fixCollision)] call CBA_fnc_addEventHandler;
[QGVAR(fixFloating), FUNC(fixFloating)] call CBA_fnc_addEventHandler; [QGVAR(fixFloating), LINKFUNC(fixFloating)] call CBA_fnc_addEventHandler;
[QGVAR(fixPosition), FUNC(fixPosition)] call CBA_fnc_addEventHandler; [QGVAR(fixPosition), LINKFUNC(fixPosition)] call CBA_fnc_addEventHandler;
["ace_loadPersonEvent", LINKFUNC(loadPersonLocal)] call CBA_fnc_addEventHandler; ["ace_loadPersonEvent", LINKFUNC(loadPersonLocal)] call CBA_fnc_addEventHandler;
["ace_unloadPersonEvent", LINKFUNC(unloadPersonLocal)] call CBA_fnc_addEventHandler; ["ace_unloadPersonEvent", LINKFUNC(unloadPersonLocal)] call CBA_fnc_addEventHandler;
@ -209,8 +208,8 @@ if (isServer) then {
}] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler;
// Request framework // Request framework
[QGVAR(requestCallback), FUNC(requestCallback)] call CBA_fnc_addEventHandler; [QGVAR(requestCallback), LINKFUNC(requestCallback)] call CBA_fnc_addEventHandler;
[QGVAR(receiveRequest), FUNC(receiveRequest)] call CBA_fnc_addEventHandler; [QGVAR(receiveRequest), LINKFUNC(receiveRequest)] call CBA_fnc_addEventHandler;
[QGVAR(systemChatGlobal), {systemChat _this}] call CBA_fnc_addEventHandler; [QGVAR(systemChatGlobal), {systemChat _this}] call CBA_fnc_addEventHandler;
@ -219,7 +218,7 @@ if (isServer) then {
[QGVAR(enableSimulationGlobal), {(_this select 0) enableSimulationGlobal (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(enableSimulationGlobal), {(_this select 0) enableSimulationGlobal (_this select 1)}] call CBA_fnc_addEventHandler;
[QGVAR(setShotParents), {(_this select 0) setShotParents [_this select 1, _this select 2]}] call CBA_fnc_addEventHandler; [QGVAR(setShotParents), {(_this select 0) setShotParents [_this select 1, _this select 2]}] call CBA_fnc_addEventHandler;
["ace_setOwner", {(_this select 0) setOwner (_this select 1)}] call CBA_fnc_addEventHandler; ["ace_setOwner", {(_this select 0) setOwner (_this select 1)}] call CBA_fnc_addEventHandler;
[QGVAR(serverLog), FUNC(serverLog)] call CBA_fnc_addEventHandler; [QGVAR(serverLog), LINKFUNC(serverLog)] call CBA_fnc_addEventHandler;
[QGVAR(claimSafe), LINKFUNC(claimSafeServer)] call CBA_fnc_addEventHandler; [QGVAR(claimSafe), LINKFUNC(claimSafeServer)] call CBA_fnc_addEventHandler;
}; };
@ -236,14 +235,14 @@ if (!isServer) then {
["ACEa", [player]] call CBA_fnc_serverEvent; ["ACEa", [player]] call CBA_fnc_serverEvent;
}] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler;
} else { } else {
["ACEa", FUNC(_handleRequestAllSyncedEvents)] call CBA_fnc_addEventHandler; ["ACEa", LINKFUNC(_handleRequestAllSyncedEvents)] call CBA_fnc_addEventHandler;
}; };
["ACEe", FUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler; ["ACEe", LINKFUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler;
["ACEs", FUNC(_handleRequestSyncedEvent)] call CBA_fnc_addEventHandler; ["ACEs", LINKFUNC(_handleRequestSyncedEvent)] call CBA_fnc_addEventHandler;
if (isServer) then { if (isServer) then {
[FUNC(syncedEventPFH), 0.5, []] call CBA_fnc_addPerFrameHandler; [LINKFUNC(syncedEventPFH), 0.5, []] call CBA_fnc_addPerFrameHandler;
}; };
@ -392,8 +391,8 @@ addMissionEventHandler ["PlayerViewChanged", {
// Eventhandlers for player controlled machines // Eventhandlers for player controlled machines
////////////////////////////////////////////////// //////////////////////////////////////////////////
[QGVAR(displayTextStructured), {_this call FUNC(displayTextStructured)}] call CBA_fnc_addEventHandler; [QGVAR(displayTextStructured), LINKFUNC(displayTextStructured)] call CBA_fnc_addEventHandler;
[QGVAR(displayTextPicture), {_this call FUNC(displayTextPicture)}] call CBA_fnc_addEventHandler; [QGVAR(displayTextPicture), LINKFUNC(displayTextPicture)] call CBA_fnc_addEventHandler;
["ace_unconscious", { ["ace_unconscious", {
params ["_unit", "_isUnconscious"]; params ["_unit", "_isUnconscious"];
@ -403,7 +402,7 @@ addMissionEventHandler ["PlayerViewChanged", {
}; };
}] call CBA_fnc_addEventHandler; }] call CBA_fnc_addEventHandler;
["ace_useItem", DFUNC(useItem)] call CBA_fnc_addEventHandler; ["ace_useItem", LINKFUNC(useItem)] call CBA_fnc_addEventHandler;
////////////////////////////////////////////////// //////////////////////////////////////////////////
@ -499,10 +498,24 @@ GVAR(reloadMutex_lastMagazines) = [];
// Start the sway loop // Start the sway loop
////////////////////////////////////////////////// //////////////////////////////////////////////////
["CBA_settingsInitialized", { ["CBA_settingsInitialized", {
["multiplier", {
switch (true) do {
case (isWeaponRested ACE_player): {
GVAR(swayFactor) * GVAR(restedSwayFactor)
};
case (isWeaponDeployed ACE_player): {
GVAR(swayFactor) * GVAR(deployedSwayFactor)
};
default {
GVAR(swayFactor)
};
};
}, QUOTE(ADDON)] call FUNC(addSwayFactor);
[{ [{
// frame after settingsInitialized to ensure all other addons have added their factors // frame after settingsInitialized to ensure all other addons have added their factors
if ((GVAR(swayFactorsBaseline) + GVAR(swayFactorsMultiplier)) isNotEqualTo []) then { if (GVAR(enableSway)) then {
call FUNC(swayLoop) call FUNC(swayLoop);
}; };
// check for pre-3.16 sway factors being added // check for pre-3.16 sway factors being added
if (!isNil {missionNamespace getVariable "ACE_setCustomAimCoef"}) then { if (!isNil {missionNamespace getVariable "ACE_setCustomAimCoef"}) then {

View File

@ -43,8 +43,7 @@ if (isServer) then {
{ {
_x params ["", "_eventArgs","_ttl"]; _x params ["", "_eventArgs","_ttl"];
[_eventName, _eventArgs, _ttl] call FUNC(_handleSyncedEvent); [_eventName, _eventArgs, _ttl] call FUNC(_handleSyncedEvent);
false } forEach _eventLog;
} count _eventLog;
INFO_1("[%1] synchronized",_eventName); INFO_1("[%1] synchronized",_eventName);
}; };

View File

@ -24,7 +24,7 @@ if (_name in GVAR(syncedEvents)) exitWith {
false false
}; };
private _eventId = [_name, FUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler; private _eventId = [_name, LINKFUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler;
private _data = [_handler, [], _ttl, _eventId]; private _data = [_handler, [], _ttl, _eventId];
GVAR(syncedEvents) set [_name, _data]; GVAR(syncedEvents) set [_name, _data];

View File

@ -1,7 +1,7 @@
#include "..\script_component.hpp" #include "..\script_component.hpp"
/* /*
* Author: Garth 'L-H' de Wet * Author: Garth 'L-H' de Wet
* Adds an item, weapon, or magazine to the unit's inventory or places it in a weaponHolder if no space. * Adds an item, weapon, or magazine to the unit's inventory or places it in a weapon holder if no space.
* *
* Arguments: * Arguments:
* 0: Unit <OBJECT> * 0: Unit <OBJECT>
@ -11,10 +11,10 @@
* *
* Return Value: * Return Value:
* 0: Added to player <BOOL> * 0: Added to player <BOOL>
* 1: weaponholder <OBJECT> * 1: Weapon holder item was placed in <OBJECT>
* *
* Example: * Example:
* [bob, "classname", "", 5] call ace_common_fnc_addToInventory * [player, "30Rnd_65x39_caseless_mag", "", 5] call ace_common_fnc_addToInventory
* *
* Public: Yes * Public: Yes
*/ */
@ -26,6 +26,7 @@ private _type = _classname call FUNC(getItemType);
private _canAdd = false; private _canAdd = false;
private _canFitWeaponSlot = false; private _canFitWeaponSlot = false;
private _addedToUnit = false; private _addedToUnit = false;
private _weaponHolder = _unit;
switch (_container) do { switch (_container) do {
case "vest": { case "vest": {
@ -58,6 +59,21 @@ switch (_container) do {
}; };
}; };
if (_type select 0 == "magazine") then {
private _configAmmoCount = getNumber (configFile >> "CfgMagazines" >> _classname >> "count");
// https://feedback.bistudio.com/T74244
// When adding throwables with the addXXXCargo(Global) commands, they don't show up in the throwables list
// If a throwable has more than 1 ammo count, adding it with addItem(XXX) commands also renders the throwable unusable
if (_configAmmoCount == 1 && {_ammoCount in [-1, 1]} && {_classname call BIS_fnc_isThrowable}) then { // TODO: replace with https://community.bistudio.com/wiki/isThrowable in 2.18
_type set [0, "item"];
};
if (_ammoCount == -1) then {
_ammoCount = _configAmmoCount;
};
};
switch (_type select 0) do { switch (_type select 0) do {
case "weapon": { case "weapon": {
if (_canAdd || {_canFitWeaponSlot}) then { if (_canAdd || {_canFitWeaponSlot}) then {
@ -94,19 +110,17 @@ switch (_type select 0) do {
} else { } else {
_addedToUnit = false; _addedToUnit = false;
private _pos = _unit modelToWorldVisual [0,1,0.05]; _weaponHolder = nearestObject [_unit, "WeaponHolder"];
_unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then {
_unit addWeaponCargoGlobal [_classname, 1]; _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"];
_unit setPosATL _pos; };
_weaponHolder addWeaponCargoGlobal [_classname, 1];
}; };
}; };
case "magazine": { case "magazine": {
if (_ammoCount == -1) then {
_ammoCount = getNumber (configFile >> "CfgMagazines" >> _classname >> "count");
};
if (_canAdd) then { if (_canAdd) then {
_addedToUnit = true; _addedToUnit = true;
@ -127,11 +141,13 @@ switch (_type select 0) do {
} else { } else {
_addedToUnit = false; _addedToUnit = false;
private _pos = _unit modelToWorldVisual [0,1,0.05]; _weaponHolder = nearestObject [_unit, "WeaponHolder"];
_unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then {
_unit addMagazineAmmoCargo [_classname, 1, _ammoCount]; _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"];
_unit setPosATL _pos; };
_weaponHolder addMagazineAmmoCargo [_classname, 1, _ammoCount];
}; };
}; };
@ -156,11 +172,13 @@ switch (_type select 0) do {
} else { } else {
_addedToUnit = false; _addedToUnit = false;
private _pos = _unit modelToWorldVisual [0,1,0.05]; _weaponHolder = nearestObject [_unit, "WeaponHolder"];
_unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then {
_unit addItemCargoGlobal [_classname, 1]; _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"];
_unit setPosATL _pos; };
_weaponHolder addItemCargoGlobal [_classname, 1];
}; };
}; };
@ -170,4 +188,4 @@ switch (_type select 0) do {
}; };
}; };
[_addedToUnit, _unit] [_addedToUnit, _weaponHolder]

View File

@ -0,0 +1,107 @@
#include "..\script_component.hpp"
/*
* Author: Katalam, Blue, Brett Mayson, johnb43
* Handle adjusting a magazine's ammo
*
* Arguments:
* 0: Vehicle or Unit <OBJECT>
* 1: Item <STRING>
* 2: Ammo to adjust by <NUMBER> (default: -1)
*
* Return Value:
* How much the ammo was adjusted by <NUMBER>
*
* Example:
* [player, "30Rnd_556x45_Stanag", 1] call ace_common_fnc_adjustMagazineAmmo;
*
* Public: No
*/
params ["_unit", "_magazine", ["_count", -1]];
if (_count == 0) exitWith {0};
private _containers = if (_unit isKindOf "CAManBase") then {
[uniformContainer _unit, vestContainer _unit, backpackContainer _unit]
} else {
[_unit]
};
scopeName "main";
private _originalCount = _count;
private _container = objNull;
private _magazinesContainer = [];
private _newAmmoCount = 0;
private _removeAmmo = _count < 0;
private _maxMagazineAmmo = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count");
{
_container = _x;
// Get all magazines of _magazine type
_magazinesContainer = (magazinesAmmoCargo _container) select {_x select 0 == _magazine};
// Get the ammo count, filter out magazines with 0 ammo
_magazinesContainer = (_magazinesContainer apply {_x select 1}) select {_x != 0};
// If there are none, skip to next container
if (_magazinesContainer isEqualTo []) then {
continue;
};
// Sort, smallest first when removing, largest first when adding
_magazinesContainer sort _removeAmmo;
if (_removeAmmo) then {
{
_count = _x + _count;
_container addMagazineAmmoCargo [_magazine, -1, _x];
if (_count >= 0) then {
// Only add magazine back if it's not empty
if (_count != 0) then {
_container addMagazineAmmoCargo [_magazine, 1, _count];
};
_originalCount breakOut "main";
};
} forEach _magazinesContainer;
} else {
// This loop only fills up partially filled magazines
{
// Fill the magazine to either its max or until all ammo has been added
_newAmmoCount = (_x + _count) min _maxMagazineAmmo;
if (_newAmmoCount <= _maxMagazineAmmo) then {
_container addMagazineAmmoCargo [_magazine, -1, _x];
_container addMagazineAmmoCargo [_magazine, 1, _newAmmoCount];
};
// Remove the ammo that was added
_count = _count - (_newAmmoCount - _x);
if (_count <= 0) then {
_originalCount breakOut "main";
};
} forEach (_magazinesContainer select {_x < _maxMagazineAmmo});
};
} forEach _containers;
// If there is still remaining ammo to add, try add it after having iterated through all containers
if (!_removeAmmo && _count > 0) then {
{
while {_count > 0 && {_x canAdd [_magazine, 1/* 2.18 , true*/]}} do {
_x addMagazineAmmoCargo [_magazine, 1, _count];
_count = _count - _maxMagazineAmmo;
};
} forEach _containers;
if (_count <= 0) then {
_originalCount breakOut "main";
};
};
_originalCount - _count

View File

@ -28,9 +28,7 @@ if (_list isEqualType "") then {
}; };
{ {
if (!isNil "_x") then { if (!isNil "_x" && {_x isEqualType objNull} && {local _x}) then {
if (_x isEqualType objNull) then {
if (local _x) then {
if (_vehicle) then { if (_vehicle) then {
(vehicle _x) setVariable [_variable, _setting, _global]; (vehicle _x) setVariable [_variable, _setting, _global];
TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global); TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global);
@ -39,7 +37,4 @@ if (_list isEqualType "") then {
TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global); TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global);
}; };
}; };
}; } forEach _list;
};
false
} count _list;

View File

@ -66,8 +66,7 @@ GVAR(settingsMovedToSQF) = [];
INFO_1("%1 delayed functions running.",count GVAR(runAtSettingsInitialized)); INFO_1("%1 delayed functions running.",count GVAR(runAtSettingsInitialized));
{ {
(_x select 1) call (_x select 0); (_x select 1) call (_x select 0);
false } forEach GVAR(runAtSettingsInitialized);
} count GVAR(runAtSettingsInitialized);
GVAR(runAtSettingsInitialized) = nil; //cleanup GVAR(runAtSettingsInitialized) = nil; //cleanup
#ifdef DEBUG_MODE_FULL #ifdef DEBUG_MODE_FULL

View File

@ -53,8 +53,7 @@ private _refresh = {
{ {
ctrlDelete _x; ctrlDelete _x;
false } forEach _allControls;
} count _allControls;
_allControls = []; _allControls = [];
@ -80,7 +79,6 @@ private _refresh = {
_ctrl ctrlSetTextColor _xcolor; _ctrl ctrlSetTextColor _xcolor;
_ctrl ctrlCommit 0; _ctrl ctrlCommit 0;
_allControls pushBack _ctrl; _allControls pushBack _ctrl;
false
} forEach (missionNamespace getVariable [QGVAR(displayIconList),[]]); } forEach (missionNamespace getVariable [QGVAR(displayIconList),[]]);
}; };
@ -116,8 +114,7 @@ if (_show) then {
if (_x select 0 != _iconId) then { if (_x select 0 != _iconId) then {
_newList pushBack _x; _newList pushBack _x;
}; };
false } forEach _list;
} count _list;
missionNamespace setVariable [QGVAR(displayIconList), _newList]; missionNamespace setVariable [QGVAR(displayIconList), _newList];
call _refresh; call _refresh;

View File

@ -34,8 +34,7 @@ if (IS_ARRAY(_var)) then {
{ {
[_x, _depth] call FUNC(dumpArray); [_x, _depth] call FUNC(dumpArray);
false } forEach _var;
} count _var;
diag_log text format ["%1],", _pad]; diag_log text format ["%1],", _pad];
}; };

View File

@ -25,8 +25,7 @@ if (!isNil "ACE_PFH_COUNTER") then {
private _isActive = ["ACTIVE", "REMOVED"] select isNil {CBA_common_PFHhandles select (_pfh select 0)}; private _isActive = ["ACTIVE", "REMOVED"] select isNil {CBA_common_PFHhandles select (_pfh select 0)};
diag_log text format ["Registered PFH: id=%1 [%2, delay %3], %4:%5", _pfh select 0, _isActive, _parameters select 1, _pfh select 1, _pfh select 2]; diag_log text format ["Registered PFH: id=%1 [%2, delay %3], %4:%5", _pfh select 0, _isActive, _parameters select 1, _pfh select 1, _pfh select 2];
false } forEach ACE_PFH_COUNTER;
} count ACE_PFH_COUNTER;
}; };
diag_log text format ["ACE COUNTER RESULTS"]; diag_log text format ["ACE COUNTER RESULTS"];
@ -50,8 +49,7 @@ diag_log text format ["-------------------------------------------"];
}; };
_iter = _iter + 1; _iter = _iter + 1;
false } forEach _counterEntry;
} count _counterEntry;
// results // results
_averageResult = (_total / _count) * 1000; _averageResult = (_total / _count) * 1000;
@ -61,8 +59,7 @@ diag_log text format ["-------------------------------------------"];
} else { } else {
diag_log text format ["%1: No results", _counterEntry select 0]; diag_log text format ["%1: No results", _counterEntry select 0];
}; };
false } forEach ACE_COUNTERS;
} count ACE_COUNTERS;
/* /*
// Dump PFH Trackers // Dump PFH Trackers

View File

@ -50,8 +50,7 @@ if (_unit isKindOf "CAManBase") then {
_gunner = _unit turretUnit _x; _gunner = _unit turretUnit _x;
_turret = _x; _turret = _x;
}; };
false } forEach allTurrets [_unit, true];
} count allTurrets [_unit, true];
// Ensure that at least the pilot is returned if there is no gunner // Ensure that at least the pilot is returned if there is no gunner
if (isManualFire _unit && {isNull _gunner}) then { if (isManualFire _unit && {isNull _gunner}) then {
_gunner = effectiveCommander _unit; _gunner = effectiveCommander _unit;

View File

@ -17,6 +17,6 @@
params ["_unit"]; params ["_unit"];
if (currentWeapon _unit != "" && {currentWeapon _unit == primaryWeapon _unit} && {weaponLowered _unit} && {stance _unit == "STAND"} && {vehicle _unit == _unit}) then { if (currentWeapon _unit != "" && {currentWeapon _unit == primaryWeapon _unit} && {weaponLowered _unit} && {stance _unit == "STAND"} && {isNull objectParent _unit}) then {
[_unit, "amovpercmstpsraswrfldnon", 0] call FUNC(doAnimation); [_unit, "amovpercmstpsraswrfldnon", 0] call FUNC(doAnimation);
}; };

View File

@ -35,7 +35,6 @@ private _return = [];
_return pushBack [_x select 0, typeName _val, _val, _x select 2, _x select 5]; _return pushBack [_x select 0, typeName _val, _val, _x select 2, _x select 5];
}; };
}; };
false } forEach GVAR(OBJECT_VARIABLES_STORAGE);
} count GVAR(OBJECT_VARIABLES_STORAGE);
_return _return

View File

@ -1,6 +1,6 @@
#include "..\script_component.hpp" #include "..\script_component.hpp"
/* /*
* Author: Dedmen * Author: Dedmen, Blue, johnb43
* Return how many items of type _itemType the player has in his containers (Uniform, Vest, Backpack) * Return how many items of type _itemType the player has in his containers (Uniform, Vest, Backpack)
* Doesn't count assignedItems, weapons, weapon attachments, magazines in weapons * Doesn't count assignedItems, weapons, weapon attachments, magazines in weapons
* *
@ -19,13 +19,17 @@
params ["_unit", "_itemType"]; params ["_unit", "_itemType"];
private _countItemsInContainer = { private _count = 0;
(getItemCargo _this) params ["_itemTypes", "_itemCounts"]; private _isMagazine = isClass (configFile >> "CfgMagazines" >> _itemType);
private _index = _itemTypes find _itemType; {
_itemCounts param [_index, 0] (if (_isMagazine) then {
}; getMagazineCargo _x
} else {
getItemCargo _x
}) params ["_itemTypes", "_itemCounts"];
((uniformContainer _unit) call _countItemsInContainer) + _count = _count + (_itemCounts param [_itemTypes find _itemType, 0]);
((vestContainer _unit) call _countItemsInContainer) + } forEach [uniformContainer _unit, vestContainer _unit, backpackContainer _unit];
((backpackContainer _unit) call _countItemsInContainer)
_count

View File

@ -29,7 +29,7 @@ private _unitActionsCfg = configFile >> "CfgMovesBasic" >> "Actions" >> getText
TRACE_2("Animation/Action",configName _unitAnimationCfg,configName _unitActionsCfg); TRACE_2("Animation/Action",configName _unitAnimationCfg,configName _unitActionsCfg);
if (vehicle _unit != _unit) then { if (!isNull objectParent _unit) then {
private _interpolateArray = getArray (_unitAnimationCfg >> "interpolateTo"); private _interpolateArray = getArray (_unitAnimationCfg >> "interpolateTo");
for "_index" from 0 to (count _interpolateArray - 1) step 2 do { for "_index" from 0 to (count _interpolateArray - 1) step 2 do {

View File

@ -29,7 +29,6 @@ private _doorTurrets = [];
if (((getNumber (_config >> "isCopilot")) == 0) && {count getArray (_config >> "weapons") > 0}) then { if (((getNumber (_config >> "isCopilot")) == 0) && {count getArray (_config >> "weapons") > 0}) then {
_doorTurrets pushBack _x; _doorTurrets pushBack _x;
}; };
false } forEach _turrets;
} count _turrets;
_doorTurrets _doorTurrets

View File

@ -28,8 +28,7 @@ private _gunner = objNull;
if (_weapon in (_vehicle weaponsTurret _x)) exitWith { if (_weapon in (_vehicle weaponsTurret _x)) exitWith {
_gunner = _vehicle turretUnit _x; _gunner = _vehicle turretUnit _x;
}; };
false } forEach allTurrets [_vehicle, true];
} count allTurrets [_vehicle, true];
// ensure that at least the pilot is returned if there is no gunner // ensure that at least the pilot is returned if there is no gunner
if (isManualFire _vehicle && {isNull _gunner}) then { if (isManualFire _vehicle && {isNull _gunner}) then {

View File

@ -38,8 +38,7 @@ private _enemiesInVehicle = false; //Possible Side Restriction
{ {
if (side _unit getFriend side _x < 0.6) exitWith {_enemiesInVehicle = true}; if (side _unit getFriend side _x < 0.6) exitWith {_enemiesInVehicle = true};
false } forEach crew _vehicle;
} count crew _vehicle;
switch (_position) do { switch (_position) do {
case "driver" : { case "driver" : {

View File

@ -38,8 +38,7 @@ private _stepY = 1e10;
_stepX = getNumber (_x >> "stepX"); _stepX = getNumber (_x >> "stepX");
_stepY = getNumber (_x >> "stepY"); _stepY = getNumber (_x >> "stepY");
}; };
false } forEach configProperties [_cfgGrid, "isClass _x", false];
} count configProperties [_cfgGrid, "isClass _x", false];
private _letterGrid = false; private _letterGrid = false;

View File

@ -25,8 +25,7 @@ if (_unit isKindOf "CAManBase") then {
} else { } else {
{ {
_return = _return + ({_x == _magazine} count magazines _x); _return = _return + ({_x == _magazine} count magazines _x);
false } forEach crew _unit;
} count crew _unit;
(getMagazineCargo _unit) params [["_magNames", []], ["_magCount", []]]; (getMagazineCargo _unit) params [["_magNames", []], ["_magCount", []]];
{ {

View File

@ -24,7 +24,6 @@ scopeName "main";
{ {
if (_unit == (_vehicle turretUnit _x)) then {_x breakOut "main"}; if (_unit == (_vehicle turretUnit _x)) then {_x breakOut "main"};
nil } forEach allTurrets [_vehicle, true];
} count allTurrets [_vehicle, true];
[] []

View File

@ -33,7 +33,6 @@ private _crew = [];
_crew pushBack (_x select 0); _crew pushBack (_x select 0);
}; };
}; };
false } forEach fullCrew _vehicle;
} count fullCrew _vehicle;
_crew _crew

View File

@ -29,7 +29,6 @@ private _modes = [];
if (_x == "this") then { if (_x == "this") then {
_modes pushBack _weapon; _modes pushBack _weapon;
}; };
false } forEach getArray (_config >> "modes");
} count getArray (_config >> "modes");
_modes _modes

View File

@ -42,7 +42,6 @@ private _ammo = _muzzles apply {0};
_ammo set [_index, _x select 1]; _ammo set [_index, _x select 1];
}; };
}; };
false } forEach magazinesAmmoFull _unit;
} count magazinesAmmoFull _unit;
[_attachments, _muzzles, _magazines, _ammo]; [_attachments, _muzzles, _magazines, _ammo];

View File

@ -18,7 +18,7 @@
params ["_unit"]; params ["_unit"];
// Animation changes even inside vehicle post-1.60 // Animation changes even inside vehicle post-1.60
if (stance _unit == "PRONE" || {vehicle _unit != _unit} || {_unit call EFUNC(common,isSwimming)}) exitWith {}; if (stance _unit == "PRONE" || {!isNull objectParent _unit} || {_unit call EFUNC(common,isSwimming)}) exitWith {};
[ [
_unit, _unit,

View File

@ -28,8 +28,7 @@ if (isNil QGVAR(LSD_Vehicles)) then {
if (_hSCount > 0) then { if (_hSCount > 0) then {
GVAR(LSD_Vehicles) pushBack [_x, _hSCount]; GVAR(LSD_Vehicles) pushBack [_x, _hSCount];
}; };
nil } forEach _units;
} count _units;
if (isNil QGVAR(LSD_Colors)) then { if (isNil QGVAR(LSD_Colors)) then {
GVAR(LSD_Colors) = [ GVAR(LSD_Colors) = [
@ -51,8 +50,7 @@ if (isNil QGVAR(LSD_PFH)) then {
for "_i" from 0 to (_hSCount - 1) do { for "_i" from 0 to (_hSCount - 1) do {
_vehicle setObjectTexture [_i, GVAR(LSD_Colors) select _index]; _vehicle setObjectTexture [_i, GVAR(LSD_Colors) select _index];
}; };
nil } forEach GVAR(LSD_Vehicles);
} count GVAR(LSD_Vehicles);
_index = ((_index + 1) % 7) mod count GVAR(LSD_Colors); _index = ((_index + 1) % 7) mod count GVAR(LSD_Colors);
(_this select 0) set [0, _index]; (_this select 0) set [0, _index];

View File

@ -32,8 +32,7 @@ private _whitespaceList = [];
} else { } else {
_whitespaceList pushBack ([_x] call CBA_fnc_trim); _whitespaceList pushBack ([_x] call CBA_fnc_trim);
}; };
false } forEach _list;
} count _list;
_list = _whitespaceList; _list = _whitespaceList;
TRACE_1("Whitespace List",_list); TRACE_1("Whitespace List",_list);
@ -46,8 +45,7 @@ if (_checkNil) then {
if (!isNil _x) then { if (!isNil _x) then {
_nilCheckedList pushBack (missionNamespace getVariable _x); _nilCheckedList pushBack (missionNamespace getVariable _x);
}; };
false } forEach _list;
} count _list;
_list = _nilCheckedList; _list = _nilCheckedList;
}; };

View File

@ -27,8 +27,7 @@ if (isPlayer _unit) then {
// clear all disable user input // clear all disable user input
{ {
[_x, false] call FUNC(setDisableUserInputStatus); [_x, false] call FUNC(setDisableUserInputStatus);
false } forEach GVAR(DISABLE_USER_INPUT_COLLECTION);
} count GVAR(DISABLE_USER_INPUT_COLLECTION);
}; };
}; };
@ -36,5 +35,4 @@ if (isPlayer _unit) then {
if !(_x select 4) then { if !(_x select 4) then {
_unit setVariable [_x select 0, nil, _x select 3]; _unit setVariable [_x select 0, nil, _x select 3];
}; };
false } forEach ([_unit] call FUNC(getAllDefinedSetVariables));
} count ([_unit] call FUNC(getAllDefinedSetVariables));

View File

@ -24,6 +24,4 @@ _respawnVariables pushBack "ACE_PersistentFunctions";
{ {
_unit setVariable [_x, _unit getVariable _x, true]; _unit setVariable [_x, _unit getVariable _x, true];
false } forEach _respawnVariables;
} count _respawnVariables;
nil

View File

@ -47,7 +47,6 @@ private _array = [];
_array pushBack _x; _array pushBack _x;
}; };
}; };
false } forEach toArray _string;
} count toArray _string;
toString _array // return toString _array // return

View File

@ -17,12 +17,12 @@
private _baseline = 1; private _baseline = 1;
if (GVAR(swayFactorsBaseline) isNotEqualTo []) then { if (GVAR(swayFactorsBaseline) isNotEqualTo []) then {
_baseline = 1 max ([missionNamespace, "ACE_setCustomAimCoef_baseline", "max"] call EFUNC(common,arithmeticGetResult)); _baseline = 1 max ([missionNamespace, "ACE_setCustomAimCoef_baseline", "max"] call FUNC(arithmeticGetResult));
}; };
private _multiplier = 1; private _multiplier = 1;
if (GVAR(swayFactorsMultiplier) isNotEqualTo []) then { if (GVAR(swayFactorsMultiplier) isNotEqualTo []) then {
_multiplier = [missionNamespace, "ACE_setCustomAimCoef_multiplier", "product"] call EFUNC(common,arithmeticGetResult); _multiplier = [missionNamespace, "ACE_setCustomAimCoef_multiplier", "product"] call FUNC(arithmeticGetResult);
}; };
ACE_player setCustomAimCoef (_baseline * _multiplier); ACE_player setCustomAimCoef (_baseline * _multiplier);

View File

@ -58,7 +58,7 @@ if (_switch) then {
private _newGroup = createGroup (_x select 1); private _newGroup = createGroup (_x select 1);
[_unit] joinSilent _newGroup; [_unit] joinSilent _newGroup;
}; };
if (count units _currentGroup == 0) then { if (units _currentGroup isEqualTo []) then {
deleteGroup _currentGroup; deleteGroup _currentGroup;
}; };
_previousGroupsList set [_forEachIndex, objNull]; _previousGroupsList set [_forEachIndex, objNull];

View File

@ -29,8 +29,7 @@ if (isNil QGVAR(publishSchedId)) then {
{ {
_x params ["_unit", "_varName"]; _x params ["_unit", "_varName"];
_unit setVariable [_varName, _unit getVariable _varName, true]; _unit setVariable [_varName, _unit getVariable _varName, true];
false } forEach GVAR(publishVarNames);
} count GVAR(publishVarNames);
GVAR(publishVarNames) = []; GVAR(publishVarNames) = [];
GVAR(publishNextTime) = 1e7; GVAR(publishNextTime) = 1e7;

View File

@ -1,37 +1,84 @@
#include "..\script_component.hpp" #include "..\script_component.hpp"
/* /*
* Author: mharis001 * Author: mharis001, Blue, Brett Mayson
* Returns list of unique items in a unit's inventory. * Returns list of unique items in the target's inventory.
* Items are cached if unit is ACE_player.
* *
* Arguments: * Arguments:
* 0: Unit <OBJECT> * 0: Target <OBJECT>
* 1: Include magazines <NUMBER>
* 0: No (default)
* 1: Yes
* 2: Only magazines
* *
* Return Value: * Return Value:
* Items <ARRAY> * Items <ARRAY>
* *
* Example: * Example:
* [player] call ace_common_fnc_uniqueItems * [player, 2] call ace_common_fnc_uniqueItems
* *
* Public: No * Public: No
*/ */
params ["_unit"]; params ["_target", ["_includeMagazines", 0]];
private _fnc_getItems = { private _fnc_getItems = {
private _items = (getItemCargo uniformContainer _unit) select 0; private _items = [];
_items append ((getItemCargo vestContainer _unit) select 0);
_items append ((getItemCargo backpackContainer _unit) select 0); private _inventoryItems = (getItemCargo uniformContainer _target) select 0;
_inventoryItems append ((getItemCargo vestContainer _target) select 0);
_inventoryItems append ((getItemCargo backpackContainer _target) select 0);
_items set [0, _inventoryItems];
_items set [1, magazines _target];
_items arrayIntersect _items _items arrayIntersect _items
}; };
// Use cached items list if unit is ACE_player // Cache items list if unit is ACE_player
if (_unit isEqualTo ACE_player) then { if (_target isEqualTo ACE_player) then {
if (isNil QGVAR(uniqueItemsCache)) then { if (isNil QGVAR(uniqueItemsCache)) then {
GVAR(uniqueItemsCache) = call _fnc_getItems; GVAR(uniqueItemsCache) = call _fnc_getItems;
}; };
+GVAR(uniqueItemsCache)
switch (_includeMagazines) do {
case 0: {
GVAR(uniqueItemsCache) select 0
};
case 1: {
(GVAR(uniqueItemsCache) select 1) + (GVAR(uniqueItemsCache) select 0)
};
case 2: {
GVAR(uniqueItemsCache) select 1
};
};
} else { } else {
call _fnc_getItems; if (_target isKindOf "CAManBase") then {
private _items = call _fnc_getItems;
switch (_includeMagazines) do {
case 0: {
_items select 0
};
case 1: {
(_items select 1) + (_items select 0)
};
case 2: {
_items select 1
};
};
} else {
private _items = switch (_includeMagazines) do {
case 0: {
itemCargo _target
};
case 1: {
(magazineCargo _target) + (itemCargo _target)
};
case 2: {
magazineCargo _target
};
};
_items arrayIntersect _items
};
}; };

View File

@ -1,5 +1,6 @@
private _category = format ["ACE %1", LLSTRING(DisplayName)]; private _category = format ["ACE %1", LLSTRING(DisplayName)];
private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_colors)]]; private _categoryColors = [_category, LSTRING(subcategory_colors)];
private _categorySway = [_category, LSTRING(subcategory_sway)];
[ [
QGVAR(checkPBOsAction), QGVAR(checkPBOsAction),
@ -87,7 +88,7 @@ private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_col
QGVAR(epilepsyFriendlyMode), QGVAR(epilepsyFriendlyMode),
"CHECKBOX", "CHECKBOX",
[LSTRING(EpilepsyFriendlyMode), LSTRING(EpilepsyFriendlyModeTooltip)], [LSTRING(EpilepsyFriendlyMode), LSTRING(EpilepsyFriendlyModeTooltip)],
format ["ACE %1", localize LSTRING(DisplayName)], _category,
false, false,
2 2
] call CBA_fnc_addSetting; ] call CBA_fnc_addSetting;
@ -96,7 +97,45 @@ private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_col
QGVAR(progressBarInfo), QGVAR(progressBarInfo),
"LIST", "LIST",
[LSTRING(progressBarInfoName), LSTRING(progressBarInfoDesc)], [LSTRING(progressBarInfoName), LSTRING(progressBarInfoDesc)],
format ["ACE %1", localize LSTRING(DisplayName)], _category,
[[0, 1, 2], [LSTRING(None), LSTRING(progressBarInfoPercentage), LSTRING(progressBarInfoTime)], 2], [[0, 1, 2], [LSTRING(None), LSTRING(progressBarInfoPercentage), LSTRING(progressBarInfoTime)], 2],
0 0
] call CBA_fnc_addSetting; ] call CBA_fnc_addSetting;
[
QGVAR(enableSway),
"CHECKBOX",
[LSTRING(enableSway), LSTRING(enableSway_Description)],
_categorySway,
true,
1,
{},
true
] call CBA_fnc_addSetting;
[
QGVAR(swayFactor),
"SLIDER",
[LSTRING(SwayFactor), LSTRING(SwayFactor_Description)],
_categorySway,
[0, 5, 1, 2],
1
] call CBA_fnc_addSetting;
[
QGVAR(restedSwayFactor),
"SLIDER",
[LSTRING(RestedSwayFactor), LSTRING(RestedSwayFactor_Description)],
_categorySway,
[0, 5, 1, 2],
1
] call CBA_fnc_addSetting;
[
QGVAR(deployedSwayFactor),
"SLIDER",
[LSTRING(DeployedSwayFactor), LSTRING(DeployedSwayFactor_Description)],
_categorySway,
[0, 5, 1, 2],
1
] call CBA_fnc_addSetting;

View File

@ -498,7 +498,7 @@
<Chinesesimp>设定当玩家有错误的 PBO 时要如何处理。</Chinesesimp> <Chinesesimp>设定当玩家有错误的 PBO 时要如何处理。</Chinesesimp>
<Czech>Nastavuje jakou akci provést pokud hráč nemá správné PBO.</Czech> <Czech>Nastavuje jakou akci provést pokud hráč nemá správné PBO.</Czech>
<Polish>Określa akcję, która ma być podjęta, jeśli gracz nie ma właściwych PBO.</Polish> <Polish>Określa akcję, która ma być podjęta, jeśli gracz nie ma właściwych PBO.</Polish>
<Japanese>プレイヤーが不正規のPBOを所持している場合の動作を定します。</Japanese> <Japanese>プレイヤーが不正規のPBOを所持している場合の動作を定します。</Japanese>
<Spanish>Define la accion a tomar si un jugador no tiene el PBO correcto</Spanish> <Spanish>Define la accion a tomar si un jugador no tiene el PBO correcto</Spanish>
<Italian>Definisce l'azione che verrà presa se il giocatore non ha gli stessi PBO.</Italian> <Italian>Definisce l'azione che verrà presa se il giocatore non ha gli stessi PBO.</Italian>
<Russian>Определяет, какое действие будет предпринято, если игрок не имеет корректные PBO.</Russian> <Russian>Определяет, какое действие будет предпринято, если игрок не имеет корректные PBO.</Russian>
@ -1582,7 +1582,7 @@
</Key> </Key>
<Key ID="STR_ACE_Common_progressBarInfoDesc"> <Key ID="STR_ACE_Common_progressBarInfoDesc">
<English>Controls extra information shown in progress bar.</English> <English>Controls extra information shown in progress bar.</English>
<Japanese>プログレス バーへ表示される情報量を決定します。</Japanese> <Japanese>プログレス バーへ表示される情報量を制御します。</Japanese>
<French>Définit quelles informations supplémentaires sont affichées dans la barre de progression.</French> <French>Définit quelles informations supplémentaires sont affichées dans la barre de progression.</French>
<Russian>Устанавливает дополнительную информацию в индикаторе процесса.</Russian> <Russian>Устанавливает дополнительную информацию в индикаторе процесса.</Russian>
<German>Kontrolliert zusätzliche Informationen beim Fortschrittsbalkens.</German> <German>Kontrolliert zusätzliche Informationen beim Fortschrittsbalkens.</German>
@ -1828,5 +1828,106 @@
<Chinese>下方</Chinese> <Chinese>下方</Chinese>
<Turkish>Alt</Turkish> <Turkish>Alt</Turkish>
</Key> </Key>
<Key ID="STR_ACE_Common_subcategory_sway">
<English>Weapon Sway</English>
<Japanese>手ぶれ</Japanese>
<Korean>무기 흔들림</Korean>
<French>Oscillation de l'arme</French>
<Russian>Колебание оружия</Russian>
<Spanish>Oscilación del arma</Spanish>
<Italian>Oscillazione arma</Italian>
</Key>
<Key ID="STR_ACE_Common_EnableSway">
<English>Enable Weapon Sway</English>
<Japanese>手ぶれを有効化</Japanese>
<Korean>무기 흔들림 추가</Korean>
<French>Activer l'oscillation de l'arme</French>
<Russian>Включить колебание оружия</Russian>
<Spanish>Habilitar oscilación del arma</Spanish>
<Italian>Abilita oscillazione arma</Italian>
</Key>
<Key ID="STR_ACE_Common_EnableSway_Description">
<English>Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods.</English>
<Japanese>姿勢、疲労、負傷状態などの手ぶれ要因に影響を受ける武器照準の揺れを有効にします。\nこの設定を無効にすると、手ぶれの揺れはバニラまたは他のMODの処理に任されます。</Japanese>
<Korean>흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다.</Korean>
<French>Active l'oscillation de l'arme influencé par les facteurs d'oscillation, tels que la position, la fatigue et l'état de santé.\nLa désactivation de ce paramètre reportera l'oscillation à vanilla ou à d'autres mods.</French>
<Russian>Активируйте колебание оружия в зависимости от таких факторов, как стойка, усталость и состояние здоровья.\nОтключение этого параметра приведет к переносу раскачивания на vanilla или другие моды.</Russian>
<Spanish>Habilita la oscilación del arma afectado por factores como la postura, la fatiga y la condición médica.\nDeshabilitar esta opción hará que el comportamiento de la oscilación venga definido por Vanilla o por otros mods.</Spanish>
<Italian>Abilita l'oscillazione ACE, influenzata da fattori come postura, fatica e condizione medica.\nDisabilitare questa impostazione farà controllare l'oscillazione al gioco vanilla o altre mod.</Italian>
</Key>
<Key ID="STR_ACE_Common_SwayFactor">
<English>Sway factor</English>
<Spanish>Factor de balanceo de mira</Spanish>
<German>Verwacklungsfaktor</German>
<Japanese>手ぶれ因数</Japanese>
<Chinesesimp>抖动系数</Chinesesimp>
<Chinese>抖動因素</Chinese>
<French>Facteur de tremblement</French>
<Italian>Fattore di Oscillazione</Italian>
<Polish>Czynnik kołysania</Polish>
<Russian>Фактор колебания прицела</Russian>
<Portuguese>Fator de Balanço de Mira</Portuguese>
<Czech>Faktor kývání</Czech>
<Korean>손떨림 정도</Korean>
</Key>
<Key ID="STR_ACE_Common_SwayFactor_Description">
<English>Influences the amount of weapon sway. Higher means more sway.</English>
<Spanish>Afecta al la estabilidad de la mira. Más alto significa más balanceo</Spanish>
<German>Beeinflusst, wie ruhig man eine Waffe halten kann. Ein höherer Wert bedeutet weniger Stabilisierung.</German>
<Japanese>武器の手ぶれの大きさに影響します。値が高いほど、手ぶれが強くなります。</Japanese>
<Chinesesimp>影响手持武器的晃动程度,数值越高,抖动的越厉害。</Chinesesimp>
<Chinese>影響手持武器晃動程度,數值越高抖動越厲害</Chinese>
<French>Influe sur l'amplitude du tremblement de l'arme. Une valeur plus élevée signifie plus de tremblement.</French>
<Italian>Influenza l'aumento di oscillazione dell'arma quando affaticato. Maggiore significa più oscillazione.</Italian>
<Polish>Wpływa na poziom kołysania broni. Większa ilość znaczy większe kołysanie.</Polish>
<Russian>Влияет на колебания прицела оружия. Чем выше - тем больше.</Russian>
<Portuguese>Influencia a quantidade de balanço da mira da arma. Quanto maior, mais balanço.</Portuguese>
<Czech>Ovlivňuje množství kývání zbraní. Vyšší znamená více kývání.</Czech>
<Korean>손떨림의 정도를 정합니다. 높을 수록 많이 휘적입니다.</Korean>
</Key>
<Key ID="STR_ACE_Common_RestedSwayFactor">
<English>Rested sway factor</English>
<French>Facteur de balancement au repos</French>
<Korean>휴식 시 손떨림 정도</Korean>
<Portuguese>Fator de balanço de mira em repouso</Portuguese>
<German>Verwacklungsfaktor, wenn aufgelegt</German>
<Italian>Fattore di Oscillazione Appoggiato</Italian>
<Japanese>静止依託時の手ぶれ係数</Japanese>
<Russian>Коэффициент колебания прицела в состоянии покоя</Russian>
<Spanish>Factor de oscilación apoyado</Spanish>
</Key>
<Key ID="STR_ACE_Common_RestedSwayFactor_Description">
<English>Influences the amount of weapon sway while weapon is rested.</English>
<French>Influence le degré de balancement de l'arme au repos.</French>
<Korean>무기가 아무런 행동도 하지 않는 동안 무기가 흔들리는 정도를 정합니다.</Korean>
<Portuguese>Influencia a quantidade de balanço de mira enquanto a arma está em repouso.</Portuguese>
<German>Beeinflusst, wie ruhig man die Waffe hält, während sie aufgelegt ist.</German>
<Italian>Determina la quantità di oscillazione dell'arma quando questa è appoggiata.</Italian>
<Japanese>静止し壁などに依託している時の武器の手ぶれの大きさに影響します。</Japanese>
<Russian>Влияет на величину колебания прицела оружия в состоянии покоя.</Russian>
<Spanish>Afecta la cantidad de oscilación del arma cuando se está apoyado.</Spanish>
</Key>
<Key ID="STR_ACE_Common_DeployedSwayFactor">
<English>Deployed sway factor</English>
<French>Facteur de balancement déployé</French>
<Korean>거치 시 손떨림 정도</Korean>
<Portuguese>Fator de balanço de mira em posição de tiro</Portuguese>
<German>Verwacklungsfaktor, wenn Zweibein aufgestellt ist.</German>
<Italian>Fattore di Oscillazione su Bipode</Italian>
<Japanese>接地展開時の手ぶれ係数</Japanese>
<Russian>Коэффициент колебания прицела при развертывании</Russian>
<Spanish>Factor de oscilación desplegado</Spanish>
</Key>
<Key ID="STR_ACE_Common_DeployedSwayFactor_Description">
<English>Influences the amount of weapon sway while weapon is deployed.</English>
<French>Influence le degré de balancement de l'arme déployée.</French>
<Korean>무기를 거치하는 동안 무기를 흔드는 정도를 정합니다.</Korean>
<Portuguese>Influencia a quantidade de balanço de mira enquanto a arma está em posição de tiro.</Portuguese>
<German>Beeinflusst, wie ruhig man die Waffen hält, während das Zweibein aufgestellt ist.</German>
<Italian>Determina la quantità di oscillazione dell'arma quando questa è stabilizzata usando il bipode.</Italian>
<Japanese>武器の接地展開時の武器の手ぶれの大きさに影響します。</Japanese>
<Russian>Влияет на величину колебания прицела оружия при его развертывании.</Russian>
<Spanish>Afecta la cantidad de oscilación del arma cuando se está desplegado.</Spanish>
</Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,3 +0,0 @@
[tools]
pboProject_noBinConfig = true
sqfvm_skipConfigChecks = true

View File

@ -1,15 +1,6 @@
#include "script_component.hpp" #include "script_component.hpp"
#include "\z\ace\addons\refuel\defines.hpp" #include "\z\ace\addons\refuel\defines.hpp"
// Remove after next cup release
#pragma hemtt flag pe23_ignore_has_include
#if __has_include("\cup\CUP_Terrains_ACE_compat\config.bin")
#define PATCH_SKIP "CUP_Terrains_ACE_compat"
#endif
#ifdef PATCH_SKIP
ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP)
#else
class CfgPatches { class CfgPatches {
class ADDON { class ADDON {
name = COMPONENT_NAME; name = COMPONENT_NAME;
@ -34,5 +25,3 @@ class CfgPatches {
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"
#include "CfgEventHandlers.hpp" #include "CfgEventHandlers.hpp"
#endif

View File

@ -148,5 +148,141 @@ class CfgVehicles {
roles[]={"cargo"}; roles[]={"cargo"};
}; };
}; };
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_l5",
"hitera_l6", "hitera_l7", "hitera_l8", "hitera_r1", "hitera_r2",
"hitera_r3", "hitera_r4", "hitera_r5", "hitera_r6", "hitera_r7",
"hitera_r8", "hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4",
"hitera_t5", "hitera_t6", "hitera_t7", "hitera_t8", "hitera_fr1",
"hitera_fr2", "hitera_fr3", "hitera_fr4", "hitera_fr5", "hitera_fr6",
"hitera_fr7", "hitera_fr8", "hitera_fr9", "hitera_fl1", "hitera_fl2",
"hitera_fl3", "hitera_fl4", "hitera_fl5"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_T90_Base: Tank_F {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l1", "hitera_l2", "hitera_l3", "hitera_r1", "hitera_r2",
"hitera_r3", "hitera_1_t_l", "hitera_1_t_r", "hitera_2_t_l",
"hitera_2_t_r"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_T90M_Base: Tank_F {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4", "hitera_t5",
"hitera_t6", "hitera_t7", "hitera_t8", "hitera_t9", "hitera_t10",
"hitera_t11", "hitera_t12", "hitera_t13", "hitera_t14", "hitera_t15",
"hitera_t16", "hitera_t17", "hitera_t18", "hitera_t19", "hitera_t20",
"hitera_t21", "hitera_f1", "hitera_f2", "hitera_f3", "hitera_f4",
"hitera_f5", "hitera_f6", "hitera_f7", "hitera_s1", "hitera_s2",
"hitera_s3", "hitera_s4", "hitera_s5", "hitera_s6", "hitera_s7",
"hitera_s8", "hitera_s9", "hitera_s10", "hitera_s11", "hitera_s12",
"hitera_t22", "hitera_t23", "hitera_t24", "hitera_t25", "hitera_t26",
"hitera_t27", "hitera_t28", "hitera_t29", "hitera_t30", "hitera_t31",
"hitera_t32", "hitera_t33"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_left", "hitslat_right", "hitslat_turret_rear",
"hitslat_turret_left", "hitslat_rear"
};
};
class CUP_T72_ACR_Base;
class CUP_B_T72_CZ: CUP_T72_ACR_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_top_l1", "hitera_top_l2", "hitera_top_l3", "hitera_top_l4",
"hitera_top_r1", "hitera_top_r2", "hitera_top_r3", "hitera_top_r4",
"hitera_front_r1", "hitera_front_r2", "hitera_front_l1",
"hitera_front_l2", "hitera_top_rear"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_Leopard2_Base;
class CUP_Leopard2_ERA_Base: CUP_Leopard2_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_1", "hitera_2", "hitera_3", "hitera_4", "hitera_5", "hitera_6",
"hitera_7", "hitera_8", "hitera_9", "hitera_10", "hitera_11", "hitera_12",
"hitera_13", "hitera_14", "hitera_15", "hitera_16", "hitera_17", "hitera_18",
"hitera_19", "hitera_20", "hitera_21", "hitera_22", "hitera_23", "hitera_24",
"hitera_25", "hitera_26", "hitera_27", "hitera_28", "hitera_29", "hitera_30",
"hitera_31", "hitera_32", "hitera_33", "hitera_34", "hitera_35", "hitera_36",
"hitera_37", "hitera_38", "hitera_39", "hitera_40", "hitera_41", "hitera_42",
"hitera_43", "hitera_44", "hitera_45", "hitera_46", "hitera_47"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_M1_Abrams_base;
class CUP_M1A2_TUSK_base: CUP_M1_Abrams_base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_r1",
"hitera_r2", "hitera_r3", "hitera_r4"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1Abrams_Base;
class CUP_M1Abrams_TUSK_Base: CUP_M1Abrams_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04",
"hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09",
"hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14",
"hitera_r15", "hitera_r16"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1Abrams_A2_Base;
class CUP_M1Abrams_A2_TUSK_Base: CUP_M1Abrams_A2_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20",
"hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05",
"hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10",
"hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15",
"hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1A2Abrams_Base;
class CUP_M1A2Abrams_TUSK_Base: CUP_M1A2Abrams_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04",
"hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09",
"hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14",
"hitera_r15", "hitera_r16"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1A2Abrams_TUSK_II_Base: CUP_M1A2Abrams_TUSK_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20",
"hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05",
"hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10",
"hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15",
"hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20"
};
}; };
}; };

View File

@ -1,3 +0,0 @@
[tools]
pboProject_noBinConfig = true
sqfvm_skipConfigChecks = true

View File

@ -1,14 +1,5 @@
#include "script_component.hpp" #include "script_component.hpp"
// Remove after next cup release
#pragma hemtt flag pe23_ignore_has_include
#if __has_include("\cup\CUP_Vehicles_ACE_compat\config.bin")
#define PATCH_SKIP "CUP_Vehicles_ACE_compat"
#endif
#ifdef PATCH_SKIP
ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP)
#else
class CfgPatches { class CfgPatches {
class ADDON { class ADDON {
name = COMPONENT_NAME; name = COMPONENT_NAME;
@ -29,5 +20,3 @@ class CfgPatches {
#include "CfgEventHandlers.hpp" #include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"
#endif

View File

@ -1,3 +0,0 @@
[tools]
pboProject_noBinConfig = true
sqfvm_skipConfigChecks = true

View File

@ -128,8 +128,8 @@ class CfgVehicles {
}; };
}; };
class AT_01_base_F; class StaticATWeapon;
class CUP_Metis_Base: AT_01_base_F { class CUP_Metis_Base: StaticATWeapon {
class ace_csw { class ace_csw {
enabled = 1; enabled = 1;
proxyWeapon = "CUP_proxy_AT13"; proxyWeapon = "CUP_proxy_AT13";
@ -142,7 +142,6 @@ class CfgVehicles {
}; };
}; };
class StaticATWeapon;
class CUP_TOW_TriPod_base: StaticATWeapon { class CUP_TOW_TriPod_base: StaticATWeapon {
class ace_csw { class ace_csw {
enabled = 1; enabled = 1;

View File

@ -15,7 +15,7 @@ class CfgWeapons {
deployTime = 20; deployTime = 20;
pickupTime = 25; pickupTime = 25;
class assembleTo { class assembleTo {
ace_csw_mortarBaseplate = "CUP_O_2b14_82mm_RU"; ace_csw_mortarBaseplate = "CUP_I_2b14_82mm_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -31,7 +31,7 @@ class CfgWeapons {
picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa";
class ace_csw: ace_csw { class ace_csw: ace_csw {
class assembleTo { class assembleTo {
ace_csw_mortarBaseplate = "CUP_B_M252_US"; ace_csw_mortarBaseplate = "CUP_I_M252_AAF";
}; };
}; };
}; };
@ -42,7 +42,7 @@ class CfgWeapons {
picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa";
class ace_csw: ace_csw { class ace_csw: ace_csw {
class assembleTo { class assembleTo {
ace_csw_mortarBaseplate = "CUP_B_L16A2_BAF_MPT"; ace_csw_mortarBaseplate = "CUP_I_L16A2_AAF";
}; };
}; };
}; };
@ -58,8 +58,8 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_m3Tripod = "CUP_B_M2StaticMG_US"; ace_csw_m3Tripod = "CUP_I_M2StaticMG_AAF";
ace_csw_m3TripodLow = "CUP_B_M2StaticMG_MiniTripod_US"; ace_csw_m3TripodLow = "CUP_I_M2StaticMG_MiniTripod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -81,8 +81,8 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_kordTripod = "CUP_O_DSHKM_ChDKZ"; ace_csw_kordTripod = "CUP_I_DSHKM_AAF";
ace_csw_kordTripodLow = "CUP_O_DSHkM_MiniTriPod_ChDKZ"; ace_csw_kordTripodLow = "CUP_I_DSHKM_MiniTriPod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -104,8 +104,8 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_kordTripod = "CUP_O_KORD_high_RU"; ace_csw_kordTripod = "CUP_I_KORD_high_AAF";
ace_csw_kordTripodLow = "CUP_O_KORD_RU"; ace_csw_kordTripodLow = "CUP_I_KORD_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -127,7 +127,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_sag30Tripod = "CUP_O_AGS_RU"; ace_csw_sag30Tripod = "CUP_I_AGS_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -149,7 +149,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_m3TripodLow = "CUP_B_MK19_TriPod_US"; ace_csw_m3TripodLow = "CUP_I_MK19_TriPod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -168,7 +168,7 @@ class CfgWeapons {
type = "mount"; type = "mount";
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
deploy = "CUP_O_Metis_RU"; deploy = "CUP_I_Metis_AAF";
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 300; mass = 300;
@ -186,7 +186,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_m220Tripod = "CUP_B_TOW_TriPod_US"; ace_csw_m220Tripod = "CUP_I_TOW_TriPod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -200,7 +200,7 @@ class CfgWeapons {
class CUP_TOW2_carry: CUP_TOW_carry { class CUP_TOW2_carry: CUP_TOW_carry {
class ace_csw: ace_csw { class ace_csw: ace_csw {
class assembleTo { class assembleTo {
ace_csw_m220Tripod = "CUP_B_TOW2_TriPod_US"; ace_csw_m220Tripod = "CUP_I_TOW2_TriPod_AAF";
}; };
}; };
}; };
@ -216,7 +216,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_spg9Tripod = "CUP_B_SPG9_CDF"; ace_csw_spg9Tripod = "CUP_I_SPG9_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -287,4 +287,3 @@ class CfgWeapons {
magazineReloadTime = 0.5; magazineReloadTime = 0.5;
}; };
}; };

View File

@ -4,70 +4,132 @@
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_AGS30_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_AGS30_displayName">
<English>[CSW] AGS30 Belt</English> <English>[CSW] AGS30 Belt</English>
<Japanese>[CSW] AGS30 ベルト</Japanese> <Japanese>[CSW] AGS30 ベルト</Japanese>
<Russian>[CSW] Лента AGS 30</Russian>
<Korean>[CSW] AGS-30 벨트</Korean>
<Spanish>[CSW] Cinta de AGS30</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_MK19_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_MK19_displayName">
<English>[CSW] MK19 Belt</English> <English>[CSW] MK19 Belt</English>
<Japanese>[CSW] Mk19 ベルト</Japanese> <Japanese>[CSW] Mk19 ベルト</Japanese>
<Russian>[CSW] Лента Mk19</Russian>
<Korean>[CSW] Mk.19 벨트</Korean>
<Spanish>[CSW] Cinta de MK19</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_TOW_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_TOW_displayName">
<English>[CSW] TOW Tube</English> <English>[CSW] TOW Tube</English>
<Japanese>[CSW] TOW チューブ</Japanese> <Japanese>[CSW] TOW チューブ</Japanese>
<Russian>[CSW] Туба TOW</Russian>
<Korean>[CSW] TOW 튜브</Korean>
<Spanish>[CSW] Tubo de TOW</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_TOW2_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_TOW2_displayName">
<English>[CSW] TOW2 Tube</English> <English>[CSW] TOW2 Tube</English>
<Japanese>[CSW] TOW2 チューブ</Japanese> <Japanese>[CSW] TOW2 チューブ</Japanese>
<Russian>[CSW] Туба TOW-2</Russian>
<Korean>[CSW] TOW2 튜브</Korean>
<Spanish>[CSW] Tubo de TOW2</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_PG9_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_PG9_displayName">
<English>[CSW] PG-9 Round</English> <English>[CSW] PG-9 Round</English>
<Japanese>[CSW] PG-9 砲弾</Japanese> <Japanese>[CSW] PG-9 砲弾</Japanese>
<Russian>[CSW] Снаряд ПГ-9</Russian>
<Korean>[CSW] PG-9 대전차고폭탄</Korean>
<Spanish>[CSW] Carga de PG-9</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_OG9_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_OG9_displayName">
<English>[CSW] OG-9 Round</English> <English>[CSW] OG-9 Round</English>
<Japanese>[CSW] OG-9 砲弾</Japanese> <Japanese>[CSW] OG-9 砲弾</Japanese>
<Russian>[CSW] Снаряд OГ-9</Russian>
<Korean>[CSW] OG-9 고폭파편탄</Korean>
<Spanish>[CSW] Carga de OG-9</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M1HE_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M1HE_displayName">
<English>[CSW] M1 HE</English> <English>[CSW] M1 HE</English>
<Japanese>[CSW] M1 榴弾</Japanese> <Japanese>[CSW] M1 榴弾</Japanese>
<Russian>[CSW] M1 HE</Russian>
<Korean>[CSW] M1 고폭탄</Korean>
<French>[CSW] M1 HE</French>
<Spanish>[CSW] HE de M1</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M84Smoke_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M84Smoke_displayName">
<English>[CSW] M84 Smoke</English> <English>[CSW] M84 Smoke</English>
<Japanese>[CSW] M84 白煙弾</Japanese> <Japanese>[CSW] M84 白煙弾</Japanese>
<Russian>[CSW] M84 Дымовая</Russian>
<Korean>[CSW] M84 연막탄</Korean>
<French>[CSW] M84 Fumigène</French>
<Spanish>[CSW] Humo M84</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M60A2_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M60A2_displayName">
<English>[CSW] M60A2 WP</English> <English>[CSW] M60A2 WP</English>
<Japanese>[CSW] M60A2 白リン弾</Japanese> <Japanese>[CSW] M60A2 白リン弾</Japanese>
<Russian>[CSW] M60A2 WP</Russian>
<Korean>[CSW] M60A2 백린연막탄</Korean>
<French>[CSW] M60A2 WP</French>
<Spanish>[CSW] M60A2 WP</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M67AT_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M67AT_displayName">
<English>[CSW] M67 AT Laser Guided</English> <English>[CSW] M67 AT Laser Guided</English>
<Japanese>[CSW] M67 対戦車レーザー誘導弾</Japanese> <Japanese>[CSW] M67 対戦車レーザー誘導弾</Japanese>
<Russian>[CSW] M67 AT Laser Guided</Russian>
<Korean>[CSW] M67 레이저유도 대전차탄</Korean>
<French>[CSW] M67 AT Guidé laser</French>
<Spanish>[CSW] AT Guiado por Láser M67</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M314Illum_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M314Illum_displayName">
<English>[CSW] M314 Illumination</English> <English>[CSW] M314 Illumination</English>
<Japanese>[CSW] M314 照明弾</Japanese> <Japanese>[CSW] M314 照明弾</Japanese>
<Russian>[CSW] M314 Осветительная</Russian>
<Korean>[CSW] M314 조명탄</Korean>
<French>[CSW] M314 Illumination</French>
<Spanish>[CSW] Iluminación M314</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_3OF56_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_3OF56_displayName">
<English>[CSW] 3OF56 HE</English> <English>[CSW] 3OF56 HE</English>
<Japanese>[CSW] 3OF56 榴弾</Japanese> <Japanese>[CSW] 3OF56 榴弾</Japanese>
<Russian>[CSW] 3OF56 HE</Russian>
<Korean>[CSW] 3OF56 고폭탄</Korean>
<French>[CSW] 3OF56 HE</French>
<Spanish>[CSW] HE de 3OF56</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_3OF69M_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_3OF69M_displayName">
<English>[CSW] 3OF69M Laser Guided</English> <English>[CSW] 3OF69M Laser Guided</English>
<Japanese>[CSW] 3OF69M レーザー誘導弾</Japanese> <Japanese>[CSW] 3OF69M レーザー誘導弾</Japanese>
<Russian>[CSW] 3OF69M Laser Guided</Russian>
<Korean>[CSW] 3OF69M 레이저유도탄</Korean>
<French>[CSW] 3OF69M Guidé laser</French>
<Spanish>[CSW] 3OF69M Guiado por Láser</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmWP_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmWP_displayName">
<English>[CSW] 122mm WP</English> <English>[CSW] 122mm WP</English>
<Japanese>[CSW] 122mm 白リン弾</Japanese> <Japanese>[CSW] 122mm 白リン弾</Japanese>
<Russian>[CSW] 122mm WP</Russian>
<Korean>[CSW] 122mm 백린탄</Korean>
<French>[CSW] 122mm WP</French>
<Spanish>[CSW] WP de 122mm</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmSmoke_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmSmoke_displayName">
<English>[CSW] D-462 Smoke</English> <English>[CSW] D-462 Smoke</English>
<Japanese>[CSW] D-462 白煙弾</Japanese> <Japanese>[CSW] D-462 白煙弾</Japanese>
<Russian>[CSW] D-462 Дымовая</Russian>
<Korean>[CSW] D-462 연막탄</Korean>
<French>[CSW] D-462 Fumigène</French>
<Spanish>[CSW] Humo D-462</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmIllum_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmIllum_displayName">
<English>[CSW] S-463 Illumination</English> <English>[CSW] S-463 Illumination</English>
<Japanese>[CSW] S-463 照明弾</Japanese> <Japanese>[CSW] S-463 照明弾</Japanese>
<Russian>[CSW] S-463 Осветительная</Russian>
<Korean>[CSW] S-463 조명탄</Korean>
<French>[CSW] S-463 Eclairante</French>
<Spanish>[CSW] Iluminación S-463</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmAT_displayName"> <Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmAT_displayName">
<English>[CSW] BK-6M HEAT</English> <English>[CSW] BK-6M HEAT</English>
<Japanese>[CSW] BK-6M HEAT弾</Japanese> <Japanese>[CSW] BK-6M HEAT弾</Japanese>
<Russian>[CSW] BK-6M HEAT</Russian>
<Korean>[CSW] BK-6M 대전차고폭탄</Korean>
<French>[CSW] BK-6M HEAT</French>
<Spanish>[CSW] BK-6M HEAT</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -107,12 +107,12 @@ class CfgWeapons {
displayName = SUBCSTRING(CUP_NVG_GPNVG_tan_WP); displayName = SUBCSTRING(CUP_NVG_GPNVG_tan_WP);
NVG_WP_PRESET; NVG_WP_PRESET;
}; };
class CUP_GPNVG_green_WP: CUP_NVG_GPNVG_green { class CUP_NVG_GPNVG_green_WP: CUP_NVG_GPNVG_green {
displayName = SUBCSTRING(CUP_GPNVG_green_WP); displayName = SUBCSTRING(CUP_NVG_GPNVG_green_WP);
NVG_WP_PRESET; NVG_WP_PRESET;
}; };
class CUP_GPNVG_winter_WP: CUP_NVG_GPNVG_winter { class CUP_NVG_GPNVG_winter_WP: CUP_NVG_GPNVG_winter {
displayName = SUBCSTRING(CUP_GPNVG_winter_WP); displayName = SUBCSTRING(CUP_NVG_GPNVG_winter_WP);
NVG_WP_PRESET; NVG_WP_PRESET;
}; };
}; };

View File

@ -6,7 +6,7 @@ class CfgPatches {
units[] = {}; units[] = {};
weapons[] = { weapons[] = {
"CUP_NVG_PVS14_WP", "CUP_NVG_PVS15_black_WP", "CUP_NVG_PVS15_green_WP", "CUP_NVG_PVS15_tan_WP", "CUP_NVG_PVS15_winter_WP", "CUP_NVG_PVS14_WP", "CUP_NVG_PVS15_black_WP", "CUP_NVG_PVS15_green_WP", "CUP_NVG_PVS15_tan_WP", "CUP_NVG_PVS15_winter_WP",
"CUP_NVG_GPNVG_black_WP", "CUP_NVG_GPNVG_tan_WP", "CUP_GPNVG_green_WP", "CUP_GPNVG_winter_WP" "CUP_NVG_GPNVG_black_WP", "CUP_NVG_GPNVG_tan_WP", "CUP_NVG_GPNVG_green_WP", "CUP_NVG_GPNVG_winter_WP"
}; };
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = { requiredAddons[] = {

View File

@ -10,76 +10,89 @@
<Korean>AN/PVS-14 (백색광)</Korean> <Korean>AN/PVS-14 (백색광)</Korean>
<French>AN/PVS-14 (WP)</French> <French>AN/PVS-14 (WP)</French>
<Russian>AN/PVS-14 (БФ)</Russian> <Russian>AN/PVS-14 (БФ)</Russian>
<Spanish>AN/PVS-14 (WP)</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_black_WP"> <Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_black_WP">
<English>AN/PVS-15 (Black, WP)</English> <English>AN/PVS-15 (Black, WP)</English>
<Japanese>AN/PVS-15 (グリーン, 白色蛍光)</Japanese>
<Italian>AN/PVS-15 (Verde, FB)</Italian>
<Polish>AN/PVS-15 (Zielone, WP)</Polish>
<German>AN/PVS-15 (grün, WP)</German>
<Korean>AN/PVS-15 (녹색, 백색광)</Korean>
<French>AN/PVS-15 (vertes, WP)</French>
<Russian>AN/PVS-15 (Зелёный, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_green_WP">
<English>AN/PVS-15 (Green, WP)</English>
<Japanese>AN/PVS-15 (ブラック、白色蛍光)</Japanese> <Japanese>AN/PVS-15 (ブラック、白色蛍光)</Japanese>
<Italian>AN/PVS-15 (Nero, FB)</Italian> <Italian>AN/PVS-15 (Nero, FB)</Italian>
<Polish>AN/PVS-15 (Czarne, WP)</Polish> <Polish>AN/PVS-15 (Czarne, WP)</Polish>
<German>AN/PVS-15 (Schwarz, WP)</German> <German>AN/PVS-15 (Schwarz, WP)</German>
<Korean>AN/PVS-15 (검정, 백색광)</Korean> <Korean>AN/PVS-15 (검정, 백색광)</Korean>
<French>AN/PVS-15 (noires, WP)</French> <French>AN/PVS-15 (Noires, WP)</French>
<Russian>AN/PVS-15 (Чёрный, БФ)</Russian> <Russian>AN/PVS-15 (Чёрный, БФ)</Russian>
<Spanish>AN/PVS-15 (Negras, WP)</Spanish>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_green_WP">
<English>AN/PVS-15 (Green, WP)</English>
<Japanese>AN/PVS-15 (グリーン, 白色蛍光)</Japanese>
<Italian>AN/PVS-15 (Verde, FB)</Italian>
<Polish>AN/PVS-15 (Zielone, WP)</Polish>
<German>AN/PVS-15 (Grün, WP)</German>
<Korean>AN/PVS-15 (녹색, 백색광)</Korean>
<French>AN/PVS-15 (Vertes, WP)</French>
<Russian>AN/PVS-15 (Зелёный, БФ)</Russian>
<Spanish>AN/PVS-15 (Verdes, WP)</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_tan_WP"> <Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_tan_WP">
<English>AN/PVS-15 (Tan, WP)</English> <English>AN/PVS-15 (Tan, WP)</English>
<Japanese>AN/PVS-15 (タン, 白色蛍光)</Japanese> <Japanese>AN/PVS-15 (タン, 白色蛍光)</Japanese>
<Italian>AN/PVS-15 (Marroncina, FB)</Italian> <Italian>AN/PVS-15 (Marroncina, FB)</Italian>
<Polish>AN/PVS-15 (jasnobrązowa, WP)</Polish> <Polish>AN/PVS-15 (Jasnobrązowa, WP)</Polish>
<German>AN/PVS-15 (hellbraun, WP)</German> <German>AN/PVS-15 (Hellbraun, WP)</German>
<Korean>AN/PVS-15 (황갈색, 백색광)</Korean> <Korean>AN/PVS-15 (황갈색, 백색광)</Korean>
<French>AN/PVS-15 (marron clair, WP)</French> <French>AN/PVS-15 (Marron clair, WP)</French>
<Russian>AN/PVS-15 (желтовато-коричневый, БФ)</Russian> <Russian>AN/PVS-15 (Желтовато-коричневый, БФ)</Russian>
<Spanish>AN/PVS-15 (Marrones, WP)</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_winter_WP"> <Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_winter_WP">
<English>AN/PVS-15 (Winter, WP)</English> <English>AN/PVS-15 (Winter, WP)</English>
<Japanese>AN/PVS-15 (冬季迷彩, WP)</Japanese> <Japanese>AN/PVS-15 (冬季迷彩, WP)</Japanese>
<Korean>AN/PVS-15 (설상, WP)</Korean> <Korean>AN/PVS-15 (설상, 백색광)</Korean>
<Russian>AN/PVS-15 (Белый, БФ)</Russian>
<French>AN/PVS-15 (Blanc, WP)</French>
<Spanish>AN/PVS-15 (Blancas, WP)</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_black_WP"> <Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_black_WP">
<English>GPNVG (Black, WP)</English> <English>GPNVG (Black, WP)</English>
<Japanese>GPNVG (グリーン, 白色蛍光)</Japanese>
<Italian>GPNVG (Verde, FB)</Italian>
<Polish>GPNVG (Zielone, WP)</Polish>
<German>GPNVG (grün, WP)</German>
<Korean>GPNVG (녹색, 백색광)</Korean>
<French>GPNVG (vertes, WP)</French>
<Russian>GPNVG (Зелёный, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_tan_WP">
<English>GPNVG (Tan, WP)</English>
<Japanese>GPNVG (タン, 白色蛍光)</Japanese>
<Italian>GPNVG (Marroncina, FB)</Italian>
<Polish>GPNVG (jasnobrązowa, WP)</Polish>
<German>GPNVG (hellbraun, WP)</German>
<Korean>GPNVG (황갈색, 백색광)</Korean>
<French>GPNVG (marron clair, WP)</French>
<Russian>GPNVG (желтовато-коричневый, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_GPNVG_green_WP">
<English>GPNVG (Green, WP)</English>
<Japanese>GPNVG (ブラック、白色蛍光)</Japanese> <Japanese>GPNVG (ブラック、白色蛍光)</Japanese>
<Italian>GPNVG (Nero, FB)</Italian> <Italian>GPNVG (Nero, FB)</Italian>
<Polish>GPNVG (Czarne, WP)</Polish> <Polish>GPNVG (Czarne, WP)</Polish>
<German>GPNVG (Schwarz, WP)</German> <German>GPNVG (Schwarz, WP)</German>
<Korean>GPNVG (검정, 백색광)</Korean> <Korean>GPNVG (검정, 백색광)</Korean>
<French>GPNVG (noires, WP)</French> <French>GPNVG (Noires, WP)</French>
<Russian>GPNVG (Чёрный, БФ)</Russian> <Russian>GPNVG (Чёрный, БФ)</Russian>
<Spanish>GPNVG (Negras, WP)</Spanish>
</Key> </Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_GPNVG_winter_WP"> <Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_tan_WP">
<English>GPNVG (Tan, WP)</English>
<Japanese>GPNVG (タン, 白色蛍光)</Japanese>
<Italian>GPNVG (Marroncina, FB)</Italian>
<Polish>GPNVG (Jasnobrązowa, WP)</Polish>
<German>GPNVG (Hellbraun, WP)</German>
<Korean>GPNVG (황갈색, 백색광)</Korean>
<French>GPNVG (Marron clair, WP)</French>
<Russian>GPNVG (Желтовато-коричневый, БФ)</Russian>
<Spanish>GPNVG (Marrones, WP)</Spanish>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_green_WP">
<English>GPNVG (Green, WP)</English>
<Japanese>GPNVG (グリーン, 白色蛍光)</Japanese>
<Italian>GPNVG (Verde, FB)</Italian>
<Polish>GPNVG (Zielone, WP)</Polish>
<German>GPNVG (Grün, WP)</German>
<Korean>GPNVG (녹색, 백색광)</Korean>
<French>GPNVG (Vertes, WP)</French>
<Russian>GPNVG (Зелёный, БФ)</Russian>
<Spanish>GPNVG (Verdes, WP)</Spanish>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_winter_WP">
<English>GPNVG (Winter, WP)</English> <English>GPNVG (Winter, WP)</English>
<Japanese>GPNVG (冬季迷彩, WP)</Japanese> <Japanese>GPNVG (冬季迷彩, WP)</Japanese>
<Korean>GPNVG (설상, WP)</Korean> <Korean>GPNVG (설상, 백색광)</Korean>
<Russian>AN/PVS-15 (Белый, БФ)</Russian>
<French>GPNVG (Blanc, WP)</French>
<Spanish>GPNVG (Blancas, WP)</Spanish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1,14 +1,5 @@
#include "script_component.hpp" #include "script_component.hpp"
// Remove after next cup release
#pragma hemtt flag pe23_ignore_has_include
#if __has_include("\cup\CUP_Weapons_ACE_compat\config.bin")
#define PATCH_SKIP "CUP_Weapons_ACE_compat"
#endif
#ifdef PATCH_SKIP
ACE_PATCH_NOT_LOADED(ADDON,PATCH_SKIP)
#else
class CfgPatches { class CfgPatches {
class ADDON { class ADDON {
name = COMPONENT_NAME; name = COMPONENT_NAME;
@ -24,8 +15,6 @@ class CfgPatches {
}; };
}; };
#include "CfgEventHandlers.hpp"
#include "CfgMagazines.hpp" #include "CfgMagazines.hpp"
#include "CfgWeapons.hpp" #include "CfgWeapons.hpp"
#include "CfgEventHandlers.hpp"
#endif

View File

@ -434,7 +434,11 @@ class CfgVehicles {
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint",
"era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint",
"era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint",
"era_31_hitpoint", "era_32_hitpoint" "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint",
"era_37_hitpoint", "era_38_hitpoint", "era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint",
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint",
"era_49_hitpoint", "era_50_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint",
"era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint", "era_67_hitpoint"
}; };
EGVAR(vehicle_damage,slatHitpoints)[] = { EGVAR(vehicle_damage,slatHitpoints)[] = {
"SLAT_51_hitpoint", "SLAT_52_hitpoint", "SLAT_53_hitpoint", "SLAT_51_hitpoint", "SLAT_52_hitpoint", "SLAT_53_hitpoint",
@ -470,6 +474,9 @@ class CfgVehicles {
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint",
"era_49_hitpoint", "era_50_hitpoint" "era_49_hitpoint", "era_50_hitpoint"
}; };
EGVAR(vehicle_damage,slatHitpoints)[] = {
"slat_51_hitpoint", "slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint"
};
}; };
class rhs_t90am_tv: rhs_t90_tv { class rhs_t90am_tv: rhs_t90_tv {
EGVAR(vehicle_damage,eraHitpoints)[] = { EGVAR(vehicle_damage,eraHitpoints)[] = {
@ -483,7 +490,7 @@ class CfgVehicles {
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint", "era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint",
"era_49_hitpoint", "era_50_hitpoint", "era_51_hitpoint", "era_52_hitpoint", "era_53_hitpoint", "era_54_hitpoint", "era_49_hitpoint", "era_50_hitpoint", "era_51_hitpoint", "era_52_hitpoint", "era_53_hitpoint", "era_54_hitpoint",
"era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint",
"era_51_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint" "era_61_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint"
}; };
EGVAR(vehicle_damage,slatHitpoints)[] = { EGVAR(vehicle_damage,slatHitpoints)[] = {
"SLAT_18_hitpoint", "SLAT_19_hitpoint", "SLAT_20_hitpoint", "SLAT_21_hitpoint", "SLAT_18_hitpoint", "SLAT_19_hitpoint", "SLAT_20_hitpoint", "SLAT_21_hitpoint",
@ -492,10 +499,31 @@ class CfgVehicles {
}; };
}; };
class rhs_t90sm_tv: rhs_t90am_tv { class rhs_t90sm_tv: rhs_t90am_tv {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint",
"era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint",
"era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint",
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint",
"era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint",
"era_21_hitpoint", "era_22_hitpoint", "era_24_hitpoint", "era_25_hitpoint",
"era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint",
"era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint",
"era_35_hitpoint", "era_36_hitpoint", "era_37_hitpoint", "era_38_hitpoint",
"era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint",
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint",
"era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint",
"era_26_hitpoint", "era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint",
"era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint",
"era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint",
"era_66_hitpoint", "era_23_hitpoint"
};
EGVAR(vehicle_damage,slatHitpoints)[] = { EGVAR(vehicle_damage,slatHitpoints)[] = {
"SLAT_23_hitpoint", "SLAT_26_hitpoint", "SLAT_51_hitpoint", "SLAT_52_hitpoint", "slat_23_hitpoint", "slat_26_hitpoint", "slat_51_hitpoint",
"SLAT_53_hitpoint", "SLAT_54_hitpoint", "SLAT_55_hitpoint", "SLAT_56_hitpoint", "slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint",
"SLAT_57_hitpoint" "slat_55_hitpoint", "slat_56_hitpoint", "slat_57_hitpoint",
"slat_18_hitpoint", "slat_19_hitpoint", "slat_20_hitpoint",
"slat_21_hitpoint", "slat_22_hitpoint", "slat_24_hitpoint",
"slat_25_hitpoint"
}; };
}; };
@ -539,6 +567,35 @@ class CfgVehicles {
"era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint" "era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint"
}; };
}; };
class rhs_t80um: rhs_t80u {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint",
"era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint",
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint",
"era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint",
"era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint",
"era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint"
};
};
class rhs_t15_base;
class rhs_t15_tv: rhs_t15_base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint",
"era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint",
"era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint",
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint",
"era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint",
"era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint",
"era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint",
"era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint",
"era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint",
"era_37_hitpoint"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"slat_38_hitpoint", "slat_39_hitpoint", "slat_40_hitpoint", "slat_41_hitpoint"
};
};
// Wirecutter Backpacks // Wirecutter Backpacks
class rhs_assault_umbts; class rhs_assault_umbts;

View File

@ -5,7 +5,6 @@ class CfgVehicles {
class StaticGrenadeLauncher; class StaticGrenadeLauncher;
class rhs_SPG9_base: AT_01_base_F { class rhs_SPG9_base: AT_01_base_F {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_SPG9); proxyWeapon = QGVAR(rhs_weap_SPG9);
@ -26,7 +25,6 @@ class CfgVehicles {
}; };
class rhs_Kornet_Base: AT_01_base_F { class rhs_Kornet_Base: AT_01_base_F {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_9K133_launcher); proxyWeapon = QGVAR(rhs_weap_9K133_launcher);
@ -40,7 +38,6 @@ class CfgVehicles {
}; };
class rhs_Metis_Base: AT_01_base_F { class rhs_Metis_Base: AT_01_base_F {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_9K115_2_launcher); proxyWeapon = QGVAR(rhs_weap_9K115_2_launcher);
@ -54,7 +51,6 @@ class CfgVehicles {
}; };
class rhs_2b14_82mm_Base: StaticMortar { class rhs_2b14_82mm_Base: StaticMortar {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
magazineLocation = ""; magazineLocation = "";
@ -99,7 +95,6 @@ class CfgVehicles {
}; };
class RHS_AGS30_TriPod_base: StaticGrenadeLauncher { class RHS_AGS30_TriPod_base: StaticGrenadeLauncher {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_AGS30); proxyWeapon = QGVAR(rhs_weap_AGS30);

View File

@ -1,7 +1,6 @@
class CfgVehicles { class CfgVehicles {
class StaticMGWeapon; class StaticMGWeapon;
class rhs_DSHKM_base: StaticMGWeapon { class rhs_DSHKM_base: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_DSHKM); proxyWeapon = QGVAR(rhs_weap_DSHKM);

Some files were not shown because too many files have changed in this diff Show More