Merge branch 'master' into japanesestringtables

This commit is contained in:
KoffeinFlummi 2016-09-27 20:54:17 +02:00
commit 72899643bd
200 changed files with 2355 additions and 1332 deletions

55
.gibot.yml Normal file
View File

@ -0,0 +1,55 @@
stages:
mark_for_closing:
days: 30
labels:
- need more info
- invalid
- can't reproduce
- wontfix
- information required
exclude:
- marked for cleanup
comment:
- 'Hello @{author}! There has been no activity on this ticket for over a period of {days} days. I am automatically replying to let you know we will close this ticket within 1 week due to inactivity and consider this resolved.'
- 'If you believe this in error, please reply with the requested information.'
- 'Thank you. :robot:'
action:
close: false
comment: true
assign_label:
- marked for cleanup
clean_up:
days: 7
labels:
- marked for cleanup
comment:
- 'Hello @{author}! We have detected no activity for {days} days on this ticket. We therefore assume that the original reporter has lost interest or the issue has been resolved.'
- 'Since we have marked this ticket for deletion, we will be closing it.'
- 'If this has been closed in error, please create a comment below and we can reopen this issue. Note that you may need to provide additional information that was requested.'
- 'Thank you. :robot:'
action:
close: true
comment: true
assign_label:
- closed by bot
remove_label:
- marked for cleanup
remind_about_old_ticket:
days: 130
labels:
- bug
- critical bug
exclude:
- need more info
- invalid
- can't reproduce
- wontfix
- information required
- marked for cleanup
- inactive
comment:
- 'Hello @acemod/maintainers. This ticket has been open for over {days} days without any activity.'
action:
comment: true
assign_label:
- inactive

3
.lgtm
View File

@ -1,3 +0,0 @@
approvals = 1
pattern = "(?i)LGTM|(?i):\\+1:|(?i):shipit:"
self_approval_off = true

View File

