Merge branch 'master' into pr/9273

This commit is contained in:
johnb432 2024-01-21 09:00:23 +01:00
commit c4b29e6ae7
34 changed files with 303 additions and 99 deletions

View File

@ -5,7 +5,7 @@
<p align="center">
<a href="https://github.com/acemod/ACE3/releases/latest">
<img src="https://img.shields.io/badge/Version-3.16.1-blue.svg?style=flat-square" alt="ACE3 Version">
<img src="https://img.shields.io/badge/Version-3.16.3-blue.svg?style=flat-square" alt="ACE3 Version">
</a>
<a href="https://github.com/acemod/ACE3/issues">
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">

View File

@ -12,57 +12,10 @@ PREP_RECOMPILE_END;
#include "initSettings.inc.sqf"
// Arsenal events
[QGVAR(statsToggle), {
params ["_display", "_showStats"];
private _statsCtrlGroupCtrl = _display displayCtrl IDC_statsBox;
private _statsPreviousPageCtrl = _display displayCtrl IDC_statsPreviousPage;
private _statsNextPageCtrl = _display displayCtrl IDC_statsNextPage;
private _statsCurrentPageCtrl = _display displayCtrl IDC_statsCurrentPage;
{
_x ctrlShow (GVAR(showStats) && {_showStats});
} forEach [
_statsCtrlGroupCtrl,
_statsPreviousPageCtrl,
_statsNextPageCtrl,
_statsCurrentPageCtrl
];
}] call CBA_fnc_addEventHandler;
[QGVAR(statsChangePage), {
_this call FUNC(buttonStatsPage);
}] call CBA_fnc_addEventHandler;
[QGVAR(displayStats), {
_this call FUNC(handleStats);
}] call CBA_fnc_addEventHandler;
[QGVAR(actionsChangePage), {
_this call FUNC(buttonActionsPage);
}] call CBA_fnc_addEventHandler;
[QGVAR(displayActions), {
_this call FUNC(handleActions);
}] call CBA_fnc_addEventHandler;
[QGVAR(actionsToggle), {
params ["_display", "_showActions"];
private _actionsCtrlGroupCtrl = _display displayCtrl IDC_actionsBox;
private _actionsPreviousPageCtrl = _display displayCtrl IDC_actionsPreviousPage;
private _actionsNextPageCtrl = _display displayCtrl IDC_actionsNextPage;
private _actionsCurrentPageCtrl = _display displayCtrl IDC_actionsCurrentPage;
{
_x ctrlShow (GVAR(showActions) && {_showActions});
} forEach [
_actionsCtrlGroupCtrl,
_actionsPreviousPageCtrl,
_actionsNextPageCtrl,
_actionsCurrentPageCtrl
];
}] call CBA_fnc_addEventHandler;
[QGVAR(statsChangePage), LINKFUNC(buttonStatsPage)] call CBA_fnc_addEventHandler;
[QGVAR(displayStats), LINKFUNC(handleStats)] call CBA_fnc_addEventHandler;
[QGVAR(actionsChangePage), LINKFUNC(buttonActionsPage)] call CBA_fnc_addEventHandler;
[QGVAR(displayActions), LINKFUNC(handleActions)] call CBA_fnc_addEventHandler;
call FUNC(compileActions);
call FUNC(compileSorts);
@ -86,5 +39,4 @@ call FUNC(compileStats);
// Setup Tools tab
[keys (uiNamespace getVariable [QGVAR(configItemsTools), createHashMap]), LLSTRING(toolsTab), TOOLS_TAB_ICON, -1, true] call FUNC(addRightPanelButton);
ADDON = true;

View File

