Merge branch 'master' into pr/9758

This commit is contained in:
johnb432 2024-04-01 10:34:16 +02:00
commit 33999a00e4
207 changed files with 1090 additions and 634 deletions

View File

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

View File

@ -1,7 +1,5 @@
#include "script_component.hpp"
#include "initKeybinds.inc.sqf"
GVAR(currentbulletID) = -1;
GVAR(Protractor) = false;
@ -11,6 +9,8 @@ GVAR(currentGrid) = 0;
if (!hasInterface) exitWith {};
#include "initKeybinds.inc.sqf"
["CBA_settingsInitialized", {
//If not enabled, dont't add PFEH
if (!GVAR(enabled)) exitWith {};
@ -19,11 +19,11 @@ if (!hasInterface) exitWith {};
[] call FUNC(initializeTerrainExtension);
// Register fire event handler
["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler;
["ace_firedPlayerNonLocal", DFUNC(handleFired)] call CBA_fnc_addEventHandler;
["ace_firedPlayer", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler;
["ace_firedPlayerNonLocal", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler;
// 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)
{

View File

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

View File

@ -2,35 +2,6 @@
if (!hasInterface) exitWith {};
["baseline", {
private _fatigue = ACE_player getVariable [QGVAR(aimFatigue), 0];
switch (stance ACE_player) do {
case ("CROUCH"): {
(1.0 + _fatigue ^ 2 * 0.1)
};
case ("PRONE"): {
(1.0 + _fatigue ^ 2 * 2.0)
};
default {
(1.5 + _fatigue ^ 2 * 3.0)
};
};
}, 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;
@ -39,6 +10,21 @@ if (!hasInterface) exitWith {};
["CBA_settingsInitialized", {
if (!GVAR(enabled)) exitWith {};
["baseline", {
private _fatigue = ACE_player getVariable [QGVAR(aimFatigue), 0];
switch (stance ACE_player) do {
case ("CROUCH"): {
(1.0 + _fatigue ^ 2 * 0.1)
};
case ("PRONE"): {
(1.0 + _fatigue ^ 2 * 2.0)
};
default {
(1.5 + _fatigue ^ 2 * 3.0)
};
};
}, QUOTE(ADDON)] call EFUNC(common,addSwayFactor);
// - Post process effect ------------------------------------------------------
GVAR(ppeBlackout) = ppEffectCreate ["ColorCorrections", 4220];
GVAR(ppeBlackout) ppEffectEnable true;

View File

@ -80,30 +80,3 @@
[0, 5, 1, 1],
true
] 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>
<Chinese>影響所有玩家的體力表現,值越高代表體力越好</Chinese>
<Chinesesimp>影响所有玩家的体力表现,值越高代表体力越好</Chinesesimp>
<Russian>Влияет на общую производительность игроков, у которых не задано персональное значение.</Russian>
<Russian>Влияет на общую производительность игроков, у которых не задано персональное значение. Чем выше, тем лучше.</Russian>
<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>
</Key>
@ -59,7 +59,7 @@
<Italian>Influenza la prestazione personalizzata di questa unità. Maggiore significa migliore.</Italian>
<Chinese>影響這個單位的體力表現,值越高代表體力越好</Chinese>
<Chinesesimp>影响这个单位的体力表现,值越高代表体力越好</Chinesesimp>
<Russian>Влияет на общую производительность юнита.</Russian>
<Russian>Влияет на общую производительность юнита.Чем выше, тем лучше.</Russian>
<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>
</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>
<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 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">
<English>Enabled</English>
<Spanish>Activada</Spanish>
@ -250,7 +180,7 @@
<Italian>Abilita/Disabilita la Fatica Avanzata.</Italian>
<Chinese>啟用/關閉進階體力.</Chinese>
<Chinesesimp>启用/关闭进阶体力。</Chinesesimp>
<Russian>Включает / Отключает Продвинутую усталость</Russian>
<Russian>Включает/отключает Продвинутую усталость</Russian>
<Portuguese>Ativa/Desativa Fadiga Avançada.</Portuguese>
<Czech>Aktivuje / deaktivuje Pokročilou únavu.</Czech>
</Key>

View File

@ -2,11 +2,14 @@
// Fired XEH
GVAR(ammoEventHandlers) = createHashMap;
[QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler;
[QGVAR(throwFiredXEH), LINKFUNC(throwFiredXEH)] call CBA_fnc_addEventHandler;
// Exit on HC
if (!hasInterface) exitWith {};
// Temporary Wind Info indication
GVAR(tempWindInfo) = false;
// Ammo/Magazines look-up hash for correctness of initSpeed
GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
{

View File

@ -19,7 +19,7 @@ params ["_unit"];
if !(_unit getVariable [QGVAR(inHand), false]) exitWith {false};
if (vehicle _unit != _unit) exitWith {
if (!isNull objectParent _unit) exitWith {
private _startPos = eyePos _unit;
private _aimLinePos = AGLToASL (positionCameraToWorld [0, 0, 1]);
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)
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
[_unit, "DefaultAction", _unit getVariable [QGVAR(throwAction), -1]] call EFUNC(common,removeActionEventHandler);

View File

@ -18,6 +18,15 @@
params ["_unit"];
TRACE_1("params",_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;
};
// Select next throwable if one already in hand
if (_unit getVariable [QGVAR(inHand), false]) exitWith {
TRACE_1("inHand",_unit);

View File

@ -45,7 +45,7 @@ if (!(_unit getVariable [QGVAR(primed), false])) then {
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
if (vehicle _unit != _unit) then {
if (!isNull objectParent _unit) then {
_newVelocity = _newVelocity vectorAdd (velocity (vehicle _unit));
};

View File

@ -40,3 +40,11 @@ private _category = format ["ACE %1", localize LSTRING(Category)];
true,
1
] 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,20 @@
<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>
</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>
</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>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Prepare">
<English>Prepare/Change Throwable</English>
<Spanish>Preparar/Cambiar objetos lanzables</Spanish>

View File

@ -16,7 +16,7 @@
} forEach _sections;
}] call CBA_fnc_addEventHandler;
[QGVAR(unGarrison), FUNC(unGarrison)] call CBA_fnc_addEventHandler;
[QGVAR(unGarrison), LINKFUNC(unGarrison)] call CBA_fnc_addEventHandler;
[QGVAR(doMove), {
params ["_unitsArray"];
@ -73,6 +73,6 @@
if (isServer) then {
["CAManBase", "init", {
// 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;
};

View File

@ -101,7 +101,7 @@
<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>
<Japanese>インベントリ内の暗視装置を夜間に装備し、日中は解除し収納します。\nこれはNVGをインベントリに追加しません。</Japanese>
<Russian>Оснащает ПНВ в инвентаре в ночное время и отключает его в дневное время.\nНе добавляет ПНВ в инвентарь!</Russian>
<Russian>Экипирует ПНВ в ночное время и отключает его в дневное время.\nНе добавляет ПНВ в инвентарь!</Russian>
</Key>
</Package>
</Project>

View File

@ -123,7 +123,9 @@ class GVAR(stats) {
stats[] = {"maximumLoad"};
displayName = "$STR_a3_rscdisplayarsenal_stat_load";
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));
textStatement = QUOTE(call FUNC(statTextStatement_load));
tabs[] = {{3,4,5}, {}};
};
class ACE_smokeChemTTL: statBase {

View File

@ -98,6 +98,7 @@ PREP(statBarStatement_rateOfFIre);
PREP(statTextStatement_accuracy);
PREP(statTextStatement_explosionTime);
PREP(statTextStatement_illuminators);
PREP(statTextStatement_load);
PREP(statTextStatement_magCount);
PREP(statTextStatement_mass);
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]} ||
{getNumber (_configItemInfo >> "type") in [TYPE_FIRST_AID_KIT, TYPE_MEDIKIT, TYPE_TOOLKIT]} ||
{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]];

View File

@ -78,10 +78,10 @@ if (!isNull curatorCamera) then {
// Make face and voice selection JIP compatible; 3DEN doesn't need this though
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 = [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;
};

View File

@ -160,7 +160,7 @@ private _magazineMiscItems = createHashMap;
{
_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
_grenadeList deleteAt "";

View File

@ -244,7 +244,7 @@ _for do {
// Sort alphabetically, find the previously selected item and select it again
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 {
// Remove sorting text, as it blocks the item name otherwise
@ -258,7 +258,7 @@ if (_right) then {
};
};
} 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 {
_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

@ -1191,7 +1191,7 @@
<Chinesesimp>支持夜视仪</Chinesesimp>
<Czech>Podpora nočního vidění</Czech>
<Turkish>Gece Görüş Desteği</Turkish>
<Korean>야간투시 지원여부</Korean>
<Korean>야간투시 지원</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_supPrim">
<English>Primary supported</English>
@ -1206,7 +1206,7 @@
<Chinese>主武器支援</Chinese>
<Chinesesimp>主镜支持</Chinesesimp>
<Czech>Hlavní část hledí podporuje</Czech>
<Korean>주무기 지원여부</Korean>
<Korean>주무기 지원</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_supSec">
<English>Secondary supported</English>
@ -1221,7 +1221,7 @@
<Chinese>次要武器支援</Chinese>
<Chinesesimp>副镜支持</Chinesesimp>
<Czech>Vedlejší část hledí podporuje</Czech>
<Korean>보조무기 지원여부</Korean>
<Korean>보조무기 지원</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_intPrim">
<English>Primary integrated</English>
@ -1236,17 +1236,21 @@
<Chinese>整合主武器</Chinese>
<Chinesesimp>主镜内置</Chinesesimp>
<Czech>Integrováno do hlavní části hledí</Czech>
<Korean>주무기 내장여부</Korean>
<Korean>주무기 내장</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_ti">
<English>Thermal integrated</English>
<Italian>Termico integrato</Italian>
<Japanese>熱画像装置内蔵</Japanese>
<Russian>Интегрирован в тепловизор.</Russian>
<Russian>Интегрирован тепловизор.</Russian>
<Korean>열화상 내장</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_intPrimTi">
<English>Thermal &amp; Primary integrated</English>
<Italian>Termico e Primario integrato</Italian>
<Japanese>熱画像装置内蔵・プライマリに内蔵</Japanese>
<Russian>Интегрирован в тепловизор и осн.прицел.</Russian>
<Russian>Интегрирован тепловизор и осн.прицел.</Russian>
<Korean>열화상과 주무기 내장</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_NoSup">
<English>Not Supported</English>

View File

@ -1,8 +1,10 @@
#include "script_component.hpp"
if (!hasInterface) exitWith {};
#include "initKeybinds.inc.sqf"
GVAR(active) = 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

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

View File

@ -27,7 +27,7 @@ if (_isUnconc) then {
};
} else {
//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, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation);
};

View File

@ -486,7 +486,7 @@
<Chinesesimp>设置在光标下的单位成俘虏状态。</Chinesesimp>
<Korean>커서의 병력을 포박합니다.</Korean>
<Polish>Ustawia jednostkę pod kursorem jako jeniec.</Polish>
<Russian>Арестовывает указанный курсором юнит</Russian>
<Russian>Арестовывает указанный курсором юнит.</Russian>
<Portuguese>Torna a unidade sob o cursor um prisioneiro</Portuguese>
<French>Capture l'unité sous le curseur.</French>
<Czech>Nastaví jednotku pod kurzorem jako zajatce.</Czech>

View File

@ -35,8 +35,10 @@
</Key>
<Key ID="STR_ACE_Cargo_deployObject">
<English>Deploy</English>
<Italian>Piazza</Italian>
<Russian>Разместить</Russian>
<Japanese>配置する</Japanese>
<Korean>배치하기</Korean>
</Key>
<Key ID="STR_ACE_Cargo_ScrollAction">
<English>Raise/Lower | (Ctrl + Scroll) Rotate</English>
@ -279,14 +281,18 @@
<Key ID="STR_ACE_Cargo_LoadingItem">
<English>Loading %1 into %2...</English>
<Spanish>Cargando %1 en %2...</Spanish>
<Italian>Caricando %1 in %2...</Italian>
<Japanese>%1 を %2 に積み込んでいます・・・</Japanese>
<Russian>Загружаем %1 в %2...</Russian>
<Korean>%1을(를) %2에 싣는 중...</Korean>
</Key>
<Key ID="STR_ACE_Cargo_UnloadingItem">
<English>Unloading %1 from %2...</English>
<Spanish>Descargando %1 de %2...</Spanish>
<Italian>Scaricando %1 da %2...</Italian>
<Japanese>%1 を %2 から降ろしています・・・</Japanese>
<Russian>Выгружаем %1 из %2...</Russian>
<Korean>%1을(를) %2(으)로부터 내리는 중...</Korean>
</Key>
<Key ID="STR_ACE_Cargo_LoadingFailed">
<English>%1&lt;br/&gt;could not be loaded</English>
@ -507,7 +513,7 @@
<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>
<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>
<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>
@ -570,13 +576,17 @@
</Key>
<Key ID="STR_ACE_Cargo_enableDeploy">
<English>Enable deploy</English>
<Italian>Abilita Piazzamento</Italian>
<Russian>Включить размещение</Russian>
<Japanese>配置機能を有効化</Japanese>
<Korean>배치 활성화</Korean>
</Key>
<Key ID="STR_ACE_Cargo_enableDeploy_description">
<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>
<Japanese>配置機能を介して貨物アイテムを降ろすことが出来るかどうかを制御します。</Japanese>
<Korean>배치 방법을 통해 화물 아이템을 내릴 수 있는지 여부를 제어합니다.</Korean>
</Key>
</Package>
</Project>

View File

@ -4,4 +4,4 @@ if (!hasInterface || !GVAR(enabled)) exitWith {};
GVAR(cachedCasings) = createHashMap;
GVAR(casings) = [];
["CAManBase", "FiredMan", {call FUNC(createCasing)}] call CBA_fnc_addClassEventHandler;
["CAManBase", "FiredMan", LINKFUNC(createCasing)] call CBA_fnc_addClassEventHandler;

View File

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

View File

@ -1,5 +1,9 @@
class CfgMovesBasic {
class Default;
// Idle affects legs when weapon switching - fixes units sliding when holstering weapons
class Default {
idle = "";
};
// From ACRE
class ManActions {
GVAR(stop) = QGVAR(stop);

View File

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

View File

@ -18,7 +18,7 @@
//////////////////////////////////////////////////
//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);
["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);
@ -157,9 +157,9 @@ if (isServer) then {
INFO_2("Headbug Used: Name: %1, Animation: %2",_profileName,_animation);
}] call CBA_fnc_addEventHandler;
[QGVAR(fixCollision), FUNC(fixCollision)] call CBA_fnc_addEventHandler;
[QGVAR(fixFloating), FUNC(fixFloating)] call CBA_fnc_addEventHandler;
[QGVAR(fixPosition), FUNC(fixPosition)] call CBA_fnc_addEventHandler;
[QGVAR(fixCollision), LINKFUNC(fixCollision)] call CBA_fnc_addEventHandler;
[QGVAR(fixFloating), LINKFUNC(fixFloating)] call CBA_fnc_addEventHandler;
[QGVAR(fixPosition), LINKFUNC(fixPosition)] call CBA_fnc_addEventHandler;
["ace_loadPersonEvent", LINKFUNC(loadPersonLocal)] call CBA_fnc_addEventHandler;
["ace_unloadPersonEvent", LINKFUNC(unloadPersonLocal)] call CBA_fnc_addEventHandler;
@ -210,8 +210,8 @@ if (isServer) then {
}] call CBA_fnc_addEventHandler;
// Request framework
[QGVAR(requestCallback), FUNC(requestCallback)] call CBA_fnc_addEventHandler;
[QGVAR(receiveRequest), FUNC(receiveRequest)] call CBA_fnc_addEventHandler;
[QGVAR(requestCallback), LINKFUNC(requestCallback)] call CBA_fnc_addEventHandler;
[QGVAR(receiveRequest), LINKFUNC(receiveRequest)] call CBA_fnc_addEventHandler;
[QGVAR(systemChatGlobal), {systemChat _this}] call CBA_fnc_addEventHandler;
@ -220,7 +220,7 @@ if (isServer) then {
[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;
["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;
};
@ -237,14 +237,14 @@ if (!isServer) then {
["ACEa", [player]] call CBA_fnc_serverEvent;
}] call CBA_fnc_addEventHandler;
} else {
["ACEa", FUNC(_handleRequestAllSyncedEvents)] call CBA_fnc_addEventHandler;
["ACEa", LINKFUNC(_handleRequestAllSyncedEvents)] call CBA_fnc_addEventHandler;
};
["ACEe", FUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler;
["ACEs", FUNC(_handleRequestSyncedEvent)] call CBA_fnc_addEventHandler;
["ACEe", LINKFUNC(_handleSyncedEvent)] call CBA_fnc_addEventHandler;
["ACEs", LINKFUNC(_handleRequestSyncedEvent)] call CBA_fnc_addEventHandler;
if (isServer) then {
[FUNC(syncedEventPFH), 0.5, []] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(syncedEventPFH), 0.5, []] call CBA_fnc_addPerFrameHandler;
};
@ -393,8 +393,8 @@ addMissionEventHandler ["PlayerViewChanged", {
// Eventhandlers for player controlled machines
//////////////////////////////////////////////////
[QGVAR(displayTextStructured), {_this call FUNC(displayTextStructured)}] call CBA_fnc_addEventHandler;
[QGVAR(displayTextPicture), {_this call FUNC(displayTextPicture)}] call CBA_fnc_addEventHandler;
[QGVAR(displayTextStructured), LINKFUNC(displayTextStructured)] call CBA_fnc_addEventHandler;
[QGVAR(displayTextPicture), LINKFUNC(displayTextPicture)] call CBA_fnc_addEventHandler;
["ace_unconscious", {
params ["_unit", "_isUnconscious"];
@ -404,7 +404,7 @@ addMissionEventHandler ["PlayerViewChanged", {
};
}] call CBA_fnc_addEventHandler;
["ace_useItem", DFUNC(useItem)] call CBA_fnc_addEventHandler;
["ace_useItem", LINKFUNC(useItem)] call CBA_fnc_addEventHandler;
//////////////////////////////////////////////////
@ -500,10 +500,24 @@ GVAR(reloadMutex_lastMagazines) = [];
// Start the sway loop
//////////////////////////////////////////////////
["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
if ((GVAR(swayFactorsBaseline) + GVAR(swayFactorsMultiplier)) isNotEqualTo []) then {
call FUNC(swayLoop)
if (GVAR(enableSway)) then {
call FUNC(swayLoop);
};
// check for pre-3.16 sway factors being added
if (!isNil {missionNamespace getVariable "ACE_setCustomAimCoef"}) then {

View File

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

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

@ -17,6 +17,6 @@
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);
};

View File

@ -1,6 +1,6 @@
#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)
* Doesn't count assignedItems, weapons, weapon attachments, magazines in weapons
*
@ -19,13 +19,17 @@
params ["_unit", "_itemType"];
private _countItemsInContainer = {
(getItemCargo _this) params ["_itemTypes", "_itemCounts"];
private _count = 0;
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) +
((vestContainer _unit) call _countItemsInContainer) +
((backpackContainer _unit) call _countItemsInContainer)
_count = _count + (_itemCounts param [_itemTypes find _itemType, 0]);
} forEach [uniformContainer _unit, vestContainer _unit, backpackContainer _unit];
_count

View File

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

View File

@ -18,7 +18,7 @@
params ["_unit"];
// 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,

View File

@ -17,12 +17,12 @@
private _baseline = 1;
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;
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);

View File

@ -1,37 +1,84 @@
#include "..\script_component.hpp"
/*
* Author: mharis001
* Returns list of unique items in a unit's inventory.
* Items are cached if unit is ACE_player.
* Author: mharis001, Blue, Brett Mayson
* Returns list of unique items in the target's inventory.
*
* Arguments:
* 0: Unit <OBJECT>
* 0: Target <OBJECT>
* 1: Include magazines <NUMBER>
* 0: No (default)
* 1: Yes
* 2: Only magazines
*
* Return Value:
* Items <ARRAY>
*
* Example:
* [player] call ace_common_fnc_uniqueItems
* [player, 2] call ace_common_fnc_uniqueItems
*
* Public: No
*/
params ["_unit"];
params ["_target", ["_includeMagazines", 0]];
private _fnc_getItems = {
private _items = (getItemCargo uniformContainer _unit) select 0;
_items append ((getItemCargo vestContainer _unit) select 0);
_items append ((getItemCargo backpackContainer _unit) select 0);
private _items = [];
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
};
// Use cached items list if unit is ACE_player
if (_unit isEqualTo ACE_player) then {
// Cache items list if unit is ACE_player
if (_target isEqualTo ACE_player) then {
if (isNil QGVAR(uniqueItemsCache)) then {
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 {
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 _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_colors)]];
private _categoryColors = [_category, LSTRING(subcategory_colors)];
private _categorySway = [_category, LSTRING(subcategory_sway)];
[
QGVAR(checkPBOsAction),
@ -87,7 +88,7 @@ private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_col
QGVAR(epilepsyFriendlyMode),
"CHECKBOX",
[LSTRING(EpilepsyFriendlyMode), LSTRING(EpilepsyFriendlyModeTooltip)],
format ["ACE %1", localize LSTRING(DisplayName)],
_category,
false,
2
] call CBA_fnc_addSetting;
@ -96,7 +97,45 @@ private _categoryColors = [_category, format ["| %1 |", LLSTRING(subcategory_col
QGVAR(progressBarInfo),
"LIST",
[LSTRING(progressBarInfoName), LSTRING(progressBarInfoDesc)],
format ["ACE %1", localize LSTRING(DisplayName)],
_category,
[[0, 1, 2], [LSTRING(None), LSTRING(progressBarInfoPercentage), LSTRING(progressBarInfoTime)], 2],
0
] 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

@ -1828,5 +1828,90 @@
<Chinese>下方</Chinese>
<Turkish>Alt</Turkish>
</Key>
<Key ID="STR_ACE_Common_subcategory_sway">
<English>Weapon Sway</English>
<Japanese>手ぶれ</Japanese>
<Korean>무기 흔들림</Korean>
</Key>
<Key ID="STR_ACE_Common_EnableSway">
<English>Enable Weapon Sway</English>
<Japanese>手ぶれを有効化</Japanese>
<Korean>무기 흔들림 추가</Korean>
</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>
</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>
</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>
</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>
</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>
</Key>
</Package>
</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 "\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 ADDON {
name = COMPONENT_NAME;
@ -34,5 +25,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgEventHandlers.hpp"
#endif

View File

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

View File

@ -1,14 +1,5 @@
#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 ADDON {
name = COMPONENT_NAME;
@ -29,5 +20,3 @@ class CfgPatches {
#include "CfgEventHandlers.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 CUP_Metis_Base: AT_01_base_F {
class StaticATWeapon;
class CUP_Metis_Base: StaticATWeapon {
class ace_csw {
enabled = 1;
proxyWeapon = "CUP_proxy_AT13";
@ -142,7 +142,6 @@ class CfgVehicles {
};
};
class StaticATWeapon;
class CUP_TOW_TriPod_base: StaticATWeapon {
class ace_csw {
enabled = 1;

View File

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

View File

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

View File

@ -6,7 +6,7 @@ class CfgPatches {
units[] = {};
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_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;
requiredAddons[] = {

View File

@ -19,7 +19,7 @@
<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>
<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>
@ -29,7 +29,7 @@
<German>AN/PVS-15 (Schwarz, WP)</German>
<Korean>AN/PVS-15 (검정, 백색광)</Korean>
<French>AN/PVS-15 (noires, WP)</French>
<Russian>AN/PVS-15 (Чёрный, БФ)</Russian>
<Russian>AN/PVS-15 (Зелёный, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_tan_WP">
<English>AN/PVS-15 (Tan, WP)</English>
@ -39,12 +39,13 @@
<German>AN/PVS-15 (hellbraun, WP)</German>
<Korean>AN/PVS-15 (황갈색, 백색광)</Korean>
<French>AN/PVS-15 (marron clair, WP)</French>
<Russian>AN/PVS-15 (желтовато-коричневый, БФ)</Russian>
<Russian>AN/PVS-15 (Желтовато-коричневый, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_PVS15_winter_WP">
<English>AN/PVS-15 (Winter, WP)</English>
<Japanese>AN/PVS-15 (冬季迷彩, WP)</Japanese>
<Korean>AN/PVS-15 (설상, WP)</Korean>
<Korean>AN/PVS-15 (설상, 백색광)</Korean>
<Russian>AN/PVS-15 (Белый, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_black_WP">
<English>GPNVG (Black, WP)</English>
@ -54,7 +55,7 @@
<German>GPNVG (grün, WP)</German>
<Korean>GPNVG (녹색, 백색광)</Korean>
<French>GPNVG (vertes, WP)</French>
<Russian>GPNVG (Зелёный, БФ)</Russian>
<Russian>GPNVG (Чёрный, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_tan_WP">
<English>GPNVG (Tan, WP)</English>
@ -64,9 +65,9 @@
<German>GPNVG (hellbraun, WP)</German>
<Korean>GPNVG (황갈색, 백색광)</Korean>
<French>GPNVG (marron clair, WP)</French>
<Russian>GPNVG (желтовато-коричневый, БФ)</Russian>
<Russian>GPNVG (Желтовато-коричневый, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_GPNVG_green_WP">
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_green_WP">
<English>GPNVG (Green, WP)</English>
<Japanese>GPNVG (ブラック、白色蛍光)</Japanese>
<Italian>GPNVG (Nero, FB)</Italian>
@ -74,12 +75,13 @@
<German>GPNVG (Schwarz, WP)</German>
<Korean>GPNVG (검정, 백색광)</Korean>
<French>GPNVG (noires, WP)</French>
<Russian>GPNVG (Чёрный, БФ)</Russian>
<Russian>GPNVG (Зелёный, БФ)</Russian>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_GPNVG_winter_WP">
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_winter_WP">
<English>GPNVG (Winter, WP)</English>
<Japanese>GPNVG (冬季迷彩, WP)</Japanese>
<Korean>GPNVG (설상, WP)</Korean>
<Korean>GPNVG (설상, 백색광)</Korean>
<Russian>AN/PVS-15 (Белый, БФ)</Russian>
</Key>
</Package>
</Project>

View File

@ -1,14 +1,5 @@
#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 ADDON {
name = COMPONENT_NAME;
@ -27,5 +18,3 @@ class CfgPatches {
#include "CfgMagazines.hpp"
#include "CfgWeapons.hpp"
#include "CfgEventHandlers.hpp"
#endif

View File

@ -10,4 +10,4 @@ GVAR(deployPFH) = -1;
};
}] call CBA_fnc_addEventHandler;
[QGVAR(vehicleDamage), {_this call FUNC(vehicleDamage)}] call CBA_fnc_addEventHandler;
[QGVAR(vehicleDamage), LINKFUNC(vehicleDamage)] call CBA_fnc_addEventHandler;

View File

@ -179,7 +179,7 @@
<Italian>Scorta di munizioni</Italian>
<Korean>탄약 보관</Korean>
<Polish>Magazyn amunicji</Polish>
<Japanese>弾薬の格納場所</Japanese>
<Japanese>弾薬保管位置</Japanese>
<Chinesesimp>弹药存储</Chinesesimp>
<Russian>Хранилище боеприпасов</Russian>
<Spanish>Almacenamiento de munición</Spanish>
@ -192,7 +192,7 @@
<Italian>Determina se ulteriori caricatori verranno stoccati sul suolo o in una cassa di munizioni.</Italian>
<Korean>여분의 탄약을 지면 또는 탄약 상자에 넣을 지 결정합니다.</Korean>
<Polish>Decyduje, czy dodatkowe magazynki przechowywane są na ziemi, czy w skrzynce z amunicją.</Polish>
<Japanese>追加の弾倉を地面に配置するか、弾薬箱内に保管するかを設定します。</Japanese>
<Japanese>追加の弾倉を地面に直接配置するか、弾薬箱内に保管するかを設定します。</Japanese>
<Chinesesimp>设置多余的弹夹是存放在地面上还是弹药箱内</Chinesesimp>
<Russian>Определяет будут ли дополнительные магазины лежать на земле или внутри хранилища</Russian>
<Spanish>Determina si los cargadores extra son almacenados en el suelo o en una caja de munición</Spanish>

View File

@ -1,4 +1,4 @@
#include "script_component.hpp"
[QGVAR(dropItems), FUNC(eventTargetStart)] call CBA_fnc_addEventHandler;
[QGVAR(debugCallback), FUNC(eventCallerFinish)] call CBA_fnc_addEventHandler;
[QGVAR(dropItems), LINKFUNC(eventTargetStart)] call CBA_fnc_addEventHandler;
[QGVAR(debugCallback), LINKFUNC(eventCallerFinish)] call CBA_fnc_addEventHandler;

View File

@ -1,9 +1,9 @@
#include "script_component.hpp"
[QGVAR(showDogtag), DFUNC(showDogtag)] call CBA_fnc_addEventHandler;
[QGVAR(sendDogtagData), DFUNC(sendDogtagData)] call CBA_fnc_addEventHandler;
[QGVAR(getDogtagItem), DFUNC(getDogtagItem)] call CBA_fnc_addEventHandler;
[QGVAR(addDogtagItem), DFUNC(addDogtagItem)] call CBA_fnc_addEventHandler;
[QGVAR(showDogtag), LINKFUNC(showDogtag)] call CBA_fnc_addEventHandler;
[QGVAR(sendDogtagData), LINKFUNC(sendDogtagData)] call CBA_fnc_addEventHandler;
[QGVAR(getDogtagItem), LINKFUNC(getDogtagItem)] call CBA_fnc_addEventHandler;
[QGVAR(addDogtagItem), LINKFUNC(addDogtagItem)] call CBA_fnc_addEventHandler;
// Add actions and event handlers only if ace_medical is loaded
// - Adding actions via config would create a dependency

View File

@ -6,7 +6,7 @@
<Polish>Nieśmiertelnik</Polish>
<Russian>Жетон</Russian>
<Czech>Identifikační známka</Czech>
<Japanese>認識票</Japanese>
<Japanese>ドッグタグ</Japanese>
<German>Erkennungsmarke</German>
<Korean>군번줄</Korean>
<French>Plaque d'identification</French>
@ -22,7 +22,7 @@
<Polish>Sprawdź nieśmiertelnik</Polish>
<Russian>Проверить жетон</Russian>
<Czech>Zkontrolovat známku</Czech>
<Japanese>認識票を確認</Japanese>
<Japanese>ドッグタグを確認</Japanese>
<German>Erkennungsmarke prüfen</German>
<Korean>군번줄 확인</Korean>
<French>Vérifier la plaque d'identification</French>
@ -54,7 +54,7 @@
<Polish>Zabierz</Polish>
<Russian>Взять</Russian>
<Czech>Vezmi</Czech>
<Japanese>取る</Japanese>
<Japanese>拾う</Japanese>
<German>Nehmen</German>
<Korean>회수</Korean>
<French>Prendre</French>
@ -70,7 +70,7 @@
<Polish>Zabrałeś nieśmiertelnik %1...</Polish>
<Russian>Жетон снят с %1...</Russian>
<Czech>Sebral jsem známku od %1...</Czech>
<Japanese>%1 から認識票を取っています・・・</Japanese>
<Japanese>%1 からドッグタグを回収しています・・・</Japanese>
<German>Erkennungsmarke von %1 genommen...</German>
<Korean>%1(으)로부터 군번줄을 회수했습니다...</Korean>
<French>Plaque d'identification prise sur %1...</French>
@ -86,7 +86,7 @@
<Polish>Ktoś już zabrał ten nieśmiertelnik...</Polish>
<Russian>Кто-то уже забрал жетон...</Russian>
<Czech>Někdo jiný už vzal identifikační známku...</Czech>
<Japanese>誰かが既に認識票を取ったようだ・・・</Japanese>
<Japanese>既に誰かがドッグタグを回収したようだ・・・</Japanese>
<German>Jemand anderes hat bereits die Erkennungsmarke genommen...</German>
<Korean>누군가 이미 군번줄을 회수해갔습니다...</Korean>
<French>Quelqu'un d'autre a déjà pris la plaque d'identification...</French>
@ -102,7 +102,7 @@
<German>Anzeige um Erkennungsmarke zu überprüfen</German>
<Chinese>在畫面中顯示檢查兵籍牌</Chinese>
<Chinesesimp>在画面中显示检查兵籍牌</Chinesesimp>
<Japanese>確認中の認識票を画面上に表示します</Japanese>
<Japanese>確認中のドッグタグを画面上に表示します</Japanese>
<Italian>Indicatore su schermo per il controllo delle piastrine</Italian>
<Polish>Wyświetlacz ekranowy dla sprawdzania nieśmiertelników</Polish>
<Russian>Экран для проверки жетонов</Russian>

View File

@ -53,7 +53,7 @@ _unit setVariable [QGVAR(releaseActionID), [
] call EFUNC(common,addActionEventHandler)];
// Add anim changed EH
[_unit, "AnimChanged", FUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler;
[_unit, "AnimChanged", LINKFUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler;
// Prevent UAVs from firing
private _UAVCrew = _target call EFUNC(common,getVehicleUAVCrew);
@ -67,7 +67,4 @@ if (_UAVCrew isNotEqualTo []) then {
};
// Check everything
[FUNC(carryObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler;
// Reset current dragging height
GVAR(currentHeightChange) = 0;
[LINKFUNC(carryObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler;

View File

@ -35,15 +35,35 @@ if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith {
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Drop if the crate is destroyed OR target moved away from carrier (weapon disassembled) OR carrier starts limping
if !(alive _target && {_unit distance _target <= 10} && {_unit getHitPointDamage "HitLegs" < 0.5}) exitWith {
TRACE_2("dead/distance",_unit,_target);
// Drop if the target is destroyed
if (!alive _target) exitWith {
TRACE_2("dead",_unit,_target);
if ((_unit distance _target > 10) && {(CBA_missionTime - _startTime) < 1}) exitWith {
// attachTo seems to have some kind of network delay and target can return an odd position during the first few frames,
// So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos)
TRACE_3("ignoring bad distance at start",_unit distance _target,_startTime,CBA_missionTime);
};
[_unit, _target] call FUNC(dropObject_carry);
_unit setVariable [QGVAR(hint), nil];
call EFUNC(interaction,hideMouseHint);
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Drop if the target moved away from carrier (e.g. weapon disassembled)
// attachTo seems to have some kind of network delay and target can return an odd position during the first few frames,
// So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos)
if (_unit distance _target > 10 && {(CBA_missionTime - _startTime) >= 1}) exitWith {
TRACE_2("distance",_unit,_target);
[_unit, _target] call FUNC(dropObject_carry);
_unit setVariable [QGVAR(hint), nil];
call EFUNC(interaction,hideMouseHint);
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Drop if the carrier starts limping
if (_unit getHitPointDamage "HitLegs" >= 0.5) exitWith {
TRACE_2("limping",_unit,_target);
[_unit, _target] call FUNC(dropObject_carry);
@ -54,7 +74,7 @@ if !(alive _target && {_unit distance _target <= 10} && {_unit getHitPointDamage
};
// Drop static if crew is in it (UAV crew deletion may take a few frames)
if (_target isKindOf "StaticWeapon" && {(crew _target) isNotEqualTo []} && {!(_target getVariable [QGVAR(isUAV), false])}) then {
if (_target isKindOf "StaticWeapon" && {!(_target getVariable [QGVAR(isUAV), false])} && {(crew _target) isNotEqualTo []}) exitWith {
TRACE_2("static weapon crewed",_unit,_target);
[_unit, _target] call FUNC(dropObject_carry);

View File

@ -57,7 +57,7 @@ GVAR(releaseActionID) = [0xF1, [false, false, false], {
["", LLSTRING(Drop)] call EFUNC(interaction,showMouseHint);
// Block firing
if !(GVAR(dragAndFire)) then {
if (!GVAR(dragAndFire)) then {
_unit setVariable [QGVAR(blockFire), [
_unit, "DefaultAction",
{true},
@ -66,10 +66,11 @@ if !(GVAR(dragAndFire)) then {
};
// Add anim changed EH
[_unit, "AnimChanged", FUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler;
[_unit, "AnimChanged", LINKFUNC(handleAnimChanged), [_unit]] call CBA_fnc_addBISEventHandler;
// Prevent UAVs from firing
private _UAVCrew = _target call EFUNC(common,getVehicleUAVCrew);
if (_UAVCrew isNotEqualTo []) then {
{
_target deleteVehicleCrew _x;
@ -79,10 +80,7 @@ if (_UAVCrew isNotEqualTo []) then {
};
// Check everything
[FUNC(dragObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler;
// Reset current dragging height.
GVAR(currentHeightChange) = 0;
[LINKFUNC(dragObjectPFH), 0.5, [_unit, _target, CBA_missionTime]] call CBA_fnc_addPerFrameHandler;
// Fixes not being able to move when in combat pace
[_unit, "forceWalk", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);

View File

@ -31,15 +31,20 @@ if !(_unit getVariable [QGVAR(isDragging), false]) exitWith {
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Drop if the crate is destroyed OR (target moved away from carrier (weapon disasembled))
if (!alive _target || {_unit distance _target > 10}) then {
TRACE_2("dead/distance",_unit,_target);
// Drop if the target is destroyed
if (!alive _target) exitWith {
TRACE_2("dead",_unit,_target);
if ((_unit distance _target > 10) && {(CBA_missionTime - _startTime) < 1}) exitWith {
// attachTo seems to have some kind of network delay and target can return an odd position during the first few frames,
// So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos)
TRACE_3("ignoring bad distance at start",_unit distance _target,_startTime,CBA_missionTime);
};
[_unit, _target] call FUNC(dropObject);
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Drop if the target moved away from carrier (e.g. weapon disassembled)
// attachTo seems to have some kind of network delay and target can return an odd position during the first few frames,
// So wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos)
if (_unit distance _target > 10 && {(CBA_missionTime - _startTime) >= 1}) exitWith {
TRACE_2("distance",_unit,_target);
[_unit, _target] call FUNC(dropObject);
@ -47,7 +52,7 @@ if (!alive _target || {_unit distance _target > 10}) then {
};
// Drop static if crew is in it (UAV crew deletion may take a few frames)
if (_target isKindOf "StaticWeapon" && {(crew _target) isNotEqualTo []} && {!(_target getVariable [QGVAR(isUAV), false])}) then {
if (_target isKindOf "StaticWeapon" && {!(_target getVariable [QGVAR(isUAV), false])} && {(crew _target) isNotEqualTo []}) exitWith {
TRACE_2("static weapon crewed",_unit,_target);
[_unit, _target] call FUNC(dropObject);

View File

@ -26,7 +26,7 @@ if (!isNil QGVAR(releaseActionID)) then {
};
// Stop blocking
if !(GVAR(dragAndFire)) then {
if (!GVAR(dragAndFire)) then {
[_unit, "DefaultAction", _unit getVariable [QGVAR(blockFire), -1]] call EFUNC(common,removeActionEventHandler);
};
@ -82,7 +82,9 @@ if (_unit getVariable ["ACE_isUnconscious", false]) then {
// Recreate UAV crew (add a frame delay or this may cause the vehicle to be moved to [0,0,0])
if (_target getVariable [QGVAR(isUAV), false]) then {
[{
_target setVariable [QGVAR(isUAV), nil, true];
[{
params ["_target"];
if (!alive _target) exitWith {};
TRACE_2("restoring uav crew",_target,getPosASL _target);

View File

@ -44,7 +44,7 @@ if (_tryLoad && {!(_target isKindOf "CAManBase")} && {["ace_cargo"] call EFUNC(c
// Fix anim when aborting carrying persons
if (_target isKindOf "CAManBase" || {animationState _unit in CARRY_ANIMATIONS}) then {
if (vehicle _unit == _unit && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
if (isNull objectParent _unit && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
[_unit, "", 2] call EFUNC(common,doAnimation);
};
@ -88,6 +88,8 @@ if !(_target isKindOf "CAManBase") then {
// Recreate UAV crew (add a frame delay or this may cause the vehicle to be moved to [0,0,0])
if (_target getVariable [QGVAR(isUAV), false]) then {
_target setVariable [QGVAR(isUAV), nil, true];
[{
params ["_target"];
if (!alive _target) exitWith {};

View File

@ -27,7 +27,7 @@ private _carriedItem = _unit getVariable [QGVAR(carriedObject), objNull];
// Disabled for persons
if (_carriedItem isKindOf "CAManBase") exitWith {false};
if !(CBA_events_control) then {
if (!CBA_events_control) then {
// Raise/lower
// Move carried item 15 cm per scroll interval
_scrollAmount = _scrollAmount * 0.15;

View File

@ -17,7 +17,7 @@
params ["_unit"];
// If not dragging, don't do anything
// If not carrying, don't do anything
if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith {};
// If action is already present, don't add it again

View File

@ -31,6 +31,9 @@ if !(_target getVariable [QGVAR(ignoreWeightCarry), false]) then {
// Exit if object weight is over global var value
if (_weight > GETMVAR(ACE_maxWeightCarry,1E11)) exitWith {
// Release claim on object
[objNull, _target, true] call EFUNC(common,claim);
[LLSTRING(UnableToDrag)] call EFUNC(common,displayTextStructured);
};
@ -46,7 +49,7 @@ if (_target isKindOf "CAManBase") then {
_primaryWeapon = "ACE_FakePrimaryWeapon";
};
// Select primary, otherwise the drag animation actions don't work
// Select primary, otherwise the carry animation actions don't work
_unit selectWeapon _primaryWeapon;
// Move a bit closer and adjust direction when trying to pick up a person
@ -81,7 +84,7 @@ _unit setVariable [QGVAR(isCarrying), true, true];
// Required for aborting animation
_unit setVariable [QGVAR(carriedObject), _target, true];
[FUNC(startCarryPFH), 0.2, [_unit, _target, _timer]] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(startCarryPFH), 0.2, [_unit, _target, _timer]] call CBA_fnc_addPerFrameHandler;
// Disable collisions by setting the PhysX mass to almost zero
private _mass = getMass _target;

View File

@ -32,9 +32,9 @@ if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith {
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Same as dragObjectPFH, checks if object is deleted or dead OR (target moved away from carrier (weapon disasembled))
if (!alive _target || {_unit distance _target > 10}) then {
TRACE_4("dead/distance",_unit,_target,_timeOut,CBA_missionTime);
// Drop if the target is destroyed, if the target moved away from carrier (e.g. weapon disassembled) or if the carrier starts limping
if !(alive _target && {_unit distance _target <= 10} && {_unit getHitPointDamage "HitLegs" < 0.5}) exitWith {
TRACE_4("dead/distance/limping",_unit,_target,_timeOut,CBA_missionTime);
[_unit, _target] call FUNC(dropObject_carry);
_idPFH call CBA_fnc_removePerFrameHandler;
@ -42,7 +42,7 @@ if (!alive _target || {_unit distance _target > 10}) then {
// Handle persons vs. objects
if (_target isKindOf "CAManBase") then {
// Drop if in timeout
// Carry person after timeout (animation takes a long time to finish)
if (CBA_missionTime > _timeOut) exitWith {
TRACE_4("Start carry person",_unit,_target,_timeOut,CBA_missionTime);
[_unit, _target] call FUNC(carryObject);
@ -50,13 +50,13 @@ if (_target isKindOf "CAManBase") then {
_idPFH call CBA_fnc_removePerFrameHandler;
};
} else {
// Drop if in timeout
// Timeout: Drop target. CBA_missionTime, because anim length is linked to ingame time
if (CBA_missionTime > _timeOut) exitWith {
TRACE_4("timeout",_unit,_target,_timeOut,CBA_missionTime);
_idPFH call CBA_fnc_removePerFrameHandler;
private _draggedObject = _unit getVariable [QGVAR(draggedObject), objNull];
[_unit, _draggedObject] call FUNC(dropObject_carry);
private _carriedObject = _unit getVariable [QGVAR(carriedObject), objNull];
[_unit, _carriedObject] call FUNC(dropObject_carry);
};
// Wait for the unit to stand up

View File

@ -31,13 +31,16 @@ if !(_target getVariable [QGVAR(ignoreWeightDrag), false]) then {
// Exit if object weight is over global var value
if (_weight > GETMVAR(ACE_maxWeightDrag,1E11)) exitWith {
// Release claim on object
[objNull, _target, true] call EFUNC(common,claim);
[LLSTRING(UnableToDrag)] call EFUNC(common,displayTextStructured);
};
private _primaryWeapon = primaryWeapon _unit;
// Add a primary weapon if the unit has none
if !(GVAR(dragAndFire)) then {
if (!GVAR(dragAndFire)) then {
if (_primaryWeapon == "") then {
_unit addWeapon "ACE_FakePrimaryWeapon";
_primaryWeapon = "ACE_FakePrimaryWeapon";
@ -93,7 +96,7 @@ if (_target isKindOf "CAManBase") then {
// Prevents dragging and carrying at the same time
_unit setVariable [QGVAR(isDragging), true, true];
[FUNC(startDragPFH), 0.2, [_unit, _target, CBA_missionTime + 5]] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(startDragPFH), 0.2, [_unit, _target, CBA_missionTime + 5]] call CBA_fnc_addPerFrameHandler;
// Disable collisions by setting the physx mass to almost zero
private _mass = getMass _target;

View File

@ -32,15 +32,15 @@ if !(_unit getVariable [QGVAR(isDragging), false]) exitWith {
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Same as dragObjectPFH, checks if object is deleted, dead or target moved away from carrier (e.g. weapon disassembled)
if (!alive _target || {_unit distance _target > 10}) then {
// Drop if the target is destroyed or if the target moved away from carrier (e.g. weapon disassembled)
if (!alive _target || {_unit distance _target > 10}) exitWith {
TRACE_4("dead/distance",_unit,_target,_timeOut,CBA_missionTime);
[_unit, _target] call FUNC(dropObject);
_idPFH call CBA_fnc_removePerFrameHandler;
};
// Timeout: Do nothing, quit. CBA_missionTime, because anim length is linked to ingame time
// Timeout: Drop target. CBA_missionTime, because anim length is linked to ingame time
if (CBA_missionTime > _timeOut) exitWith {
TRACE_4("timeout",_unit,_target,_timeOut,CBA_missionTime);
_idPFH call CBA_fnc_removePerFrameHandler;

View File

@ -21,7 +21,7 @@
[LSTRING(allowRunWithLightweight_DisplayName), LSTRING(allowRunWithLightweight_Description)],
LLSTRING(SettingsName),
true,
true
1
] call CBA_fnc_addSetting;
[
@ -30,5 +30,5 @@
[LSTRING(skipContainerWeight_DisplayName), LSTRING(skipContainerWeight_Description)],
LLSTRING(SettingsName),
false,
true
1
] call CBA_fnc_addSetting;

View File

@ -27,7 +27,7 @@
};
};
}] call CBA_fnc_addEventHandler;
[QGVAR(startDefuse), FUNC(startDefuse)] call CBA_fnc_addEventHandler;
[QGVAR(startDefuse), LINKFUNC(startDefuse)] call CBA_fnc_addEventHandler;
//When getting knocked out in medical, trigger deadman explosives:
//Event is global, only run on server (ref: ace_medical_fnc_setUnconscious)
@ -57,6 +57,8 @@ if (isServer) then {
if (!hasInterface) exitWith {};
#include "initKeybinds.inc.sqf"
GVAR(PlacedCount) = 0;
GVAR(Setup) = objNull;
GVAR(pfeh_running) = false;

View File

@ -8,7 +8,6 @@ PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
#include "initKeybinds.inc.sqf"
#include "initSettings.inc.sqf"
GVAR(activeTrigger) = "";

View File

@ -24,7 +24,7 @@ if (isNull _explosive) exitWith {
deleteVehicle _target;
false
};
if (vehicle _unit != _unit || {(_unit call EFUNC(common,uniqueItems)) findAny GVAR(defusalKits) == -1}) exitWith {false};
if (!isNull objectParent _unit || {(_unit call EFUNC(common,uniqueItems)) findAny GVAR(defusalKits) == -1}) exitWith {false};
if (GVAR(RequireSpecialist) && {!([_unit] call EFUNC(Common,isEOD))}) exitWith {false};

View File

@ -30,7 +30,7 @@ for "_i" from 1 to _ran do {
};
if (_unit == ace_player) then {
ctrlSetText [1400,"Calling"];
[FUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler);
[LINKFUNC(dialingPhone), 0.25, [_unit,4,_arr,_code]] call CALLSTACK(CBA_fnc_addPerFrameHandler);
} else {
private _explosive = [_code] call FUNC(getSpeedDialExplosive);
if ((count _explosive) > 0) then {

View File

@ -74,6 +74,7 @@
<Italian>Detona Tutti sul Detonatore Attivo</Italian>
<Russian>Подрыв всех на активном детонаторе</Russian>
<Japanese>選択した点火装置を全て起爆</Japanese>
<Korean>활성화된 격발기의 모든 것을 폭파</Korean>
</Key>
<Key ID="STR_ACE_Explosives_SetActiveTrigger">
<English>Set Active Clacker</English>
@ -81,6 +82,7 @@
<Italian>Imposta Detonatore Attivo</Italian>
<Russian>Установить активный детонатор</Russian>
<Japanese>この点火装置を選択</Japanese>
<Korean>격발기 활성 설정</Korean>
</Key>
<Key ID="STR_ACE_Explosives_CycleActiveTrigger">
<English>Cycle Active Clacker</English>
@ -88,6 +90,7 @@
<Italian>Cambia Detonatore Attivo</Italian>
<Russian>Цикл активного детонатора</Russian>
<Japanese>点火装置を切り替え</Japanese>
<Korean>격발기 활성 전환</Korean>
</Key>
<Key ID="STR_ACE_Explosives_ActiveTrigger">
<English>Active Clacker</English>
@ -95,6 +98,7 @@
<Italian>Detonatore Attivo</Italian>
<Russian>Активный детонатор</Russian>
<Japanese>選択中の点火装置</Japanese>
<Korean>격발기 활성</Korean>
</Key>
<Key ID="STR_ACE_Explosives_DetonateCode">
<English>Explosive code: %1</English>

View File

@ -1,11 +1,9 @@
#include "script_component.hpp"
[QGVAR(deployRopes), {
_this call FUNC(deployRopes);
}] call CBA_fnc_addEventHandler;
[QGVAR(deployRopes), LINKFUNC(deployRopes)] call CBA_fnc_addEventHandler;
[QGVAR(startFastRope), {
[FUNC(fastRopeServerPFH), 0, _this] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(fastRopeServerPFH), 0, _this] call CBA_fnc_addPerFrameHandler;
}] call CBA_fnc_addEventHandler;
// Keybinds

View File

@ -36,4 +36,4 @@ _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
//Start server PFH asap
[QGVAR(startFastRope), [_unit, _vehicle, _usableRope, _usableRopeIndex, false]] call CBA_fnc_serverEvent;
moveOut _unit;
[FUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex, diag_tickTime]] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex, diag_tickTime]] call CBA_fnc_addPerFrameHandler;

View File

@ -20,7 +20,7 @@ _arguments params ["_unit", "", "_rope", "", "_timeToPlayRopeSound"];
_rope params ["", "", "", "_dummy", "_hook"];
//Wait until the unit is actually outside of the helicopter
if (vehicle _unit != _unit) exitWith {};
if (!isNull objectParent _unit) exitWith {};
// dummy lost hook
if (isNull _hook) exitWith {

View File

@ -20,7 +20,7 @@ _arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex", "_hasBeenAttached
_rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook"];
//Wait until the unit is actually outside of the helicopter
if (vehicle _unit != _unit) exitWith {};
if (!isNull objectParent _unit) exitWith {};
//Prevent teleport if hook has been deleted due to rope cut
if (isNull _hook) exitWith {

View File

@ -72,5 +72,5 @@ if (getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(Airburst)) == 1) then {
if (_zeroing < 50) exitWith {};
if (_zeroing > 1500) exitWith {};
[FUNC(handleAirBurstAmmunitionPFH), 0, [_vehicle, _projectile, _zeroing]] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(handleAirBurstAmmunitionPFH), 0, [_vehicle, _projectile, _zeroing]] call CBA_fnc_addPerFrameHandler;
};

View File

@ -96,7 +96,7 @@ if !(hasInterface) exitWith {};
] call CBA_fnc_addItemContextMenuOption;
// Add water source helpers when interaction menu is opened
["ace_interactMenuOpened", {call FUNC(addWaterSourceInteractions)}] call CBA_fnc_addEventHandler;
["ace_interactMenuOpened", LINKFUNC(addWaterSourceInteractions)] call CBA_fnc_addEventHandler;
// Add status modifiers
if (["ace_medical"] call EFUNC(common,isModLoaded)) then {
@ -134,7 +134,7 @@ if !(hasInterface) exitWith {};
["CAManBase", "respawn", LINKFUNC(handleRespawn)] call CBA_fnc_addClassEventHandler;
// Start update loop
[FUNC(update), CBA_missionTime + MP_SYNC_INTERVAL, 1] call CBA_fnc_waitAndExecute;
[LINKFUNC(update), CBA_missionTime + MP_SYNC_INTERVAL, 1] call CBA_fnc_waitAndExecute;
#ifdef DEBUG_MODE_FULL
["ACE_player thirst", {ACE_player getVariable [QXGVAR(thirst), 0]}, [true, 0, 100]] call EFUNC(common,watchVariable);

View File

@ -25,7 +25,7 @@ private _player = ACE_player;
// Exit if player is not alive or a virtual unit
if (!alive _player || {_player isKindOf "VirtualMan_F"}) exitWith {
[FUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute;
[LINKFUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute;
QGVAR(hud) cutFadeOut 0.5;
};
@ -73,4 +73,4 @@ if (!EGVAR(common,OldIsCamera) && {_thirst > XGVAR(hudShowLevel) || {_hunger > X
QGVAR(hud) cutFadeOut 0.5;
};
[FUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute;
[LINKFUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute;

View File

@ -11,7 +11,7 @@ if (!hasInterface) exitWith {};
GVAR(fingersHash) = createHashMap;
GVAR(pfeh_id) = -1;
[QGVAR(fingered), {_this call FUNC(incomingFinger)}] call CBA_fnc_addEventHandler;
[QGVAR(fingered), LINKFUNC(incomingFinger)] call CBA_fnc_addEventHandler;
}] call CBA_fnc_addEventHandler;
//Add Keybind:

View File

@ -1,10 +1,10 @@
#include "script_component.hpp"
[QGVAR(burn), FUNC(burn)] call CBA_fnc_addEventHandler;
[QGVAR(burn), LINKFUNC(burn)] call CBA_fnc_addEventHandler;
[QGVAR(playScream), {
params ["_scream", "_source"];
// only play sound if enabled in settings
if (GVAR(enableScreams)) then {
// only play sound if enabled in settings and enabled for the unit
if (GVAR(enableScreams) && {_source getVariable [QGVAR(enableScreams), true]}) then {
_source say3D _scream;
};
}] call CBA_fnc_addEventHandler;
@ -31,8 +31,7 @@
[GVAR(fireSources), _key] call CBA_fnc_hashRem;
}] call CBA_fnc_addEventHandler;
[{ _this call FUNC(fireManagerPFH) }, FIRE_MANAGER_PFH_DELAY, []] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(fireManagerPFH), FIRE_MANAGER_PFH_DELAY, []] call CBA_fnc_addPerFrameHandler;
GVAR(fireSources) = [[], nil] call CBA_fnc_hashCreate;
};
}] call CBA_fnc_addEventHandler;

View File

@ -244,7 +244,7 @@ if (_isBurning) exitWith {};
private _burnIndicatorPFH = _unit getVariable [QGVAR(burnUIPFH), -1];
if (_unit isEqualTo ace_player && { _isThisUnitAlive } && { _burnIndicatorPFH < 0 }) then {
_burnIndicatorPFH = [FUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler;
_burnIndicatorPFH = [LINKFUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler;
_unit setVariable [QGVAR(burnUIPFH), _burnIndicatorPFH];
};
};
@ -296,7 +296,7 @@ if (_isBurning) exitWith {};
if (local _unit) then {
if (_unit isEqualTo ace_player) then {
private _burnIndicatorPFH = [FUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler;
private _burnIndicatorPFH = [LINKFUNC(burnIndicator), 1, _unit] call CBA_fnc_addPerFrameHandler;
_unit setVariable [QGVAR(burnUIPFH), _burnIndicatorPFH];
};

View File

@ -38,7 +38,7 @@ private _perframeCheck = {
_args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"];
// Animation loop (required for longer constructions)
if (animationState _unit isNotEqualTo "AinvPknlMstpSnonWnonDnon_medic4") then {
if (_totalTime != 0 && {animationState _unit != "AinvPknlMstpSnonWnonDnon_medic4"}) then {
// Perform animation
[_unit, "AinvPknlMstpSnonWnonDnon_medic4"] call EFUNC(common,doAnimation);
};
@ -55,4 +55,3 @@ private _perframeCheck = {
LLSTRING(progressBarTitle),
_perframeCheck
] call EFUNC(common,progressBar);

View File

@ -70,6 +70,7 @@ private _mouseClickID = [_player, "DefaultAction", {GVAR(isPlacing) == PLACE_WAI
[_unit, _object] call FUNC(deployConfirm);
} else {
TRACE_1("deleting object",_object);
[QGVAR(onDeployStop), [_unit, _object, _cost]] call CBA_fnc_localEvent;
deleteVehicle _object;
};
};

View File

@ -2,7 +2,7 @@
if (isServer) then {
GVAR(lastFragTime) = -1;
[QGVAR(frag_eh), {_this call FUNC(frago);}] call CBA_fnc_addEventHandler;
[QGVAR(frag_eh), LINKFUNC(frago)] call CBA_fnc_addEventHandler;
};
["CBA_settingsInitialized", {

View File

@ -22,5 +22,5 @@ if (_depth <= 2) then {
private _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHitRange");
private _indirectHit = getNumber(configFile >> "CfgAmmo" >> _ammo >> "indirectHit");
private _testParams = [_pos, [_indirectHitRange, _indirectHit], [], [], -4, _depth, 0];
[DFUNC(findReflections), 0, _testParams] call CBA_fnc_addPerFrameHandler;
[LINKFUNC(findReflections), 0, _testParams] call CBA_fnc_addPerFrameHandler;
};

View File

@ -136,7 +136,7 @@
<Portuguese>Esta definição controla a quantidade máxima de projéteis que o sistema de fragmentação e estilhaçamento irá acompanhar em qualquer momento. Se mais projéteis são disparados, eles não serão rastreados. Diminua essa configuração se você não quiser que o FPS caia em cenários com alta contagem de projéteis (&gt; 200 projéteis no ar ao mesmo tempo)</Portuguese>
<French>Ce paramètre contrôle le nombre maximum de projectiles et d'éclats résultant de la fragmentation, que le système peut suivre à chaque instant.\nSi plus de projectiles sont générés, ils ne seront pas pris en compte. Baissez ce réglage si vous ne voulez pas de chute de FPS en cas de nombre important de projectiles (&gt;200 éclats en même temps).</French>
<Hungarian>Ez a beállítás szabályozza a repeszeződés és pattogzás által kilőtt objektumok követett számát. Ha több ez a szám, ezek az objektumok nem lesznek követve. Csökkentsd ezt a beállítást, ha nem akarsz lassulásokat magas-törmelékmennyiségű helyzetekben (200+ repesz a levegőben egyszerre)</Hungarian>
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (&gt; 200 одновременно летящих снарядов)</Russian>
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. /nСнаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (&gt; 200 одновременно летящих снарядов)</Russian>
<Italian>Questo parametro controlla il numero massimo di proiettili che la frammentazione e il sistema di spalling tracciano in ogni momento. Se vengono sparati ulteriori proiettili, non verranno tracciati. Abbassa questo parametro se non vuoi cali di FPS in scenari con molti proiettili (&gt;200 proiettili in aria contemporaneamente)</Italian>
<Japanese>この設定では、断片化および剥離システムが常に追跡する飛翔体の最大量を制御します。 さらに多くの飛翔体が発射された場合、それらは追跡されません。 弾数が多いシナリオでFPSを低下させたくない場合は、この設定を下げてください。 (一度に200発以上が空中に発射されます)</Japanese>
<Korean>이 설정은 탄환파편 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올 경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하)</Korean>

View File

@ -88,10 +88,10 @@ if (!hasInterface) exitWith {};
if (GVAR(effects) in [2, 3]) then {
// Register fire event handler
["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler;
["ace_firedPlayer", LINKFUNC(handleFired)] call CBA_fnc_addEventHandler;
//Add Explosion XEH
["CAManBase", "explosion", FUNC(handleExplosion)] call CBA_fnc_addClassEventHandler;
["CAManBase", "explosion", LINKFUNC(handleExplosion)] call CBA_fnc_addClassEventHandler;
GVAR(PostProcessEyes) = ppEffectCreate ["ColorCorrections", 1992];
GVAR(PostProcessEyes) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [1, 1, 1, 0]];

View File

@ -22,7 +22,7 @@ if (!alive _unit) exitWith {};
private _fnc_underCover = {
params ["_unit"];
if (vehicle _unit != _unit && {!isTurnedOut _unit}) exitWith {true};
if (!isNull objectParent _unit && {!isTurnedOut _unit}) exitWith {true};
// looking up and no roof over head
private _position = eyePos _unit;

View File

@ -23,7 +23,7 @@ if (!alive _unit) exitWith {};
GVAR(FrameEvent) set [0, !(GVAR(FrameEvent) select 0)];
if (GVAR(FrameEvent) select 0) exitWith {
if (vehicle _unit != _unit && {!isTurnedOut _unit}) exitWith {
if (!isNull objectParent _unit && {!isTurnedOut _unit}) exitWith {
(GVAR(FrameEvent) select 1) set [0, false];
};

View File

@ -101,7 +101,7 @@
</Key>
<Key ID="STR_ACE_Goggles_effects_effectsOnly">
<English>Effects</English>
<Russian>эффекты</Russian>
<Russian>Эффекты</Russian>
<Japanese>エフェクト</Japanese>
<Polish>Efekty</Polish>
<German>Effekte</German>

View File

@ -2,12 +2,12 @@
#include "script_component.hpp"
["ace_flashbangExploded", {_this call FUNC(flashbangExplosionEH)}] call CBA_fnc_addEventHandler;
["ace_flashbangExploded", LINKFUNC(flashbangExplosionEH)] call CBA_fnc_addEventHandler;
// Register fired event handlers
["ace_firedPlayer", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler;
["ace_firedPlayerNonLocal", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler;
["ace_firedNonPlayer", DFUNC(throwGrenade)] call CBA_fnc_addEventHandler;
["ace_firedPlayer", LINKFUNC(throwGrenade)] call CBA_fnc_addEventHandler;
["ace_firedPlayerNonLocal", LINKFUNC(throwGrenade)] call CBA_fnc_addEventHandler;
["ace_firedNonPlayer", LINKFUNC(throwGrenade)] call CBA_fnc_addEventHandler;
if (!hasInterface) exitWith {};

View File

@ -145,11 +145,11 @@ if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then {
//PARTIALRECOVERY - start decreasing effect over time
[{
params ["_strength"];
params ["_strength", "_blend"];
GVAR(flashbangPPEffectCC) ppEffectAdjust [1,1,0,[1,1,1,0],[0,0,0,1],[0,0,0,0]];
GVAR(flashbangPPEffectCC) ppEffectAdjust [1, 1, 0, _blend, [0,0,0,1], [0,0,0,0]];
GVAR(flashbangPPEffectCC) ppEffectCommit (10 * _strength);
}, [_strength], 7 * _strength] call CBA_fnc_waitAndExecute;
}, [_strength, _blend], 7 * _strength] call CBA_fnc_waitAndExecute;
//FULLRECOVERY - end effect
[{

View File

@ -6,7 +6,7 @@
if (isServer) then {
// Request rebalance on any unit spawn (only if distribution enabled)
if (XGVAR(enabled)) then {
["AllVehicles", "initPost", FUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler;
["AllVehicles", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler;
};
// Add disconnect EH
addMissionEventHandler ["HandleDisconnect", {call FUNC(handleDisconnect)}];

View File

@ -13,7 +13,7 @@ if (isServer) then {
GVAR(inRebalance) = false;
GVAR(endMissionCheckDelayed) = false;
GVAR(blacklistType) = [BLACKLIST_UAV];
[QXGVAR(headlessClientJoined), FUNC(handleConnectHC)] call CBA_fnc_addEventHandler;
[QXGVAR(headlessClientJoined), LINKFUNC(handleConnectHC)] call CBA_fnc_addEventHandler;
};
ADDON = true;

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