@ -22,6 +22,7 @@ _initStartTime = CBA_missionTime;
_mapSize = getNumber (configFile >> "CfgWorlds" >> worldName >> "MapSize");
if (("ace_advanced_ballistics" callExtension format["init:%1:%2", worldName, _mapSize]) == "Terrain already initialized") exitWith {
ACE_LOGINFO_1("Terrain already initialized [world: %1]", worldName);
#ifdef DEBUG_MODE_FULL
systemChat "AdvancedBallistics: Terrain already initialized";
#endif
@ -32,11 +33,14 @@ _gridCells = _mapGrids * _mapGrids;
GVAR(currentGrid) = 0;
ACE_LOGINFO_2("Starting Terrain Extension [cells: %1] [world: %2]", _gridCells, worldName);
[{
params ["_args","_idPFH"];
_args params ["_mapGrids", "_gridCells", "_initStartTime"];
if (GVAR(currentGrid) >= _gridCells) exitWith {
ACE_LOGINFO_2("Finished terrain initialization in %1 seconds [world: %2]", ceil(CBA_missionTime - _initStartTime), worldName);
#ifdef DEBUG_MODE_FULL
systemChat format["AdvancedBallistics: Finished terrain initialization in %1 seconds", ceil(CBA_missionTime - _initStartTime)];
#endif

View File

@ -5,6 +5,6 @@ PREP(getMetabolicCosts);
PREP(handleEffects);
PREP(handlePlayerChanged);
PREP(handleStaminaBar);
PREP(mainLoop);
PREP(moduleSettings);
PREP(pfhMain);
PREP(removeDutyFactor);

View File

@ -18,25 +18,27 @@ if (!hasInterface) exitWith {};
["unit", FUNC(handlePlayerChanged)] call CBA_fnc_addPlayerEventHandler;
// - Duty factors -------------------------------------------------------------
[QEGVAR(medical,pain), {
1 + (((_this getVariable [QEGVAR(medical,pain), 0]) min 1) / 10)
}] call FUNC(addDutyFactor);
[QEGVAR(medical,bloodVolume), {
2 - (((_this getVariable [QEGVAR(medical,bloodVolume), 100]) min 100) / 100)
}] call FUNC(addDutyFactor);
[QEGVAR(dragging,isCarrying), {
if (_this getVariable [QEGVAR(dragging,isCarrying), false]) then {
3
} else {
1
};
}] call FUNC(addDutyFactor);
[QEGVAR(weather,temperature), {
(((missionNamespace getVariable [QEGVAR(weather,currentTemperature), 25]) - 35) / 10) max 2 min 1
}] call FUNC(addDutyFactor);
if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then {
[QEGVAR(medical,pain), { // 0->1.0, 0.5->1.05, 1->1.1
linearConversion [0, 1, (_this getVariable [QEGVAR(medical,pain), 0]), 1, 1.1, true];
}] call FUNC(addDutyFactor);
[QEGVAR(medical,bloodVolume), { // 100->1.0, 90->1.1, 80->1.2
linearConversion [100, 0, (_this getVariable [QEGVAR(medical,bloodVolume), 100]), 1, 2, true];
}] call FUNC(addDutyFactor);
};
if (["ACE_Dragging"] call EFUNC(common,isModLoaded)) then {
[QEGVAR(dragging,isCarrying), {
[1, 3] select (_this getVariable [QEGVAR(dragging,isCarrying), false]);
}] call FUNC(addDutyFactor);
};
if (["ACE_Weather"] call EFUNC(common,isModLoaded)) then {
[QEGVAR(weather,temperature), { // 35->1, 45->2
linearConversion [35, 45, (missionNamespace getVariable [QEGVAR(weather,currentTemperature), 25]), 1, 2, true];
}] call FUNC(addDutyFactor);
};
// - Add main PFH -------------------------------------------------------------
[FUNC(pfhMain), 1, []] call CBA_fnc_addPerFrameHandler;
// - Add main loop at 1 second interval -------------------------------------------------------------
[FUNC(mainLoop), [], 1] call CBA_fnc_waitAndExecute;
}] call CBA_fnc_addEventHandler;
["ace_settingChanged", {

View File

@ -1,6 +1,6 @@
/*
* Author: BaerMitUmlaut
* Main perFrameHandler that updates fatigue values.
* Main looping function that updates fatigue values.
*
* Arguments:
* None
@ -9,7 +9,9 @@
* None
*/
#include "script_component.hpp"
if (!alive ACE_player) exitWith {}; // Dead people don't breath, Will also handle null (Map intros)
if (!alive ACE_player) exitWith { // Dead people don't breath, Will also handle null (Map intros)
[FUNC(mainLoop), [], 1] call CBA_fnc_waitAndExecute;
};
private _currentWork = REE;
private _currentSpeed = (vectorMagnitude (velocity ACE_player)) min 6;
@ -61,3 +63,5 @@ private _perceivedFatigue = 1 - (_anReservePercentage min _aeReservePercentage);
if (GVAR(enableStaminaBar)) then {
[GVAR(anReserve) / AN_MAXRESERVE] call FUNC(handleStaminaBar);
};
[FUNC(mainLoop), [], 1] call CBA_fnc_waitAndExecute;

View File

@ -5,66 +5,79 @@
<English>Performance Factor</English>
<German>Leistungsfaktor</German>
<Japanese>パフォーマンス要因</Japanese>
<Polish>Współczynnik wydolności</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_Description">
<English>Influences the overall performance of all players with no custom factor. Higher means better.</English>
<German>Beinflusst die Leistungsfähigkeit aller Spieler ohne eigenen Leistungsfaktor. Ein höherer Wert bedeutet bessere Leistung.</German>
<Japanese>非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。</Japanese>
<Polish>Wpływa na ogólną wydolność organizmu u wszystkich graczy bez ustawionego niestandardowego współczynnika. Więcej znaczy lepiej.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_EdenDescription">
<English>Influences the overall performance of this unit. Higher means better.</English>
<German>Beinflusst die Leistungsfähigkeit dieser Einheit. Ein höherer Wert bedeutet bessere Leistung.</German>
<Japanese>非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。</Japanese>
<Polish>Wpływa na ogólną wydolność tej jednostki. Więcej znaczy lepiej.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor">
<English>Recovery Factor</English>
<German>Erholungsfaktor</German>
<Japanese>回復要因</Japanese>
<Polish>Współczynnik regeneracji</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor_Description">
<English>Changes how fast the player recovers when resting. Higher is faster.</English>
<German>Ändert, wie schnell ein Spieler Ausdauer regeneriert. Ein höherer Wert bedeutet eine schnellere Regeneration.</German>
<Japanese>休憩時は、プレイヤーが早く回復します。高いほど早くなります。</Japanese>
<Polish>Wpływa na czas regeneracji podczas postoju. Więcej znaczy szybciej.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor">
<English>Load Factor</English>
<German>Gewichtsfaktor</German>
<Japanese>負荷要因</Japanese>
<Polish>Współczynnik masy ekwipunku</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor_Description">
<English>Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence.</English>
<German>Erhöht oder verringert, wie viel Einfluss das Ausrüstungsgewicht auf die Leistung hat. Null heißt, dass es keinen Einfluss hat.</German>
<Japanese>重量によりプレイヤーの動作への影響下増加したり、低下します。装備を持っていない場合、影響はしません。</Japanese>
<Polish>Zmniejsza lub zwiększa wpływ ciężaru ekwipunku na wydolność gracza. Zero oznacza kompletny brak wpływu na wydolność.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor">
<English>Terrain Gradient Factor</English>
<German>Terrainsteigungsfaktor</German>
<Japanese>地形の勾配による要因</Japanese>
<Polish>Współczynnik terenu</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor_Description">
<English>Sets how much steep terrain increases stamina loss. Higher means higher stamina loss.</English>
<German>Beeinflusst, wie stark Steigungen den Ausdauerverbrauch erhöhen. Ein höherer Wert erhöht den Ausdauerverbrauch.</German>
<Japanese>地形によって影響する体力の消費量を決定します。高数値ではより体力を消費します。</Japanese>
<Polish>Wpływa na to w jakim stopniu stromy teren wpływa na utratę wytrzymałości. Więcej oznacza szybszą utratę wytrzymałości.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_Enabled">
<English>Enabled</English>
<German>Aktiv</German>
<Japanese>有効化</Japanese>
<Polish>Włączone</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_Enabled_Description">
<English>Enables/disables Advanced Fatigue.</English>
<German>Aktiviert/deaktiviert Advanced Fatigue.</German>
<Japanese>アドバンスド疲労の有効化と無効化</Japanese>
<Polish>Włącza/wyłącza zaawansowaną wytrzymałość</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar">
<English>Show stamina bar</English>
<German>Zeige Ausdauerleiste</German>
<Japanese>体力バーを表示</Japanese>
<Polish>Pokaż pasek wytrzymałości</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar_Description">
<English>Shows the stamina bar.</English>
<German>Zeigt die Ausdauerleiste an.</German>
<Japanese>体力バーを表示します。</Japanese>
<Polish>Pokazuje pasek wytrzymałości.</Polish>
</Key>
</Package>
</Project>

View File

@ -12,6 +12,6 @@ class Extended_PreInit_EventHandlers {
class Extended_PostInit_EventHandlers {
class ADDON {
clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient));
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};

View File

@ -1,5 +1,8 @@
#include "script_component.hpp"
// Fired XEH
[QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler;
// Exit on HC
if (!hasInterface) exitWith {};
@ -63,6 +66,13 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
[_this select 1, "Player changed"] call FUNC(exitThrowMode);
}] call CBA_fnc_addPlayerEventhandler;
["visibleMap", {
if (visibleMap && {ACE_player getVariable [QGVAR(inHand), false]}) then {
[ACE_player, "Opened Map"] call FUNC(exitThrowMode);
};
}] call CBA_fnc_addPlayerEventhandler;
["ace_interactMenuOpened", {
// Exit if advanced throwing is disabled (pick up only supports advanced throwing)
if (!GVAR(enabled)) exitWith {};
@ -80,9 +90,6 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
}] call CBA_fnc_addEventHandler;
// Fired XEH
[QGVAR(throwFiredXEH), FUNC(throwFiredXEH)] call CBA_fnc_addEventHandler;
// Set last thrown time on Vanilla Throwing and Advanced Throwing
["ace_firedPlayer", {
if (_weapon == "Throw") then {

View File

@ -47,11 +47,15 @@ for "_i" from 0.05 to 1.45 step 0.1 do {
if (_newTrajASL distance (getPosASLVisual ACE_player) <= 20) then {
if ((ASLToATL _newTrajASL) select 2 <= 0) then {
_cross = 1
_cross = 1; // 1: Distance Limit (Green)
} else {
// Even vanilla throwables go through glass, only "GEOM" LOD will stop it but that will also stop it when there is glass in a window
if (lineIntersects [_prevTrajASL, _newTrajASL]) then {
_cross = 2;
if (lineIntersects [_prevTrajASL, _newTrajASL]) then { // Checks the "VIEW" LOD
_cross = 2; // 2: View LOD Block (Red)
} else {
if (!((lineIntersectsSurfaces [_prevTrajASL, _newTrajASL, _activeThrowable, ACE_player, true, 1, "GEOM", "FIRE"]) isEqualTo [])) then {
_cross = 3; // 3: GEOM/FIRE LOD Block (Yellow) - pass a3 bulding glass, but blocked on some CUP glass
};
};
};
@ -60,7 +64,7 @@ for "_i" from 0.05 to 1.45 step 0.1 do {
private _movePerc = linearConversion [3, 0, vectorMagnitude (velocity ACE_player), 0, 1, true];
_alpha = _alpha * _movePerc;
private _col = [ [1, 1, 1, _alpha], [0, 1, 0, _alpha], [1, 0, 0, _alpha] ] select _cross;
private _col = [ [1, 1, 1, _alpha], [0, 1, 0, _alpha], [1, 0, 0, _alpha], [1, 1, 0, _alpha] ] select _cross;
if (_cross != 2 && {lineIntersects [eyePos ACE_player, _newTrajASL]}) then {
_col set [3, 0.1]

View File

@ -31,6 +31,12 @@ private _muzzle = _unit getVariable [QGVAR(activeMuzzle), ""];
// Set muzzle ammo to 0 to block vanilla throwing (can only be 0 or 1), removeItem above resets it
_unit setAmmo [_muzzle, 0];
// Handle weird scripted grenades (RHS) which could cause unexpected behaviour
private _nonInheritedCfg = configProperties [configFile >> "CfgAmmo" >> _throwableType, 'configName _x == QGVAR(replaceWith)', false];
if ((count _nonInheritedCfg) == 1) then {
_throwableType = getText (_nonInheritedCfg select 0);
};
// Create actual throwable globally
private _activeThrowableOld = _unit getVariable [QGVAR(activeThrowable), objNull];
private _activeThrowable = createVehicle [_throwableType, _activeThrowableOld, [], 0, "CAN_COLLIDE"];

View File

@ -5,106 +5,127 @@
<English>Advanced Throwing</English>
<Russian>Улучшенный бросок гранат</Russian>
<Japanese>アドバンスド投てき</Japanese>
<Polish>Zaawansowane rzucanie</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Module_Description">
<English>Allows changing advanced throwing behaviour.</English>
<Russian>Позволяет настраивать поведение улучшенного броска гранат.</Russian>
<Japanese>アドバンスド投てきの挙動変更を許可します。</Japanese>
<Polish>Zezwala na zmianę zachowania zaawansowanego trybu rzucania.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Enable_DisplayName">
<English>Enable Advanced Throwing</English>
<Russian>Включить улучшенный бросок</Russian>
<Japanese>アドバンスド投てきを有効化</Japanese>
<Polish>Aktywuj zaawansowane rzucanie</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Enable_Description">
<English>Enables advanced throwing system.</English>
<Russian>Включает систему улучшенного броска.</Russian>
<Japanese>アドバンスド投てきシステムを有効化</Japanese>
<Polish>Aktywuje system zaawansowanego rzucania.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_DisplayName">
<English>Show Throw Arc</English>
<Russian>Показать траекторию броска</Russian>
<Japanese>軌道を表示</Japanese>
<Polish>Pokaż trasę lotu</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_Description">
<English>Enables visualization of the throw arc (where throwable will fly).</English>
<Russian>Включает визуализацию траектории броска (как полетит граната).</Russian>
<Japanese>投てき物の予測軌道の表示を有効化します。</Japanese>
<Polish>Wyświetla wizualizację trasy przelotu granatu.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_DisplayName">
<English>Show Throwing Mouse Controls</English>
<Russian>Показывать управление мышью</Russian>
<Japanese>投てきのマウス操作を表示</Japanese>
<Polish>Pokaż podpowiedzi sterowania myszą</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_Description">
<English>Enables visual cues for mouse controls when throwable is prepared.</English>
<Russian>Включает отображение подсказок по управлению мышью, когда граната подготовлена.</Russian>
<Japanese>投てき物を投げるとき、マウス操作の説明表示を有効化します。</Japanese>
<Polish>Wyświetla podpowiedzi sterowania myszą kiedy obiekt miotany jest w ręku.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_DisplayName">
<English>Enable Throwables Pick Up</English>
<Russian>Включить подбор гранат</Russian>
<Japanese>投てき物の拾い上げを有効化</Japanese>
<Polish>Zezwól na podnoszenie obiektów miotanych</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_Description">
<English>Enables ability to pick up throwables from the ground.</English>
<Russian>Включает возможность подбирать гранаты с земли.</Russian>
<Japanese>地面に落ちている投てき物の拾い上げ動作を有効化します。</Japanese>
<Polish>Umożliwia podnoszenie obiektów miotanych z ziemi.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_DisplayName">
<English>Enable Attached Throwables Pick Up</English>
<Russian>Включить подбор прикрепленных гранат</Russian>
<Japanese>拾い上げた投てき物の取り付けを有効化</Japanese>
<Polish>Zezwól na podnoszenie przyczepionych obiektów miotanych</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_Description">
<English>Enables ability to pick up throwables from attached objects.</English>
<Russian>Включает возможность подбирать гранаты, прикрепленные к объектам.</Russian>
<Japanese>オブジェクトに取り付けられていた投てき物を拾い上げられるようにします。</Japanese>
<Polish>Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów.</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Prepare">
<English>Prepare/Change Throwable</English>
<Russian>Подготовить/заменить гранату</Russian>
<Japanese>機能の起動/変更</Japanese>
<Polish>Przygotuj/zmień ob. miotany</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_dropModeHold">
<English>Throwable Drop Mode (Hold)</English>
<Russian>Режим броска гранаты (удерживать)</Russian>
<Japanese>投てきモード (押しっぱ)</Japanese>
<Polish>Tryb upuszczania ob. miotanego (przytrzymaj)</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_DropModeToggle">
<English>Throwable Drop Mode (Toggle)</English>
<Russian>Режим броска гранаты (переключить)</Russian>
<Japanese>投てきモード (トグル)</Japanese>
<Polish>Tryb upuszczania ob. miotanego (przełącz)</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Primed">
<English>Primed</English>
<Russian>Подготовлена</Russian>
<Japanese>起動した</Japanese>
<Polish>Odbezpieczony</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Throw">
<English>Throw</English>
<Russian>Бросить</Russian>
<Japanese>投げる</Japanese>
<Polish>Rzuć</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_ChangeMode">
<English>(Scroll) Change Mode</English>
<Russian>(Скролл) Изменить режим</Russian>
<Japanese>(スクロール) モード変更</Japanese>
<Polish>(Kółko m.) zmień tryb</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Extend">
<English>(Scroll) Extend</English>
<Russian>(Скролл) Увеличить</Russian>
<Japanese>(スクロール) 遠くに</Japanese>
<Polish>(Kółko m.) przedłuż</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Cook">
<English>(Click) Cook</English>
<Russian>(Клик) Подготовить</Russian>
<Japanese>(クリック) 起爆</Japanese>
<Polish>(Kliknięcie) Odbezpiecz</Polish>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_PickUp">
<English>Pick Up</English>
<Russian>Подобрать</Russian>
<Japanese>拾い上げる</Japanese>
<Polish>Podnieś</Polish>
</Key>
</Package>
</Project>

View File

@ -22,6 +22,7 @@ class CfgWeapons {
};
class Rifle_Base_F: Rifle {};
class Rifle_Short_Base_F: Rifle_Base_F {};
class Rifle_Long_Base_F: Rifle_Base_F {};
// MX
@ -470,7 +471,7 @@ class CfgWeapons {
};
// PD2000
class pdw2000_base_F: Rifle_Base_F {
class pdw2000_base_F: Rifle_Short_Base_F {
aiDispersionCoefY = 18.0;
aiDispersionCoefX = 12.0;
@ -484,7 +485,7 @@ class CfgWeapons {
};
// Vector
class SMG_01_Base: Rifle_Base_F {
class SMG_01_Base: Rifle_Short_Base_F {
aiDispersionCoefY = 18.0;
aiDispersionCoefX = 12.0;

View File

@ -18,7 +18,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "RscTitles.hpp"
class ACE_newEvents {
RangerfinderData = QEGVAR(vector,rangefinderData);
};

View File

@ -19,7 +19,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "GUI_VirtualAmmo.hpp"
class ACE_newEvents {
interactMenuOpened = "ace_interactMenuOpened";
};

View File

@ -15,7 +15,3 @@ class CfgPatches {
};
#include "CfgEventHandlers.hpp"
class ACE_newEvents {
backpackOpened = "ace_backpackOpened";
};

View File

@ -9,7 +9,8 @@ class CfgWeapons {
class MMG_01_base_F;
class MMG_02_base_F;
class Rifle_Base_F;
class Rifle_Long_Base_F;
class Rifle_Short_Base_F: Rifle_Base_F {};
class Rifle_Long_Base_F: Rifle_Base_F {};
class MuzzleSlot;
/* Long Rifles */
@ -189,8 +190,8 @@ class CfgWeapons {
dispersion = 0.0008727; // radians. Equal to 3 MOA.
};
};
class pdw2000_base_F: Rifle_Base_F {};
class SMG_01_Base: Rifle_Base_F {};
class pdw2000_base_F: Rifle_Short_Base_F {};
class SMG_01_Base: Rifle_Short_Base_F {};
class SMG_02_base_F: Rifle_Base_F {};
/* Pistols */

View File

@ -20,11 +20,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "CfgEden.hpp"
class ACE_newEvents {
SetSurrendered = QGVAR(setSurrendered);
SetHandcuffed = QGVAR(setHandcuffed);
MoveOutCaptive = QGVAR(moveOutCaptive);
MoveInCaptive = QGVAR(moveInCaptive);
CaptiveStatusChanged = "ace_captiveStatusChanged";
};

View File

@ -18,13 +18,3 @@ class CfgPatches {
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "menu.hpp"
class ACE_newEvents {
LoadCargo = "ace_loadCargo";
cargoUnloaded = "ace_cargoUnloaded";
cargoLoaded = "ace_cargoLoaded";
AddCargoByClass = "ace_addCargo";
ServerUnloadCargo = QGVAR(serverUnload);
UnloadCargo = "ace_unloadCargo";
cargoAddedByClass = "ace_cargoAdded";
};

View File

@ -49,7 +49,7 @@ private _itemObject = if (_item isEqualType objNull) then {
_newItem
};
_newItem setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply 10));
_itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply 10));
// open parachute and ir light effect
[{
@ -57,13 +57,16 @@ _newItem setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDi
if (isNull _item || {getPos _item select 2 < 1}) exitWith {};
private _itemPosASL = getPosASL _item;
private _itemVelocity = velocity _item;
private _parachute = createVehicle ["B_Parachute_02_F", [0,0,0], [], 0, "CAN_COLLIDE"];
_item attachTo [_parachute, [0,0,0.2]];
_parachute setPosASL _itemPosASL;
_parachute setVelocity _itemVelocity;
// cannot use setPos on parachutes without them closing down
_parachute attachTo [_item, [0,0,0]];
detach _parachute;
private _velocity = velocity _item;
_item attachTo [_parachute, [0,0,-1]];
_parachute setVelocity _velocity;
private _light = "Chemlight_yellow" createVehicle [0,0,0];
_light attachTo [_item, [0,0,0]];

View File

@ -223,11 +223,13 @@
<English>Airdrop</English>
<German>Türlast</German>
<Japanese>空中投下</Japanese>
<Polish>Zrzut zaopatrzenia</Polish>
</Key>
<Key ID="STR_ACE_Cargo_unlevelFlightWarning">
<English>Unlevel Flight</English>
<German>Schieflage</German>
<Japanese>機体が水平ではありません</Japanese>
<Polish>Nierówny lot</Polish>
</Key>
</Package>
</Project>

View File

@ -4,14 +4,17 @@
<Key ID="STR_ACE_Chemlights_Action_Chemlights">
<English>Chemlights</English>
<Japanese>ケミライト</Japanese>
<Polish>Świetliki</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Action_Prepare">
<English>Prepare %1</English>
<Japanese>%1 をつかう</Japanese>
<Polish>Przygotuj %1</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Action_Prepare_Done">
<English>%1&lt;br/&gt;Prepared</English>
<Japanese>%1&amp;lt;br/&amp;gt; をつかった</Japanese>
<Polish>%1&lt;br/&gt;Przygotowany</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Inventory_Full">
<English>No inventory space</English>
@ -29,142 +32,177 @@
<Key ID="STR_ACE_Chemlights_Box_DisplayName">
<English>[ACE] Chemlights</English>
<Japanese>[ACE] ケミライト</Japanese>
<Polish>[ACE] Świetliki</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DisplayName">
<English>Chemlight (Orange)</English>
<Japanese>ケミライト (オレンジ)</Japanese>
<Polish>Świetlik (pomarańczowy)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DisplayNameShort">
<English>Orange Light</English>
<Japanese>オレンジ色</Japanese>
<Polish>Pomarańczowe światło</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Orange_DescriptionShort">
<English>Type: Light - Orange&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - オレンジ&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - pomarańczowe&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_White_DisplayName">
<English>Chemlight (White)</English>
<Japanese>ケミライト (白)</Japanese>
<Polish>Świetlik (biały)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_White_DisplayNameShort">
<English>White Light</English>
<Japanese>白色</Japanese>
<Polish>Białe światło</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_White_DescriptionShort">
<English>Type: Light - White&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 白&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - białe&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DisplayName">
<English>Chemlight (Hi Red)</English>
<Japanese>ケミライト (高輝度 赤)</Japanese>
<Polish>Świetlik (jaskrawy czerwony)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DisplayNameShort">
<English>Red Hi Light</English>
<Japanese>高輝度の赤色</Japanese>
<Polish>Jaskrawe czerwone światło</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiRed_DescriptionShort">
<English>Type: Light - Red Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 赤 (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe czerwone (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayName">
<English>Chemlight (Hi Yellow)</English>
<Japanese>ケミライト (高輝度 黄)</Japanese>
<Polish>Świetlik (jaskrawy żółty)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayNameShort">
<English>Yellow Hi Light</English>
<Japanese>高輝度の黄色</Japanese>
<Polish>Jaskrawe żółte światło</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiYellow_DescriptionShort">
<English>Type: Light - Yellow Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 黄 (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe żółte (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DisplayName">
<English>Chemlight (Hi Orange)</English>
<Japanese>ケミライト (高輝度 オレンジ)</Japanese>
<Polish>Świetlik (jaskrawy pomarańczowy)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DisplayNameShort">
<English>Orange Hi Light</English>
<Japanese>高輝度のオレンジ</Japanese>
<Polish>Jaskrawe pomarańczowe światło</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiOrange_DescriptionShort">
<English>Type: Light - Orange Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 オレンジ (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe pomarańczowe (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayName">
<English>Chemlight (Hi White)</English>
<Japanese>ケミライト (高輝度 白)</Japanese>
<Polish>Świetlik (jaskrawy biały)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayNameShort">
<English>White Hi Light</English>
<Japanese>高輝度の白色</Japanese>
<Polish>Jaskrawe białe światło</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_HiWhite_DescriptionShort">
<English>Type: Light - White Hi (5 minute)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 高輝度 白 (5分間)&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe białe (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DisplayName">
<English>Chemlight (IR)</English>
<Japanese>ケミライト (IR)</Japanese>
<Polish>Świetlik (podczerwony)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DisplayNameShort">
<English>IR Light</English>
<Japanese>赤外線光</Japanese>
<Polish>Światło podczerwone</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_IR_DescriptionShort">
<English>Type: Light - Infrared&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
<Japanese>種類: 照明 - 赤外線&amp;lt;br /&amp;gt;装填数: 1&amp;lt;br /&amp;gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - podczerwone&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Empty_DisplayName">
<English>Chemlight Shield (Empty)</English>
<Japanese>ケミライト シールド (空)</Japanese>
<Polish>Osłona na świetlik (pusta)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Empty_DescriptionShort">
<English>Shield for chemlights. Combine with chemlight to prepare reading light.</English>
<Japanese>ケミライトを入れられます。シールドとケミライトを組み合わせることで、照明にもなりえます。</Japanese>
<Polish>Osłona na świetliki. Połącz ją ze świetlikiem by stworzyć lampkę do czytania.</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Green_DisplayName">
<English>Chemlight Shield (Green)</English>
<Japanese>ケミライト シールド (緑)</Japanese>
<Polish>Osłona na świetlik (zielona)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Green_DescriptionShort">
<English>Green reading light.</English>
<Japanese>緑色の照明。</Japanese>
<Polish>Zielona lampka.</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Red_DisplayName">
<English>Chemlight Shield (Red)</English>
<Japanese>ケミライト シールド (赤)</Japanese>
<Polish>Osłona na świetlik (czerwona)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Red_DescriptionShort">
<English>Red reading light.</English>
<Japanese>赤色の照明。</Japanese>
<Polish>Czerwona lampka.</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Blue_DisplayName">
<English>Chemlight Shield (Blue)</English>
<Japanese>ケミライト シールド (青)</Japanese>
<Polish>Osłona na świetlik (niebieska)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Blue_DescriptionShort">
<English>Blue reading light.</English>
<Japanese>青色の照明。</Japanese>
<Polish>Niebieska lampka.</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DisplayName">
<English>Chemlight Shield (Yellow)</English>
<Japanese>ケミライト シールド (黄)</Japanese>
<Polish>Osłona na świetlik (żółta)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DescriptionShort">
<English>Yellow reading light.</English>
<Japanese>黄色の照明。</Japanese>
<Polish>Żółta lampka.</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Orange_DisplayName">
<English>Chemlight Shield (Orange)</English>
<Japanese>ケミライト シールド (オレンジ)</Japanese>
<Polish>Osłona na świetlik (pomarańczowa)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Orange_DescriptionShort">
<English>Orange reading light.</English>
<Japanese>オレンジの照明。</Japanese>
<Polish>Pomarańczowa lampka.</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_White_DisplayName">
<English>Chemlight Shield (White)</English>
<Japanese>ケミライト シールド (白)</Japanese>
<Polish>Osłona na świetlik (biała)</Polish>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_White_DescriptionShort">
<English>White reading light.</English>

View File

@ -8,4 +8,14 @@ class Cfg3DEN {
};
};
};
class Group {
class AttributeCategories {
class ace_attributes {
displayName = CSTRING(Options);
collapsed = 1;
class Attributes {};
};
};
};
};

View File

@ -2,8 +2,24 @@
class RscStructuredText;
class RscMapControl;
class ctrlStructuredText;
class GVAR(debug_structuredText): ctrlStructuredText {
sizeEx = "16 * pixelH";
size = "16 * pixelH";
};
class RscTitles {
class GVAR(watchVariableUI) {
idd = -1;
onLoad = QUOTE(with uiNameSpace do {GVAR(watchVariableUI) = _this select 0};);
movingEnable = 0;
duration = 999999;
fadeIn = "false";
fadeOut = "false";
class controls {};
};
class ACE_RscHint {
idd = -1;
onLoad = "uiNamespace setVariable ['ACE_ctrlHint', (_this select 0) displayCtrl 1];";

View File

@ -38,7 +38,6 @@ PREP(dropBackpack);
PREP(endRadioTransmission);
PREP(eraseCache);
PREP(errorMessage);
PREP(execNextFrame);
PREP(findUnloadPosition);
PREP(firedEH);
PREP(fixCollision);
@ -85,12 +84,10 @@ PREP(hadamardProduct);
PREP(handleEngine);
PREP(handleModifierKey);
PREP(handleModifierKeyUp);
PREP(handleScrollWheel);
PREP(hasItem);
PREP(hasMagazine);
PREP(headBugFix);
PREP(hideUnit);
PREP(insertionSort);
PREP(interpolateFromArray);
PREP(inTransitionAnim);
PREP(isAwake);
@ -172,8 +169,7 @@ PREP(unloadPersonLocal);
PREP(unmuteUnit);
PREP(useItem);
PREP(useMagazine);
PREP(waitAndExecute);
PREP(waitUntilAndExecute);
PREP(watchVariable);
PREP(waveHeightAt);
PREP(translateToWeaponSpace);
@ -183,14 +179,12 @@ PREP(translateToModelSpace);
PREP(worldToScreenBounds);
// config items
PREP(getConfigType);
PREP(getItemType);
PREP(getWeaponType);
PREP(getWeaponModes);
PREP(getWeaponMuzzles);
// config objects
PREP(getConfigTypeObject);
PREP(getConfigGunner);
PREP(getConfigCommander);
PREP(getSelectionsWithoutHitPoints);
@ -211,10 +205,6 @@ PREP(getTurretsFFV);
PREP(getTurretsOther);
PREP(hasHatch);
// missing inventory commands
PREP(binocularMagazine);
PREP(removeBinocularMagazine);
// ACE_Debug
PREP(getChildren);
PREP(getDisplayConfigName);
@ -224,15 +214,6 @@ PREP(showUser);
PREP(dumpPerformanceCounters);
PREP(dumpArray);
PREP(globalEvent);
PREP(addEventHandler);
PREP(objectEvent);
PREP(targetEvent);
PREP(serverEvent);
PREP(localEvent);
PREP(removeEventHandler);
PREP(removeAlLEventHandlers);
// Synchronized Events
PREP(syncedEventPFH);
PREP(addSyncedEventHandler);
@ -247,17 +228,8 @@ PREP(_handleRequestAllSyncedEvents);
// other eventhandlers
PREP(addActionEventHandler);
PREP(addActionMenuEventHandler);
PREP(addScrollWheelEventHandler);
PREP(addMapMarkerCreatedEventHandler);
PREP(removeActionEventHandler);
PREP(removeActionMenuEventHandler);
PREP(removeScrollWheelEventHandler);
PREP(removeMapMarkerCreatedEventHandler);
// hashes
PREP(hashCreate);
PREP(hashSet);
PREP(hashGet);
PREP(hashHasKey);
PREP(hashRem);

View File

@ -1,4 +1,3 @@
#include "script_component.hpp"
call COMPILE_FILE(init_handleScrollWheel);
call COMPILE_FILE(init_handleModifierKey);

View File

@ -306,71 +306,6 @@ if (!isNull (missionNamespace getVariable ["cba_events_oldUnit", objNull])) then
// "playerChanged" event
["unit", {
ACE_player = (_this select 0);
["ace_playerChanged", _this] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
// "playerVehicleChanged" event
["vehicle", {
["ace_playerVehicleChanged", _this] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
// "playerTurretChanged" event
["turret", {
["ace_playerTurretChanged", _this] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
// "playerWeaponChanged" event
["weapon", {
["ace_playerWeaponChanged", _this] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
// "playerInventoryChanged" event
["loadout", {
private _fnc_getAllGear = {
if (isNull _this) exitWith {[
"",
"",
"", [],
"", [],
"", [],
"", ["","","",""], [],
"", ["","","",""], [],
"", ["","","",""], [],
[],
"",
""
]};
[
headgear _this,
goggles _this,
uniform _this, uniformItems _this,
vest _this, vestItems _this,
backpack _this, backpackItems _this,
primaryWeapon _this, primaryWeaponItems _this, primaryWeaponMagazine _this,
secondaryWeapon _this, secondaryWeaponItems _this, secondaryWeaponMagazine _this,
handgunWeapon _this, handgunItems _this, handgunMagazine _this,
assignedItems _this,
binocular _this,
_this call CBA_fnc_binocularMagazine
]
};
["ace_playerInventoryChanged", [ACE_player, ACE_player call _fnc_getAllGear]] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
// "playerVisionModeChanged" event
["visionMode", {
["ace_playerVisionModeChanged", _this] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
// "cameraViewChanged" event
["cameraView", {
["ace_cameraViewChanged", _this] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
["visibleMap", {
["ace_visibleMapChanged", _this] call CBA_fnc_localEvent;
}] call CBA_fnc_addPlayerEventHandler;
GVAR(OldIsCamera) = false;

View File

@ -14,70 +14,6 @@ class CfgPatches {
};
};
// This class will be deprecated in version 3.8.0
class ACE_newEvents {
// Status effect events
forceWalk = QGVAR(forceWalk);
blockSprint = QGVAR(blockSprint);
setCaptive = QGVAR(setCaptive);
blockDamage = QGVAR(blockDamage);
blockEngine = QGVAR(blockEngine);
// Public listenable events
PlayerJip = "ace_playerJIP";
activeCameraChanged = "ace_activeCameraChanged";
visibleMapChanged = "ace_visibleMapChanged";
cameraViewChanged = "ace_cameraViewChanged";
playerVisionModeChanged = "ace_playerVisionModeChanged";
playerInventoryChanged = "ace_playerInventoryChanged";
playerWeaponChanged = "ace_playerWeaponChanged";
playerTurretChanged = "ace_playerTurretChanged";
playerVehicleChanged = "ace_playerVehicleChanged";
playerChanged = "ace_playerChanged";
SettingsInitialized = "ace_settingsInitialized";
SettingChanged = "ace_settingChanged";
firedNonPlayerVehicle = "ace_firedNonPlayerVehicle";
firedPlayerVehicleNonLocal = "ace_firedPlayerVehicleNonLocal";
firedPlayerVehicle = "ace_firedPlayerVehicle";
firedNonPlayer = "ace_firedNonPlayer";
firedPlayerNonLocal = "ace_firedPlayerNonLocal";
firedPlayer = "ace_firedPlayer";
unloadPersonEvent = "ace_unloadPersonEvent";
loadPersonEvent = "ace_loadPersonEvent";
useItem = "ace_useItem";
infoDisplayChanged = "ace_infoDisplayChanged";
// Internal callable events
setStatusEffect = QGVAR(setStatusEffect);
HeadbugFixUsed = QGVAR(headbugFixUsed);
InitSettingsFromModules = QGVAR(initSettingsFromModules);
enableSimulationGlobal = QGVAR(enableSimulationGlobal);
hideObjectGlobal = QGVAR(hideObjectGlobal);
fixPosition = QGVAR(fixPosition);
fixFloating = QGVAR(fixFloating);
fixCollision = QGVAR(fixCollision);
unlockVehicle = QGVAR(unlockVehicle);
lockVehicle = QGVAR(lockVehicle);
displayTextPicture = QGVAR(displayTextPicture);
displayTextStructured = QGVAR(displayTextStructured);
setVanillaHitPointDamage = QGVAR(setVanillaHitPointDamage);
setVectorDirAndUp = QGVAR(setVectorDirAndUp);
switchMove = QGVAR(switchMove);
playMoveNow = QGVAR(playMoveNow);
playMove = QGVAR(playMove);
setVelocity = QGVAR(setVelocity);
selectLeader = QGVAR(selectLeader);
setSpeaker = QGVAR(setSpeaker);
engineOn = QGVAR(engineOn);
setFuel = QGVAR(setFuel);
setDir = QGVAR(setDir);
// Events framework
SEH_s = "ACEs";
SEH = "ACEe";
SEH_all = "ACEa";
};
#include "CfgEventHandlers.hpp"
#include "CfgLocationTypes.hpp"

View File

@ -1,14 +0,0 @@
#define DEBUG_MODE_FULL
#include "script_component.hpp"
params ["_eventName", "_eventCode"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
[_eventName, _eventCode] call CBA_fnc_addEventHandler;
ACE_DEPRECATED("ace_common_fnc_addEventHandler","3.8.0","CBA_fnc_addEventHandler");

View File

@ -1,35 +0,0 @@
/*
* Author: commy2
* Add an event handler that executes every time the scroll wheel is used. This is needed, because adding a MouseZ display event handler to display 46 will break in save games.
* _this will be [Interval] where 'Interval' is a number.
*
* Arguments:
* 0: Code to execute <CODE, STRING>
*
* Return Value:
* ID of the event script (used to remove it later). <NUMBER>
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_statement"];
ACE_DEPRECATED("ace_common_fnc_addScrollWheelEventHandler", "3.8.0", "'MouseZChanged' Display EventHandler");
if (_statement isEqualType "") then {
_statement = compile _statement;
};
private _actionsVar = missionNamespace getVariable ["ACE_EventHandler_ScrollWheel", [-1, [], []]];
_actionsVar params ["_id", "_actionIDs", "_actions"];
_id = _id + 1;
_actionIDs pushBack _id;
_actions pushBack _statement;
missionNamespace setVariable ["ACE_EventHandler_ScrollWheel", [_id, _actionIDs, _actions]];
_id

View File

@ -1,20 +0,0 @@
/*
* Author: commy2
* Returns the magazine of the units rangefinder.
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* Magazine of the units binocular <STRING>
*
* Example:
* player call ace_common_fnc_binocularMagazine
*
* Public: Yes
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_binocularMagazine","3.8.0","CBA_fnc_binocularMagazine");
_this call CBA_fnc_binocularMagazine

View File

@ -1,18 +0,0 @@
/*
* Author: esteldunedain
* Executes a code on the next frame
*
* Arguments:
* 0: Code to execute <CODE>
* 1: Parameters to run the code with <ARRAY>
*
* Return Value:
* PFH handler ID <NUMBER>
*
* Public: Yes
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_execNextFrame","3.8.0","CBA_fnc_execNextFrame");
_this call CBA_fnc_execNextFrame;

View File

@ -1,17 +0,0 @@
/*
* Author: commy2
* Determins type of item. Can be CfgMagaines, CfgWeapons or CfgGlasses.
*
* Arguments:
* 0: Item Classname <STRING>
*
* Return Value:
* Config category ("CfgWeapons", "CfgMagazines", "CfgGlasses", "") <STRING>
*
* Public: Yes
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_getConfigType","3.8.0","CBA_fnc_getItemConfig");
configName (configHierarchy (_item call CBA_fnc_getItemConfig) param [1, configNull])

View File

@ -1,17 +0,0 @@
/*
* Author: commy2
* Determins type of object. Can be CfgVehicles or CfgAmmo.
*
* Arguments:
* 0: Object classname <STRING>
*
* Return Value:
* Config category ("CfgWeapons", "Cfgmagazines", "CfgGlasses", "") <STRING>
*
* Public: Yes
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_getConfigTypeObject","3.8.0","CBA_fnc_getObjectConfig");
configName (configHierarchy (_item call CBA_fnc_getObjectConfig) param [1, configNull])

View File

@ -1,14 +0,0 @@
#define DEBUG_MODE_FULL
#include "script_component.hpp"
params ["_eventName", "_eventArgs"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
[_eventName, _eventArgs] call CBA_fnc_globalEvent;
ACE_DEPRECATED("ace_common_fnc_globalEvent","3.8.0","CBA_fnc_globalEvent");

View File

@ -1,20 +0,0 @@
/*
* Author: commy2
* Handles MouseZChanged event.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Public : No
*/
#include "script_component.hpp"
{
[_this select 1] call _x;
false
} count ((missionNamespace getVariable ["ACE_EventHandler_ScrollWheel", [-1, [], []]]) select 2);
nil

View File

@ -1,17 +0,0 @@
/*
* Author: ?
* Returns an empty hash structure
*
* Arguments:
* None
*
* Return Value:
* Empty Hash Structure <ARRAY>
*
* Public: No
*/
#include "script_component.hpp"
ACE_DEPRECATED(QFUNC(hashCreate),"3.8.0","CBA_fnc_hashCreate");
[[],[]]

View File

@ -1,40 +0,0 @@
/*
* Author: ?
* Returns value attached to key in given hash.
*
* Arguments:
* 0: Hash <ARRAY>
* 1: Key <STRING>
*
* Return Value:
* Value <ANY>
*
* Public: No
*/
#include "script_component.hpp"
ACE_DEPRECATED(QFUNC(hashGet),"3.8.0","CBA_fnc_hashGet");
params ["_hash", "_key"];
ERRORDATA(2);
private _val = nil;
try {
if(VALIDHASH(_hash)) then {
private _index = (_hash select 0) find _key;
if(_index != -1) then {
_val = (_hash select 1) select _index;
if(IS_STRING(_val) && {_val == "ACREHASHREMOVEDONOTUSETHISVAL"}) then {
_val = nil;
};
};
} else {
ERROR("Input hash is not valid");
};
} catch {
HANDLECATCH;
};
if (isNil "_val") exitWith { nil };
_val

View File

@ -1,35 +0,0 @@
/*
* Author: ?
* ?
*
* Arguments:
* ?
*
* Return Value:
* ?
*
* Public: ?
*/
#include "script_component.hpp"
ACE_DEPRECATED(QFUNC(hashHasKey),"3.8.0","CBA_fnc_hashHasKey");
// diag_log text format["%1 HASH HAS KEY: %2", diag_tickTime, _this];
params ["_hash", "_key"];
ERRORDATA(2);
private _val = false;
try {
if(VALIDHASH(_hash)) then {
private _index = (_hash select 0) find _key;
if(_index != -1) then {
_val = true;
};
} else {
ERROR("Input hash is not valid");
};
} catch {
HANDLECATCH;
};
_val

View File

@ -1,41 +0,0 @@
/*
* Author: ?
* ?
*
* Arguments:
* ?
*
* Return Value:
* ?
*
* Public: ?
*/
#include "script_component.hpp"
ACE_DEPRECATED(QFUNC(hashRem),"3.8.0","CBA_fnc_hashRem");
params ["_hash", "_key"];
ERRORDATA(2);
private _val = nil;
try {
if(VALIDHASH(_hash)) then {
private _index = (_hash select 0) find _key;
if(_index != -1) then {
(_hash select 1) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"];
// is this hash is not part of a hash list?
// if it is we need to leave the keys intact.
if((count _hash) == 2) then {
// if this is a standalone hash then we can clean it up
(_hash select 0) set[_index, "ACREHASHREMOVEDONOTUSETHISVAL"];
_hash set[0, ((_hash select 0) - ["ACREHASHREMOVEDONOTUSETHISVAL"])];
_hash set[1, ((_hash select 1) - ["ACREHASHREMOVEDONOTUSETHISVAL"])];
};
};
} else {
ERROR("Input hash is not valid");
};
} catch {
HANDLECATCH;
};
true

View File

@ -1,38 +0,0 @@
/*
* Author: ?
* ?
*
* Arguments:
* ?
*
* Return Value:
* ?
*
* Public: ?
*/
#include "script_component.hpp"
ACE_DEPRECATED(QFUNC(hashSet),"3.8.0","CBA_fnc_hashSet");
// diag_log text format["%1 HASH SET: %2", diag_tickTime, _this];
params ["_hash", "_key", "_val"];
ERRORDATA(3);
try {
if(VALIDHASH(_hash)) then {
private _index = (_hash select 0) find _key;
if(_index == -1) then {
_index = (_hash select 0) find "ACREHASHREMOVEDONOTUSETHISVAL";
if(_index == -1) then {
_index = (count (_hash select 0));
};
(_hash select 0) set[_index, _key];
};
(_hash select 1) set[_index, _val];
} else {
ERROR("Input hash is not valid");
};
} catch {
HANDLECATCH;
};

View File

@ -1,22 +0,0 @@
/*
* Author: Ruthberg
* Sorts an array of numbers
*
* Arguments:
* 0: array <ARRAY>
* 1: ascending (optional) <BOOL>
*
* Return Value:
* sortedArray (ARRAY)
*
* Public: No
*/
#include "script_component.hpp"
ACE_DEPRECATED(QFUNC(insertionSort),"3.8.0","sort");
params [["_list", [], [[]]], ["_ascending", true, [false]]];
_list = + _list; // copy array to not alter the original one
_list sort _ascending;
_list

View File

@ -1,13 +0,0 @@
#include "script_component.hpp"
params ["_eventName", "_eventArgs"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
[_eventName, _eventArgs] call CBA_fnc_localEvent;
ACE_DEPRECATED("ace_common_fnc_localEvent","3.8.0","CBA_fnc_localEvent");

View File

@ -1,13 +0,0 @@
#include "script_component.hpp"
params ["_eventName", "_eventTargets", "_eventArgs"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
[_eventName, _eventArgs, _eventTargets] call CBA_fnc_targetEvent;
ACE_DEPRECATED("ace_common_fnc_objectEvent","3.8.0","CBA_fnc_targetEvent");

View File

@ -1,14 +0,0 @@
#include "script_component.hpp"
params ["_eventName"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
CBA_events_eventNamespace setVariable [_eventName,nil];
CBA_events_eventHashes setVariable [_eventName,nil];
ACE_DEPRECATED("ace_common_fnc_removeAllEventHandlers","3.8.0","N/A (remove events individually w/ CBA_fnc_removeEventHandler)");

View File

@ -1,20 +0,0 @@
/*
* Author: commy2
* Removes the magazine of the units rangefinder.
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* None
*
* Example:
* player call ace_common_fnc_removeBinocularMagazine
*
* Public: Yes
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_removeBinocularMagazine","3.8.0","CBA_fnc_removeBinocularMagazine");
_this call CBA_fnc_removeBinocularMagazine

View File

@ -1,13 +0,0 @@
#include "script_component.hpp"
params ["_eventName", "_eventCode"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
[_eventName, _eventCode] call CBA_fnc_removeEventHandler;
ACE_DEPRECATED("ace_common_fnc_removeEventHandler","3.8.0","CBA_fnc_removeEventHandler");

View File

@ -1,31 +0,0 @@
/*
* Author: commy2
* Remove a scroll wheel event handler.
*
* Arguments:
* 0: ID of the event handler <NUMBER>
*
* Return Value:
* None
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_id"];
private _actionsVar = missionNamespace getVariable ["ACE_EventHandler_ScrollWheel", [-1, [], []]];
_actionsVar params ["_currentId", "_actionIDs", "_actions"];
_id = _actionIDs find _id;
if (_id == -1) exitWith {};
_actionIDs set [_id, -1];
_actionIDs = _actionIDs - [-1];
_actions set [_id, []];//{}
_actions = _actions - [[]];//[{}]
missionNamespace setVariable ["ACE_EventHandler_ScrollWheel", [_currentId, _actionIDs, _actions]];

View File

@ -1,13 +0,0 @@
#include "script_component.hpp"
params ["_eventName", "_eventArgs"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
[_eventName, _eventArgs] call CBA_fnc_serverEvent;
ACE_DEPRECATED("ace_common_fnc_serverEvent","3.8.0","CBA_fnc_serverEvent");

View File

@ -1,13 +0,0 @@
#include "script_component.hpp"
params ["_eventName", "_eventTargets", "_eventArgs"];
private _newName = getText (configFile >> "ACE_newEvents" >> _eventName);
if (_newName != "") then {
TRACE_2("Switching Names",_eventName,_newName);
_eventName = _newName;
};
[_eventName,_eventArgs,_eventTargets] call CBA_fnc_targetEvent;
ACE_DEPRECATED("ace_common_fnc_targetEvent","3.8.0","CBA_fnc_targetEvent");

View File

@ -1,22 +0,0 @@
/*
* Author: esteldunedain
* Executes a code once with a given game time delay, using a PFH
*
* Arguments:
* 0: Code to execute <CODE>
* 1: Parameters to run the code with <ARRAY>
* 2: Delay in seconds before executing the code <NUMBER>
*
* Return Value:
* None
*
* Example:
* [{(_this select 0) setVelocity [0,0,200];}, [player], 10] call ace_common_fnc_waitAndExecute
*
* Public: Yes
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_waitAndExecute","3.8.0","CBA_fnc_waitAndExecute");
_this call CBA_fnc_waitAndExecute;

View File

@ -1,24 +0,0 @@
/*
* Author: joko // Jonas
* Executes a code once with after the Condition is True, using a PFH
*
* Arguments:
* 0: Condition <CODE>
* 1: Code to execute <CODE>
* 2: Parameters to run the code with <ARRAY,ANY,NIL>
*
* Return Value:
* None
*
* Example:
* [{(_this select 0) == vehicle (_this select 0)}, {(_this select 0) setDamage 1;}, [ACE_player]] call ace_common_fnc_waitUntilAndExecute
*
* Public: No
*/
#include "script_component.hpp"
ACE_DEPRECATED("ace_common_fnc_waitUntilAndExecute","3.8.0","CBA_fnc_waitUntilAndExecute");
_this call CBA_fnc_waitUntilAndExecute;
nil

View File

@ -0,0 +1,149 @@
/*
* Author: PabstMirror
* Shows multiple watched variables on the main display (for easy debugging)
*
* Arguments:
* 0: Title (var name) <STRING>
* 1: Code to generate result (passed nothing, can return any) <OPTIONAL><CODE>
* 2: Array containing modifiers <OPTIONAL><ARRAY>
* For Numbers:
* 0: Show Delta change (default: true) <OPTIONAL><BOOL>
* 1: Slider Min Value (default: 0) <OPTIONAL><NUMBER>
* 1: Slider Max Value (default: 0) <OPTIONAL><NUMBER>
* For Anything else:
* 0: Number of structured text lines (default: 1) <OPTIONAL><NUMBER>
*
* Return Value:
* Nothing
*
* Example:
* ["CBA_missionTime"] call ace_common_fnc_watchVariable; // Uses title as code
* ["diag_frameNo", {diag_frameNo}, [false]] call ace_common_fnc_watchVariable; // Won't show delta
* ["blood", {player getVariable "ace_medical_bloodVolume"}, [true, 0, 100]] call ace_common_fnc_watchVariable; // Shows slider
* ["multiLine text", {"Line 1 <br/>Line 2"}, [2]] call ace_common_fnc_watchVariable;
* ["player names", {allPlayers apply {name _x}}, [5]] call ace_common_fnc_watchVariable; // handles any data types
*
* Public: Yes
*/
// #define DEBUG_MODE_FULL
#include "script_component.hpp"
#define TEXT_HEIGHT 16
params [["_name", "", [""]],["_code", {}, [{}]], ["_mods", [], [[]]]];
TRACE_3("params",_name,_code,_mods);
if (!hasInterface) exitWith {};
if (canSuspend) exitWith { // Ensure atomic - (fix `disableSerialization` error when called from init.sqf)
[FUNC(watchVariable), _this] call CBA_fnc_directCall;
};
if (isNull (findDisplay 46)) exitWith {
TRACE_1("waiting for main display to be ready",isNull (findDisplay 46));
[{!isNull (findDisplay 46)}, {_this call FUNC(watchVariable);}, _this] call CBA_fnc_waitUntilAndExecute;
};
if (_code isEqualTo {}) then {TRACE_1("using title as code",_title); _code = compile _name;};
private _trackedDisplay = uiNamespace getVariable [QGVAR(watchVariableUI), displayNull];
if (isNull _trackedDisplay) then {
TRACE_1("creating display and adding PFEH",time);
QGVAR(watchVariableUI) cutRsc [QGVAR(watchVariableUI), "PLAIN", 1, true];
[{
private _trackedDisplay = uiNamespace getVariable [QGVAR(watchVariableUI), displayNull];
private _varArray = _trackedDisplay getVariable [QGVAR(vars), []];
TRACE_1("updating watched variables",count _varArray);
{
_x params ["_ctrlGroup", "_code", "_showDelta", "_lastNumber", "_barMin", "_barMax"];
private _result = [] call _code;
if (isNil "_result") then {
(_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["<t color='#FFFF00'>NIL</t>"];
} else {
if (_result isEqualType 0) then {
(_ctrlGroup controlsGroupCtrl 2) progressSetPosition linearConversion [_barMin, _barMax, _result, 0, 1, true];
if (_showDelta) then {
private _delta = _result - _lastNumber;
_x set [3, _result];
if (_delta < 0) then {
(_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1 (<t color='#FF0000'>%2</t>)", _result, _delta];
} else {
(_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1 (<t color='#00FF00'>%2</t>)", _result, _delta];
};
} else {
(_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1", _result];
};
} else {
(_ctrlGroup controlsGroupCtrl 1) ctrlSetStructuredText parseText format ["%1", _result];
};
};
} forEach _varArray;
}, 1, []] call CBA_fnc_addPerFrameHandler;
};
// Add curent call:
private _trackedDisplay = uiNamespace getVariable [QGVAR(watchVariableUI), displayNull];
private _varArray = _trackedDisplay getVariable [QGVAR(vars), []];
private _freePositionY = _trackedDisplay getVariable [QGVAR(freePosition), safeZoneY + 100 * pixelH];
private _height = 2 * TEXT_HEIGHT * pixelH;
private _ctrlGroup = _trackedDisplay ctrlCreate ["ctrlControlsGroupNoScrollbars", -1];
private _ctrlBackground = (_trackedDisplay ctrlCreate ["ctrlStaticBackground", -1, _ctrlGroup]);
_ctrlBackground ctrlSetBackgroundColor [0.2, 0.2, 0.2, 0.5];
private _ctrlTitle = (_trackedDisplay ctrlCreate ["ctrlStatic", -1, _ctrlGroup]);
_ctrlTitle ctrlSetFontHeight (TEXT_HEIGHT * pixelH);
_ctrlTitle ctrlSetFont "EtelkaMonospacePro";
_ctrlTitle ctrlSetPosition [0, 0, 300 * pixelW, TEXT_HEIGHT * pixelW];
_ctrlTitle ctrlCommit 0;
_ctrlTitle ctrlSetText _name;
if ((_mods param [0, true, [0, false]]) isEqualType false) then {
_mods params [["_showDelta", true, [false]], ["_barMin", 0, [0]], ["_barMax", 0, [0]]];
TRACE_3("adding number",_barMin,_barMax,_showDelta);
if (_barMin != _barMax) then {
TRACE_2("creating bar",_barMin,_barMax);
private _ctrlSlider = _trackedDisplay ctrlCreate ["RscProgress", 2, _ctrlGroup];
_ctrlSlider ctrlSetPosition [0 * pixelW, TEXT_HEIGHT * pixelH, 300 * pixelW, TEXT_HEIGHT * pixelH];
_ctrlSlider ctrlSetFade 0.25;
_ctrlSlider ctrlSetTextColor [0, 0, 0.2, 1];
_ctrlSlider ctrlCommit 0;
};
private _ctrlResultText = _trackedDisplay ctrlCreate [QGVAR(debug_structuredText), 1, _ctrlGroup];
_ctrlResultText ctrlSetPosition [25 * pixelW, TEXT_HEIGHT * pixelH, 275 * pixelW, TEXT_HEIGHT * pixelH];
_ctrlResultText ctrlCommit 0;
_varArray pushBack [_ctrlGroup, _code, _showDelta, 0, _barMin, _barMax];
} else {
_mods params [["_lines", 1, [1]]];
_lines = _lines max 1;
TRACE_1("adding text",_lines);
private _ctrlResultText = _trackedDisplay ctrlCreate [QGVAR(debug_structuredText), 1, _ctrlGroup];
_ctrlResultText ctrlSetPosition [25 * pixelW, TEXT_HEIGHT * pixelH, 275 * pixelW, _lines * TEXT_HEIGHT * pixelH];
_ctrlResultText ctrlCommit 0;
_height = (1 + _lines) * TEXT_HEIGHT * pixelH;
_varArray pushBack [_ctrlGroup, _code, false, -1, 0, 0];
};
_trackedDisplay setVariable [QGVAR(vars), _varArray];
_ctrlGroup ctrlSetPosition [safeZoneX, _freePositionY, 300 * pixelW, _height];
_ctrlGroup ctrlCommit 0;
_ctrlBackground ctrlSetPosition [0, 0, 300 * pixelW, _height];
_ctrlBackground ctrlCommit 0;
_freePositionY = _freePositionY + _height + 5 * pixelH;
_trackedDisplay setVariable [QGVAR(freePosition), _freePositionY];
nil

View File

@ -1,19 +0,0 @@
/*
* Author: commy2
* Initializes the MouseZChanged eventhandler.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Public : No
*/
#include "script_component.hpp"
disableSerialization;
params ["_display"];
_display displayAddEventHandler ["MouseZChanged", QUOTE(_this call FUNC(handleScrollWheel))];

View File

@ -16,7 +16,3 @@ class CfgPatches {
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
class ACE_newEvents {
interactMenuOpened = "ace_interactMenuOpened";
};

View File

@ -0,0 +1,21 @@
class Cfg3DEN {
class Object {
class AttributeCategories {
class ace_attributes {
class Attributes {
class GVAR(enable) {
property = QGVAR(enable);
control = "Checkbox";
displayName = CSTRING(enable_name);
tooltip = CSTRING(enable_tooltip);
expression = QUOTE(if !(_value) then {_this setVariable [ARR_3('%s',_value,true)];};);
typeName = "BOOL";
condition = "objectVehicle";
defaultValue = "(true)"; // fix pbo project preprocessing bug
};
};
};
};
};
};

View File

@ -11,15 +11,19 @@ class CfgVehicles {
class ThingX;
class GVAR(Turret_MBT_01): ThingX {
author = ECSTRING(common,ACETeam);
_generalMacro = QGVAR(TurretDummy);
_generalMacro = QGVAR(Turret_MBT_01);
scope = 1;
displayName = CSTRING(generic_turret_wreck);
model = "\A3\Structures_F\Wrecks\Wreck_Slammer_turret_F.p3d";
icon = "\A3\armor_f_gamma\MBT_01\Data\ui\map_slammer_mk4_ca.paa";
};
class GVAR(Turret_MBT_02): ThingX {
author = ECSTRING(common,ACETeam);
_generalMacro = QGVAR(TurretDummy);
_generalMacro = QGVAR(Turret_MBT_02);
scope = 1;
displayName = CSTRING(generic_turret_wreck);
model = "\A3\Structures_F\Wrecks\Wreck_T72_turret_F.p3d";
icon = "\A3\armor_f_gamma\MBT_02\Data\UI\map_MBT_02_ca.paa";
};
class Tank;
@ -53,4 +57,20 @@ class CfgVehicles {
class O_MBT_02_cannon_F: O_MBT_02_base_F {
GVAR(turret)[] = {QGVAR(Turret_MBT_02),{0,-1,0}};
};
class MRAP_01_base_F: Car_F {
GVAR(engineSmokeOffset)[] = {0,-2,0};
};
class MRAP_02_base_F: Car_F {
GVAR(engineSmokeOffset)[] = {0,-2,0};
};
class MRAP_03_base_F: Car_F {
GVAR(engineSmokeOffset)[] = {0,-2,0};
};
class Quadbike_01_base_F: Car_F {
GVAR(engineSmokeOffset)[] = {0,1,0};
};
};

View File

@ -8,37 +8,45 @@ GVAR(cacheTankDuplicates) = call CBA_fnc_createNamespace;
// cookoff and burning engine
["Tank", "init", {
params ["_vehicle"];
private _typeOf = typeOf _vehicle;
if (isNil {GVAR(cacheTankDuplicates) getVariable _typeOf}) then {
private _hitpoints = (getAllHitPointsDamage _vehicle param [0, []]) apply {toLower _x};
private _duplicateHitpoints = [];
{
if ((_x != "") && {_x in (_hitpoints select [0,_forEachIndex])}) then {
_duplicateHitpoints pushBack _forEachIndex;
};
} forEach _hitpoints;
TRACE_2("dupes",_typeOf,_duplicateHitpoints);
GVAR(cacheTankDuplicates) setVariable [_typeOf, _duplicateHitpoints];
};
_vehicle addEventHandler ["HandleDamage", {
if (GVAR(enable)) then {
if ((_this select 0) getVariable [QGVAR(enable), GVAR(enable)]) then {
["tank", _this] call FUNC(handleDamage);
};
}];
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
["Wheeled_APC_F", "init", {
(_this select 0) addEventHandler ["HandleDamage", {
if (GVAR(enable)) then {
params ["_vehicle"];
_vehicle addEventHandler ["HandleDamage", {
if ((_this select 0) getVariable [QGVAR(enable), GVAR(enable)]) then {
["tank", _this] call FUNC(handleDamage);
};
}];
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
["Car", "init", {
(_this select 0) addEventHandler ["HandleDamage", {
if (GVAR(enable)) then {
params ["_vehicle"];
_vehicle addEventHandler ["HandleDamage", {
if ((_this select 0) getVariable [QGVAR(enable), GVAR(enable)]) then {
["car", _this] call FUNC(handleDamage);
};
}];
@ -46,14 +54,31 @@ GVAR(cacheTankDuplicates) = call CBA_fnc_createNamespace;
// secondary explosions
["AllVehicles", "killed", {
if (GVAR(enable)) then {
(_this select 0) call FUNC(secondaryExplosions);
params ["_vehicle"];
if (_vehicle getVariable [QGVAR(enable), GVAR(enable)]) then {
_vehicle call FUNC(secondaryExplosions);
};
}, nil, ["Man"]] call CBA_fnc_addClassEventHandler;
// blow off turret effect
["Tank", "killed", {
if (GVAR(enable)) then {
(_this select 0) call FUNC(blowOffTurret);
params ["_vehicle"];
if (_vehicle getVariable [QGVAR(enable), GVAR(enable)]) then {
_vehicle call FUNC(blowOffTurret);
};
}] call CBA_fnc_addClassEventHandler;
// event to add a turret to a curator if the vehicle already belonged to that curator
if (isServer) then {
[QGVAR(addTurretToEditable), {
params ["_vehicle", "_turret"];
{
if (_vehicle in curatorEditableObjects _x) then {
_x addCuratorEditableObjects [[_turret], false];
};
} forEach allCurators;
}] call CBA_fnc_addEventHandler;
};

View File

@ -15,6 +15,7 @@ class CfgPatches {
};
#include "ACE_Settings.hpp"
#include "CfgEden.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgCloudlets.hpp"

View File

@ -30,4 +30,7 @@
_turret setVectorUp [random 1, random 1, 1];
_turret setVelocity [random 7, random 7, 8 + random 5];
// add turret to all curators that already own the wreck
[QGVAR(addTurretToEditable), [_vehicle, _turret]] call CBA_fnc_serverEvent;
}, _this, 1] call CBA_fnc_waitAndExecute;

View File

@ -24,11 +24,17 @@ if (local _vehicle) then {
[QGVAR(engineFire), _vehicle] call CBA_fnc_remoteEvent;
};
private _offset = getArray (_vehicle call CBA_fnc_getObjectConfig >> QGVAR(engineSmokeOffset));
if (_offset isEqualTo []) then {
_offset = [0,0,0];
};
private _position = [
0,
(boundingBoxReal _vehicle select 1 select 1) - 4,
(boundingBoxReal _vehicle select 1 select 1) - 2,
(boundingBoxReal _vehicle select 0 select 2) + 2
];
] vectorAdd _offset;
private _smoke = "#particlesource" createVehicleLocal [0,0,0];
_smoke setParticleClass "ObjectDestructionSmoke1_2Smallx";

View File

@ -70,7 +70,7 @@ if (_simulationType == "tank") exitWith {
_vehicle call FUNC(cookOff);
};
} else {
if (_hitpoint in ["hitbody", "hitturret", "#structural"] && {_newDamage > 0.6 + random 0.3}) then {
if (_hitpoint in ["hithull", "hitturret", "#structural"] && {_newDamage > 0.6 + random 0.3}) then {
_vehicle call FUNC(cookOff);
};
};

View File

@ -7,6 +7,7 @@
<Czech>Povolit explozi munice</Czech>
<Russian>Включить воспламенение</Russian>
<Japanese>誘爆を有効化</Japanese>
<Polish>Aktywuj efekty zapłonu</Polish>
</Key>
<Key ID="STR_ACE_CookOff_enable_tooltip">
<English>Enables cook off and related vehicle destruction effects.</English>
@ -14,6 +15,21 @@
<Czech>Povolí explozi munice a její následné ničivé efekty.</Czech>
<Russian>Включает воспламенение и сопутствующие эффекты повреждения техники.</Russian>
<Japanese>誘爆を有効化し、車両が誘爆によって破壊されていきます。</Japanese>
<Polish>Aktywuje efekt zapłonu na zniszczonych pojazdach.</Polish>
</Key>
<Key ID="STR_ACE_CookOff_generic_turret_wreck">
<Original>Wreck (Turret)</Original>
<French>Épave (tourelle)</French>
<Spanish>Restos (torreta)</Spanish>
<Italian>Rottami (torretta)</Italian>
<Polish>Wrak (wieżyczka)</Polish>
<Russian>Обломки (башня)</Russian>
<German>Wrack (Geschützturm)</German>
<Czech>Vrak (věž)</Czech>
<English>Wreck (Turret)</English>
<Portuguese>Ruínas (torre)</Portuguese>
<Korean>잔해(포탑)</Korean>
<Japanese>残骸(タレット)</Japanese>
</Key>
</Package>
</Project>

View File

@ -19,7 +19,3 @@ class CfgPatches {
#include "CfgWeapons.hpp"
#include "Dialog.hpp"
#include "RscTitles.hpp"
class ACE_newEvents {
RangerfinderData = QEGVAR(vector,rangefinderData);
};

View File

@ -19,8 +19,3 @@ class CfgPatches {
#include "CfgWeapons.hpp"
#include "gui_disarm.hpp"
class ACE_newEvents {
DisarmDebugCallback = QGVAR(debugCallback);
DisarmDropItems = QGVAR(dropItems);
};

View File

@ -2,30 +2,29 @@ class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_Actions {
class ACE_MainActions {
class ACE_Dogtag {
displayName = CSTRING(itemName);
condition = "";
statement = "";
class ACE_Dogtag {
displayName = CSTRING(itemName);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeDogtag));
statement = "";
showDisabled = 0;
distance = 1.75;
icon = QPATHTOF(data\dogtag_icon_ca.paa);
selection = "neck";
class ACE_CheckDogtag {
displayName = CSTRING(checkDogtag);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canCheckDogtag));
statement = QUOTE([ARR_2(_player,_target)] call FUNC(checkDogtag));
showDisabled = 0;
priority = 3;
icon = QPATHTOF(data\dogtag_icon_ca.paa);
};
class ACE_TakeDogtag {
displayName = CSTRING(takeDogtag);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeDogtag));
statement = QUOTE([ARR_2(_player,_target)] call FUNC(takeDogtag));
showDisabled = 0;
priority = 3;
icon = QPATHTOF(data\dogtag_icon_ca.paa);
class ACE_CheckDogtag {
displayName = CSTRING(checkDogtag);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canCheckDogtag));
statement = QUOTE([ARR_2(_player,_target)] call FUNC(checkDogtag));
showDisabled = 0;
priority = 3;
icon = QPATHTOF(data\dogtag_icon_ca.paa);
};
class ACE_TakeDogtag {
displayName = CSTRING(takeDogtag);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canTakeDogtag));
statement = QUOTE([ARR_2(_player,_target)] call FUNC(takeDogtag));
showDisabled = 0;
priority = 3;
icon = QPATHTOF(data\dogtag_icon_ca.paa);
};
};
};
};

View File

@ -10,25 +10,27 @@
// - Adding actions via config would create a dependency
if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then {
if (hasInterface) then {
private _checkTagAction = [
"ACE_CheckDogtag",
format ["%1: %2", localize LSTRING(itemName), localize LSTRING(checkDogtag)],
QPATHTOF(data\dogtag_icon_ca.paa),
{[_player,_target] call FUNC(checkDogtag)},
{!isNil {_target getVariable QGVAR(dogtagData)}}
] call ace_interact_menu_fnc_createAction;
"ACE_CheckDogtag",
format ["%1: %2", localize LSTRING(itemName), localize LSTRING(checkDogtag)],
QPATHTOF(data\dogtag_icon_ca.paa),
{[_player,_target] call FUNC(checkDogtag)},
{!isNil {_target getVariable QGVAR(dogtagData)}}
] call EFUNC(interact_menu,createAction);
["ACE_bodyBagObject", 0, ["ACE_MainActions"], _checkTagAction] call EFUNC(interact_menu,addActionToClass);
private _takeTagAction = [
"ACE_TakeDogtag",
format ["%1: %2", localize LSTRING(itemName), localize LSTRING(takeDogtag)],
QPATHTOF(data\dogtag_icon_ca.paa),
{[_player,_target] call FUNC(takeDogtag)},
{(!isNil {_target getVariable QGVAR(dogtagData)}) && {((_target getVariable [QGVAR(dogtagTaken), objNull]) != _target)}}
] call ace_interact_menu_fnc_createAction;
"ACE_TakeDogtag",
format ["%1: %2", localize LSTRING(itemName), localize LSTRING(takeDogtag)],
QPATHTOF(data\dogtag_icon_ca.paa),
{[_player,_target] call FUNC(takeDogtag)},
{(!isNil {_target getVariable QGVAR(dogtagData)}) && {((_target getVariable [QGVAR(dogtagTaken), objNull]) != _target)}}
] call EFUNC(interact_menu,createAction);
["ACE_bodyBagObject", 0, ["ACE_MainActions"], _takeTagAction] call EFUNC(interact_menu,addActionToClass);
};
if (isServer) then {
["ace_placedInBodyBag", {
params ["_target", "_bodyBag"];

View File

@ -6,7 +6,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
requiredAddons[] = {"ace_interaction"};
author = ECSTRING(common,ACETeam);
authors[] = {"SzwedzikPL"};
url = ECSTRING(main,URL);

View File

@ -24,4 +24,8 @@ if (_item == "") exitWith {};
_dogtagData params ["_nickName"];
private _displayText = format [localize LSTRING(takeDogtagSuccess), _nickName];
[_displayText] call EFUNC(common,displayText);
// display message
[{
[_this, 2.5] call EFUNC(common,displayTextStructured);
}, _displayText, DOGTAG_SHOW_DELAY] call CBA_fnc_waitAndExecute;

View File

@ -18,7 +18,26 @@
params ["_player", "_target"];
// animation
_player call EFUNC(common,goKneeling);
// sound
private _position = AGLToASL (_target modelToWorld (_target selectionPosition "neck"));
playSound3D [
selectRandom RUSTLING_SOUNDS,
objNull,
false,
_position,
1,
1,
50
];
// display dogtag
private _doubleTags = (_target getVariable [QGVAR(dogtagTaken), objNull]) != _target;
private _dogTagData = [_target] call FUNC(getDogTagData);
[QGVAR(showDogtag), [_dogTagData, _doubleTags]] call CBA_fnc_localEvent;
[{
[QGVAR(showDogtag), _this] call CBA_fnc_localEvent;
}, [_dogTagData, _doubleTags], DOGTAG_SHOW_DELAY] call CBA_fnc_waitAndExecute;

View File

@ -19,8 +19,27 @@
params ["_player", "_target"];
// animation
_player call EFUNC(common,goKneeling);
// sound
private _position = AGLToASL (_target modelToWorld (_target selectionPosition "neck"));
playSound3D [
selectRandom RUSTLING_SOUNDS,
objNull,
false,
_position,
1,
1,
50
];
// display message
if ((_target getVariable [QGVAR(dogtagTaken), objNull]) == _target) then {
[localize LSTRING(dogtagAlreadyTaken)] call EFUNC(common,displayText);
[{
[_this, 2.5] call EFUNC(common,displayTextStructured);
}, localize LSTRING(dogtagAlreadyTaken), DOGTAG_SHOW_DELAY] call CBA_fnc_waitAndExecute;
} else {
_target setVariable [QGVAR(dogtagTaken), _target, true];
[QGVAR(getDogtagItem), [_player, _target]] call CBA_fnc_serverEvent;

View File

@ -16,3 +16,12 @@
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#define DOGTAG_SHOW_DELAY 1
#define RUSTLING_SOUNDS [\
"a3\sounds_f\characters\ingame\AinvPknlMstpSlayWpstDnon_medic.wss",\
"a3\sounds_f\characters\ingame\AinvPknlMstpSlayWrflDnon_medic.wss",\
"a3\sounds_f\characters\ingame\AinvPpneMstpSlayWpstDnon_medic.wss",\
"a3\sounds_f\characters\ingame\AinvPpneMstpSlayWrflDnon_medic.wss"\
]

View File

@ -45,8 +45,3 @@ class CfgMineTriggers {
mineTriggerRange = 1;
};
};
class ACE_newEvents {
clientRequestsOrientations = QGVAR(sendOrientations);
serverSendsOrientations = QGVAR(orientationsSent);
};

View File

@ -819,11 +819,13 @@
<English>Tripwire Flare</English>
<Russian>Сигнальная растяжка</Russian>
<Japanese>仕掛け型照明地雷</Japanese>
<Polish>Flara na linkę</Polish>
</Key>
<Key ID="STR_ACE_Explosives_TripFlare_Description">
<English>Type: Tripwire flare - Ignites a non-lethal flare when triggered.&lt;br /&gt;Rounds: 1&lt;br /&gt;Used on: Ground</English>
<Russian>Тип: Сигнальная растяжка - При срабатывании выпускает несмертельную сгнальную вспышку.&lt;br /&gt;Зарядов: 1&lt;br /&gt;Используется на: Земле</Russian>
<Japanese>種類: 仕掛け型照明地雷 - 発動したとき、非致死性の照明を発炎します。&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 地表</Japanese>
<Polish>Typ: Flara na linkę - Wystrzeliwuje nieszkodliwą flarę przy nadepnięciu linki.&lt;br/&gt;Pociski: 1&lt;br/&gt;Używane na: ziemia</Polish>
</Key>
</Package>
</Project>

View File

@ -105,6 +105,7 @@
<French>LAISSER LES UNITES UTILISER LA CORDE </French>
<Russian>ДЕСАНТИРОВАНИЕ ПО КАНАТУ</Russian>
<Japanese>ユニットへファスト ロープをさせる</Japanese>
<Polish>ZJAZD NA LINACH</Polish>
</Key>
</Package>
</Project>

View File

@ -9,6 +9,12 @@ class asdg_MuzzleSlot_762: asdg_MuzzleSlot { // for 7.62x51 universal mount supp
ACE_muzzle_mzls_B = 1;
};
};
class asdg_MuzzleSlot_65: asdg_MuzzleSlot_762 { // for 6.5 weapons, mostly to deal with BIS vanilla compatibility
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
class asdg_MuzzleSlot_93x64: asdg_MuzzleSlot { // for 9.3x64 universal mount suppressors
class compatibleItems {
ACE_muzzle_mzls_93mmg = 1;
@ -19,6 +25,11 @@ class asdg_MuzzleSlot_9MM_SMG: asdg_MuzzleSlot { // for 9x19mm universal mount S
ACE_muzzle_mzls_smg_02 = 1;
};
};
class asdg_MuzzleSlot_9MM: asdg_MuzzleSlot { // for 9x19mm universal mount pistol suppressors
class compatibleItems {
ACE_muzzle_mzls_smg_02 = 1;
};
};
class asdg_MuzzleSlot_556: asdg_MuzzleSlot { // for 5.56x45 universal mount suppressors
class compatibleItems {
ACE_muzzle_mzls_L = 1;
@ -29,12 +40,16 @@ class asdg_MuzzleSlot_45ACP_SMG: asdg_MuzzleSlot { // for .45ACP universal mount
ACE_muzzle_mzls_smg_01 = 1;
};
};
class asdg_MuzzleSlot_45ACP: asdg_MuzzleSlot { // for .45ACP universal mount pistol suppressors
class compatibleItems {
ACE_muzzle_mzls_smg_01 = 1;
};
};
class asdg_MuzzleSlot_762MG: asdg_MuzzleSlot { // for 7.62, 6.5 and 5.56 universal mount MG suppressors
class compatibleItems {
ACE_muzzle_mzls_B = 1;
};
};
class MuzzleSlot;
class CfgWeapons {
@ -44,100 +59,6 @@ class CfgWeapons {
class WeaponSlotsInfo;
};
/* MX */
class arifle_MX_Base_F: Rifle_Base_F {
class WeaponSlotsInfo;
};
class arifle_MXC_F: arifle_MX_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762 {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
class arifle_MX_F: arifle_MX_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762 {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
class arifle_MX_GL_F: arifle_MX_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762 {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
class arifle_MX_SW_F: arifle_MX_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762MG {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
class arifle_MXM_F: arifle_MX_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762 {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
/* Katiba */
class arifle_Katiba_Base_F: Rifle_Base_F {
class WeaponSlotsInfo;
};
class arifle_Katiba_F: arifle_Katiba_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762 {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
class arifle_Katiba_C_F: arifle_Katiba_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762 {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
class arifle_Katiba_GL_F: arifle_Katiba_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: asdg_MuzzleSlot_762 {
class compatibleItems: compatibleItems {
ACE_muzzle_mzls_H = 1;
ACE_muzzle_mzls_B = 0;
};
};
};
};
/* Other */
class LMG_Mk200_F: Rifle_Long_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
@ -150,56 +71,6 @@ class CfgWeapons {
};
};
/* Pistols */
class Pistol;
class Pistol_Base_F: Pistol {
class WeaponSlotsInfo;
};
class hgun_P07_F: Pistol_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
compatibleItems[] += {"ACE_muzzle_mzls_smg_02"};
};
};
};
class hgun_Rook40_F: Pistol_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
compatibleItems[] += {"ACE_muzzle_mzls_smg_02"};
};
};
};
class hgun_ACPC2_F: Pistol_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
};
};
};
class hgun_Pistol_heavy_01_F: Pistol_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot: MuzzleSlot {
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
};
};
};
/*class hgun_Pistol_heavy_02_F: Pistol_Base_F {
class WeaponSlotsInfo: WeaponSlotsInfo {
class MuzzleSlot {
linkProxy = "\A3\data_f\proxies\weapon_slots\MUZZLE";
compatibleItems[] += {"ACE_muzzle_mzls_smg_01"};
};
};
};*/
/* Flashsuppressors */

View File

@ -10,6 +10,7 @@
<French>Effets de force gravitationnelle</French>
<Russian>Эффекты перегрузок</Russian>
<Japanese>G による効果</Japanese>
<Polish>Efekty przeciążeń</Polish>
</Key>
<Key ID="STR_ACE_gforces_enabledFor_onlyAircraft">
<English>Only Aircraft</English>
@ -20,6 +21,7 @@
<French>Avions seulement</French>
<Russian>Только для летательных аппаратов</Russian>
<Japanese>航空機のみ</Japanese>
<Polish>Tylko samoloty</Polish>
</Key>
</Package>
</Project>

View File

@ -270,8 +270,3 @@ class CfgCloudlets {
destroyOnWaterSurface = 1;
};
};
class ACE_newEvents {
GlassesChanged = "ace_glassesChanged";
GlassesCracked = "ace_glassesCracked";
};

View File

@ -31,16 +31,19 @@
<English>Goggle Effects</English>
<Russian>Эффект очков</Russian>
<Japanese>ゴーグルによる効果</Japanese>
<Polish>Efekty gogli</Polish>
</Key>
<Key ID="STR_ACE_Goggles_effects_tintOnly">
<English>Tint</English>
<Russian>Тонировка</Russian>
<Japanese>色彩のみ</Japanese>
<Polish>Winieta</Polish>
</Key>
<Key ID="STR_ACE_Goggles_enabled_tintAndEffects">
<English>Tint + Effects</English>
<Russian>Тонировка + эффекты</Russian>
<Japanese>色彩 + 効果</Japanese>
<Polish>Winieta + Efekty</Polish>
</Key>
</Package>
</Project>

View File

@ -28,7 +28,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "Effects.hpp"
class ACE_newEvents {
flashbangExplosion = "ace_flashbangExploded";
};

View File

@ -34,6 +34,8 @@
params ["_projectile", "_timeToLive"];
if (isNull _projectile) exitWith {TRACE_1("null",_projectile);};
private _position = position _projectile;
// --- fire
@ -144,7 +146,7 @@ if (isServer) then {
//systemChat format ["burn: %1", _x];
// --- destroy nearby static weapons and ammo boxes
if (_x isKindOf "StaticWeapon" || {_x isKindOf "ReammoBox_F"}) then {
if (_x isKindOf "StaticWeapon" || {_x isKindOf "ReammoBox_F"} || {_x isKindOf "ACE_RepairItem_Base"}) then {
_x setDamage 1;
};
@ -158,11 +160,39 @@ if (isServer) then {
};
} forEach (_position nearObjects EFFECT_SIZE);
// --- burn car engine
// --- damage local vehicle
private _vehicle = _position nearestObject "Car";
if (!local _vehicle || {_vehicle isKindOf "Wheeled_APC_F"}) exitWith {};
private _engineSelection = getText (_vehicle call CBA_fnc_getObjectConfig >> "HitPoints" >> "HitEngine" >> "name");
if (!local _vehicle) exitWith {};
private _config = _vehicle call CBA_fnc_getObjectConfig;
// --- burn tyres
private _fnc_isWheelHitPoint = {
params ["_selectionName"];
// wheels must use a selection named "wheel_X_Y_steering" for PhysX to work
_selectionName select [0, 6] == "wheel_" && {
_selectionName select [count _selectionName - 9] == "_steering"
} // return
};
{
private _wheelSelection = getText (_config >> "HitPoints" >> _x >> "name");
if (_wheelSelection call _fnc_isWheelHitPoint) then {
private _wheelPosition = _vehicle modelToWorld (_vehicle selectionPosition _wheelSelection);
if (_position distance _wheelPosition < EFFECT_SIZE * 2) then {
_vehicle setHit [_wheelSelection, 1];
};
};
} forEach (getAllHitPointsDamage _vehicle param [0, []]);
// --- burn car engine
if (_vehicle isKindOf "Wheeled_APC_F") exitWith {};
private _engineSelection = getText (_config >> "HitPoints" >> "HitEngine" >> "name");
private _enginePosition = _vehicle modelToWorld (_vehicle selectionPosition _engineSelection);
if (_position distance _enginePosition < EFFECT_SIZE * 2) then {

View File

@ -279,18 +279,21 @@
<German>AN-M14 Brandsatz</German>
<Russian>AN-M14 Зажигательная граната</Russian>
<Japanese>AN-M14 焼夷手榴弾</Japanese>
<Polish>Granat zapalający AN-M14</Polish>
</Key>
<Key ID="STR_ACE_Grenades_Incendiary_NameShort">
<English>AN-M14</English>
<German>AN-M14</German>
<Russian>AN-M14</Russian>
<Japanese>AN-M14</Japanese>
<Polish>AN-M14</Polish>
</Key>
<Key ID="STR_ACE_Grenades_Incendiary_Description">
<English>Incendiary grenade used to destroy weapons, ammunition and other equipment.</English>
<German>Brandsatzgranate. Verwendet um Waffen, Munition und andere Ausrüstung zu zerstören.</German>
<Russian>Зажигательная граната используется для уничтожения оружия, боеприпасов и прочего оборудования.</Russian>
<Japanese>焼夷手榴弾は武器や弾薬箱などの装備を破壊するために使われます。</Japanese>
<Polish>Granat zapalający, używany do niszczenia broni, amunicji i innego sprzętu.</Polish>
</Key>
</Package>
</Project>

View File

@ -8,6 +8,7 @@
<Russian>Чехол</Russian>
<Czech>Pouzdro na zbraň</Czech>
<Japanese>ガンバッグ</Japanese>
<Polish>Torba na broń</Polish>
</Key>
<Key ID="STR_ACE_Gunbag_DisplayName_Tan">
<English>Gunbag (Tan)</English>
@ -16,6 +17,7 @@
<Russian>Чехол (желтовато-коричневый)</Russian>
<Czech>Pouzdro na zbraň (Žlutohnědá)</Czech>
<Japanese>ガンバッグ (タン)</Japanese>
<Polish>Torba na broń (jasnobrązowa)</Polish>
</Key>
<Key ID="STR_ACE_Gunbag_ToGunbag">
<English>Put weapon into gunbag</English>
@ -24,6 +26,7 @@
<Russian>Зачехлить оружие</Russian>
<Czech>Vložit zbraň do pouzdra</Czech>
<Japanese>ガンバッグへ武器を入れる</Japanese>
<Polish>Włóż broń do torby</Polish>
</Key>
<Key ID="STR_ACE_Gunbag_OffGunbag">
<English>Get weapon out of gunbag</English>
@ -32,6 +35,7 @@
<Russian>Расчехлить оружие</Russian>
<Czech>Vytáhnout zbraň z pouzdra</Czech>
<Japanese>ガンバッグから武器を出す</Japanese>
<Polish>Wyciągnij broń z torby</Polish>
</Key>
<Key ID="STR_ACE_Gunbag_Status">
<English>Status</English>
@ -40,6 +44,7 @@
<Russian>Статус</Russian>
<Czech>Status</Czech>
<Japanese>中身</Japanese>
<Polish>Status</Polish>
</Key>
<Key ID="STR_ACE_Gunbag_Empty">
<English>Gunbag Empty</English>
@ -48,6 +53,7 @@
<Russian>Чехол пуст</Russian>
<Czech>Prázdné pouzdro na zbraň</Czech>
<Japanese>ガンバッグは空</Japanese>
<Polish>Torba jest pusta</Polish>
</Key>
</Package>
</Project>

View File

@ -25,9 +25,3 @@ class CfgPatches {
class ACE_Extensions {
extensions[] += {"ace_break_line", "ace_parse_imagepath"};
};
class ACE_newEvents {
interactMenuOpened = "ace_interactMenuOpened";
clearConditionCaches = QGVAR(clearConditionCaches);
interactMenuClosed = "ace_interactMenuClosed";
};

View File

@ -22,6 +22,7 @@
if (!params [["_objectType", "", [""]], ["_typeNum", 0, [0]], ["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith {
ERROR("Bad Params");
[]
};
TRACE_4("params",_objectType,_typeNum,_parentPath,_action);
@ -38,6 +39,9 @@ if (param [4, false, [false]]) exitwith {
', _index];
TRACE_2("Added inheritable action",_objectType,_index);
[_objectType, "init", _initEH, true, [], true] call CBA_fnc_addClassEventHandler;
// Return the full path
(_parentPath + [_action select 0])
};
// Ensure the config menu was compiled first
@ -62,10 +66,11 @@ private _parentNode = [_actionTrees, _parentPath] call FUNC(findActionNode);
if (isNil {_parentNode}) exitWith {
ERROR("Failed to add action");
ACE_LOGERROR_4("action (%1) to parent %2 on object %3 [%4]",(_action select 0),_parentPath,_objectType,_typeNum);
[]
};
// Add action node as children of the correct node of action tree
(_parentNode select 1) pushBack [_action,[]];
// Return the full path
(+ _parentPath) pushBack (_action select 0)
(_parentPath + [_action select 0])

View File

@ -21,6 +21,7 @@
if (!params [["_object", objNull, [objNull]], ["_typeNum", 0, [0]], ["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith {
ERROR("Bad Params");
[]
};
private _varName = [QGVAR(actions),QGVAR(selfActions)] select _typeNum;
@ -38,4 +39,4 @@ if (_parentPath isEqualTo ["ACE_MainActions"]) then {
_actionList pushBack [_action, +_parentPath];
// Return the full path
(+ _parentPath) pushBack (_action select 0)
(_parentPath + [_action select 0])

View File

@ -19,12 +19,3 @@ class CfgPatches {
#include "RscTitles.hpp"
#include "ACE_Settings.hpp"
#include "ACE_ZeusActions.hpp"
class ACE_newEvents {
getDown = QGVAR(getDown);
pardon = QGVAR(pardon);
tapShoulder = QGVAR(tapShoulder);
sendAway = QGVAR(sendAway);
lampTurnOff = QGVAR(setLampOff);
lampTurnOn = QGVAR(setLampOn);
};

View File

@ -17,8 +17,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "RscInGameUI.hpp"
class ACE_newEvents {
laser_laserOff = "ace_laserOff";
laser_laserOn = "ace_laserOn";
};

View File

@ -19,8 +19,3 @@ class CfgPatches {
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "CfgJointRails.hpp"
class ACE_newEvents {
GunLightOff = "ace_gunLightOff";
SetHandcuffed = QEGVAR(captives,setHandcuffed);
};

View File

@ -17,7 +17,3 @@ class CfgPatches {
#include "CfgEventHandlers.hpp"
#include "CfgWeapons.hpp"
#include "CfgVehicles.hpp"
class ACE_newEvents {
interactMenuOpened = "ace_interactMenuOpened";
};

21
addons/map/Cfg3DEN.hpp Normal file
View File

@ -0,0 +1,21 @@
class Cfg3DEN {
class Group {
class AttributeCategories {
class ace_attributes {
class Attributes {
class GVAR(hideBlueForceMarker) {
property = QGVAR(hideBlueForceMarker);
control = "Checkbox";
displayName = CSTRING(disableBFT);
tooltip = CSTRING(disableBFT_description);
// groups are kaputt. have to delay setVariable public for it to work.
expression = QUOTE(if (_value) then {[ARR_2({(_this select 0) setVariable [ARR_3('%s',_this select 1,true)];},[ARR_2(_this,_value)])] call CBA_fnc_execNextFrame};);
typeName = "BOOL";
defaultValue = "(false)"; // fix pbo project preprocessing bug
};
};
};
};
};
};

View File

@ -26,6 +26,7 @@ class RscButtonMenu;
class RscEdit;
#include "ACE_Settings.hpp"
#include "Cfg3DEN.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgMarkers.hpp"
#include "CfgVehicles.hpp"

View File

@ -406,5 +406,13 @@
<French>Change le canal de communication par défaut au début de la mission.</French>
<Japanese>ミッション開始時にあらかじめ設定されているマーカ チャンネルを変更します</Japanese>
</Key>
<Key ID="STR_ACE_Map_disableBFT">
<English>Disable BFT</English>
<German>BFT deaktivieren</German>
</Key>
<Key ID="STR_ACE_Map_disableBFT_description">
<English>Always disable Blue Force Tracking for this group.</English>
<German>Blue Force Tracking für diese Gruppe immer deaktivieren.</German>
</Key>
</Package>
</Project>

View File

@ -149,12 +149,14 @@
<French>Touche de rotation des outils de naviguation</French>
<Russian>Клавиша поворота инструментов карты</Russian>
<Japanese>マップ ツールの回転キー</Japanese>
<Polish>Klawisz obrotu narzędzi nawigacyjnych</Polish>
</Key>
<Key ID="STR_ACE_MapTools_rotateModifierKey_description">
<English>Modifier key to allow rotating map tools</English>
<French>Touche modificatrice permettant la rotation des outils de naviguation </French>
<Russian>Клавиша-модификатор, позволяющая поворачивать инструменты карты</Russian>
<Japanese>マップ ツールを回転させるキーを編集できます。</Japanese>
<Polish>Modyfikator pozwalający na obracanie narzędzi nawigacyjnych</Polish>
</Key>
</Package>
</Project>

View File

@ -4517,7 +4517,7 @@
</Key>
<Key ID="STR_ACE_Medical_Attributes_isMedicalVehicle_Description">
<English>Whether or not the object will be a medical vehicle.</English>
<Polish>Czy pojazdy ma być pojazdem medycznym?</Polish>
<Polish>Czy pojazd ma być pojazdem medycznym?</Polish>
<Italian>L'oggetto in questione sarà un veicolo medico o meno.</Italian>
<German>Legt fest, ob das Objekt ein Sanitätsfahrzeug ist.</German>
<Spanish>Es un vehículo médico?</Spanish>
@ -4535,12 +4535,13 @@
<French>Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales</French>
<Russian>Задержка прекращения огня ботами, когда игрок теряет сознание по медицинским причинам.</Russian>
<Japanese>AI はプレイヤーが医療的な理由で気絶している場合にかぎり、撃つのをためらいます。</Japanese>
<Polish>Opóźnij stan wstrzymania ognia u AI kiedy gracz jest nieprzytomny z powodów medycznych.</Polish>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_delayUnconCaptive_DisplayName">
<English>Delay cease fire of AI for unconsciousness</English>
<German>Verzögert Ende des KI-Beschusses bei medizinischer Bewustlosigkeit</German>
<Spanish>Demora antes de volverse neutral al caer inconsciente</Spanish>
<Polish>Opóźnij status captive u nieprzytomnych osób</Polish>
<Polish>Opóźnij wstrzymanie ognia AI dla nieprzytomnych osób</Polish>
<Italian>Ritarda il cessate il fuoco dell'IA quando si è svenuti</Italian>
<Czech>Prodleva zastavení palby AI na bezvědomé</Czech>
<Portuguese>Atraso durante cessar fogo da AI durante inconsciência</Portuguese>

View File

@ -1,5 +1,6 @@
class ACE_Settings {
class GVAR(enabledFor) {
category = ECSTRING(medical,Category_Medical);
value = 2;
typeName = "SCALAR";
values[] = {ECSTRING(Common,Disabled), CSTRING(enabledFor_OnlyServerAndHC), ECSTRING(Common,Enabled)};

View File

@ -19,7 +19,7 @@
if ([_this] call EFUNC(medical,isMedic) || {vehicle _this != _this}) exitWith {false};
{
if ([_x] call EFUNC(medical,isMedic)) exitWith {
if ([_x] call EFUNC(medical,isMedic) && {!([_x] call EFUNC(common,isPlayer))}) exitWith {
_this setVariable [QGVAR(assignedMedic), _x];
true
};

View File

@ -7,6 +7,7 @@
<Spanish>Sólo Server y HC</Spanish>
<Russian>Нур сервера унд HC</Russian>
<Japanese>サーバーと HC のみ</Japanese>
<Polish>Tylko serwer i HC</Polish>
</Key>
</Package>
</Project>

View File

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

View File

@ -0,0 +1,10 @@
class ACE_Settings {
class GVAR(enabledFor) {
category = ECSTRING(medical,Category_Medical);
displayName = CSTRING(MedicalBloodSettings_enabledFor_DisplayName);
description = CSTRING(MedicalBloodSettings_enabledFor_Description);
value = 2;
typeName = "SCALAR";
values[] = {ECSTRING(Common,Disabled), CSTRING(enabledFor_OnlyPlayers), ECSTRING(Common,Enabled)};
};
};

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