@ -2,12 +2,12 @@
#include "..\defines.hpp"
/*
* Author: Brett Mayson
* Handles the previous / next page buttons for actions
* Handles the previous / next page buttons for actions.
*
* Arguments:
* 0: Arsenal display <DISPLAY>
* 1: Actions control <CONTROL>
* 2: Previous or next <BOOL> (false = previous, true = next)
* 1: Actions page <CONTROL>
* 2: Previous (false) or next (true) page <BOOL>
*
* Return Value:
* None
@ -23,4 +23,5 @@ if !(ctrlEnabled _control) exitWith {};
GVAR(currentActionPage) = GVAR(currentActionPage) + ([-1, 1] select _nextPage);
GVAR(actionsInfo) params ["_panelControl", "_curSel", "_itemCfg"];
[QGVAR(displayActions), [_display, _panelControl, _curSel, _itemCfg]] call CBA_fnc_localEvent;

View File

@ -52,10 +52,20 @@ private _ctrl = controlNull;
IDC_buttonCurrentMag2,
IDC_iconBackgroundCurrentMag,
IDC_iconBackgroundCurrentMag2,
IDC_statsBox,
IDC_statsPreviousPage,
IDC_statsNextPage,
IDC_statsCurrentPage
IDC_statsCurrentPage,
IDC_actionsBox,
IDC_actionsPreviousPage,
IDC_actionsNextPage,
IDC_actionsCurrentPage
];
[QGVAR(statsToggle), [_display, _showToggle]] call CBA_fnc_localEvent;
[QGVAR(actionsToggle), [_display, _showToggle]] call CBA_fnc_localEvent;
if (!_showToggle) exitWith {};
// When showing the stats/actions again, update them to fit with currently selected item
GVAR(actionsInfo) params ["_control", "_curSel", "_itemCfg"];
[QGVAR(displayStats), [_display, _control, _curSel, _itemCfg]] call CBA_fnc_localEvent;
[QGVAR(displayActions), [_display, _control, _curSel, _itemCfg]] call CBA_fnc_localEvent;

View File

@ -20,8 +20,8 @@ params ["_display", "_control", "_nextPage"];
TRACE_1("control enabled", ctrlEnabled _control);
if !(ctrlEnabled _control) exitWith {};
GVAR(currentStatPage) = [GVAR(currentStatPage) - 1, GVAR(currentStatPage) + 1] select _nextPage;
GVAR(currentStatPage) = GVAR(currentStatPage) + ([-1, 1] select _nextPage);
GVAR(statsInfo) params ["_isLeftPanel", "_panelControl", "_curSel", "_itemCfg"];
GVAR(statsInfo) params ["", "_panelControl", "_curSel", "_itemCfg"];
[QGVAR(displayStats), [_display, _panelControl, _curSel, _itemCfg]] call CBA_fnc_localEvent;

View File

@ -115,12 +115,11 @@ GVAR(currentVoice) = nil;
GVAR(currentInsignia) = nil;
GVAR(currentAction) = nil;
GVAR(showStats) = nil;
GVAR(currentStatPage) = nil;
GVAR(statsInfo) = nil;
GVAR(showActions) = nil;
GVAR(currentActionPage) = nil;
GVAR(actionsInfo) = nil;
profileNamespace setVariable [QGVAR(favorites), GVAR(favorites)];
GVAR(favoritesOnly) = nil;

View File

@ -74,12 +74,11 @@ GVAR(currentInsignia) = GVAR(center) call BIS_fnc_getUnitInsignia;
GVAR(currentAction) = "Stand";
GVAR(shiftState) = false;
GVAR(showStats) = true;
GVAR(currentStatPage) = 0;
GVAR(statsInfo) = [true, controlNull, nil, nil];
GVAR(showActions) = true;
GVAR(currentActionPage) = 0;
GVAR(actionsInfo) = [controlNull, nil, nil];
// Update current item list
call FUNC(updateCurrentItemsList);

View File

@ -67,7 +67,9 @@ if (!_primaryNVGSupported && {(_opticsModes select {_x select 1}) isEqualTo _opt
_primaryNVGSupported = true;
};
if (_primaryNVGIntegrated) exitWith {LLSTRING(statVisionMode_IntPrim)};
if (_primaryTiIntegrated && _primaryNVGIntegrated) exitWith {LLSTRING(statVisionMode_intPrimTi)};
if (_primaryTiIntegrated) exitWith {LLSTRING(statVisionMode_ti)};
if (_primaryNVGIntegrated) exitWith {LLSTRING(statVisionMode_intPrim)};
if (_primaryNVGSupported) exitWith {LLSTRING(statVisionMode_supPrim)};
if (_secondaryNVGSupported) exitWith {LLSTRING(statVisionMode_supSec)};

View File

@ -1223,7 +1223,7 @@
<Czech>Vedlejší část hledí podporuje</Czech>
<Korean>보조무기 지원여부</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_IntPrim">
<Key ID="STR_ACE_Arsenal_statVisionMode_intPrim">
<English>Primary integrated</English>
<Spanish>Primaria integrada</Spanish>
<German>Primär Integriert</German>
@ -1238,6 +1238,12 @@
<Czech>Integrováno do hlavní části hledí</Czech>
<Korean>주무기 내장여부</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_ti">
<English>Thermal integrated</English>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_intPrimTi">
<English>Thermal &amp; Primary integrated</English>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_NoSup">
<English>Not Supported</English>
<Spanish>No soportada</Spanish>

View File

@ -29,7 +29,7 @@
["blockRadio", false, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered), "ace_unconscious"]] call FUNC(statusEffect_addType);
["blockSpeaking", false, ["ace_unconscious"]] call FUNC(statusEffect_addType);
["disableWeaponAssembly", false, ["ace_common", "ace_common_lockVehicle", "ace_csw"]] call FUNC(statusEffect_addType);
["lockInventory", true, []] call FUNC(statusEffect_addType);
["lockInventory", true, [], true] call FUNC(statusEffect_addType);
[QGVAR(forceWalk), {
params ["_object", "_set"];

View File

@ -32,6 +32,7 @@ ACE_COUNTERS = [];
GVAR(statusEffect_Names) = [];
GVAR(statusEffect_isGlobal) = [];
GVAR(statusEffect_sendJIP) = [];
GVAR(setHearingCapabilityMap) = [];

View File

@ -17,4 +17,4 @@
params [["_vehicle", objNull, [objNull]]];
crew _vehicle select {getText (configOf _x >> "simulation") == "UAVPilot"} // return
(crew _vehicle) select {unitIsUAV _x} // return

View File

@ -5,8 +5,9 @@
*
* Arguments:
* 0: Status Effect Name, this should match a corresponding event name <STRING>
* 1: Send event globaly <BOOL>
* 1: Send event globally <BOOL>
* 2: Common Effect Reaons to pre-seed durring init <ARRAY>
* 3: Send event to JIP (requires sending event globally) <BOOL>
*
* Return Value:
* None
@ -17,14 +18,16 @@
* Public: No
*/
params [["_name", "", [""]], ["_isGlobal", false, [false]], ["_commonReasonsArray", [], [[]]]];
params [["_name", "", [""]], ["_isGlobal", false, [false]], ["_commonReasonsArray", [], [[]]], ["_sendJIP", false, [false]]];
TRACE_3("params",_name,_isGlobal,_commonReasonsArray);
if (_name == "") exitWith {ERROR_1("addStatusEffect - Bad Name %1", _this)};
if (_name in GVAR(statusEffect_Names)) exitWith {WARNING_1("addStatusEffect - Effect Already Added (note, will not update global bit) %1", _this)};
if (_sendJIP && !_isGlobal) exitWith {WARNING_1("addStatusEffect - Trying to add non-global JIP effect %1",_this)};
GVAR(statusEffect_Names) pushBack _name;
GVAR(statusEffect_isGlobal) pushBack _isGlobal;
GVAR(statusEffect_sendJIP) pushBack _sendJIP;
//We add reasons at any time, but more efficenet to add all common ones at one time during init
if (isServer && {_commonReasonsArray isNotEqualTo []}) then {

View File

@ -30,12 +30,21 @@ if (isNull _object) exitWith {};
TRACE_2("checking if event is nil",_x,_effectNumber);
if (_effectNumber != -1) then {
private _eventName = format [QGVAR(%1), _x];
if (GVAR(statusEffect_isGlobal) select _forEachIndex) then {
TRACE_2("Sending Global Event", _object, _effectNumber);
[_eventName, [_object, _effectNumber]] call CBA_fnc_globalEvent;
} else {
TRACE_2("Sending Target Event", _object, _effectNumber);
[_eventName, [_object, _effectNumber], _object] call CBA_fnc_targetEvent;
switch (true) do {
case (GVAR(statusEffect_sendJIP) select _forEachIndex): {
TRACE_2("Sending Global JIP Event", _object, _effectNumber);
private _jipID = format [QGVAR(effect_%1_%2), _eventName, hashValue _object];
[_eventName, [_object, _effectNumber], _jipID] call CBA_fnc_globalEventJIP;
[_jipID, _object] call CBA_fnc_removeGlobalEventJIP;
};
case (GVAR(statusEffect_isGlobal) select _forEachIndex): {
TRACE_2("Sending Global Event", _object, _effectNumber);
[_eventName, [_object, _effectNumber]] call CBA_fnc_globalEvent;
};
default {
TRACE_2("Sending Target Event", _object, _effectNumber);
[_eventName, [_object, _effectNumber], _object] call CBA_fnc_targetEvent;
};
};
};
};

View File

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

View File

@ -0,0 +1,87 @@
#define HEARING(CLASSNAME) \
class CLASSNAME: ItemCore { \
ace_hearing_protection = 0.75; \
ace_hearing_lowerVolume = 0; \
}
#define HEARING_PARENT(CLASSNAME,PARENT) \
class CLASSNAME: PARENT { \
ace_hearing_protection = 0.75; \
ace_hearing_lowerVolume = 0; \
}
class CfgWeapons {
class ItemCore;
class CUP_H_PMC_Beanie_Khaki;
HEARING(CUP_H_BAF_DDPM_Mk6_CREW_PRR);
HEARING(CUP_H_BAF_DPM_Mk6_CREW_PRR);
HEARING(CUP_H_BAF_MTP_Mk6_CREW_PRR);
HEARING(CUP_H_CZ_Cap_Headphones);
HEARING(CUP_H_CZ_Cap_Headphones_des);
HEARING(CUP_H_CZ_Helmet05);
HEARING(CUP_H_CZ_Helmet07);
HEARING(CUP_H_CZ_Helmet08);
HEARING(CUP_H_CZ_Helmet09);
HEARING(CUP_H_CZ_Helmet10);
HEARING(CUP_H_FR_ECH);
HEARING(CUP_H_Ger_Beret_TankCommander_Blk);
HEARING(CUP_H_Ger_Beret_TankCommander_Grn);
HEARING(CUP_H_Ger_Cap_EP_Grn1);
HEARING(CUP_H_Ger_Cap_EP_Grn2);
HEARING(CUP_H_Ger_Cap_EP_Tan1);
HEARING(CUP_H_Ger_Cap_EP_Tan2);
HEARING(CUP_H_OpsCore_Black);
HEARING(CUP_H_OpsCore_Black_SF);
HEARING(CUP_H_OpsCore_Covered_AAF);
HEARING(CUP_H_OpsCore_Covered_AAF_SF);
HEARING(CUP_H_OpsCore_Covered_Fleck);
HEARING(CUP_H_OpsCore_Covered_Fleck_SF);
HEARING(CUP_H_OpsCore_Covered_MCAM);
HEARING(CUP_H_OpsCore_Covered_MCAM_SF);
HEARING(CUP_H_OpsCore_Covered_MCAM_US);
HEARING(CUP_H_OpsCore_Covered_MCAM_US_SF);
HEARING(CUP_H_OpsCore_Covered_MTP);
HEARING(CUP_H_OpsCore_Covered_MTP_SF);
HEARING(CUP_H_OpsCore_Covered_Tigerstripe);
HEARING(CUP_H_OpsCore_Covered_Tigerstripe_SF);
HEARING(CUP_H_OpsCore_Covered_Tropen);
HEARING(CUP_H_OpsCore_Covered_Tropen_SF);
HEARING(CUP_H_OpsCore_Covered_UCP);
HEARING(CUP_H_OpsCore_Covered_UCP_SF);
HEARING(CUP_H_OpsCore_Green);
HEARING(CUP_H_OpsCore_Green_SF);
HEARING(CUP_H_OpsCore_Grey);
HEARING(CUP_H_OpsCore_Grey_SF);
HEARING(CUP_H_OpsCore_Spray);
HEARING(CUP_H_OpsCore_Spray_SF);
HEARING(CUP_H_OpsCore_Spray_US);
HEARING(CUP_H_OpsCore_Spray_US_SF);
HEARING(CUP_H_OpsCore_Tan);
HEARING(CUP_H_OpsCore_Tan_SF);
HEARING_PARENT(CUP_H_PMC_Beanie_Headphones_Khaki,CUP_H_PMC_Beanie_Khaki);
HEARING_PARENT(CUP_H_PMC_Beanie_Headphones_Black,CUP_H_PMC_Beanie_Headphones_Khaki);
HEARING_PARENT(CUP_H_PMC_Beanie_Headphones_Winter,CUP_H_PMC_Beanie_Headphones_Khaki);
HEARING(CUP_H_PMC_Cap_Back_EP_Grey);
HEARING(CUP_H_PMC_Cap_Back_EP_Tan);
HEARING(CUP_H_PMC_Cap_EP_Grey);
HEARING(CUP_H_PMC_Cap_EP_Tan);
HEARING(CUP_H_PMC_EP_Headset);
HEARING(CUP_H_USArmy_HelmetMICH_earpro);
HEARING(CUP_H_USArmy_HelmetMICH_earpro_DCU);
HEARING(CUP_H_USArmy_HelmetMICH_earpro_ess);
HEARING(CUP_H_USArmy_HelmetMICH_earpro_ess_DCU);
HEARING(CUP_H_USArmy_HelmetMICH_earpro_ess_wdl);
HEARING(CUP_H_USArmy_HelmetMICH_earpro_wdl);
HEARING(CUP_H_USArmy_Helmet_ECH1_Black);
HEARING(CUP_H_USArmy_Helmet_ECH1_Green);
HEARING(CUP_H_USArmy_Helmet_ECH1_Sand);
HEARING(CUP_H_USArmy_Helmet_ECH2_Black);
HEARING(CUP_H_USArmy_Helmet_ECH2_GREEN);
HEARING(CUP_H_USArmy_Helmet_ECH2_Sand);
HEARING(CUP_H_USMC_Crew_Helmet);
HEARING(CUP_H_USMC_MICH2000_DEF_DES);
HEARING(CUP_H_USMC_MICH2000_DEF_ESS_DES);
HEARING(CUP_H_USMC_MICH2000_DEF_ESS_WDL);
HEARING(CUP_H_USMC_MICH2000_DEF_WDL);
};

View File

@ -0,0 +1,86 @@
class CfgVehicles {
class SoldierWB;
class Civilian_F;
class CUP_BAF_Soldier_DPM_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_BAF_Soldier_DDPM_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_BAF_Soldier_MTP_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_GER_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_NAPA_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_PMC_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_PMC_Soldier_Winter_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_RUS_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_TK_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_TKI_Insurgent_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_TKG_Guerrilla_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_USMC_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_FR_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Civil_Chernarus_Base: Civilian_F {
modelSides[] = {6};
};
class CUP_Creatures_Civil_Takistan_Base: Civilian_F {
modelSides[] = {6};
};
class CUP_Creatures_Military_ACR_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_CDF_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_UNO_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_OPFINS_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_RACS_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_SLA_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_USA_Soldier_ACU_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_USA_Soldier_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_HIL_Reservist_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_HIL_Recon_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_HIL_Man_Base: SoldierWB {
modelSides[] = {6};
};
class CUP_Creatures_Military_HIL_SF_Base: SoldierWB {
modelSides[] = {6};
};
};

View File

@ -0,0 +1,21 @@
#include "script_component.hpp"
class CfgPatches {
class SUBADDON {
name = COMPONENT_NAME;
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {
"CUP_Creatures_People_LoadOrder",
"ace_nouniformrestrictions"
};
skipWhenMissingDependencies = 1;
author = ECSTRING(common,ACETeam);
authors[] = {"Mike", "Jonpas"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};
#include "CfgVehicles.hpp"

View File

@ -0,0 +1,3 @@
#define SUBCOMPONENT nouniformrestrictions
#define SUBCOMPONENT_BEAUTIFIED No Uniform Restrictions
#include "..\script_component.hpp"

View File

@ -0,0 +1,18 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
name = COMPONENT_NAME;
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"CUP_Creatures_People_LoadOrder"};
skipWhenMissingDependencies = 1;
author = ECSTRING(common,ACETeam);
authors[] = {"Mike", "Jonpas"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};
#include "CfgWeapons.hpp"

View File

@ -0,0 +1,5 @@
#define COMPONENT compat_cup_units
#define COMPONENT_BEAUTIFIED CUP Units Compatibility
#include "\z\ace\addons\main\script_mod.hpp"
#include "\z\ace\addons\main\script_macros.hpp"

View File

@ -36,7 +36,7 @@ _vehicle setVariable [QGVAR(isCookingOff), true, true];
// limit maximum value of intensity to prevent very long cook-off times
_intensity = _intensity min _maxIntensity;
private _config = _vehicle call CBA_fnc_getObjectConfig;
private _config = configOf _vehicle;
private _positions = getArray (_config >> QGVAR(cookoffSelections)) select {(_vehicle selectionPosition _x) isNotEqualTo [0,0,0]};
if (_positions isEqualTo []) then {

View File

@ -40,7 +40,7 @@ if (isServer) then {
if (_ring) then {
private _intensity = 6;
private _radius = 1.5 * ((boundingBoxReal _obj) select 2);
[QEGVAR(fire,addFireSource), [_obj, _radius, _intensity, _obj]] call CBA_fnc_localEvent;
[QEGVAR(fire,addFireSource), [_obj, _radius, _intensity, format [QGVAR(%1), hashValue _obj]]] call CBA_fnc_localEvent;
};
};
@ -52,7 +52,7 @@ if (isServer) then {
deleteVehicle _light;
deleteVehicle _sound;
if (isServer) then {
[QEGVAR(fire,removeFireSource), [_obj]] call CBA_fnc_localEvent;
[QEGVAR(fire,removeFireSource), [format [QGVAR(%1), hashValue _obj]]] call CBA_fnc_localEvent;
};
[_pfh] call CBA_fnc_removePerFrameHandler;
};
@ -198,4 +198,3 @@ if (isServer) then {
];
}, 0, [_obj, _jet, _ring, _time, CBA_missionTime, _light, _fireSelection, _sound, _intensity]] call CBA_fnc_addPerFrameHandler;

View File

@ -20,7 +20,7 @@
params ["_unit", "_target", "_claimed"];
TRACE_3("params",_unit,_target,_claimed);
if (!_claimed) exitWith {};
if (!_claimed) exitWith { WARNING_1("already claimed %1",_this) };
// Exempt from weight check if object has override variable set
private _weight = 0;

View File

@ -20,7 +20,7 @@
params ["_unit", "_target", "_claimed"];
TRACE_3("params",_unit,_target,_claimed);
if (!_claimed) exitWith {};
if (!_claimed) exitWith { WARNING_1("already claimed %1",_this) };
// Exempt from weight check if object has override variable set
private _weight = 0;

View File

@ -12,8 +12,7 @@ GVAR(playerIsVirtual) = false;
["unit", { // Add unit changed EH to check if player is either virtual (logic) or a UAV AI
params ["_unit"];
GVAR(playerIsVirtual) = ((getNumber (configOf _unit >> "isPlayableLogic")) == 1) ||
{(getText (configOf _unit >> "simulation")) == "UAVPilot"};
GVAR(playerIsVirtual) = unitIsUAV _unit || {(getNumber (configOf _unit >> "isPlayableLogic")) == 1};
TRACE_3("unit changed",_unit,typeOf _unit,GVAR(playerIsVirtual));
}, true] call CBA_fnc_addPlayerEventHandler;

View File

@ -1,4 +1,4 @@
#define MAJOR 3
#define MINOR 16
#define PATCHLVL 1
#define BUILD 74
#define PATCHLVL 3
#define BUILD 79

View File

@ -14,7 +14,7 @@ class CfgWeapons {
mapSize = 0.2;
class ItemInfo: CBA_MiscItem_ItemInfo {
mass = 1;
mass = 0.5;
};
};

View File

@ -16,9 +16,8 @@
while {(_allHitPoints param [0, ""]) select [0,1] == "#"} do { WARNING_1("Ignoring Reflector hitpoint %1", _allHitPoints deleteAt 0); };
if (_allHitPoints param [0, ""] != "ACE_HDBracket") then {
private _config = configOf _unit;
if (getText (_config >> "simulation") == "UAVPilot") exitWith {TRACE_1("ignore UAV AI",typeOf _unit);};
if (getNumber (_config >> "isPlayableLogic") == 1) exitWith {TRACE_1("ignore logic unit",typeOf _unit)};
if (unitIsUAV _unit) exitWith {TRACE_1("ignore UAV AI",typeOf _unit);};
if (getNumber ((configOf _unit) >> "isPlayableLogic") == 1) exitWith {TRACE_1("ignore logic unit",typeOf _unit)};
ERROR_1("Bad hitpoints for unit type ""%1""",typeOf _unit);
} else {
// Calling this function inside curly brackets allows the usage of

View File

@ -32,6 +32,11 @@ if (_hitPoint isEqualTo "") then {
if !(isDamageAllowed _unit && {_unit getVariable [QEGVAR(medical,allowDamage), true]}) exitWith {_oldDamage};
private _newDamage = _damage - _oldDamage;
// Happens occasionally for vehiclehit events (see line 80 onwards)
// Just exit early to save some frametime
if (_newDamage == 0 && {_hitpoint isNotEqualTo "ace_hdbracket"}) exitWith {_oldDamage};
// Get scaled armor value of hitpoint and calculate damage before armor
// We scale using passThrough to handle explosive-resistant armor properly (#9063)
// We need realDamage to determine which limb was hit correctly

View File

@ -12,9 +12,8 @@ PREP_RECOMPILE_END;
["CAManBase", "init", {
params ["_unit"];
private _config = configOf _unit;
if (getText (_config >> "simulation") == "UAVPilot") exitWith {TRACE_1("ignore UAV AI",typeOf _unit);};
if (getNumber (_config >> "isPlayableLogic") == 1) exitWith {TRACE_1("ignore logic unit",typeOf _unit)};
if (unitIsUAV _unit) exitWith {TRACE_1("ignore UAV AI",typeOf _unit);};
if (getNumber ((configOf _unit) >> "isPlayableLogic") == 1) exitWith {TRACE_1("ignore logic unit",typeOf _unit)};
// Hopefully this EH gets added first as it can only effect other EH called after it
private _ehIndex = _unit addEventHandler ["Killed", {_this call FUNC(handleKilled)}];

View File

@ -19,7 +19,7 @@ if !(hasInterface) exitWith {};
};
// Exit if third person view is not available
if (difficultyOption "thirdPersonView" == 0) exitWith {
if (difficultyOption "thirdPersonView" != 1) exitWith {
WARNING("View Restriction is enabled, but 3rd person is disabled with server difficulty.");
};

View File

@ -9,8 +9,8 @@ ace:
version:
major: 3
minor: 16
patch: 1
build: 74
patch: 3
build: 79
markdown: kramdown

View File

@ -9,8 +9,8 @@ ace:
version:
major: 3
minor: 16
patch: 1
build: 74
patch: 3
build: 79
markdown: kramdown