diff --git a/.editorconfig b/.editorconfig index af1c2ff314..e4ab4a9fd3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,3 +10,6 @@ trim_trailing_whitespace = true [*.md] trim_trailing_whitespace = false + +[Makefile] +indent_style = tab diff --git a/.gibot.yml b/.gibot.yml deleted file mode 100644 index b3a565a5e4..0000000000 --- a/.gibot.yml +++ /dev/null @@ -1,56 +0,0 @@ -stages: - mark_for_closing: - days: 30 - labels: - - status/need more info - - status/invalid - - status/can't reproduce - - status/wontfix - exclude: - - status/marked for cleanup - - status/accepting-pr - 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 is in error, please reply with the requested information.' - - 'Thank you. :robot:' - action: - close: false - comment: true - assign_label: - - status/marked for cleanup - clean_up: - days: 7 - labels: - - status/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: - - status/closed by bot - remove_label: - - status/marked for cleanup - remind_about_old_ticket: - days: 365 - labels: - - kind/bug - - kind/critical bug - exclude: - - status/need more info - - status/invalid - - status/can't reproduce - - status/wontfix - - status/marked for cleanup - - status/inactive - - status/stale - - status/accepting-pr - comment: - - 'Hello @acemod/maintainers. This ticket has been open for over {days} days without any activity.' - action: - comment: true - assign_label: - - status/inactive diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b8aae89b77..08c731127a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -27,3 +27,24 @@ Please refrain from making requests for any planned or existing features from ei In order to avoid duplicates and keep the issue tracker organized, we have created a common issue for [ACE3 Feature requests](https://github.com/acemod/ACE3/issues/3594). Any and all relevant requests should be submitted there, where they will also get discussed and evaluated. Before adding a new one, make sure to check the previous entries from the thread and do a quick search for similar suggestions; please don't reiterate requests for features that had already been accepted for inclusion, or those which were disregarded earlier. Following their approval, feature requests may be moved by moderators to a separate issue for further discussion. + +# Contributing to the project + +We welcome anyone to contribute to this repository. Issues that we are actively seeking help with, are marked as [`help wanted`](https://github.com/acemod/ACE3/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22). Feel free to pick up any of those issues. + +## Pull Request process + +When contributing to this repository, please first discuss the change you wish to make via issue or [Slack](https://slackin.ace3mod.com/) with the [ACE3 project maintainers](https://ace3mod.com/team.html) before making a change. This may not be necessary if you are contributing for something which has an existing issue in our repository already. + +1. Please make a pull request (PR) as early as possible. This lets use help you in the proces of developing it. When opening a work in progress pull request, mark your PR with a `WIP:` prefix. +2. Describe what this pull request will do and how it solves this in the description of your PR. A clear intent and description of the way the issue is resolved will help us to review the PR more efficiently. +3. Please follow our [Development Guidelines](https://ace3mod.com/wiki/development/). + + +### Notes + +Please note that all contributors to this project are volunteers and do this in their own time. This means that issues and/or PRs may be open for a long time before being picked up and reviewed. We try to keep this time as short as possible, but some times things may fall short. If you feel that an issue or PR has not received attention, please comment asking for a review using the mention `@acemod/maintainers`. + +## Assistance with contributing + +If you require assistance with contributing, check out the #dev channel on our [Slack](https://slackin.ace3mod.com/). Additional documentation can be found on our [Development wiki](https://ace3mod.com/wiki/development/). diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index b56ddb134a..19f864f13d 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -17,8 +17,8 @@ **Where did the issue occur?** - Dedicated / Self-Hosted Multiplayer / Singleplayer / Editor (Singleplayer) / Editor (Multiplayer) / Virtual Arsenal -**Placed Modules:** -- Add the list of modules you have placed on the map. Use 'None' if the error occurs without any modules. +**Additional information:** +- Provide any additional information that will help us solve this issue. **RPT log file:** - Add a link ([gist](https://gist.github.com) or [pastebin](http://pastebin.com)) to the client and/or server RPT file. An instruction to find your RPT files can be found [here](https://community.bistudio.com/wiki/Crash_Files#Arma_3). diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000000..a129b592ad --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,47 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 180 + +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 14 + +# Issues with these labels will never be considered stale +exemptLabels: + - impact/large + - kind/critical bug + - kind/bug + - kind/Focus Feature + - status/accepting-pr + - status/cherrypick + - status/merge on release + - sticky + +# Label to use when marking an issue as stale +staleLabel: status/stale + +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: > + This issue has been automatically closed due to inactivity. + + If this is still an issue, please feel free to re-open this. If necessary, provide any additional details to help us solve this issue. + + If you wish to assist us resolving this issue, + please re-open or create a new issue stating you wish to help us out. + + Thank you for your contributions. + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 + +# Limit to only `issues` or `pulls` +only: issues + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: true + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: true diff --git a/.gitignore b/.gitignore index 1d60d27088..6a37c85d53 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ +@* +*.zip release/* tools/temp +tools/armake.exe *.cache *.pbo texHeaders.bin diff --git a/AUTHORS.txt b/AUTHORS.txt index b7e016b15b..76f6c17b1d 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -61,10 +61,13 @@ Coren Crusty Dharma Bellamkonda Dimaslg +diwako dixon13 Drill Dudakov aka [OMCB]Kaban +Drofseh Dslyecxi +Eclipser ElTyranos eRazeri evromalarkey @@ -114,6 +117,7 @@ OnkelDisMaster Orbis2358 oscarmolinadev PaxJaromeMalues +PiZZADOX <509thParachuteInfantry@gmail.com> Phyma pokertour Professor diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..736994ecb4 --- /dev/null +++ b/Makefile @@ -0,0 +1,91 @@ +VERSION = $(shell cat "VERSION") +PREFIX = ace +BIN = @ace +ZIP = ace3 +FLAGS = -i include -w unquoted-string -w redefinition-wo-undef +VERSION_FILES = README.md docs/README_DE.md docs/README_PL.md mod.cpp + +MAJOR = $(word 1, $(subst ., ,$(VERSION))) +MINOR = $(word 2, $(subst ., ,$(VERSION))) +PATCH = $(word 3, $(subst ., ,$(VERSION))) +BUILD = $(word 4, $(subst ., ,$(VERSION))) +VERSION_S = $(MAJOR).$(MINOR).$(PATCH) +GIT_HASH = $(shell git log -1 --pretty=format:"%H" | head -c 8) + +ifeq ($(OS), Windows_NT) + ARMAKE = ./tools/armake.exe # Downloaded via make.ps (rename armake_wXY.exe otherwise) +else + ARMAKE = armake +endif + +$(BIN)/addons/$(PREFIX)_%.pbo: addons/% + @mkdir -p $(BIN)/addons + @echo " PBO $@" + @${ARMAKE} build ${FLAGS} -f -e "version=$(GIT_HASH)" $< $@ + +$(BIN)/optionals/$(PREFIX)_%.pbo: optionals/% + @mkdir -p $(BIN)/optionals + @echo " PBO $@" + @${ARMAKE} build ${FLAGS} -f -e "version=$(GIT_HASH)" $< $@ + +# Shortcut for building single addons (eg. "make .pbo") +%.pbo: + "$(MAKE)" $(MAKEFLAGS) $(patsubst %, $(BIN)/addons/$(PREFIX)_%, $@) + +all: $(patsubst addons/%, $(BIN)/addons/$(PREFIX)_%.pbo, $(wildcard addons/*)) \ + $(patsubst optionals/%, $(BIN)/optionals/$(PREFIX)_%.pbo, $(wildcard optionals/*)) + +filepatching: + "$(MAKE)" $(MAKEFLAGS) FLAGS="-w unquoted-string -p" + +$(BIN)/keys/%.biprivatekey: + @mkdir -p $(BIN)/keys + @echo " KEY $@" + @${ARMAKE} keygen -f $(patsubst $(BIN)/keys/%.biprivatekey, $(BIN)/keys/%, $@) + +$(BIN)/addons/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign: $(BIN)/addons/$(PREFIX)_%.pbo $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey + @echo " SIG $@" + @${ARMAKE} sign -f -s $@ $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey $< + +$(BIN)/optionals/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign: $(BIN)/optionals/$(PREFIX)_%.pbo $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey + @echo " SIG $@" + @${ARMAKE} sign -f -s $@ $(BIN)/keys/$(PREFIX)_$(VERSION).biprivatekey $< + +signatures: $(patsubst addons/%, $(BIN)/addons/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign, $(wildcard addons/*)) \ + $(patsubst optionals/%, $(BIN)/optionals/$(PREFIX)_%.pbo.$(PREFIX)_$(VERSION)-$(GIT_HASH).bisign, $(wildcard optionals/*)) + +extensions: $(wildcard extensions/*/*) + cd extensions/build && cmake .. && make + find ./extensions/build/ \( -name "*.so" -o -name "*.dll" \) -exec cp {} ./ \; + +extensions-win64: $(wildcard extensions/*/*) + cd extensions/build && CXX=$(eval $(which g++-w64-mingw-i686)) cmake .. && make + +version: + @echo " VER $(VERSION)" + $(shell sed -i -r -s 's/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/$(VERSION)/g' $(VERSION_FILES)) + $(shell sed -i -r -s 's/[0-9]+\.[0-9]+\.[0-9]+/$(VERSION_S)/g' $(VERSION_FILES)) + @echo -e "#define MAJOR $(MAJOR)\n#define MINOR $(MINOR)\n#define PATCHLVL $(PATCH)\n#define BUILD $(BUILD)" > "addons/main/script_version.hpp" + $(shell sed -i -r -s 's/ACE_VERSION_MAJOR [0-9]+/ACE_VERSION_MAJOR $(MAJOR)/g' extensions/CMakeLists.txt) + $(shell sed -i -r -s 's/ACE_VERSION_MINOR [0-9]+/ACE_VERSION_MINOR $(MINOR)/g' extensions/CMakeLists.txt) + $(shell sed -i -r -s 's/ACE_VERSION_REVISION [0-9]+/ACE_VERSION_REVISION $(PATCH)/g' extensions/CMakeLists.txt) + +commit: + @echo " GIT commit release preparation" + @git add -A + @git diff-index --quiet HEAD || git commit -am "Prepare release $(VERSION_S)" -q + +push: commit + @echo " GIT push release preparation" + @git push -q + +release: clean version commit + @"$(MAKE)" $(MAKEFLAGS) signatures + @echo " ZIP $(ZIP)_$(VERSION_S).zip" + @cp *.dll mod.cpp README.md docs/README_DE.md docs/README_PL.md AUTHORS.txt LICENSE logo_ace3_ca.paa meta.cpp $(BIN) + @zip -qr $(ZIP)_$(VERSION_S).zip $(BIN) + +clean: + rm -rf $(BIN) $(ZIP)_*.zip + +.PHONY: all filepatching signatures extensions extensions-win64 version commit push release clean diff --git a/README.md b/README.md index 8a49da1078..74e32e1fac 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues @@ -21,8 +21,8 @@ ACE3 Slack - - ACE3 Build Status + + ACE3 Build Status

diff --git a/VERSION b/VERSION new file mode 100644 index 0000000000..d87a10b470 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +3.12.6.43 diff --git a/addons/advanced_ballistics/CfgEventHandlers.hpp b/addons/advanced_ballistics/CfgEventHandlers.hpp index 5da5fd0dc2..becf395052 100644 --- a/addons/advanced_ballistics/CfgEventHandlers.hpp +++ b/addons/advanced_ballistics/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf b/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf index 791fdb5040..2ead82fa12 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf @@ -12,7 +12,7 @@ * muzzle velocity shift - m/s * * Example: - * [[], 5] call ace_advanced_ballistics_fnc_calcilateAmmoTemperatureVelocityShift + * [[], 5] call ace_advanced_ballistics_fnc_calculateAmmoTemperatureVelocityShift * * Public: No */ diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 283a315c02..09d992a769 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -90,6 +90,7 @@ 啟用槍口初速變化 启用枪口初速变化 Activer les variations de la vitesse initiale + Aktywuj wariację prędkości wylotowej Simulates slight variations in muzzle velocity between each shot @@ -100,6 +101,7 @@ 模擬每發子彈的槍口初速都略有不同 模拟每发子弹的枪口初速都略有不同 Simule les légères variations + Symuluje lekkie zmiany w prędkości wylotowej między każdym strzałem Enable Ammo Temperature Simulation diff --git a/addons/advanced_fatigue/initSettings.sqf b/addons/advanced_fatigue/initSettings.sqf index 8f4e5f0c9a..4e44d75132 100644 --- a/addons/advanced_fatigue/initSettings.sqf +++ b/addons/advanced_fatigue/initSettings.sqf @@ -4,7 +4,9 @@ [LSTRING(Enabled), LSTRING(Enabled_Description)], LSTRING(DisplayName), true, - true + true, + {[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_Settings_fnc_init; [ diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index 01bca90c11..8fb6bc7e5e 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,8 @@ ACE アドバンスド ファティーグ ACE Fatica Avanzata ACE 고급 피로도 + ACE Fatigue Avancée + ACE Zaawansowane Zmęczenie Performance Factor @@ -114,12 +116,18 @@ 手ぶれ因数 抖动因数 抖動因素 + Facteur de stabilisation + Fattore di oscillazione + Czynnik kołysania Influences the amount of weapon sway. Higher means more sway. 武器を持つ手のぶれ度合いを設定します。 値が高ければ高いほど、手ぶれが強くなります。 影响手持武器的晃动程度,数值越高,抖动的越厉害. 影響手持武器晃動程度,數值越高抖動越厲害 + Influence les mouvements de l'arme, une valeur plus élevée signifie plus de mouvements + Influenza l'ammontare di oscillazione dell'arma. Maggiore significa più oscillazione. + Wpływa na poziom kołysania broni. Większa ilość znaczy większe kołysanie. Enabled diff --git a/addons/advanced_throwing/functions/fnc_canPrepare.sqf b/addons/advanced_throwing/functions/fnc_canPrepare.sqf index c3fdce974f..87c6a7843c 100644 --- a/addons/advanced_throwing/functions/fnc_canPrepare.sqf +++ b/addons/advanced_throwing/functions/fnc_canPrepare.sqf @@ -31,7 +31,7 @@ GVAR(enabled) && {_unit getVariable [QGVAR(lastThrownTime), CBA_missionTime - 3] < CBA_missionTime - 2} && // Prevent throwing in quick succession #endif -{!(call EFUNC(common,isFeatureCameraActive))} && +{(call CBA_fnc_getActiveFeatureCamera) isEqualTo ""} && {[_unit, objNull, ["isNotInside", "isNotSwimming", "isNotSitting"/*, "isNotOnLadder"*/]] call EFUNC(common,canInteractWith)} && // Ladder needs positioning fixes on throw {_unit call CBA_fnc_canUseWeapon} && // Disable in non-FFV seats due to surface detection issues {"" == currentWeapon _unit || {currentWeapon _unit != secondaryWeapon _unit}} && diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index 7b870e010e..a060927076 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/ai/CfgEventHandlers.hpp b/addons/ai/CfgEventHandlers.hpp index becf395052..9e715077f3 100644 --- a/addons/ai/CfgEventHandlers.hpp +++ b/addons/ai/CfgEventHandlers.hpp @@ -16,3 +16,9 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; + +class Extended_DisplayLoad_EventHandlers { + class RscDisplayCurator { + ADDON = QUOTE(call FUNC(drawCuratorGarrisonPathing)); + }; +}; diff --git a/addons/ai/XEH_PREP.hpp b/addons/ai/XEH_PREP.hpp index d3a61e3012..9596af3286 100644 --- a/addons/ai/XEH_PREP.hpp +++ b/addons/ai/XEH_PREP.hpp @@ -1,3 +1,4 @@ +PREP(drawCuratorGarrisonPathing); PREP(garrison); PREP(unGarrison); PREP(garrisonMove); diff --git a/addons/ai/XEH_postInit.sqf b/addons/ai/XEH_postInit.sqf index 4ce37fd314..44f3c57472 100644 --- a/addons/ai/XEH_postInit.sqf +++ b/addons/ai/XEH_postInit.sqf @@ -68,42 +68,3 @@ params ["_unit", "_mode"]; _unit enableGunLights _mode; }] call CBA_fnc_addEventHandler; - -#ifdef DEBUG_MODE_FULL - addMissionEventHandler ["Draw3D", { - private _unitMoveList = missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []]; - { - _x params ["_unit", "_pos"]; - - switch (true) do { - case (surfaceIsWater (getPos _unit) && {surfaceIsWater _pos}) : { - for "_i" from 0 to 3 do { - drawLine3D [_unit modelToWorldVisualWorld [0,0,1], (AGLtoASL _pos), [1,0,0,1]]; - }; - drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], (AGLtoASL _pos), 0.75, 0.75, 0.75]; - }; - - case (!surfaceIsWater (getPos _unit) && {!surfaceIsWater _pos}) : { - for "_i" from 0 to 3 do { - drawLine3D [_unit modelToWorldVisual [0,0,1], _pos, [1,0,0,1]]; - }; - drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], _pos, 0.75, 0.75, 0.75]; - }; - - case (!surfaceIsWater (getPos _unit) && {surfaceIsWater _pos}) : { - for "_i" from 0 to 3 do { - drawLine3D [_unit modelToWorldVisual [0,0,1], (AGLToASL _pos), [1,0,0,1]]; - }; - drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], (AGLtoASL _pos), 0.75, 0.75, 0.75]; - }; - - case (surfaceIsWater (getPos _unit) && {!surfaceIsWater _pos}) : { - for "_i" from 0 to 3 do { - drawLine3D [_unit modelToWorldVisualWorld [0,0,1], _pos, [1,0,0,1]]; - }; - drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], _pos, 0.75, 0.75, 0.75]; - }; - }; - } forEach _unitMoveList; - }]; -#endif diff --git a/addons/ai/functions/fnc_drawCuratorGarrisonPathing.sqf b/addons/ai/functions/fnc_drawCuratorGarrisonPathing.sqf new file mode 100644 index 0000000000..de9a5b4dc7 --- /dev/null +++ b/addons/ai/functions/fnc_drawCuratorGarrisonPathing.sqf @@ -0,0 +1,54 @@ +#include "script_component.hpp" +/* + * Author: alganthe + * Add draw3D eh to the curator interface. + * + * Arguments: + * None + * + * Return value: + * None + * + * Public: No +*/ + +addMissionEventHandler ["Draw3D", { + if (findDisplay 312 isEqualTo displayNull) exitWith { + removeMissionEventHandler ["Draw3D", _thisEventHandler]; + }; + + private _unitMoveList = missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []]; + { + _x params ["_unit", "_pos"]; + + switch (true) do { + case (surfaceIsWater (getPos _unit) && {surfaceIsWater _pos}) : { + for "_i" from 0 to 3 do { + drawLine3D [_unit modelToWorldVisualWorld [0,0,1], (AGLtoASL _pos), [1,0,0,1]]; + }; + drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], (AGLtoASL _pos), 0.75, 0.75, 0.75]; + }; + + case (!surfaceIsWater (getPos _unit) && {!surfaceIsWater _pos}) : { + for "_i" from 0 to 3 do { + drawLine3D [_unit modelToWorldVisual [0,0,1], _pos, [1,0,0,1]]; + }; + drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], _pos, 0.75, 0.75, 0.75]; + }; + + case (!surfaceIsWater (getPos _unit) && {surfaceIsWater _pos}) : { + for "_i" from 0 to 3 do { + drawLine3D [_unit modelToWorldVisual [0,0,1], (AGLToASL _pos), [1,0,0,1]]; + }; + drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], (AGLtoASL _pos), 0.75, 0.75, 0.75]; + }; + + case (surfaceIsWater (getPos _unit) && {!surfaceIsWater _pos}) : { + for "_i" from 0 to 3 do { + drawLine3D [_unit modelToWorldVisualWorld [0,0,1], _pos, [1,0,0,1]]; + }; + drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], _pos, 0.75, 0.75, 0.75]; + }; + }; + } forEach _unitMoveList; +}]; diff --git a/addons/ai/functions/fnc_garrison.sqf b/addons/ai/functions/fnc_garrison.sqf index 5e5c34d19a..30238e42a7 100644 --- a/addons/ai/functions/fnc_garrison.sqf +++ b/addons/ai/functions/fnc_garrison.sqf @@ -26,6 +26,7 @@ params [["_startingPos",[0,0,0], [[]], 3], ["_buildingTypes", ["Building"], [[]] TRACE_6("fnc_garrison: Start",_startingPos,_buldingTypes,count _unitsArray,_fillingRadius,_fillingTYpe,_topDownFilling); _unitsArray = _unitsArray select {alive _x && {!isPlayer _x}}; +private _currentUnitMoveList = missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []]; if (_startingPos isEqualTo [0,0,0]) exitWith { TRACE_1("fnc_garrison: StartingPos error",_startingPos); @@ -79,11 +80,9 @@ if (_topDownFilling) then { //Remove positions units are already pathing to _buildingsIndex = _buildingsIndex apply { - private _testedBuilding = _x; - - _testedBuilding select { + _x select { private _testedPos = _x; - (({(_x select 1) isEqualTo _testedPos} count (missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []])) == 0) + ({(_x select 1) isEqualTo _testedPos} count (missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []])) == 0 } }; @@ -147,6 +146,8 @@ switch (_fillingType) do { _unit setPosATL _pos; }; + _currentUnitMoveList deleteAt (_currentUnitMoveList findIf {_x select 0 == _unit}); + } else { _unitMoveList pushBack [_unit,[_pos, AGLToASL _pos] select (_posSurface)]; }; @@ -194,6 +195,8 @@ switch (_fillingType) do { _unit setPosATL _pos; }; + _currentUnitMoveList deleteAt (_currentUnitMoveList findIf {_x select 0 == _unit}); + } else { _unitMoveList pushBack [_unit,[_pos, AGLToASL _pos] select (_posSurface)]; }; @@ -239,6 +242,8 @@ switch (_fillingType) do { _unit setPosATL _pos; }; + _currentUnitMoveList deleteAt (_currentUnitMoveList findIf {_x select 0 == _unit}); + } else { _unitMoveList pushBack [_unit,[_pos, AGLToASL _pos] select (_posSurface)]; }; diff --git a/addons/ai/functions/fnc_garrisonMove.sqf b/addons/ai/functions/fnc_garrisonMove.sqf index 586c7b1f20..6bba35fbc3 100644 --- a/addons/ai/functions/fnc_garrisonMove.sqf +++ b/addons/ai/functions/fnc_garrisonMove.sqf @@ -53,10 +53,41 @@ if (isNil QGVAR(garrison_moveUnitPFH)) then { { _x params ["_unit", "_pos"]; - // Check if unit is alive or even existing - if (!alive _unit) then { + private _fnc_attemptFailed = { + if (_failSafeRemainingAttemps == 0 ) then { + _unit setVariable [QGVAR(garrisonMove_failSafe), nil, true]; + _unit setVariable [QGVAR(garrisonMove_unitPosMemory), nil, true]; + [QGVAR(unGarrison), [[_unit]], _unit] call CBA_fnc_targetEvent; + _unitMoveList deleteAt (_unitMoveList find _x); + LOG("garrisonMove PFH: all moving commands failed | restoring AI capabilities"); + + } else { + _unit setVariable [QGVAR(garrisonMove_failSafe), [_failSafeTimer + 15, _failSafeRemainingAttemps - 1]]; + [QGVAR(doMove), [[[_unit, _pos]]], _unit] call CBA_fnc_targetEvent; + LOG("garrisonMove PFH unitReady: unit not close enough | Sending another doMove command"); + }; + }; + + private _fnc_attemptSuccessful = { + _unit setVariable [QGVAR(garrisonMove_failSafe), nil, true]; + _unit setVariable [QGVAR(garrisonMove_unitPosMemory), nil, true]; + _unit setVariable [QGVAR(garrisonned), true, true]; _unitMoveList deleteAt (_unitMoveList find _x); - LOG(format [ARR_2("garrisonMove PFH: unit dead or deleted | %1 units left", count _unitMoveList)]); + + [QGVAR(AISection), [[_unit], ["PATH"], false], _unit] call CBA_fnc_targetEvent; + [QGVAR(AISection), [[_unit], ["FSM"], true], _unit] call CBA_fnc_targetEvent; + + if ({(_x select 0) in units _unit && {!isPlayer (_x select 0)}} count _unitMoveList == 0) then { + [QGVAR(enableAttack), [[_unit], true], _unit] call CBA_fnc_targetEvent; + }; + + LOG(format [ARR_2("garrisonMove PFH: unit in position | %1 units left", count _unitMoveList)]); + }; + + // Check if unit is alive or even existing + if (!alive _unit || {_unit getVariable [QGVAR(garrisoned), false]}) then { + _unitMoveList deleteAt (_unitMoveList find _x); + LOG(format [ARR_2("garrisonMove PFH: unit dead, deleted or garrisoned via TP | %1 units left", count _unitMoveList)]); } else { private _unitPos = getPos _unit; @@ -68,38 +99,15 @@ if (isNil QGVAR(garrison_moveUnitPFH)) then { if (unitReady _unit) then { // Check for distance, doMove and AI are moody and may stop for no reason, within 6 meters and ready should be fine - if (_unitPos distance _pos < 3) then { - _unit setVariable [QGVAR(garrisonMove_failSafe), nil, true]; - _unit setVariable [QGVAR(garrisonMove_unitPosMemory), nil, true]; - _unit setVariable [QGVAR(garrisonned), true, true]; - _unitMoveList deleteAt (_unitMoveList find _x); - - [QGVAR(AISection), [[_unit], ["PATH"], false], _unit] call CBA_fnc_targetEvent; - [QGVAR(AISection), [[_unit], ["FSM"], true], _unit] call CBA_fnc_targetEvent; - - if ({(_x select 0) in units _unit && {!isPlayer (_x select 0)}} count _unitMoveList == 0) then { - [QGVAR(enableAttack), [[_unit], true], _unit] call CBA_fnc_targetEvent; - }; - - LOG(format [ARR_2("garrisonMove PFH: unit in position | %1 units left", count _unitMoveList)]); + if (_unitPos distance _pos < 1.5) then { + call _fnc_attemptSuccessful; } else { // Tell the unit to move if an order wasn't given within 30s, avoid doMove spam (_unit getVariable [QGVAR(garrisonMove_failSafe), [CBA_missionTime, 5]]) params ["_failSafeTimer", "_failSafeRemainingAttemps"]; if (_failSafeTimer <= CBA_missionTime) then { - if (_failSafeRemainingAttemps == 0 ) then { - _unit setVariable [QGVAR(garrisonMove_failSafe), nil, true]; - _unit setVariable [QGVAR(garrisonMove_unitPosMemory), nil, true]; - [QGVAR(unGarrison), [[_unit]], _unit] call CBA_fnc_targetEvent; - _unitMoveList deleteAt (_unitMoveList find _x); - LOG("garrisonMove PFH unitReady: all moving commands failed | restoring AI capabilities"); - - } else { - _unit setVariable [QGVAR(garrisonMove_failSafe), [_failSafeTimer + 15, _failSafeRemainingAttemps - 1]]; - [QGVAR(doMove), [[[_unit, _pos]]], _unit] call CBA_fnc_targetEvent; - LOG("garrisonMove PFH unitReady: unit not close enough | Sending another doMove command"); - }; + call _fnc_attemptFailed; }; }; } else { @@ -107,30 +115,12 @@ if (isNil QGVAR(garrison_moveUnitPFH)) then { // AI may sometimes not be able to report unitReady, this is to avoid the PFH running forever switch true do { - case ((_unitPosTimer + 15) < CBA_missionTime && {(_unitPos distance _pos) < 3}) : { - TRACE_1("case 1",_unit); - _unit setVariable [QGVAR(garrisonMove_failSafe), nil, true]; - _unit setVariable [QGVAR(garrisonMove_unitPosMemory), nil, true]; - _unit setVariable [QGVAR(garrisonned), true, true]; - _unitMoveList deleteAt (_unitMoveList find _x); - - [QGVAR(AISection), [[_unit], ["PATH"], false], _unit] call CBA_fnc_targetEvent; - [QGVAR(AISection), [[_unit], ["FSM"], true], _unit] call CBA_fnc_targetEvent; - - if ({(_x select 0) in units _unit && {!isPlayer (_x select 0)}} count _unitMoveList == 0) then { - [QGVAR(enableAttack), [[_unit], true], _unit] call CBA_fnc_targetEvent; - }; - - LOG(format [ARR_2("garrisonMove PFH unitNotReady: unit in position | %1 units left", count _unitMoveList)]); + case ((_unitPos distance _pos) < 1.5) : { + call _fnc_attemptSuccessful; }; - case ((_unitPosTimer + 15) < CBA_missionTime && {_unitOldPos distance _unitPos < 0.5}) : { - TRACE_3("case 2",_unit, ((_unitPosTimer + 15) < CBA_missionTime), (_unitOldPos distance _unitPos < 0.5)); - _unit setVariable [QGVAR(garrisonMove_failSafe), nil, true]; - _unit setVariable [QGVAR(garrisonMove_unitPosMemory), nil, true]; - [QGVAR(unGarrison), [[_unit]], _unit] call CBA_fnc_targetEvent; - _unitMoveList deleteAt (_unitMoveList find _x); - LOG("garrisonMove PFH unitNotReady: all moving commands failed | restoring AI capabilities"); + case ((_unitPosTimer + 5) < CBA_missionTime && {_unitOldPos distance _unitPos < 0.5}) : { + call _fnc_attemptFailed; }; case (_unitOldPos distance _unitPos < 0.5) : {}; diff --git a/addons/ai/functions/fnc_unGarrison.sqf b/addons/ai/functions/fnc_unGarrison.sqf index 8391c7f8e3..e098f4b130 100644 --- a/addons/ai/functions/fnc_unGarrison.sqf +++ b/addons/ai/functions/fnc_unGarrison.sqf @@ -21,37 +21,31 @@ params [["_units", [], [[]]]]; _units = _units select {local _x}; { - if (!isPlayer _x && {local _x}) then { - _x enableAI "PATH"; - _x enableAI "FSM"; + private _unit = _x; + if (!isPlayer _unit && {local _unit}) then { + _unit enableAI "PATH"; + _unit enableAI "FSM"; - private _leader = leader _x; + private _leader = leader _unit; - TRACE_3("fnc_ungarrison: unit and leader",_x , _leader, (_leader == _x)); + TRACE_3("fnc_ungarrison: unit and leader",_unit , _leader, (_leader == _unit)); - _x setVariable [QGVAR(garrisonned), false, true]; + _unit setVariable [QGVAR(garrisonned), false, true]; - if (_leader != _x) then { - doStop _x; - _x doFollow _leader; + private _unitMoveList = missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []]; + _unitMoveList deleteAt (_unitMoveList findIf {_x select 0 == _unit}); + + if (_leader != _unit) then { + doStop _unit; + _unit doFollow _leader; } else { - _x doMove ((nearestBuilding (getPos _x)) buildingExit 0); + _unit doMove ((nearestBuilding (getPos _unit)) buildingExit 0); }; - private _fnc_countGarrisonnedUnits = { - params ["_unit", "_bool"]; - if (_bool) then { - ({(_x getVariable [QGVAR(garrisonned), false]) && {!isPlayer _x}} count units _unit) - } else { - ({!(_x getVariable [QGVAR(garrisonned), false]) && {!isPlayer _x}} count units _unit) - }; - - }; - - if ([_x, true] call _fnc_countGarrisonnedUnits == ({!isPlayer _x} count (units _x)) - 1 || {[_x, false] call _fnc_countGarrisonnedUnits == {!isPlayer _x} count (units _x)}) then { + if ((units _unit) findif {(_x getVariable [QGVAR(garrisonned), false]) && !isPlayer _x} == -1) then { LOG("fnc_ungarrison: enableAttack true"); - (group _x) enableAttack true; + (group _unit) enableAttack true; }; }; } foreach _units; diff --git a/addons/ai/stringtable.xml b/addons/ai/stringtable.xml index 7e5e9b80a2..59dca33cb4 100644 --- a/addons/ai/stringtable.xml +++ b/addons/ai/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,7 @@ 提供的位置無效 提供的位置无效。 위치가 잘못되었습니다. + Podano błędną pozycję. No units provided. @@ -18,6 +19,7 @@ 找不到可用的單位 找不到可用的单位。 병력이 없습니다. + Nie podano żadnych jednostek. There aren't enough positions to place all units. @@ -27,6 +29,7 @@ 沒有足夠的位置能擺放所有單位 没有足够的位置能摆放所有单位。 모든 병력을 배치 할 공간이 없습니다. + Nie ma wystarczającej ilości pozycji, aby umieścić wszystkie jednostki. No building found. @@ -36,6 +39,7 @@ 沒找到建築物 没找到建筑物。 건물이 없습니다. + Nie znaleziono budynku. diff --git a/addons/apl/data/Jezek_kov.rvmat b/addons/apl/data/jezek_kov.rvmat similarity index 100% rename from addons/apl/data/Jezek_kov.rvmat rename to addons/apl/data/jezek_kov.rvmat diff --git a/addons/apl/model.cfg b/addons/apl/model.cfg index 67bc593a78..7ed0ad7378 100644 --- a/addons/apl/model.cfg +++ b/addons/apl/model.cfg @@ -17,4 +17,12 @@ class CfgModels { sections[] = {"camo"}; skeletonName = ""; }; + class ace_entrchtool: Default {}; + class ace_envelope_big: Default {}; + class ace_envelope_big4: Default {}; + class ace_envelope_big4_nogeo: Default {}; + class ace_envelope_small: Default {}; + class ace_envelope_small4: Default {}; + class ace_envelope_small4_nogeo: Default {}; + class LWTS_optic: Default {}; }; \ No newline at end of file diff --git a/addons/arsenal/ACE_Arsenal_Stats.hpp b/addons/arsenal/ACE_Arsenal_Stats.hpp index 885daa843f..1dd400856a 100644 --- a/addons/arsenal/ACE_Arsenal_Stats.hpp +++ b/addons/arsenal/ACE_Arsenal_Stats.hpp @@ -74,6 +74,14 @@ class GVAR(stats) { textStatement = QUOTE(call FUNC(statTextStatement_scopeMag)); tabs[] = {{}, {0}}; }; + class ACE_scopeVisionMode: statBase { + scope = 2; + priority = 1; + displayName = CSTRING(statVisionMode); + showText = 1; + textStatement = QUOTE(call FUNC(statTextStatement_scopeVisionMode)); + tabs[] = {{}, {0}}; + }; class ACE_ballisticProtection: statBase { scope = 2; priority = 5; @@ -101,4 +109,14 @@ class GVAR(stats) { barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(0, 500)], [ARR_2(0.01, 1)], false)])] call FUNC(statBarStatement_default)); tabs[] = {{3,4,5}, {}}; }; + class ACE_smokeChemTTL: statBase { + scope = 2; + priority = 3; + stats[] = {"ammo"}; + displayName = CSTRING(statTTL); + showText = 1; + textStatement= QUOTE(call FUNC(statTextStatement_smokeChemTTL)); + condition = QUOTE((configName (_this select 1)) isKindOf [ARR_2('smokeShell', configFile >> 'CfgMagazines')]); + tabs[] = {{}, {5}}; + }; }; diff --git a/addons/arsenal/Cfg3DEN.hpp b/addons/arsenal/Cfg3DEN.hpp index ceb3cee926..8b40f77bfe 100644 --- a/addons/arsenal/Cfg3DEN.hpp +++ b/addons/arsenal/Cfg3DEN.hpp @@ -8,7 +8,7 @@ class Cfg3DEN { class GVAR(DefaultLoadoutsListAttribute) { property = QGVAR(DefaultLoadoutsListAttribute); value = 0; - expression = QUOTE(if (!is3DEN) then {GVAR(defaultLoadoutsList) = _value};); + expression = QUOTE(if (!is3DEN) then {GVAR(defaultLoadoutsList) = _value}); defaultValue = "[]"; validate = "none"; wikiType = "[[Array]]"; @@ -55,7 +55,7 @@ class Cfg3DEN { }; class Category: ctrlToolboxPictureKeepAspect { idc = IDC_ATTRIBUTE_CATEGORY; - onToolBoxSelChanged = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); + onToolBoxSelChanged = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0), _this select 1)] call FUNC(attributeCategory)); x = QUOTE(5 * ATTRIBUTE_W); y = QUOTE(15 * ATTRIBUTE_H); w = QUOTE(125 * ATTRIBUTE_W); @@ -102,6 +102,8 @@ class Cfg3DEN { idcLeft = IDC_ATTRIBUTE_LIST_LEFT; idcRight = IDC_ATTRIBUTE_LIST_RIGHT; onLBDblClick = QUOTE(_this call FUNC(attributeDblClick)); + onSetFocus = QUOTE(SETUVAR(QGVAR(attributeFocus),ctrlParentControlsGroup (_this select 0))); + onKillFocus = QUOTE(SETUVAR(QGVAR(attributeFocus),nil)); x = QUOTE(5 * ATTRIBUTE_W); y = QUOTE(35.83 * ATTRIBUTE_H); w = QUOTE(125 * ATTRIBUTE_W); @@ -127,7 +129,14 @@ class Cfg3DEN { }; class SearchButton: ctrlButtonPicture { idc = IDC_ATTRIBUTE_SEARCH_BUTTON; - onButtonClick = QUOTE(((ctrlParentControlsGroup (_this select 0)) controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR) ctrlSetText ''; [ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); + onButtonClick = QUOTE( \ + params ['_searchButton']; \ + private _controlsGroup = ctrlParentControlsGroup _searchButton; \ + private _searchBar = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR; \ + _searchBar ctrlSetText ''; \ + ctrlSetFocus _searchBar; \ + [_controlsGroup] call FUNC(attributeAddItems); \ + ); text = "\a3\Ui_f\data\GUI\RscCommon\RscButtonSearch\search_start_ca.paa"; x = QUOTE(5 * ATTRIBUTE_W); y = QUOTE(101.83 * ATTRIBUTE_H); @@ -138,9 +147,16 @@ class Cfg3DEN { class SearchBar: ctrlEdit { idc = IDC_ATTRIBUTE_SEARCHBAR; onKeyUp = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); + onMouseButtonClick = QUOTE( \ + params [ARR_2('_searchBar','_button')]; \ + if (_button != 1) exitWith {}; \ + _searchBar ctrlSetText ''; \ + ctrlSetFocus _searchBar; \ + [ctrlParentControlsGroup _searchBar] call FUNC(attributeAddItems); \ + ); x = QUOTE(11 * ATTRIBUTE_W); y = QUOTE(101.83 * ATTRIBUTE_H); - w = QUOTE(55 * ATTRIBUTE_W); + w = QUOTE(40 * ATTRIBUTE_W); h = QUOTE(5 * ATTRIBUTE_H); }; class ClearButton: ctrlButton { @@ -160,6 +176,27 @@ class Cfg3DEN { tooltip = CSTRING(AttributeExport_Tooltip); x = QUOTE(79 * ATTRIBUTE_W); }; + class ImportButton: ClearButton { + idc = IDC_ATTRIBUTE_IMPORT_BUTTON; + onButtonClick = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeImport)); + text = CSTRING(buttonImportText); + tooltip = CSTRING(AttributeImport_Tooltip); + x = QUOTE(53 * ATTRIBUTE_W); + }; + class AddCompatible: ctrlButton { + idc = IDC_ATTRIBUTE_ADD_COMPATIBLE; + style = ST_CENTER; + onButtonClick = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddCompatible)); + text = CSTRING(AttributeAddCompatible_DisplayName); + tooltip = CSTRING(AttributeAddCompatible_Tooltip); + font = "RobotoCondensedLight"; + x = QUOTE(98.75 * ATTRIBUTE_W); + y = QUOTE(10.5 * ATTRIBUTE_H); + w = QUOTE(31.25 * ATTRIBUTE_W); + h = QUOTE(4 * ATTRIBUTE_H); + sizeEx = QUOTE(4 * ATTRIBUTE_H); + colorBackground[] = {0, 0, 0, 0.5}; + }; }; }; }; diff --git a/addons/arsenal/Display3DEN.hpp b/addons/arsenal/Display3DEN.hpp new file mode 100644 index 0000000000..b1b78b9f92 --- /dev/null +++ b/addons/arsenal/Display3DEN.hpp @@ -0,0 +1,34 @@ +class Display3DEN { + class ContextMenu: ctrlMenu { + class Items { + class Arsenal { + items[]= {"aceArsenal", "virtualArsenal"}; + }; + class virtualArsenal { + text = "BI Virtual Arsenal"; + action = QUOTE(['arsenal'] call bis_fnc_3DENEntityMenu); + value = 0; + data = "Arsenal"; + opensNewWindow = 1; + }; + class aceArsenal: virtualArsenal { + text = "ACE Arsenal"; + action = QUOTE(call DFUNC(open3DEN)); + }; + }; + }; + class Controls { + class MenuStrip: ctrlMenuStrip { + class Items { + class Tools { + items[] += {QGVAR(portVALoadouts)}; + }; + class GVAR(portVALoadouts) { + text = CSTRING(portLoadoutsText); + picture = QPATHTOEF(common,data\logo_ace3_ca.paa); + action = QUOTE(call DFUNC(portVALoadouts);); + }; + }; + }; + }; +}; diff --git a/addons/arsenal/XEH_PREP.hpp b/addons/arsenal/XEH_PREP.hpp index 233abc56f8..656fc5b1d5 100644 --- a/addons/arsenal/XEH_PREP.hpp +++ b/addons/arsenal/XEH_PREP.hpp @@ -2,10 +2,14 @@ PREP(addDefaultLoadout); PREP(addListBoxItem); PREP(addStat); PREP(addVirtualItems); +PREP(attributeAddCompatible); PREP(attributeAddItems); +PREP(attributeCategory); PREP(attributeClear); PREP(attributeDblClick); +PREP(attributeImport); PREP(attributeInit); +PREP(attributeKeyDown); PREP(attributeLoad); PREP(attributeMode); PREP(attributeSelect); @@ -63,6 +67,8 @@ PREP(statTextStatement_accuracy); PREP(statTextStatement_mass); PREP(statTextStatement_rateOfFire); PREP(statTextStatement_scopeMag); +PREP(statTextStatement_scopeVisionMode); +PREP(statTextStatement_smokeChemTTL); PREP(updateCamPos); PREP(updateRightPanel); PREP(updateUniqueItemsList); diff --git a/addons/arsenal/config.cpp b/addons/arsenal/config.cpp index 32bc41d254..6eb4c895ce 100644 --- a/addons/arsenal/config.cpp +++ b/addons/arsenal/config.cpp @@ -15,6 +15,7 @@ class CfgPatches { }; #include "ui\RscAttributes.hpp" +#include "Display3DEN.hpp" #include "Cfg3DEN.hpp" #include "CfgEventHandlers.hpp" #include "RscDisplayMain.hpp" diff --git a/addons/arsenal/defines.hpp b/addons/arsenal/defines.hpp index 6bc200b32f..35d2edc461 100644 --- a/addons/arsenal/defines.hpp +++ b/addons/arsenal/defines.hpp @@ -162,6 +162,8 @@ #define IDC_ATTRIBUTE_SEARCHBAR 8106 #define IDC_ATTRIBUTE_CLEAR_BUTTON 8107 #define IDC_ATTRIBUTE_EXPORT_BUTTON 8108 +#define IDC_ATTRIBUTE_IMPORT_BUTTON 8109 +#define IDC_ATTRIBUTE_ADD_COMPATIBLE 8110 #define SYMBOL_ITEM_NONE "−" #define SYMBOL_ITEM_REMOVE "×" @@ -362,7 +364,8 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\ {(_accsArray select 2) findIf {_x == _item} > -1} ||\ {(_accsArray select 3) findIf {_x == _item} > -1} -#define CHECK_ASSIGNED_ITEMS\ +// PboProject 2.45 has problems with these macros for some reason, adding a single space before the \ fixes +#define CHECK_ASSIGNED_ITEMS \ (GVAR(virtualItems) select 10) findIf {_x == _item} > -1 ||\ {(GVAR(virtualItems) select 11) findIf {_x == _item} > -1} ||\ {(GVAR(virtualItems) select 12) findIf {_x == _item} > -1} ||\ @@ -370,7 +373,7 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\ {(GVAR(virtualItems) select 14) findIf {_x == _item} > -1} ||\ {(GVAR(virtualItems) select 8) findIf {_x == _item} > -1} -#define CHECK_CONTAINER\ +#define CHECK_CONTAINER \ (GVAR(virtualItems) select 4) findIf {_x == _item} > -1 ||\ {(GVAR(virtualItems) select 5) findIf {_x == _item} > -1} ||\ {(GVAR(virtualItems) select 6) findIf {_x == _item} > -1} @@ -381,7 +384,7 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\ {isClass (_glassesCfg >> _item)} ||\ {isClass (_magCfg >> _item)} -#define CHECK_CONTAINER_ITEMS\ +#define CHECK_CONTAINER_ITEMS \ (GVAR(virtualItems) select 3) findIf {_x == _item} > -1 ||\ {(_accsArray select 0) findIf {_x == _item} > -1} ||\ {(_accsArray select 1) findIf {_x == _item} > -1} ||\ diff --git a/addons/arsenal/functions/fnc_addVirtualItems.sqf b/addons/arsenal/functions/fnc_addVirtualItems.sqf index ff5865bb6b..1d9a782603 100644 --- a/addons/arsenal/functions/fnc_addVirtualItems.sqf +++ b/addons/arsenal/functions/fnc_addVirtualItems.sqf @@ -193,7 +193,8 @@ if (_items isEqualType true) then { switch true do { // Rifle, handgun, secondary weapons mags case ( - (getNumber (configFile >> "CfgMagazines" >> _x >> "type") in [TYPE_MAGAZINE_PRIMARY_AND_THROW,TYPE_MAGAZINE_SECONDARY_AND_PUT,1536,TYPE_MAGAZINE_HANDGUN_AND_GL]) && + ((getNumber (configFile >> "CfgMagazines" >> _x >> "type") in [TYPE_MAGAZINE_PRIMARY_AND_THROW,TYPE_MAGAZINE_SECONDARY_AND_PUT,1536,TYPE_MAGAZINE_HANDGUN_AND_GL]) || + {(getNumber (configFile >> "CfgMagazines" >> _x >> QGVAR(hide))) == -1}) && {!(_x in _grenadeList)} && {!(_x in _putList)} ): { diff --git a/addons/arsenal/functions/fnc_attributeAddCompatible.sqf b/addons/arsenal/functions/fnc_attributeAddCompatible.sqf new file mode 100644 index 0000000000..4f84f9624c --- /dev/null +++ b/addons/arsenal/functions/fnc_attributeAddCompatible.sqf @@ -0,0 +1,75 @@ +#include "script_component.hpp" +#include "..\defines.hpp" +/* + * Author: mharis001 + * Adds compatible attachments or magazines for all weapons in 3DEN attribute. + * + * Arguments: + * 0: Attribute controls group + * + * Return Value: + * None + * + * Example: + * [CONTROL] call ace_arsenal_fnc_attributeAddCompatible + * + * Public: No + */ + +params ["_controlsGroup"]; + +private _category = lbCurSel (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY); + +// Exit if selected category is not attachments or magazines +if !(_category in [4, 5, 6, 7, 8]) exitWith {}; + +private _configItems = +(uiNamespace getVariable [QGVAR(configItems), []]); +private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]]; +_attributeValue params ["_attributeItems"]; + +// Get list of all weapons in attribute items +(_configItems select 0) params ["_primaryWeapons", "_secondaryWeapons", "_handgunWeapons"]; +private _attributeWeapons = _attributeItems select {_x in _primaryWeapons || {_x in _secondaryWeapons} || {_x in _handgunWeapons}}; + +// Add compatible attachments or magazines to attribute +private _cfgWeapons = configFile >> "CfgWeapons"; +private _itemsToAdd = []; + +if (_category == 8) then { + private _magazineGroups = uiNamespace getVariable QGVAR(magazineGroups); + private _cfgMagazines = configFile >> "CfgMagazines"; + + { + private _weaponConfig = _cfgWeapons >> _x; + + { + private _muzzleConfig = if (_x == "this") then {_weaponConfig} else {_weaponConfig >> _x}; + + // Only add existent magazines and ensure correct classname case + private _magazines = getArray (_muzzleConfig >> "magazines") select {isClass (_cfgMagazines >> _x)}; + _magazines = _magazines apply {configName (_cfgMagazines >> _x)}; + _itemsToAdd append _magazines; + + { + _itemsToAdd append ([_magazineGroups, toLower _x] call CBA_fnc_hashGet); + } forEach getArray (_muzzleConfig >> "magazineWell"); + } forEach getArray (_weaponConfig >> "muzzles"); + } forEach _attributeWeapons; +} else { + private _attachmentCategory = _category - 4; + private _filter = ["optic", "pointer", "muzzle", "bipod"] select _attachmentCategory; + + { + _itemsToAdd append ([_x, _filter] call CBA_fnc_compatibleItems); + } forEach _attributeWeapons; + + // Only add items with scope of 2 and ensure correct classname case + _itemsToAdd = _itemsToAdd select {getNumber (_cfgWeapons >> _x >> "scope") == 2}; + _itemsToAdd = _itemsToAdd apply {configName (_cfgWeapons >> _x)}; +}; + +_attributeItems append _itemsToAdd; +_attributeValue set [0, _attributeItems arrayIntersect _attributeItems]; + +// Refresh the list for new items +[_controlsGroup] call FUNC(attributeAddItems); diff --git a/addons/arsenal/functions/fnc_attributeAddItems.sqf b/addons/arsenal/functions/fnc_attributeAddItems.sqf index edc62ea6ed..12611bbdeb 100644 --- a/addons/arsenal/functions/fnc_attributeAddItems.sqf +++ b/addons/arsenal/functions/fnc_attributeAddItems.sqf @@ -11,7 +11,7 @@ * None * * Example: - * [CONTROL, 0] call ace_arsenal_fnc_attributeAddItems + * [CONTROL] call ace_arsenal_fnc_attributeAddItems * * Public: No */ diff --git a/addons/arsenal/functions/fnc_attributeCategory.sqf b/addons/arsenal/functions/fnc_attributeCategory.sqf new file mode 100644 index 0000000000..e0c0468f8a --- /dev/null +++ b/addons/arsenal/functions/fnc_attributeCategory.sqf @@ -0,0 +1,32 @@ +#include "script_component.hpp" +#include "..\defines.hpp" +/* + * Author: mharis001 + * Handles changing the category in 3DEN attribute. + * + * Arguments: + * 0: Attribute controls group + * 1: Category + * + * Return Value: + * None + * + * Example: + * [CONTROL, 0] call ace_arsenal_fnc_attributeCategory + * + * Public: No + */ + +params ["_controlsGroup", "_category"]; + +// Store selected category +uiNamespace setVariable [QGVAR(attributeCategory), _category]; + +// Show add compatible items button when category is attachments or magazines +private _compatibleButton = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_ADD_COMPATIBLE; +private _enable = _category in [4, 5, 6, 7, 8]; +_compatibleButton ctrlEnable _enable; +_compatibleButton ctrlShow _enable; + +// Refresh the list for selected category +[_controlsGroup] call FUNC(attributeAddItems); diff --git a/addons/arsenal/functions/fnc_attributeImport.sqf b/addons/arsenal/functions/fnc_attributeImport.sqf new file mode 100644 index 0000000000..ec56df4b56 --- /dev/null +++ b/addons/arsenal/functions/fnc_attributeImport.sqf @@ -0,0 +1,49 @@ +#include "script_component.hpp" +/* + * Author: mharis001 + * Handles importing items list from clipboard into 3DEN attribute. + * + * Arguments: + * 0: Attribute controls group + * + * Return Value: + * None + * + * Example: + * [CONTROL] call ace_arsenal_fnc_attributeImport + * + * Public: No + */ + +params ["_controlsGroup"]; + +private _importList = call compile copyFromClipboard; + +// Verify import list is in correct format +if (isNil "_importList" || {!(_importList isEqualType [])} || {!(_importList isEqualTypeAll "")}) exitWith { + playSound ["3DEN_notificationWarning", true]; +}; + +// Ensure imported items are in scanned config array and classname case is correct +private _configItems = +(uiNamespace getVariable [QGVAR(configItems), []]); +private _configItemsFlat = _configItems select [2, 16]; +_configItemsFlat append (_configItems select 0); +_configItemsFlat append (_configItems select 1); + +private _filteredList = []; + +{ + private _item = _x; + { + private _index = _x findIf {_x == _item}; + if (_index > -1) then { + _filteredList pushBackUnique (_x select _index); + }; + } forEach _configItemsFlat; +} forEach _importList; + +private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]]; +_attributeValue set [0, _filteredList]; + +// Refresh the list for new items +[_controlsGroup] call FUNC(attributeAddItems); diff --git a/addons/arsenal/functions/fnc_attributeInit.sqf b/addons/arsenal/functions/fnc_attributeInit.sqf index 14afa31691..8c1556fcd6 100644 --- a/addons/arsenal/functions/fnc_attributeInit.sqf +++ b/addons/arsenal/functions/fnc_attributeInit.sqf @@ -21,9 +21,16 @@ _value params ["_items", "_mode"]; TRACE_2("Initializing object with attribute",_object,_value); if (_mode > 0) then { - // Blacklist: all full arsenal and take items away + // Blacklist: add full arsenal and take items away [_object, true, true] call FUNC(initBox); - [_object, _items, true] call FUNC(removeVirtualItems); + + // Need to delay removal by 2 frames + [{ + [{ + params ["_object", "_items"]; + [_object, _items, true] call FUNC(removeVirtualItems); + }, _this] call CBA_fnc_execNextFrame; + }, [_object, _items]] call CBA_fnc_execNextFrame; } else { // Exit on whitelist mode with no items if (_items isEqualTo []) exitWith {}; diff --git a/addons/arsenal/functions/fnc_attributeKeyDown.sqf b/addons/arsenal/functions/fnc_attributeKeyDown.sqf new file mode 100644 index 0000000000..300ab9f6c5 --- /dev/null +++ b/addons/arsenal/functions/fnc_attributeKeyDown.sqf @@ -0,0 +1,39 @@ +#include "script_component.hpp" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" +/* + * Author: mharis001 + * Handles keyboard input for the 3DEN attribute. + * + * Arguments: + * 0: Display + * 1: Key code + * + * Return Value: + * Handled + * + * Example: + * [DISPLAY, 0] call ace_arsenal_fnc_attributeKeyDown + * + * Public: No + */ + +params ["_display", "_keyCode"]; +TRACE_2("Attribute key down",_display,_keyCode); + +// Exit if attribute is not in focus +private _controlsGroup = uiNamespace getVariable QGVAR(attributeFocus); +if (isNil "_controlsGroup") exitWith {false}; + +switch (_keyCode) do { + case DIK_LEFT; + case DIK_NUMPADMINUS: { + [_controlsGroup, false] call FUNC(attributeSelect); + true + }; + case DIK_RIGHT; + case DIK_NUMPADPLUS: { + [_controlsGroup, true] call FUNC(attributeSelect); + true + }; + default {false}; +}; diff --git a/addons/arsenal/functions/fnc_attributeLoad.sqf b/addons/arsenal/functions/fnc_attributeLoad.sqf index b2b3f13b1e..355d5e113a 100644 --- a/addons/arsenal/functions/fnc_attributeLoad.sqf +++ b/addons/arsenal/functions/fnc_attributeLoad.sqf @@ -23,10 +23,19 @@ TRACE_1("Initializing 3DEN attribute",_value); // Store working attribute value uiNamespace setVariable [QGVAR(attributeValue), _value]; +// Add keyDown EH to display +// Does not work properly when added to controls group +private _display = ctrlParent _controlsGroup; +_display displayAddEventHandler ["KeyDown", {call FUNC(attributeKeyDown)}]; + // Handle selected mode if (_value select 1 > 0) then { (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_MODE) lbSetCurSel 1; (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST_RIGHT) ctrlSetText SYMBOL_ITEM_REMOVE; }; -[_controlsGroup] call FUNC(attributeAddItems); +// Trigger category selection for last selected category to populate list +private _category = uiNamespace getVariable [QGVAR(attributeCategory), 0]; +(_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY) lbSetCurSel _category; + +[_controlsGroup, _category] call FUNC(attributeCategory); diff --git a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf index 78e02431a4..17c89b5f36 100644 --- a/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf +++ b/addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf @@ -124,7 +124,17 @@ switch (GVAR(currentLoadoutsTab)) do { }; }; - if (_loadoutIndex == -1) then { + if (GVAR(shiftState) && {is3DEN} && {!(_loadoutName isEqualTo "")} && {_cursSelRow != -1} && {!(_loadoutIndex isEqualto -1)}) exitwith { + private _defaultLoadoutsSearch = GVAR(defaultLoadoutsList) findIf {(_x select 0) == _loadoutName}; + if (_defaultLoadoutsSearch isEqualto -1) then { + GVAR(defaultLoadoutsList) pushBack [_loadoutName, _curSelLoadout]; + } else { + GVAR(defaultLoadoutsList) set [_defaultLoadoutsSearch , [ _loadoutName, _curSelLoadout]]; + }; + set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]]; + }; + + if (_loadoutIndex isEqualto -1) then { _data pushBack [_editBoxContent, _loadout]; } else { _data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]]; diff --git a/addons/arsenal/functions/fnc_initBox.sqf b/addons/arsenal/functions/fnc_initBox.sqf index 51c1453531..1343a20f63 100644 --- a/addons/arsenal/functions/fnc_initBox.sqf +++ b/addons/arsenal/functions/fnc_initBox.sqf @@ -30,7 +30,7 @@ if (_global && {isMultiplayer} && {{_object in _x} count GVAR(EHIDArray) == 0}) private _ID = [QGVAR(initBox), [_object, _items, false]] call CBA_fnc_globalEventJIP; [_ID, _object] call CBA_fnc_removeGlobalEventJIP; - + GVAR(EHIDArray) pushBack [_ID, _object]; publicVariable QGVAR(EHIDArray); } else { @@ -38,19 +38,19 @@ if (_global && {isMultiplayer} && {{_object in _x} count GVAR(EHIDArray) == 0}) if ({(_x select 0) select 0 isEqualTo QGVAR(interaction)} count (_object getVariable [QEGVAR(interact_menu,actions), []]) == 0) then { private _action = [ - QGVAR(interaction), + QGVAR(interaction), localize "STR_A3_Arsenal", - "", + "", { params ["_target", "_player"]; [_target, _player] call FUNC(openBox); - }, + }, { params ["_target", "_player"]; - + [_player, _target] call EFUNC(common,canInteractWith) - }, + }, {}, [] ] call EFUNC(interact_menu,createAction); diff --git a/addons/arsenal/functions/fnc_loadoutsChangeTab.sqf b/addons/arsenal/functions/fnc_loadoutsChangeTab.sqf index df5d8a5804..220cb697f2 100644 --- a/addons/arsenal/functions/fnc_loadoutsChangeTab.sqf +++ b/addons/arsenal/functions/fnc_loadoutsChangeTab.sqf @@ -48,6 +48,7 @@ switch (ctrlIDC _control) do { case IDC_buttonMyLoadouts: { _centerBoxTitleCtrl ctrlSetText (localize LSTRING(tabMyLoadoutsText)); + if (is3den) then { _saveButtonCtrl ctrlSetTooltip format ["%1\n%2", localize LSTRING(buttonSaveTooltip), localize LSTRING(buttonSaveTooltip_shiftClick)]; }; _saveButtonCtrl ctrlEnable true; _saveButtonCtrl ctrlCommit 0; }; @@ -55,6 +56,7 @@ switch (ctrlIDC _control) do { case IDC_buttonDefaultLoadouts: { _centerBoxTitleCtrl ctrlSetText (localize LSTRING(tabDefaultLoadoutsText)); + if (is3den) then { _saveButtonCtrl ctrlSetTooltip localize LSTRING(buttonSaveTooltip); }; _saveButtonCtrl ctrlEnable (is3DEN); _saveButtonCtrl ctrlCommit 0; }; @@ -62,6 +64,7 @@ switch (ctrlIDC _control) do { case IDC_buttonSharedLoadouts: { _centerBoxTitleCtrl ctrlSetText (localize LSTRING(tabSharedLoadoutsText)); + if (is3den) then { _saveButtonCtrl ctrlSetTooltip localize LSTRING(buttonSaveTooltip); }; _saveButtonCtrl ctrlEnable false; _saveButtonCtrl ctrlCommit 0; }; diff --git a/addons/arsenal/functions/fnc_onArsenalClose.sqf b/addons/arsenal/functions/fnc_onArsenalClose.sqf index f4ad7dfed8..554947df85 100644 --- a/addons/arsenal/functions/fnc_onArsenalClose.sqf +++ b/addons/arsenal/functions/fnc_onArsenalClose.sqf @@ -66,6 +66,11 @@ if (is3DEN) then { deleteVehicle GVAR(cameraHelper); camDestroy GVAR(camera); +if (!isNil QGVAR(moduleUsed)) then { + GVAR(moduleUsed) = nil; + objNull remoteControl GVAR(center); +}; + if (isMultiplayer) then { [QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(center) + "_face"] call CBA_fnc_globalEventJIP; diff --git a/addons/arsenal/functions/fnc_onArsenalOpen.sqf b/addons/arsenal/functions/fnc_onArsenalOpen.sqf index 222232b1de..9af448fd09 100644 --- a/addons/arsenal/functions/fnc_onArsenalOpen.sqf +++ b/addons/arsenal/functions/fnc_onArsenalOpen.sqf @@ -296,6 +296,10 @@ if (is3DEN) then { } else { GVAR(centerNotPlayer) = (GVAR(center) != player); + if (currentVisionMode ACE_Player == 1) then { + GVAR(center) action ["NVGogglesOff", GVAR(center)]; + }; + { private _ctrl = _display displayCtrl _x; _ctrl ctrlEnable GVAR(enableIdentityTabs); diff --git a/addons/arsenal/functions/fnc_onKeyDown.sqf b/addons/arsenal/functions/fnc_onKeyDown.sqf index a66ab3784d..0c265873eb 100644 --- a/addons/arsenal/functions/fnc_onKeyDown.sqf +++ b/addons/arsenal/functions/fnc_onKeyDown.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" #include "..\defines.hpp" -#include "\A3\ui_f\hpp\defineDIKCodes.inc" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" /* * Author: Alganthe * Handles keyboard inputs in arsenal. diff --git a/addons/arsenal/functions/fnc_onSelChangedLeft.sqf b/addons/arsenal/functions/fnc_onSelChangedLeft.sqf index acc1d12741..2322853e1a 100644 --- a/addons/arsenal/functions/fnc_onSelChangedLeft.sqf +++ b/addons/arsenal/functions/fnc_onSelChangedLeft.sqf @@ -57,7 +57,7 @@ switch (GVAR(currentLeftPanel)) do { call _fnc_clearPreviousWepMags; private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x}; - GVAR(center) addWeaponGlobal _item; + GVAR(center) addWeapon _item; GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]]; { @@ -95,7 +95,7 @@ switch (GVAR(currentLeftPanel)) do { call _fnc_clearPreviousWepMags; private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x}; - GVAR(center) addWeaponGlobal _item; + GVAR(center) addWeapon _item; GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]]; { @@ -132,7 +132,7 @@ switch (GVAR(currentLeftPanel)) do { call _fnc_clearPreviousWepMags; private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x}; - GVAR(center) addWeaponGlobal _item; + GVAR(center) addWeapon _item; GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]]; { @@ -295,7 +295,7 @@ switch (GVAR(currentLeftPanel)) do { GVAR(currentItems) set [9, _item]; } else { if ((GVAR(currentItems) select 9) != _item) then { - GVAR(center) addWeaponGlobal _item; + GVAR(center) addWeapon _item; GVAR(currentItems) set [9, _item]; call FUNC(showItem); ADDBINOCULARSMAG diff --git a/addons/arsenal/functions/fnc_scanConfig.sqf b/addons/arsenal/functions/fnc_scanConfig.sqf index 840c56d514..2bddbf4c5c 100644 --- a/addons/arsenal/functions/fnc_scanConfig.sqf +++ b/addons/arsenal/functions/fnc_scanConfig.sqf @@ -57,7 +57,7 @@ private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in va case (_itemInfoType == TYPE_HEADGEAR): { (_cargo select 3) pushBackUnique _className; }; - /* Uniform */\ + /* Uniform */ case (_itemInfoType == TYPE_UNIFORM): { (_cargo select 4) pushBackUnique _className; }; @@ -142,7 +142,8 @@ private _putList = []; switch true do { // Rifle, handgun, secondary weapons mags case ( - (getNumber (_x >> "type") in [TYPE_MAGAZINE_PRIMARY_AND_THROW,TYPE_MAGAZINE_SECONDARY_AND_PUT,1536,TYPE_MAGAZINE_HANDGUN_AND_GL]) && + ((getNumber (_x >> "type") in [TYPE_MAGAZINE_PRIMARY_AND_THROW,TYPE_MAGAZINE_SECONDARY_AND_PUT,1536,TYPE_MAGAZINE_HANDGUN_AND_GL]) || + {(getNumber (_x >> QGVAR(hide))) == -1}) && {!(_className in _grenadeList)} && {!(_className in _putList)} ): { diff --git a/addons/arsenal/functions/fnc_statBarStatement_accuracy.sqf b/addons/arsenal/functions/fnc_statBarStatement_accuracy.sqf index 141cc262ad..fa8ff55c35 100644 --- a/addons/arsenal/functions/fnc_statBarStatement_accuracy.sqf +++ b/addons/arsenal/functions/fnc_statBarStatement_accuracy.sqf @@ -18,14 +18,18 @@ params ["_stat", "_config", "_args"]; _args params ["_statMinMax", "_barLimits"]; +TRACE_4("statBarStatement_accuracy",_stat,_config,_statMinMax,_barLimits); private _fireModes = getArray (_config >> "modes"); private _dispersion = []; { - _dispersion pushBackUnique log (getNumber (_config >> _x >> "dispersion")); + private _n = log (getNumber (_config >> _x >> "dispersion")); + if (!finite _n) then {_n = 0;}; + _dispersion pushBackUnique _n; } foreach _fireModes; _dispersion sort true; +TRACE_1("",_dispersion); linearConversion [_statMinMax select 0, _statMinMax select 1, _dispersion param [0, 0], _barLimits select 0, _barLimits select 1] diff --git a/addons/arsenal/functions/fnc_statBarStatement_rateOfFIre.sqf b/addons/arsenal/functions/fnc_statBarStatement_rateOfFIre.sqf index 8e2bd5fef8..6b268a3e56 100644 --- a/addons/arsenal/functions/fnc_statBarStatement_rateOfFIre.sqf +++ b/addons/arsenal/functions/fnc_statBarStatement_rateOfFIre.sqf @@ -23,7 +23,9 @@ private _fireModes = getArray (_config >> "modes"); private _fireRate = []; { - _fireRate pushBackUnique log (getNumber (_config >> _x >> "reloadTime")); + private _n = log (getNumber (_config >> _x >> "reloadTime")); + if (!finite _n) then {_n = 0;}; + _fireRate pushBackUnique _n; } foreach _fireModes; _fireRate sort true; diff --git a/addons/arsenal/functions/fnc_statTextStatement_rateOfFire.sqf b/addons/arsenal/functions/fnc_statTextStatement_rateOfFire.sqf index 46f66fd52a..edc6fafc9b 100644 --- a/addons/arsenal/functions/fnc_statTextStatement_rateOfFire.sqf +++ b/addons/arsenal/functions/fnc_statTextStatement_rateOfFire.sqf @@ -11,7 +11,7 @@ * 2.2: Evaluate as a logarithmic number (BOOL) * * Return Value: - * Number + * String * * Public: No */ @@ -29,4 +29,5 @@ private _fireRate = []; _fireRate sort true; _fireRate = _fireRate param [0, 0]; +if (_fireRate == 0) exitWith {"PEWPEWPEW"}; format ["%1 rpm", round (60 / _fireRate)] diff --git a/addons/arsenal/functions/fnc_statTextStatement_scopeVisionMode.sqf b/addons/arsenal/functions/fnc_statTextStatement_scopeVisionMode.sqf new file mode 100644 index 0000000000..f5a29f1996 --- /dev/null +++ b/addons/arsenal/functions/fnc_statTextStatement_scopeVisionMode.sqf @@ -0,0 +1,68 @@ +#include "script_component.hpp" +/* + * Author: Dedmen + * Text statement for the scope Night vision support stat. + * + * Arguments: + * 0: not used + * 1: item config path (CONFIG) + * + * Return Value: + * String to display + * + * Public: No + */ + +params ["", "_config"]; +TRACE_1("statTextStatement_scopeVisionMode",_config); + +private _opticsModes = ("true" configClasses (_config >> "ItemInfo" >> "OpticsModes")) apply { + private _visionMode = getArray (_x >> "visionMode"); + [ + getNumber (_x >> "useModelOptics") == 1, //is in optics + _visionMode isEqualTo [], //optional NVG + "NVG" in _visionMode, //Integrated NVG + "Ti" in _visionMode //Integrated Thermal + ] +}; + +private _primaryNVGIntegrated = false; +private _primaryNVGSupported = false; +private _primaryTiIntegrated = false; +private _secondaryNVGSupported = false; + +{ + _x params ["_isPrimary", "_optionalNvg", "_integratedNVG", "_integratedTi"]; + if (_isPrimary) then { + if (_integratedNVG) then { + _primaryNVGIntegrated = true; + }; + if (_optionalNvg) then { + _primaryNVGSupported = true; + }; + if (_integratedTi) then { + _primaryTiIntegrated = true; + }; + } else { + if (_optionalNvg) then { + _secondaryNVGSupported = true; + } + } +} forEach _opticsModes; + +//Detecting Primary by useModelOptics works in 99.9% of cases. +//But on some scopes (from one specific mod) even the primary mode has useModelOptics=false +//So we have this workaround + +if ( + count _opticsModes == 1 || //If we only have a single mode. And it's a secondary, then consider it primary. + {{_x select 1} count _opticsModes == count _opticsModes} //If every mode supports it. Then then the primary also supports it +) then { + _primaryNVGSupported = _secondaryNVGSupported; +}; + +if (_primaryNVGIntegrated) exitWith {LLSTRING(statVisionMode_IntPrim)}; +if (_primaryNVGSupported) exitWith {LLSTRING(statVisionMode_supPrim)}; +if (_secondaryNVGSupported) exitWith {LLSTRING(statVisionMode_supSec)}; + +LLSTRING(statVisionMode_NoSup) diff --git a/addons/arsenal/functions/fnc_statTextStatement_smokeChemTTL.sqf b/addons/arsenal/functions/fnc_statTextStatement_smokeChemTTL.sqf new file mode 100644 index 0000000000..edbcc715ae --- /dev/null +++ b/addons/arsenal/functions/fnc_statTextStatement_smokeChemTTL.sqf @@ -0,0 +1,40 @@ +#include "script_component.hpp" +/* + * Author: Alganthe + * Text statement for the smoke / chemlight time to live stat. + * + * Arguments: + * 0: not used + * 1: item config path (CONFIG) + * + * Return Value: + * String to display + * + * Public: No + */ + +params ["", "_config"]; + +private _TTL = getNumber (configFile >> "CfgAmmo" >> getText (_config >> "ammo") >> "timeToLive"); + +if (_TTL > 3600) then { + + _TTL = _TTL / 60^2; + _TTL = str _TTL splitString "."; + + if (count _TTL > 1) then { + format [ + "%1h %2m", + parseNumber (_TTL select 0), + round (60 * parseNumber ("0." + (_TTL select 1))) + ] + } else { + format [ + "%1h", + parseNumber (_TTL select 0) + ] + }; +} else { + + format ["%1m", round (_TTL / 60)]; +}; diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index f1136cb55b..a3bd8baa04 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -100,6 +100,11 @@ 保存當前的裝備 保存当前的装备 + + [Shift+Click to save to mission defaults] + [Shift + クリック] でミッション標準として保存します + Shift + Klik aby zapisac jako domyślne dla misji + Rename Renommer @@ -604,6 +609,7 @@ ACE 아스날을 열 수 없음 無法開啟ACE虛擬軍火庫 无法开启ACE虚拟军火库 + Nie można otworzyć arsenału ACE Import BI VA loadouts to ACE Arsenal @@ -614,6 +620,7 @@ 匯入BI原廠虛擬軍火庫的裝備到ACE虛擬軍火庫中 汇入BI原厂虚拟军火库的装备到ACE虚拟军火库中 Importa l'arsenale virtuale BI nell'arsenale ACE + Importuj zestawy wyposażenia z wirtualnego arsenału BI do arsenału ACE No player unit available! Place a unit and mark it as "Player". @@ -624,6 +631,7 @@ 沒有可用的玩家單位!請擺放一個單位並設定成"玩家" 没有可用的玩家单位!请摆放一个单位并设定成"玩家"。 Non ci sono giocatori! Poisziona una unità e impostala come "Giocatore". + Brak dostępnych jednostek gracza! Postaw jednostkę i oznacz ją jako "Gracz". No loadouts to import. @@ -634,6 +642,7 @@ 沒有裝備被匯入 没有装备被汇入。 Non ci sono equipaggiamenti da importare. + Brak zestawów wyposażenia do zaimportowania. ACE Arsenal @@ -643,6 +652,7 @@ ACE虛擬軍火庫 ACE虚拟军火库 Arsenale ACE + Arsenał ACE Return to ACE Arsenal. @@ -652,24 +662,27 @@ 返回到ACE虛擬軍火庫 返回到ACE虚拟军火库。 Torna all'arsenale ACE + Wróć do arsenału ACE. Use ACE Arsenal to try out different weapons and equipment. Verwende ACE-Arsenal und sieh dir verschiedene Waffen und Ausrüstung an und probiere sie aus. - さまざまな武器と装備を試せるよう ACE 武器庫を使用します。 + 様々な武器と装備を試せるよう ACE 武器庫を使用します。 ACE Arsenal을 사용하여 다른 무기와 장비를 시험해보십시오. 使用ACE虛擬軍火庫來嘗試不同的武器與裝備 使用ACE虚拟军火库来尝试不同的武器与装备。 Usa l'arsenale ACE per provare armi ed equipaggiamenti vari. + Skorzystaj z arsenału ACE by wypróbować broń i ekwipunek. Try weapons and equipment and create your own loadouts. Probiere verschiedene Waffen und Ausrüstung aus und stelle dir eigene Ausrüstungsprofile zusammen. - さまざまな武器と装備を試して、あなただけの装備を作成してください。 + 様々な武器と装備を試して、あなただけの装備を作成してください。 무기와 장비를 사용해보고 자신의 로드아웃을 만듭니다. 嘗試不同的武器與裝備來組合你個人的裝備配置 尝试不同的武器与装备来组合你个人的装备配置。 Prova armi ed equipaggiamenti e creai i tuoi equipaggiamenti personalizzati. + Wypróbuj broń i ekwipunek i stwórz swoje własne zestawy wyposażenia. Open the loadouts screen @@ -678,6 +691,7 @@ 开启装备选单 装備画面を開く Apri la pagina degli equipaggiamenti + Otwórz ekran zestawów Export current / default loadouts @@ -686,6 +700,7 @@ 汇出当前/预设的装备 現在 / 標準装備を出力 Esporta l'equipaggiamento attuale oppure la lista degli equipaggiamenti di base + Eksportuj obecne / domyślne zestawy wyposażenia Import current / default loadouts @@ -694,6 +709,7 @@ 汇入当前/预设的装备 現在 / 標準装備を取込 Importa l'equipaggiamento attuale oppure la lista degli equipaggiamenti di base + Importuj obecne / domyślne zestawy wyposażenia Potassium levels @@ -702,6 +718,7 @@ 钾水平 鉀水平 Ilvello di potassio + Poziomy potasu Magnification @@ -719,6 +736,41 @@ 拡大倍率 Büyütme + + Nightvision Support + Nachtsicht Unterstützung + 暗視装置に対応 + Wsparcie noktowizyjne + Supporto visore notturno + + + Primary supported + Primär unterstützt + プライマリが対応 + Wspierane przez broń główną + Primario supportato + + + Secondary supported + Sekundär unterstützt + セカンダリが対応 + Wspierane przez broń drugorzędną + Secondario supportato + + + Primary integrated + Primär Integriert + プライマリに内蔵 + Zintegrowane z bronią główną + Primario integrato + + + Not Supported + Nicht unterstützt + セカンダリに内蔵 + Nie wspierane + Non supportato + Page Page @@ -726,6 +778,7 @@ 页面 頁面 Pagina + Strona Enable the faces / voices / insignias tabs @@ -734,6 +787,7 @@ 启用脸谱/声音/徽章/选项 啟用臉譜/聲音/徽章選項 Abilita volti, voci e insegne + Aktywuj zakładki twarz / głos / insygnia Empty the selected container @@ -742,6 +796,7 @@ 选择的箱子是空的 清空選擇的箱子 Svuota il contenitore selezionato + Opróżnij wybrany pojemnik Exported class name to clipboard @@ -750,6 +805,7 @@ 将种类复制到剪贴板 輸出 class name 到剪貼簿上 Copiato il nome della classe negli appunti + Wyeksportowano nazwę klasy do schowka Mode @@ -769,7 +825,7 @@ Whitelist - Biała lista + Biała lista (lista wybranych) Lista blanca Whitelist Seznam povolených @@ -786,6 +842,8 @@ Blacklist 禁止リスト + Lista Nera + Czarna lista (lista wykluczeń) Items @@ -806,6 +864,27 @@ Export current items list as an array for use in scripts スクリプト用に現在のアイテム リストをアレイで出力します + Esporta l'attuale lista di elementi come un array, per essere usati negli script + Eksportuj obecną listę przedmiotów jako tablicę do wykorzystania w skryptach + + + Import items list array from clipboard (should be the same format as export) + Zaimportuj listę przedmiotów ze schowka (lista musi być w tym samym formacie jak przy exporcie) + + + Add Compatible Items + Dodaj kompatybilne przedmioty + + + Will automatically add compatible attachments or magazines (based on selected category) for all weapons in current items list + Automatycznie doda kompatybilne dodatki oraz magazynki (odpowiednio do każdej kategorii) dla wszystkich broni na liście + + + Time to live + Durée de vie + 生存時間 + Czas by żyć + Scadenza (TTL) diff --git a/addons/arsenal/ui/RscCommon.hpp b/addons/arsenal/ui/RscCommon.hpp index 1d580c679e..f74326bcfb 100644 --- a/addons/arsenal/ui/RscCommon.hpp +++ b/addons/arsenal/ui/RscCommon.hpp @@ -266,38 +266,3 @@ class ctrlMapEmpty; class ctrlMapMain; class ctrlListNBox; class ctrlCheckboxToolbar; - -class Display3DEN { - class ContextMenu :ctrlMenu { - class Items { - class Arsenal { - items[]= {"aceArsenal", "virtualArsenal"}; - }; - class virtualArsenal { - text = "BI Virtual Arsenal"; - action= QUOTE(['arsenal'] call bis_fnc_3DENEntityMenu); - value=0; - data="Arsenal"; - opensNewWindow=1; - }; - class aceArsenal: virtualArsenal { - text = "ACE Arsenal"; - action= QUOTE(call FUNC(open3DEN)); - }; - }; - }; - class Controls { - class MenuStrip: ctrlMenuStrip { - class Items { - class Tools { - items[] += {"ACE_arsenal_portVALoadouts"}; - }; - class ACE_arsenal_portVALoadouts { - text = CSTRING(portLoadoutsText); - picture = QPATHTOEF(common,data\logo_ace3_ca.paa); - action = "call ace_arsenal_fnc_portVALoadouts;"; - }; - }; - }; - }; -}; diff --git a/addons/atragmx/CfgEventHandlers.hpp b/addons/atragmx/CfgEventHandlers.hpp index 1bd535a305..becf395052 100644 --- a/addons/atragmx/CfgEventHandlers.hpp +++ b/addons/atragmx/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; -}; \ No newline at end of file +}; diff --git a/addons/attach/CfgEventHandlers.hpp b/addons/attach/CfgEventHandlers.hpp index 73b8553839..7bb7a9bae5 100644 --- a/addons/attach/CfgEventHandlers.hpp +++ b/addons/attach/CfgEventHandlers.hpp @@ -12,7 +12,7 @@ class Extended_PreInit_EventHandlers { }; class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); + clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); }; }; class Extended_GetIn_EventHandlers { diff --git a/addons/attach/CfgVehicles.hpp b/addons/attach/CfgVehicles.hpp index 744a0db2ad..ce0d7df21a 100644 --- a/addons/attach/CfgVehicles.hpp +++ b/addons/attach/CfgVehicles.hpp @@ -77,17 +77,12 @@ class CfgVehicles { simulation = "nvmarker"; class NVGMarker { - diffuse[] = {0.006, 0.006, 0.006, 1}; - ambient[] = {0.005, 0.005, 0.005, 1}; - brightness = 0.1; + diffuse[]={0.015,0.015,0.015}; + ambient[]={0.001,0.001,0.001}; + brightness=0.45; name = "pozicni blik"; - drawLightSize = 0.1; - drawLightCenterSize = 0.003; activeLight = 0; blinking=1; - blinkingStartsOn=1; - blinkingPattern[] = {2,2}; - blinkingPatternGuarantee = false; dayLight = 0; onlyInNvg = 1; useFlare = 0; diff --git a/addons/attach/data/ace_IRStrobe.rvmat b/addons/attach/data/ace_irstrobe.rvmat similarity index 100% rename from addons/attach/data/ace_IRStrobe.rvmat rename to addons/attach/data/ace_irstrobe.rvmat diff --git a/addons/attach/data/ace_IRStrobe_co.paa b/addons/attach/data/ace_irstrobe_co.paa similarity index 100% rename from addons/attach/data/ace_IRStrobe_co.paa rename to addons/attach/data/ace_irstrobe_co.paa diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 04a93d53a6..252f25e4ed 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/ballistics/ACE_Arsenal_Stats.hpp b/addons/ballistics/ACE_Arsenal_Stats.hpp index 620c0fb2bc..34a8b561e5 100644 --- a/addons/ballistics/ACE_Arsenal_Stats.hpp +++ b/addons/ballistics/ACE_Arsenal_Stats.hpp @@ -53,7 +53,7 @@ class EGVAR(arsenal,stats) { stats[] = {"initSpeed"}; displayName= CSTRING(statMuzzleVelocity); showText= 1; - textStatement = QUOTE(params[ARR_2('_stat', '_config')]; private _initSpeed = getNumber (_config >> _stat select 0); format [ARR_3('%1 m/s (%2 ft/s)', _initSpeed, (_initSpeed * 3.28084) toFixed 0)]); + textStatement = QUOTE([ARR_2(_this select 0, _this select 1)] call FUNC(statTextStatement_magazineMuzzleVelocity)); condition = QUOTE(getNumber (_this select 1 >> (_this select 0) select 0) > 0); tabs[] = {{}, {4}}; }; diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 5b25f70f71..b6ad5d8832 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -603,6 +603,17 @@ class CfgAmmo { ACE_muzzleVelocities[]={510, 550, 596}; ACE_barrelLengths[]={304.8, 406.4, 609.6}; }; + class B_570x28_Ball: BulletBase { + ACE_caliber = 5.7; + ACE_bulletLength = 21.6; // http://blog.thejustnation.org/2011/04/5-7x28mm-ammo-review/ + ACE_bulletMass = 2; // based on the SS190 + ACE_ballisticCoefficients[] = {0.177}; //http://m.delphiforums.com/autogun/messages/5267/7 + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; // 50/50 chance to get it right + ACE_dragModel = 7; + ACE_muzzleVelocities[] = {716,776}; + ACE_barrelLengths[] = {264,407}; + }; class B_19mm_HE: BulletBase { tracerScale = 1; }; diff --git a/addons/ballistics/CfgMagazineWells.hpp b/addons/ballistics/CfgMagazineWells.hpp new file mode 100644 index 0000000000..39098f4c28 --- /dev/null +++ b/addons/ballistics/CfgMagazineWells.hpp @@ -0,0 +1,190 @@ +class CfgMagazineWells { + + class CBA_65x39_MX { + ADDON[] = { + "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim", + "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" + }; + }; + class CBA_65x39_MX_XL { + ADDON[] = { + "ACE_100Rnd_65x39_caseless_mag_Tracer_Dim" + }; + }; + class CBA_65x39_Mk200 { + ADDON[] = { + "ACE_200Rnd_65x39_cased_Box_Tracer_Dim" + }; + }; + + class CBA_556x45_STANAG { + ADDON[] = { + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", + "ACE_30Rnd_556x45_Stanag_Mk262_mag", + "ACE_30Rnd_556x45_Stanag_Mk318_mag", + "ACE_30Rnd_556x45_Stanag_Tracer_Dim" + }; + }; + class STANAG_556x45 { //Vanilla magwell + ADDON[] = { + "ACE_30Rnd_556x45_Stanag_M995_AP_mag", + "ACE_30Rnd_556x45_Stanag_Mk262_mag", + "ACE_30Rnd_556x45_Stanag_Mk318_mag", + "ACE_30Rnd_556x45_Stanag_Tracer_Dim" + }; + }; + + class CBA_762x51_M14 { + ADDON[] = { + "ACE_20Rnd_762x51_Mag_Tracer", + "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mag_SD", + "ACE_10Rnd_762x51_M118LR_Mag", + "ACE_10Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_10Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_10Rnd_762x51_M993_AP_Mag", + "ACE_20Rnd_762x51_M118LR_Mag", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag" + }; + }; + class CBA_762x51_HK417 { + ADDON[] = { + "ACE_20Rnd_762x51_Mag_Tracer", + "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mag_SD", + "ACE_10Rnd_762x51_M118LR_Mag", + "ACE_10Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_10Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_10Rnd_762x51_M993_AP_Mag", + "ACE_20Rnd_762x51_M118LR_Mag", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag" + }; + }; + class CBA_762x51_SR25 { + ADDON[] = { + "ACE_20Rnd_762x51_Mag_Tracer", + "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mag_SD", + "ACE_10Rnd_762x51_M118LR_Mag", + "ACE_10Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_10Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_10Rnd_762x51_M993_AP_Mag", + "ACE_20Rnd_762x51_M118LR_Mag", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag" + }; + }; + class CBA_762x51_G3 { + ADDON[] = { + "ACE_20Rnd_762x51_Mag_Tracer", + "ACE_20Rnd_762x51_Mag_Tracer_Dim", + "ACE_20Rnd_762x51_Mag_SD", + "ACE_10Rnd_762x51_M118LR_Mag", + "ACE_10Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_10Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_10Rnd_762x51_M993_AP_Mag", + "ACE_20Rnd_762x51_M118LR_Mag", + "ACE_20Rnd_762x51_Mk316_Mod_0_Mag", + "ACE_20Rnd_762x51_Mk319_Mod_0_Mag", + "ACE_20Rnd_762x51_M993_AP_Mag" + }; + }; + +//Missing in CBA +//ACE_20Rnd_762x67_Mk248_Mod_0_Mag +//ACE_20Rnd_762x67_Mk248_Mod_1_Mag +//ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag + + class CBA_65C_AR10 { + ADDON[] = { + "ACE_30Rnd_65_Creedmor_mag", + "ACE_20Rnd_65_Creedmor_mag", + "ACE_30Rnd_65x47_Scenar_mag", + "ACE_20Rnd_65x47_Scenar_mag" + }; + }; + + class CBA_338LM_AI { //338 Lapua Magnum Accuracy International + ADDON[] = { + "ACE_10Rnd_338_300gr_HPBT_Mag", + "ACE_10Rnd_338_API526_Mag" + }; + }; + + class CBA_408CT_Inter { + ADDON[] = { + "ACE_7Rnd_408_305gr_Mag" + }; + }; + + class CBA_50BMG_M107 { + ADDON[] = { + "ACE_5Rnd_127x99_Mag", + "ACE_5Rnd_127x99_API_Mag", + "ACE_5Rnd_127x99_AMAX_Mag" + }; + }; + + class CBA_9x19_P226 { // SIG P226 + ADDON[] = { + "ACE_16Rnd_9x19_mag" + }; + }; + class CBA_9x19_P228 { // SIG P228 + ADDON[] = { + "ACE_16Rnd_9x19_mag" + }; + }; + class CBA_9x19_P239 { // SIG P239 + ADDON[] = { + "ACE_16Rnd_9x19_mag" + }; + }; + class CBA_9x19_HiPower { + ADDON[] = { + "ACE_16Rnd_9x19_mag" + }; + }; + + class SVD_762x54R { //Vanilla + ADDON[] = { + "ACE_10Rnd_762x54_Tracer_mag" + }; + }; + class CBA_762x54R_SVD { + ADDON[] = { + "ACE_10Rnd_762x54_Tracer_mag" + }; + }; + class CBA_762x54R_Mosin { + ADDON[] = { + "ACE_10Rnd_762x54_Tracer_mag" + }; + }; + class CBA_762x54R_SVT { + ADDON[] = { + "ACE_10Rnd_762x54_Tracer_mag" + }; + }; + class CBA_762x54R_DPM { + ADDON[] = { + "ACE_10Rnd_762x54_Tracer_mag" + }; + }; + class CBA_762x54R_DT { + ADDON[] = { + "ACE_10Rnd_762x54_Tracer_mag" + }; + }; + class CBA_762x54R_Maxim { + ADDON[] = { + "ACE_10Rnd_762x54_Tracer_mag" + }; + }; + +}; diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index a2a0e0ff1d..a4b3218a93 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -28,6 +28,8 @@ class CfgWeapons { // MX class arifle_MX_Base_F: Rifle_Base_F { + magazineWell[] = {"CBA_65x39_MX", "CBA_65x39_MX_XL"}; + class Single: Mode_SemiAuto { dispersion = MOA_TO_RAD(0.90); }; @@ -58,7 +60,7 @@ class CfgWeapons { dispersion = MOA_TO_RAD(1.12); }; }; - + // F2000 class mk20_base_F: Rifle_Base_F { class Single: Mode_SemiAuto { @@ -70,6 +72,18 @@ class CfgWeapons { }; }; + // P90 (1.86) + class SMG_03_TR_BASE: Rifle_Base_F { + ACE_barrelTwist = 228.6; // 1:9 inch twist + ACE_barrelLength = 407; + ACE_twistDirection = 1; + modes[] = {"Single"}; + }; + class SMG_03C_BASE: SMG_03_TR_BASE { + ACE_barrelLength = 264; + modes[] = {"Single", "FullAuto"}; + }; + // Noreen "Bad News" ULR class DMR_02_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { @@ -116,7 +130,7 @@ class CfgWeapons { dispersion = MOA_TO_RAD(1.0); }; }; - + // Cyrus class DMR_05_base_F: Rifle_Long_Base_F { class Single: Mode_SemiAuto { diff --git a/addons/ballistics/XEH_PREP.hpp b/addons/ballistics/XEH_PREP.hpp index 812a51e6f6..c370b5fe1f 100644 --- a/addons/ballistics/XEH_PREP.hpp +++ b/addons/ballistics/XEH_PREP.hpp @@ -1 +1,2 @@ PREP(statTextStatement_weaponMuzzleVelocity); +PREP(statTextStatement_magazineMuzzleVelocity); diff --git a/addons/ballistics/config.cpp b/addons/ballistics/config.cpp index 0dc8289901..e78fb8f27f 100644 --- a/addons/ballistics/config.cpp +++ b/addons/ballistics/config.cpp @@ -17,6 +17,7 @@ class CfgPatches { #include "CfgEventHandlers.hpp" #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" +#include "CfgMagazineWells.hpp" #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" #include "ACE_Arsenal_Stats.hpp" diff --git a/addons/ballistics/functions/fnc_statTextStatement_magazineMuzzleVelocity.sqf b/addons/ballistics/functions/fnc_statTextStatement_magazineMuzzleVelocity.sqf new file mode 100644 index 0000000000..73f671343a --- /dev/null +++ b/addons/ballistics/functions/fnc_statTextStatement_magazineMuzzleVelocity.sqf @@ -0,0 +1,48 @@ +#include "script_component.hpp" +/* + * Author: Alganthe + * Text statement for the magazine ammo muzzle velocity stat. + * + * Arguments: + * 0: Type what it is here (unused) + * 1: Item config path + * + * Return Value: + * Display text + * + * Public: No +*/ + +params ["", "_config"]; + +if (EGVAR(arsenal,currentLeftPanel) == 2002) then { + private _primaryMag = primaryWeaponMagazine EGVAR(arsenal,center); + + [primaryWeapon EGVAR(arsenal,center), configName _config] +} else { + private _primaryMag = handgunMagazine EGVAR(arsenal,center); + + [handgunWeapon EGVAR(arsenal,center), configName _config] +} params ["_weapon", "_magazine"]; + +if (_magazine isEqualTo "") then { + localize "str_empty"; +} else { + private _weaponCfg = configFile >> "CfgWeapons" >> _weapon; + private _ammoCfg = (configFile >> "CfgAmmo" >> (getText (configFile >> "CfgMagazines" >> _magazine >> "ammo"))); + private _barrelLength = getNumber (_weaponCfg >> "ACE_barrelLength"); + private _muzzleVelocityTable = getArray (_ammoCfg >> "ACE_muzzleVelocities"); + private _barrelLengthTable = getArray (_ammoCfg >> "ACE_barrelLengths"); + + if (_barrelLength != 0 && {count _muzzleVelocityTable > 0} && {count _barrelLengthTable > 0}) then { + private _muzzleVelocity = if (["ace_advanced_ballistics"] call EFUNC(common,isModLoaded)) then { + [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift); + } else { + getNumber (_config >> "initSpeed") + }; + + format ["%1 m/s (%2 ft/s)", _muzzleVelocity toFixed 0, (_muzzleVelocity * 3.28084) toFixed 0] + } else { + localize "str_empty"; + }; +}; diff --git a/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf b/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf index 4d0f04b209..227af9158d 100644 --- a/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf +++ b/addons/ballistics/functions/fnc_statTextStatement_weaponMuzzleVelocity.sqf @@ -1,14 +1,14 @@ #include "script_component.hpp" /* * Author: Alganthe - * Text statement for the weapon muzzle velocity stat + * Text statement for the weapon muzzle velocity stat. * * Arguments: - * 0: Not used - * 1: item config path (CONFIG) + * 0: Type what it is here (unused) + * 1: Item config path * * Return Value: - * String to display + * Display text * * Public: No */ @@ -34,7 +34,11 @@ if (_magazine isEqualTo "") then { private _barrelLengthTable = getArray (_ammoCfg >> "ACE_barrelLengths"); if (_barrelLength != 0 && {count _muzzleVelocityTable > 0} && {count _barrelLengthTable > 0}) then { - private _muzzleVelocity = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift); + private _muzzleVelocity = if (["ace_advanced_ballistics"] call EFUNC(common,isModLoaded)) then { + [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift); + } else { + getNumber (configFile >> "CfgMagazines" >> _magazine >> "initSpeed") + }; format ["%1 m/s (%2 ft/s)", _muzzleVelocity toFixed 0, (_muzzleVelocity * 3.28084) toFixed 0] } else { diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index dbb54bf44a..bbd6e4ddd9 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -2286,6 +2286,8 @@ 銃身の転度 膛线缠距 膛線扭度 + Rigatura della canna + Gwintowanie lufy Barrel length @@ -2293,6 +2295,8 @@ 銃身長 身管长度 槍管長度 + Lunghezza della canna + Długość lufy Ballistic coefficient @@ -2300,6 +2304,8 @@ 弾道係数 弹道系数 彈道係數 + Coefficente balistico + Współczynnik balistyczny Bullet mass @@ -2307,6 +2313,8 @@ 弾丸重量 弹头重量 彈頭重量 + Massa del proiettile + Masa pocisku Muzzle velocity @@ -2314,6 +2322,8 @@ 銃口初速 枪口初速 槍口初速 + Velocità iniziale + Prędkość wylotowa diff --git a/addons/captives/XEH_PREP.hpp b/addons/captives/XEH_PREP.hpp index bf0b06a1db..6157a1e33e 100644 --- a/addons/captives/XEH_PREP.hpp +++ b/addons/captives/XEH_PREP.hpp @@ -1,7 +1,6 @@ PREP(addLoadCaptiveActions); PREP(canApplyHandcuffs); PREP(canEscortCaptive); -PREP(canFriskPerson); PREP(canLoadCaptive); PREP(canRemoveHandcuffs); PREP(canStopEscorting); @@ -9,7 +8,6 @@ PREP(canSurrender); PREP(canUnloadCaptive); PREP(doApplyHandcuffs); PREP(doEscortCaptive); -PREP(doFriskPerson); PREP(doLoadCaptive); PREP(doRemoveHandcuffs); PREP(doUnloadCaptive); diff --git a/addons/captives/XEH_postInit.sqf b/addons/captives/XEH_postInit.sqf index 70d708ced2..6adfef9dea 100644 --- a/addons/captives/XEH_postInit.sqf +++ b/addons/captives/XEH_postInit.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" -#include "\a3\editor_f\Data\Scripts\dikCodes.h" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" ["ace_settingsInitialized", { // Hold on a little bit longer to ensure anims will work @@ -44,7 +44,7 @@ if (!hasInterface) exitWith {}; if ((_target distance ACE_player) > getNumber (configFile >> "CfgVehicles" >> "CAManBase" >> "ACE_Actions" >> "ACE_ApplyHandcuffs" >> "distance")) exitWith {false}; if ([ACE_player, _target] call FUNC(canApplyHandcuffs)) exitWith { - [QGVAR(setHandcuffed), [_target, true], _target] call CBA_fnc_targetEvent; + [ACE_player, _target] call FUNC(doApplyHandcuffs); true }; false diff --git a/addons/captives/config.cpp b/addons/captives/config.cpp index e9055e896a..0b8dae014a 100644 --- a/addons/captives/config.cpp +++ b/addons/captives/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { units[] = {QGVAR(ModuleSettings), QGVAR(ModuleSurrender), QGVAR(ModuleHandcuffed)}; weapons[] = {"ACE_CableTie"}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ACE_Interaction"}; + requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); authors[] = {"commy2", "KoffeinFlummi"}; url = ECSTRING(main,URL); diff --git a/addons/captives/functions/fnc_canFriskPerson.sqf b/addons/captives/functions/fnc_canFriskPerson.sqf deleted file mode 100644 index c086afa0c7..0000000000 --- a/addons/captives/functions/fnc_canFriskPerson.sqf +++ /dev/null @@ -1,24 +0,0 @@ -#include "script_component.hpp" -/* - * Author: bux578 - * Checks the conditions for being able to frisk a unit - * - * Arguments: - * 0: caller (player) - * 1: target - * - * Return Value: - * The return value - * - * Example: - * [player, bob] call ACE_captives_fnc_canFriskPerson - * - * Public: No - */ - -params ["_unit", "_target"]; - -_target getVariable [QGVAR(isHandcuffed), false] -|| {_target getVariable [QGVAR(isSurrendering), false]} -|| {_target getVariable ["ACE_isSearchable", false]} -|| {_target getVariable ["ACE_isUnconscious", false]} diff --git a/addons/captives/functions/fnc_doFriskPerson.sqf b/addons/captives/functions/fnc_doFriskPerson.sqf deleted file mode 100644 index 58e7131e72..0000000000 --- a/addons/captives/functions/fnc_doFriskPerson.sqf +++ /dev/null @@ -1,67 +0,0 @@ -#include "script_component.hpp" -/* - * Author: bux578 - * Open the select menu with the "personal" items of a frisked unit. It only shows "handgunWeapon", "uniformItems", "vestItems", "backpackItems" and "assignedItems" because every other item is visible on the character - * - * Arguments: - * 0: player unit - * 1: unit - * - * Return Value: - * None - * - * Example: - * [player, bob] call ACE_captives_fnc_doFristPerson; - * - * Public: No - */ - -params ["_player", "_unit"]; - -private _weapon = currentWeapon _player; -if (_weapon == primaryWeapon _player && {_weapon != ""}) then { - [_player, "AmovPercMstpSlowWrflDnon", 0] call EFUNC(common,doAnimation); -}; - -private _listedItemClasses = []; - -private _actions = [localize LSTRING(FriskMenuHeader), ""] call ACE_Interaction_fnc_prepareSelectMenu; - -private _allGear = []; - -if ((handgunWeapon _unit) != "") then { - _allGear pushBack (handgunWeapon _unit); -}; -if (count (uniformItems _unit) > 0) then { - _allGear = _allGear + (uniformItems _unit); -}; -if (count (vestItems _unit) > 0) then { - _allGear = _allGear + (vestItems _unit); -}; -if (count (backpackItems _unit) > 0) then { - _allGear = _allGear + (backpackItems _unit); -}; -if (count (assignedItems _unit) > 0) then { - _allGear = _allGear + (assignedItems _unit); -}; - -// Handgun -// Uniform Items -// Vest Items -// Backpack Items -// Assigned Items -{ - if (!(_x in _listedItemClasses)) then { - private _item = configFile >> "CfgMagazines" >> _x; - if (isNil "_item" || str _item == "") then { //str _item ? - _item = configFile >> "CfgWeapons" >> _x; - }; - _actions = [_actions, getText(_item >> "displayName"), getText(_item >> "picture"), _x] call ACE_Interaction_fnc_addSelectableItem; - _listedItemClasses pushBack _x; - }; -} forEach (_allGear); - -[_actions, {call ACE_Interaction_fnc_hideMenu;}, {call ACE_Interaction_fnc_hideMenu;}] call ACE_Interaction_fnc_openSelectMenu; - -// don't need an "Ok" Button -ctrlShow [8860, false]; diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index f5d76f43e9..5683d9b5f4 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,7 @@ 俘虏 捕虜 포로설정 + Jeńcy Take Prisoner @@ -154,38 +155,6 @@ 束線帶可以綁住俘虜 束线带可以绑住俘虏 - - Inventory of frisked person - Inventar der durchsuchten Person - Inventaire de la personne fouillé - Inventario de la persona cacheada - Motozott személy felszerelése - Inventář prohledávané osoby - Ekwipunek rewidowanej osoby - Инвентарь обысканного человека - Inventário da pessoa revistada - Inventario della persona perquisita - 捕虜の持ち物を確認する - 검문당한 사람의 소지품 - 搜身選單 - 搜身选单 - - - Frisk person - Person durchsuchen - Fouiller la personne - Cachear - Prohledávaná osoba - Rewiduj osobę - Motozás - Обыскать человека - Revistar - Perquisisci la persona - 捕虜の持ち物 - 검문당한사람 - 搜身 - 搜身 - Surrender Se rendre @@ -444,6 +413,7 @@ 設置在游標下的單位成俘虜狀態 设置在游标下的单位成俘虏状态。 커서의 병력을 포박합니다. + Ustawia jednostkę pod kursorem jako jeniec. Require AI surrendering @@ -453,6 +423,7 @@ 需要AI先行投降 需要AI先行投降 AI 항복 필요 + Wymaga poddania się przez SI Require AI to surrender before they can be arrested @@ -462,6 +433,7 @@ 在逮捕AI之前該AI必須先進入投降狀態 在逮捕AI之前该AI必须先进入投降状态。 포박하기 전에 먼저 AI가 투항해야만 합니다. + Wymaga poddania się przez SI zanim aresztowanie będzie możliwe diff --git a/addons/cargo/XEH_postInit.sqf b/addons/cargo/XEH_postInit.sqf index 829991ee87..1df7733aea 100644 --- a/addons/cargo/XEH_postInit.sqf +++ b/addons/cargo/XEH_postInit.sqf @@ -94,58 +94,35 @@ GVAR(objectAction) = [ {locked _target < 2} && {alive _target} && {[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} && - {0 < { - private _type = typeOf _x; - private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false]; - private _hasCargoConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) == 1; - (_hasCargoPublic || _hasCargoConfig) && {_x != _target} && - {([_target, _x] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} - } count (nearestObjects [_player, GVAR(cargoHolderTypes), (MAX_LOAD_DISTANCE + 10)])} + {((nearestObjects [_target, GVAR(cargoHolderTypes), (MAX_LOAD_DISTANCE + 10)]) findIf { + private _hasCargoConfig = 1 == getNumber (configFile >> "CfgVehicles" >> typeOf _x >> QGVAR(hasCargo)); + private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false]; + (_hasCargoConfig || {_hasCargoPublic}) && {_x != _target} && {alive _x} && {locked _x < 2} && + {([_target, _x] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} + }) > -1} }, LINKFUNC(addCargoVehiclesActions) ] call EFUNC(interact_menu,createAction); +// find all remaining configured classes and init them, see XEH_preStart.sqf +private _vehicleClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedVehicleClasses), {[]}]); +{ + [_x, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToClass); +} forEach _vehicleClassesAddAction; +GVAR(initializedVehicleClasses) append _vehicleClassesAddAction; -private _initVehicleClasses = ["ThingX", "LandVehicle", "Air", "Ship_F"]; -private _initObjectClasses = ["ThingX", "StaticWeapon"]; +private _objectClassesAddAction = call (uiNamespace getVariable [QGVAR(initializedItemClasses), {[]}]); +{ + [_x, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass); +} forEach _objectClassesAddAction; +GVAR(initializedItemClasses) append _objectClassesAddAction; + +private _vehicleClassesAddClassEH = call (uiNamespace getVariable [QGVAR(vehicleClasses_classEH), {[]}]); { [_x, "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler; -} forEach _initVehicleClasses; +} forEach _vehicleClassesAddClassEH; + +private _objectClassesAddClassEH = call (uiNamespace getVariable [QGVAR(objectClasses_classEH), {[]}]); { [_x, "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler; -} forEach _initObjectClasses; - -// find all remaining configured classes and init them -{ - private _class = configName _x; - // init vehicle - if ( - 1 == getNumber (_x >> QGVAR(hasCargo)) - && {{if (_class isKindOf _x) exitWith {false}; true} forEach _initVehicleClasses} - ) then { - if (_class isKindOf "Static") then { - if (2 == getNumber (_x >> "scope")) then { - [_class, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToClass); - GVAR(initializedVehicleClasses) pushBack _class; - }; - } else { - [_class, "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler; - _initVehicleClasses pushBack _class; - }; - }; - // init object - if ( - 1 == getNumber (_x >> QGVAR(canLoad)) - && {{if (_class isKindOf _x) exitWith {false}; true} forEach _initObjectClasses} - ) then { - if (_class isKindOf "Static") then { - if (2 == getNumber (_x >> "scope")) then { - [_class, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass); - GVAR(initializedItemClasses) pushBack _class; - }; - } else { - [_class, "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler; - _initObjectClasses pushBack _class; - }; - }; -} forEach ("true" configClasses (configFile >> "CfgVehicles")); +} forEach _objectClassesAddClassEH; diff --git a/addons/cargo/XEH_preStart.sqf b/addons/cargo/XEH_preStart.sqf index 022888575e..e7b3f5c59b 100644 --- a/addons/cargo/XEH_preStart.sqf +++ b/addons/cargo/XEH_preStart.sqf @@ -1,3 +1,49 @@ #include "script_component.hpp" #include "XEH_PREP.hpp" + + +//See XEH_postInit.sqf +private _vehicleClasses_addClassEH = ["ThingX", "LandVehicle", "Air", "Ship_F"]; +private _objectClasses_addClassEH = ["ThingX", "StaticWeapon"]; +private _vehicleClasses_addAction = []; +private _itemClasses_addAction = []; + +// find all remaining configured classes and init them +{ + private _class = configName _x; + // init vehicle + if ( + 1 == getNumber (_x >> QGVAR(hasCargo)) + && {-1 == _vehicleClasses_addClassEH findIf {_class isKindOf _x}} + ) then { + if (_class isKindOf "Static") then { + if (2 == getNumber (_x >> "scope")) then { + _vehicleClasses_addAction pushBackUnique _class; + }; + } else { + _vehicleClasses_addClassEH pushBackUnique _class; + }; + }; + // init object + if ( + 1 == getNumber (_x >> QGVAR(canLoad)) + && {-1 == _objectClasses_addClassEH findIf {_class isKindOf _x}} + ) then { + if (_class isKindOf "Static") then { + if (2 == getNumber (_x >> "scope")) then { + _itemClasses_addAction pushBackUnique _class; + }; + } else { + _objectClasses_addClassEH pushBackUnique _class; + }; + }; +} forEach ("true" configClasses (configFile >> "CfgVehicles")); + + +uiNamespace setVariable [QGVAR(vehicleClasses_classEH), compileFinal str _vehicleClasses_addClassEH]; +uiNamespace setVariable [QGVAR(objectClasses_classEH), compileFinal str _objectClasses_addClassEH]; +uiNamespace setVariable [QGVAR(initializedVehicleClasses), compileFinal str _vehicleClasses_addAction]; +uiNamespace setVariable [QGVAR(initializedItemClasses), compileFinal str _itemClasses_addAction]; + +TRACE_4("compiled",count _vehicleClasses_addClassEH,count _objectClasses_addClassEH,count _vehicleClasses_addAction,count _itemClasses_addAction); diff --git a/addons/cargo/functions/fnc_addCargoVehiclesActions.sqf b/addons/cargo/functions/fnc_addCargoVehiclesActions.sqf index ab362e63f4..d3a66794db 100644 --- a/addons/cargo/functions/fnc_addCargoVehiclesActions.sqf +++ b/addons/cargo/functions/fnc_addCargoVehiclesActions.sqf @@ -25,7 +25,7 @@ private _statement = { private _vehicles = (nearestObjects [_target, GVAR(cargoHolderTypes), (MAX_LOAD_DISTANCE + 10)]) select { private _hasCargoConfig = 1 == getNumber (configFile >> "CfgVehicles" >> typeOf _x >> QGVAR(hasCargo)); private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false]; - (_hasCargoConfig || {_hasCargoPublic}) && {_x != _target} && + (_hasCargoConfig || {_hasCargoPublic}) && {_x != _target} && {alive _x} && {locked _x < 2} && {([_target, _x] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} }; diff --git a/addons/cargo/functions/fnc_canLoadItemIn.sqf b/addons/cargo/functions/fnc_canLoadItemIn.sqf index 0d4508377c..f7bc696d35 100644 --- a/addons/cargo/functions/fnc_canLoadItemIn.sqf +++ b/addons/cargo/functions/fnc_canLoadItemIn.sqf @@ -6,7 +6,7 @@ * Arguments: * 0: Item * 1: Holder Object (Vehicle) - * 2: Ignore interaction distance + * 2: Ignore interaction distance and stability checks * * Return Value: * Can load in @@ -19,7 +19,7 @@ params [["_item", "", [objNull,""]], "_vehicle", ["_ignoreInteraction", false]]; -if (speed _vehicle > 1 || {((getPos _vehicle) select 2) > 3}) exitWith {TRACE_1("vehicle not stable",_vehicle); false}; +if ((!_ignoreInteraction) && {speed _vehicle > 1 || {((getPos _vehicle) select 2) > 3}}) exitWith {TRACE_1("vehicle not stable",_vehicle); false}; if (_item isEqualType objNull && {{alive _x && {getText (configFile >> "CfgVehicles" >> typeOf _x >> "simulation") != "UAVPilot"}} count crew _item > 0}) exitWith { TRACE_1("item is occupied",_item); diff --git a/addons/cargo/functions/fnc_loadItem.sqf b/addons/cargo/functions/fnc_loadItem.sqf index a04182064e..73056ef43f 100644 --- a/addons/cargo/functions/fnc_loadItem.sqf +++ b/addons/cargo/functions/fnc_loadItem.sqf @@ -7,7 +7,7 @@ * Arguments: * 0: Item * 1: Vehicle - * 2: Ignore interaction distance + * 2: Ignore interaction distance and stability checks * * Return Value: * Object loaded diff --git a/addons/cargo/functions/fnc_paradropItem.sqf b/addons/cargo/functions/fnc_paradropItem.sqf index 961b2f7c36..2f9ae06336 100644 --- a/addons/cargo/functions/fnc_paradropItem.sqf +++ b/addons/cargo/functions/fnc_paradropItem.sqf @@ -6,6 +6,7 @@ * Arguments: * 0: Object * 1: Vehicle + * 2: Show Hint (default: true) * * Return Value: * Object unloaded @@ -16,7 +17,7 @@ * Public: No */ -params ["_item", "_vehicle"]; +params ["_item", "_vehicle", ["_showHint", true]]; TRACE_2("params",_item,_vehicle); private _loaded = _vehicle getVariable [QGVAR(loaded), []]; @@ -90,14 +91,16 @@ _itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vecto }, 1, [_itemObject]] call CBA_fnc_addPerFrameHandler; -[ +if (_showHint) then { [ - LSTRING(UnloadedItem), - getText (configFile >> "CfgVehicles" >> typeOf _itemObject >> "displayName"), - getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName") - ], - 3 -] call EFUNC(common,displayTextStructured); + [ + LSTRING(UnloadedItem), + getText (configFile >> "CfgVehicles" >> typeOf _itemObject >> "displayName"), + getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName") + ], + 3 + ] call EFUNC(common,displayTextStructured); +}; // Invoke listenable event ["ace_cargoUnloaded", [_item, _vehicle, "paradrop"]] call CBA_fnc_globalEvent; diff --git a/addons/cargo/functions/fnc_startLoadIn.sqf b/addons/cargo/functions/fnc_startLoadIn.sqf index 178d2fff25..7cc7923696 100644 --- a/addons/cargo/functions/fnc_startLoadIn.sqf +++ b/addons/cargo/functions/fnc_startLoadIn.sqf @@ -39,22 +39,30 @@ if ([_object, _vehicle] call FUNC(canLoadItemIn)) then { private _size = [_object] call FUNC(getSizeItem); [ - 5 * _size, + GVAR(loadTimeCoefficient) * _size, [_object, _vehicle], { + TRACE_1("load finish",_this); [objNull, _this select 0 select 0, true] call EFUNC(common,claim); ["ace_loadCargo", _this select 0] call CBA_fnc_localEvent; }, - {[objNull, _this select 0 select 0, true] call EFUNC(common,claim)}, + { + TRACE_1("load fail",_this); + [objNull, _this select 0 select 0, true] call EFUNC(common,claim) + }, localize LSTRING(LoadingItem), - {true}, + { + (_this select 0) params ["_item", "_target"]; + (alive _target) && {locked _target < 2} && {alive _item} + && {([_item, _target] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} + }, ["isNotSwimming"] ] call EFUNC(common,progressBar); _return = true; } else { private _displayName = getText (configFile >> "CfgVehicles" >> typeOf _object >> "displayName"); - [[LSTRING(LoadingFailed), _displayName], 3.0] call EFUNC(common,displayTextStructured); + [[LSTRING(LoadingFailed), _displayName], 3] call EFUNC(common,displayTextStructured); }; _return diff --git a/addons/cargo/functions/fnc_startUnload.sqf b/addons/cargo/functions/fnc_startUnload.sqf index eedf3b2efa..5e7ada82c5 100644 --- a/addons/cargo/functions/fnc_startUnload.sqf +++ b/addons/cargo/functions/fnc_startUnload.sqf @@ -70,17 +70,24 @@ if ([_item, GVAR(interactionVehicle), ACE_player] call FUNC(canUnloadItem)) then private _size = [_item] call FUNC(getSizeItem); [ - 5 * _size, + GVAR(loadTimeCoefficient) * _size, [_item, GVAR(interactionVehicle), ACE_player], - {["ace_unloadCargo", _this select 0] call CBA_fnc_localEvent}, - {}, + {TRACE_1("unload finish",_this); ["ace_unloadCargo", _this select 0] call CBA_fnc_localEvent}, + {TRACE_1("unload fail",_this);}, localize LSTRING(UnloadingItem), - {true}, + { + (_this select 0) params ["_item", "_target", "_player"]; + + (alive _target) + && {locked _target < 2} + && {([_player, _target] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} + && {_item in (_target getVariable [QGVAR(loaded), []])} + }, ["isNotSwimming"] ] call EFUNC(common,progressBar); } else { private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item}; private _displayName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName"); - [[LSTRING(UnloadingFailed), _displayName], 3.0] call EFUNC(common,displayTextStructured); + [[LSTRING(UnloadingFailed), _displayName], 3] call EFUNC(common,displayTextStructured); }; diff --git a/addons/cargo/initSettings.sqf b/addons/cargo/initSettings.sqf index 3a9f70070a..cbf0a121e5 100644 --- a/addons/cargo/initSettings.sqf +++ b/addons/cargo/initSettings.sqf @@ -1,19 +1,26 @@ -// CBA Settings [ADDON: ace_cargo]: - [ QGVAR(enable), "CHECKBOX", [LSTRING(ModuleSettings_enable), LSTRING(ModuleSettings_enable_Description)], - [localize ELSTRING(OptionsMenu,CategoryLogistics), localize LSTRING(openMenu)], - true, // default value - true, // isGlobal + [LELSTRING(OptionsMenu,CategoryLogistics), LLSTRING(openMenu)], + true, + true, {[QGVAR(enable), _this] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_settings_fnc_init; +[ + QGVAR(loadTimeCoefficient), "SLIDER", + [LSTRING(loadTimeCoefficient), LSTRING(loadTimeCoefficient_description)], + [LELSTRING(OptionsMenu,CategoryLogistics), LLSTRING(openMenu)], + [0, 10, 5, 1], + true, + {[QGVAR(loadTimeCoefficient), _this, true] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_settings_fnc_init; + [ QGVAR(paradropTimeCoefficent), "SLIDER", [LSTRING(paradropTimeCoefficent), LSTRING(paradropTimeCoefficent_description)], - [localize ELSTRING(OptionsMenu,CategoryLogistics), localize LSTRING(openMenu)], - [0,10,2.5,1], // [min, max, default value, trailing decimals (-1 for whole numbers only)] - true, // isGlobal - {[QGVAR(paradropTimeCoefficent), _this] call EFUNC(common,cbaSettings_settingChanged)} + [LELSTRING(OptionsMenu,CategoryLogistics), LLSTRING(openMenu)], + [0, 10, 2.5, 1], + true, + {[QGVAR(paradropTimeCoefficent), _this, true] call EFUNC(common,cbaSettings_settingChanged)} ] call CBA_settings_fnc_init; diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 7acf7fc59c..86e0106a93 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -262,7 +262,7 @@ The cargo space required to hold this object (-1 for unloadable) Frachtraumgröße, welche zum Einladen dieses Objektes benötigt wird (-1 nicht einladbar) Lo spazio del cargo necessita di mantenere questo oggetto (-1 per scaricabile) - このオブジェクトを積載するのに必要なカーゴ スペース (-1 で積載不可) + オブジェクトを積載するのに必要なカーゴ スペース (-1 で積載不可) 此貨物會佔掉多少空間(設定-1的話此貨物就不能被裝載) 此货物会占掉多少空间(设定-1的话此货物就不能被装载) Wymagana przestrzeń ładunkowa dla tego obiektu (-1 dla niemożliwych do załadowania) @@ -291,7 +291,7 @@ 此架飞机并无保持水平飞行 - Paradrop Time Coffecient + Paradrop Time Coefficient Türlast Zeitfaktor 空中投下までの時間係数 Coefficente Tempo Lancio Paracadute @@ -312,5 +312,17 @@ Modyfikator wskazujący jak dużo czasu potrzeba by zrzucić przedmiot na spadochronie. 화물을 공중 투하 하는데 얼마나 걸리는 시간 설정 + + Load Time Coefficient + 積載時間の係数 + Współczynnik czasu załadowania + Coefficente Tempo Caricamento + + + Modifies how long it takes to load/unload items.\nTime, in seconds, is the size of the item multiplied by this value. + アイテムの積み下ろし作業にかかる時間を編集できます。\nアイテムの大きさにこの値が乗法され、時間 (秒) を変更できます。 + Modyfikuje, jak długo zajmuje załadowywanie/wyładowywanie przedmiotów. \nCzasem, w sekundach, jest wielkość przedmiotu razy jego wartość. + Modifica quanto tempo ci impiega a caricare o scaricare gli oggetti.\n Tempo, in secondi, è la dimensione dell'oggetto moltiplicata per questo valore + diff --git a/addons/chemlights/CfgAmmo.hpp b/addons/chemlights/CfgAmmo.hpp index 0f51510006..696c39e724 100644 --- a/addons/chemlights/CfgAmmo.hpp +++ b/addons/chemlights/CfgAmmo.hpp @@ -4,23 +4,23 @@ class CfgAmmo { class Chemlight_base; class Chemlight_Blue: Chemlight_base { - timeToLive = 1500; + timeToLive = 28800; // 8h as per cyalume website }; class Chemlight_Red: Chemlight_base { - timeToLive = 1800; + timeToLive = 43200; // 12h as per cyalume website }; class Chemlight_Green: Chemlight_base { - timeToLive = 1800; + timeToLive = 43200; }; class Chemlight_Yellow: Chemlight_base { - timeToLive = 1800; + timeToLive = 43200; }; class ACE_G_Chemlight_Orange: Chemlight_base { - timeToLive = 1800; + timeToLive = 43200; effectsSmoke = "ACE_ChemlightEffect_Orange"; model = "\A3\Weapons_f\chemlight\chemlight_yellow_lit"; }; @@ -30,7 +30,7 @@ class CfgAmmo { }; class ACE_G_Chemlight_White: Chemlight_base { - timeToLive = 1500; + timeToLive = 28800; effectsSmoke = "ACE_ChemlightEffect_White"; model = "\A3\Weapons_f\chemlight\chemlight_yellow_lit"; }; @@ -41,7 +41,7 @@ class CfgAmmo { class ACE_G_Chemlight_HiRed: Chemlight_Red { effectsSmoke = "ACE_ChemlightEffect_HiRed"; - timeToLive = 300; + timeToLive = 1800; }; class ACE_G_Chemlight_HiRed_Infinite: ACE_G_Chemlight_HiRed { @@ -50,35 +50,53 @@ class CfgAmmo { class ACE_G_Chemlight_HiYellow: Chemlight_Yellow { effectsSmoke = "ACE_ChemlightEffect_HiYellow"; - timeToLive = 300; + timeToLive = 1800; }; class ACE_G_Chemlight_HiYellow_Infinite: ACE_G_Chemlight_HiYellow { timeToLive = 1e10; }; - - class ACE_G_Chemlight_HiOrange: ACE_G_Chemlight_Orange { - effectsSmoke = "ACE_ChemlightEffect_HiOrange"; - timeToLive = 300; - }; - - class ACE_G_Chemlight_HiOrange_Infinite: ACE_G_Chemlight_HiOrange { - timeToLive = 1e10; - }; - + class ACE_G_Chemlight_HiWhite: ACE_G_Chemlight_White { effectsSmoke = "ACE_ChemlightEffect_HiWhite"; + timeToLive = 1800; + }; + + class ACE_G_Chemlight_HiWhite_Infinite: ACE_G_Chemlight_HiWhite { + timeToLive = 1e10; + }; + + class ACE_G_Chemlight_HiBlue: Chemlight_Blue { + effectsSmoke = "ACE_ChemlightEffect_HiBlue"; + timeToLive = 1800; + }; + + class ACE_G_Chemlight_HiBlue_Infinite: ACE_G_Chemlight_HiBlue { + timeToLive = 1e10; + }; + + class ACE_G_Chemlight_HiGreen: Chemlight_Green { + effectsSmoke = "ACE_ChemlightEffect_HiGreen"; + timeToLive = 1800; + }; + + class ACE_G_Chemlight_HiGreen_Infinite: ACE_G_Chemlight_HiGreen { + timeToLive = 1e10; + }; + + class ACE_G_Chemlight_UltraHiOrange: ACE_G_Chemlight_Orange { + effectsSmoke = "ACE_ChemlightEffect_UltraHiOrange"; timeToLive = 300; }; - class ACE_G_Chemlight_HiWhite_Infinite: ACE_G_Chemlight_HiWhite { + class ACE_G_Chemlight_UltraHiOrange_Infinite: ACE_G_Chemlight_UltraHiOrange { timeToLive = 1e10; }; class ACE_G_Chemlight_IR: Chemlight_base { ACE_Chemlight_IR = "ACE_Chemlight_IR_Dummy"; effectsSmoke = "ACE_ChemlightEffect_IR"; - timeToLive = 1500; - model = "\A3\Weapons_f\chemlight\chemlight_blue_lit"; + timeToLive = 28800; + model = "\A3\Weapons_f\chemlight\chemlight_blue_lit"; }; }; diff --git a/addons/chemlights/CfgLights.hpp b/addons/chemlights/CfgLights.hpp index f669c9e6d4..1b9d445f30 100644 --- a/addons/chemlights/CfgLights.hpp +++ b/addons/chemlights/CfgLights.hpp @@ -9,6 +9,15 @@ }; #define HI_ATTENUATION \ + class Attenuation { \ + constant = 0; \ + linear = 0; \ + quadratic = 20; \ + hardLimitStart = 2.1; \ + hardLimitEnd = 2.8; \ + }; + +#define ULTRA_HI_ATTENUATION \ class Attenuation { \ constant = 0; \ linear = 0; \ @@ -27,65 +36,73 @@ class CfgLights { drawLight = 0; intensity = 4000; position[] = {0,0,0}; - + BASE_ATTENUATION }; class ChemLight_Blue: ChemLight_Green { color[] = {0,0.6,1,1}; diffuse[] = {0,0.6,1}; - + BASE_ATTENUATION }; - + class ChemLight_Red: ChemLight_Green { color[] = {1,0.1,0.1,1}; diffuse[] = {1,0.1,0.1}; - + BASE_ATTENUATION }; - + class ChemLight_Yellow: ChemLight_Green { color[] = {1,1,0.1,1}; diffuse[] = {1,1,0.1}; - + BASE_ATTENUATION }; - + class ACE_ChemlightLight_Orange: ChemLight_Green { color[] = {1,0.64,0,1}; diffuse[] = {1,0.4,0}; }; - + class ACE_ChemlightLight_White: ChemLight_Green { color[] = {1,1,1,1}; diffuse[] = {1,1,1}; }; - + class ACE_ChemlightLight_HiRed: ChemLight_Red { - intensity = 12000; - + intensity = 9000; + HI_ATTENUATION }; - class ACE_ChemlightLight_HiYellow: ChemLight_Yellow { - intensity = 12000; - + intensity = 9000; + HI_ATTENUATION }; - - class ACE_ChemlightLight_HiOrange: ACE_ChemlightLight_Orange { - intensity = 12000; - - HI_ATTENUATION - }; - class ACE_ChemlightLight_HiWhite: ACE_ChemlightLight_White { - intensity = 12000; - + intensity = 9000; + HI_ATTENUATION }; - + class ACE_ChemlightLight_HiBlue: ChemLight_Blue { + intensity = 9000; + + HI_ATTENUATION + }; + class ACE_ChemlightLight_HiGreen: ChemLight_Green { + intensity = 9000; + + HI_ATTENUATION + }; + + class ACE_ChemlightLight_UltraHiOrange: ACE_ChemlightLight_Orange { + intensity = 12000; + + ULTRA_HI_ATTENUATION + }; + class ACE_ChemlightLight_IR: ChemLight_Green { intensity = 0; }; diff --git a/addons/chemlights/CfgMagazines.hpp b/addons/chemlights/CfgMagazines.hpp index 14d96f7a82..a905f4efd1 100644 --- a/addons/chemlights/CfgMagazines.hpp +++ b/addons/chemlights/CfgMagazines.hpp @@ -1,24 +1,23 @@ class CfgMagazines { - + class SmokeShell; - class Chemlight_Green: Smokeshell { ACE_Chemlight_Shield = "ACE_Chemlight_Shield_Green"; }; - + class Chemlight_Blue: Chemlight_Green { ACE_Chemlight_Shield = "ACE_Chemlight_Shield_Blue"; }; - + class Chemlight_Red: Chemlight_Green { ACE_Chemlight_Shield = "ACE_Chemlight_Shield_Red"; }; - + class Chemlight_Yellow: Chemlight_Green { ACE_Chemlight_Shield = "ACE_Chemlight_Shield_Yellow"; }; - + class ACE_Chemlight_Orange: Chemlight_Green { ACE_Attachable = "ACE_G_Chemlight_Orange"; ACE_Chemlight_Shield = "ACE_Chemlight_Shield_Orange"; @@ -30,7 +29,7 @@ class CfgMagazines { model = "\A3\Weapons_f\chemlight\chemlight_yellow"; picture = QPATHTOF(UI\ace_chemlight_orange_x_ca.paa); }; - + class ACE_Chemlight_White: Chemlight_Green { ACE_Attachable = "ACE_G_Chemlight_White"; ACE_Chemlight_Shield = "ACE_Chemlight_Shield_White"; @@ -42,7 +41,7 @@ class CfgMagazines { model = "\A3\Weapons_f\chemlight\chemlight_yellow"; picture = QPATHTOF(UI\ace_chemlight_white_x_ca.paa); }; - + class ACE_Chemlight_HiRed: Chemlight_Red { ACE_Attachable = "ACE_G_Chemlight_HiRed"; ACE_Chemlight_Shield = ""; @@ -53,7 +52,7 @@ class CfgMagazines { descriptionShort = CSTRING(HiRed_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_hired_x_ca.paa); }; - + class ACE_Chemlight_HiYellow: Chemlight_Yellow { ACE_Attachable = "ACE_G_Chemlight_HiYellow"; ACE_Chemlight_Shield = ""; @@ -64,18 +63,7 @@ class CfgMagazines { descriptionShort = CSTRING(HiYellow_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_hiyellow_x_ca.paa); }; - - class ACE_Chemlight_HiOrange: ACE_Chemlight_Orange { - ACE_Attachable = "ACE_G_Chemlight_HiOrange"; - ACE_Chemlight_Shield = ""; - author = ECSTRING(common,ACETeam); - ammo = "ACE_G_Chemlight_HiOrange"; - displayName = CSTRING(HiOrange_DisplayName); - displayNameShort = CSTRING(HiOrange_DisplayNameShort); - descriptionShort = CSTRING(HiOrange_DescriptionShort); - picture = QPATHTOF(UI\ace_chemlight_hiorange_x_ca.paa); - }; - + class ACE_Chemlight_HiWhite: ACE_Chemlight_White { ACE_Attachable = "ACE_G_Chemlight_HiWhite"; ACE_Chemlight_Shield = ""; @@ -86,7 +74,48 @@ class CfgMagazines { descriptionShort = CSTRING(HiWhite_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_hiwhite_x_ca.paa); }; - + + class ACE_Chemlight_HiBlue: Chemlight_Blue { + ACE_Attachable = "ACE_G_Chemlight_HiBlue"; + ACE_Chemlight_Shield = ""; + author = ECSTRING(common,ACETeam); + ammo = "ACE_G_Chemlight_HiBlue"; + displayName = CSTRING(HiBlue_DisplayName); + displayNameShort = CSTRING(HiBlue_DisplayNameShort); + descriptionShort = CSTRING(HiBlue_DescriptionShort); + picture = QPATHTOF(UI\ace_chemlight_hiblue_x_ca.paa); + }; + + class ACE_Chemlight_HiGreen: Chemlight_Green { + ACE_Attachable = "ACE_G_Chemlight_HiGreen"; + ACE_Chemlight_Shield = ""; + author = ECSTRING(common,ACETeam); + ammo = "ACE_G_Chemlight_HiGreen"; + displayName = CSTRING(HiGreen_DisplayName); + displayNameShort = CSTRING(HiGreen_DisplayNameShort); + descriptionShort = CSTRING(HiGreen_DescriptionShort); + picture = QPATHTOF(UI\ace_chemlight_higreen_x_ca.paa); + }; + + class ACE_Chemlight_UltraHiOrange: ACE_Chemlight_Orange { + ACE_Attachable = "ACE_G_Chemlight_UltraHiOrange"; + ACE_Chemlight_Shield = ""; + author = ECSTRING(common,ACETeam); + ammo = "ACE_G_Chemlight_UltraHiOrange"; + displayName = CSTRING(UltraHiOrange_DisplayName); + displayNameShort = CSTRING(UltraHiOrange_DisplayNameShort); + descriptionShort = CSTRING(UltraHiOrange_DescriptionShort); + picture = QPATHTOF(UI\ace_chemlight_ultrahiorange_x_ca.paa); + }; + + // Backwards compatibility + // has been removed in v3.12.4 + class ACE_Chemlight_HiOrange: ACE_Chemlight_UltraHiOrange { + author = ECSTRING(common,ACETeam); + scope = 1; + scopeArsenal = 1; + }; + class ACE_Chemlight_IR: Chemlight_Green { ACE_Attachable = "ACE_Chemlight_IR_Dummy"; ACE_Chemlight_Shield = ""; @@ -95,6 +124,6 @@ class CfgMagazines { displayName = CSTRING(IR_DisplayName); displayNameShort = CSTRING(IR_DisplayNameShort); descriptionShort = CSTRING(IR_DescriptionShort); - picture = QPATHTOF(UI\ace_chemlight_ir_x_ca.paa); + picture = QPATHTOF(UI\ace_chemlight_ir_x_ca.paa); }; }; diff --git a/addons/chemlights/CfgVehicles.hpp b/addons/chemlights/CfgVehicles.hpp index 9fd05d84b9..f22b03a7fe 100644 --- a/addons/chemlights/CfgVehicles.hpp +++ b/addons/chemlights/CfgVehicles.hpp @@ -33,9 +33,9 @@ class CfgVehicles { nvTarget = 1; brightness = 0.2; class NVGMarker { - diffuse[] = {0.1,0.1,0.1}; - ambient[] = {0.01,0.01,0.01}; - brightness = 0.015; + diffuse[] = {0.04,0.04,0.04}; + ambient[] = {0.0001,0.0001,0.0001}; + brightness = 0.12; name = "pozicni blik"; drawLight = 0; drawLightSize = 0; @@ -228,8 +228,10 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_Chemlight_White,20); MACRO_ADDMAGAZINE(ACE_Chemlight_HiRed,10); MACRO_ADDMAGAZINE(ACE_Chemlight_HiYellow,10); - MACRO_ADDMAGAZINE(ACE_Chemlight_HiOrange,10); + MACRO_ADDMAGAZINE(ACE_Chemlight_HiBlue,10); + MACRO_ADDMAGAZINE(ACE_Chemlight_HiGreen,10); MACRO_ADDMAGAZINE(ACE_Chemlight_HiWhite,10); + MACRO_ADDMAGAZINE(ACE_Chemlight_UltraHiOrange,10); MACRO_ADDMAGAZINE(ACE_Chemlight_IR,20); }; }; @@ -258,8 +260,10 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_Chemlight_White,20); MACRO_ADDMAGAZINE(ACE_Chemlight_HiRed,10); MACRO_ADDMAGAZINE(ACE_Chemlight_HiYellow,10); - MACRO_ADDMAGAZINE(ACE_Chemlight_HiOrange,10); + MACRO_ADDMAGAZINE(ACE_Chemlight_HiBlue,10); + MACRO_ADDMAGAZINE(ACE_Chemlight_HiGreen,10); MACRO_ADDMAGAZINE(ACE_Chemlight_HiWhite,10); + MACRO_ADDMAGAZINE(ACE_Chemlight_UltraHiOrange,10); MACRO_ADDMAGAZINE(ACE_Chemlight_IR,20); }; @@ -286,4 +290,104 @@ class CfgVehicles { }; }; }; + + class Module_F; + class ModuleChemlight_F: Module_F { + class Arguments { + class Type { + class values { + class Orange { + name= CSTRING(Orange_DisplayName); + value="ACE_G_Chemlight_Orange"; + }; + class White { + name= CSTRING(White_DisplayName); + value="ACE_G_Chemlight_White"; + }; + class HiRed { + name= CSTRING(HiRed_DisplayName); + value="ACE_G_Chemlight_HiRed"; + }; + class HiYellow { + name= CSTRING(HiYellow_DisplayName); + value="ACE_G_Chemlight_HiYellow"; + }; + class HiWhite { + name= CSTRING(HiWhite_DisplayName); + value="ACE_G_Chemlight_HiWhite"; + }; + class HiBlue { + name= CSTRING(HiBlue_DisplayName); + value="ACE_G_Chemlight_HiBlue"; + }; + class HiGreen { + name= CSTRING(HiGreen_DisplayName); + value="ACE_G_Chemlight_HiGreen"; + }; + class UltraHiOrange { + name= CSTRING(UltraHiOrange_DisplayName); + value="ACE_G_Chemlight_UltraHiOrange"; + }; + }; + }; + }; + }; + + class ModuleChemlightBlue_F; + class ModuleChemlightOrange: ModuleChemlightBlue_F { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightOrange"; + displayName = CSTRING(Orange_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_orange_x_ca.paa); + ammo = "ACE_G_Chemlight_Orange"; + }; + class ModuleChemlightWhite: ModuleChemlightOrange { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightWhite"; + displayName = CSTRING(White_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_white_x_ca.paa); + ammo = "ACE_G_Chemlight_White"; + }; + class ModuleChemlightHiRed: ModuleChemlightOrange { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightHiRed"; + displayName = CSTRING(HiRed_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_hired_x_ca.paa); + ammo = "ACE_G_Chemlight_HiRed"; + }; + class ModuleChemlightHiYellow: ModuleChemlightOrange { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightHiYellow"; + displayName = CSTRING(HiYellow_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_hiyellow_x_ca.paa); + ammo = "ACE_G_Chemlight_HiYellow"; + }; + class ModuleChemlightHiWhite: ModuleChemlightOrange { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightHiWhite"; + displayName = CSTRING(HiWhite_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_hiwhite_x_ca.paa); + ammo = "ACE_G_Chemlight_HiWhite"; + }; + class ModuleChemlightHiBlue: ModuleChemlightOrange { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightHiBlue"; + displayName = CSTRING(HiBlue_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_hiblue_x_ca.paa); + ammo = "ACE_G_Chemlight_HiBlue"; + }; + class ModuleChemlightHiGreen: ModuleChemlightOrange { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightHiGreen"; + displayName = CSTRING(HiGreen_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_higreen_x_ca.paa); + ammo = "ACE_G_Chemlight_HiGreen"; + }; + class ModuleChemlightUltraHiOrange: ModuleChemlightOrange { + author = ECSTRING(common,ACETeam); + _generalMacro = "ModuleChemlightUltraHiOrange"; + displayName = CSTRING(UltraHiOrange_DisplayName); + portrait = QPATHTOF(UI\ace_chemlight_ultrahiorange_x_ca.paa); + ammo = "ACE_G_Chemlight_UltraHiOrange"; + }; }; diff --git a/addons/chemlights/CfgWeapons.hpp b/addons/chemlights/CfgWeapons.hpp index de6f3920f5..8ed9d73583 100644 --- a/addons/chemlights/CfgWeapons.hpp +++ b/addons/chemlights/CfgWeapons.hpp @@ -3,7 +3,7 @@ class CfgWeapons { class GrenadeLauncher; class Throw: GrenadeLauncher { - muzzles[] += {"ACE_Chemlight_OrangeMuzzle","ACE_Chemlight_WhiteMuzzle","ACE_Chemlight_HiRedMuzzle","ACE_Chemlight_HiYellowMuzzle","ACE_Chemlight_HiOrangeMuzzle","ACE_Chemlight_HiWhiteMuzzle","ACE_Chemlight_IRMuzzle"}; + muzzles[] += {"ACE_Chemlight_OrangeMuzzle","ACE_Chemlight_WhiteMuzzle","ACE_Chemlight_HiRedMuzzle","ACE_Chemlight_HiYellowMuzzle","ACE_Chemlight_HiWhiteMuzzle", "ACE_Chemlight_HiBlueMuzzle", "ACE_Chemlight_HiGreenMuzzle","ACE_Chemlight_UltraHiOrangeMuzzle","ACE_Chemlight_IRMuzzle"}; class ThrowMuzzle; @@ -23,13 +23,22 @@ class CfgWeapons { magazines[] = {"ACE_Chemlight_HiYellow"}; }; - class ACE_Chemlight_HiOrangeMuzzle: ThrowMuzzle { - magazines[] = {"ACE_Chemlight_HiOrange"}; - }; - class ACE_Chemlight_HiWhiteMuzzle: ThrowMuzzle { magazines[] = {"ACE_Chemlight_HiWhite"}; }; + + class ACE_Chemlight_HiBlueMuzzle: ThrowMuzzle { + magazines[] = {"ACE_Chemlight_HiBlue"}; + }; + + class ACE_Chemlight_HiGreenMuzzle: ThrowMuzzle { + magazines[] = {"ACE_Chemlight_HiGreen"}; + }; + + class ACE_Chemlight_UltraHiOrangeMuzzle: ThrowMuzzle { + magazines[] = {"ACE_Chemlight_UltraHiOrange"}; + }; + class ACE_Chemlight_IRMuzzle: ThrowMuzzle { magazines[] = {"ACE_Chemlight_IR"}; }; @@ -65,6 +74,7 @@ class CfgWeapons { ACE_Flashlight_Colour = "green"; ACE_Flashlight_Beam = QPATHTOF(UI\chemlight_shield_beam_green_ca.paa); ACE_Flashlight_Size = 0.8; + ACE_Flashlight_Sound = 0; }; }; }; @@ -74,12 +84,10 @@ class CfgWeapons { displayName = CSTRING(Shield_Red_DisplayName); descriptionShort = CSTRING(Shield_Red_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_shield_red_x_ca.paa); - class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 1; - class FlashLight { + class ItemInfo: ItemInfo { + class FlashLight: FlashLight { ACE_Flashlight_Colour = "red"; ACE_Flashlight_Beam = QPATHTOF(UI\chemlight_shield_beam_red_ca.paa); - ACE_Flashlight_Size = 0.8; }; }; }; @@ -89,12 +97,10 @@ class CfgWeapons { displayName = CSTRING(Shield_Blue_DisplayName); descriptionShort = CSTRING(Shield_Blue_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_shield_blue_x_ca.paa); - class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 1; - class FlashLight { + class ItemInfo: ItemInfo { + class FlashLight: FlashLight { ACE_Flashlight_Colour = "blue"; ACE_Flashlight_Beam = QPATHTOF(UI\chemlight_shield_beam_blue_ca.paa); - ACE_Flashlight_Size = 0.8; }; }; }; @@ -104,12 +110,10 @@ class CfgWeapons { displayName = CSTRING(Shield_Yellow_DisplayName); descriptionShort = CSTRING(Shield_Yellow_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_shield_yellow_x_ca.paa); - class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 1; - class FlashLight { + class ItemInfo: ItemInfo { + class FlashLight: FlashLight { ACE_Flashlight_Colour = "yellow"; ACE_Flashlight_Beam = QPATHTOF(UI\chemlight_shield_beam_yellow_ca.paa); - ACE_Flashlight_Size = 0.8; }; }; }; @@ -119,12 +123,10 @@ class CfgWeapons { displayName = CSTRING(Shield_Orange_DisplayName); descriptionShort = CSTRING(Shield_Orange_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_shield_orange_x_ca.paa); - class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 1; - class FlashLight { + class ItemInfo: ItemInfo { + class FlashLight: FlashLight { ACE_Flashlight_Colour = "orange"; ACE_Flashlight_Beam = QPATHTOF(UI\chemlight_shield_beam_orange_ca.paa); - ACE_Flashlight_Size = 0.8; }; }; }; @@ -134,12 +136,10 @@ class CfgWeapons { displayName = CSTRING(Shield_White_DisplayName); descriptionShort = CSTRING(Shield_White_DescriptionShort); picture = QPATHTOF(UI\ace_chemlight_shield_white_x_ca.paa); - class ItemInfo: CBA_MiscItem_ItemInfo { - mass = 1; - class FlashLight { + class ItemInfo: ItemInfo { + class FlashLight: FlashLight { ACE_Flashlight_Colour = "white"; ACE_Flashlight_Beam = QPATHTOF(UI\chemlight_shield_beam_white_ca.paa); - ACE_Flashlight_Size = 0.8; }; }; }; diff --git a/addons/chemlights/Effects.hpp b/addons/chemlights/Effects.hpp index cbe91144d8..210879c44e 100644 --- a/addons/chemlights/Effects.hpp +++ b/addons/chemlights/Effects.hpp @@ -27,13 +27,6 @@ class ACE_ChemlightEffect_HiYellow { }; }; -class ACE_ChemlightEffect_HiOrange { - class Light1 { - simulation = "light"; - type = "ACE_ChemlightLight_HiOrange"; - }; -}; - class ACE_ChemlightEffect_HiWhite { class Light1 { simulation = "light"; @@ -41,6 +34,27 @@ class ACE_ChemlightEffect_HiWhite { }; }; +class ACE_ChemlightEffect_HiBlue { + class Light1 { + simulation = "light"; + type = "ACE_ChemlightLight_HiBlue"; + }; +}; + +class ACE_ChemlightEffect_HiGreen { + class Light1 { + simulation = "light"; + type = "ACE_ChemlightLight_HiGreen"; + }; +}; + +class ACE_ChemlightEffect_UltraHiOrange { + class Light1 { + simulation = "light"; + type = "ACE_ChemlightLight_UltraHiOrange"; + }; +}; + class ACE_ChemlightEffect_IR { class Light1 { simulation = "light"; diff --git a/addons/chemlights/UI/ace_chemlight_hiblue_x_ca.paa b/addons/chemlights/UI/ace_chemlight_hiblue_x_ca.paa new file mode 100644 index 0000000000..9ee40d5a6e Binary files /dev/null and b/addons/chemlights/UI/ace_chemlight_hiblue_x_ca.paa differ diff --git a/addons/chemlights/UI/ace_chemlight_higreen_x_ca.paa b/addons/chemlights/UI/ace_chemlight_higreen_x_ca.paa new file mode 100644 index 0000000000..496fe59f66 Binary files /dev/null and b/addons/chemlights/UI/ace_chemlight_higreen_x_ca.paa differ diff --git a/addons/chemlights/UI/ace_chemlight_hiorange_x_ca.paa b/addons/chemlights/UI/ace_chemlight_ultrahiorange_x_ca.paa similarity index 100% rename from addons/chemlights/UI/ace_chemlight_hiorange_x_ca.paa rename to addons/chemlights/UI/ace_chemlight_ultrahiorange_x_ca.paa diff --git a/addons/chemlights/config.cpp b/addons/chemlights/config.cpp index ce9d34ed25..263fcb1a57 100644 --- a/addons/chemlights/config.cpp +++ b/addons/chemlights/config.cpp @@ -3,7 +3,7 @@ class CfgPatches { class ADDON { - units[] = {"ACE_Box_Chemlights","ACE_Item_Chemlight_Shield","ACE_Item_Chemlight_Shield_Green","ACE_Item_Chemlight_Shield_Red","ACE_Item_Chemlight_Shield_Blue","ACE_Item_Chemlight_Shield_Yellow","ACE_Item_Chemlight_Shield_Orange","ACE_Item_Chemlight_Shield_White"}; + units[] = {"ACE_Box_Chemlights","ACE_Item_Chemlight_Shield","ACE_Item_Chemlight_Shield_Green","ACE_Item_Chemlight_Shield_Red","ACE_Item_Chemlight_Shield_Blue","ACE_Item_Chemlight_Shield_Yellow","ACE_Item_Chemlight_Shield_Orange","ACE_Item_Chemlight_Shield_White","ModuleChemlightOrange","ModuleChemlightWhite","ModuleChemlightHiRed","ModuleChemlightHiYellow","ModuleChemlightHiWhite","ModuleChemlightHiBlue","ModuleChemlightHiGreen","ModuleChemlightUltraHiOrange"}; weapons[] = {"ACE_Chemlight_Shield", "ACE_Chemlight_Shield_Green","ACE_Chemlight_Shield_Red","ACE_Chemlight_Shield_Blue","ACE_Chemlight_Shield_Yellow","ACE_Chemlight_Shield_Orange","ACE_Chemlight_Shield_White"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_common"}; diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index 51f07a414b..4fc7cc4e8b 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ Prepare %1 - %1 をつかう + %1 を使う Przygotuj %1 %1 vorbereiten %1 준비 @@ -25,7 +25,7 @@ %1<br/>Prepared - %1<br/>をつかった + %1<br/>を使った %1<br/>Przygotowany %1<br/>vorbereitet %1<br/>준비됨 @@ -150,15 +150,15 @@ 超亮红色光 - Type: Light - Red Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 赤 (5分間)<br />装填数: 1<br />次で使用: 携帯 - Typ: Światło - jaskrawe czerwone (5 minut)<br/>Pociski: 1<br/>Używany w: ręce - Typ: Licht - rot, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand - 종류: 밝은 빨간색 (5분)<br />수량: 1<br />사용처: 손 - Type: Lumière - rouge Hi (5 minutes)<br />Nbre: 1<br /> À main - Tipo: Luce - Rossa Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano - 類型: 光 - 超亮紅色 (5分鐘)<br />發數: 1<br />使用於: 手 - 类型: 光 - 超亮红色 (5分钟)<br />发数: 1<br />使用于: 手 + Type: Light - Red Hi (30 minute)<br />Rounds: 1<br />Used in: Hand + 種類: 照明 - 高輝度 赤 (30分間)<br />装填数: 1<br />次で使用: 携帯 + Typ: Światło - jaskrawe czerwone (30 minut)<br/>Pociski: 1<br/>Używany w: ręce + Typ: Licht - rot, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand + 종류: 밝은 빨간색 (30분)<br />수량: 1<br />사용처: 손 + Type: Lumière - rouge Hi (30 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Rossa Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 超亮紅色 (30分鐘)<br />發數: 1<br />使用於: 手 + 类型: 光 - 超亮红色 (30分钟)<br />发数: 1<br />使用于: 手 Chemlight (Hi Yellow) @@ -183,48 +183,15 @@ 超亮黄色光 - Type: Light - Yellow Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 黄 (5分間)<br />装填数: 1<br />次で使用: 携帯 - Typ: Światło - jaskrawe żółte (5 minut)<br/>Pociski: 1<br/>Używany w: ręce - Typ: Licht - gelb, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand - 종류:밝은 노란색 (5분)<br />수량: 1<br />사용처: Hand - Type: Lumière - Jaune Hi (5 minutes)Nbre: 1<br /> À main - Tipo: Luce - Gialla Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano - 類型: 光 - 超亮黃色 (5分鐘)<br />發數: 1<br />使用於: 手 - 类型: 光 - 超亮黄色 (5分钟)<br />发数: 1<br />使用于: 手 - - - Chemlight (Hi Orange) - ケミライト (高輝度 オレンジ) - Świetlik (jaskrawy pomarańczowy) - Knicklicht (orange, hell) - 켐라이트 (밝은 주황색) - Cyalume (Hi orange) - Luce chimica (Hi Arancione) - 螢光棒 (超亮橘色) - 萤光棒 (超亮橘色) - - - Orange Hi Light - 高輝度のオレンジ - Jaskrawe pomarańczowe światło - Helles, oranges Knicklicht - 밝은 주황색 - Lum. orange haute intensité - Luce Hi Arancione - 超亮橘色光 - 超亮橘色光 - - - Type: Light - Orange Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯 - Typ: Światło - jaskrawe pomarańczowe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce - Typ: Licht - orange, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand - 종류: 밝은 주황색 (5분)<br />수량: 1<br />사용처: 손 - Type: Lumière - orange Hi (5 minutes)<br />Nbre: 1<br /> À main - Tipo: Luce - Arancione Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano - 類型: 光 - 超亮橘色 (5分鐘)<br />發數: 1<br />使用於: 手 - 类型: 光 - 超亮橘色 (5分钟)<br />发数: 1<br />使用于: 手 + Type: Light - Yellow Hi (30 minute)<br />Rounds: 1<br />Used in: Hand + 種類: 照明 - 高輝度 黄 (30分間)<br />装填数: 1<br />次で使用: 携帯 + Typ: Światło - jaskrawe żółte (30 minut)<br/>Pociski: 1<br/>Używany w: ręce + Typ: Licht - gelb, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand + 종류:밝은 노란색 (30분)<br />수량: 1<br />사용처: Hand + Type: Lumière - Jaune Hi (30 minutes)Nbre: 1<br /> À main + Tipo: Luce - Gialla Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 超亮黃色 (30分鐘)<br />發數: 1<br />使用於: 手 + 类型: 光 - 超亮黄色 (30分钟)<br />发数: 1<br />使用于: 手 Chemlight (Hi White) @@ -249,15 +216,78 @@ 超亮白色光 - Type: Light - White Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 白 (5分間)<br />装填数: 1<br />次で使用: 携帯 - Typ: Światło - jaskrawe białe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce - Typ: Licht - weiß, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand - 종류: 밝은 하얀색 (5분)<br />수량: 1<br />사용처: 손 - Type: Lumière - blanche Hi (5 minutes)<br />Nbre: 1<br /> À main - Tipo: Luce - Bianca Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano - 類型: 光 - 超亮白色 (5分鐘)<br />發數: 1<br />使用於: 手 - 类型: 光 - 超亮白色 (5分钟)<br />发数: 1<br />使用于: 手 + Type: Light - White Hi (30 minute)<br />Rounds: 1<br />Used in: Hand + 種類: 照明 - 高輝度 白 (30分間)<br />装填数: 1<br />次で使用: 携帯 + Typ: Światło - jaskrawe białe (30 minut)<br/>Pociski: 1<br/>Używany w: ręce + Typ: Licht - weiß, hell (30 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand + 종류: 밝은 하얀색 (30분)<br />수량: 1<br />사용처: 손 + Type: Lumière - blanche Hi (30 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Bianca Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 超亮白色 (30分鐘)<br />發數: 1<br />使用於: 手 + 类型: 光 - 超亮白色 (30分钟)<br />发数: 1<br />使用于: 手 + + + Chemlight (Hi Blue) + Cyalume (Hi Bleu) + ケミライト (高輝度 青) + Świetlik (jaskrawy niebieski) + Luce chimica (Hi Blu) + + + Blue Hi Light + Lum. bleue haute intensité + 高輝度の青色 + Jaskrawe niebieskie światło + Luce Hi Blu + + + Type: Light - Blue Hi (30 minute)<br />Rounds: 1<br />Used in: Hand + Type: Lumière - bleue Hi (30 minutes)<br />Nbre: 1<br /> À main + 種類: 照明 - 高輝度 青 (30分間)<br />装填数: 1<br />次で使用: 携帯 + Typ: Światło - jaskrawe niebieskie (30 minut)<br/>Pociski: 1<br/>Używany w: ręce + Tipo: Luce - Hi blu (30 minuti)<br/>Rimanenti:1 <br/>Usata in: Mano + + + Chemlight (Hi Green) + Cyalume (Hi Vert) + ケミライト (高輝度 緑) + Świetlik (jaskrawy zielony) + Luce chimica (Hi Verde) + + + Green Hi Light + Lum. verte haute intensité + 高輝度の青色 + Jaskrawe zielone światło + Luce Hi Verde + + + Type: Light - Green Hi (30 minute)<br />Rounds: 1<br />Used in: Hand + Type: Lumière - verte Hi (30 minutes)<br />Nbre: 1<br /> À main + 種類: 照明 - 高輝度 緑 (30分間)<br />装填数: 1<br />次で使用: 携帯 + Typ: Światło - jaskrawe zielone (30 minut)<br/>Pociski: 1<br/>Używany w: ręce + Tipo: Luce - Hi verde (30 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano + + + Chemlight (Ultra-Hi Orange) + Cyalume (Ultra-Hi orange) + ケミライト (高輝度 オレンジ) + Świetlik (ultra-jaskrawy pomarańczowy) + Luce chimica (Ultra-Hi Arancione) + + + Orange Ultra-Hi Light + Lum. orange ultra haute intensité + ウルトラ高輝度のオレンジ色 + Ultra-jaskrawe pomarańczowe światło + Luce Ultra-Hi Arancione + + + Type: Light - Orange Ultra-Hi (5 minute)<br />Rounds: 1<br />Used in: Hand + Type: Lumière - Orange Ultra-Hi (5 minutes)<br />Nbre: 1<br /> À main + 種類: 照明 - ウルトラ高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯 + Typ: Światło - ultra-jaskrawe pomarańczowe (30 minut)<br/>Pociski: 1<br/>Używany w: ręce + Tipo: Luce - Ultra-Hi (5 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano Chemlight (IR) @@ -437,7 +467,7 @@ White reading light. - 白の照明。 + 白色の照明。 Biała lampka. Weißes Leselicht. 주황색 조명 diff --git a/addons/common/RscInfoType.hpp b/addons/common/RscInfoType.hpp index 1ec983573a..d2fe4cdaf5 100644 --- a/addons/common/RscInfoType.hpp +++ b/addons/common/RscInfoType.hpp @@ -6,7 +6,7 @@ class RscInGameUI { }; class RscUnitInfoSoldier: RscUnitInfo { - onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgSoldier', _this select 0)];); + onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgSoldier', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Soldier')])] call CBA_fnc_localEvent;); }; class RscUnitInfoTank: RscUnitInfo { @@ -94,7 +94,7 @@ class RscInGameUI { }; class RscUnitInfoParachute: RscUnitInfo { - onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgParachute', _this select 0)];); + onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgParachute', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Parachute')])] call CBA_fnc_localEvent;); }; class RscUnitVehicle { diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index c070623893..70efaf5e6c 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -65,6 +65,7 @@ PREP(getFirstObjectIntersection); PREP(getFirstTerrainIntersection); PREP(getGunner); PREP(getInPosition); +PREP(getLocalUnits); PREP(getMapData); PREP(getMapGridData); PREP(getMapGridFromPos); @@ -156,6 +157,7 @@ PREP(setPitchBankYaw); PREP(setPlayerOwner); PREP(setProne); PREP(setSetting); +PREP(setupLocalUnitsHandler); PREP(setVariableJIP); PREP(setVariablePublic); PREP(setVolume); diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index ce6126cba7..eb626a923b 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -83,6 +83,11 @@ _vehicle engineOn false; }] call CBA_fnc_addEventHandler; +[QGVAR(setMass), { + params ["_object", "_mass"]; + _object setMass _mass; +}] call CBA_fnc_addEventHandler; + //Add a fix for BIS's zeus remoteControl module not reseting variables on DC when RC a unit //This variable is used for isPlayer checks if (isServer) then { @@ -266,21 +271,13 @@ TRACE_1("adding unit playerEH to set ace_player",isNull cba_events_oldUnit); GVAR(uniqueItemsCache) = nil; }] call CBA_fnc_addPlayerEventHandler; +// Backwards compatiblity for old ace event GVAR(OldIsCamera) = false; - -[{ - BEGIN_COUNTER(stateChecker); - - // "activeCameraChanged" event - private _data = call FUNC(isfeatureCameraActive); - if !(_data isEqualTo GVAR(OldIsCamera)) then { - // Raise ACE event locally - GVAR(OldIsCamera) = _data; - ["ace_activeCameraChanged", [ACE_player, _data]] call CBA_fnc_localEvent; - }; - - END_COUNTER(stateChecker); -}, 0.5, []] call CBA_fnc_addPerFrameHandler; +["featureCamera", { + params ["_player", "_cameraName"]; + GVAR(OldIsCamera) = _cameraName != ""; + ["ace_activeCameraChanged", [_player, GVAR(OldIsCamera)]] call CBA_fnc_localEvent; +}, true] call CBA_fnc_addPlayerEventHandler; // Add event handler for UAV control change ACE_controlledUAV = [objNull, objNull, [], ""]; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index c29a0b5df4..7713ce07ee 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -27,6 +27,8 @@ GVAR(statusEffect_isGlobal) = []; GVAR(setHearingCapabilityMap) = []; +[] call FUNC(setupLocalUnitsHandler); // Add local units event handlers (ace_common_localUnits) + ////////////////////////////////////////////////// // Set up PlayerChanged eventhandler for pre init (EH is installed in postInit) ////////////////////////////////////////////////// @@ -35,7 +37,24 @@ ACE_player = objNull; uiNamespace setVariable ["ACE_player", objNull]; // Init toHex -[0] call FUNC(toHex); +GVAR(hexArray) = [ +"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F", +"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", +"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", +"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F", +"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F", +"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F", +"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F", +"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F", +"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F", +"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F", +"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF", +"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF", +"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF", +"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF", +"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF", +"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF" +]; isHC = !hasInterface && !isDedicated; // deprecated because no tag missionNamespace setVariable ["ACE_isHC", ACE_isHC]; diff --git a/addons/common/functions/fnc_cbaSettings_convertHelper.sqf b/addons/common/functions/fnc_cbaSettings_convertHelper.sqf index 14d2b8c35a..4c64da8f0f 100644 --- a/addons/common/functions/fnc_cbaSettings_convertHelper.sqf +++ b/addons/common/functions/fnc_cbaSettings_convertHelper.sqf @@ -43,6 +43,7 @@ private _settings = configProperties [configFile >> "ACE_Settings", "(isClass _x private _category = getText (_config >> "category"); private _cbaIsGlobal = (!_isClientSettable) || _isForced; + private _warnIfChangedMidMission = _cbaIsGlobal && {(getNumber (_config >> "canBeChanged")) == 0}; if (_isForced) then {GVAR(cbaSettings_forcedSettings) pushBack (toLower _varName);}; // Basic handling of setting types CBA doesn't support: @@ -117,10 +118,11 @@ private _settings = configProperties [configFile >> "ACE_Settings", "(isClass _x _output pushBack format [" %1, // %2", _cbaValueInfo, _cbaValueInfoHint]; _output pushBack format [" %1, // isGlobal", _cbaIsGlobal]; if ((_varName select [0, 4]) == "ACE_") then { - _output pushBack format [" {[QGVAR(%1), _this] call EFUNC(common,cbaSettings_settingChanged)}", _gvarName]; + _output pushBack format [" {[QGVAR(%1), _this] call EFUNC(common,cbaSettings_settingChanged)},", _gvarName]; } else { - _output pushBack format [" {[""%1"", _this] call ace_common_fnc_cbaSettings_settingChanged}", _varName]; + _output pushBack format [" {[""%1"", _this] call ace_common_fnc_cbaSettings_settingChanged},", _varName]; }; + _output pushBack format [" %1 // Needs mission restart", _warnIfChangedMidMission]; _output pushBack "] call CBA_settings_fnc_init;"; } forEach _settings; diff --git a/addons/common/functions/fnc_cbaSettings_loadFromConfig.sqf b/addons/common/functions/fnc_cbaSettings_loadFromConfig.sqf index ef529de955..7f6637f622 100644 --- a/addons/common/functions/fnc_cbaSettings_loadFromConfig.sqf +++ b/addons/common/functions/fnc_cbaSettings_loadFromConfig.sqf @@ -32,6 +32,7 @@ private _isForced = (getNumber (_config >> "force")) > 0; private _category = getText (_config >> "category"); private _cbaIsGlobal = (!_isClientSettable) || _isForced; +private _warnIfChangedMidMission = _cbaIsGlobal && {(getNumber (_config >> "canBeChanged")) == 0}; if (_isForced) then {GVAR(cbaSettings_forcedSettings) pushBack (toLower _varName);}; // Basic handling of setting types CBA doesn't support: @@ -97,7 +98,7 @@ private _code = compile format ['["%1", _this] call FUNC(cbaSettings_settingChan TRACE_2("setting",_cbaSettingType,_cbaValueInfo); TRACE_4("",_isForced,_cbaIsGlobal,_category,_cbaValueInfo); -private _return = [_varName, _cbaSettingType, [_localizedName, _localizedDescription], _category, _cbaValueInfo, _cbaIsGlobal, _code] call CBA_settings_fnc_init; +private _return = [_varName, _cbaSettingType, [_localizedName, _localizedDescription], _category, _cbaValueInfo, _cbaIsGlobal, _code, _warnIfChangedMidMission] call CBA_settings_fnc_init; TRACE_1("returned",_return); if ((isNil "_return") || {_return != 0}) then {ERROR_1("Setting [%1] - CBA Error",_varName);}; _return diff --git a/addons/common/functions/fnc_cbaSettings_settingChanged.sqf b/addons/common/functions/fnc_cbaSettings_settingChanged.sqf index 2a2974ef24..055e9b9da6 100644 --- a/addons/common/functions/fnc_cbaSettings_settingChanged.sqf +++ b/addons/common/functions/fnc_cbaSettings_settingChanged.sqf @@ -23,10 +23,9 @@ TRACE_2("",_settingName,_newValue); ["ace_settingChanged", [_settingName, _newValue]] call CBA_fnc_localEvent; -if (_canBeChanged) exitWith {}; +if (!((toLower _settingName) in CBA_settings_needRestart)) exitWith {}; +if (_canBeChanged) exitWith {WARNING_1("update cba setting [%1] to use correct Need Restart param",_settingName);}; if (!GVAR(settingsInitFinished)) exitWith {}; // Ignore changed event before CBA_settingsInitialized -if (CBA_settings_default getVariable [_settingName, []] param [7, 0] == 0) exitWith {}; // Ignore if not a global setting -if ((getNumber (configFile >> "ACE_settings" >> _settingName >> "canBeChanged")) == 1) exitWith {}; // Ignore if flagged as ok to change -WARNING_1("Global setting [%1] changed mid-mission",_settingName); -[QGVAR(displayTextStructured), [format ["Global setting %1 changed mid-mission. Mission restart may be required to prevent issues", _settingName], 4]] call CBA_fnc_localEvent; +WARNING_1("Setting [%1] changed mid-mission",_settingName); +[QGVAR(displayTextStructured), [format ["Setting %1 changed mid-mission. Mission restart may be required to prevent issues", _settingName], 4]] call CBA_fnc_localEvent; diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf index 62a344952f..dee144c40e 100644 --- a/addons/common/functions/fnc_checkFiles.sqf +++ b/addons/common/functions/fnc_checkFiles.sqf @@ -40,9 +40,7 @@ if ([_cbaRequiredAr, _cbaVersionAr] call cba_versioning_fnc_version_compare) the }; //private _addons = activatedAddons; // broken with High-Command module, see #2134 -private _addons = "true" configClasses (configFile >> "CfgPatches");// -_addons = _addons apply {toLower configName _x};// -_addons = _addons select {_x find "ace_" == 0}; +private _addons = (cba_common_addons select {(_x select [0,4]) == "ace_"}) apply {toLower _x}; private _oldCompats = []; { @@ -72,7 +70,7 @@ if (!(_oldCompats isEqualTo [])) then { // check dlls /////////////// if (toLower (productVersion select 6) in ["linux", "osx"]) then { - INFO_2("Operating system does not support DLL file format"); + INFO("Operating system does not support DLL file format"); } else { { private _versionEx = _x callExtension "version"; diff --git a/addons/common/functions/fnc_getLocalUnits.sqf b/addons/common/functions/fnc_getLocalUnits.sqf new file mode 100644 index 0000000000..17163d0e77 --- /dev/null +++ b/addons/common/functions/fnc_getLocalUnits.sqf @@ -0,0 +1,23 @@ +#include "script_component.hpp" +/* + * Author: dedmen + * Gets localUnits array filtering out nullObjects. + * If you can handle null objects you can use the array `ace_common_localUnits` directly. + * Should be equivalent to `allUnits select {local _x}` + * + * Arguments: + * Nothing + * + * Return Value: + * Array of local Units + * + * Example: + * [] call ace_common_fnc_getLocalUnits + * + * Public: Yes + */ + +// Remove null objects +GVAR(localUnits) = GVAR(localUnits) - [objNull]; + +GVAR(localUnits) diff --git a/addons/common/functions/fnc_isFeatureCameraActive.sqf b/addons/common/functions/fnc_isFeatureCameraActive.sqf index 00e3db699a..24ea0667be 100644 --- a/addons/common/functions/fnc_isFeatureCameraActive.sqf +++ b/addons/common/functions/fnc_isFeatureCameraActive.sqf @@ -24,6 +24,8 @@ * Public: Yes */ +ACE_DEPRECATED(QFUNC(isFeatureCameraActive),"3.14.0","CBA_fnc_getActiveFeatureCamera"); + !( isNull curatorCamera && // Curator {!GETMVAR(EGVAR(spectator,isSet),false)} && // ACE Spectator diff --git a/addons/common/functions/fnc_lightIntensityFromObject.sqf b/addons/common/functions/fnc_lightIntensityFromObject.sqf index 538246b537..246424ae4d 100644 --- a/addons/common/functions/fnc_lightIntensityFromObject.sqf +++ b/addons/common/functions/fnc_lightIntensityFromObject.sqf @@ -30,7 +30,7 @@ if (_lightSource isKindOf "CAManBase") then { private _flashlight = (_lightSource weaponAccessories _weapon) select 1; - if (getNumber (configFile >> "CfgWeapons" >> _flashlight >> "ACE_laserpointer") == 1) exitWith {_lightLevel = 0}; + if (getNumber (configFile >> "CfgWeapons" >> _flashlight >> "ACE_laserpointer") > 0) exitWith {}; // Red = 1, Green = 2 private _properties = [[_flashlight], FUNC(getLightPropertiesWeapon), uiNamespace, format [QEGVAR(cache,%1_%2), QUOTE(DFUNC(getLightPropertiesWeapon)), _flashlight], 1E11] call FUNC(cachedCall); //_properties = [_flashlight] call FUNC(getLightPropertiesWeapon); diff --git a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf index 277ba23a5d..e205fb15bf 100644 --- a/addons/common/functions/fnc_readSettingsFromParamsArray.sqf +++ b/addons/common/functions/fnc_readSettingsFromParamsArray.sqf @@ -1,4 +1,3 @@ -#define DEBUG_MODE_FULL #include "script_component.hpp" /* * Author: PabstMirror diff --git a/addons/common/functions/fnc_setupLocalUnitsHandler.sqf b/addons/common/functions/fnc_setupLocalUnitsHandler.sqf new file mode 100644 index 0000000000..5ff3aa5d05 --- /dev/null +++ b/addons/common/functions/fnc_setupLocalUnitsHandler.sqf @@ -0,0 +1,76 @@ +#include "script_component.hpp" +/* + * Author: dedmen + * Adds the local unit event handlers. + * Access with function `ace_common_fnc_getLocalUnits` or array `ace_common_localUnits` + * + * Arguments: + * Nothing + * + * Return Value: + * Nothing + * + * Example: + * [] call ace_common_fnc_setupLocalUnitsHandler + * + * Public: No + */ + +GVAR(localUnits) = []; + +// Eventhandlers to maintain array of localUnits +["CAManBase", "init", { + params ["_unit"]; + TRACE_2("unit init",_unit,local _unit); + + if (local _unit) then { + if (!alive _unit) exitWith {}; + GVAR(localUnits) pushBack _unit; + }; +}] call CBA_fnc_addClassEventHandler; + +["CAManBase", "respawn", { + params ["_unit"]; + TRACE_2("unit respawn",_unit,local _unit); + + if (local _unit) then { + if (!alive _unit) exitWith {}; + GVAR(localUnits) pushBack _unit; + }; +}] call CBA_fnc_addClassEventHandler; + +["CAManBase", "local", { + params ["_unit", "_local"]; + TRACE_2("unit local",_unit,_local); + + if (_local) then { + if (!alive _unit) exitWith {}; + GVAR(localUnits) pushBack _unit; + } else { + GVAR(localUnits) deleteAt (GVAR(localUnits) find _unit); + }; +}] call CBA_fnc_addClassEventHandler; + +["CAManBase", "deleted", { + params ["_unit"]; + TRACE_2("unit deleted",_unit,local _unit); + + if (local _unit) then { + [{ + params ["_unit"]; + TRACE_3("unit deleted nextFrame",_unit,local _unit,isNull _unit); + if (isNull _unit) then { // If it is not null then the deleted EH was Fake. + GVAR(localUnits) = GVAR(localUnits) - [objNull]; + }; + }, [_unit]] call CBA_fnc_execNextFrame; + }; +}] call CBA_fnc_addClassEventHandler; + +["CAManBase", "killed", { + params ["_unit"]; + TRACE_2("unit killed",_unit,local _unit); + + if (local _unit) then { + GVAR(localUnits) deleteAt (GVAR(localUnits) find _unit); + }; +}] call CBA_fnc_addClassEventHandler; diff --git a/addons/common/functions/fnc_toHex.sqf b/addons/common/functions/fnc_toHex.sqf index f9c82be373..697fbb9b6d 100644 --- a/addons/common/functions/fnc_toHex.sqf +++ b/addons/common/functions/fnc_toHex.sqf @@ -19,36 +19,4 @@ params ["_number"]; _number = ((round abs _number) max 0) min 255; -if (isNil QGVAR(hexArray)) then { - GVAR(hexArray) = []; - - private _minLength = 2; - - for [{_i = 0;}, {_i < 256}, {_i = _i + 1}] do { - private _num = _i; - private _hex = ["", "0"] select (_i == 0); - - while {_num > 0} do { - private _rest = _num mod 16; - _rest = switch _rest do { - case 10 : {"A"}; - case 11 : {"B"}; - case 12 : {"C"}; - case 13 : {"D"}; - case 14 : {"E"}; - case 15 : {"F"}; - default {str _rest}; - }; - _num = floor (_num / 16); - _hex = _rest + _hex; - }; - - while {count toArray _hex < _minLength} do { - _hex = "0" + _hex; - }; - - GVAR(hexArray) pushBack _hex; - }; -}; - GVAR(hexArray) select _number // return diff --git a/addons/common/scripts/checkVersionNumber.sqf b/addons/common/scripts/checkVersionNumber.sqf index b4858d38bf..5d4b1734e4 100644 --- a/addons/common/scripts/checkVersionNumber.sqf +++ b/addons/common/scripts/checkVersionNumber.sqf @@ -1,17 +1,17 @@ // by commy2 #include "script_component.hpp" -private _files = []; - -{ - if (_x find "a3_" != 0 && {_x find "ace_" != 0} && {!(toLower _x in (missionNamespace getVariable ["ACE_Version_Whitelist", []]))}) then { - _files pushBack _x; - }; -} forEach activatedAddons; +private _aceWhitelist = missionNamespace getVariable ["ACE_Version_Whitelist", []]; +private _files = CBA_common_addons select { + (_x select [0,3] != "a3_") && + {_x select [0,4] != "ace_"} && + {!((toLower _x) in _aceWhitelist)} +}; private _versions = []; { - private _version = parseNumber getText (configFile >> "CfgPatches" >> _x >> "version"); + getText (configFile >> "CfgPatches" >> _x >> "version") splitString "." params [["_major", "0"], ["_minor", "0"]]; + private _version = parseNumber _major + parseNumber _minor/100; _versions set [_forEachIndex, _version]; } forEach _files; @@ -88,11 +88,11 @@ if (!isServer) then { if (count _missingAddons > 0) then { _missingAddon = true; - private _error = format ["[ACE] %1: ERROR missing addon(s): ", _client]; + private _error = format ["[ACE] %1: ERROR client missing addon(s): ", _client]; { _error = _error + format ["%1, ", _x]; - if (_forEachIndex > 9) exitWith {};// + if (_forEachIndex > 9) exitWith {}; } forEach _missingAddons; _error = _error call _fnc_cutComma; @@ -105,11 +105,11 @@ if (!isServer) then { if (count _missingAddonsServer > 0) then { _missingAddonServer = true; - private _error = format ["[ACE] %1: ERROR missing server addon(s): ", _client]; + private _error = format ["[ACE] %1: ERROR server missing addon(s): ", _client]; { _error = _error + format ["%1, ", _x]; - if (_forEachIndex > 9) exitWith {};// + if (_forEachIndex > 9) exitWith {}; } forEach _missingAddonsServer; _error = _error call _fnc_cutComma; @@ -122,11 +122,11 @@ if (!isServer) then { if (count _oldVersionsClient > 0) then { _oldVersionClient = true; - private _error = format ["[ACE] %1: ERROR outdated addon(s): ", _client]; + private _error = format ["[ACE] %1: ERROR outdated client addon(s): ", _client]; { _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2]; - if (_forEachIndex > 9) exitWith {};// + if (_forEachIndex > 9) exitWith {}; } forEach _oldVersionsClient; _error = _error call _fnc_cutComma; @@ -143,7 +143,7 @@ if (!isServer) then { { _error = _error + format ["%1 (client: %2, server: %3), ", _x select 0, _x select 1, _x select 2]; - if (_forEachIndex > 9) exitWith {};// + if (_forEachIndex > 9) exitWith {}; } forEach _oldVersionsServer; _error = _error call _fnc_cutComma; diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 7a4a0bce48..4206a6adad 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,14 +1,15 @@ - + Common Allgemein - Comuni + Comune 全般 通用 通用 일반 + Ogólny ACE-Team @@ -482,6 +483,7 @@ 检查PBO动作 PBO 検査の挙動 PBO 검사 + Sprawdź akcję PBO Check PBO All @@ -490,6 +492,7 @@ 检查所有PBO PBO 全てを検査 모든 PBO 검사 + Sprawdź wszystkie PBO Check PBO Whitelist @@ -498,6 +501,7 @@ 检查PBO白名单 許可リスト内の PBO を検査 검사 제외 PBO + Sprawdź białą listę PBO Feedback icons @@ -636,6 +640,7 @@ Kontinuität des Laserpointers/Taktischen Lichts 保持武器雷射/手電筒的狀態 保持武器雷射/手电筒的状态 + Trwały znacznik laserowy/latarka Enable gunlight after weapon switch or vehicle enter/exit if it was previously enabled. @@ -646,6 +651,7 @@ Aktiviert Laserpointer/Taktisches Licht nach einem Waffenwechsel oder dem Auf-/Absitzen, falls es zuvor aktiv war. 保存武器雷射/手電筒的開關狀態,使玩家切換武器或進出載具時能保持之前的的狀態 保存武器雷射/手电筒的开关状态,使玩家切换武器或进出载具时能保持之前的的状态。 + Aktywuj znacznik laserowy/latarkę po zmianie broni lub wejściu/wyjściu z pojazdu, jeśli był on poprzednio włączony. Banana @@ -1171,6 +1177,7 @@ 允许调低音乐音量 音楽の音量低下を許可 Permesso di abbassare la musica + Zezwól na przyciszanie muzyki Allow ACE scripts to turn down the music. @@ -1180,6 +1187,7 @@ 允许ACE脚本去控制音乐的音量。 ACE スプリントへ音量低下を許可します。 Permetti agli script di ACEdi abbassare la musica. + Zezwól skrypty ACE na przyciszanie muzyki. Flag (ACE - Black) @@ -1187,6 +1195,7 @@ 旗幟(ACE-黑色) Bandiera (ACE - Nera) 旗 (ACE - 黒) + Flaga (ACE - Czarna) Flag (ACE - White) @@ -1194,6 +1203,7 @@ 旗幟(ACE-白色) Bandiera (ACE - Bianca) 旗 (ACE - 白) + Flaga (ACE - Biała) diff --git a/addons/concertina_wire/CfgEventHandlers.hpp b/addons/concertina_wire/CfgEventHandlers.hpp index b0ff603096..18883ae839 100644 --- a/addons/concertina_wire/CfgEventHandlers.hpp +++ b/addons/concertina_wire/CfgEventHandlers.hpp @@ -7,13 +7,13 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/concertina_wire/data/model.cfg b/addons/concertina_wire/data/model.cfg index 20845cfacb..b8e9fe75c9 100644 --- a/addons/concertina_wire/data/model.cfg +++ b/addons/concertina_wire/data/model.cfg @@ -1,290 +1,291 @@ class CfgSkeletons { - class Default { - isDiscrete = 1; - skeletonInherit = ""; - skeletonBones[] = {}; - }; - class ACE_SB_Skeleton: Default {}; - class ACE_ConcertinaSkeleton { - isDiscrete = 0; - skeletonInherit = ""; - skeletonBones[] = { - "1","", - "2","1", - "3","2", - "4","3", - "5","4", - "6","5", - "7","6", - "8","7", - "9","8", - "10","9", - "11","10", - "12","11", - "13","12", - "14","13", - "15","14", - "16","15", - "17","16", - "18","17", - "fix1","", - "fix2","", - "fix3","", - "fix4","" - }; - }; - class ace_tacticalladder_skeleton: Default { - isDiscrete = 0; - skeletonInherit = ""; - skeletonBones[] = { - "base","", - "1","base", - "2","1", - "3","2", - "4","3", - "5","4", - "6","5", - "7","6", - "8","7", - "9","8", - "10","9", - "11","10", - "step","11" - }; - }; + class Default { + isDiscrete = 1; + skeletonInherit = ""; + skeletonBones[] = {}; + }; + class ACE_SB_Skeleton: Default {}; + class ACE_ConcertinaSkeleton { + isDiscrete = 0; + skeletonInherit = ""; + skeletonBones[] = { + "1","", + "2","1", + "3","2", + "4","3", + "5","4", + "6","5", + "7","6", + "8","7", + "9","8", + "10","9", + "11","10", + "12","11", + "13","12", + "14","13", + "15","14", + "16","15", + "17","16", + "18","17", + "fix1","", + "fix2","", + "fix3","", + "fix4","" + }; + }; + class ace_tacticalladder_skeleton: Default { + isDiscrete = 0; + skeletonInherit = ""; + skeletonBones[] = { + "base","", + "1","base", + "2","1", + "3","2", + "4","3", + "5","4", + "6","5", + "7","6", + "8","7", + "9","8", + "10","9", + "11","10", + "step","11" + }; + }; }; class CfgModels { - class Default { - sectionsInherit=""; - sections[] = {""}; - skeletonName = ""; - }; - class ace_sandbag_build { - sectionsInherit = "Default"; - sections[] = {"zbytek"}; - skeletonName = "ACE_SB_Skeleton"; - }; - class ACE_ConcertinaWire { - skeletonName = "ACE_ConcertinaSkeleton"; - sections[] = {}; - sectionsInherit = ""; - class Animations { - class fix1 { - type="hide"; - source="user"; - selection="fix1"; - minValue = 0; - maxValue = 1; - minPhase = 0; - maxPhase = 1; - hideValue = 1; - }; - class fix2: fix1 { - selection="fix2"; - }; - class fix3: fix1 { - selection="fix3"; - }; - class fix4: fix1 { - selection="fix4"; - }; - class rotate { - type = "rotation"; - source = ""; - sourceAddress = "loop"; - selection = "1"; - axis = "rotate_axis"; - minValue = 0; - maxValue = 360; + class Default { + sectionsInherit=""; + sections[] = {""}; + skeletonName = ""; + }; + class ace_sandbag_build { + sectionsInherit = "Default"; + sections[] = {"zbytek"}; + skeletonName = "ACE_SB_Skeleton"; + }; + class ACE_ConcertinaWire { + skeletonName = "ACE_ConcertinaSkeleton"; + sections[] = {}; + sectionsInherit = ""; + class Animations { + class fix1 { + type="hide"; + source="user"; + selection="fix1"; + minValue = 0; + maxValue = 1; + minPhase = 0; + maxPhase = 1; + hideValue = 1; + }; + class fix2: fix1 { + selection="fix2"; + }; + class fix3: fix1 { + selection="fix3"; + }; + class fix4: fix1 { + selection="fix4"; + }; + class rotate { + type = "rotation"; + source = ""; + sourceAddress = "loop"; + selection = "1"; + axis = "rotate_axis"; + minValue = 0; + maxValue = 360; - angle0="rad -360"; - angle1="rad +360"; - }; - class wire_2 { - type = "translation"; - source = ""; - selection = "2"; - axis = "2_axis"; - animPeriod = 0; - minValue = 0; - maxValue = 1; - minPhase = 0; - maxPhase = 1; - offset0 = 0; - offset1 = -1; - }; - class wire_3: wire_2 { - selection = "3"; axis = "3_axis"; - }; - class wire_4: wire_2 { - selection = "4"; axis = "4_axis"; - }; - class wire_5: wire_2 { - selection = "5"; axis = "5_axis"; - }; - class wire_6: wire_2 { - selection = "6"; axis = "6_axis"; - }; - class wire_7: wire_2 { - selection = "7"; axis = "7_axis"; - }; - class wire_8: wire_2 { - selection = "8"; axis = "8_axis"; - }; - class wire_9: wire_2 { - selection = "9"; axis = "9_axis"; - }; - class wire_10: wire_2 { - selection = "10"; axis = "10_axis"; - }; - class wire_11: wire_2 { - selection = "11"; axis = "11_axis"; - }; - class wire_12: wire_2 { - selection = "12"; axis = "12_axis"; - }; - class wire_13: wire_2 { - selection = "13"; axis = "13_axis"; - }; - class wire_14: wire_2 { - selection = "14"; axis = "14_axis"; - }; - class wire_15: wire_2 { - selection = "15"; axis = "15_axis"; - }; - class wire_16: wire_2 { - selection = "16"; axis = "16_axis"; - }; - class wire_17: wire_2 { - selection = "17"; axis = "17_axis"; - }; - class wire_18: wire_2 { - selection = "18"; axis = "18_axis"; - }; - class wire_2_1: wire_2 { - selection = "2";axis = "2_axis";offset1 = -1; - }; - class wire_3_1: wire_2_1 { - selection = "3"; axis = "3_axis"; - }; - class wire_4_1: wire_2_1 { - selection = "4"; axis = "4_axis"; - }; - class wire_5_1: wire_2_1 { - selection = "5"; axis = "5_axis"; - }; - class wire_6_1: wire_2_1 { - selection = "6"; axis = "6_axis"; - }; - class wire_7_1: wire_2_1 { - selection = "7"; axis = "7_axis"; - }; - class wire_8_1: wire_2_1 { - selection = "8"; axis = "8_axis"; - }; - class wire_9_1: wire_2_1 { - selection = "9"; axis = "9_axis"; - }; - class wire_10_1: wire_2_1 { - selection = "10"; axis = "10_axis"; - }; - class wire_11_1: wire_2_1 { - selection = "11"; axis = "11_axis"; - }; - class wire_12_1: wire_2_1 { - selection = "12"; axis = "12_axis"; - }; - class wire_13_1: wire_2_1 { - selection = "13"; axis = "13_axis"; - }; - class wire_14_1: wire_2_1 { - selection = "14"; axis = "14_axis"; - }; - class wire_15_1: wire_2_1 { - selection = "15"; axis = "15_axis"; - }; - class wire_16_1: wire_2_1 { - selection = "16"; axis = "16_axis"; - }; - class wire_17_1: wire_2_1 { - selection = "17"; axis = "17_axis"; - }; - class wire_18_1: wire_2_1 { - selection = "18"; axis = "18_axis"; - }; - }; - }; - class ACE_ConcertinaWireNoGeo: ACE_ConcertinaWire {}; - class ace_tacticalladder { - skeletonName = "ace_tacticalladder_skeleton"; - sections[] = { "roadway" }; - sectionsInherit = ""; - class Animations { - class rotate { - type = "rotation"; - source = ""; - sourceAddress = "clamp"; - selection = "base"; - axis = "axis_rotate"; - minValue = 0; - maxValue = 90; - angle0="rad 0"; - angle1="rad +90"; - }; - class extract_1 { - type = "translation"; - source = ""; - selection = "1"; - axis = "axis_1"; - animPeriod = 0; - minValue = 0; - maxValue = 1; - minPhase = 0; - maxPhase = 1; - offset0 = 0; - offset1 = 0.82; - }; - class extract_2: extract_1 { - selection = "2"; - axis = "axis_2"; - }; - class extract_3: extract_1 { - selection = "3"; - axis = "axis_3"; - }; - class extract_4: extract_1 { - selection = "4"; - axis = "axis_4"; - }; - class extract_5: extract_1 { - selection = "5"; - axis = "axis_5"; - }; - class extract_6: extract_1 { - selection = "6"; - axis = "axis_6"; - }; - class extract_7: extract_1 { - selection = "7"; - axis = "axis_7"; - }; - class extract_8: extract_1 { - selection = "8"; - axis = "axis_8"; - }; - class extract_9: extract_1 { - selection = "9"; - axis = "axis_9"; - }; - class extract_10: extract_1 { - selection = "10"; - axis = "axis_10"; - }; - class extract_11: extract_1 { - selection = "11"; - axis = "axis_11"; - }; - }; - }; + angle0="rad -360"; + angle1="rad +360"; + }; + class wire_2 { + type = "translation"; + source = ""; + selection = "2"; + axis = "2_axis"; + animPeriod = 0; + minValue = 0; + maxValue = 1; + minPhase = 0; + maxPhase = 1; + offset0 = 0; + offset1 = -1; + }; + class wire_3: wire_2 { + selection = "3"; axis = "3_axis"; + }; + class wire_4: wire_2 { + selection = "4"; axis = "4_axis"; + }; + class wire_5: wire_2 { + selection = "5"; axis = "5_axis"; + }; + class wire_6: wire_2 { + selection = "6"; axis = "6_axis"; + }; + class wire_7: wire_2 { + selection = "7"; axis = "7_axis"; + }; + class wire_8: wire_2 { + selection = "8"; axis = "8_axis"; + }; + class wire_9: wire_2 { + selection = "9"; axis = "9_axis"; + }; + class wire_10: wire_2 { + selection = "10"; axis = "10_axis"; + }; + class wire_11: wire_2 { + selection = "11"; axis = "11_axis"; + }; + class wire_12: wire_2 { + selection = "12"; axis = "12_axis"; + }; + class wire_13: wire_2 { + selection = "13"; axis = "13_axis"; + }; + class wire_14: wire_2 { + selection = "14"; axis = "14_axis"; + }; + class wire_15: wire_2 { + selection = "15"; axis = "15_axis"; + }; + class wire_16: wire_2 { + selection = "16"; axis = "16_axis"; + }; + class wire_17: wire_2 { + selection = "17"; axis = "17_axis"; + }; + class wire_18: wire_2 { + selection = "18"; axis = "18_axis"; + }; + class wire_2_1: wire_2 { + selection = "2";axis = "2_axis";offset1 = -1; + }; + class wire_3_1: wire_2_1 { + selection = "3"; axis = "3_axis"; + }; + class wire_4_1: wire_2_1 { + selection = "4"; axis = "4_axis"; + }; + class wire_5_1: wire_2_1 { + selection = "5"; axis = "5_axis"; + }; + class wire_6_1: wire_2_1 { + selection = "6"; axis = "6_axis"; + }; + class wire_7_1: wire_2_1 { + selection = "7"; axis = "7_axis"; + }; + class wire_8_1: wire_2_1 { + selection = "8"; axis = "8_axis"; + }; + class wire_9_1: wire_2_1 { + selection = "9"; axis = "9_axis"; + }; + class wire_10_1: wire_2_1 { + selection = "10"; axis = "10_axis"; + }; + class wire_11_1: wire_2_1 { + selection = "11"; axis = "11_axis"; + }; + class wire_12_1: wire_2_1 { + selection = "12"; axis = "12_axis"; + }; + class wire_13_1: wire_2_1 { + selection = "13"; axis = "13_axis"; + }; + class wire_14_1: wire_2_1 { + selection = "14"; axis = "14_axis"; + }; + class wire_15_1: wire_2_1 { + selection = "15"; axis = "15_axis"; + }; + class wire_16_1: wire_2_1 { + selection = "16"; axis = "16_axis"; + }; + class wire_17_1: wire_2_1 { + selection = "17"; axis = "17_axis"; + }; + class wire_18_1: wire_2_1 { + selection = "18"; axis = "18_axis"; + }; + }; + }; + class ACE_ConcertinaWireCoil: Default {}; + class ACE_ConcertinaWireNoGeo: ACE_ConcertinaWire {}; + class ace_tacticalladder { + skeletonName = "ace_tacticalladder_skeleton"; + sections[] = { "roadway" }; + sectionsInherit = ""; + class Animations { + class rotate { + type = "rotation"; + source = ""; + sourceAddress = "clamp"; + selection = "base"; + axis = "axis_rotate"; + minValue = 0; + maxValue = 90; + angle0="rad 0"; + angle1="rad +90"; + }; + class extract_1 { + type = "translation"; + source = ""; + selection = "1"; + axis = "axis_1"; + animPeriod = 0; + minValue = 0; + maxValue = 1; + minPhase = 0; + maxPhase = 1; + offset0 = 0; + offset1 = 0.82; + }; + class extract_2: extract_1 { + selection = "2"; + axis = "axis_2"; + }; + class extract_3: extract_1 { + selection = "3"; + axis = "axis_3"; + }; + class extract_4: extract_1 { + selection = "4"; + axis = "axis_4"; + }; + class extract_5: extract_1 { + selection = "5"; + axis = "axis_5"; + }; + class extract_6: extract_1 { + selection = "6"; + axis = "axis_6"; + }; + class extract_7: extract_1 { + selection = "7"; + axis = "axis_7"; + }; + class extract_8: extract_1 { + selection = "8"; + axis = "axis_8"; + }; + class extract_9: extract_1 { + selection = "9"; + axis = "axis_9"; + }; + class extract_10: extract_1 { + selection = "10"; + axis = "axis_10"; + }; + class extract_11: extract_1 { + selection = "11"; + axis = "axis_11"; + }; + }; + }; }; diff --git a/addons/concertina_wire/stringtable.xml b/addons/concertina_wire/stringtable.xml index 6c510c56b7..78170d90b6 100644 --- a/addons/concertina_wire/stringtable.xml +++ b/addons/concertina_wire/stringtable.xml @@ -9,7 +9,7 @@ Alambre de espino Fill barbelé Ostnatý drát - Filo spinato di concertina + Filo a concertina Concertina wire Arame farpado 鉄条網 @@ -25,7 +25,7 @@ Bobina de alambre de espino Bobine de fil barbelé Svitek ostnatého drátu - Bobina di concertina + Bobina di filo a concertina Concertina wire coil Bobina de arame farpado 鉄条網コイル @@ -41,7 +41,7 @@ Desmontar alambre de espino Démonter le fil barbelé Svinout ostnatý drát - Smonta la concertina + Smonta il filo a concertina Dismount Concertina wire Desmontar arame farpado 鉄条網をほどく @@ -57,7 +57,7 @@ Desplegar alambre de espino Mettre en place le fil barbelé Rozvinout ostnatý drát - Posa il filo di concertina + Piazza il filo a concertina Deploy Concertina wire Colocar arame farpado 鉄条網を置く diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 653631c410..b561d0b89b 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,8 @@ 誘爆 쿡오프 Durchzündung + Cook off + Samozapłon Enable cook off @@ -18,7 +20,7 @@ 誘爆を有効化 쿡오프 현상 활성화 Aktywuj efekty samozapłonu amunicji - Active le cook-off + Activer le cook off Abilita Esplosione 開啟殉爆效果 开启殉爆效果 @@ -37,7 +39,7 @@ 开启此功能后,将使有关载具在损毁时有殉爆的效果。 - Wreck (Turret) + Wreck (Turret) Épave (tourelle) Restos (torreta) Rottami (torretta) @@ -45,7 +47,6 @@ Обломки (башня) Wrack (Geschützturm) Vrak (věž) - Wreck (Turret) Ruínas (torre) 잔해(포탑) 残骸 (砲塔) @@ -58,7 +59,7 @@ Durchzündung für Munitionskisten ermöglichen 탄약 상자 쿡오프 현상 활성화 Aktywuj samozapłon skrzyń z amunicją - Cook-off caisses de munitions + Cook off de caisses de munitions Abilita esplosione cassa munizioni 開啟彈藥箱殉爆效果 开启弹药箱殉爆效果 @@ -69,7 +70,7 @@ Ermöglicht Durchzündung von Munitionskisten. 탄약 상자에 쿡오프 현상을 적용합니다. Aktywuje samozapłon skrzyń z amunicją - Active le cook-off sur toutes les caisses de munitions. + Active le cook off sur toutes les caisses de munitions. Abilita l'esplosione della cassa di munizioni. 開啟彈藥箱殉爆效果 开启弹药箱殉爆效果 @@ -80,7 +81,7 @@ Durchzündung für Munition ermöglichen 탄약 쿡오프 현상 활성화 Aktywuj samozapłon amunicji - Active le cook-off des munitions + Activer le cook off des munitions Abilita Esplosione munizioni 開啟彈藥殉爆效果 开启弹药殉爆效果 @@ -101,7 +102,7 @@ Munitionsdurchzündungsdauer Czas trwania samozapłonu amunicji 弾薬の誘爆持続時間 - Durée cook-off des munitions + Durée de cook off des munitions Durata esplosione munizioni 彈藥殉爆效果持續時間 弹药殉爆效果持续时间 @@ -110,7 +111,7 @@ Multiplier for how long cook off lasts [Setting to 0 will disable ammo cookoff] Faktor für die Munitionsdurchzündungsdauer [0 zum Deaktivieren] - Multiplicateur de la durée du cook-off des munitions [Une valeur de 0 désactive l'effet] + Multiplicateur de la durée du cook off des munitions [Une valeur de 0 désactive l'effet] Mnożnik decydujący jak długo ma trwać samozapłon amunicji [Ustawienie na 0 spowoduje wyłącznie samozapłonu] 誘爆の持続時間を乗数で設定します。[0 に設定で誘爆を無効化] Moltiplicatore della durata dell'esplosione [Impostare 0 disabiliterà l'esplosione delle munizioni] @@ -125,6 +126,8 @@ Faktor für Wahrscheinlichkeit der Durchzündung 殉爆發生機率係數 殉爆发生机率系数 + Coefficient de probabilité du cook off + Współczynnik prawdopodobieństwa samozapłonu Multiplier for cook-off probability. Higher value results in higher cook-off probability @@ -133,6 +136,8 @@ Faktor für Wahrscheinlichkeit der Durchzündung. Ein höherer Wert führt zu höherer Durchzündungswahrscheinlichkeit. 調整殉爆發生機率係數。值越高代表越容易發生殉爆 调整殉爆发生机率系数。值越高代表越容易发生殉爆。 + Multiplicateur pour la probabilité du cook off. Plus la valeur est élevée, plus la probabilité de cook off est haute. + Mnożnik prawdopodobieństwa samozapłonu. Większa wartość oznacza większe prawdopodobieństwo samozapłonu diff --git a/addons/dagr/CfgEventHandlers.hpp b/addons/dagr/CfgEventHandlers.hpp index ccbe4f4abb..7694c8e745 100644 --- a/addons/dagr/CfgEventHandlers.hpp +++ b/addons/dagr/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; \ No newline at end of file diff --git a/addons/dagr/data/DAGR_NOHQ.paa b/addons/dagr/data/DAGR_nohq.paa similarity index 100% rename from addons/dagr/data/DAGR_NOHQ.paa rename to addons/dagr/data/DAGR_nohq.paa diff --git a/addons/dagr/data/DAGR.rvmat b/addons/dagr/data/dagr.rvmat similarity index 100% rename from addons/dagr/data/DAGR.rvmat rename to addons/dagr/data/dagr.rvmat diff --git a/addons/dagr/data/DAGR_CO.paa b/addons/dagr/data/dagr_co.paa similarity index 100% rename from addons/dagr/data/DAGR_CO.paa rename to addons/dagr/data/dagr_co.paa diff --git a/addons/dagr/functions/fnc_menuInit.sqf b/addons/dagr/functions/fnc_menuInit.sqf index 0425f1f4d2..c535ac1349 100644 --- a/addons/dagr/functions/fnc_menuInit.sqf +++ b/addons/dagr/functions/fnc_menuInit.sqf @@ -347,7 +347,7 @@ GVAR(menuRun) = true; GVAR(digit4) = floor (GVAR(wp0) / 10000 - GVAR(digit3) * 10 - GVAR(digit2) * 100 - GVAR(digit1) * 1000); GVAR(digit5) = floor (GVAR(wp0) / 1000 - GVAR(digit4) * 10 - GVAR(digit3) * 100 - GVAR(digit2) * 1000 - GVAR(digit1) * 10000); GVAR(digit6) = floor (GVAR(wp0) / 100 - GVAR(digit5) * 10 - GVAR(digit4) * 100 - GVAR(digit3) * 1000 - GVAR(digit2) * 10000 - GVAR(digit1) * 100000); - GVAR(digit7) = floor (GVAR(wp0) / 10- GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); + GVAR(digit7) = floor (GVAR(wp0) / 10 - GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); GVAR(digit8) = floor (GVAR(wp0) - GVAR(digit7) * 10 - GVAR(digit6) * 100 - GVAR(digit5) * 1000 - GVAR(digit4) * 10000 - GVAR(digit3) * 100000 - GVAR(digit2) * 1000000 - GVAR(digit1) * 10000000); }; case 1: { @@ -357,7 +357,7 @@ GVAR(menuRun) = true; GVAR(digit4) = floor (GVAR(wp1) / 10000 - GVAR(digit3) * 10 - GVAR(digit2) * 100 - GVAR(digit1) * 1000); GVAR(digit5) = floor (GVAR(wp1) / 1000 - GVAR(digit4) * 10 - GVAR(digit3) * 100 - GVAR(digit2) * 1000 - GVAR(digit1) * 10000); GVAR(digit6) = floor (GVAR(wp1) / 100 - GVAR(digit5) * 10 - GVAR(digit4) * 100 - GVAR(digit3) * 1000 - GVAR(digit2) * 10000 - GVAR(digit1) * 100000); - GVAR(digit7) = floor (GVAR(wp1) / 10- GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); + GVAR(digit7) = floor (GVAR(wp1) / 10 - GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); GVAR(digit8) = floor (GVAR(wp1) - GVAR(digit7) * 10 - GVAR(digit6) * 100 - GVAR(digit5) * 1000 - GVAR(digit4) * 10000 - GVAR(digit3) * 100000 - GVAR(digit2) * 1000000 - GVAR(digit1) * 10000000); }; case 2: { @@ -367,7 +367,7 @@ GVAR(menuRun) = true; GVAR(digit4) = floor (GVAR(wp2) / 10000 - GVAR(digit3) * 10 - GVAR(digit2) * 100 - GVAR(digit1) * 1000); GVAR(digit5) = floor (GVAR(wp2) / 1000 - GVAR(digit4) * 10 - GVAR(digit3) * 100 - GVAR(digit2) * 1000 - GVAR(digit1) * 10000); GVAR(digit6) = floor (GVAR(wp2) / 100 - GVAR(digit5) * 10 - GVAR(digit4) * 100 - GVAR(digit3) * 1000 - GVAR(digit2) * 10000 - GVAR(digit1) * 100000); - GVAR(digit7) = floor (GVAR(wp2) / 10- GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); + GVAR(digit7) = floor (GVAR(wp2) / 10 - GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); GVAR(digit8) = floor (GVAR(wp2) - GVAR(digit7) * 10 - GVAR(digit6) * 100 - GVAR(digit5) * 1000 - GVAR(digit4) * 10000 - GVAR(digit3) * 100000 - GVAR(digit2) * 1000000 - GVAR(digit1) * 10000000); }; case 3: { @@ -377,7 +377,7 @@ GVAR(menuRun) = true; GVAR(digit4) = floor (GVAR(wp3) / 10000 - GVAR(digit3) * 10 - GVAR(digit2) * 100 - GVAR(digit1) * 1000); GVAR(digit5) = floor (GVAR(wp3) / 1000 - GVAR(digit4) * 10 - GVAR(digit3) * 100 - GVAR(digit2) * 1000 - GVAR(digit1) * 10000); GVAR(digit6) = floor (GVAR(wp3) / 100 - GVAR(digit5) * 10 - GVAR(digit4) * 100 - GVAR(digit3) * 1000 - GVAR(digit2) * 10000 - GVAR(digit1) * 100000); - GVAR(digit7) = floor (GVAR(wp3) / 10- GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); + GVAR(digit7) = floor (GVAR(wp3) / 10 - GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); GVAR(digit8) = floor (GVAR(wp3) - GVAR(digit7) * 10 - GVAR(digit6) * 100 - GVAR(digit5) * 1000 - GVAR(digit4) * 10000 - GVAR(digit3) * 100000 - GVAR(digit2) * 1000000 - GVAR(digit1) * 10000000); }; case 4: { @@ -387,7 +387,7 @@ GVAR(menuRun) = true; GVAR(digit4) = floor (GVAR(wp4) / 10000 - GVAR(digit3) * 10 - GVAR(digit2) * 100 - GVAR(digit1) * 1000); GVAR(digit5) = floor (GVAR(wp4) / 1000 - GVAR(digit4) * 10 - GVAR(digit3) * 100 - GVAR(digit2) * 1000 - GVAR(digit1) * 10000); GVAR(digit6) = floor (GVAR(wp4) / 100 - GVAR(digit5) * 10 - GVAR(digit4) * 100 - GVAR(digit3) * 1000 - GVAR(digit2) * 10000 - GVAR(digit1) * 100000); - GVAR(digit7) = floor (GVAR(wp4) / 10- GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); + GVAR(digit7) = floor (GVAR(wp4) / 10 - GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); GVAR(digit8) = floor (GVAR(wp4) - GVAR(digit7) * 10 - GVAR(digit6) * 100 - GVAR(digit5) * 1000 - GVAR(digit4) * 10000 - GVAR(digit3) * 100000 - GVAR(digit2) * 1000000 - GVAR(digit1) * 10000000); }; }; @@ -457,7 +457,7 @@ GVAR(menuRun) = true; GVAR(digit4) = floor(_gridVector / 10000 - GVAR(digit3) * 10 - GVAR(digit2) * 100 - GVAR(digit1) * 1000); GVAR(digit5) = floor(_gridVector / 1000 - GVAR(digit4) * 10 - GVAR(digit3) * 100 - GVAR(digit2) * 1000 - GVAR(digit1) * 10000); GVAR(digit6) = floor(_gridVector / 100 - GVAR(digit5) * 10 - GVAR(digit4) * 100 - GVAR(digit3) * 1000 - GVAR(digit2) * 10000 - GVAR(digit1) * 100000); - GVAR(digit7) = floor(_gridVector / 10- GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); + GVAR(digit7) = floor(_gridVector / 10 - GVAR(digit6) * 10 - GVAR(digit5) * 100 - GVAR(digit4) * 1000 - GVAR(digit3) * 10000 - GVAR(digit2) * 100000 - GVAR(digit1) * 1000000); GVAR(digit8) = floor(_gridVector - GVAR(digit7) * 10 - GVAR(digit6) * 100 - GVAR(digit5) * 1000 - GVAR(digit4) * 10000 - GVAR(digit3) * 100000 - GVAR(digit2) * 1000000 - GVAR(digit1) * 10000000); }; if (GVAR(F3)) then { diff --git a/addons/disarming/config.cpp b/addons/disarming/config.cpp index e38f4346ab..5b81e5faf5 100644 --- a/addons/disarming/config.cpp +++ b/addons/disarming/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { units[] = {}; weapons[] = {"ACE_DebugPotato"}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ACE_Interaction"}; + requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); authors[] = {"PabstMirror"}; url = ECSTRING(main,URL); diff --git a/addons/disposable/functions/fnc_replaceATWeapon.sqf b/addons/disposable/functions/fnc_replaceATWeapon.sqf index a5ad1196f2..dcb5d93c1d 100644 --- a/addons/disposable/functions/fnc_replaceATWeapon.sqf +++ b/addons/disposable/functions/fnc_replaceATWeapon.sqf @@ -18,11 +18,14 @@ //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _vehicle, _gunner, _turret); -if (!local _unit || {_weapon != secondaryWeapon _unit}) exitWith {}; +if (!local _unit || {_weapon != secondaryWeapon _unit} || {_weapon != _muzzle}) exitWith {}; private _replacementTube = getText (configFile >> "CfgWeapons" >> _weapon >> "ACE_UsedTube"); if (_replacementTube == "") exitWith {}; //If no replacement defined just exit +// Save magazine of spotting muzzle (should be re-added to replacement weapon) +(((getUnitLoadout _unit) select 1) select 5) params [["_spottingMag", ""], ["_spottingRnds", 0]]; +if (_spottingMag != "") then { _unit addMagazine [_spottingMag, _spottingRnds]; }; //Save array of items attached to launcher private _items = secondaryWeaponItems _unit; //Replace the orginal weapon with the 'usedTube' weapon diff --git a/addons/dogtags/data/model.cfg b/addons/dogtags/data/model.cfg index cb919c9950..5c7a30c9fd 100644 --- a/addons/dogtags/data/model.cfg +++ b/addons/dogtags/data/model.cfg @@ -10,7 +10,7 @@ class CfgModels { class Default { sectionsInherit = ""; sections[] = {""}; - skeletonName = "Default"; + skeletonName = ""; }; class ace_dogtag: Default {}; }; diff --git a/addons/dogtags/functions/fnc_addDogtagActions.sqf b/addons/dogtags/functions/fnc_addDogtagActions.sqf index a9b36d8432..2911b27a92 100644 --- a/addons/dogtags/functions/fnc_addDogtagActions.sqf +++ b/addons/dogtags/functions/fnc_addDogtagActions.sqf @@ -17,17 +17,22 @@ params ["_player"]; -private _cfgWeapons = configFile >> "CfgWeapons"; -private _actions = []; +private _fnc_getActions = { + private _actions = []; + private _cfgWeapons = configFile >> "CfgWeapons"; -{ - private _config = _cfgWeapons >> _x; - if (getNumber (_config >> QGVAR(tagID)) > 0) then { - private _displayName = getText (_config >> "displayName"); - private _picture = getText (_config >> "picture"); - private _action = [_x, _displayName, _picture, {_this call FUNC(checkDogtagItem)}, {true}, {}, _x] call EFUNC(interact_menu,createAction); - _actions pushBack [_action, [], _player]; - }; -} forEach (_player call EFUNC(common,uniqueItems)); + { + private _config = _cfgWeapons >> _x; + if (getNumber (_config >> QGVAR(tagID)) > 0) then { + private _displayName = getText (_config >> "displayName"); + private _picture = getText (_config >> "picture"); -_actions + private _action = [_x, _displayName, _picture, FUNC(checkDogtagItem), {true}, {}, _x] call EFUNC(interact_menu,createAction); + _actions pushBack [_action, [], _player]; + }; + } forEach (_player call EFUNC(common,uniqueItems)); + + _actions +}; + +[[], _fnc_getActions, _player, QGVAR(actionsCache), 9999, "cba_events_loadoutEvent"] call EFUNC(common,cachedCall); diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml index c53ce132e8..45d2e827d7 100644 --- a/addons/dogtags/stringtable.xml +++ b/addons/dogtags/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -83,6 +83,8 @@ Onscreen display for checking dogtags 在畫面中顯示檢查兵籍牌 確認中のドッグタグを画面上で表示します + Display su schermo per il controllo delle piastrine + Wyświetlacz ekranowy dla sprawdzania nieśmiertelników diff --git a/addons/dragging/CfgVehicles.hpp b/addons/dragging/CfgVehicles.hpp index 9d5389efd8..4c43dd814e 100644 --- a/addons/dragging/CfgVehicles.hpp +++ b/addons/dragging/CfgVehicles.hpp @@ -171,7 +171,7 @@ class CfgVehicles { GVAR(canDrag) = 1; GVAR(dragPosition[]) = {0,1.2,0}; - GVAR(dragDirection) = 0; + GVAR(dragDirection) = 270; }; class MetalCase_01_base_F: Items_base_F { class EventHandlers { @@ -213,7 +213,7 @@ class CfgVehicles { }; GVAR(canCarry) = 1; GVAR(carryPosition[]) = {0,1,1}; - GVAR(carryDirection) = 270; + GVAR(carryDirection) = 0; GVAR(canDrag) = 1; GVAR(dragPosition[]) = {0,1.4,0}; diff --git a/addons/dragging/config.cpp b/addons/dragging/config.cpp index 8747ee44ea..c3f5d0dd84 100644 --- a/addons/dragging/config.cpp +++ b/addons/dragging/config.cpp @@ -8,7 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); - authors[] = {"Garth 'L-H' de Wet", "commy2"}; + authors[] = {"Garth 'L-H' de Wet", "commy2", "PiZZADOX"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; diff --git a/addons/dragging/functions/fnc_canCarry.sqf b/addons/dragging/functions/fnc_canCarry.sqf index 4e09cedbdc..b5edbd800c 100644 --- a/addons/dragging/functions/fnc_canCarry.sqf +++ b/addons/dragging/functions/fnc_canCarry.sqf @@ -27,4 +27,4 @@ if ((_unit getHitPointDamage "HitLegs") >= 0.5) exitWith {false}; // a static weapon has to be empty for dragging (ignore UAV AI) if (((typeOf _target) isKindOf "StaticWeapon") && {{(getText (configFile >> "CfgVehicles" >> (typeOf _x) >> "simulation")) != "UAVPilot"} count crew _target > 0}) exitWith {false}; -alive _target && {vehicle _target == _target} && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getVariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})} +alive _target && {vehicle _target isEqualto _target} && {_target getVariable [QGVAR(canCarry), false]} && {animationState _target in ["", "unconscious"] || (_target getVariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})} diff --git a/addons/dragging/functions/fnc_canDrag.sqf b/addons/dragging/functions/fnc_canDrag.sqf index 81a8537586..dbae83521b 100644 --- a/addons/dragging/functions/fnc_canDrag.sqf +++ b/addons/dragging/functions/fnc_canDrag.sqf @@ -23,4 +23,4 @@ if !([_unit, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)) exi // a static weapon has to be empty for dragging (ignore UAV AI) if ((typeOf _target) isKindOf "StaticWeapon" && {{(getText (configFile >> "CfgVehicles" >> (typeOf _x) >> "simulation")) != "UAVPilot"} count crew _target > 0}) exitWith {false}; -alive _target && {vehicle _target == _target} && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getVariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})}; +alive _target && {vehicle _target isEqualto _target} && {_target getVariable [QGVAR(canDrag), false]} && {animationState _target in ["", "unconscious"] || (_target getVariable ["ACE_isUnconscious", false]) || (_target isKindOf "CAManBase" && {(_target getHitPointDamage "HitLegs") > 0.4})} diff --git a/addons/dragging/functions/fnc_carryObjectPFH.sqf b/addons/dragging/functions/fnc_carryObjectPFH.sqf index 6361dcc66d..6204bbae62 100644 --- a/addons/dragging/functions/fnc_carryObjectPFH.sqf +++ b/addons/dragging/functions/fnc_carryObjectPFH.sqf @@ -24,7 +24,7 @@ #endif params ["_args", "_idPFH"]; -_args params ["_unit","_target", "_startTime"]; +_args params ["_unit", "_target", "_startTime"]; if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith { TRACE_2("carry false",_unit,_target); @@ -35,7 +35,7 @@ if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith { if (!alive _target || {_unit distance _target > 10}) then { TRACE_2("dead/distance",_unit,_target); if ((_unit distance _target > 10) && {(CBA_missionTime - _startTime) < 1}) exitWith { - //attachTo seems to have some kind of network delay and target can return an odd position durring the first few frames, + //attachTo seems to have some kind of network delay and target can return an odd position during the first few frames, //so wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos) TRACE_3("ignoring bad distance at start",_unit distance _target,_startTime,CBA_missionTime); }; diff --git a/addons/dragging/functions/fnc_dragObjectPFH.sqf b/addons/dragging/functions/fnc_dragObjectPFH.sqf index dd18e0c825..a45a26ae89 100644 --- a/addons/dragging/functions/fnc_dragObjectPFH.sqf +++ b/addons/dragging/functions/fnc_dragObjectPFH.sqf @@ -24,7 +24,7 @@ #endif params ["_args", "_idPFH"]; -_args params ["_unit","_target", "_startTime"]; +_args params ["_unit", "_target", "_startTime"]; if !(_unit getVariable [QGVAR(isDragging), false]) exitWith { TRACE_2("drag false",_unit,_target); @@ -35,7 +35,7 @@ if !(_unit getVariable [QGVAR(isDragging), false]) exitWith { if (!alive _target || {_unit distance _target > 10}) then { TRACE_2("dead/distance",_unit,_target); if ((_unit distance _target > 10) && {(CBA_missionTime - _startTime) < 1}) exitWith { - //attachTo seems to have some kind of network delay and target can return an odd position durring the first few frames, + //attachTo seems to have some kind of network delay and target can return an odd position during the first few frames, //so wait a full second to exit if out of range (this is critical as we would otherwise detach and set it's pos to weird pos) TRACE_3("ignoring bad distance at start",_unit distance _target,_startTime,CBA_missionTime); }; diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf index fde2a7f6d7..84bbd90342 100644 --- a/addons/dragging/functions/fnc_dropObject.sqf +++ b/addons/dragging/functions/fnc_dropObject.sqf @@ -76,3 +76,10 @@ if (_unit getVariable ["ACE_isUnconscious", false]) then { if (_target getVariable [QGVAR(isUAV), false]) then { createVehicleCrew _target; }; + +// reset mass +private _mass = _target getVariable [QGVAR(originalMass), 0]; + +if (_mass != 0) then { + [QEGVAR(common,setMass), [_target, _mass], _target] call CBA_fnc_targetEvent; +}; diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf index ae7bd3598e..b6507898ca 100644 --- a/addons/dragging/functions/fnc_dropObject_carry.sqf +++ b/addons/dragging/functions/fnc_dropObject_carry.sqf @@ -17,7 +17,7 @@ */ params ["_unit", "_target"]; -TRACE_2("params",_unit,_target); +TRACE_1("params",_this); // remove drop action [_unit, "DefaultAction", _unit getVariable [QGVAR(ReleaseActionID), -1]] call EFUNC(common,removeActionEventHandler); @@ -76,3 +76,10 @@ if !(_target isKindOf "CAManBase") then { if (_target getVariable [QGVAR(isUAV), false]) then { createVehicleCrew _target; }; + +// reset mass +private _mass = _target getVariable [QGVAR(originalMass), 0]; + +if (_mass != 0) then { + [QEGVAR(common,setMass), [_target, _mass], _target] call CBA_fnc_targetEvent; +}; diff --git a/addons/dragging/functions/fnc_setCarryable.sqf b/addons/dragging/functions/fnc_setCarryable.sqf index 12e2b74a8c..6ec0abb466 100644 --- a/addons/dragging/functions/fnc_setCarryable.sqf +++ b/addons/dragging/functions/fnc_setCarryable.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: commy2 + * Author: commy2, PiZZADOX * Enable the object to be carried. * * Arguments: @@ -8,17 +8,19 @@ * 1: true to enable carrying, false to disable * 2: Position offset for attachTo command (default: [0,1,1]) * 3: Direction in degree to rotate the object after attachTo (default: 0) + * 4: Override weight limit (optional; default: false) * * Return Value: * None * * Example: - * [object, true, [0,1,1], 0] call ace_dragging_fnc_setCarryable; + * [object, true, [0,1,1], 0, false] call ace_dragging_fnc_setCarryable; * * Public: Yes */ -params ["_object", "_enableCarry", "_position", "_direction"]; +//IGNORE_PRIVATE_WARNING ["_player", "_target"]; +params ["_object", "_enableCarry", "_position", "_direction", ["_ignoreWeightCarry", false, [false]]]; if (isNil "_position") then { _position = _object getVariable [QGVAR(carryPosition), [0,1,1]]; @@ -32,6 +34,7 @@ if (isNil "_direction") then { _object setVariable [QGVAR(canCarry), _enableCarry]; _object setVariable [QGVAR(carryPosition), _position]; _object setVariable [QGVAR(carryDirection), _direction]; +_object setVariable [QGVAR(ignoreWeightCarry), _ignoreWeightCarry]; // add action to class if it is not already present private _type = typeOf _object; diff --git a/addons/dragging/functions/fnc_setDraggable.sqf b/addons/dragging/functions/fnc_setDraggable.sqf index 36f42dd9f6..50a07b515b 100644 --- a/addons/dragging/functions/fnc_setDraggable.sqf +++ b/addons/dragging/functions/fnc_setDraggable.sqf @@ -1,25 +1,26 @@ #include "script_component.hpp" /* - * Author: commy2 + * Author: commy2, PiZZADOX * Enable the object to be dragged. * * Arguments: * 0: Any object * 1: true to enable dragging, false to disable - * 2: Position offset for attachTo command (optinal; default: [0,0,0]) + * 2: Position offset for attachTo command (optional; default: [0,0,0]) * 3: Direction in degree to rotate the object after attachTo (optional; default: 0) + * 4: Override weight limit (optional; default: false) * * Return Value: * None * * Example: - * [object, true, [0,0,0], 0] call ace_dragging_fnc_setDraggable; + * [object, true, [0,0,0], 0, false] call ace_dragging_fnc_setDraggable; * * Public: Yes */ //IGNORE_PRIVATE_WARNING ["_player", "_target"]; -params ["_object", "_enableDrag", "_position", "_direction"]; +params ["_object", "_enableDrag", "_position", "_direction", ["_ignoreWeightDrag", false, [false]]]; if (isNil "_position") then { _position = _object getVariable [QGVAR(dragPosition), [0,0,0]]; @@ -33,6 +34,7 @@ if (isNil "_direction") then { _object setVariable [QGVAR(canDrag), _enableDrag]; _object setVariable [QGVAR(dragPosition), _position]; _object setVariable [QGVAR(dragDirection), _direction]; +_object setVariable [QGVAR(ignoreWeightDrag), _ignoreWeightDrag]; // add action to class if it is not already present private _type = typeOf _object; diff --git a/addons/dragging/functions/fnc_startCarry.sqf b/addons/dragging/functions/fnc_startCarry.sqf index 5d7bc86815..729fec2a4e 100644 --- a/addons/dragging/functions/fnc_startCarry.sqf +++ b/addons/dragging/functions/fnc_startCarry.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: commy2 + * Author: commy2, PiZZADOX * Start the carrying process. * * Arguments: @@ -19,10 +19,12 @@ params ["_unit", "_target"]; TRACE_2("params",_unit,_target); -// check weight -private _weight = [_target] call FUNC(getWeight); - -if (_weight > missionNamespace getVariable ["ACE_maxWeightCarry", 1E11]) exitWith { +// exempt from weight check if object has override variable set +if (!GETVAR(_target,GVAR(ignoreWeightCarry),false) && { + private _weight = [_target] call FUNC(getWeight); + _weight > GETMVAR(ACE_maxWeightCarry,1E11) +}) exitWith { + // exit if object weight is over global var value [localize LSTRING(UnableToDrag)] call EFUNC(common,displayTextStructured); }; @@ -32,7 +34,7 @@ private _timer = CBA_missionTime + 5; if (_target isKindOf "CAManBase") then { // add a primary weapon if the unit has none. - if (primaryWeapon _unit == "") then { + if (primaryWeapon _unit isEqualto "") then { _unit addWeapon "ACE_FakePrimaryWeapon"; }; @@ -71,3 +73,11 @@ _unit setVariable [QGVAR(isCarrying), true, true]; _unit setVariable [QGVAR(carriedObject), _target, true]; [FUNC(startCarryPFH), 0.2, [_unit, _target, _timer]] call CBA_fnc_addPerFrameHandler; + +// disable collisions by setting the physx mass to almost zero +private _mass = getMass _target; + +if (_mass > 1) then { + _target setVariable [QGVAR(originalMass), _mass, true]; + [QEGVAR(common,setMass), [_target, 1e-12], _target] call CBA_fnc_targetEvent; +}; diff --git a/addons/dragging/functions/fnc_startCarryPFH.sqf b/addons/dragging/functions/fnc_startCarryPFH.sqf index 89f9f232ed..f2c5cfb5d2 100644 --- a/addons/dragging/functions/fnc_startCarryPFH.sqf +++ b/addons/dragging/functions/fnc_startCarryPFH.sqf @@ -35,7 +35,7 @@ if !(_unit getVariable [QGVAR(isCarrying), false]) exitWith { // same as dragObjectPFH, checks if object is deleted or dead OR (target moved away from carrier (weapon disasembled)) if (!alive _target || {_unit distance _target > 10}) then { TRACE_4("dead/distance",_unit,_target,_timeOut,CBA_missionTime); - [_unit, _target] call FUNC(dropObject); + [_unit, _target] call FUNC(dropObject_carry); [_idPFH] call CBA_fnc_removePerFrameHandler; }; @@ -54,11 +54,11 @@ if (_target isKindOf "CAManBase") then { // drop if in timeout private _draggedObject = _unit getVariable [QGVAR(draggedObject), objNull]; - [_unit, _draggedObject] call FUNC(dropObject); + [_unit, _draggedObject] call FUNC(dropObject_carry); }; // wait for the unit to stand up - if (stance _unit == "STAND") exitWith { + if (stance _unit isEqualto "STAND") exitWith { TRACE_4("Start carry object",_unit,_target,_timeOut,CBA_missionTime); [_unit, _target] call FUNC(carryObject); diff --git a/addons/dragging/functions/fnc_startDrag.sqf b/addons/dragging/functions/fnc_startDrag.sqf index b926a972ce..7a4c8908d3 100644 --- a/addons/dragging/functions/fnc_startDrag.sqf +++ b/addons/dragging/functions/fnc_startDrag.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: commy2 + * Author: commy2, PiZZADOX * Start the dragging process. * * Arguments: @@ -19,16 +19,18 @@ params ["_unit", "_target"]; TRACE_2("params",_unit,_target); -// check weight -private _weight = [_target] call FUNC(getWeight); - -if (_weight > missionNamespace getVariable ["ACE_maxWeightDrag", 1E11]) exitWith { +// exempt from weight check if object has override variable set +if (!GETVAR(_target,GVAR(ignoreWeightDrag),false) && { + private _weight = [_target] call FUNC(getWeight); + _weight > GETMVAR(ACE_maxWeightDrag,1E11) +}) exitWith { + // exit if object weight is over global var value [localize LSTRING(UnableToDrag)] call EFUNC(common,displayTextStructured); }; // add a primary weapon if the unit has none. // @todo prevent opening inventory when equipped with a fake weapon -if (primaryWeapon _unit == "") then { +if (primaryWeapon _unit isEqualto "") then { _unit addWeapon "ACE_FakePrimaryWeapon"; }; @@ -59,3 +61,11 @@ if (_target isKindOf "CAManBase") then { _unit setVariable [QGVAR(isDragging), true, true]; [FUNC(startDragPFH), 0.2, [_unit, _target, CBA_missionTime + 5]] call CBA_fnc_addPerFrameHandler; + +// disable collisions by setting the physx mass to almost zero +private _mass = getMass _target; + +if (_mass > 1) then { + _target setVariable [QGVAR(originalMass), _mass, true]; + [QEGVAR(common,setMass), [_target, 1e-12], _target] call CBA_fnc_targetEvent; +}; diff --git a/addons/explosives/CfgAmmo.hpp b/addons/explosives/CfgAmmo.hpp index c79030d2ab..722fbf213c 100644 --- a/addons/explosives/CfgAmmo.hpp +++ b/addons/explosives/CfgAmmo.hpp @@ -65,6 +65,7 @@ class CfgAmmo { GVAR(size) = 0; }; + // "The SLAM has an anti-tamper feature that is only active in the bottom- and side-attack modes." class SLAMDirectionalMine_Wire_Ammo: DirectionalBombBase { indirectHitRange = 20; GVAR(explodeOnDefuseChance) = 1; @@ -77,10 +78,11 @@ class CfgAmmo { }; class ACE_SLAMDirectionalMine_Timer_Ammo: SLAMDirectionalMine_Wire_Ammo { mineTrigger = "TimeTrigger"; + GVAR(explodeOnDefuseChance) = 0; }; class ACE_SLAMDirectionalMine_Magnetic_Ammo: SLAMDirectionalMine_Wire_Ammo { mineTrigger = "ACE_MagneticTrigger"; - GVAR(explodeOnDefuseChance) = 0; + GVAR(explodeOnDefuseChance) = 1; explosionAngle = 360; indirectHitRange = 1; mineInconspicuousness = 25; @@ -165,16 +167,16 @@ class CfgAmmo { class ACE_IEDLandSmall_Range_Ammo: IEDLandBig_Remote_Ammo { mineTrigger = "RangeTriggerShort"; }; - + // Orange DLC: - class APERSMineDispenser_Ammo: PipeBombBase { + class APERSMineDispenser_Ammo: PipeBombBase { GVAR(magazine) = "APERSMineDispenser_Mag"; GVAR(Explosive) = "APERSMineDispenser_Ammo_Scripted"; // triggerWhenDestroyed = 1; GVAR(size) = 0; GVAR(defuseObjectPosition)[] = {0.0, -0.05, 0.15}; }; class APERSMine_Range_Ammo; - class TrainingMine_Ammo: APERSMine_Range_Ammo { + class TrainingMine_Ammo: APERSMine_Range_Ammo { GVAR(magazine) = "TrainingMine_Mag"; GVAR(size) = 0; GVAR(defuseObjectPosition)[] = {0, 0, 0.15}; diff --git a/addons/explosives/CfgEventHandlers.hpp b/addons/explosives/CfgEventHandlers.hpp index e25f1e14ab..d2137371ec 100644 --- a/addons/explosives/CfgEventHandlers.hpp +++ b/addons/explosives/CfgEventHandlers.hpp @@ -37,3 +37,9 @@ class Extended_DisplayLoad_EventHandlers { ADDON = QUOTE(_this call COMPILE_FILE(XEH_missionDisplayLoad)); }; }; + +class Extended_Init_EventHandlers { + class ACE_Explosives_Place_SLAM { + ADDON = QUOTE(params ['_mine']; if (local _mine) then {_mine setCenterOfMass [ARR_3(0,-0.035,0.05)]; _mine setMass 5}); + }; +}; diff --git a/addons/explosives/functions/fnc_openTimerUI.sqf b/addons/explosives/functions/fnc_openTimerUI.sqf index 05d340e8dd..b7715d08a2 100644 --- a/addons/explosives/functions/fnc_openTimerUI.sqf +++ b/addons/explosives/functions/fnc_openTimerUI.sqf @@ -15,6 +15,9 @@ * Public: No */ +#define TIMER_VALUE_MIN_CUSTOM (missionNamespace getVariable [QGVAR(customTimerMin), TIMER_VALUE_MIN]) +#define TIMER_VALUE_MAX_CUSTOM (missionNamespace getVariable [QGVAR(customTimerMax), TIMER_VALUE_MAX]) + params ["_explosive"]; TRACE_1("Opening timer UI",_explosive); @@ -23,6 +26,9 @@ private _display = uiNamespace getVariable [QGVAR(timerDisplay), displayNull]; // Update slider speed to 1s (_display displayCtrl IDC_TIMER_SLIDER) sliderSetSpeed [1, 1]; +(_display displayCtrl IDC_TIMER_SLIDER) sliderSetRange [TIMER_VALUE_MIN_CUSTOM, TIMER_VALUE_MAX_CUSTOM]; +(_display displayCtrl IDC_TIMER_SLIDER) sliderSetPosition (TIMER_VALUE_DEFAULT max TIMER_VALUE_MIN_CUSTOM min TIMER_VALUE_MAX_CUSTOM); + // Add confirm button action GVAR(explosive) = _explosive; @@ -52,7 +58,7 @@ _display displayAddEventHandler ["MouseZChanged", { if (cba_events_control) then {_change = _change * 10}; private _slider = _display displayCtrl IDC_TIMER_SLIDER; - private _value = (sliderPosition _slider + _change) max TIMER_VALUE_MIN min TIMER_VALUE_MAX; + private _value = (sliderPosition _slider + _change) max TIMER_VALUE_MIN_CUSTOM min TIMER_VALUE_MAX_CUSTOM; _slider sliderSetPosition _value; }]; diff --git a/addons/explosives/functions/fnc_setupExplosive.sqf b/addons/explosives/functions/fnc_setupExplosive.sqf index 8bc4343430..a85580f672 100644 --- a/addons/explosives/functions/fnc_setupExplosive.sqf +++ b/addons/explosives/functions/fnc_setupExplosive.sqf @@ -118,14 +118,15 @@ GVAR(TweakedAngle) = 0; private _virtualPosASL = _basePosASL vectorAdd (_lookDirVector vectorMultiply _distanceFromBase); - //Update mouse hint: + // Update mouse hint + private _ctrlTextLMB = (uiNamespace getVariable [QEGVAR(interaction,mouseHint), displayNull]) displayCtrl 2420; if (_badPosition) then { - ((uiNamespace getVariable ["ACE_Helper_Display", objNull]) displayCtrl 1000) ctrlSetText localize LSTRING(BlockedAction); + _ctrlTextLMB ctrlSetText localize LSTRING(BlockedAction); } else { if (isNull _attachVehicle) then { - ((uiNamespace getVariable ["ACE_Helper_Display", objNull]) displayCtrl 1000) ctrlSetText localize LSTRING(PlaceAction); + _ctrlTextLMB ctrlSetText localize LSTRING(PlaceAction); } else { - ((uiNamespace getVariable ["ACE_Helper_Display", objNull]) displayCtrl 1000) ctrlSetText localize LSTRING(AttachAction); + _ctrlTextLMB ctrlSetText localize LSTRING(AttachAction); }; }; diff --git a/addons/explosives/functions/fnc_spawnFlare.sqf b/addons/explosives/functions/fnc_spawnFlare.sqf index 5531d11340..5c6038c2e2 100644 --- a/addons/explosives/functions/fnc_spawnFlare.sqf +++ b/addons/explosives/functions/fnc_spawnFlare.sqf @@ -22,4 +22,6 @@ private _flare = "ACE_TripFlare_FlareEffect" createVehicle [_posX,_posY,_posZ]; TRACE_1("",_flare); +["ace_tripflareTriggered", [_flare, [_posX,_posY,_posZ]]] call CBA_fnc_globalEvent; + nil diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index c06378c583..8923f1c5dd 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -618,7 +618,7 @@ Nincs elérhető gyújtóeszköz ide: %1 Nenhum gatilho disponível para %1 Нет доступных взрывателей для %1 - %1 につかえる点火装置がありません + %1 に使える点火装置がありません %1(을)를 작동할 장치가 없습니다. 没有适合%1的触发器 沒有適合%1的觸發器 @@ -698,7 +698,7 @@ Usado para detonar remotamente o explosivo quando solto. Используется для дистанционного подрыва, после смерти оператора. Usato per attivare a distanza esplosivi al momento del rilascio - 点火装置を遠隔から離すと起爆したいときに使います。 + 点火装置から遠隔から起爆したい時に使います。 압력이 해제될때 원격으로 폭발시킵니다. 当放开按钮时, 将会引爆炸弹. 當放開按鈕時, 將會引爆炸彈. @@ -1026,9 +1026,13 @@ 爆炸范围 爆炸範圍 Raggio di detonazione + Zasięg wybuchu Explosive Timer + Timer di detonazione + 爆発タイマー + Czasomierz Wybuchu diff --git a/addons/fastroping/CfgVehicles.hpp b/addons/fastroping/CfgVehicles.hpp index 05ef487325..6dfd06ff72 100644 --- a/addons/fastroping/CfgVehicles.hpp +++ b/addons/fastroping/CfgVehicles.hpp @@ -7,7 +7,7 @@ expression = QUOTE(if (_value) then {[_this] call FUNC(equipFRIES)}); \ typeName = "BOOL"; \ condition = "objectVehicle"; \ - defaultValue = false; \ + defaultValue = "(false)"; \ }; \ } @@ -40,33 +40,48 @@ class CfgVehicles { class ACE_SelfActions { class ACE_prepareFRIES { displayName = CSTRING(Interaction_prepareFRIES); - condition = QUOTE([vehicle _player] call FUNC(canPrepareFRIES)); - statement = QUOTE([vehicle _player] call FUNC(prepareFRIES)); - showDisabled = 0; + condition = QUOTE([_target] call FUNC(canPrepareFRIES)); + statement = QUOTE([_target] call FUNC(prepareFRIES)); }; class ACE_stowFRIES { displayName = CSTRING(Interaction_stowFRIES); - condition = QUOTE([vehicle _player] call FUNC(canStowFRIES)); - statement = QUOTE([vehicle _player] call FUNC(stowFRIES)); - showDisabled = 0; + condition = QUOTE([_target] call FUNC(canStowFRIES)); + statement = QUOTE([_target] call FUNC(stowFRIES)); }; - class ACE_deployRopes { - displayName = CSTRING(Interaction_deployRopes); - condition = QUOTE([ARR_2(_player, vehicle _player)] call FUNC(canDeployRopes)); - statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [vehicle _player])] call CBA_fnc_serverEvent); - showDisabled = 0; + class ACE_deployRopes12 { + displayName = CSTRING(Interaction_deployRopes12); + condition = QUOTE([ARR_3(_target, _player, 'ACE_rope12')] call FUNC(canDeployRopes)); + statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [ARR_3(_target, _player, 'ACE_rope12'))]] call CBA_fnc_serverEvent); + }; + class ACE_deployRopes15 { + displayName = CSTRING(Interaction_deployRopes15); + condition = QUOTE([ARR_3(_target, _player, 'ACE_rope15')] call FUNC(canDeployRopes)); + statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [ARR_3(_target, _player, 'ACE_rope15'))]] call CBA_fnc_serverEvent); + }; + class ACE_deployRopes18 { + displayName = CSTRING(Interaction_deployRopes18); + condition = QUOTE([ARR_3(_target, _player, 'ACE_rope18')] call FUNC(canDeployRopes)); + statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [ARR_3(_target, _player, 'ACE_rope18'))]] call CBA_fnc_serverEvent); + }; + class ACE_deployRopes27 { + displayName = CSTRING(Interaction_deployRopes27); + condition = QUOTE([ARR_3(_target, _player, 'ACE_rope27')] call FUNC(canDeployRopes)); + statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [ARR_3(_target, _player, 'ACE_rope27'))]] call CBA_fnc_serverEvent); + }; + class ACE_deployRopes36 { + displayName = CSTRING(Interaction_deployRopes36); + condition = QUOTE([ARR_4(_target, _player, 'ACE_rope36', true)] call FUNC(canDeployRopes)); + statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [ARR_3(_target, _player, 'ACE_rope36'))]] call CBA_fnc_serverEvent); }; class ACE_cutRopes { displayName = CSTRING(Interaction_cutRopes); - condition = [vehicle _player] call FUNC(canCutRopes); - statement = [vehicle _player] call FUNC(cutRopes); - showDisabled = 0; + condition = [_target] call FUNC(canCutRopes); + statement = [_target] call FUNC(cutRopes); }; class ACE_fastRope { displayName = CSTRING(Interaction_fastRope); - condition = [_player, vehicle _player] call FUNC(canFastRope); - statement = [_player, vehicle _player] call FUNC(fastRope); - showDisabled = 0; + condition = [_player, _target] call FUNC(canFastRope); + statement = [_player, _target] call FUNC(fastRope); }; }; }; @@ -252,4 +267,20 @@ class CfgVehicles { }; }; }; + class NATO_Box_Base; + class ACE_fastropingSupplyCrate: NATO_Box_Base { + scope = 2; + scopeCurator = 2; + accuracy = 1000; + displayName = CSTRING(Ropesupply); + model = "\A3\Weapons_F\AmmoBoxes\Box_NATO_AmmoVeh_F.p3d"; + author = "Pokertour"; + class TransportItems { + MACRO_ADDITEM(ACE_rope12,15); + MACRO_ADDITEM(ACE_rope15,15); + MACRO_ADDITEM(ACE_rope18,15); + MACRO_ADDITEM(ACE_rope27,15); + MACRO_ADDITEM(ACE_rope36,15); + }; + }; }; diff --git a/addons/fastroping/CfgWeapons.hpp b/addons/fastroping/CfgWeapons.hpp new file mode 100644 index 0000000000..116497c6fa --- /dev/null +++ b/addons/fastroping/CfgWeapons.hpp @@ -0,0 +1,60 @@ +class CfgWeapons { + class ACE_ItemCore; + class CBA_MiscItem_ItemInfo; + + class ACE_rope12: ACE_ItemCore { + scope = 2; + GVAR(ropeLength) = 12.2; + picture = QPATHTOF(data\m_rope_ca); + model = "\A3\Structures_F_Heli\Items\Tools\Rope_01_F.p3d"; + displayName = CSTRING(Rope_12_Display); + descriptionShort = CSTRING(descriptionShort); + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 36; + }; + }; + class ACE_rope15: ACE_ItemCore { + scope = 2; + GVAR(ropeLength) = 15.2; + picture = QPATHTOF(data\m_rope_ca); + model = "\A3\Structures_F_Heli\Items\Tools\Rope_01_F.p3d"; + displayName = CSTRING(Rope_15_Display); + descriptionShort = CSTRING(descriptionShort); + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 45; + }; + }; + class ACE_rope18: ACE_ItemCore { + scope = 2; + GVAR(ropeLength) = 18.3; + picture = QPATHTOF(data\m_rope_ca); + model = "\A3\Structures_F_Heli\Items\Tools\Rope_01_F.p3d"; + displayName = CSTRING(Rope_18_Display); + descriptionShort = CSTRING(descriptionShort); + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 54; + }; + }; + class ACE_rope27: ACE_ItemCore { + scope = 2; + GVAR(ropeLength) = 27.4; + picture = QPATHTOF(data\m_rope_ca); + model = "\A3\Structures_F_Heli\Items\Tools\Rope_01_F.p3d"; + displayName = CSTRING(Rope_27_Display); + descriptionShort = CSTRING(descriptionShort); + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 81; + }; + }; + class ACE_rope36: ACE_ItemCore { + scope = 2; + GVAR(ropeLength) = 36.6; + picture = QPATHTOF(data\m_rope_ca); + model = "\A3\Structures_F_Heli\Items\Tools\Rope_01_F.p3d"; + displayName = CSTRING(Rope_36_Display); + descriptionShort = CSTRING(descriptionShort); + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 108; + }; + }; +}; diff --git a/addons/fastroping/XEH_preInit.sqf b/addons/fastroping/XEH_preInit.sqf index b47cf6628d..9361d05015 100644 --- a/addons/fastroping/XEH_preInit.sqf +++ b/addons/fastroping/XEH_preInit.sqf @@ -6,4 +6,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/fastroping/anim/model.cfg b/addons/fastroping/anim/model.cfg index be41a523a8..942b917d47 100644 --- a/addons/fastroping/anim/model.cfg +++ b/addons/fastroping/anim/model.cfg @@ -1,124 +1,118 @@ -class cfgSkeletons -{ - class OFP2_ManSkeleton - { +class cfgSkeletons { + class OFP2_ManSkeleton { isDiscrete = 0; skeletonInherit = ""; - SkeletonBones[]= - { + skeletonBones[] = { "Pelvis","", - "Spine","Pelvis", - "Spine1","Spine", - "Spine2","Spine1", - "Spine3","Spine2", + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", "camera","Pelvis",// case has changed for arma3 - "weapon","Spine1", - "launcher","Spine1", - //Head skeleton in hierarchy - "Neck","Spine3", - "Neck1","Neck", - "Head","Neck1", - - //Left upper side - "LeftShoulder","Spine3", - "LeftArm","LeftShoulder", - "LeftArmRoll","LeftArm", - "LeftForeArm","LeftArmRoll", - "LeftForeArmRoll","LeftForeArm", - "LeftHand","LeftForeArmRoll", - "LeftHandRing","LeftHand", - "LeftHandRing1","LeftHandRing", - "LeftHandRing2","LeftHandRing1", - "LeftHandRing3","LeftHandRing2", - "LeftHandPinky1","LeftHandRing", - "LeftHandPinky2","LeftHandPinky1", - "LeftHandPinky3","LeftHandPinky2", - "LeftHandMiddle1","LeftHand", - "LeftHandMiddle2","LeftHandMiddle1", - "LeftHandMiddle3","LeftHandMiddle2", - "LeftHandIndex1","LeftHand", - "LeftHandIndex2","LeftHandIndex1", - "LeftHandIndex3","LeftHandIndex2", - "LeftHandThumb1","LeftHand", - "LeftHandThumb2","LeftHandThumb1", - "LeftHandThumb3","LeftHandThumb2", - //Right upper side - "RightShoulder","Spine3", - "RightArm","RightShoulder", - "RightArmRoll","RightArm", - "RightForeArm","RightArmRoll", - "RightForeArmRoll","RightForeArm", - "RightHand","RightForeArmRoll", - "RightHandRing","RightHand", - "RightHandRing1","RightHandRing", - "RightHandRing2","RightHandRing1", - "RightHandRing3","RightHandRing2", - "RightHandPinky1","RightHandRing", - "RightHandPinky2","RightHandPinky1", - "RightHandPinky3","RightHandPinky2", - "RightHandMiddle1","RightHand", - "RightHandMiddle2","RightHandMiddle1", - "RightHandMiddle3","RightHandMiddle2", - "RightHandIndex1","RightHand", - "RightHandIndex2","RightHandIndex1", - "RightHandIndex3","RightHandIndex2", - "RightHandThumb1","RightHand", - "RightHandThumb2","RightHandThumb1", - "RightHandThumb3","RightHandThumb2", - //Left lower side - "LeftUpLeg","Pelvis", - "LeftUpLegRoll","LeftUpLeg", - "LeftLeg","LeftUpLegRoll", - "LeftLegRoll","LeftLeg", - "LeftFoot","LeftLegRoll", - "LeftToeBase","LeftFoot", - //Right lower side - "RightUpLeg","Pelvis", - "RightUpLegRoll","RightUpLeg", - "RightLeg","RightUpLegRoll", - "RightLegRoll","RightLeg", - "RightFoot","RightLegRoll", - "RightToeBase","RightFoot", - + "weapon","Spine1", + "launcher","Spine1", + "Neck","Spine3", + "Neck1","Neck", + "Head","Neck1", //Head skeleton in hierarchy + //Left upper side + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", + //Right upper side + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot", //New facial features arma3 only - "Face_Hub","Head", - "Face_Jawbone","Face_Hub", - "Face_Jowl","Face_Jawbone", - "Face_chopRight","Face_Jawbone", - "Face_chopLeft","Face_Jawbone", - "Face_LipLowerMiddle","Face_Jawbone", - "Face_LipLowerLeft","Face_Jawbone", - "Face_LipLowerRight","Face_Jawbone", - "Face_Chin","Face_Jawbone", - "Face_Tongue","Face_Jawbone", - "Face_CornerRight","Face_Hub", - "Face_CheekSideRight","Face_CornerRight", - "Face_CornerLeft","Face_Hub", - "Face_CheekSideLeft","Face_CornerLeft", - "Face_CheekFrontRight","Face_Hub", - "Face_CheekFrontLeft","Face_Hub", - "Face_CheekUpperRight","Face_Hub", - "Face_CheekUpperLeft","Face_Hub", - "Face_LipUpperMiddle","Face_Hub", - "Face_LipUpperRight","Face_Hub", - "Face_LipUpperLeft","Face_Hub", - "Face_NostrilRight","Face_Hub", - "Face_NostrilLeft","Face_Hub", - "Face_Forehead","Face_Hub", - "Face_BrowFrontRight","Face_Forehead", - "Face_BrowFrontLeft","Face_Forehead", - "Face_BrowMiddle","Face_Forehead", - "Face_BrowSideRight","Face_Forehead", - "Face_BrowSideLeft","Face_Forehead", - "Face_Eyelids","Face_Hub", - "Face_EyelidUpperRight","Face_Hub", - "Face_EyelidUpperLeft","Face_Hub", - "Face_EyelidLowerRight","Face_Hub", - "Face_EyelidLowerLeft","Face_Hub", - "EyeLeft","Face_Hub", - "EyeRight","Face_Hub" + "Face_Hub","Head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub" };// end of skeleton array // location of pivot points (local axes) for hierarchical animation - pivotsModel="Samples_F\TemplateRTM\ManSkeleton_Pivots.p3d"; + pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; }; }; diff --git a/addons/fastroping/config.cpp b/addons/fastroping/config.cpp index f2bf1d4a5e..98dfd26742 100644 --- a/addons/fastroping/config.cpp +++ b/addons/fastroping/config.cpp @@ -8,7 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_interaction"}; author = ECSTRING(common,ACETeam); - authors[] = {"KoffeinFlummi", "BaerMitUmlaut"}; + authors[] = {"KoffeinFlummi", "BaerMitUmlaut", "Pokertour"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; @@ -19,3 +19,4 @@ class CfgPatches { #include "CfgSounds.hpp" #include "CfgVehicles.hpp" #include "CfgWaypoints.hpp" +#include "CfgWeapons.hpp" diff --git a/addons/fastroping/data/friesAnchorBar.rvmat b/addons/fastroping/data/friesanchorbar.rvmat similarity index 100% rename from addons/fastroping/data/friesAnchorBar.rvmat rename to addons/fastroping/data/friesanchorbar.rvmat diff --git a/addons/fastroping/data/friesGantry.rvmat b/addons/fastroping/data/friesgantry.rvmat similarity index 100% rename from addons/fastroping/data/friesGantry.rvmat rename to addons/fastroping/data/friesgantry.rvmat diff --git a/addons/fastroping/data/m_rope_ca.paa b/addons/fastroping/data/m_rope_ca.paa new file mode 100644 index 0000000000..b6744b8a77 Binary files /dev/null and b/addons/fastroping/data/m_rope_ca.paa differ diff --git a/addons/fastroping/data/model.cfg b/addons/fastroping/data/model.cfg index 3291e7a509..34ff31ae7d 100644 --- a/addons/fastroping/data/model.cfg +++ b/addons/fastroping/data/model.cfg @@ -110,4 +110,5 @@ class CfgModels { }; }; }; + class helper: Default {}; }; diff --git a/addons/fastroping/functions/fnc_canDeployRopes.sqf b/addons/fastroping/functions/fnc_canDeployRopes.sqf index 5bc770c01d..26b514368b 100644 --- a/addons/fastroping/functions/fnc_canDeployRopes.sqf +++ b/addons/fastroping/functions/fnc_canDeployRopes.sqf @@ -4,27 +4,30 @@ * Checks if the unit can deploy ropes from the helicopter. * * Arguments: - * 0: Unit occupying the helicopter - * 1: The helicopter itself + * 0: The helicopter itself + * 1: Unit occupying the helicopter + * 2: Rope classname + * 3: Default (show when setting disabled) (default: false) * * Return Value: * Able to deploy ropes * * Example: - * [_player, _vehicle] call ace_fastroping_fnc_canDeployRopes + * [vehicle player, player, "ACE_rope36"] call ace_fastroping_fnc_canDeployRopes * * Public: No */ -params ["_unit", "_vehicle"]; +params ["_vehicle", "_player", "_ropeClass", ["_defaultOption", false]]; private _config = configFile >> "CfgVehicles" >> typeOf _vehicle; -private _enabled = getNumber (_config >> QGVAR(enabled)); -private _deploymentStage = _vehicle getVariable [QGVAR(deploymentStage), 0]; -(driver _vehicle != _unit) && -{getPos _vehicle select 2 > 2} && -{_enabled == 1 || {_enabled == 2 && {!(isNull (_vehicle getVariable [QGVAR(FRIES), objNull]))}}} && -{ - (_deploymentStage == 0 && {getText (_config >> QGVAR(onPrepare)) == ""}) || - {_deploymentStage == 2 && {getText (_config >> QGVAR(onPrepare)) != ""}} +(driver _vehicle != _player) && +{getPos _vehicle select 2 > 2} && { + private _enabled = getNumber (_config >> QGVAR(enabled)); + _enabled == 1 || {_enabled == 2 && {!(isNull (_vehicle getVariable [QGVAR(FRIES), objNull]))}} +} && { + private _deploymentStage = _vehicle getVariable [QGVAR(deploymentStage), 0]; + if (getText (_config >> QGVAR(onPrepare)) == "") then { _deploymentStage == 0 } else { _deploymentStage == 2 }; +} && { + (_defaultOption && {!GVAR(requireRopeItems)}) || {(_ropeClass in (_player call EFUNC(common,uniqueItems))) || {_ropeClass in (itemCargo _vehicle)}} } diff --git a/addons/fastroping/functions/fnc_deployRopes.sqf b/addons/fastroping/functions/fnc_deployRopes.sqf index bd286fb08d..2873e5bee1 100644 --- a/addons/fastroping/functions/fnc_deployRopes.sqf +++ b/addons/fastroping/functions/fnc_deployRopes.sqf @@ -5,22 +5,36 @@ * * Arguments: * 0: The helicopter itself + * 1: The unit that called the action (may be remote) + * 2: Rope classname * * Return Value: * None * * Example: - * [_vehicle] call ace_fastroping_fnc_deployRopes + * [vehicle player, player, "ACE_rope36"] call ace_fastroping_fnc_deployRopes * * Public: No */ -params ["_vehicle"]; +params ["_vehicle", "_player", "_ropeClass"]; +TRACE_3("deployRopes",_vehicle,_player,_ropeClass); private _config = configFile >> "CfgVehicles" >> typeOf _vehicle; private _ropeOrigins = getArray (_config >> QGVAR(ropeOrigins)); private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; private _hookAttachment = _vehicle getVariable [QGVAR(FRIES), _vehicle]; + +private _ropeLength = getNumber (configfile >> "CfgWeapons" >> _ropeClass >> QGVAR(ropeLength)); +TRACE_3("",_ropeClass,_ropeLength,GVAR(requireRopeItems)); +if (GVAR(requireRopeItems)) then { + if (_ropeClass in (items _player)) then { + _player removeItem _ropeClass; + } else { + _vehicle removeItem _ropeClass; + }; +}; + { private _ropeOrigin = _x; private _hook = QGVAR(helper) createVehicle [0, 0, 0]; @@ -39,7 +53,7 @@ private _hookAttachment = _vehicle getVariable [QGVAR(FRIES), _vehicle]; private _ropeTop = ropeCreate [_dummy, [0, 0, 0], _hook, [0, 0, 0], 0.5]; private _ropeBottom = ropeCreate [_dummy, [0, 0, 0], 1]; - ropeUnwind [_ropeBottom, 30, 34.5, false]; + ropeUnwind [_ropeBottom, 30, _ropelength, false]; _ropeTop addEventHandler ["RopeBreak", {[_this, "top"] call FUNC(onRopeBreak)}]; _ropeBottom addEventHandler ["RopeBreak", {[_this, "bottom"] call FUNC(onRopeBreak)}]; @@ -52,3 +66,4 @@ private _hookAttachment = _vehicle getVariable [QGVAR(FRIES), _vehicle]; _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; _vehicle setVariable [QGVAR(deploymentStage), 3, true]; +_vehicle setVariable [QGVAR(ropeLength), _ropeLength, true]; diff --git a/addons/fastroping/functions/fnc_fastRope.sqf b/addons/fastroping/functions/fnc_fastRope.sqf index 9deb95b1a6..39f7cc38c9 100644 --- a/addons/fastroping/functions/fnc_fastRope.sqf +++ b/addons/fastroping/functions/fnc_fastRope.sqf @@ -16,6 +16,7 @@ * Public: No */ params ["_unit", "_vehicle"]; +TRACE_2("fastRope",_unit,_vehicle); //Select unoccupied rope private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; diff --git a/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf index ed9cad2255..16df3f3e95 100644 --- a/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf +++ b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf @@ -28,8 +28,11 @@ if (isNull _hook) exitWith { [_pfhHandle] call CBA_fnc_removePerFrameHandler; }; +private _ropeLength = _vehicle getVariable [QGVAR(ropeLength), 34.5]; + //Start fast roping if (getMass _dummy != 80) exitWith { + TRACE_1("unwinding ropes",_ropeLength); //Fix for twitchyness _dummy setMass 80; _dummy setCenterOfMass [0, 0, -2]; @@ -37,7 +40,7 @@ if (getMass _dummy != 80) exitWith { _dummy setPosASL (_origin vectorAdd [0, 0, -2]); _dummy setVectorUp [0, 0, 1]; - ropeUnwind [_ropeTop, 6, 34.5]; + ropeUnwind [_ropeTop, 6, _ropeLength]; ropeUnwind [_ropeBottom, 6, 0.5]; }; @@ -59,7 +62,7 @@ _dummy setVelocity [0,0,-6]; //Check if fast rope is finished if ( ((getPos _unit select 2) < 0.2) - || {ropeLength _ropeTop == 34.5} + || {ropeLength _ropeTop == _ropeLength} || {vectorMagnitude (velocity _vehicle) > 5} || {!([_unit] call EFUNC(common,isAwake))} ) exitWith { @@ -77,7 +80,7 @@ if ( _dummy setCenterOfMass [0.000143227,0.00105986,-0.246147]; _ropeTop = ropeCreate [_dummy, [0, 0, 0], _hook, [0, 0, 0], 0.5]; - _ropeBottom = ropeCreate [_dummy, [0, 0, 0], 34.5]; + _ropeBottom = ropeCreate [_dummy, [0, 0, 0], _ropeLength]; _ropeTop addEventHandler ["RopeBreak", {[_this, "top"] call FUNC(onRopeBreak)}]; _ropeBottom addEventHandler ["RopeBreak", {[_this, "bottom"] call FUNC(onRopeBreak)}]; diff --git a/addons/fastroping/initSettings.sqf b/addons/fastroping/initSettings.sqf new file mode 100644 index 0000000000..d88a6982d0 --- /dev/null +++ b/addons/fastroping/initSettings.sqf @@ -0,0 +1,11 @@ +// CBA Settings [ADDON: ace_fastroping]: + +[ + QGVAR(requireRopeItems), "CHECKBOX", + [LSTRING(setting_requireRopeItems_displayName)], + ["ACE Uncategorized", QUOTE(COMPONENT_BEAUTIFIED)], + false, // default value + true, // isGlobal + {[QGVAR(requireRopeItems), _this] call EFUNC(common,cbaSettings_settingChanged)}, + false // needRestart +] call CBA_settings_fnc_init; diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml index 8c8e4ee600..71a2f17038 100644 --- a/addons/fastroping/stringtable.xml +++ b/addons/fastroping/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -26,7 +26,7 @@ Vybavit kompatibilní vrtulníky systémem Fast Rope Insertion Extraction (FRIES). Equipa um helicóptero compatível com o Fast Rope Insertion Exctraction System. Снаряжает совместимые вертолеты оборудованием для спуска десанта по канатам. - ヘリコプターで Fast Rope Insertion Extraction System を使えるようにします + ヘリコプターで Fast Rope Insertion Extraction System を使えるようにします。 패스트로프 투입 및 탈출 시스템을 호환되는 헬리콥터에 적용합니다. 使可相容的直升机启用快速绳降及撤离系统 使可相容的直升機啟用快速繩降及撤離系統 @@ -54,6 +54,7 @@ 收起快速繩降系統 收起快速绳降系统 패스트 로프 시스템 보관 + Schowaj system zjazdu na linach Deploy ropes @@ -143,5 +144,83 @@ 讓單位快速繩降 패스트 로프를 놓음 + + Deploy 12m ropes + Déployer les cordes 12m + 12m ロープを展開 + Wysuń linę o długości 12 m. + + + Deploy 15m ropes + Déployer les cordes 15m + 15m ロープを展開 + Wysuń linę o długości 15 m. + + + Deploy 18m ropes + Déployer les cordes 18m + 18m ロープを展開 + Wysuń linę o długości 18 m. + + + Deploy 27m ropes + Déployer les cordes 27m + 27m ロープを展開 + Wysuń linę o długości 27 m. + + + Deploy 36m ropes + Déployer les cordes 36m + 36m ロープを展開 + Wysuń linę o długości 36 m. + + + [ACE] Ropes Supply crate + [ACE] Caisse de Cordes + [ACE] ロープ収納箱 + Skrzynia z linami ACE + + + Used to do deploy ropes from a compatibile helicopter + Utilisé pour déployer des cordes depuis un hélicoptère compatible + 対応するヘリコプターからロープを展開する為に使用されます + Używane do opuszczania lin z kompatybilnych smigłowców + + + Rope 12.2 meters + Corde 12.2 mètres + ロープ (12.2 メートル) + Lina, długość 12,2 m. + + + Rope 15.2 meters + Corde 15.2 mètres + ロープ (15.2 メートル) + Lina, długość 15,2 m. + + + Rope 18.3 meters + Corde 18.3 mètres + ロープ (18.3 メートル) + Lina, długość 18,3 m. + + + Rope 27.4 meters + Corde 27.4 mètres + ロープ (27.4 メートル) + Lina, długość 27,4 m. + + + Rope 36.6 meters + Corde 36.6 mètres + ロープ (36.6 メートル) + Lina, długość 36,6 m. + + + Require rope item to deploy + Exiger une corde pour déployer + 展開にはロープ アイテムを必須に + Wymaga przedmiotu typu lina + diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index 96bab972cf..24941404c5 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,8 @@ 指向标记器 指差し 가리키기 + Pointage + Wskazywanie Show pointing indicator to self diff --git a/addons/flashlights/CfgEventHandlers.hpp b/addons/flashlights/CfgEventHandlers.hpp index 30381d7200..58b84ad864 100644 --- a/addons/flashlights/CfgEventHandlers.hpp +++ b/addons/flashlights/CfgEventHandlers.hpp @@ -1,6 +1,6 @@ class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient) ); + clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient)); }; }; diff --git a/addons/flashlights/CfgWeapons.hpp b/addons/flashlights/CfgWeapons.hpp index 9623b4d069..41bfd4a8bb 100644 --- a/addons/flashlights/CfgWeapons.hpp +++ b/addons/flashlights/CfgWeapons.hpp @@ -16,7 +16,6 @@ class CfgWeapons { ACE_Flashlight_Colour = "red"; ACE_Flashlight_Beam = QPATHTOF(UI\Flashlight_beam_red_ca.paa); ACE_Flashlight_Size = 1.75; - ACE_Flashlight_Sound = 1; }; }; }; @@ -34,7 +33,6 @@ class CfgWeapons { ACE_Flashlight_Colour = "red"; ACE_Flashlight_Beam = QPATHTOF(UI\Flashlight_beam_red_ca.paa); ACE_Flashlight_Size = 1.5; - ACE_Flashlight_Sound = 1; }; }; }; @@ -52,7 +50,6 @@ class CfgWeapons { ACE_Flashlight_Colour = "white"; ACE_Flashlight_Beam = QPATHTOF(UI\Flashlight_beam_white_ca.paa); ACE_Flashlight_Size = 2.15; - ACE_Flashlight_Sound = 1; }; }; }; diff --git a/addons/flashlights/data/KSF_1.rvmat b/addons/flashlights/data/ksf_1.rvmat similarity index 100% rename from addons/flashlights/data/KSF_1.rvmat rename to addons/flashlights/data/ksf_1.rvmat diff --git a/addons/flashlights/data/KSF_1_co.paa b/addons/flashlights/data/ksf_1_co.paa similarity index 100% rename from addons/flashlights/data/KSF_1_co.paa rename to addons/flashlights/data/ksf_1_co.paa diff --git a/addons/flashlights/data/Maglite.rvmat b/addons/flashlights/data/maglite.rvmat similarity index 100% rename from addons/flashlights/data/Maglite.rvmat rename to addons/flashlights/data/maglite.rvmat diff --git a/addons/flashlights/data/Maglite_co.paa b/addons/flashlights/data/maglite_co.paa similarity index 100% rename from addons/flashlights/data/Maglite_co.paa rename to addons/flashlights/data/maglite_co.paa diff --git a/addons/flashlights/data/MX_991.rvmat b/addons/flashlights/data/mx_991.rvmat similarity index 100% rename from addons/flashlights/data/MX_991.rvmat rename to addons/flashlights/data/mx_991.rvmat diff --git a/addons/flashlights/data/MX_991_co.paa b/addons/flashlights/data/mx_991_co.paa similarity index 100% rename from addons/flashlights/data/MX_991_co.paa rename to addons/flashlights/data/mx_991_co.paa diff --git a/addons/flashlights/stringtable.xml b/addons/flashlights/stringtable.xml index 0a14c18735..418c10cc6a 100644 --- a/addons/flashlights/stringtable.xml +++ b/addons/flashlights/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -98,6 +98,7 @@ 地图上手电的颜色 地圖上使用手電筒的顏色 Colore della luce sulla mappa + Kolor światła na mapie diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 427ae9fbee..d5a3091969 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/gestures/cfgMovesBasic.hpp b/addons/gestures/CfgMovesBasic.hpp similarity index 100% rename from addons/gestures/cfgMovesBasic.hpp rename to addons/gestures/CfgMovesBasic.hpp diff --git a/addons/gestures/anim/model.cfg b/addons/gestures/anim/model.cfg index be41a523a8..942b917d47 100644 --- a/addons/gestures/anim/model.cfg +++ b/addons/gestures/anim/model.cfg @@ -1,124 +1,118 @@ -class cfgSkeletons -{ - class OFP2_ManSkeleton - { +class cfgSkeletons { + class OFP2_ManSkeleton { isDiscrete = 0; skeletonInherit = ""; - SkeletonBones[]= - { + skeletonBones[] = { "Pelvis","", - "Spine","Pelvis", - "Spine1","Spine", - "Spine2","Spine1", - "Spine3","Spine2", + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", "camera","Pelvis",// case has changed for arma3 - "weapon","Spine1", - "launcher","Spine1", - //Head skeleton in hierarchy - "Neck","Spine3", - "Neck1","Neck", - "Head","Neck1", - - //Left upper side - "LeftShoulder","Spine3", - "LeftArm","LeftShoulder", - "LeftArmRoll","LeftArm", - "LeftForeArm","LeftArmRoll", - "LeftForeArmRoll","LeftForeArm", - "LeftHand","LeftForeArmRoll", - "LeftHandRing","LeftHand", - "LeftHandRing1","LeftHandRing", - "LeftHandRing2","LeftHandRing1", - "LeftHandRing3","LeftHandRing2", - "LeftHandPinky1","LeftHandRing", - "LeftHandPinky2","LeftHandPinky1", - "LeftHandPinky3","LeftHandPinky2", - "LeftHandMiddle1","LeftHand", - "LeftHandMiddle2","LeftHandMiddle1", - "LeftHandMiddle3","LeftHandMiddle2", - "LeftHandIndex1","LeftHand", - "LeftHandIndex2","LeftHandIndex1", - "LeftHandIndex3","LeftHandIndex2", - "LeftHandThumb1","LeftHand", - "LeftHandThumb2","LeftHandThumb1", - "LeftHandThumb3","LeftHandThumb2", - //Right upper side - "RightShoulder","Spine3", - "RightArm","RightShoulder", - "RightArmRoll","RightArm", - "RightForeArm","RightArmRoll", - "RightForeArmRoll","RightForeArm", - "RightHand","RightForeArmRoll", - "RightHandRing","RightHand", - "RightHandRing1","RightHandRing", - "RightHandRing2","RightHandRing1", - "RightHandRing3","RightHandRing2", - "RightHandPinky1","RightHandRing", - "RightHandPinky2","RightHandPinky1", - "RightHandPinky3","RightHandPinky2", - "RightHandMiddle1","RightHand", - "RightHandMiddle2","RightHandMiddle1", - "RightHandMiddle3","RightHandMiddle2", - "RightHandIndex1","RightHand", - "RightHandIndex2","RightHandIndex1", - "RightHandIndex3","RightHandIndex2", - "RightHandThumb1","RightHand", - "RightHandThumb2","RightHandThumb1", - "RightHandThumb3","RightHandThumb2", - //Left lower side - "LeftUpLeg","Pelvis", - "LeftUpLegRoll","LeftUpLeg", - "LeftLeg","LeftUpLegRoll", - "LeftLegRoll","LeftLeg", - "LeftFoot","LeftLegRoll", - "LeftToeBase","LeftFoot", - //Right lower side - "RightUpLeg","Pelvis", - "RightUpLegRoll","RightUpLeg", - "RightLeg","RightUpLegRoll", - "RightLegRoll","RightLeg", - "RightFoot","RightLegRoll", - "RightToeBase","RightFoot", - + "weapon","Spine1", + "launcher","Spine1", + "Neck","Spine3", + "Neck1","Neck", + "Head","Neck1", //Head skeleton in hierarchy + //Left upper side + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", + //Right upper side + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot", //New facial features arma3 only - "Face_Hub","Head", - "Face_Jawbone","Face_Hub", - "Face_Jowl","Face_Jawbone", - "Face_chopRight","Face_Jawbone", - "Face_chopLeft","Face_Jawbone", - "Face_LipLowerMiddle","Face_Jawbone", - "Face_LipLowerLeft","Face_Jawbone", - "Face_LipLowerRight","Face_Jawbone", - "Face_Chin","Face_Jawbone", - "Face_Tongue","Face_Jawbone", - "Face_CornerRight","Face_Hub", - "Face_CheekSideRight","Face_CornerRight", - "Face_CornerLeft","Face_Hub", - "Face_CheekSideLeft","Face_CornerLeft", - "Face_CheekFrontRight","Face_Hub", - "Face_CheekFrontLeft","Face_Hub", - "Face_CheekUpperRight","Face_Hub", - "Face_CheekUpperLeft","Face_Hub", - "Face_LipUpperMiddle","Face_Hub", - "Face_LipUpperRight","Face_Hub", - "Face_LipUpperLeft","Face_Hub", - "Face_NostrilRight","Face_Hub", - "Face_NostrilLeft","Face_Hub", - "Face_Forehead","Face_Hub", - "Face_BrowFrontRight","Face_Forehead", - "Face_BrowFrontLeft","Face_Forehead", - "Face_BrowMiddle","Face_Forehead", - "Face_BrowSideRight","Face_Forehead", - "Face_BrowSideLeft","Face_Forehead", - "Face_Eyelids","Face_Hub", - "Face_EyelidUpperRight","Face_Hub", - "Face_EyelidUpperLeft","Face_Hub", - "Face_EyelidLowerRight","Face_Hub", - "Face_EyelidLowerLeft","Face_Hub", - "EyeLeft","Face_Hub", - "EyeRight","Face_Hub" + "Face_Hub","Head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub" };// end of skeleton array // location of pivot points (local axes) for hierarchical animation - pivotsModel="Samples_F\TemplateRTM\ManSkeleton_Pivots.p3d"; + pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; }; }; diff --git a/addons/gestures/stringtable.xml b/addons/gestures/stringtable.xml index 0677b435e1..6e61d5cac0 100644 --- a/addons/gestures/stringtable.xml +++ b/addons/gestures/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index a5aee2d18e..4921bd42d9 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -80,14 +80,14 @@ GVAR(GForces_CC) ppEffectAdjust [1,1,0,[0,0,0,1],[0,0,0,0],[1,1,1,1],[10,10,0,0, if !(ACE_player getVariable ["ACE_isUnconscious", false]) then { if (_average > 0.30 * _gBlackOut) then { private _strength = ((_average - 0.30 * _gBlackOut) / (0.70 * _gBlackOut)) max 0; - GVAR(GForces_CC) ppEffectAdjust [1,1,0,[0,0,0,1],[0,0,0,0],[1,1,1,1],[2*(1-_strength),2*(1-_strength),0,0,0,0.1,0.5]]; + GVAR(GForces_CC) ppEffectAdjust [1,1,0,[0,0,0,1],[0,0,0,0],[1,1,1,1],[2 * (1 - _strength),2 * (1 - _strength),0,0,0,0.1,0.5]]; addCamShake [_strength, 1, 15]; } else { private _gRedOut = MINVIRTUALG / _classCoef; if (_average < -0.30 * _gRedOut) then { private _strength = ((abs _average - 0.30 * _gRedOut) / (0.70 * _gRedOut)) max 0; - GVAR(GForces_CC) ppEffectAdjust [1,1,0,[1,0.2,0.2,1],[0,0,0,0],[1,1,1,1],[2*(1-_strength),2*(1-_strength),0,0,0,0.1,0.5]]; + GVAR(GForces_CC) ppEffectAdjust [1,1,0,[1,0.2,0.2,1],[0,0,0,0],[1,1,1,1],[2 * (1 - _strength),2 * ( 1 -_strength),0,0,0,0.1,0.5]]; addCamShake [_strength / 1.5, 1, 15]; }; }; diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml index 3a887c175a..737188f76b 100644 --- a/addons/gforces/stringtable.xml +++ b/addons/gforces/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -38,6 +38,7 @@ 减少G力 減少G力 Riduzione forza G + Redukcja przeciążenia diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index 9927a165f1..a1a7c53460 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -80,7 +80,7 @@ if (!hasInterface) exitWith {}; }; ["cameraView", _fnc_checkGoggles] call CBA_fnc_addPlayerEventHandler; - ["ace_activeCameraChanged", _fnc_checkGoggles] call CBA_fnc_addEventHandler; + ["featureCamera", _fnc_checkGoggles] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/goggles/anim/model.cfg b/addons/goggles/anim/model.cfg index da614e05db..dbe5bce4a6 100644 --- a/addons/goggles/anim/model.cfg +++ b/addons/goggles/anim/model.cfg @@ -1,4 +1,3 @@ - class CfgSkeletons { class Default { isDiscrete = 1; @@ -11,122 +10,114 @@ class CfgSkeletons { skeletonInherit = ""; skeletonBones[] = { "Pelvis","", - "Spine","Pelvis", - "Spine1","Spine", - "Spine2","Spine1", - "Spine3","Spine2", - "Camera","Pelvis", - "weapon","Spine1", - "launcher","Spine1", - - //Head skeleton in hierarchy - "neck","Spine3", - "neck1","neck", - "head","neck1", - - //New facial features - "Face_Hub","head", - "Face_Jawbone","Face_Hub", - "Face_Jowl","Face_Jawbone", - "Face_chopRight","Face_Jawbone", - "Face_chopLeft","Face_Jawbone", - "Face_LipLowerMiddle","Face_Jawbone", - "Face_LipLowerLeft","Face_Jawbone", - "Face_LipLowerRight","Face_Jawbone", - "Face_Chin","Face_Jawbone", - "Face_Tongue","Face_Jawbone", - "Face_CornerRight","Face_Hub", - "Face_CheekSideRight","Face_CornerRight", - "Face_CornerLeft","Face_Hub", - "Face_CheekSideLeft","Face_CornerLeft", - "Face_CheekFrontRight","Face_Hub", - "Face_CheekFrontLeft","Face_Hub", - "Face_CheekUpperRight","Face_Hub", - "Face_CheekUpperLeft","Face_Hub", - "Face_LipUpperMiddle","Face_Hub", - "Face_LipUpperRight","Face_Hub", - "Face_LipUpperLeft","Face_Hub", - "Face_NostrilRight","Face_Hub", - "Face_NostrilLeft","Face_Hub", - "Face_Forehead","Face_Hub", - "Face_BrowFrontRight","Face_Forehead", - "Face_BrowFrontLeft","Face_Forehead", - "Face_BrowMiddle","Face_Forehead", - "Face_BrowSideRight","Face_Forehead", - "Face_BrowSideLeft","Face_Forehead", - "Face_Eyelids","Face_Hub", - "Face_EyelidUpperRight","Face_Hub", - "Face_EyelidUpperLeft","Face_Hub", - "Face_EyelidLowerRight","Face_Hub", - "Face_EyelidLowerLeft","Face_Hub", - "EyeLeft","Face_Hub", - "EyeRight","Face_Hub", - + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", + "camera","Pelvis",// case has changed for arma3 + "weapon","Spine1", + "launcher","Spine1", + "Neck","Spine3", + "Neck1","Neck", + "Head","Neck1", //Head skeleton in hierarchy //Left upper side - "LeftShoulder","Spine3", - "LeftArm","LeftShoulder", - "LeftArmRoll","LeftArm", - "LeftForeArm","LeftArmRoll", - "LeftForeArmRoll","LeftForeArm", - "LeftHand","LeftForeArmRoll", - "LeftHandRing","LeftHand", - "LeftHandRing1","LeftHandRing", - "LeftHandRing2","LeftHandRing1", - "LeftHandRing3","LeftHandRing2", - "LeftHandPinky1","LeftHandRing", - "LeftHandPinky2","LeftHandPinky1", - "LeftHandPinky3","LeftHandPinky2", - "LeftHandMiddle1","LeftHand", - "LeftHandMiddle2","LeftHandMiddle1", - "LeftHandMiddle3","LeftHandMiddle2", - "LeftHandIndex1","LeftHand", - "LeftHandIndex2","LeftHandIndex1", - "LeftHandIndex3","LeftHandIndex2", - "LeftHandThumb1","LeftHand", - "LeftHandThumb2","LeftHandThumb1", - "LeftHandThumb3","LeftHandThumb2", - + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", //Right upper side - "RightShoulder","Spine3", - "RightArm","RightShoulder", - "RightArmRoll","RightArm", - "RightForeArm","RightArmRoll", - "RightForeArmRoll","RightForeArm", - "RightHand","RightForeArmRoll", - "RightHandRing","RightHand", - "RightHandRing1","RightHandRing", - "RightHandRing2","RightHandRing1", - "RightHandRing3","RightHandRing2", - "RightHandPinky1","RightHandRing", - "RightHandPinky2","RightHandPinky1", - "RightHandPinky3","RightHandPinky2", - "RightHandMiddle1","RightHand", - "RightHandMiddle2","RightHandMiddle1", - "RightHandMiddle3","RightHandMiddle2", - "RightHandIndex1","RightHand", - "RightHandIndex2","RightHandIndex1", - "RightHandIndex3","RightHandIndex2", - "RightHandThumb1","RightHand", - "RightHandThumb2","RightHandThumb1", - "RightHandThumb3","RightHandThumb2", - - //Left lower side - "LeftUpLeg","Pelvis", - "LeftUpLegRoll","LeftUpLeg", - "LeftLeg","LeftUpLegRoll", - "LeftLegRoll","LeftLeg", - "LeftFoot","LeftLegRoll", - "LeftToeBase","LeftFoot", - - //Right lower side - "RightUpLeg","Pelvis", - "RightUpLegRoll","RightUpLeg", - "RightLeg","RightUpLegRoll", - "RightLegRoll","RightLeg", - "RightFoot","RightLegRoll", - "RightToeBase","RightFoot" - }; - + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot", + //New facial features arma3 only + "Face_Hub","Head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub" + };// end of skeleton array // location of pivot points (local axes) for hierarchical animation pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; }; diff --git a/addons/goggles/config.cpp b/addons/goggles/config.cpp index 9102b7fbf0..ba2e1a1d29 100644 --- a/addons/goggles/config.cpp +++ b/addons/goggles/config.cpp @@ -38,6 +38,10 @@ class CfgGlasses { COMBAT_GOGGLES }; + class G_Combat_Goggles_tna_F: None { + COMBAT_GOGGLES + }; + class G_Diving { ACE_Overlay = QPATHTOF(textures\HUD\DivingGoggles.paa); ACE_OverlayCracked = QPATHTOF(textures\HUD\DivingGogglesCracked.paa); @@ -179,6 +183,16 @@ class CfgGlasses { ACE_Protection = 1; }; + class G_Balaclava_TI_blk_F; + class G_Balaclava_TI_G_blk_F: G_Balaclava_TI_blk_F { + COMBAT_GOGGLES + }; + + class G_Balaclava_TI_tna_F; + class G_Balaclava_TI_G_tna_F: G_Balaclava_TI_tna_F { + COMBAT_GOGGLES + }; + class G_Bandanna_blk; class G_Bandanna_shades:G_Bandanna_blk { ACE_TintAmount=COLOUR*2; @@ -197,6 +211,16 @@ class CfgGlasses { ACE_Resistance = 1; ACE_Protection = 1; }; + + class G_EyeProtectors_base_F; + class G_EyeProtectors_F: G_EyeProtectors_base_F { + ACE_Resistance = 1; + ACE_Protection = 1; + }; + class G_EyeProtectors_Earpiece_F: G_EyeProtectors_base_F { + ACE_Resistance = 1; + ACE_Protection = 1; + }; }; #include "RscTitles.hpp" diff --git a/addons/goggles/functions/fnc_externalCamera.sqf b/addons/goggles/functions/fnc_externalCamera.sqf index c251ef1f49..0cd06fdcd6 100644 --- a/addons/goggles/functions/fnc_externalCamera.sqf +++ b/addons/goggles/functions/fnc_externalCamera.sqf @@ -18,8 +18,9 @@ // Handle the ThreeDen Editor Camera if (is3DEN) exitWith {true}; +private _isFeatureCamera = call CBA_fnc_getActiveFeatureCamera != ""; if (GVAR(showInThirdPerson)) then { - cameraView in ["GROUP"] || EFUNC(common,isFeatureCameraActive) + cameraView in ["GROUP"] || _isFeatureCamera } else { - cameraView in ["EXTERNAL", "GROUP"] || EFUNC(common,isFeatureCameraActive) + cameraView in ["EXTERNAL", "GROUP"] || _isFeatureCamera }; diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 4c796c6ecc..a4be10b0fc 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,7 @@ 护目镜 ゴーグル 고글 + Gogle Show Goggle Effects in Third Person diff --git a/addons/grenades/CfgAmmo.hpp b/addons/grenades/CfgAmmo.hpp index 47b4cee5b1..c52ec34d04 100644 --- a/addons/grenades/CfgAmmo.hpp +++ b/addons/grenades/CfgAmmo.hpp @@ -5,7 +5,7 @@ class CfgAmmo { GVAR(pullPinSound)[] = {"A3\sounds_f\weapons\grenades\Grenade_PullPin.wss", 1.5, 1, 10}; impactGroundSoft[] = {}; }; - + class FlareCore; class FlareBase: FlareCore { intensity = 20000; @@ -17,6 +17,21 @@ class CfgAmmo { intensity = 40000; flareSize = 12; }; + class ACE_40mm_Flare_white: F_40mm_White { + intensity = 1250000; // vanilla: 10000 + timeToLive = 45; // vanilla: 25, ace changes to 60 in FlareBase + coefGravity = 0.25; // vanilla: undefined (would be 1) + // Makes the ammo fall the ground slower (~2 m/s) + }; + class ACE_40mm_Flare_red: ACE_40mm_Flare_white { + lightColor[] = {0.5,0.25,0.25,0}; + }; + class ACE_40mm_Flare_green: ACE_40mm_Flare_white { + lightColor[] = {0.25,0.5,0.25,0}; + }; + class ACE_40mm_Flare_ir: ACE_40mm_Flare_white { + nvgOnly = 1; + }; class F_20mm_White: FlareBase { intensity = 20000; diff --git a/addons/grenades/CfgMagazineWells.hpp b/addons/grenades/CfgMagazineWells.hpp new file mode 100644 index 0000000000..0ce8abca35 --- /dev/null +++ b/addons/grenades/CfgMagazineWells.hpp @@ -0,0 +1,5 @@ +class CfgMagazineWells { + class CBA_40mm_M203 { + ADDON[] = {"ACE_40mm_flare_white", "ACE_40mm_flare_red", "ACE_40mm_flare_green", "ACE_40mm_flare_ir"}; + }; +}; diff --git a/addons/grenades/CfgMagazines.hpp b/addons/grenades/CfgMagazines.hpp index c345a913ac..7faf13c9e1 100644 --- a/addons/grenades/CfgMagazines.hpp +++ b/addons/grenades/CfgMagazines.hpp @@ -89,4 +89,35 @@ class CfgMagazines { ammo = "F_40mm_Red"; initSpeed = 120; }; + + class UGL_FlareWhite_F; + class ACE_40mm_Flare_white: UGL_FlareWhite_F { + author = ECSTRING(common,ACETeam); + ammo = "ACE_40mm_Flare_white"; + displayName = CSTRING(40mm_flare_white); + descriptionShort = CSTRING(parachute_flare_description); + }; + + class UGL_FlareRed_F; + class ACE_40mm_Flare_red: UGL_FlareRed_F { + author = ECSTRING(common,ACETeam); + ammo = "ACE_40mm_Flare_red"; + displayName = CSTRING(40mm_flare_red); + descriptionShort = CSTRING(parachute_flare_description); + }; + + class UGL_FlareGreen_F; + class ACE_40mm_Flare_green: UGL_FlareGreen_F { + author = ECSTRING(common,ACETeam); + ammo = "ACE_40mm_Flare_green"; + displayName = CSTRING(40mm_flare_green); + descriptionShort = CSTRING(parachute_flare_description); + }; + + class ACE_40mm_Flare_ir: UGL_FlareWhite_F { + author = ECSTRING(common,ACETeam); + ammo = "ACE_40mm_Flare_ir"; + displayName = CSTRING(40mm_flare_ir); + descriptionShort = CSTRING(parachute_flare_ir_description); + }; }; diff --git a/addons/grenades/config.cpp b/addons/grenades/config.cpp index c836b613e1..326308a5eb 100644 --- a/addons/grenades/config.cpp +++ b/addons/grenades/config.cpp @@ -25,6 +25,7 @@ class CfgPatches { #include "CfgAmmo.hpp" #include "CfgWeapons.hpp" #include "CfgMagazines.hpp" +#include "CfgMagazineWells.hpp" #include "CfgVehicles.hpp" #include "Effects.hpp" diff --git a/addons/grenades/dev/dev_testFlares.sqf b/addons/grenades/dev/dev_testFlares.sqf new file mode 100644 index 0000000000..e883a90c65 --- /dev/null +++ b/addons/grenades/dev/dev_testFlares.sqf @@ -0,0 +1,39 @@ +// execVM "z\ace\addons\grenades\dev\dev_testFlares.sqf"; + +removeAllWeapons player; + +player addMagazine "UGL_FlareWhite_F"; +player addMagazine "UGL_FlareWhite_F"; +player addMagazine "ACE_40mm_Flare_white"; +player addMagazine "ACE_40mm_Flare_white"; +player addMagazine "ACE_40mm_Flare_green"; +player addMagazine "ACE_40mm_Flare_red"; +player addMagazine "ACE_40mm_Flare_ir"; +player linkItem "NVGoggles"; +skipTime 12; + +player addWeapon "arifle_MX_GL_ACO_F"; + +["ace_firedPlayer", { + params ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile"]; + systemChat str _magazine; + [{ + params ["_args", "_pfid"]; + _args params ["_projectile", "_launchHeight", "_shotTime", "_deployedTime"]; + if (!alive _projectile) exitWith {[_pfid] call CBA_fnc_removePerFrameHandler;}; + + private _out = format ["Flight time: %1\n", (time - _shotTime) toFixed 1]; + if (_deployedTime < 0) then { + if ((vectorMagnitude velocity _projectile) < 10) then { + _args set [3, time]; + }; + } else { + _out = _out + format ["Deployed time: %1\n", (time - _deployedTime) toFixed 1]; + }; + _out = _out + format ["Height Above Launch: %1\n", (((getPosASL _projectile) select 2) - _launchHeight) toFixed 1]; + _out = _out + format ["Height Above Terrain: %1\n", ((getPosATL _projectile) select 2) toFixed 1]; + _out = _out + format ["Speed: %1\nVelocity:\n%2\n", (vectorMagnitude velocity _projectile) toFixed 1, (velocity _projectile) apply {_x toFixed 1}]; + + hintSilent _out; + }, 0.1, [_projectile, (getPosASL _unit) select 2, time, -1]] call CBA_fnc_addPerFrameHandler; +}] call CBA_fnc_addEventHandler; diff --git a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf index 37e9a10845..b70314d2d0 100644 --- a/addons/grenades/functions/fnc_flashbangExplosionEH.sqf +++ b/addons/grenades/functions/fnc_flashbangExplosionEH.sqf @@ -92,8 +92,10 @@ if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then { _strength = _strength * _losCoefficient; // Add ace_hearing ear ringing sound effect - if (isClass (configFile >> "CfgPatches" >> "ACE_Hearing") && {_strength > 0}) then { - [40 * _strength] call EFUNC(hearing,earRinging); + if (isClass (configFile >> "CfgPatches" >> "ACE_Hearing") && {_strength > 0 && {EGVAR(hearing,damageCoefficent) > 0.25}}) then { + private _earringingStrength = 40 * _strength; + [_earringingStrength] call EFUNC(hearing,earRinging); + TRACE_1("Earringing Strength",_earringingStrength); }; // add ace_medical pain effect: diff --git a/addons/grenades/models/ACE_M84.p3d b/addons/grenades/models/ACE_M84.p3d index e24ff37880..f3e4119873 100644 Binary files a/addons/grenades/models/ACE_M84.p3d and b/addons/grenades/models/ACE_M84.p3d differ diff --git a/addons/grenades/models/ACE_M84_thrown.p3d b/addons/grenades/models/ACE_M84_thrown.p3d index 0b206cfada..20f322c643 100644 Binary files a/addons/grenades/models/ACE_M84_thrown.p3d and b/addons/grenades/models/ACE_M84_thrown.p3d differ diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 2f695f8a40..3483b74037 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -220,7 +220,7 @@ Фальшфейер (Белый) Bengala (Blanca) Feux à main (Blanc) - 白の発炎筒 + 白の手持ち式信号弾 하얀색 불꽃신호기 白色手持式信号弹 白色手持式信號彈 @@ -236,7 +236,7 @@ Фальшфейер (Красный) Bengala (Roja) Feux à main (Rouge) - 赤の発炎筒 + 赤の手持ち式信号弾 빨간색 불꽃신호기 红色手持式信号弹 紅色手持式信號彈 @@ -252,7 +252,7 @@ Фальшфейер (Зелёный) Bengala (Verde) Feux à main (Vert) - 緑の発炎筒 + 緑の手持ち式信号弾 초록색 불꽃신호기 绿色手持式信号弹 綠色手持式信號彈 @@ -268,7 +268,7 @@ Фальшфейер (Жёлтые) Bengala (Amarilla) Feux à main (Jaune) - 黄の発炎筒 + 黄の手持ち式信号弾 노란색 불꽃신호기 黄色手持式信号弹 黃色手持式信號彈 @@ -365,7 +365,7 @@ Incendiary grenade used to destroy weapons, ammunition and other equipment. Brandsatzgranate. Verwendet um Waffen, Munition und andere Ausrüstung zu zerstören. Зажигательная граната используется для уничтожения оружия, боеприпасов и прочего оборудования. - 焼夷手榴弾は武器や弾薬箱などの装備を破壊するために使われます。 + 焼夷手榴弾は武器や弾薬箱などの装備を破壊する為に使われます。 Granat zapalający, używany do niszczenia broni, amunicji i innego sprzętu. 소이 수류탄은 무기나 탄약 그리고 장비를 파괴할때 쓰입니다. Grenade incendiaire utilisé pour détruire des armes, munitions et autres équipements. @@ -373,5 +373,41 @@ 燃烧手榴弹是用来摧毁武器,弹药以及其他装备的好帮手。 燃燒手榴彈是用來摧毀武器,彈藥以及其他裝備的好幫手 + + Type: Star Parachute Flare + Typ: Gwiezdna Flara Spadochronowa + Tipo: Granata a paracadute con bengala + 種類: パラシュート式照明弾 (星弾) + + + M583 Illumination Flare (White) + M583 Flara oświetlająca (Biała) + M583 Granata con bengala (Bianca) + M583 照明弾 (白) + + + M662 Illumination Flare (Red) + M662 Flara oświetlająca (Czerwona) + M662 Granata con bengala (Rossa) + M662 照明弾 (赤) + + + M661 Illumination Flare (Green) + M661 Flara oświetlająca (Zielona) + M661 Granata con bengala (Verde) + M661 照明弾 (緑) + + + Type: Parachute IR Flare + Typ: Spadochronowa Flara IR + Tipo: Granata a paracadute con infrarosso + 種類: パラシュート式赤外線照明弾 + + + M992 Illumination IR Flare + M992 Oświetlająca flara IR + M992 Granata con infrarosso + M992 赤外線照明弾 + diff --git a/addons/gunbag/data/model.cfg b/addons/gunbag/data/model.cfg index 894edab2ac..b82cefbfdb 100644 --- a/addons/gunbag/data/model.cfg +++ b/addons/gunbag/data/model.cfg @@ -9,115 +9,114 @@ class CfgSkeletons { skeletonInherit = ""; skeletonBones[] = { "Pelvis","", - "Spine","Pelvis", - "Spine1","Spine", - "Spine2","Spine1", - "Spine3","Spine2", - "Camera","Pelvis", - "weapon","Spine1", - "launcher","Spine1", - //Head skeleton in hierarchy - "neck","Spine3", - "neck1","neck", - "head","neck1", - //New facial features - "Face_Hub","head", - "Face_Jawbone","Face_Hub", - "Face_Jowl","Face_Jawbone", - "Face_chopRight","Face_Jawbone", - "Face_chopLeft","Face_Jawbone", - "Face_LipLowerMiddle","Face_Jawbone", - "Face_LipLowerLeft","Face_Jawbone", - "Face_LipLowerRight","Face_Jawbone", - "Face_Chin","Face_Jawbone", - "Face_Tongue","Face_Jawbone", - "Face_CornerRight","Face_Hub", - "Face_CheekSideRight","Face_CornerRight", - "Face_CornerLeft","Face_Hub", - "Face_CheekSideLeft","Face_CornerLeft", - "Face_CheekFrontRight","Face_Hub", - "Face_CheekFrontLeft","Face_Hub", - "Face_CheekUpperRight","Face_Hub", - "Face_CheekUpperLeft","Face_Hub", - "Face_LipUpperMiddle","Face_Hub", - "Face_LipUpperRight","Face_Hub", - "Face_LipUpperLeft","Face_Hub", - "Face_NostrilRight","Face_Hub", - "Face_NostrilLeft","Face_Hub", - "Face_Forehead","Face_Hub", - "Face_BrowFrontRight","Face_Forehead", - "Face_BrowFrontLeft","Face_Forehead", - "Face_BrowMiddle","Face_Forehead", - "Face_BrowSideRight","Face_Forehead", - "Face_BrowSideLeft","Face_Forehead", - "Face_Eyelids","Face_Hub", - "Face_EyelidUpperRight","Face_Hub", - "Face_EyelidUpperLeft","Face_Hub", - "Face_EyelidLowerRight","Face_Hub", - "Face_EyelidLowerLeft","Face_Hub", - "EyeLeft","Face_Hub", - "EyeRight","Face_Hub", + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", + "camera","Pelvis",// case has changed for arma3 + "weapon","Spine1", + "launcher","Spine1", + "Neck","Spine3", + "Neck1","Neck", + "Head","Neck1", //Head skeleton in hierarchy //Left upper side - "LeftShoulder","Spine3", - "LeftArm","LeftShoulder", - "LeftArmRoll","LeftArm", - "LeftForeArm","LeftArmRoll", - "LeftForeArmRoll","LeftForeArm", - "LeftHand","LeftForeArmRoll", - "LeftHandRing","LeftHand", - "LeftHandRing1","LeftHandRing", - "LeftHandRing2","LeftHandRing1", - "LeftHandRing3","LeftHandRing2", - "LeftHandPinky1","LeftHandRing", - "LeftHandPinky2","LeftHandPinky1", - "LeftHandPinky3","LeftHandPinky2", - "LeftHandMiddle1","LeftHand", - "LeftHandMiddle2","LeftHandMiddle1", - "LeftHandMiddle3","LeftHandMiddle2", - "LeftHandIndex1","LeftHand", - "LeftHandIndex2","LeftHandIndex1", - "LeftHandIndex3","LeftHandIndex2", - "LeftHandThumb1","LeftHand", - "LeftHandThumb2","LeftHandThumb1", - "LeftHandThumb3","LeftHandThumb2", + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", //Right upper side - "RightShoulder","Spine3", - "RightArm","RightShoulder", - "RightArmRoll","RightArm", - "RightForeArm","RightArmRoll", - "RightForeArmRoll","RightForeArm", - "RightHand","RightForeArmRoll", - "RightHandRing","RightHand", - "RightHandRing1","RightHandRing", - "RightHandRing2","RightHandRing1", - "RightHandRing3","RightHandRing2", - "RightHandPinky1","RightHandRing", - "RightHandPinky2","RightHandPinky1", - "RightHandPinky3","RightHandPinky2", - "RightHandMiddle1","RightHand", - "RightHandMiddle2","RightHandMiddle1", - "RightHandMiddle3","RightHandMiddle2", - "RightHandIndex1","RightHand", - "RightHandIndex2","RightHandIndex1", - "RightHandIndex3","RightHandIndex2", - "RightHandThumb1","RightHand", - "RightHandThumb2","RightHandThumb1", - "RightHandThumb3","RightHandThumb2", - //Left lower side - "LeftUpLeg","Pelvis", - "LeftUpLegRoll","LeftUpLeg", - "LeftLeg","LeftUpLegRoll", - "LeftLegRoll","LeftLeg", - "LeftFoot","LeftLegRoll", - "LeftToeBase","LeftFoot", - //Right lower side - "RightUpLeg","Pelvis", - "RightUpLegRoll","RightUpLeg", - "RightLeg","RightUpLegRoll", - "RightLegRoll","RightLeg", - "RightFoot","RightLegRoll", - "RightToeBase","RightFoot" - }; + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot", + //New facial features arma3 only + "Face_Hub","Head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub" + };// end of skeleton array // location of pivot points (local axes) for hierarchical animation pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; }; diff --git a/addons/hearing/CfgEventHandlers.hpp b/addons/hearing/CfgEventHandlers.hpp index aa8dbf5134..cacaee8bce 100644 --- a/addons/hearing/CfgEventHandlers.hpp +++ b/addons/hearing/CfgEventHandlers.hpp @@ -7,13 +7,13 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE(call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_postInit) ); + clientinit = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/hearing/data/ace_earplugs.p3d b/addons/hearing/data/ace_earplugs.p3d index c6d4295212..ecdcb076a2 100644 Binary files a/addons/hearing/data/ace_earplugs.p3d and b/addons/hearing/data/ace_earplugs.p3d differ diff --git a/addons/hearing/functions/fnc_putInEarplugs.sqf b/addons/hearing/functions/fnc_putInEarplugs.sqf index 7292c86f85..954dc4dee1 100644 --- a/addons/hearing/functions/fnc_putInEarplugs.sqf +++ b/addons/hearing/functions/fnc_putInEarplugs.sqf @@ -29,7 +29,7 @@ _player setVariable ["ACE_hasEarPlugsIn", true, true]; //Force an immediate fast volume update: [[true]] call FUNC(updateVolume); -/*// No Earplugs in inventory, telling user -[localize LSTRING(NoPlugs)] call EFUNC(common,displayTextStructured);*/ +// No Earplugs in inventory, telling user +//[localize LSTRING(NoPlugs)] call EFUNC(common,displayTextStructured); [] call FUNC(updateHearingProtection); diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 1bf1ccad07..048445d3fa 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -289,6 +289,7 @@ 听力保护 聽力保護 Protezione auditiva + Ochrona słuchu Volume muffling @@ -297,6 +298,7 @@ 降低音量 進低音量 Volume attenuazione + Tłumienie głośności Earplugs Volume @@ -304,6 +306,7 @@ 耳塞时音量 耳塞時音量 Volume tappi per le orecchie + Głośność Stoperów Volume when using earplugs. @@ -311,6 +314,7 @@ 决定带上耳塞时的音量 使用耳塞時音量 Volume audio quandi si indossano i tappi per le orecchie. + Głośność podczas używania stoperów. Unconscious Volume @@ -318,6 +322,7 @@ 无意识时音量 昏迷時音量 Volume quando incoscente + Nieprzytomna Głośność Volume when unconscious. @@ -325,6 +330,7 @@ 决定处于无意识时的音量 昏迷時使用耳塞的音量 Volume quando incoscente. + Głośność podczas bycia nieprzytomnym. diff --git a/addons/hellfire/stringtable.xml b/addons/hellfire/stringtable.xml index 34ed9555ed..990e5a5b84 100644 --- a/addons/hellfire/stringtable.xml +++ b/addons/hellfire/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/hitreactions/stringtable.xml b/addons/hitreactions/stringtable.xml index 3b26084538..b727e48514 100644 --- a/addons/hitreactions/stringtable.xml +++ b/addons/hitreactions/stringtable.xml @@ -1,14 +1,15 @@ - + Min Damage to trigger falling - Danno Minimo da caduta se colpiti + Danno Minimo da caduta 觸發倒下前最低需受到多少傷害 触发倒下前最低需受到多少伤害 崩れ落ちるまでの最低損傷値 방아쇠를 당기는 최소한의 피해 Mindestschaden, um Sturz auszulösen + Minimalne obrażenie, żeby aktywować spadanie diff --git a/addons/hot/$PBOPREFIX$ b/addons/hot/$PBOPREFIX$ new file mode 100644 index 0000000000..291b6fb1a7 --- /dev/null +++ b/addons/hot/$PBOPREFIX$ @@ -0,0 +1,2 @@ +z\ace\addons\hot + diff --git a/addons/hot/ACE_GuidanceConfig.hpp b/addons/hot/ACE_GuidanceConfig.hpp new file mode 100644 index 0000000000..81f5c69261 --- /dev/null +++ b/addons/hot/ACE_GuidanceConfig.hpp @@ -0,0 +1,19 @@ +class EGVAR(missileguidance,AttackProfiles) { + class WIRE { + name = CSTRING(missileType); + visualName = CSTRING(missileType); + description = CSTRING(missileType_Description); + + functionName = QFUNC(attackProfile_WIRE); + }; +}; +class EGVAR(missileguidance,SeekerTypes) { + class SACLOS { + name = "SACLOS"; + visualName = "SACLOS"; + description = CSTRING(SACLOS_Description); + + functionName = QFUNC(seekerType_SACLOS); + }; +}; + diff --git a/addons/hot/CfgAmmo.hpp b/addons/hot/CfgAmmo.hpp new file mode 100644 index 0000000000..168386d47f --- /dev/null +++ b/addons/hot/CfgAmmo.hpp @@ -0,0 +1,140 @@ +class CfgAmmo { + class M_Scalpel_AT; + class ammo_Penetrator_Base; + + class GVAR(ammo_Penetrator_HOT1): ammo_Penetrator_Base { + caliber = 60; + warheadName = "HEAT"; + hit = 720; + }; + + class GVAR(ammo_Penetrator_HOT2): ammo_Penetrator_Base { + caliber = 65; + warheadName = "HEAT"; + hit = 900; + }; + + class GVAR(ammo_Penetrator_HOT3): ammo_Penetrator_Base { + caliber = 80; + warheadName = "TandemHEAT"; + hit = 1000; + }; + + class GVAR(HOT1): M_Scalpel_AT { + aiAmmoUsageFlags = "128+512"; + model = "\A3\Weapons_F_Tank\Launchers\Vorona\Vorona_missile_heat_fly"; + proxyShape = "\A3\Weapons_F\Ammo\Missile_AT_03_F"; + submunitionAmmo = QGVAR(ammo_Penetrator_HOT1); + submunitionDirectionType = "SubmunitionModelDirection"; + submunitionInitSpeed = 1000; + submunitionParentSpeedCoef = 0; + submunitionInitialOffset[] = { 0, 0, -0.2 }; + hit = 150; + warheadName = "HEAT"; + indirectHit = 25; + indirectHitRange = 3.5; + explosive = 0.8; + + displayName = CSTRING(hot1); + displayNameShort = CSTRING(hot1); + description = CSTRING(missileType_Description); + descriptionShort = CSTRING(missileType); + + effectsMissile = "missile2"; + + irLock = 0; + laserLock = 0; + manualControl = 0; + maxSpeed = 240; + + thrustTime = 17; + thrust = 125; + timeToLive = 40; + initTime = 0.3; + + EGVAR(rearm,caliber) = 178; + + class ace_missileguidance { + enabled = 1; + + minDeflection = 0; // Minium flap deflection for guidance + maxDeflection = 0.0030; // Maximum flap deflection for guidance + incDeflection = 0.0005; // The incrmeent in which deflection adjusts. + + canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode + + // Guidance type for munitions + defaultSeekerType = "SACLOS"; + seekerTypes[] = { "SACLOS" }; + + defaultSeekerLockMode = "LOAL"; + seekerLockModes[] = { "LOAL", "LOBL" }; + + onFired = QFUNC(onFired); + + seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] + seekerAngle = 30; // Angle from the shooter's view that can track the missile + seekerAccuracy = 1; // seeker accuracy multiplier + + seekerMinRange = 75; + seekerMaxRange = 4000; // Range from the missile which the seeker can visually search + + correctionDistance = 15; // distance from center of crosshair where missile slows down + offsetFromCrosshair[] = { 0, 0, 0.5 }; // where the missile wants to stay in relation to the center of the crosshair. + + // Attack profile type selection + defaultAttackProfile = "WIRE"; + attackProfiles[] = {"WIRE"}; + }; + }; + + class GVAR(HOT2): GVAR(HOT1) { + submunitionAmmo = QGVAR(ammo_Penetrator_HOT2); + displayName = CSTRING(hot2); + displayNameShort = CSTRING(hot2); + + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + + class GVAR(HOT2MP): GVAR(HOT2) { + aiAmmoUsageFlags = "64+128"; + submunitionAmmo = ""; + warheadName = "HE"; + allowAgainstInfantry = 1; + hit = 200; + indirectHit = 200; + indirectHitRange = 5; + explosionEffects = "BombExplosion"; + explosive = 0.7; + + EGVAR(frag,enabled) = 1; + EGVAR(frag,metal) = 7100; // 1000 steel balls + EGVAR(frag,charge) = 4100; + EGVAR(frag,gurney_c) = 2700; + EGVAR(frag,gurney_k) = 3/5; + EGVAR(frag,classes)[] = {"ACE_frag_small"}; + + displayName = CSTRING(hot2mp); + displayNameShort = CSTRING(hot2mp); + description = CSTRING(missileType_Description_AP); + + class ace_missileguidance: ace_missileguidance { + enabled = 1; + }; + }; + + class GVAR(HOT3): GVAR(HOT2) { + submunitionAmmo = QGVAR(ammo_Penetrator_HOT3); + warheadName = "TandemHEAT"; + displayName = CSTRING(hot3); + displayNameShort = CSTRING(hot3); + + class ace_missileguidance: ace_missileguidance { + enabled = 1; + seekerMaxRange = 4300; + }; + }; +}; + diff --git a/addons/hot/CfgEventHandlers.hpp b/addons/hot/CfgEventHandlers.hpp new file mode 100644 index 0000000000..755e0552c5 --- /dev/null +++ b/addons/hot/CfgEventHandlers.hpp @@ -0,0 +1,12 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + diff --git a/addons/hot/CfgMagazines.hpp b/addons/hot/CfgMagazines.hpp new file mode 100644 index 0000000000..ab51548f7b --- /dev/null +++ b/addons/hot/CfgMagazines.hpp @@ -0,0 +1,205 @@ +class CfgMagazines { + class 12Rnd_PG_missiles; + + // HOT1 - HEAT (anti-tank) + class GVAR(1_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine + count = 6; + initSpeed = 100; + ammo = QGVAR(HOT1); + displayName = CSTRING(hot1); + displayNameShort = CSTRING(hot1); + descriptionShort = CSTRING(missileType); + }; + + class GVAR(1_2Rnd): GVAR(1_6Rnd) { + count = 2; + }; + + // 1.70 pylon magazines: + class GVAR(1_PylonMissile_1Rnd): GVAR(1_6Rnd) { // Bare missle + displayName = CSTRING(hot1_1); + count = 1; + mass = 70; + pylonWeapon = QGVAR(1_launcher); + hardpoints[] = {"SCALPEL_1RND"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d"; + }; + class GVAR(1_PylonRack_1Rnd): GVAR(1_6Rnd) { // 1x Launcher Support Rack + displayName = CSTRING(hot1_1); + count = 1; + mass = 85; + pylonWeapon = QGVAR(1_launcher); + hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d"; + }; + class GVAR(1_PylonRack_3Rnd): GVAR(1_6Rnd) { // 3x Launcher Support Rack + displayName = CSTRING(hot1_3); + count = 3; + mass = 250; + pylonWeapon = QGVAR(1_launcher); + hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 3}; + }; + class GVAR(1_PylonRack_4Rnd): GVAR(1_6Rnd) { // 4x Launcher Support Rack + displayName = CSTRING(hot1_4); + count = 4; + mass = 340; + pylonWeapon = QGVAR(1_launcher); + hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 4, 3}; + }; + + // HOT2 - HEAT (anti-tank) + class GVAR(2_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine + count = 6; + initSpeed = 100; + ammo = QGVAR(HOT2); + displayName = CSTRING(hot2); + displayNameShort = CSTRING(hot2); + descriptionShort = CSTRING(missileType); + }; + + class GVAR(2_2Rnd): GVAR(2_6Rnd) { + count = 2; + }; + + // 1.70 pylon magazines: + class GVAR(2_PylonMissile_1Rnd): GVAR(2_6Rnd) { // Bare missle + displayName = CSTRING(hot2_1); + pylonWeapon = QGVAR(2_launcher); + count = 1; + mass = 70; + hardpoints[] = {"SCALPEL_1RND"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d"; + }; + class GVAR(2_PylonRack_1Rnd): GVAR(2_6Rnd) { // 1x Launcher Support Rack + displayName = CSTRING(hot2_1); + pylonWeapon = QGVAR(2_launcher); + count = 1; + mass = 85; + hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d"; + }; + class GVAR(2_PylonRack_3Rnd): GVAR(2_6Rnd) { // 3x Launcher Support Rack + displayName = CSTRING(hot2_3); + pylonWeapon = QGVAR(2_launcher); + count = 3; + mass = 250; + hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 3}; + }; + class GVAR(2_PylonRack_4Rnd): GVAR(2_6Rnd) { // 4x Launcher Support Rack + displayName = CSTRING(hot2_4); + pylonWeapon = QGVAR(2_launcher); + count = 4; + mass = 340; + hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 4, 3}; + }; + + // HOT2MP - HE Anti-Infantry + class GVAR(2MP_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine + count = 6; + initSpeed = 100; + ammo = QGVAR(HOT2MP); + displayName = CSTRING(hot2mp); + displayNameShort = CSTRING(hot2mp); + descriptionShort = CSTRING(missileType); + }; + + class GVAR(2MP_2Rnd): GVAR(2MP_6Rnd) { + count = 2; + }; + + // 1.70 pylon magazines: + class GVAR(2MP_PylonMissile_1Rnd): GVAR(2MP_6Rnd) { // Bare missle + displayName = CSTRING(hot2mp_1); + pylonWeapon = QGVAR(2mp_launcher); + count = 1; + mass = 70; + hardpoints[] = {"SCALPEL_1RND"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d"; + }; + class GVAR(2MP_PylonRack_1Rnd): GVAR(2MP_6Rnd) { // 1x Launcher Support Rack + displayName = CSTRING(hot2mp_1); + pylonWeapon = QGVAR(2mp_launcher); + count = 1; + mass = 85; + hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d"; + }; + class GVAR(2MP_PylonRack_3Rnd): GVAR(2MP_6Rnd) { // 3x Launcher Support Rack + displayName = CSTRING(hot2mp_3); + pylonWeapon = QGVAR(2mp_launcher); + count = 3; + mass = 250; + hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 3}; + }; + class GVAR(2MP_PylonRack_4Rnd): GVAR(2MP_6Rnd) { // 4x Launcher Support Rack + displayName = CSTRING(hot2mp_4); + pylonWeapon = QGVAR(2mp_launcher); + count = 4; + mass = 340; + hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 4, 3}; + }; + + // HOT3 - tandem shaped charge HEAT (anti-tank) + class GVAR(3_6Rnd): 12Rnd_PG_missiles { // Old style vehicle magazine + count = 6; + initSpeed = 100; + ammo = QGVAR(HOT3); + displayName = CSTRING(hot3); + displayNameShort = CSTRING(hot3); + descriptionShort = CSTRING(missileType); + }; + + class GVAR(3_2Rnd): GVAR(3_6Rnd) { // Old style vehicle magazine + count = 2; + }; + + // 1.70 pylon magazines: + class GVAR(3_PylonMissile_1Rnd): GVAR(3_6Rnd) { // Bare missle + displayName = CSTRING(hot3_1); + pylonWeapon = QGVAR(3_launcher); + count = 1; + mass = 70; + hardpoints[] = {"SCALPEL_1RND"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d"; + }; + + class GVAR(3_PylonRack_1Rnd): GVAR(3_6Rnd) { // 1x Launcher Support Rack + displayName = CSTRING(hot3_1); + pylonWeapon = QGVAR(3_launcher); + count = 1; + mass = 85; + hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL", "CUP_NATO_HELO_SMALL", "CUP_NATO_HELO_LARGE", "RHS_HP_MELB"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d"; + }; + class GVAR(3_PylonRack_3Rnd): GVAR(3_6Rnd) { // 3x Launcher Support Rack + displayName = CSTRING(hot3_3); + pylonWeapon = QGVAR(3_launcher); + count = 3; + mass = 250; + hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 3}; + }; + class GVAR(3_PylonRack_4Rnd): GVAR(3_6Rnd) { // 4x Launcher Support Rack + displayName = CSTRING(hot3_4); + pylonWeapon = QGVAR(3_launcher); + count = 4; + mass = 340; + hardpoints[] = {"UNI_SCALPEL", "CUP_NATO_HELO_LARGE", "RHS_HP_HELLFIRE_RACK", "RHS_HP_LONGBOW_RACK"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 4, 3}; + }; +}; + diff --git a/addons/hot/CfgVehicles.hpp b/addons/hot/CfgVehicles.hpp new file mode 100644 index 0000000000..db5b8b5262 --- /dev/null +++ b/addons/hot/CfgVehicles.hpp @@ -0,0 +1,19 @@ +class CfgVehicles { + class Tank; + class Tank_F: Tank { + class Turrets; + }; + class LT_01_base_F: Tank_F { + class Turrets: Turrets { + class MainTurret; + }; + }; + class LT_01_AT_base_F: LT_01_base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {"SmokeLauncher","HMG_127",QGVAR(generic_launcher)}; + magazines[] = {"SmokeLauncherMag",QGVAR(2_2Rnd),QGVAR(2_2Rnd),QGVAR(2_2Rnd),QGVAR(2MP_2Rnd),"100Rnd_127x99_mag_Tracer_Red","100Rnd_127x99_mag_Tracer_Red","100Rnd_127x99_mag_Tracer_Red","100Rnd_127x99_mag_Tracer_Red"}; + }; + }; + }; +}; diff --git a/addons/hot/CfgWeapons.hpp b/addons/hot/CfgWeapons.hpp new file mode 100644 index 0000000000..1263ef8dea --- /dev/null +++ b/addons/hot/CfgWeapons.hpp @@ -0,0 +1,62 @@ +class CfgWeapons { + class RocketPods; + class MissileLauncher; + class GVAR(1_launcher): RocketPods { + displayName = CSTRING(hot1); + magazines[] = {QGVAR(1_6Rnd), QGVAR(1_2Rnd), QGVAR(1_PylonMissile_1Rnd), QGVAR(1_PylonRack_1Rnd), QGVAR(1_PylonRack_3Rnd), QGVAR(1_PylonRack_4Rnd)}; + initSpeed = 100; + autoFire = 0; + canLock = 0; + weaponLockSystem = 0; + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + soundFly[] = {"A3\Sounds_F\weapons\Rockets\rocket_fly_1",1,1.1,700}; + nameSound = "MissileLauncher"; + sounds[] = {"StandardSound"}; + class StandardSound { + begin1[] = {"A3\Sounds_F\weapons\Rockets\missile_1",1.12202,1.3,1000}; + soundBegin[] = {"begin1",1}; + soundsetshot[] = {"RocketsMedium_Shot_SoundSet"}; + }; + cursor = "EmptyCursor"; + cursorAim = "missile"; + showAimCursorInternal = 0; + }; + class GVAR(2_launcher): GVAR(1_launcher) { + displayName = CSTRING(hot2); + magazines[] = {QGVAR(2_6Rnd), QGVAR(2_2Rnd), QGVAR(2_PylonMissile_1Rnd), QGVAR(2_PylonRack_1Rnd), QGVAR(2_PylonRack_3Rnd), QGVAR(2_PylonRack_4Rnd)}; + }; + class GVAR(2mp_launcher): GVAR(1_launcher) { + displayName = CSTRING(hot2mp); + magazines[] = {QGVAR(2MP_6Rnd), QGVAR(2MP_2Rnd), QGVAR(2MP_PylonMissile_1Rnd), QGVAR(2MP_PylonRack_1Rnd), QGVAR(2MP_PylonRack_3Rnd), QGVAR(2MP_PylonRack_4Rnd)}; + }; + class GVAR(3_launcher): GVAR(1_launcher) { + displayName = CSTRING(hot3); + magazines[] = {QGVAR(3_6Rnd), QGVAR(3_2Rnd), QGVAR(3_PylonMissile_1Rnd), QGVAR(3_PylonRack_1Rnd), QGVAR(3_PylonRack_3Rnd), QGVAR(3_PylonRack_4Rnd)}; + }; + class GVAR(generic_launcher): MissileLauncher { + displayName = CSTRING(hotMissile); + magazines[] = {QGVAR(1_6Rnd), QGVAR(1_2Rnd), QGVAR(2_6Rnd), QGVAR(2_2Rnd), QGVAR(2MP_6Rnd), QGVAR(2MP_2Rnd), QGVAR(3_6Rnd), QGVAR(3_2Rnd)}; + initSpeed = 100; + autoFire = 0; + canLock = 0; + weaponLockSystem = 0; + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + soundFly[] = {"A3\Sounds_F\weapons\Rockets\rocket_fly_1",1,1.1,700}; + nameSound = "MissileLauncher"; + sounds[] = {"StandardSound"}; + class StandardSound { + begin1[] = {"A3\Sounds_F\weapons\Rockets\missile_1",1.12202,1.3,1000}; + soundBegin[] = {"begin1",1}; + soundsetshot[] = {"RocketsMedium_Shot_SoundSet"}; + }; + cursor = "EmptyCursor"; + cursorAim = "missile"; + showAimCursorInternal = 0; + + autoReload = 1; + magazineReloadTime = 20; + }; +}; + diff --git a/addons/hot/README.md b/addons/hot/README.md new file mode 100644 index 0000000000..217dfc2f6f --- /dev/null +++ b/addons/hot/README.md @@ -0,0 +1,12 @@ +ace_hot +=================== + +Adds HOT1/2/3 Missiles + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [Brandon-TCVM](https://github.com/TheCandianVendingMachine) + diff --git a/addons/hot/XEH_PREP.hpp b/addons/hot/XEH_PREP.hpp new file mode 100644 index 0000000000..5942a97017 --- /dev/null +++ b/addons/hot/XEH_PREP.hpp @@ -0,0 +1,4 @@ +PREP(seekerType_SACLOS); +PREP(attackProfile_WIRE); +PREP(onFired); + diff --git a/addons/hot/XEH_preInit.sqf b/addons/hot/XEH_preInit.sqf new file mode 100644 index 0000000000..29cc0a7f24 --- /dev/null +++ b/addons/hot/XEH_preInit.sqf @@ -0,0 +1,10 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP_RECOMPILE_START; +#include "XEH_PREP.hpp" +PREP_RECOMPILE_END; + +ADDON = true; + diff --git a/addons/hot/XEH_preStart.sqf b/addons/hot/XEH_preStart.sqf new file mode 100644 index 0000000000..76b104a5bc --- /dev/null +++ b/addons/hot/XEH_preStart.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" + diff --git a/optionals/compat_adr_97/config.cpp b/addons/hot/config.cpp similarity index 65% rename from optionals/compat_adr_97/config.cpp rename to addons/hot/config.cpp index 84a20ed781..52f9f5ef6e 100644 --- a/optionals/compat_adr_97/config.cpp +++ b/addons/hot/config.cpp @@ -6,14 +6,18 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"A3_Weapons_F_Mod"}; + requiredAddons[] = {"ace_common","ace_missileguidance"}; author = ECSTRING(common,ACETeam); - authors[] = {"Nic547"}; + authors[] = {"Brandon (TCVM)"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; }; -#include "CfgWeapons.hpp" +#include "ACE_GuidanceConfig.hpp" +#include "CfgEventHandlers.hpp" #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" +#include "CfgWeapons.hpp" +#include "CfgVehicles.hpp" + diff --git a/addons/hot/functions/fnc_attackProfile_WIRE.sqf b/addons/hot/functions/fnc_attackProfile_WIRE.sqf new file mode 100644 index 0000000000..8aef8a702b --- /dev/null +++ b/addons/hot/functions/fnc_attackProfile_WIRE.sqf @@ -0,0 +1,60 @@ +#include "script_component.hpp" +/* + * Author: Brandon (TCVM) + * Attack profile: Wire guided + * + * Arguments: + * 0: Seeker Target PosASL + * 1: Guidance Arg Array + * 2: Attack Profile State + * + * Return Value: + * Missile Aim PosASL + * + * Example: + * [[1,2,3], [], []] call ace_hot_fnc_attackProfile_WIRE; + * + * Public: No + */ +params ["_seekerTargetPos", "_args", "_attackProfileStateParams"]; +_args params ["_firedEH"]; +_firedEH params ["_shooter","","","","","","_projectile"]; +_attackProfileStateParams params["_maxCorrectableDistance", "_wireCut", "_randomVector", "_crosshairOffset", "_seekerMaxRangeSqr", "_wireCutSource"]; + +private _projectilePos = getPosASL _projectile; + +if ((((getPosASL _shooter) vectorDistanceSqr _projectilePos) > _seekerMaxRangeSqr) || { _wireCut }) exitWith { + // wire snap, random direction + if (_randomVector isEqualTo [0, 0, 0]) then { + _randomVector = RANDOM_VECTOR_3D vectorMultiply 300; + _attackProfileStateParams set [1, true]; + _attackProfileStateParams set [2, _randomVector]; + + playSound3D ["a3\sounds_f\air\sfx\SL_rope_break.wss", objNull, false, AGLtoASL (_shooter modelToWorld _wireCutSource), 150, 1, 25]; + }; + _projectilePos vectorAdd _randomVector +}; + +if (_seekerTargetPos isEqualTo [0, 0, 0]) exitWith { + // cut wire if its caught on terrain + /*if !(lineIntersectsSurfaces [getPosASL _shooter, _projectilePos, _shooter] isEqualTo []) then { + _attackProfileStateParams set [1, true]; + };*/ + // return position 50m infront of projectile + _projectilePos vectorAdd (_projectile vectorModelToWorld [0, 50, 0]) +}; + +private _relativeCorrection = _projectile vectorWorldToModel (_projectilePos vectorDiff _seekerTargetPos); +_relativeCorrection = _relativeCorrection vectorDiff _crosshairOffset; + +private _magnitude = vectorMagnitude [_relativeCorrection select 0, 0, _relativeCorrection select 2]; + +private _fovImpulse = 1 min (_magnitude / _maxCorrectableDistance); // the simulated impulse for the missile being close to the center of the crosshair + +// Adjust the impulse due to near-zero values creating wobbly missiles? +private _correction = _fovImpulse; + +_relativeCorrection = (vectorNormalized _relativeCorrection) vectorMultiply _correction; + +_projectilePos vectorDiff (_projectile vectorModelToWorld _relativeCorrection); + diff --git a/addons/hot/functions/fnc_onFired.sqf b/addons/hot/functions/fnc_onFired.sqf new file mode 100644 index 0000000000..38599f9b6a --- /dev/null +++ b/addons/hot/functions/fnc_onFired.sqf @@ -0,0 +1,53 @@ +#include "script_component.hpp" +/* + * Author: Brandon (TCVM) + * Sets up missile guidance state arrays (called from missileGuidance's onFired). + * + * Arguments: + * Guidance Arg Array + * + * Return Value: + * None + * + * Example: + * [] call ace_hot_fnc_onFired + * + * Public: No + */ +params ["_firedEH", "", "", "_seekerParams", "_stateParams"]; +_firedEH params ["_shooter","_weapon","","","","","_projectile", "_gunner"]; +_stateParams params ["", "_seekerStateParams", "_attackProfileStateParams"]; +_seekerParams params ["", "", "_seekerMaxRange"]; + +private _config = ([_projectile] call CBA_fnc_getObjectConfig) >> "ace_missileguidance"; +private _maxCorrectableDistance = [_config >> "correctionDistance", "NUMBER", DEFAULT_CORRECTION_DISTANCE] call CBA_fnc_getConfigEntry; +private _crosshairOffset = [_config >> "offsetFromCrosshair", "ARRAY", [0, 0, 0]] call CBA_fnc_getConfigEntry; +private _maxDistanceSqr = _seekerMaxRange * _seekerMaxRange; +private _distanceAheadOfMissile = [_config >> "missileLeadDistance", "NUMBER", DEFAULT_LEAD_DISTANCE] call CBA_fnc_getConfigEntry; + +// AI don't know how to use the crosshair offset becauze they dum dum +if ((_gunner != ACE_PLAYER) && {_gunner != (ACE_controlledUAV select 1)}) then { + _crosshairOffset = [0, 0, 0]; +}; +if (_shooter isKindOf "Plane") then {WARNING("SACLOS fired from planes unsupported");}; + +private _turretPath = [_shooter, _weapon] call CBA_fnc_turretPathWeapon; +private _turretConfig = [_shooter, _turretPath] call CBA_fnc_getTurret; + +private _wireCutSource = _shooter selectionPosition getText(_turretConfig >> "missileEnd"); + +_attackProfileStateParams set [0, _maxCorrectableDistance]; +_attackProfileStateParams set [1, false]; // _wireCut +_attackProfileStateParams set [2, [0, 0, 0]]; // _randomVector +_attackProfileStateParams set [3, _crosshairOffset]; // crosshair offset +_attackProfileStateParams set [4, _maxDistanceSqr]; // max distance squared used for wire cut +_attackProfileStateParams set [5, _wireCutSource]; + +private _memoryPointGunnerOptics = getText(_turretConfig >> "memoryPointGunnerOptics"); +private _animationSourceBody = getText(_turretConfig >> "animationSourceBody"); +private _animationSourceGun = getText(_turretConfig >> "animationSourceGun"); +_seekerStateParams set [0, _memoryPointGunnerOptics]; +_seekerStateParams set [1, _animationSourceBody]; +_seekerStateParams set [2, _animationSourceGun]; +_seekerStateParams set [3, _distanceAheadOfMissile]; + diff --git a/addons/hot/functions/fnc_seekerType_SACLOS.sqf b/addons/hot/functions/fnc_seekerType_SACLOS.sqf new file mode 100644 index 0000000000..89ee38b696 --- /dev/null +++ b/addons/hot/functions/fnc_seekerType_SACLOS.sqf @@ -0,0 +1,50 @@ +#include "script_component.hpp" +/* + * Author: Brandon (TCVM) + * SACLOS seeker + * + * Arguments: + * 1: Guidance Arg Array + * 2: Seeker State + * + * Return Value: + * Position of wanted missile pos relative to the camera direction + * + * Example: + * [] call ace_hot_fnc_seekerType_SACLOS + * + * Public: No + */ +params ["", "_args"]; +_args params ["_firedEH", "", "", "_seekerParams", "_stateParams"]; +_firedEH params ["_shooter","_weapon","","","","","_projectile"]; +_seekerParams params ["_seekerAngle"]; +_stateParams params ["", "_seekerStateParams"]; +_seekerStateParams params ["_memoryPointGunnerOptics", "_animationSourceBody", "_animationSourceGun", "_distanceAheadOfMissile"]; + +private _shooterPos = AGLToASL (_shooter modelToWorld(_shooter selectionPosition _memoryPointGunnerOptics)); +private _projPos = getPosASL _projectile; + +private _lookDirection = if !(_shooter isKindOf "CAManBase") then { + private _gBody = -deg(_shooter animationPhase _animationSourceBody); + private _gGun = deg(_shooter animationPhase _animationSourceGun); + + _shooter vectorModelToWorld ([1, _gBody, _gGun] call CBA_fnc_polar2vect); +} else { + _shooterPos = eyePos _shooter; + _shooter weaponDirection _weapon +}; + +private _distanceToProj = _shooterPos vectorDistance _projPos; +private _testPointVector = vectorNormalized (_projPos vectorDiff _shooterPos); +private _testDotProduct = (_lookDirection vectorDotProduct _testPointVector); + +private _testIntersections = lineIntersectsSurfaces [_shooterPos, _projPos, _shooter]; + +if ((_testDotProduct < (cos _seekerAngle)) || { !(_testIntersections isEqualTo []) }) exitWith { + // out of LOS of seeker + [0, 0, 0] +}; + +_shooterPos vectorAdd (_lookDirection vectorMultiply (_distanceToProj + _distanceAheadOfMissile)); + diff --git a/addons/hot/functions/script_component.hpp b/addons/hot/functions/script_component.hpp new file mode 100644 index 0000000000..fbebb0b9a3 --- /dev/null +++ b/addons/hot/functions/script_component.hpp @@ -0,0 +1,2 @@ +#include "\z\ace\addons\hot\script_component.hpp" + diff --git a/addons/hot/script_component.hpp b/addons/hot/script_component.hpp new file mode 100644 index 0000000000..fd5475f15f --- /dev/null +++ b/addons/hot/script_component.hpp @@ -0,0 +1,28 @@ +#define COMPONENT hot +#define COMPONENT_BEAUTIFIED HOT +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_HOT + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_HOT + #define DEBUG_SETTINGS DEBUG_SETTINGS_HOT +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#define RANDOM_VECTOR_3D (call {\ + private _z = random 2 - 1;\ + private _r = sqrt (1 - _z^2);\ + private _theta = random 360;\ + [_r * cos _theta, _r * sin _theta, _z]\ +}) + +#define DEFAULT_CORRECTION_DISTANCE 10 +#define DEFAULT_LEAD_DISTANCE 50 + diff --git a/addons/hot/stringtable.xml b/addons/hot/stringtable.xml new file mode 100644 index 0000000000..56df14fb82 --- /dev/null +++ b/addons/hot/stringtable.xml @@ -0,0 +1,134 @@ + + + + + Wire-Guided + Drahtgelenkt + Kierowany przewodem + Filoguidato + ワイヤ有線誘導 + + + Semi-automatic command to line of sight + halbautomatische Steuerung über Sichtverbindung (SACLOS) + Semi-automatyczna komenda do pola widzenia + Comando Semi-Automatico via Contatto Visivo(SACLOS) + 半自動指令照準線一致誘導方式 + + + Wire-Guided Missile + Drahtgelenkte Rakete + Pocisk kierowany przewodowo + Missile filoguidato + ワイヤ有線誘導ミサイル + + + HOT Missile + Pocisk HOT + Missile HOT + HOT ミサイル + + + HOT 1 + HOT 1 + HOT 1 + HOT 1 + + + HOT 2 + HOT 2 + HOT 2 + HOT 2 + + + HOT 2MP + HOT 2MP + HOT 2MP + HOT 2MP + + + HOT 3 + HOT 3 + HOT 3 + HOT 3 + + + Wire-Guided Missile (Anti-Personnel) + Pocisk kierowany przewodowo (przeciwpiechotny) + Missile filoguidato antiuomo + ワイヤ有線誘導ミサイル (対人) + + + 1x HOT 1 [ACE] + 1x HOT 1 [ACE] + 1x HOT1 [ACE] + 1x HOT 1 [ACE] + + + 3x HOT 1 [ACE] + 3x HOT 1 [ACE] + 3x HOT 1 [ACE] + 3x HOT 1 [ACE] + + + 4x HOT 1 [ACE] + 4x HOT 1 [ACE] + 4x HOT 1 [ACE] + 4x HOT 1 [ACE] + + + 1x HOT 2 [ACE] + 1x HOT 2 [ACE] + 1x HOT 2 [ACE] + 1x HOT 2 [ACE] + + + 3x HOT 2 [ACE] + 3x HOT 2 [ACE] + 3x HOT 2 [ACE] + 3x HOT 2 [ACE] + + + 4x HOT 2 [ACE] + 4x HOT 2 [ACE] + 4x HOT 2 [ACE] + 4x HOT 2 [ACE] + + + 1x HOT 2MP [ACE] + 1x HOT 2MP [ACE] + 1x HOT 2MP [ACE] + 1x HOT 2MP [ACE] + + + 3x HOT 2MP [ACE] + 3x HOT 2MP [ACE] + 3x HOT 2MP [ACE] + 3x HOT 2MP [ACE] + + + 4x HOT 2MP [ACE] + 4x HOT 2MP [ACE] + 4x HOT 2MP [ACE] + 4x HOT 2MP [ACE] + + + 1x HOT 3 [ACE] + 1x HOT 3 [ACE] + 1x HOT 3 [ACE] + 1x HOT 3 [ACE] + + + 4x HOT 3 [ACE] + 4x HOT 3 [ACE] + 4x HOT 3 [ACE] + 4x HOT 3 [ACE] + + + 3x HOT 3 [ACE] + 3x HOT 3 [ACE] + 3x HOT 3 [ACE] + 3x HOT 3 [ACE] + + + diff --git a/addons/huntir/CfgEventhandlers.hpp b/addons/huntir/CfgEventhandlers.hpp index 5da5fd0dc2..becf395052 100644 --- a/addons/huntir/CfgEventhandlers.hpp +++ b/addons/huntir/CfgEventhandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/huntir/CfgMagazineWells.hpp b/addons/huntir/CfgMagazineWells.hpp new file mode 100644 index 0000000000..2d336054df --- /dev/null +++ b/addons/huntir/CfgMagazineWells.hpp @@ -0,0 +1,8 @@ +class CfgMagazineWells { + class CBA_40mm_M203 { + ADDON[] = {"ACE_HuntIR_M203"}; + }; + class UGL_40x36 { //Vanilla and RHS [rhsusf\addons\rhsusf_c_weapons\cfgMagazineWells.hpp] + ADDON[] = {"ACE_HuntIR_M203"}; + }; +}; diff --git a/addons/huntir/Dialog.hpp b/addons/huntir/Dialog.hpp index 67b71349e4..17578bbb3e 100644 --- a/addons/huntir/Dialog.hpp +++ b/addons/huntir/Dialog.hpp @@ -144,8 +144,8 @@ class GVAR(cam_dialog) { idc = -1; type = 0; style = 48; - colorText[ ]={ 1,1,1,1 }; - colorBackground[ ]={ 0.4,0.4,0.4,1 }; + colorText[]={ 1,1,1,1 }; + colorBackground[]={ 0.4,0.4,0.4,1 }; font = "RobotoCondensed"; sizeEx = 0.021; lineSpacing = 1; diff --git a/addons/huntir/XEH_postInit.sqf b/addons/huntir/XEH_postInit.sqf index 5ad798a62d..1f6a39056b 100644 --- a/addons/huntir/XEH_postInit.sqf +++ b/addons/huntir/XEH_postInit.sqf @@ -11,3 +11,5 @@ GVAR(ELEVAT) = 0.01; // Register fire event handler // Don't run for non players, as they are too dumb to launch huntirs anyway ["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; + +["ace_huntir", {!GETMVAR(GVAR(stop),true)}] call CBA_fnc_registerFeatureCamera; diff --git a/addons/huntir/config.cpp b/addons/huntir/config.cpp index 0adf9670a0..89992d5f52 100644 --- a/addons/huntir/config.cpp +++ b/addons/huntir/config.cpp @@ -18,6 +18,7 @@ class CfgPatches { #include "CfgCloudlets.hpp" #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" +#include "CfgMagazineWells.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "Dialog.hpp" diff --git a/addons/huntir/stringtable.xml b/addons/huntir/stringtable.xml index f8211753e6..1948a6c4b8 100644 --- a/addons/huntir/stringtable.xml +++ b/addons/huntir/stringtable.xml @@ -7,7 +7,7 @@ Caja de transporte de HuntIR Transportní bedna HuntIR Ящик с HuntIR - HuntIR Transport Box + Cassa di Trasporto HuntIR Skrzynia HuntIR Boite de transport HuntIR HuntIR Transport Box @@ -23,7 +23,7 @@ Proyectil HuntIR HuntIR náboj HuntIR снаряд - HuntIR Round + Colpo HuntIR Nabój HuntIR Munition HuntIR HuntIR lövedék @@ -39,7 +39,7 @@ Monitor HuntIR HuntIR monitor HuntIR монитор - HuntIR monitor + Monitor HuntIR Odbiornik HuntIR Ecran HuntIR HuntIR monitor @@ -55,7 +55,7 @@ Activar monitor HuntIR Zapnout HuntIR monitor Включить HuntIR монитор - Activate HuntIR monitor + Attiva il monitor HuntIR Włącz odbiornik HuntIR Allumer l'écran du HuntIR HuntIR monitor aktiválása @@ -71,7 +71,7 @@ Camara: Kamera: Камера: - Camera: + Telecamera: Kamera: Caméra : Kamera: @@ -87,7 +87,7 @@ Altitud: Výška: Высота: - Altitude: + Altitudine: Wysokość: Altitude : Magasság: @@ -103,7 +103,7 @@ Tiempo de grabación: Čas nahrávání: Время записи: - Recording Time: + Tempo di Registrazione: Czas nagrywania: Temps d'enregistrement : Felvételi idő: @@ -119,7 +119,7 @@ Pulsar ESC para salir de la camara Stiskni ESC pro opustění kamery Нажмите ESC чтобы выйти из режима камеры - Press ESC to quit camera + Premi ESC per uscire dalla telecamera Wciśnij ESC by wyjść z widoku kamery Appuyer sur ESC pour quitter la camera Nyomj ESC-ket a kamerából való kilépéshez @@ -135,7 +135,7 @@ Ayuda Nápověda Помощь - Help + Aiuto Pomoc Aide Súgó @@ -151,7 +151,7 @@ A/D - Cambiar zoom A/D - Změna přiblížení A/D - Приближение - A/D - Cycle zoom + A/D - Cambia zoom A/D - powiększenie Q/D - Changement de zoom A/D - Nagyítás @@ -167,7 +167,7 @@ W/S - Seleccionar camara W/S - Výběr kamery W/S - Выбрать камеру - W/S - Select camera + W/S - Seleziona telecamera W/S - wybór kamery Z/S - Sélectionner la caméra W/S - Kamera váltás @@ -183,7 +183,7 @@ Left/Right - Rotar camara Levá/Pravá - Rotace kamery Влево/Вправо - Вращать камеру - Left/Right - Rotate camera + Left/Right - Ruota telecamera Lewo/Prawo - obrót kamery w poziomie Gauche/Droite - Rotation de la caméra Jobb/Bal - Kamera forgatás @@ -199,7 +199,7 @@ Up/Down - Subir/bajar camara Nahoru/Dolu - Zvýšít/snížit úhel pohledu kamery Вверх/Вниз - Поднять/Опустить камеру - Up/Down - Elevate/lower camera + Up/Down - Alza/abbassa telecamera Góra/Dół - obrót kamery w pionie Haut/Bas - Monter/descendre la caméra Fel/Le - Kamera döntése/süllyesztése @@ -215,7 +215,7 @@ N - Cambiar modos de IT N - Změna režimů kamery N - Режимы камеры - N - Cycle IT modes + N - Cambia modalità IT N - wybór trybu IT N - Changement de modes IT N - Hőkép módok @@ -231,7 +231,7 @@ R - Reiniciar camara R - Reset kamery R - Сбросить настройки камеры - R - Reset camera + R - Azzera telecamera R - resetuj kamerę R - Reset de la caméra R - Kamera visszaállítása @@ -247,7 +247,7 @@ Esc - Salit de ayuda Esc - Ukončit pomoc Esc - Выйти из помощи - Esc - Exit help + Esc - Chiudi aiuto Esc - wyjście z ekranu Pomocy Esc - Sortir de l'aide Exit - Kilépés a súgóból diff --git a/addons/interact_menu/CfgEventHandlers.hpp b/addons/interact_menu/CfgEventHandlers.hpp index b8bb1264e1..b5880fb05b 100644 --- a/addons/interact_menu/CfgEventHandlers.hpp +++ b/addons/interact_menu/CfgEventHandlers.hpp @@ -17,14 +17,6 @@ class Extended_PostInit_EventHandlers { }; }; -class Extended_InitPost_EventHandlers { - class All { - class GVAR(compileMenu) { - init = QUOTE(_this call FUNC(compileMenu);_this call FUNC(compileMenuSelfAction)); - }; - }; -}; - class Extended_DisplayLoad_EventHandlers { class RscDiary { ADDON = QUOTE(call COMPILE_FILE(XEH_displayLoad)); diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index d6d5cd065c..9a44674e42 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -2,6 +2,29 @@ if (!hasInterface) exitWith {}; +// Wait until player controls (man,vehicle or uav) a thing before compiling the menu +GVAR(controllableSelfActionsAdded) = [] call CBA_fnc_createNamespace; +DFUNC(newControllableObject) = { + params ["_object"]; + private _type = typeOf _object; + TRACE_2("newControllableObject",_object,_type); + if (_type == "") exitWith {}; + + if (!(GVAR(controllableSelfActionsAdded) getVariable [_type, false])) then { + [_type] call FUNC(compileMenuSelfAction); + GVAR(controllableSelfActionsAdded) setVariable [_type, true]; + [{ + TRACE_1("sending newControllableObject event",_this); + // event for other systems to add self actions, running addActionToClass before this will cause compiling + [QGVAR(newControllableObject), _this] call CBA_fnc_localEvent; + }, [_type]] call CBA_fnc_execNextFrame; // delay event a frame to ensure postInit has run for all addons + }; +}; +["unit", {[_this select 0] call FUNC(newControllableObject)}, true] call CBA_fnc_addPlayerEventHandler; +["vehicle", {[_this select 1] call FUNC(newControllableObject)}, true] call CBA_fnc_addPlayerEventHandler; +["ACE_controlledUAV", {[_this select 0] call FUNC(newControllableObject)}] call CBA_fnc_addEventHandler; + + GVAR(blockDefaultActions) = []; GVAR(cachedBuildingTypes) = []; diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf index a05eac1bb5..08fa9701cd 100644 --- a/addons/interact_menu/XEH_preInit.sqf +++ b/addons/interact_menu/XEH_preInit.sqf @@ -8,9 +8,17 @@ PREP_RECOMPILE_END; #include "initSettings.sqf" +if (!hasInterface) exitWith { ADDON = true; }; + +["All", "init", {_this call FUNC(compileMenu)}] call CBA_fnc_addClassEventHandler; + GVAR(ActNamespace) = [] call CBA_fnc_createNamespace; GVAR(ActSelfNamespace) = [] call CBA_fnc_createNamespace; +// Compile actions for CAManBase now and use for all mans types +["CAManBase"] call FUNC(compileMenu); +GVAR(cacheManActions) = +(GVAR(ActNamespace) getVariable ["CAManBase", []]); // copy + // Event handlers for all interact menu controls DFUNC(handleMouseMovement) = { if (GVAR(cursorKeepCentered)) then { diff --git a/addons/interact_menu/functions/fnc_addActionToClass.sqf b/addons/interact_menu/functions/fnc_addActionToClass.sqf index 558c497667..20c229bfc6 100644 --- a/addons/interact_menu/functions/fnc_addActionToClass.sqf +++ b/addons/interact_menu/functions/fnc_addActionToClass.sqf @@ -20,6 +20,7 @@ * Public: Yes */ +if (!hasInterface) exitWith { [] }; if (!params [["_objectType", "", [""]], ["_typeNum", 0, [0]], ["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith { ERROR("Bad Params"); [] diff --git a/addons/interact_menu/functions/fnc_addActionToObject.sqf b/addons/interact_menu/functions/fnc_addActionToObject.sqf index 3ee7c5c332..f3102469a5 100644 --- a/addons/interact_menu/functions/fnc_addActionToObject.sqf +++ b/addons/interact_menu/functions/fnc_addActionToObject.sqf @@ -19,6 +19,7 @@ * Public: Yes */ +if (!hasInterface) exitWith { [] }; if (!params [["_object", objNull, [objNull]], ["_typeNum", 0, [0]], ["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith { ERROR("Bad Params"); [] diff --git a/addons/interact_menu/functions/fnc_addActionToZeus.sqf b/addons/interact_menu/functions/fnc_addActionToZeus.sqf index 65ef178fb0..538ea5fe16 100644 --- a/addons/interact_menu/functions/fnc_addActionToZeus.sqf +++ b/addons/interact_menu/functions/fnc_addActionToZeus.sqf @@ -17,6 +17,7 @@ * Public: Yes */ +if (!hasInterface) exitWith { [] }; if (!params [["_parentPath", [], [[]]], ["_action", [], [[]], 11]]) exitWith {ERROR("Bad Params"); []}; if ((_parentPath param [0, ""]) != "ACE_ZeusActions") exitWith {ERROR_1("Bad path %1 - should have ACE_ZeusActions as base", _parentPath); []}; TRACE_2("addActionToZeus",_parentPath,_action); diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 94c63795ff..2f68d490b8 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -26,6 +26,15 @@ private _namespace = GVAR(ActNamespace); // Exit if the action menu is already compiled for this class if !(isNil {_namespace getVariable _objectType}) exitWith {}; +if ((_objectType isKindOf "CAManBase") && {!isNil QGVAR(cacheManActions)}) exitWith { + _namespace setVariable [_objectType, +GVAR(cacheManActions)]; // copy +}; + +if ((getNumber (configFile >> "CfgVehicles" >> _objectType >> "isPlayableLogic")) == 1) exitWith { + TRACE_1("skipping playable logic",_objectType); + _namespace setVariable [_objectType, []]; +}; + private _recurseFnc = { params ["_actionsCfg", "_parentDistance"]; private _actions = []; @@ -106,11 +115,6 @@ private _recurseFnc = { _actions }; -if ((getNumber (configFile >> "CfgVehicles" >> _objectType >> "isPlayableLogic")) == 1) exitWith { - TRACE_1("skipping playable logic",_objectType); - _namespace setVariable [_objectType, []]; -}; - private _actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_Actions"; TRACE_1("Building ACE_Actions",_objectType); diff --git a/addons/interact_menu/functions/fnc_createAction.sqf b/addons/interact_menu/functions/fnc_createAction.sqf index f8c61c3842..428f8a26d7 100644 --- a/addons/interact_menu/functions/fnc_createAction.sqf +++ b/addons/interact_menu/functions/fnc_createAction.sqf @@ -28,6 +28,7 @@ // IGNORE_PRIVATE_WARNING(_actionName,_displayName,_icon,_statement,_condition,_insertChildren,_customParams,_position,_distance,_params,_modifierFunction); +if (!hasInterface) exitWith { [] }; params [ "_actionName", "_displayName", diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index c27932f214..2e29db71e5 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -452,6 +452,7 @@ 选择器颜色 選單的顏色 Controllo Settore + Kolor wybierającego diff --git a/addons/interaction/ACE_ZeusActions.hpp b/addons/interaction/ACE_ZeusActions.hpp index af6b4504e1..9fad6c819a 100644 --- a/addons/interaction/ACE_ZeusActions.hpp +++ b/addons/interaction/ACE_ZeusActions.hpp @@ -3,10 +3,11 @@ class ACE_ZeusActions { class ZeusUnits { displayName = "$STR_A3_RscDisplayCurator_ModeUnits_tooltip"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeUnits_ca.paa"; - condition = QUOTE((count (curatorSelected select 0)) > 0); + condition = QUOTE(!([] isEqualTo (curatorSelected select 0))); class stance { displayName = "$STR_A3_RscAttributeUnitPos_Title"; + condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {_x isKindOf 'CAManBase'}}); class prone { displayName = "$STR_Pos_Down"; @@ -33,17 +34,38 @@ class ACE_ZeusActions { class remoteControl { displayName = "$STR_A3_CfgVehicles_ModuleRemoteControl_F"; icon = "\A3\Modules_F_Curator\Data\portraitRemoteControl_ca.paa"; - statement = "_unit = objNull; { if ((side _x in [east,west,resistance,civilian]) && !(isPlayer _x)) exitWith { _unit = _x; }; } forEach (curatorSelected select 0); bis_fnc_curatorObjectPlaced_mouseOver = ['OBJECT',_unit]; (group _target) createUnit ['ModuleRemoteControl_F',[0,0,0],[],0,'NONE'];"; + condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {!isNull effectiveCommander _x}}); + statement = QUOTE( \ + private _units = curatorSelected select 0; \ + private _unit = _units param [ARR_2( \ + _units findIf { \ + side _x in [ARR_4(east,west,resistance,civilian)] \ + && !(isPlayer _x) \ + }, \ + objNull \ + )]; \ + bis_fnc_curatorObjectPlaced_mouseOver = [ARR_2('OBJECT',_unit)]; \ + private _rc = group _target createUnit [ARR_5('ModuleRemoteControl_F',[ARR_3(0,0,0)],[],0,'NONE')]; \ + _rc setVariable [ARR_2('BIS_fnc_initModules_disableAutoActivation',false)]; \ + ); + }; + + class GVAR(repair) { + displayName = "$STR_repair"; + icon = "\A3\ui_f\data\igui\cfg\actions\repair_ca.paa"; + condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}}}); + statement = QUOTE(call FUNC(repair_Statement)); }; }; class ZeusGroups { displayName = "$STR_A3_RscDisplayCurator_ModeGroups_tooltip"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeGroups_ca.paa"; - condition = QUOTE((count (curatorSelected select 1)) > 0); + condition = QUOTE(!([] isEqualTo (curatorSelected select 1))); class behaviour { displayName = "$STR_Combat_Mode"; + condition = QUOTE(ZEUS_ACTION_CONDITION); class careless { displayName = "$STR_Combat_Careless"; @@ -73,6 +95,7 @@ class ACE_ZeusActions { class speed { displayName = "$STR_HC_Menu_Speed"; + condition = QUOTE(ZEUS_ACTION_CONDITION); class limited { displayName = "$STR_Speed_Limited"; @@ -93,6 +116,7 @@ class ACE_ZeusActions { class formation { displayName = "$STR_Formation"; + condition = QUOTE(ZEUS_ACTION_CONDITION); class wedge { displayName = "$STR_Wedge"; @@ -145,10 +169,11 @@ class ACE_ZeusActions { class ZeusWaypoints { displayName = "Waypoints"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeRecent_ca.paa"; - condition = QUOTE((count (curatorSelected select 2)) > 0); + condition = QUOTE(!([] isEqualTo (curatorSelected select 2))); class behaviour { displayName = "$STR_Combat_Mode"; + condition = QUOTE(ZEUS_ACTION_CONDITION); class careless { displayName = "$STR_Combat_Careless"; @@ -178,6 +203,7 @@ class ACE_ZeusActions { class speed { displayName = "$STR_HC_Menu_Speed"; + condition = QUOTE(ZEUS_ACTION_CONDITION); class limited { displayName = "$STR_Speed_Limited"; @@ -198,6 +224,7 @@ class ACE_ZeusActions { class formation { displayName = "$STR_Formation"; + condition = QUOTE(ZEUS_ACTION_CONDITION); class wedge { displayName = "$STR_Wedge"; @@ -250,6 +277,6 @@ class ACE_ZeusActions { class ZeusMarkers { displayName = "$STR_A3_RscDisplayCurator_ModeMarkers_tooltip"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeMarkers_ca.paa"; - condition = QUOTE((count (curatorSelected select 3)) > 0); + condition = QUOTE(!([] isEqualTo (curatorSelected select 3))); }; }; diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index ed208b0435..7a49f43a95 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -342,6 +342,11 @@ class CfgVehicles { statement = ""; insertChildren = QUOTE(_this call DFUNC(addPassengersActions)); }; + class GVAR(smashWindshield) { + displayName = CSTRING(SmashWindshield); + condition = QUOTE(_player == driver _target && {private _damage = _target getHitPointDamage 'HitGlass1'; _damage > 0.5 && {_damage < 1}}); + statement = QUOTE(playSound3D [ARR_2('A3\Sounds_F\weapons\hits\glass_2.wss',_target)]; _target setHitPointDamage [ARR_2('HitGlass1',1)];); + }; }; }; @@ -701,6 +706,30 @@ class CfgVehicles { }; }; + class Land_Camping_Light_off_F: ThingX { + class ACE_Actions { + class ACE_MainActions { + displayName = CSTRING(MainAction); + distance = 2; + + // to make "Camping Lantern (Off)" be turned on we replace it with "Camping Lantern" + class GVAR(TurnOn) { + displayName = CSTRING(TurnOn); + icon = "\A3\Ui_f\data\IGUI\Cfg\VehicleToggles\LightsIconOn_ca.paa"; + condition = QUOTE(alive _target); + statement = QUOTE(\ + private _position = getPosATL _target;\ + private _vectorDirAndUp = [ARR_2(vectorDir _target,vectorUp _target)];\ + deleteVehicle _target;\ + private _newLamp = 'Land_Camping_Light_F' createVehicle [ARR_3(0,0,0)];\ + _newLamp setPosATL _position;\ + _newLamp setVectorDirAndUp _vectorDirAndUp;\ + ); + }; + }; + }; + }; + class RoadCone_F: ThingX { class ACE_Actions { class ACE_MainActions { diff --git a/addons/interaction/RscTitles.hpp b/addons/interaction/RscTitles.hpp index ee4783da30..e157fd696c 100644 --- a/addons/interaction/RscTitles.hpp +++ b/addons/interaction/RscTitles.hpp @@ -1,7 +1,3 @@ - -#define HSPACE 0.5-2.0/16/2 -#define VSPACE 0.5-0.3/9/2 - class ACE_Interaction_Button_Base { tooltip = ""; //action = "ACE_Interaction_isMousePressed = true;(findDisplay 1713999) closeDisplay 1;_action = ACE_Interaction_Buttons select ACE_Interaction_SelectedButton;ACE_Interaction_SelectedButton = -1; if (call (_action select 2)) then {call (_action select 1)};"; @@ -41,9 +37,11 @@ class ACE_Interaction_Button_Base { soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1}; }; -class RscListbox; class IGUIBack; +class RscListbox; class RscText; +class RscPicture; +class RscControlsGroupNoScrollbars; #define X_OFFSET 0.2 @@ -69,7 +67,7 @@ class RscACE_SelectAnItem { text = ""; }; class itemList: RscListBox { - onMouseButtonDblClick = "_this call ACE_Interaction_fnc_onSelectMenuDblClick"; + onMouseButtonDblClick = QUOTE(_this call DFUNC(onSelectMenuDblClick)); idc = 8866; x = X_OFFSET + 0.005; w = 0.59; @@ -108,7 +106,7 @@ class RscACE_SelectAnItem { y = 0.605; style = 2; text = CSTRING(Back); - action = "call ACE_Interaction_fnc_hideMenu;"; //'Default' call ACE_Interaction_fnc_openMenu; 'Default' call ACE_Interaction_fnc_openMenuSelf; + action = QUOTE(call DFUNC(hideMenu);); //'Default' call DFUNC(openMenu); 'Default' call DFUNC(openMenuSelf); colorBackground[] = {0,0,0,0}; colorBackgroundDisabled[] = {0,0,0,0}; colorBackgroundActive[] = {1,1,1,0.2}; @@ -122,7 +120,7 @@ class RscACE_SelectAnItem { w = 0.15; style = 2; text = CSTRING(MakeSelection); - action = "call ACE_Interaction_fnc_hideMenu;"; + action = QUOTE(call DFUNC(hideMenu);); colorBackground[] = {0,0,0,0}; colorBackgroundDisabled[] = {0,0,0,0}; colorBackgroundActive[] = {1,1,1,0.2}; @@ -131,75 +129,78 @@ class RscACE_SelectAnItem { }; }; -#define GUI_GRID_W (0.025) -#define GUI_GRID_H (0.04) - -class RscPicture; -class RscInteractionIcon: RscPicture { - x = 19.25 * GUI_GRID_W; - y = 15.75 * GUI_GRID_H; - w = 2*GUI_GRID_H; - h = 2*GUI_GRID_H; -}; - -class RscInteractionHelperIcon: RscInteractionIcon { - x = 20 * GUI_GRID_W; - y = 16 * GUI_GRID_H; - w = GUI_GRID_H; - h = GUI_GRID_H; -}; - -class RscInteractionText: RscText{ - x = 21 * GUI_GRID_W; - y = 16 * GUI_GRID_H; - w = 24 * GUI_GRID_W; - h = 1.5 * GUI_GRID_H; -}; -class RscInteractionText_right: RscText{ - style = 1; // right aligned text -}; - class RscTitles { - class GVAR(InteractionHelper) { - idd = 9930; + class GVAR(RscMouseHint) { + idd = IDD_MOUSEHINT; + fadeIn = 0; + fadeOut = 0; + duration = 999999; enableSimulation = 1; - movingEnable = 0; - fadeIn=0.5; - fadeOut=0.5; - duration = 10e10; - onLoad = "uiNamespace setVariable ['ACE_Helper_Display', _this select 0];"; - + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(mouseHint),_this select 0)]); class controls { - class SelectIcon: RscInteractionHelperIcon{ - idc = 1200; + class IconLMB: RscPicture { + idc = IDC_MOUSEHINT_LMB; text = QPATHTOF(UI\mouse_left_ca.paa); + x = 20 * GUI_GRID_W + GUI_GRID_CENTER_X; y = 17.5 * GUI_GRID_H; + w = GUI_GRID_H; + h = GUI_GRID_H; }; - class SelectText: RscInteractionText{ - idc = 1000; - y = 17 * GUI_GRID_H; - text = CSTRING(MakeSelection); + class TextLMB: RscText { + idc = IDC_MOUSEHINT_LMB_TEXT; + text = ""; + x = 21.1 * GUI_GRID_W + GUI_GRID_CENTER_X; + y = 17.45 * GUI_GRID_H; + w = 24 * GUI_GRID_W; + h = GUI_GRID_H; + sizeEx = GUI_GRID_H; }; - class GoBackIcon: RscInteractionHelperIcon{ - idc = 1201; - text = QPATHTOF(UI\mouse_right_ca.paa); - y = 19.5 * GUI_GRID_H; - }; - class GoBackText: RscInteractionText{ - idc = 1001; - y = 19 * GUI_GRID_H; - text = CSTRING(Back); - }; - class ScrollIcon: RscInteractionHelperIcon{ - idc = 1202; + class IconMMB: IconLMB { + idc = IDC_MOUSEHINT_MMB; text = QPATHTOF(UI\mouse_scroll_ca.paa); + y = 18.55 * GUI_GRID_H; + }; + class TextMMB: TextLMB { + idc = IDC_MOUSEHINT_MMB_TEXT; y = 18.5 * GUI_GRID_H; }; - class ScrollText: RscInteractionText{ - idc = 1002; - y = 18 * GUI_GRID_H; - text = CSTRING(ScrollHint); + class IconRMB: IconLMB { + idc = IDC_MOUSEHINT_RMB; + text = QPATHTOF(UI\mouse_right_ca.paa); + y = 19.6 * GUI_GRID_H; + }; + class TextRMB: TextLMB { + idc = IDC_MOUSEHINT_RMB_TEXT; + y = 19.55 * GUI_GRID_H; }; }; }; }; + +class GVAR(RscExtraKey): RscControlsGroupNoScrollbars { + idc = IDC_MOUSEHINT_EXTRA; + x = 0; + y = 0; + w = 40 * GUI_GRID_W; + h = GUI_GRID_H; + class controls { + class Name: RscText { + idc = IDC_MOUSEHINT_EXTRA_NAME; + style = 1; + x = 0; + y = 0; + w = 21.5 * GUI_GRID_W + GUI_GRID_CENTER_X; + h = GUI_GRID_H; + sizeEx = GUI_GRID_H; + font = "EtelkaMonospaceProBold"; + }; + class Text: RscText { + idc = IDC_MOUSEHINT_EXTRA_TEXT; + x = 21.1 * GUI_GRID_W + GUI_GRID_CENTER_X; + y = 0; + w = 24 * GUI_GRID_W; + h = GUI_GRID_H; + sizeEx = GUI_GRID_H; + }; + }; +}; diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index 4b97c408aa..7a9f2b6572 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -135,21 +135,3 @@ GVAR(isOpeningDoor) = false; }]; }; }] call CBA_fnc_addEventHandler; - - -// to make "Camping Lantern (Off)" be turned on we replace it with "Camping Lantern" -private _action = [ - QGVAR(TurnOn), - localize LSTRING(TurnOn), - "\A3\Ui_f\data\IGUI\Cfg\VehicleToggles\LightsIconOn_ca.paa", - { - private _position = getPosATL _target; - private _vectorDirAndUp = [vectorDir _target, vectorUp _target]; - deleteVehicle _target; - private _newLamp = "Land_Camping_Light_F" createVehicle [0,0,0]; - _newLamp setPosATL _position; - _newLamp setVectorDirAndUp _vectorDirAndUp; - }, - {alive _target} -] call EFUNC(interact_menu,createAction); -["Land_Camping_Light_off_F", 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index b47cf6628d..dbc37e2bb6 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -6,4 +6,11 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +DFUNC(repair_Statement) = { // moved from config because of build problems + TRACE_1("repair_Statement",_this); + { + if (_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}) then { _x setDamage 0; }; + } forEach (curatorSelected select 0) +}; + ADDON = true; diff --git a/addons/interaction/functions/fnc_getVehiclePos.sqf b/addons/interaction/functions/fnc_getVehiclePos.sqf index 2da5a31820..bd25fc710b 100644 --- a/addons/interaction/functions/fnc_getVehiclePos.sqf +++ b/addons/interaction/functions/fnc_getVehiclePos.sqf @@ -56,7 +56,7 @@ if (_cameraPosASL select 2 >= 0) then { _pos set [2, (_pos select 2) min _dz]; }; -TRACE_4("",_bb,_bbX,_relPos,_pos,_cameraPosASL); +TRACE_5("",_bb,_bbX,_relPos,_pos,_cameraPosASL); _pos /////////////////// diff --git a/addons/interaction/functions/fnc_getVehiclePosComplex.sqf b/addons/interaction/functions/fnc_getVehiclePosComplex.sqf index 186d424956..17f77922b9 100644 --- a/addons/interaction/functions/fnc_getVehiclePosComplex.sqf +++ b/addons/interaction/functions/fnc_getVehiclePosComplex.sqf @@ -59,5 +59,5 @@ if (_cameraPosASL select 2 >= 0) then { _pos set [2, (_pos select 2) min _dz]; }; -TRACE_4("",_bb,_bbX,_relPos,_pos,_cameraPosASL); +TRACE_5("",_bb,_bbX,_relPos,_pos,_cameraPosASL); _pos diff --git a/addons/interaction/functions/fnc_hideMouseHint.sqf b/addons/interaction/functions/fnc_hideMouseHint.sqf index 155f732eab..8daa6d6e09 100644 --- a/addons/interaction/functions/fnc_hideMouseHint.sqf +++ b/addons/interaction/functions/fnc_hideMouseHint.sqf @@ -1,7 +1,7 @@ #include "script_component.hpp" /* * Author: Garth de Wet (LH) - * Hides the interaction helper text with the mouse buttons at the bottom middle of the screen + * Hides the interaction hint for mouse buttons. * * Arguments: * None @@ -10,14 +10,12 @@ * None * * Example: - * call ace_interaction_fnc_hideMouseHint + * [] call ace_interaction_fnc_hideMouseHint * * Public: No */ -if (isNull (uiNamespace getVariable ["ACE_Helper_Display", objNull])) exitWith {}; - -(QGVAR(InteractionHelper) call BIS_fnc_rscLayer) cutText ["", "PLAIN"]; +(QGVAR(RscMouseHint) call BIS_fnc_rscLayer) cutFadeOut 0.2; // Re-enable action menu inGameUISetEventHandler ["PrevAction", "false"]; diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index d27ac52f44..73cf4e0a37 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -23,6 +23,10 @@ TRACE_2("openDoor",_house,_door); if (isNull _house) exitWith {}; +if ((configProperties [configFile >> "CfgVehicles" >> (typeOf _house) >> "UserActions"]) isEqualTo []) exitWith { + TRACE_1("Ignore houses with no UserActions",typeOf _house); // Fix problem with Shoothouse Walls +}; + private _getDoorAnimations = [_house, _door] call FUNC(getDoorAnimations); _getDoorAnimations params ["_animations"]; diff --git a/addons/interaction/functions/fnc_showMouseHint.sqf b/addons/interaction/functions/fnc_showMouseHint.sqf index 7e9cb6110f..b56d053eaa 100644 --- a/addons/interaction/functions/fnc_showMouseHint.sqf +++ b/addons/interaction/functions/fnc_showMouseHint.sqf @@ -1,13 +1,14 @@ #include "script_component.hpp" /* - * Author: Garth de Wet (LH) - * Shows the interaction helper text with the mouse buttons at the bottom middle of the screen. + * Author: Garth de Wet (LH), mharis001 + * Shows an interaction hint for mouse buttons. + * Empty strings will hide their respective button. * * Arguments: - * 0: Left Click Text - * 1: Right Click Text - * 2: Scroll Text (default: "") - * 2: Extra Icon/Text pairs (default: []) + * 0: Left click text + * 1: Right click text + * 2: Scroll text (default: "") + * 2: Extra icon/text pairs (default: []) * * Return Value: * None @@ -18,63 +19,77 @@ * Public: No */ -#define GUI_GRID_W (0.025) -#define GUI_GRID_H (0.04) +params ["_textLMB", "_textRMB", ["_textMMB", ""], ["_extraIconSets", []]]; -params ["_leftClick", "_rightClick", ["_scroll", ""], ["_extraIconSets", []]]; +(QGVAR(RscMouseHint) call BIS_fnc_rscLayer) cutRsc [QGVAR(RscMouseHint), "PLAIN", -1, false]; +private _display = uiNamespace getVariable [QGVAR(mouseHint), displayNull]; -(QGVAR(InteractionHelper) call BIS_fnc_rscLayer) cutRsc [QGVAR(InteractionHelper), "PLAIN", 0.5, false]; +// Set text for buttons, hide if empty string +{ + _x params ["_buttonText", "_iconIDC", "_textIDC"]; -disableSerialization; + if (_buttonText == "") then { + private _ctrlIcon = _display displayCtrl _iconIDC; + _ctrlIcon ctrlShow false; + } else { + private _ctrlText = _display displayCtrl _textIDC; + _ctrlText ctrlSetText _buttonText; + }; +} forEach [ + [_textLMB, IDC_MOUSEHINT_LMB, IDC_MOUSEHINT_LMB_TEXT], + [_textMMB, IDC_MOUSEHINT_MMB, IDC_MOUSEHINT_MMB_TEXT], + [_textRMB, IDC_MOUSEHINT_RMB, IDC_MOUSEHINT_RMB_TEXT] +]; -private _display = uiNamespace getVariable ["ACE_Helper_Display", objNull]; +// Y offset for extra icon sets +private _yOffset = 19.5; -if (isNull _display) exitWith {WARNING("Display was null");}; +if (_textMMB == "") then { + // Move RMB up if MMB inactive + { + private _ctrl = _display displayCtrl _x; + private _ctrlPos = ctrlPosition _ctrl; + _ctrlPos set [1, (_ctrlPos select 1) - 1.05 * GUI_GRID_H]; + _ctrl ctrlSetPosition _ctrlPos; + _ctrl ctrlCommit 0; + } forEach [IDC_MOUSEHINT_RMB, IDC_MOUSEHINT_RMB_TEXT]; -(_display displayCtrl 1000) ctrlSetText _leftClick; -(_display displayCtrl 1001) ctrlSetText _rightClick; - -(_display displayCtrl 1000) ctrlShow (_leftClick != ""); -(_display displayCtrl 1200) ctrlShow (_leftClick != ""); -(_display displayCtrl 1001) ctrlShow (_rightClick != ""); -(_display displayCtrl 1201) ctrlShow (_rightClick != ""); - -private _offset = 19; - -if (_scroll == "") then { - (_display displayCtrl 1002) ctrlShow false; - (_display displayCtrl 1202) ctrlShow false; - (_display displayCtrl 1001) ctrlSetPosition [21 * GUI_GRID_W, 18 * GUI_GRID_H, 24 * GUI_GRID_W, 1.5 * GUI_GRID_H]; - (_display displayCtrl 1201) ctrlSetPosition [20 * GUI_GRID_W, 18.5 * GUI_GRID_H, 1.5 * GUI_GRID_W, 1 * GUI_GRID_H]; - (_display displayCtrl 1001) ctrlCommit 0; - (_display displayCtrl 1201) ctrlCommit 0; } else { - _offset = _offset + 1; - (_display displayCtrl 1002) ctrlSetText _scroll; - // Disable action menu inGameUISetEventHandler ["PrevAction", "true"]; inGameUISetEventHandler ["NextAction", "true"]; inGameUISetEventHandler ["Action", "true"]; + + // Increase offset since MMB active + _yOffset = 20.55; }; +// Create extra icon sets { - _x params [["_xKeyName", "", [""]], ["_xText", "", [""]]]; - switch (toLower _xKeyName) do { - case ("alt"): {_xKeyName = format ["<%1>", toUpper localize "str_dik_alt"];}; - case ("control"); - case ("ctrl"): {_xKeyName = format ["<%1>", toUpper localize "str_dik_control"];}; - case ("shift"): {_xKeyName = format ["<%1>", toUpper localize "str_dik_shift"];}; + _x params [["_keyName", "", [""]], ["_keyText", "", [""]]]; + + // Only create extra key if both name and text are valid + if (_keyName != "" && {_keyText != ""}) then { + // Localize Ctrl, Shift, or Alt keys + switch (toLower _keyName) do { + case "ctrl"; + case "control": {_keyName = format ["<%1>", toUpper localize "STR_dik_control"]}; + case "shift": {_keyName = format ["<%1>", toUpper localize "STR_dik_shift"]}; + case "alt": {_keyName = format ["<%1>", toUpper localize "STR_dik_alt"]}; + }; + + // Create extra key group and update position + private _ctrlGroup = _display ctrlCreate [QGVAR(RscExtraKey), IDC_MOUSEHINT_EXTRA]; + _ctrlGroup ctrlSetPosition [0, _yOffset * GUI_GRID_H]; + _ctrlGroup ctrlCommit 0; + + // Set name and text + private _ctrlName = _ctrlGroup controlsGroupCtrl IDC_MOUSEHINT_EXTRA_NAME; + _ctrlName ctrlSetText _keyName; + + private _ctrlText = _ctrlGroup controlsGroupCtrl IDC_MOUSEHINT_EXTRA_TEXT; + _ctrlText ctrlSetText _keyText; + + _yOffset = _yOffset + 1; }; - - private _keyNameCtrl = _display ctrlCreate ["RscInteractionText_right", -1]; - private _textCtrl = _display ctrlCreate ["RscInteractionText", -1]; - _keyNameCtrl ctrlSetText _xKeyName; - _textCtrl ctrlSetText _xText; - _keyNameCtrl ctrlSetPosition [0 * GUI_GRID_W, _offset * GUI_GRID_H, 21.4 * GUI_GRID_W, 1.5 * GUI_GRID_H]; - _textCtrl ctrlSetPosition [21 * GUI_GRID_W, _offset * GUI_GRID_H, 24 * GUI_GRID_W, 1.5 * GUI_GRID_H]; - _keyNameCtrl ctrlCommit 0; - _textCtrl ctrlCommit 0; - _offset = _offset + 1; } forEach _extraIconSets; - diff --git a/addons/interaction/script_component.hpp b/addons/interaction/script_component.hpp index e94733c456..8114dc37a2 100644 --- a/addons/interaction/script_component.hpp +++ b/addons/interaction/script_component.hpp @@ -16,6 +16,20 @@ #include "\z\ace\addons\main\script_macros.hpp" +#include "\a3\ui_f\hpp\defineCommonGrids.inc" + +#define IDD_MOUSEHINT 2400 +#define IDC_MOUSEHINT_LMB 2410 +#define IDC_MOUSEHINT_LMB_TEXT 2420 +#define IDC_MOUSEHINT_MMB 2430 +#define IDC_MOUSEHINT_MMB_TEXT 2450 +#define IDC_MOUSEHINT_RMB 2460 +#define IDC_MOUSEHINT_RMB_TEXT 2470 + +#define IDC_MOUSEHINT_EXTRA 2500 +#define IDC_MOUSEHINT_EXTRA_NAME 2510 +#define IDC_MOUSEHINT_EXTRA_TEXT 2520 + #define MACRO_DOOR_REACH_DISTANCE (AGLToASL positionCameraToWorld [0,0,0] vectorDistance AGLToASL (ACE_player modelToWorld (ACE_player selectionPosition "Head"))) + 2 #define DISABLED_LAMP_DAMAGE 0.95 diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 53cd04e133..50b023f95d 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,7 @@ 互动 インタラクション 상호작용 + Interakcja Interactions @@ -325,7 +326,7 @@ Tánc abbahagyása Parar de dançar Smetti di ballare - 踊るのをやめる + 踊るのを止める 춤 멈추기 停止跳舞 停止跳舞 @@ -341,7 +342,7 @@ << Vissza << Voltar << Indietro - <<もどる + << 戻る <<뒤로 <<返回 <<返回 @@ -846,6 +847,7 @@ ひっくり返す Gira + Przewróć Interact @@ -951,6 +953,7 @@ 關閉負面評價 关闭负面评价 부정행위 가중치 사용안함 + Wyłącz negatywną ocenę Should players receive negative rating? When enabled players are only receiving positive ratings which prevents friendly AI fire when destroying friendly equipment or killing team members. @@ -960,6 +963,7 @@ 玩家是否會收到負面評價? 當本功能開啟時玩家只會接收到正面評價,所以當玩家做出擊殺友軍AI、毀壞友軍裝備或殺害小隊夥伴都不會收到負面評價 玩家是否会收到负面评价? 当本功能开启时玩家只会接收到正面评价,所以当玩家做出击杀友军AI、毁坏友军装备或杀害小队伙伴都不会收到负面评价。 플레이어의 부정행위 가중치를 계산합니까? 활성화된 플레이어는 높은 레이팅을 가질때, 아군의 장비나 병력을 사격해도 아군 AI의 사격을 받지 않습니다. + Czy powinni gracze otrzymywać negatywną ocenę? Kiedy aktywowani gracze otrzymuję wyłącznie pozytywną ocenę, która zapobiega ognia przyjaznego SI podczas niszczenia przyjaznego wyposażenia lub zabijaniu członków drużyny. Team management allows color allocation for team members, taking team command and joining/leaving teams. @@ -1017,7 +1021,7 @@ Passa caricatore Pasar cargador Passer un chargeur - 弾倉をわたす + 弾倉を渡す 탄창 건네기 给予弹匣 給予彈匣 @@ -1062,7 +1066,7 @@ %1 ti ha passato un caricatore %2 . %1 te pasó un cargador %2. %1 vous a passé un chargeur de %2. - %1 はあなたに %2 弾倉をわたした + %1 はあなたに %2 弾倉を渡した %1에게서 %2탄창을 받았다 %1给你%2弹匣 %1給你%2彈匣 @@ -1077,7 +1081,7 @@ Mostra interazione "passa caricatore" Mostrar "Pasar cargador" en el menú de interacción Montrer l'interaction "Passer un chargeur" - "弾倉をわたす"をインタラクションに表示する + "弾倉を渡す"をインタラクションに表示する '탄창 건네기'를 상호작용에서 보여줌 显示"给予弹匣"互动动作 顯示"給予彈匣"互動動作 @@ -1090,6 +1094,18 @@ 시체 끌기 拿出屍體 拿出尸体 + Wyciągnij ciało + + + Smash windshield + Frontscheibe einschlagen + Dégager le pare-brise + Vyrazit čelní sklo + Выбить лобовое стекло + Wyłam szybę + Szélvédő széttörése + フロントガラスを破る + Sfonda il parabrezza diff --git a/addons/inventory/XEH_postInit.sqf b/addons/inventory/XEH_postInit.sqf index 7135383734..c5dc6c48f6 100644 --- a/addons/inventory/XEH_postInit.sqf +++ b/addons/inventory/XEH_postInit.sqf @@ -9,46 +9,23 @@ if (!hasInterface) exitWith {}; // luckily we don't need private items, so dummy and parent classes are out of the picture GVAR(ItemKeyNamespace) = [] call CBA_fnc_createNamespace; +private _allItems = uiNamespace getVariable [QGVAR(ItemKeyCache), []]; //See XEH_preStart.sqf -private _fnc_addToCache = { - private _displayName = getText (_this >> "displayName"); - private _picture = getText (_this >> "picture"); - - // list box seems to delete the leading backslash - if (_picture select [0,1] == "\") then { - _picture = _picture select [1]; +// isEqualType is hacking protection as we cannot trust that the cache hasn't been manipulated +{ + if (_x isEqualType [] && {_x isEqualTypeArray ["", configNull]}) then { + GVAR(ItemKeyNamespace) setVariable _x; }; - - GVAR(ItemKeyNamespace) setVariable [format ["%1:%2", _displayName, _picture], _this]; -}; - -private _allItems = []; - -_allItems append ("getNumber (_x >> 'scope') > 0" configClasses (configFile >> "CfgWeapons")); -_allItems append ("getNumber (_x >> 'scope') > 0" configClasses (configFile >> "CfgGlasses")); -_allItems append ("getNumber (_x >> 'scope') == 2" configClasses (configFile >> "CfgMagazines")); -_allItems append ("getNumber (_x >> 'scope') > 0 && {getNumber (_x >> 'isBackpack') == 1}" configClasses (configFile >> "CfgVehicles")); - -{_x call _fnc_addToCache; false} count _allItems; +} forEach ([[], _allItems] select (_allItems isEqualType [])); GVAR(customFilters) = []; GVAR(selectedFilterIndex) = -1; // add custom filters -// generate list of grenades -GVAR(Grenades_ItemList) = []; - -{ - GVAR(Grenades_ItemList) append getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines"); - false -} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); - -// make list case insensitive -GVAR(Grenades_ItemList) = GVAR(Grenades_ItemList) apply {toLower _x}; - -// filter duplicates -GVAR(Grenades_ItemList) = GVAR(Grenades_ItemList) arrayIntersect GVAR(Grenades_ItemList); +// get list of grenades +GVAR(Grenades_ItemList) = uiNamespace getVariable [QGVAR(Grenades_ItemList), []]; +if (!(GVAR(Grenades_ItemList) isEqualType [])) then {GVAR(Grenades_ItemList) = []}; [localize LSTRING(Grenades), QFUNC(filterGrenades)] call FUNC(addCustomFilter); @@ -57,24 +34,8 @@ GVAR(Grenades_ItemList) = GVAR(Grenades_ItemList) arrayIntersect GVAR(Grenades_I [localize LSTRING(Vests), QFUNC(filterVests)] call FUNC(addCustomFilter); [localize LSTRING(Headgear), QFUNC(filterHeadgear)] call FUNC(addCustomFilter); -// generate list of medical items -GVAR(Medical_ItemList) = []; - -{ - GVAR(Medical_ItemList) append getArray (_x >> "items"); - false -} count ( - ("true" configClasses (configFile >> QEGVAR(Medical,Actions) >> "Basic")) + - ("true" configClasses (configFile >> QEGVAR(Medical,Actions) >> "Advanced")) -); - -// remove all numbers from list -GVAR(Medical_ItemList) = GVAR(Medical_ItemList) select {_x isEqualType ""}; - -// make list case insensitive -GVAR(Medical_ItemList) = GVAR(Medical_ItemList) apply {toLower _x}; - -// filter duplicates -GVAR(Medical_ItemList) = GVAR(Medical_ItemList) arrayIntersect GVAR(Medical_ItemList); +// get list of medical items +GVAR(Medical_ItemList) = uiNamespace getVariable [QGVAR(Medical_ItemList), []]; +if (!(GVAR(Medical_ItemList) isEqualType [])) then {GVAR(Medical_ItemList) = []}; [localize LSTRING(Medical), QFUNC(filterMedical)] call FUNC(addCustomFilter); diff --git a/addons/inventory/XEH_preStart.sqf b/addons/inventory/XEH_preStart.sqf index 022888575e..ae4ce6500c 100644 --- a/addons/inventory/XEH_preStart.sqf +++ b/addons/inventory/XEH_preStart.sqf @@ -1,3 +1,57 @@ #include "script_component.hpp" #include "XEH_PREP.hpp" + +//item cache, see XEH_postInit.sqf +private _allItems = ("getNumber (_x >> 'scope') > 0" configClasses (configFile >> "CfgWeapons")); +_allItems append ("getNumber (_x >> 'scope') > 0" configClasses (configFile >> "CfgGlasses")); +_allItems append ("getNumber (_x >> 'scope') == 2" configClasses (configFile >> "CfgMagazines")); +_allItems append ("getNumber (_x >> 'scope') > 0 && {getNumber (_x >> 'isBackpack') == 1}" configClasses (configFile >> "CfgVehicles")); + +uiNamespace setVariable [QGVAR(ItemKeyCache), _allItems apply { + private _displayName = getText (_x >> "displayName"); + private _picture = getText (_x >> "picture"); + + // list box seems to delete the leading backslash + if (_picture select [0,1] == "\") then { + _picture = _picture select [1]; + }; + + [format ["%1:%2", _displayName, _picture], _x]; +}]; + +// generate list of grenades +private _grenades_ItemList = []; + +{ + _grenades_ItemList append getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines"); +} forEach getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles"); + +// make list case insensitive +_grenades_ItemList = _grenades_ItemList apply {toLower _x}; + +// filter duplicates +_grenades_ItemList = _grenades_ItemList arrayIntersect _grenades_ItemList; + +uiNamespace setVariable [QGVAR(Grenades_ItemList), _grenades_ItemList]; + +// generate list of medical items +private _medical_ItemList = []; + +{ + _medical_ItemList append getArray (_x >> "items"); +} forEach ( + ("true" configClasses (configFile >> QEGVAR(Medical,Actions) >> "Basic")) + + ("true" configClasses (configFile >> QEGVAR(Medical,Actions) >> "Advanced")) +); + +// remove all numbers from list +_medical_ItemList = _medical_ItemList select {_x isEqualType ""}; + +// make list case insensitive +_medical_ItemList = _medical_ItemList apply {toLower _x}; + +// filter duplicates +_medical_ItemList = _medical_ItemList arrayIntersect _medical_ItemList; + +uiNamespace setVariable [QGVAR(Medical_ItemList), _medical_ItemList]; diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index 713c8b082b..ca09417810 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -26,7 +26,7 @@ Ekwipunek skalowany jest poprzez rozmiar UI. Ta opcja pozwala powiększyć rozmiar UI ekwipunku, lecz nie zwiększa rozmiaru fontu pozwalając na wyświetlanie większej ilości wierszy. L'inventaire est normalement affiché en fonction de la taille de l'UI. Cette option permet d'agrandir l'affichage de l'inventaire, mais n'a aucun effet sur la taille des polices permettant d'afficher plus de lignes. Alaphelyzetben a kezelőfelület mérete skálázza a felszerelési menüt. Ez az opció engedélyezi a menü felskálázását, de megtartja a betűméreteket, így növelve a láthatóságot. - Normalmente il menù inventario è scalato in base alle dimensioni interfaccia. Questa opzione di permette di ingrandirlo ulteriormente ma senza aumentare la dimensione del testo. + Normalmente il menù inventario è scalato in base alle dimensioni dell'interfaccia. Questa opzione permette di ingrandirlo ulteriormente ma senza aumentare la dimensione del testo. Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas. 通常、インベントリは UI の大きさにより調整して表示されます。これはインベントリ UI を大きくできますが、文字は大きくできません。 보통 소지품 화면은 사용자 인터페이스 크기에 비례합니다. 이 항목은 소지품의 사용자 인터페이스를 확대를 가능케하면서 글씨는 그대로 냅두게 해줍니다. @@ -98,7 +98,7 @@ Westen Vesty Kamizelki - Vests + Giubbotti Chalecos Vestes Coletes diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp index b277b6364e..e06c6aae0b 100644 --- a/addons/javelin/CfgWeapons.hpp +++ b/addons/javelin/CfgWeapons.hpp @@ -1,8 +1,16 @@ +class Mode_SemiAuto; class CfgWeapons { - - class missiles_titan_static; + class MissileLauncher; + class missiles_titan: MissileLauncher { + class Player: MissileLauncher { + EGVAR(missileGuidance,attackProfile) = "JAV_DIR"; + }; + class TopDown: Player { + EGVAR(missileGuidance,attackProfile) = "JAV_TOP"; + }; + }; + class missiles_titan_static: missiles_titan {}; class GVAR(Titan_Static): missiles_titan_static { - modes[] = {"Player"}; GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; modelOptics = QPATHTOF(data\reticle_titan.p3d); @@ -13,7 +21,16 @@ class CfgWeapons { lockedTargetSound[] = {"",0,1}; }; - class launch_Titan_short_base; + class Launcher_Base_F; + class launch_Titan_base: Launcher_Base_F { + class Single: Mode_SemiAuto { + EGVAR(missileGuidance,attackProfile) = "JAV_DIR"; + }; + class TopDown: Single { + EGVAR(missileGuidance,attackProfile) = "JAV_TOP"; + }; + }; + class launch_Titan_short_base: launch_Titan_base {}; class launch_B_Titan_short_F: launch_Titan_short_base { GVAR(enabled) = 1; weaponInfoType = "ACE_RscOptics_javelin"; diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf index ab47556d4c..b2de0be4e9 100644 --- a/addons/javelin/functions/fnc_onOpticDraw.sqf +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -76,7 +76,7 @@ private _offsetX = 0.5 * safeZoneW - safeZoneX - 0.5; private _offsetY = 0.5 * safeZoneH - safeZoneY - 0.5; private _newTarget = objNull; -if (GVAR(isLockKeyDown) && {cameraView == "GUNNER"} && {(currentVisionMode ACE_player) == 2}) then { +if (GVAR(isLockKeyDown) && {cameraView == "GUNNER"} && {((currentVisionMode ACE_player) == 2) || {missionNamespace getVariable [QGVAR(ignoreVisionMode), false]}}) then { // Attempting to lock; getTarget can be expensive so it's rate is limited if (diag_tickTime > _nextTargetScan) then { BEGIN_COUNTER(getTarget); diff --git a/addons/javelin/functions/fnc_showFireMode.sqf b/addons/javelin/functions/fnc_showFireMode.sqf index e7a8f80ade..589a9727aa 100644 --- a/addons/javelin/functions/fnc_showFireMode.sqf +++ b/addons/javelin/functions/fnc_showFireMode.sqf @@ -15,10 +15,22 @@ * Public: No */ -private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; -private _currentFireMode = _currentShooter getVariable ["ace_missileguidance_attackProfile", "JAV_TOP"]; +(if (((vehicle ACE_player) == ACE_player) || {ACE_player call CBA_fnc_canUseWeapon}) then { + weaponState ACE_player +} else { + _turretPath = if (ACE_player == (driver _currentShooter)) then {[-1]} else {ACE_player call CBA_fnc_turretPath}; + weaponState [vehicle ACE_player, _turretPath] +}) params ["_weapon", "", "_mode"]; -TRACE_1("showFireMode", _currentFireMode); +private _currentFireMode = getText (configFile >> "CfgWeapons" >> _weapon >> _mode >> QEGVAR(missileGuidance,attackProfile)); + +TRACE_3("showFireMode",_weapon,_mode,_currentFireMode); + +if (_currentFireMode == "") then { // backwards compatiblity for addons using ace_javelin (CUP) + private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; + _currentFireMode = _currentShooter getVariable ["ace_missileguidance_attackProfile", "JAV_TOP"]; + TRACE_1("using getVar",_currentFireMode); +}; if (_currentFireMode == "JAV_TOP") then { __JavelinIGUITop ctrlSetTextColor __ColorGreen; diff --git a/addons/kestrel4500/CfgEventHandlers.hpp b/addons/kestrel4500/CfgEventHandlers.hpp index 10dce0a9bf..2bed8a2eef 100644 --- a/addons/kestrel4500/CfgEventHandlers.hpp +++ b/addons/kestrel4500/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/kestrel4500/data/Kestrel4500.rvmat b/addons/kestrel4500/data/kestrel4500.rvmat similarity index 100% rename from addons/kestrel4500/data/Kestrel4500.rvmat rename to addons/kestrel4500/data/kestrel4500.rvmat diff --git a/addons/kestrel4500/data/Kestrel4500_co.paa b/addons/kestrel4500/data/kestrel4500_co.paa similarity index 100% rename from addons/kestrel4500/data/Kestrel4500_co.paa rename to addons/kestrel4500/data/kestrel4500_co.paa diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index aa09f5de0e..016c8f5c8a 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -8,7 +8,7 @@ 레이저 분산 시뮬레이션 수 Wskaźnik poziomu rozproszenia wiązki lasera Compte de la simulation de la dispersion du laser - Contatore Simulazione Dispersione Laser + Contatore di Simulazione della Dispersione del Laser 雷射散射模拟计算 雷射散射模擬計算 @@ -38,7 +38,7 @@ Lézer - kódciklus növelése Láser - Aumentar código Laser - Kód + - Codice laser + + Laser - Cambia codice + レーザ - コードの数値を増やす 레이저 - 코드 순환 위 雷射 - 循环切换雷射码 上 @@ -54,7 +54,7 @@ Lézer - kódciklus csökkentése Láser - Reducir código Laser - Kód - - Codice laser - + Laser - Cambia codice - レーザ - コードの数値を減らす 레이저 - 코드 순환 아래 雷射 - 循环切换雷射码 下 diff --git a/addons/logistics_uavbattery/CfgVehicles.hpp b/addons/logistics_uavbattery/CfgVehicles.hpp index f36736fac9..6af24e7474 100644 --- a/addons/logistics_uavbattery/CfgVehicles.hpp +++ b/addons/logistics_uavbattery/CfgVehicles.hpp @@ -11,6 +11,7 @@ class CfgVehicles { }; }; class UAV_01_base_F: Helicopter_Base_F { + fuelCapacity = 19; // Around 30 minutes hovering class ACE_Actions: ACE_Actions{ class ACE_MainActions: ACE_MainActions { class GVAR(RefuelUAV) { @@ -23,6 +24,7 @@ class CfgVehicles { }; }; class UAV_06_base_F: Helicopter_Base_F { + fuelCapacity = 16; // Around 25 minutes hovering class ACE_Actions: ACE_Actions{ class ACE_MainActions: ACE_MainActions { class GVAR(RefuelUAV) { diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index bd3ea82684..412e000d9b 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/logistics_wirecutter/script_component.hpp b/addons/logistics_wirecutter/script_component.hpp index 85af4f54c9..84dcabe258 100644 --- a/addons/logistics_wirecutter/script_component.hpp +++ b/addons/logistics_wirecutter/script_component.hpp @@ -50,7 +50,13 @@ "wall_fen1_5.p3d",\ "plot_provizorni.p3d",\ "plp_ctm_partitioningfencegrey.p3d",\ - "fence.p3d"\ + "fence.p3d",\ + "fort_razorwire.p3d",\ + "barbedwire.pd3",\ + "dd_pletivo.p3d",\ + "plot_green_draty.p3d",\ + "plot_rust_draty.p3d",\ + "wall_fen1_5_2.p3d"\ ] #define SOUND_CLIP_TIME_SPACING 1.5 diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index 74bd413b49..3145b220eb 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ 重新整理弹匣 弾倉詰め替え 탄약 채우기 + Przepakowywanie magazynków Time per round @@ -17,6 +18,7 @@ 每发所需时间 弾頭毎の所有時間 구경 당 시간 + Czas na nabój Time per magazine @@ -26,6 +28,7 @@ 每匣所需时间 弾倉毎の所有時間 탄창 당 시간 + Czas na magazynek Time per belt link @@ -35,6 +38,7 @@ 每弹炼所需时间 ベルトリンク毎の所有時間 탄약띠 당 시간 + Czas na taśmę Repack Magazines diff --git a/addons/main/config.cpp b/addons/main/config.cpp index 1d02625747..81b5e7ce3d 100644 --- a/addons/main/config.cpp +++ b/addons/main/config.cpp @@ -8,6 +8,7 @@ class CfgPatches { requiredVersion = REQUIRED_VERSION; requiredAddons[] = { "A3_Data_F_Tank_Loadorder", + "A3_Data_F_Mod_Loadorder", // CBA "cba_ui", "cba_xeh", diff --git a/addons/main/script_macros.hpp b/addons/main/script_macros.hpp index fc96567785..4414ad1f44 100644 --- a/addons/main/script_macros.hpp +++ b/addons/main/script_macros.hpp @@ -134,4 +134,6 @@ #define MRAD_TO_DEG(d) ((d) / 17.45329252) // Conversion factor: 9 / (50 * PI) #define MOA_TO_RAD(d) ((d) * 0.00029088) // Conversion factor: PI / 10800 +#define ZEUS_ACTION_CONDITION ([_target, {QUOTE(QUOTE(ADDON)) in curatorAddons _this}, missionNamespace, QUOTE(QGVAR(zeusCheck)), 1E11, 'ace_interactMenuClosed'] call EFUNC(common,cachedCall)) + #include "script_debug.hpp" diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 65aa94f8fa..9960fcda08 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -9,8 +9,8 @@ #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD // MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 1.84 -#define REQUIRED_CBA_VERSION {3,8,0} +#define REQUIRED_VERSION 1.88 +#define REQUIRED_CBA_VERSION {3,9,0} #ifdef COMPONENT_BEAUTIFIED #define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 54f90d76f7..fe84527032 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 #define MINOR 12 -#define PATCHLVL 3 -#define BUILD 36 +#define PATCHLVL 6 +#define BUILD 43 diff --git a/addons/main/stringtable.xml b/addons/main/stringtable.xml index 7e6a6fb76a..9f1a9d6b8d 100644 --- a/addons/main/stringtable.xml +++ b/addons/main/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/map/CfgEventHandlers.hpp b/addons/map/CfgEventHandlers.hpp index 0a9f567e49..6764ab5e7d 100644 --- a/addons/map/CfgEventHandlers.hpp +++ b/addons/map/CfgEventHandlers.hpp @@ -17,3 +17,9 @@ class Extended_PostInit_EventHandlers { serverInit = QUOTE(call COMPILE_FILE(XEH_postInitServer)); }; }; + +class Extended_DisplayLoad_EventHandlers { + class RscDiary { + GVAR(initMainMap) = QUOTE((_this select 0) call (uiNamespace getVariable 'FUNC(initMainMap)')); + }; +}; diff --git a/addons/map/CfgVehicles.hpp b/addons/map/CfgVehicles.hpp index 16c03bd225..3da69a1216 100644 --- a/addons/map/CfgVehicles.hpp +++ b/addons/map/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { class ACE_MapFlashlight { displayName = CSTRING(Action_Flashlights); icon = QUOTE(\a3\ui_f\data\IGUI\Cfg\VehicleToggles\lightsiconon_ca.paa); - condition = QUOTE(GVAR(mapIllumination) && visibleMap && {count ([ACE_player] call FUNC(getUnitFlashlights)) > 0}); + condition = QUOTE(GVAR(mapIllumination) && visibleMap && {!([] isEqualTo (_player call FUNC(getUnitFlashlights)))}); statement = "true"; exceptions[] = {"isNotDragging", "notOnMap", "isNotInside", "isNotSitting"}; insertChildren = QUOTE(_this call DFUNC(compileFlashlightMenu)); diff --git a/addons/map/CfgWeapons.hpp b/addons/map/CfgWeapons.hpp index 5831428c6c..a9188159a3 100644 --- a/addons/map/CfgWeapons.hpp +++ b/addons/map/CfgWeapons.hpp @@ -8,7 +8,7 @@ class CfgWeapons { class FlashLight { ACE_Flashlight_Colour = "white"; ACE_Flashlight_Beam = QPATHTOF(UI\Flashlight_beam_white_ca.paa); - ACE_Flashlight_Size = 2.75; + ACE_Flashlight_Size = DEFAULT_FLASHLIGHT_SIZE; ACE_Flashlight_Sound = 1; }; }; @@ -18,7 +18,7 @@ class CfgWeapons { class FlashLight { ACE_Flashlight_Colour = "white"; ACE_Flashlight_Beam = QPATHTOF(UI\Flashlight_beam_white_ca.paa); - ACE_Flashlight_Size = 2.75; + ACE_Flashlight_Size = DEFAULT_FLASHLIGHT_SIZE; ACE_Flashlight_Sound = 1; }; }; diff --git a/addons/map/XEH_PREP.hpp b/addons/map/XEH_PREP.hpp index 6737249165..af6e815fd7 100644 --- a/addons/map/XEH_PREP.hpp +++ b/addons/map/XEH_PREP.hpp @@ -7,7 +7,9 @@ PREP(determineZoom); PREP(flashlightGlow); PREP(getUnitFlashlights); PREP(moduleMap); +PREP(needPlaySound); PREP(onDrawMap); PREP(simulateMapLight); PREP(switchFlashlight); PREP(updateMapEffects); +PREP(initMainMap); diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 6f2f60fc0c..f439c4db55 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -8,52 +8,6 @@ LOG(MSG_INIT); // Calculate the maximum zoom allowed for this map call FUNC(determineZoom); -[{ - if (isNull findDisplay 12) exitWith {}; - - GVAR(lastStillPosition) = ((findDisplay 12) displayCtrl 51) ctrlMapScreenToWorld [0.5, 0.5]; - GVAR(lastStillTime) = CBA_missionTime; - GVAR(isShaking) = false; - - //map sizes are multiples of 1280 - GVAR(worldSize) = worldSize / 1280; - GVAR(mousePos) = [0.5,0.5]; - - //Allow panning the lastStillPosition while mapShake is active - GVAR(rightMouseButtonLastPos) = []; - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["Draw", {_this call FUNC(updateMapEffects)}]; - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["MouseMoving", { - if (GVAR(isShaking) && {(count GVAR(rightMouseButtonLastPos)) == 2}) then { - private _lastPos = (_this select 0) ctrlMapScreenToWorld GVAR(rightMouseButtonLastPos); - private _newPos = (_this select 0) ctrlMapScreenToWorld (_this select [1,2]); - GVAR(lastStillPosition) set [0, (GVAR(lastStillPosition) select 0) + (_lastPos select 0) - (_newPos select 0)]; - GVAR(lastStillPosition) set [1, (GVAR(lastStillPosition) select 1) + (_lastPos select 1) - (_newPos select 1)]; - GVAR(rightMouseButtonLastPos) = _this select [1,2]; - TRACE_3("Mouse Move",_lastPos,_newPos,GVAR(rightMouseButtonLastPos)); - }; - }]; - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["MouseButtonDown", { - if ((_this select 1) == 1) then { - GVAR(rightMouseButtonLastPos) = _this select [2,2]; - }; - }]; - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["MouseButtonUp", { - if ((_this select 1) == 1) then { - GVAR(rightMouseButtonLastPos) = []; - }; - }]; - - //get mouse position on map - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["MouseMoving", { - GVAR(mousePos) = (_this select 0) ctrlMapScreenToWorld [_this select 1, _this select 2]; - }]; - ((findDisplay 12) displayCtrl 51) ctrlAddEventHandler ["MouseHolding", { - GVAR(mousePos) = (_this select 0) ctrlMapScreenToWorld [_this select 1, _this select 2]; - }]; - - [_this select 1] call CBA_fnc_removePerFrameHandler; -}, 0] call CBA_fnc_addPerFrameHandler; - ["ace_settingsInitialized", { if (isMultiplayer && {GVAR(DefaultChannel) != -1}) then { //Set the chat channel once the map has finished loading @@ -96,15 +50,15 @@ call FUNC(determineZoom); params ["_player", "_mapOn"]; private _unitLight = _player getVariable [QGVAR(flashlight), ["", objNull]]; _unitLight params ["_flashlight", "_glow"]; - private _flashlightOn = !(_flashlight isEqualTo ""); if (_mapOn) then { - if (_flashlightOn && {isNull _glow}) then { + if (!(_flashlight isEqualTo "") && {isNull _glow}) then { [_player, _flashlight] call FUNC(flashlightGlow); - playSound QGVAR(flashlightClick); + if ([_player, _flashlight] call FUNC(needPlaySound)) then {playSound QGVAR(flashlightClick)}; }; } else { if (!isNull _glow) then { [_player, ""] call FUNC(flashlightGlow); + if ([_player, _flashlight] call FUNC(needPlaySound)) then {playSound QGVAR(flashlightClick)}; }; }; }] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/map/functions/fnc_getUnitFlashlights.sqf b/addons/map/functions/fnc_getUnitFlashlights.sqf index 0bbd8b7af9..d8f537380d 100644 --- a/addons/map/functions/fnc_getUnitFlashlights.sqf +++ b/addons/map/functions/fnc_getUnitFlashlights.sqf @@ -10,7 +10,7 @@ * Flashlight classnames (empty for none) * * Example: - * [unit] call ace_map_fnc_getUnitFlashlights; + * player call ace_map_fnc_getUnitFlashlights * * Public: No */ @@ -18,11 +18,21 @@ params ["_unit"]; private _flashlights = []; +private _cfgWeapons = configFile >> "CfgWeapons"; { - if (isText (configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Colour")) then { - _flashlights pushBackUnique _x; + private _weaponConfig = _cfgWeapons >> _x; + if ( + -1 < [ + _weaponConfig >> "ItemInfo" >> "FlashLight", + _weaponConfig >> "FlashLight" + ] findIf { + isText (_x >> "ACE_Flashlight_Colour") + || {!(getArray (_x >> "ambient") in [[], [0,0,0]])} + } + ) then { + _flashlights pushBack _x; }; -} forEach (_unit call EFUNC(common,uniqueItems)); +} forEach ([_unit, true] call CBA_fnc_uniqueUnitItems); _flashlights diff --git a/addons/map/functions/fnc_initMainMap.sqf b/addons/map/functions/fnc_initMainMap.sqf new file mode 100644 index 0000000000..bebfcbd999 --- /dev/null +++ b/addons/map/functions/fnc_initMainMap.sqf @@ -0,0 +1,56 @@ +#include "script_component.hpp" +#include "\a3\ui_f\hpp\defineResincl.inc" + +params ["_display"]; +if (ctrlIDD _display != IDD_MAIN_MAP) exitWith {}; + +private _control = _display displayCtrl IDC_MAP; + +GVAR(lastStillPosition) = _control ctrlMapScreenToWorld [0.5, 0.5]; +GVAR(lastStillTime) = CBA_missionTime; +GVAR(isShaking) = false; + +//map sizes are multiples of 1280 +GVAR(worldSize) = worldSize / 1280; +GVAR(mousePos) = [0.5, 0.5]; + +//Allow panning the lastStillPosition while mapShake is active +GVAR(rightMouseButtonLastPos) = []; + +_control ctrlAddEventHandler ["Draw", {_this call FUNC(updateMapEffects)}]; +_control ctrlAddEventHandler ["MouseMoving", { + params ["_control", "_x", "_y"]; + if (GVAR(isShaking) && {count GVAR(rightMouseButtonLastPos) == 2}) then { + private _lastPos = _control ctrlMapScreenToWorld GVAR(rightMouseButtonLastPos); + private _newPos = _control ctrlMapScreenToWorld [_x, _y]; + GVAR(lastStillPosition) set [0, (GVAR(lastStillPosition) select 0) + (_lastPos select 0) - (_newPos select 0)]; + GVAR(lastStillPosition) set [1, (GVAR(lastStillPosition) select 1) + (_lastPos select 1) - (_newPos select 1)]; + GVAR(rightMouseButtonLastPos) = [_x, _y]; + TRACE_3("Mouse Move",_lastPos,_newPos,GVAR(rightMouseButtonLastPos)); + }; +}]; + +_control ctrlAddEventHandler ["MouseButtonDown", { + params ["", "_button", "_x", "_y"]; + if (_button == 1) then { + GVAR(rightMouseButtonLastPos) = [_x, _y]; + }; +}]; + +_control ctrlAddEventHandler ["MouseButtonUp", { + params ["", "_button"]; + if (_button == 1) then { + GVAR(rightMouseButtonLastPos) = []; + }; +}]; + +//get mouse position on map +_control ctrlAddEventHandler ["MouseMoving", { + params ["_control", "_x", "_y"]; + GVAR(mousePos) = _control ctrlMapScreenToWorld [_x, _y]; +}]; + +_control ctrlAddEventHandler ["MouseHolding", { + params ["_control", "_x", "_y"]; + GVAR(mousePos) = _control ctrlMapScreenToWorld [_x, _y]; +}]; diff --git a/addons/map/functions/fnc_needPlaySound.sqf b/addons/map/functions/fnc_needPlaySound.sqf new file mode 100644 index 0000000000..0c0d34f42e --- /dev/null +++ b/addons/map/functions/fnc_needPlaySound.sqf @@ -0,0 +1,42 @@ +#include "script_component.hpp" +/* + * Author: Dystopian + * Checks if sound needs to be played when flashlight is toggled. + * + * Arguments: + * 0: Unit + * 1: Flashlight + * + * Return Value: + * Need to play sound + * + * Example: + * [player, "acc_flashlight"] call ace_map_fnc_needPlaySound + * + * Public: No + */ + +params ["_unit", "_flashlight"]; + +if (_flashlight isEqualTo "") exitWith { + LOG("empty flashlight"); + false +}; + +private _currentWeapon = currentWeapon _unit; +if ( + _unit isFlashlightOn _currentWeapon + // _currentWeapon==_flashlight should be checked here but it's not supported by isFlashlightOn + && {_flashlight isEqualTo ((weaponsItems _unit select {(_x select 0) isEqualTo _currentWeapon}) select 0 select 2)} +) exitWith { + TRACE_1("weapon flashlight is on",_flashlight); + false +}; + +private _config = configFile >> "CfgWeapons" >> _flashlight >> "ItemInfo" >> "FlashLight"; +if (!isClass _config) exitWith { + TRACE_1("weapon with unmountable flashlight",_flashlight); + true +}; + +0 < [_config >> "ACE_Flashlight_Sound", "number", 1] call CBA_fnc_getConfigEntry diff --git a/addons/map/functions/fnc_simulateMapLight.sqf b/addons/map/functions/fnc_simulateMapLight.sqf index 236914820f..7ec9d573a2 100644 --- a/addons/map/functions/fnc_simulateMapLight.sqf +++ b/addons/map/functions/fnc_simulateMapLight.sqf @@ -55,9 +55,9 @@ if (_flashlight == "") then { private _mousePos = GVAR(mousePos); //flashlight settings - private _cfg = (configFile >> "CfgWeapons" >> _flashlight >> "ItemInfo" >> "FlashLight"); - private _size = getNumber (_cfg >> "ACE_Flashlight_Size"); - private _flashTex = getText (_cfg >> "ACE_Flashlight_Beam"); + private _cfg = configFile >> "CfgWeapons" >> _flashlight >> "ItemInfo" >> "FlashLight"; + private _size = [_cfg >> "ACE_Flashlight_Size", "number", DEFAULT_FLASHLIGHT_SIZE] call CBA_fnc_getConfigEntry; + private _flashTex = [_cfg >> "ACE_Flashlight_Beam", "text", QPATHTOF(UI\Flashlight_beam_white_ca.paa)] call CBA_fnc_getConfigEntry; private _beamSize = (safeZoneW/safeZoneWAbs) * _screenSize / _size; //after 5x zoom, it's simulated to be fixed (it actually gets bigger relative to zoom) diff --git a/addons/map/functions/fnc_switchFlashlight.sqf b/addons/map/functions/fnc_switchFlashlight.sqf index 4fc1c75356..5d4ed9de0a 100644 --- a/addons/map/functions/fnc_switchFlashlight.sqf +++ b/addons/map/functions/fnc_switchFlashlight.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: voioper + * Author: voiper * Switch flashlight on/off. * * Arguments: @@ -26,12 +26,7 @@ if (GVAR(mapGlow)) then { _glow = [_unit, _newFlashlight, false] call FUNC(flashlightGlow); }; -private _config = (configFile >> "CfgWeapons"); - -if ( - (getNumber (_config >> _newFlashlight >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Sound") > 0) || - {getNumber (_config >> _flashlight >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Sound") > 0} -) then { +if (-1 < [_newFlashlight, _flashlight] findIf {[_unit, _x] call FUNC(needPlaySound)}) then { playSound QGVAR(flashlightClick); }; diff --git a/addons/map/initSettings.sqf b/addons/map/initSettings.sqf index ae0e31b0ae..d184c5c1ac 100644 --- a/addons/map/initSettings.sqf +++ b/addons/map/initSettings.sqf @@ -4,7 +4,9 @@ [localize LSTRING(MapIllumination_DisplayName), localize LSTRING(MapIllumination_Description)], format["ACE %1", localize LSTRING(Module_DisplayName)], true, - true + true, + {[QGVAR(mapIllumination), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ @@ -13,7 +15,9 @@ [localize LSTRING(MapGlow_DisplayName), localize LSTRING(MapGlow_Description)], format["ACE %1", localize LSTRING(Module_DisplayName)], true, - true + true, + {[QGVAR(mapGlow), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ @@ -49,7 +53,9 @@ [localize LSTRING(DefaultChannel_DisplayName), localize LSTRING(DefaultChannel_Description)], format["ACE %1", localize LSTRING(Module_DisplayName)], [[-1, 0, 1, 2, 3, 4, 5], [ELSTRING(common,Disabled), "STR_channel_global", "STR_channel_side", "STR_channel_command", "STR_channel_group", "STR_channel_vehicle", "STR_channel_direct"], 0], - true + true, + {[QGVAR(DefaultChannel), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; // Blue Force Tracking @@ -59,7 +65,9 @@ [localize LSTRING(BFT_Enabled_DisplayName), localize LSTRING(BFT_Enabled_Description)], [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize LSTRING(BFT_Module_DisplayName)], false, - true + true, + {[QGVAR(BFT_Enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ @@ -68,7 +76,9 @@ [localize LSTRING(BFT_Interval_DisplayName), localize LSTRING(BFT_Interval_Description)], [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize LSTRING(BFT_Module_DisplayName)], [0, 30, 1, 1], - true + true, + {[QGVAR(BFT_Interval), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ @@ -77,7 +87,9 @@ [localize LSTRING(BFT_ShowPlayerNames_DisplayName), localize LSTRING(BFT_ShowPlayerNames_Description)], [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize LSTRING(BFT_Module_DisplayName)], false, - true + true, + {[QGVAR(BFT_ShowPlayerNames), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ @@ -86,5 +98,7 @@ [localize LSTRING(BFT_HideAiGroups_DisplayName), localize LSTRING(BFT_HideAiGroups_Description)], [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize LSTRING(BFT_Module_DisplayName)], false, - true + true, + {[QGVAR(BFT_HideAiGroups), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; diff --git a/addons/map/script_component.hpp b/addons/map/script_component.hpp index 172a0fe838..432622f632 100644 --- a/addons/map/script_component.hpp +++ b/addons/map/script_component.hpp @@ -16,7 +16,8 @@ #include "\z\ace\addons\main\script_macros.hpp" - #define MARKERNAME_MAPTOOL_FIXED "ACE_MapToolFixed" #define MARKERNAME_MAPTOOL_ROTATINGNORMAL "ACE_MapToolRotatingNormal" #define MARKERNAME_MAPTOOL_ROTATINGSMALL "ACE_MapToolRotatingSmall" + +#define DEFAULT_FLASHLIGHT_SIZE 2.75 diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index e4ba587864..d2cc5e90d0 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index 2aa187797b..feb98f2091 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/maptools/CfgEventHandlers.hpp b/addons/maptools/CfgEventHandlers.hpp index 5c876708f2..1f53a9b2ec 100644 --- a/addons/maptools/CfgEventHandlers.hpp +++ b/addons/maptools/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_postInitClient) ); + clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient)); }; }; diff --git a/addons/maptools/functions/fnc_handleMouseButton.sqf b/addons/maptools/functions/fnc_handleMouseButton.sqf index 36639a02d7..7c2946abae 100644 --- a/addons/maptools/functions/fnc_handleMouseButton.sqf +++ b/addons/maptools/functions/fnc_handleMouseButton.sqf @@ -25,7 +25,7 @@ if ((_button == 0) && {GVAR(freedrawing) || _ctrlKey}) exitWith { if (GVAR(freedrawing) && {_dir == 0}) then { GVAR(freedrawing) = false; GVAR(drawPosEnd) = _control ctrlMapScreenToWorld [_screenPosX, _screenPosY]; - TRACE_1("Ending Line",GVAR(freedrawing),GVAR(drawPosEnd)); + TRACE_2("Ending Line",GVAR(freedrawing),GVAR(drawPosEnd)); [{ if (allMapMarkers isEqualTo []) exitWith {}; private _markerName = allMapMarkers select (count allMapMarkers - 1); diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index f55d0b6c9d..f0fdd8f186 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/markers/XEH_postInit.sqf b/addons/markers/XEH_postInit.sqf index ad0c2dfde3..7f644691d3 100644 --- a/addons/markers/XEH_postInit.sqf +++ b/addons/markers/XEH_postInit.sqf @@ -18,6 +18,8 @@ GVAR(currentMarkerAngle) = 0; GVAR(currentMarkerColorConfigName) = ""; GVAR(currentMarkerConfigName) = ""; +GVAR(userPlacedMarkers) = []; + // set marker pos local on every machine (prevent markers visible for everyone) [QGVAR(setMarkerPosLocal), { params ["_marker", "_pos"]; @@ -28,7 +30,8 @@ GVAR(currentMarkerConfigName) = ""; private _index = (GETGVAR(allMapMarkers,[])) find _marker; // case-sensitive, but should be fine if (_index < 0) exitWith { - ERROR_1("Could not find data for %1", _marker); + if (!isMultiplayer) exitWith {}; + WARNING_1("Could not find data for %1", _marker); }; private _data = GVAR(allMapMarkersProperties) select _index; diff --git a/addons/markers/functions/fnc_canMove.sqf b/addons/markers/functions/fnc_canMove.sqf index 7b19385d26..2b2eaf5e9f 100644 --- a/addons/markers/functions/fnc_canMove.sqf +++ b/addons/markers/functions/fnc_canMove.sqf @@ -4,17 +4,19 @@ * Checks whether the player can move markers. * * Arguments: - * None + * 0: Marker Name * * Return Value: * Whether the player can move markers * * Example: - * [] call ace_markers_fnc_canMove + * ["X"] call ace_markers_fnc_canMove * * Public: No */ +params [["_marker",""]]; + switch (GVAR(moveRestriction)) do { case MOVE_RESTRICTION_NOBODY: {false}; case MOVE_RESTRICTION_ALL: {true}; @@ -25,5 +27,8 @@ switch (GVAR(moveRestriction)) do { case MOVE_RESTRICTION_GROUP_LEADERS_ADMINS: { (leader ACE_player == ACE_player) || IS_ADMIN }; + case MOVE_RESTRICTION_OWNER: { + _marker in GVAR(userPlacedMarkers) + }; default {true}; }; // return diff --git a/addons/markers/functions/fnc_initInsertMarker.sqf b/addons/markers/functions/fnc_initInsertMarker.sqf index fa7cec19ee..8a7a5f21fb 100644 --- a/addons/markers/functions/fnc_initInsertMarker.sqf +++ b/addons/markers/functions/fnc_initInsertMarker.sqf @@ -55,7 +55,7 @@ //check if entity under mouse is a user marker if (_mouseOverType isEqualTo "marker") then { - if !((_marker find "_USER_DEFINED") isEqualTo -1) then { + if (!((_marker find "_USER_DEFINED") isEqualTo -1) && ((markerShape _marker) isEqualTo "ICON")) then { GVAR(editingMarker) = _marker; //hide marker which is being edited because if the user cancels editing, it will still exist unchanged GVAR(editingMarker) setMarkerAlphaLocal 0; diff --git a/addons/markers/functions/fnc_movePFH.sqf b/addons/markers/functions/fnc_movePFH.sqf index 144fce6ff0..962f39d328 100644 --- a/addons/markers/functions/fnc_movePFH.sqf +++ b/addons/markers/functions/fnc_movePFH.sqf @@ -22,8 +22,9 @@ if (isNull _ctrlMap || !GVAR(moving)) exitWith { (_this select 1) call CBA_fnc_removePerFrameHandler; private _finalPos = getMarkerPos _marker; + private _overrule = [QGVAR(markerMoveEnded), [ACE_player, _marker, _originalPos, _finalPos]] call CBA_fnc_localEvent; - if !([QGVAR(markerMoveEnded), [ACE_player, _marker, _originalPos, _finalPos]] call CBA_fnc_localEvent) then { + if (!isNil "_overrule" && {_overrule isEqualTo true}) then { _marker setMarkerPosLocal _originalPos; } else { [QGVAR(setMarkerPosLocal), [_marker, _finalPos]] call CBA_fnc_globalEvent; diff --git a/addons/markers/functions/fnc_onMouseButtonDown.sqf b/addons/markers/functions/fnc_onMouseButtonDown.sqf index afdacfb521..ce6f99ee00 100644 --- a/addons/markers/functions/fnc_onMouseButtonDown.sqf +++ b/addons/markers/functions/fnc_onMouseButtonDown.sqf @@ -27,7 +27,7 @@ if (_button != 0 || {!([_shift, _ctrl, _alt] isEqualTo [false, false, true])}) e ctrlMapMouseOver _ctrlMap params [["_type", ""], "_marker"]; -if (_type == "marker" && {_marker find "_USER_DEFINED" != -1 && {call FUNC(canMove)}}) then { +if (_type == "marker" && {_marker find "_USER_DEFINED" != -1 && {_marker call FUNC(canMove)}}) then { _ctrlMap ctrlMapCursor ["Track", "Move"]; private _originalPos = getMarkerPos _marker; diff --git a/addons/markers/functions/fnc_placeMarker.sqf b/addons/markers/functions/fnc_placeMarker.sqf index af905d71f1..a1b136aad5 100644 --- a/addons/markers/functions/fnc_placeMarker.sqf +++ b/addons/markers/functions/fnc_placeMarker.sqf @@ -16,19 +16,45 @@ * Public: No */ -disableserialization; params ["_display", "_closeNum"]; TRACE_2("params",_display,_closeNum); +private _editingMarker = !(GVAR(editingMarker) isEqualTo ""); + if (_closeNum isEqualTo 1) then { - if !(GVAR(editingMarker) isEqualTo "") then { + if (_editingMarker) then { //delete "old" marker deleteMarker GVAR(editingMarker); }; // set and send marker data the next frame. the actual marker isn't created yet [{ + params ["_startingMarkers", "_editingMarker"]; + private _newMarkers = allMapMarkers - _startingMarkers; + + private _newestMarker = ""; + private _newestMarkerDist = 1e10; + + { + private _distX = GVAR(currentMarkerPosition) distance2d (getMarkerPos _x); + if (_distX < _newestMarkerDist) then { + _newestMarker = _x; + _newestMarkerDist = _distX; + }; + } forEach _newMarkers; + + TRACE_3("",_newestMarker,_newestMarkerDist,_newMarkers); + + if (_newestMarker == "") exitWith {ERROR_1("could not find user placed marker from %1",_newMarkers);}; + + // provide hook for external scripts + [QGVAR(markerPlaced),[_newestMarker, _editingMarker]] call CBA_fnc_localEvent; + + // Add to list of user placed markers, and then filter for deleted + GVAR(userPlacedMarkers) pushBack _newestMarker; + GVAR(userPlacedMarkers) = GVAR(userPlacedMarkers) select {!((getMarkerPos _x) isEqualTo [0,0,0])}; + [QGVAR(setMarkerNetwork), [ - allMapMarkers select (count allMapMarkers - 1), [ + _newestMarker, [ GETGVAR(currentMarkerConfigName,""), GETGVAR(currentMarkerColorConfigName,""), GETGVAR(currentMarkerPosition,[]), @@ -36,10 +62,10 @@ if (_closeNum isEqualTo 1) then { ] ]] call CBA_fnc_globalEvent; - }, []] call CBA_fnc_execNextFrame; + }, [allMapMarkers, _editingMarker]] call CBA_fnc_execNextFrame; } else { - if !(GVAR(editingMarker) isEqualTo "") then { - //editing was canceled show the original marker again + if (_editingMarker) then { + // editing was canceled show the original marker again GVAR(editingMarker) setMarkerAlphaLocal 1; }; }; diff --git a/addons/markers/functions/fnc_setMarkerJIP.sqf b/addons/markers/functions/fnc_setMarkerJIP.sqf index ba7dc68a5b..9c9aea9fd7 100644 --- a/addons/markers/functions/fnc_setMarkerJIP.sqf +++ b/addons/markers/functions/fnc_setMarkerJIP.sqf @@ -18,7 +18,7 @@ */ params ["_allMapMarkers", "_allMapMarkersProperties"]; -TRACE_3("params",_allMapMarkers,_allMapMarkersProperties); +TRACE_2("params",_allMapMarkers,_allMapMarkersProperties); { private _index = _allMapMarkers find _x; diff --git a/addons/markers/initSettings.sqf b/addons/markers/initSettings.sqf index d317d663ea..e4aa16b00f 100644 --- a/addons/markers/initSettings.sqf +++ b/addons/markers/initSettings.sqf @@ -1,21 +1,23 @@ [ QGVAR(moveRestriction), "LIST", [LSTRING(MoveRestriction), LSTRING(MoveRestriction_Description)], - format ["ACE %1", localize ELSTRING(map,Module_DisplayName)], + [format ["ACE %1", localize ELSTRING(map,Module_DisplayName)], localize LSTRING(Module_DisplayName)], [ [ MOVE_RESTRICTION_NOBODY, MOVE_RESTRICTION_ALL, MOVE_RESTRICTION_ADMINS, MOVE_RESTRICTION_GROUP_LEADERS, - MOVE_RESTRICTION_GROUP_LEADERS_ADMINS + MOVE_RESTRICTION_GROUP_LEADERS_ADMINS, + MOVE_RESTRICTION_OWNER ], [ LSTRING(MoveRestriction_Nobody), LSTRING(MoveRestriction_All), LSTRING(MoveRestriction_Admins), LSTRING(MoveRestriction_GroupLeaders), - LSTRING(MoveRestriction_GroupLeadersAndAdmins) + LSTRING(MoveRestriction_GroupLeadersAndAdmins), + LSTRING(MoveRestriction_Owner) ], 1 ] diff --git a/addons/markers/script_component.hpp b/addons/markers/script_component.hpp index fdb5f1614e..8b268e2d03 100644 --- a/addons/markers/script_component.hpp +++ b/addons/markers/script_component.hpp @@ -29,3 +29,4 @@ #define MOVE_RESTRICTION_ADMINS 1 #define MOVE_RESTRICTION_GROUP_LEADERS 2 #define MOVE_RESTRICTION_GROUP_LEADERS_ADMINS 3 +#define MOVE_RESTRICTION_OWNER 4 diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index eddb7014dd..4c1e4d1c3b 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -25,6 +25,7 @@ 標誌 标志 맵마커 + Znaczniki Allow moving markers for @@ -34,6 +35,7 @@ 誰可以移動標誌 谁可以移动标志 Permetti di spostare i marcatori a: + Zezwól na poruszanie znaczników dla Restricts which players are able to move markers while holding the Alt key. @@ -43,6 +45,7 @@ 設定誰可以透過按住Alt鍵來移動標誌 设定谁可以透过按住Alt键来移动标志。 Limita quali giocatori possono spostare i marcatori mentre premono il tasto Alt. + Ogranicz którzy gracze mogą poruszać znacznikami podczas trzymania przycisku Alt. Nobody @@ -52,6 +55,7 @@ 沒有人 没有人 Nessuno + Nikt All players @@ -61,6 +65,7 @@ 所有玩家 所有玩家 모든 플레이어 + Wszyscy gracze Admins @@ -70,6 +75,7 @@ 管理員 管理员 관리자 + Administratorzy Group leaders @@ -79,6 +85,7 @@ 小隊長 小队长 분대장 + Przywódcy grup Group leaders and Admins @@ -88,6 +95,13 @@ 小隊長與管理員 小队长与管理员 분대장과 관리자 + Przywódcy grup i Administratorzy + + + Creator + Ersteller + 設置者 + Twórca diff --git a/addons/maverick/stringtable.xml b/addons/maverick/stringtable.xml index 0ab905b1f0..4b0a83cc94 100644 --- a/addons/maverick/stringtable.xml +++ b/addons/maverick/stringtable.xml @@ -1,15 +1,16 @@ - + AGM-65 Maverick L, Laser Guided Anti-Ground-Missile AGM-65 Maverick L, lasergelenkte Luft-Boden-Rakete - AGM-65 Maverick L, Guida Laser Missile-Anti-Terra + AGM-65 Maverick L, Guida Laser Missile Anti-Terra AGM-65 マーベリック L、レーザー誘導対地ミサイル AGM-65"小牛"飛彈L型,雷射導引對地導彈 AGM-65"小牛"空地L型,雷射导引对地导弹 AGM-65 Maverick L, 레이저 유도 대지 미사일 + AGM-65 Maverick L, Kierowany laserowo pocisk powietrze-ziemia AGM-65 Maverick L [ACE] @@ -19,6 +20,7 @@ AGM-65"小牛"飛彈L型 [ACE] AGM-65"小牛"空地L型 [ACE] AGM-65 Maverick L [ACE] + AGM-65 Maverick L [ACE] 2x AGM-65 Maverick L [ACE] @@ -28,6 +30,7 @@ 2x AGM-65"小牛"飛彈L型 [ACE] 2x AGM-65"小牛"空地L型 [ACE] 2x AGM-65 Maverick L [ACE] + 2x AGM-65 Maverick L [ACE] 3x AGM-65 Maverick L [ACE] @@ -37,6 +40,7 @@ 3x AGM-65"小牛"飛彈L型 [ACE] 3x AGM-65"小牛"空地L型 [ACE] 3x AGM-65 Maverick L [ACE] + 3x AGM-65 Maverick L [ACE] Laser Guided @@ -46,6 +50,7 @@ 雷射導引 雷射导引 레이저 유도 + Kierowany laserowo Kh-25ML, Laser Guided Air-to-Ground-Missile @@ -54,6 +59,8 @@ Kh-25ML,雷射導引對地導彈 Kh-25ML,镭射导引空地导弹 Kh-25ML、レーザー誘導対地ミサイル + Kh-25ML, a Guida Laser Missile Aria-Terra + Kh-25ML, Kierowany laserowo pocisk powietrze-ziemia 1x Kh-25ML [ACE] @@ -63,6 +70,8 @@ 1x Kh-25ML [ACE] 1x Kh-25ML镭射空地导弹 [ACE] 1x Kh-25ML [ACE] + 1x Kh-25ML [ACE] + 1x Kh-25ML [ACE] @@ -74,6 +83,7 @@ AGM-65"小牛"空地L型 AGM-65"小牛"飞弹L型 AGM-65 Maverick L + AGM-65 Maverick L Kh-25ML @@ -83,6 +93,8 @@ Kh-25ML Kh-25ML镭射空地导弹 Kh-25ML + Kh-25ML + Kh-25ML diff --git a/addons/medical/ACE_Medical_SelfActions.hpp b/addons/medical/ACE_Medical_SelfActions.hpp index 9f01f08908..b63fd8fb42 100644 --- a/addons/medical/ACE_Medical_SelfActions.hpp +++ b/addons/medical/ACE_Medical_SelfActions.hpp @@ -3,7 +3,7 @@ class Medical { runOnHover = 1; exceptions[] = {"isNotInside", "isNotSwimming", "isNotSitting"}; statement = QUOTE([ARR_3(_target, true, 0)] call DFUNC(displayPatientInformation)); - condition = "true"; + condition = QUOTE(GVAR(menuTypeStyleSelf)); icon = QPATHTOF(UI\icons\medical_cross.paa); class ACE_Head { diff --git a/addons/medical/ACE_Medical_Treatments.hpp b/addons/medical/ACE_Medical_Treatments.hpp index cbe2e48b1e..36c0c6ba1f 100644 --- a/addons/medical/ACE_Medical_Treatments.hpp +++ b/addons/medical/ACE_Medical_Treatments.hpp @@ -64,7 +64,7 @@ class ACE_Medical_Actions { allowSelfTreatment = 0; category = "advanced"; requiredMedic = 1; - treatmentTime = 20; + treatmentTime = 7; items[] = {"ACE_bloodIV"}; // callbackSuccess = QUOTE(DFUNC(treatmentBasic_bloodbag)); callbackSuccess = QUOTE(DFUNC(treatmentIV)); @@ -123,10 +123,10 @@ class ACE_Medical_Actions { requiredMedic = 0; treatmentTime = 15; items[] = {}; - condition = QUOTE(!([(_this select 1)] call ace_common_fnc_isAwake) && GVAR(enableRevive)>0); + condition = QUOTE(!([(_this select 1)] call DEFUNC(common,isAwake)) && GVAR(enableRevive)>0); callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_CPR)); callbackFailure = ""; - callbackProgress = "!([((_this select 0) select 1)] call ace_common_fnc_isAwake)"; + callbackProgress = QUOTE(!([((_this select 0) select 1)] call DEFUNC(common,isAwake))); animationPatient = ""; animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; animationCaller = "AinvPknlMstpSlayWnonDnon_medic"; @@ -371,10 +371,10 @@ class ACE_Medical_Actions { requiredMedic = 0; treatmentTime = 15; items[] = {}; - condition = "!([(_this select 1)] call ace_common_fnc_isAwake)"; + condition = QUOTE(!([(_this select 1)] call DEFUNC(common,isAwake))); callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_CPR)); callbackFailure = ""; - callbackProgress = "!([((_this select 0) select 1)] call ace_common_fnc_isAwake)"; + callbackProgress = QUOTE(!([((_this select 0) select 1)] call DEFUNC(common,isAwake))); animationPatient = ""; animationPatientUnconscious = "AinjPpneMstpSnonWrflDnon_rolltoback"; animationCaller = "AinvPknlMstpSlayWnonDnon_medic"; @@ -687,9 +687,9 @@ class ACE_Medical_Advanced { class Treatment { class Bandaging { // Field dressing is normal average treatment - // packing bandage is average treatment, higher reopen change, longer reopening delay - // elastic bandage is higher treatment, higher reopen change, shorter reopen delay - // quickclot is lower treatment, lower reopen change, longer reopening delay + // packing bandage is average treatment, higher reopen chance, longer reopening delay + // elastic bandage is higher treatment, higher reopen chance, shorter reopen delay + // quickclot is lower treatment, lower reopen chance, longer reopening delay class Bandage { // basic bandage effectiveness = 5; reopeningChance = 0; diff --git a/addons/medical/ACE_Settings.hpp b/addons/medical/ACE_Settings.hpp index ee393c37e7..737e634ec8 100644 --- a/addons/medical/ACE_Settings.hpp +++ b/addons/medical/ACE_Settings.hpp @@ -299,7 +299,15 @@ class ACE_Settings { description = CSTRING(menuTypeDescription); typeName = "SCALAR"; value = 0; - values[] = {CSTRING(useSelection), CSTRING(useRadial), "Disabled"}; + values[] = {CSTRING(useSelection), CSTRING(useRadial), ECSTRING(common,Disabled)}; + isClientSettable = 1; + }; + class GVAR(menuTypeStyleSelf) { + category = CSTRING(Category_Medical); + displayName = CSTRING(menuTypeStyleSelf_displayName); + description = CSTRING(menuTypeStyleSelf_description); + typeName = "BOOL"; + value = 1; isClientSettable = 1; }; class GVAR(delayUnconCaptive) { @@ -310,4 +318,12 @@ class ACE_Settings { value = 3; sliderSettings[] = {0, 30, 3, 0}; }; + class GVAR(convertItems) { + category = CSTRING(Category_Medical); + displayName = CSTRING(MedicalSettings_convertItems_DisplayName); + description = CSTRING(MedicalSettings_convertItems_Description); + typeName = "SCALAR"; + value = 0; + values[] = {ECSTRING(common,Enabled), CSTRING(MedicalSettings_convertItems_remove), ECSTRING(common,Disabled)}; + }; }; diff --git a/addons/medical/CfgActions.hpp b/addons/medical/CfgActions.hpp index ccaac6f75b..387c3b8de2 100644 --- a/addons/medical/CfgActions.hpp +++ b/addons/medical/CfgActions.hpp @@ -3,4 +3,4 @@ class CfgActions { class Heal: None { show = 0; }; -}; \ No newline at end of file +}; diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index e6fa31112d..8f5a39e107 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -111,6 +111,7 @@ PREP(moduleAssignMedicalVehicle); PREP(moduleAssignMedicalFacility); PREP(copyDeadBody); PREP(unconsciousPFH); +PREP(updateTourniquets); // Networked litter PREP(createLitter); diff --git a/addons/medical/config.cpp b/addons/medical/config.cpp index c2010177de..002c9e2cf4 100644 --- a/addons/medical/config.cpp +++ b/addons/medical/config.cpp @@ -23,9 +23,9 @@ class CfgPatches { #include "CfgEden.hpp" #include "ACE_Medical_Treatments.hpp" #include "ACE_Settings.hpp" -#include "UI\CfgInGameUI.hpp" -#include "UI\RscTitles.hpp" -#include "UI\triagecard.hpp" +#include "ui\CfgInGameUI.hpp" +#include "ui\RscTitles.hpp" +#include "ui\triagecard.hpp" class ACE_newEvents { medical_onUnconscious = "ace_unconscious"; diff --git a/addons/medical/data/bodybagItem.rvmat b/addons/medical/data/bodybagitem.rvmat similarity index 100% rename from addons/medical/data/bodybagItem.rvmat rename to addons/medical/data/bodybagitem.rvmat diff --git a/addons/medical/data/bodybagItem_co.paa b/addons/medical/data/bodybagitem_co.paa similarity index 100% rename from addons/medical/data/bodybagItem_co.paa rename to addons/medical/data/bodybagitem_co.paa diff --git a/addons/medical/data/IVBag.rvmat b/addons/medical/data/ivbag.rvmat similarity index 100% rename from addons/medical/data/IVBag.rvmat rename to addons/medical/data/ivbag.rvmat diff --git a/addons/medical/data/IVBag_blood_1000ml_ca.paa b/addons/medical/data/ivbag_blood_1000ml_ca.paa similarity index 100% rename from addons/medical/data/IVBag_blood_1000ml_ca.paa rename to addons/medical/data/ivbag_blood_1000ml_ca.paa diff --git a/addons/medical/data/IVBag_blood_250ml_ca.paa b/addons/medical/data/ivbag_blood_250ml_ca.paa similarity index 100% rename from addons/medical/data/IVBag_blood_250ml_ca.paa rename to addons/medical/data/ivbag_blood_250ml_ca.paa diff --git a/addons/medical/data/IVBag_blood_500ml_ca.paa b/addons/medical/data/ivbag_blood_500ml_ca.paa similarity index 100% rename from addons/medical/data/IVBag_blood_500ml_ca.paa rename to addons/medical/data/ivbag_blood_500ml_ca.paa diff --git a/addons/medical/data/model.cfg b/addons/medical/data/model.cfg index e6b373cb38..58f288c3b9 100644 --- a/addons/medical/data/model.cfg +++ b/addons/medical/data/model.cfg @@ -21,14 +21,6 @@ class CfgModels { skeletonName = ""; }; - class IVBagBase: Default { - sectionsInherit = ""; - sections[] = {"camo"}; - skeletonName = ""; - }; - class IVBag_250ml: IVBagBase {}; - class IVBag_500ml: IVBagBase {}; - class IVBag_1000ml: IVBagBase {}; class ace_medcrate: Default { skeletonName = "ACE_Medcrate_Skeleton"; @@ -49,4 +41,37 @@ class CfgModels { }; }; }; + + class adenosine: Default {}; + class atropine: Default {}; + class bandage: Default {}; + class bodybagItem: Default {}; + class epinephrine: Default {}; + + class IVBagBase: Default { + sectionsInherit = ""; + sections[] = {"camo"}; + skeletonName = ""; + }; + class IVBag_250ml: IVBagBase {}; + class IVBag_500ml: IVBagBase {}; + class IVBag_1000ml: IVBagBase {}; + + class littergeneric: Default {}; + class littergeneric_adenosine: Default {}; + class littergeneric_atropine: Default {}; + class littergeneric_bandages1: Default {}; + class littergeneric_bandages2: Default {}; + class littergeneric_bandages3: Default {}; + class littergeneric_clean: Default {}; + class littergeneric_epinephrine: Default {}; + class littergeneric_gloves: Default {}; + class littergeneric_morphine: Default {}; + class littergeneric_packingbandage: Default {}; + class littergeneric_Quikclot: Default {}; + class morphine: Default {}; + class packingbandage: Default {}; + class QuikClot: Default {}; + class surgical_kit: Default {}; + class tourniquet: Default {}; }; diff --git a/addons/medical/data/QuikClot.rvmat b/addons/medical/data/quikclot.rvmat similarity index 100% rename from addons/medical/data/QuikClot.rvmat rename to addons/medical/data/quikclot.rvmat diff --git a/addons/medical/data/QuikClot_CO.paa b/addons/medical/data/quikclot_co.paa similarity index 100% rename from addons/medical/data/QuikClot_CO.paa rename to addons/medical/data/quikclot_co.paa diff --git a/addons/medical/data/QuikClot_NOHQ.paa b/addons/medical/data/quikclot_nohq.paa similarity index 100% rename from addons/medical/data/QuikClot_NOHQ.paa rename to addons/medical/data/quikclot_nohq.paa diff --git a/addons/medical/functions/fnc_actionLoadUnit.sqf b/addons/medical/functions/fnc_actionLoadUnit.sqf index 95b7cbf8a3..dd56a4074a 100644 --- a/addons/medical/functions/fnc_actionLoadUnit.sqf +++ b/addons/medical/functions/fnc_actionLoadUnit.sqf @@ -29,4 +29,10 @@ if ([_target] call FUNC(isBeingDragged)) then { [_caller, _target] call EFUNC(dragging,dropObject); }; -[_caller, _target, _vehicle] call EFUNC(common,loadPerson); +private _vehicle = [_caller, _target, _vehicle] call EFUNC(common,loadPerson); +if (!isNull _vehicle) then { + private _hint = LSTRING(loadedInto); + private _itemName = [_target, false, true] call EFUNC(common,getName); + private _vehicleName = getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName"); + [[_hint, _itemName, _vehicleName], 3.0] call EFUNC(common,displayTextStructured); +}; diff --git a/addons/medical/functions/fnc_addDamageToUnit.sqf b/addons/medical/functions/fnc_addDamageToUnit.sqf index 609c636bfa..b5f59e50e9 100644 --- a/addons/medical/functions/fnc_addDamageToUnit.sqf +++ b/addons/medical/functions/fnc_addDamageToUnit.sqf @@ -30,7 +30,7 @@ if (_damageToAdd < 0) exitWith {ERROR_1("addDamageToUnit - bad damage %1", _this if (!(_selection in GVAR(SELECTIONS))) exitWith {ERROR_1("addDamageToUnit - bad selection %1", _this); -1}; //Get the hitpoint and the index -private _hitpoint = [_unit, _selection, true] call ace_medical_fnc_translateSelections; +private _hitpoint = [_unit, _selection, true] call FUNC(translateSelections); (getAllHitPointsDamage _unit) params [["_allHitPoints", []]]; private _hitpointIndex = -1; { //case insensitive find diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index 3058dd82bf..d99d97d707 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -36,7 +36,7 @@ if (_show) then { if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith { [_idPFH] call CBA_fnc_removePerFrameHandler; }; - if (ACE_player distance _target > MAX_DISTANCE) exitwith { + if ((ACE_player distance _target > MAX_DISTANCE) && {vehicle _target != vehicle ACE_player}) exitWith { ("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"]; [_idPFH] call CBA_fnc_removePerFrameHandler; [QEGVAR(common,displayTextStructured), [[LSTRING(DistanceToFar), [_target] call EFUNC(common,getName)], 1.75, ACE_player], [ACE_player]] call CBA_fnc_targetEvent; @@ -145,6 +145,9 @@ if (_show) then { (_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0]; } foreach _selectionBloodLoss; + // update tourniquet information + [_display, _target getVariable [QGVAR(tourniquets), [0,0,0,0,0,0]]] call FUNC(updateTourniquets); + private _lbCtrl = (_display displayCtrl 200); lbClear _lbCtrl; { diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index 6d17077a38..42cb8c3e05 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -78,11 +78,10 @@ if (_unit getVariable [QGVAR(isFalling), false]) then { if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) then { _unit setVariable [QGVAR(frameNo_damageCaching), diag_frameno]; - // handle the cached damages 3 frames later + // handle the cached damages 2 frames later [{ - params ["_args", "_idPFH"]; - _args params ["_unit", "_frameno"]; - if (diag_frameno >= _frameno + 2) then { + [{ + params ["_unit"]; _unit setDamage 0; private _cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []]; private _cache_damages = _unit getVariable QGVAR(cachedDamages); @@ -90,9 +89,8 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t (_x + [_cache_damages select _forEachIndex]) call FUNC(handleDamage_advanced); } forEach _cache_params; [_unit] call FUNC(handleDamage_advancedSetDamage); - [_idPFH] call CBA_fnc_removePerFrameHandler; - }; - }, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler; + }, _this] call CBA_fnc_execNextFrame; + }, _unit] call CBA_fnc_execNextFrame; _unit setVariable [QGVAR(cachedProjectiles), []]; _unit setVariable [QGVAR(cachedHitPoints), []]; diff --git a/addons/medical/functions/fnc_itemCheck.sqf b/addons/medical/functions/fnc_itemCheck.sqf index 0290deeea8..29a9efef74 100644 --- a/addons/medical/functions/fnc_itemCheck.sqf +++ b/addons/medical/functions/fnc_itemCheck.sqf @@ -15,38 +15,44 @@ * Public: Yes */ +if (GVAR(convertItems) == 2) exitWith {}; + params ["_unit"]; while {({_x == "FirstAidKit"} count items _unit) > 0} do { _unit removeItem "FirstAidKit"; - if (GVAR(level) >= 2) then { - _unit addItem "ACE_fieldDressing"; - _unit addItem "ACE_packingBandage"; - _unit addItem "ACE_morphine"; - _unit addItem "ACE_tourniquet"; - } else { - _unit addItem "ACE_fieldDressing"; - _unit addItem "ACE_fieldDressing"; - _unit addItem "ACE_morphine"; + if (GVAR(convertItems) == 0) then { + if (GVAR(level) >= 2) then { + _unit addItem "ACE_fieldDressing"; + _unit addItem "ACE_packingBandage"; + _unit addItem "ACE_morphine"; + _unit addItem "ACE_tourniquet"; + } else { + _unit addItem "ACE_fieldDressing"; + _unit addItem "ACE_fieldDressing"; + _unit addItem "ACE_morphine"; + }; }; }; while {({_x == "Medikit"} count items _unit) > 0} do { _unit removeItem "Medikit"; - if (GVAR(level) >= 2) then { - _unit addItemToBackpack "ACE_fieldDressing"; - _unit addItemToBackpack "ACE_packingBandage"; - _unit addItemToBackpack "ACE_packingBandage"; - _unit addItemToBackpack "ACE_epinephrine"; - _unit addItemToBackpack "ACE_morphine"; - _unit addItemToBackpack "ACE_salineIV_250"; - _unit addItemToBackpack "ACE_tourniquet"; - } else { - _unit addItemToBackpack "ACE_epinephrine"; - _unit addItemToBackpack "ACE_epinephrine"; - _unit addItemToBackpack "ACE_epinephrine"; - _unit addItemToBackpack "ACE_epinephrine"; - _unit addItemToBackpack "ACE_bloodIV"; - _unit addItemToBackpack "ACE_bloodIV"; + if (GVAR(convertItems) == 0) then { + if (GVAR(level) >= 2) then { + _unit addItemToBackpack "ACE_fieldDressing"; + _unit addItemToBackpack "ACE_packingBandage"; + _unit addItemToBackpack "ACE_packingBandage"; + _unit addItemToBackpack "ACE_epinephrine"; + _unit addItemToBackpack "ACE_morphine"; + _unit addItemToBackpack "ACE_salineIV_250"; + _unit addItemToBackpack "ACE_tourniquet"; + } else { + _unit addItemToBackpack "ACE_epinephrine"; + _unit addItemToBackpack "ACE_epinephrine"; + _unit addItemToBackpack "ACE_epinephrine"; + _unit addItemToBackpack "ACE_epinephrine"; + _unit addItemToBackpack "ACE_bloodIV"; + _unit addItemToBackpack "ACE_bloodIV"; + }; }; }; diff --git a/addons/medical/functions/fnc_updateTourniquets.sqf b/addons/medical/functions/fnc_updateTourniquets.sqf new file mode 100644 index 0000000000..3065ea4f07 --- /dev/null +++ b/addons/medical/functions/fnc_updateTourniquets.sqf @@ -0,0 +1,26 @@ +#include "script_component.hpp" +/* + * Author: diwako + * Update tourniquets on the body image on the menu. + * + * Arguments: + * 0: Display + * 1: Tourniquets + * + * Return Value: + * None + * + * Example: + * [some_display, [0,0,0,0,0,0]] call ace_medical_fnc_updateTourniquets + * + * Public: No + */ + +params ["_display", "_tourniquets"]; + +// Handle tourniquets +private _availableSelections = [0, 0, 56, 57, 58, 59]; +for "_i" from 2 to 5 do { + private _tourn = _tourniquets select _i; + (_display displayCtrl (_availableSelections select _i)) ctrlSetTextColor [0, 0, 0.8, _tourn]; +}; diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 03a7033bf4..5979939451 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -28,7 +28,7 @@ Ezen a testrészen nincs sérülés... Žádné zranění na této části těla... Nenhum ferimento nesta parte do corpo... - この身体は怪我をしていません・・・ + この部分に怪我はしていません・・・ 이 부위에는 부상이 없습니다... 此身体部位没有受伤 此身體部位沒有受傷 @@ -538,7 +538,7 @@ Pulzus ellenőrzése Controlla il polso Checar pulso - 心拍数をはかる + 心拍数を計る 맥박 확인 检查脉搏 檢查脈搏 @@ -554,7 +554,7 @@ Vérnyomás megmérése Controlla pressionsa sanguigna Chegar pressão sanguínea - 血圧をはかる + 血圧を計る 혈압 확인 检查血压 檢查血壓 @@ -618,7 +618,7 @@ Érszorító leszedése Rimuovi laccio emostatico Remover torniquete - 止血帯をはずす + 止血帯を外す 지혈대 제거 移除军用止血带 移除軍用止血帶 @@ -698,7 +698,7 @@ Vér adása intravénásan (1000ml) Effettua trasfusione sangue EV (1˙000ml) Administrar sangue IV (1000ml) - 血液 IV (1000ml) をあたえる + 血液 IV (1000ml) を与える IV 혈액 수혈 (1000ml) 输血液 (1000ml) 輸血液 (1000ml) @@ -714,7 +714,7 @@ Vér adása intravénásan (500ml) Effettua trasfusione sangue EV (500ml) Administrar sangue IV (500ml) - 血液 IV (500ml) をあたえる + 血液 IV (500ml) を与える IV 혈액 수혈 (500ml) 输血液 (500ml) 輸血液 (500ml) @@ -730,7 +730,7 @@ Vér adása intravénásan (250ml) Effettua trasfusione sangue EV (250ml) Administrar sangue IV (250ml) - 血液 IV (250ml) をあたえる + 血液 IV (250ml) を与える IV 혈액 수혈 (250ml) 输血液 (250ml) 輸血液 (250ml) @@ -746,7 +746,7 @@ Vérplazma adása intravénásan (1000ml) Effettua trasfusione plasma EV (1˙000ml) Administrar plasma IV (1000ml) - 血しょう IV (1000ml) をあたえる + 血しょう IV (1000ml) を与える IV 혈장 수혈 (1000ml) 输血浆 (1000ml) 輸血漿 (1000ml) @@ -762,7 +762,7 @@ Vérplazma adása intravénásan (500ml) Effettua trasfusione plasma EV (500ml) Administrar plasma IV (500ml) - 血しょう IV (500ml) をあたえる + 血しょう IV (500ml) を与える IV 혈장 수혈 (500ml) 输血浆 (500ml) 輸血漿 (500ml) @@ -794,7 +794,7 @@ Sós víz adása intravénásan (1000ml) Effettua trasfusione salina EV (1˙000ml) Administrar soro IV (1000ml) - 生理食塩水 IV (1000ml) をあたえる + 生理食塩水 IV (1000ml) を与える IV 생리식염수 수혈 (1000ml) 注射生理食盐水 (1000ml) 注射生理食鹽水 (1000ml) @@ -826,7 +826,7 @@ Sós víz adása intravénásan (250ml) Effettua trasfusione salina EV (250ml) Administrar soro IV (250ml) - 生理食塩水 IV (250ml) をあたえる + 生理食塩水 IV (250ml) を与える IV 생리식염수 수혈 (250ml) 注射生理食盐水 (250ml) 注射生理食鹽水 (250ml) @@ -1082,7 +1082,7 @@ Usato per coprire una ferita Usado para cobrir um ferimento Slouží k překrytí poranění - 傷口をおおう + 傷口を覆います 상처를 덮을때 씁니다 用于覆盖伤口 用於覆蓋傷口 @@ -1130,7 +1130,7 @@ Usato su ferite medie o larghe per fermare emorragie. Usado para atar ferimentos médios ou grandes e estancar sangramentos. Používá se k zastavení středních až silnějších krvácení - 弾性包帯は粘着フィルム状で、普通から大きめなケガにつかい止血します。 + 弾性包帯は粘着フィルム状で、普通から大きめなケガに使い止血します。 중형 또는 대형 상처를 채우고 출혈을 막기위해 쓰입니다 用于包扎中到大型伤口,并防止出血 用於包紮中到大型傷口,並防止出血 @@ -1146,7 +1146,7 @@ Ein Verband, um die Wunde abzudecken und die Wundheilung zu fördern. Wunden abdecken ist eine Option bei größeren Polytraumen Atadura usada para atar o ferimento, estancando o sangramento e facilitando a cicatrização. Atar feridas é uma opção em ferimentos de politrauma grandes. Tlakový obvaz se skládá se ze sterilní krycí vrstvy, na kterou je přiložena silná vrstva savého materiálu stlačující cévu v ráně a která je přitlačována k ráně a připevněna obinadlem. Slouží k zastavení silnějších krvácení. - 包帯をつかうと出血を防ぎ治療を促進させます。また大きめな多発性外傷にたいしても使えます。 + 包帯を使うと出血を防ぎ治療を促進させます。また大きめな多発性外傷に対しても使えます。 출혈을 막고 상처를 치유하기 위한 붕대. 다발성외상의 경우 상처를 채우는것도 한 가지 방법입니다. 用于包扎中到大型伤口,并防止出血,为在大型多处性伤口的选项之一! 用於包紮中到大型傷口,並防止出血,為在大型多處性傷口的選項之一! @@ -1226,7 +1226,7 @@ Rallenta la perdita di sangue in caso di sanguinamento Reduz a velocidade da perda de sangue Zpomaluje ztráty krve při krvácení - 出血しているときに、失血量をおさえます。 + 出血している時に失血量を抑えます。 출혈 시 혈액손실을 늦춰줍니다 减缓失血的速度 減緩失血的速度 @@ -1242,7 +1242,7 @@ Un laccio emostatico usato per comprimere le vene e arterie per bloccare o rallentare la circolazione del sangue e quindi rallentare dissanguamenti. Aparelho que comprime as artérias e veias para diminuir a perda de sangue. Zařízení používané ke stlačení venózního a arteriálního oběhu. V důsledku dochází ke zpomalení toku krve a tedy i snížení ztrát krve. - 止血帯は静脈や動脈へ圧力をかけ、循環を遅らせることで血液の流れをおそくし、失血を防ぎます。 + 止血帯は静脈や動脈へ圧力をかけ、循環を遅らせることで血液の流れを遅くし、失血を防ぎます。 정맥과 동맥을 압축시키켜 혈액순환을 억제 혹은 늦추게하여 혈액손실을 줄이는 도구입니다. 用于压迫静脉与动脉的血液流动,达到减缓失血速度的目的。 用於壓迫靜脈與動脈的血液流動,達到減緩失血速度的目的 @@ -1274,7 +1274,7 @@ Usato per combattere il dolore. Usado para combater dores moderadas e severas Slouží k tlumení středně těžkých a těžkých bolestí - 戦闘が収まったとき、痛みにたいしてつかいます。 + 戦闘が収まった時、痛みに対して使います。 심한 통증을 완화하는데 쓰입니다 减低中度至重度的疼痛感 減低中度至重度的疼痛感 @@ -1290,7 +1290,7 @@ Un analgesico usato per combattere il dolore. Um analgésico usado para combater dores moderadas e fortes. Analgetikum slouží k tlumení středně těžkých a těžkých bolestí - 戦闘が収まったとき、モルヒネを痛みにたいしてつかいます。 + 戦闘が収まった時、モルヒネを痛みに対して使います。 심한 통증을 완화하기 위해 쓰이는 진통제입니다. 止痛药的一种,用于减低中度至重度的疼痛感。 止痛藥的一種,用於減低中度至重度的疼痛感 @@ -1320,7 +1320,7 @@ Slouží jako protiváha Adrenalinu Usado para combater os efeitos da epinefrina Используется для купирования эффектов адреналина - アドレナリンの反対の効果としてつかいます。 + アドレナリンの反対の効果として使います。 에피네프린 대응책으로 쓰입니다 用来对付肾上腺素的影响 用來對付腎上腺素的影響 @@ -1335,7 +1335,7 @@ Droga používaná k tlumení efektu Adrenalinu Uma droga usada para combater os efeitos da epinefrina Препарат используется для купирования эффектов адреналина - つかうと、アドレナリンと反対の効果がでます。 + 使用するとアドレナリンと反対の効果が出ます。 에피네프린에 대응용으로 쓰이는 약품 一种药物用于减低肾上腺素的效果 一種藥物用於減低腎上腺素的效果 @@ -1367,7 +1367,7 @@ Usato in situazioni con gas nervino. Usado em casos de ataque QBRN Používá se v přítomnosti nervových plynů - 核・生物・化学兵器によ汚染環境下にてつかいます。 + 核・生物・化学兵器による汚染環境下にて使います。 핵,생물,화학 상황에 쓰입니다 使用于核生化污染的情况 使用於核生化汙染的情況 @@ -1383,7 +1383,7 @@ E' un farmaco usato in ambito militare in scenari con presenza di gas nervino. Uma droga usada por militares em casos de ataque QBRN. Atropin slouží jako protijed na otravu organofosfátovými insekticidy (diazinon) a nervovými plyny. - 核・生物・化学兵器がつかわれている条件下にてつかいます。 + 核・生物・化学兵器による汚染環境下において使います。 핵,생물,화학 상황에 쓰이는 군용 약품 军用神经解毒针,用来应付核生化污染的情况。 軍用神經解毒針,用來應付核生化汙染的情況 @@ -1431,7 +1431,7 @@ Uma droga que trabalha dilatando os brônquios, aumentando a frequência cardíaca e combate efeitos de reações alérgicas (anáfilaticas). Usado em casos de parada cardíaca com poucas chances de recuperação. Egy hormon, mely a szimpatikus idegrendszer által kitágítja a hörgőket, valamint megnöveli a szívverést, ezzel ellensúlyozva ilyen jellegű allergiás reakciókat (anafilaxiás sokk). Hirtelen szívmegállás esetén is használt, idő alatt csökkenő hatásfokkal. Zúžení periferních cév díky působení na alfa receptory a následné kontrakci hladkých svalů, tím dochází k tzv. centralizaci oběhu, krev se soustřeďuje v životně důležitých centrálních orgánech (srdce, mozek, plíce), působí také pozitivně na srdeční činnost a dochází ke zvýšení krevního tlaku a tepu. Dále se používá při náhlé srdeční zástavě. - 薬は気管支を拡張するよう交感神経を拡張させ、心拍数を増加させます。それにアレルギー反応を収める効果もあります(アナフィラキシー ショック)。得られる効果は少ないですが、心停止している場合などにつかわれます。 + 薬は気管支を拡張するよう交感神経を拡張させ、心拍数を増加させます。それにアレルギー反応を収める効果もあります(アナフィラキシー ショック)。得られる効果は少ないですが、心停止している場合などに使われます。 기관지를 확장시키는 교감 신경 반응을 이끌어내는 약물로써, 심박을 높이고 알러지 효과에 대응합니다(아나필락시스). 심폐가 정지하는 경우 호전이 되지않을때 사용합니다. 俗称强心针,为一种支气管扩张药物,会增加心跳速率并减缓过敏反应(过敏性休克),在心跳骤停时有恢复心跳的效果! 俗稱強心針,為一種支氣管擴張藥物,會增加心跳速率並減緩過敏反應(過敏性休克),在心跳驟停時有恢復心跳的效果! @@ -1653,7 +1653,7 @@ Kochsalzlösung (500ml) 0,9%-os sósvíz-infúzió (500ml) Soluzione salina EV (500ml) - Soro IV (1000ml) + Soro IV (500ml) Fyziologický roztok (500ml) 生理食塩水 IV (500ml) 생리식염수 IV (500ml) @@ -1669,7 +1669,7 @@ Kochsalzlösung (250ml) 0,9%-os sósvíz-infúzió (250ml) Soluzione salina EV (250ml) - Soro IV (1000ml) + Soro IV (250ml) Fyziologický roztok (250ml) 生理食塩水 IV (250ml) 생리식염수 IV (250ml) @@ -1719,7 +1719,7 @@ Bendaggio emostatico con coagulante che permette di arrestare perdite di sangue Atadura homeostática com coagulante que controla hemorragias médias e grandes. Hemostatický obvaz určený k zástavě krvácení - 血液凝固剤をふくむ包帯により、止血できます。 + 血液凝固剤を含む包帯により、止血できます。 지혈시 사용하는 붕대로 혈액 응고제를 포함하고있습니다. 包含止血粉成分的止血绷带,可用于止血。 包含止血粉成分的止血繃帶,可用於止血。 @@ -1751,7 +1751,7 @@ Include vario materiale medico per trattamenti avanzati. Inclui vários tratamentos materiais para costura e tratamento avançado Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných - 縫合や高度な処置に必要とされる、さまざまな治療器具が含まれています。 + 縫合や高度な処置に必要とされる、様々な治療器具が含まれています。 봉합및 고급 조치에 필요한 다양한 치료 도구가 있습니다. 包含各种医疗套件,以及进阶伤口系统需要的缝合用品 包含各種醫療套件,以及進階傷口系統需要的縫合用品 @@ -1767,7 +1767,7 @@ Kit de primeiros socorros para sutura ou tratamentos avançados Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných v poli Pronto soccorso personale da campo per mettersi i punti o per trattamenti avanzati. - 戦場で縫合や高度な処置に必要とされる、さまざまな治療器具が含まれています。 + 応急処置キットは戦場での縫合や高度な治療に使われます。 야전에서 봉합및 고급 조치를 위한 개인응급키트 个人急救包可用于战地缝合手术或进阶伤口系统使用 個人急救包可用於戰地縫合手術或進階傷口系統使用 @@ -1783,7 +1783,7 @@ Usar o kit de primeiros socorros Použít osobní lékárničku (PAK) Usa il pronto soccorso personale - 応急処置キットをつかう + 応急処置キットを使う 개인 응급 키트사용하기 使用个人急救包 使用個人急救包 @@ -1815,7 +1815,7 @@ Kit chirurgico per trattamenti avanzati sul campo. Kit Cirurgico para uso de tratamento médico avançado em campo Chirurgická sada určená k pokročilejším zdravotnickým zákrokům v poli - 縫合キットは戦場で高度な処置をするためにつかわれます。 + 縫合キットは戦場で高度な処置をする為に使われます。 야전 상황에서 고급 의료 처치를 위해 사용되는 봉합 키트 用于在战场上为伤口进行缝合(需要开启进阶伤口系统) 用於在戰場上為傷口進行縫合(需要開啟進階傷口系統) @@ -1831,7 +1831,7 @@ Kit chirurgico per trattamenti avanzati sul campo. Kit Cirúrgico para tratamento médico avançado em campo. Chirurgická sada určená k pokročilejším zdravotnickým zákrokům v poli - 縫合キットは戦場で高度な処置をするためにつかわれます。 + 縫合キットは戦場で高度な処置をする為に使われます。 야전 상황에서 고급 의료 처치를 위해 사용되는 봉합 키트 用于在战场上为伤口进行缝合(需要开启进阶伤口系统) 用於在戰場上為傷口進行縫合(需要開啟進階傷口系統) @@ -1847,7 +1847,7 @@ Sebészeti készlet használata Použít chirurgickou sadu Usar kit cirúrgico - 縫合キットをつかう + 縫合キットを使う 봉합키트 사용하기 使用手术包 使用手術包 @@ -1879,7 +1879,7 @@ Una sacca nera per trasportare cadaveri. Um saco para corpos mortos Pytel na mrtvoly - 死体袋は死体を入れるためにつかいます + 死体袋は死体を入れるために使います 시체를 운반할때 쓰는 가방입니다 用来装尸体用 用來裝屍體用 @@ -1895,7 +1895,7 @@ Una sacca nera per trasportare cadaveri. Um saco para corpos mortos. Pytel na mrtvoly - 死体袋は死体を入れるためにつかいます + 死体袋は死体を入れるために使います 시체를 운반할때 쓰는 가방입니다 用来装尸体用 用來裝屍體用 @@ -2519,7 +2519,7 @@ Fájdalmai vannak Je v bolestech Ele está com dor - 痛いようです + 痛い様です 통증이 있다 他感到疼痛 他感到疼痛 @@ -2535,7 +2535,7 @@ Nincsenek fájdalmai Nemá žádné bolesti Ele não está com dor - 痛くないようです + 痛くない様です 통증이 없다 他不会疼痛 他不會疼痛 @@ -2567,7 +2567,7 @@ Du verbindest %1 (%2) Você aplica atadura no paciente %1 (%2) Obvazuješ %1 (%2) - %1 (%2) 包帯をつかいました + %1 (%2) 包帯を使いました %1 (%2) 붕대를 감았다 你正在对 %1 (%2) 包扎绷带中 你正在對 %1 (%2) 包紮繃帶中 @@ -2780,6 +2780,22 @@ 将伤者放入 將傷者放入 + + %1<br/>loaded into<br/>%2 + %1<br/>cargado en<br/>%2 + %1<br/>chargé dans<br/>%2 + %1<br/>in<br/>%2 verladen + %1<br/>załadowano do<br/>%2 + %1<br/>naloženo do<br/>%2 + %1<br/>carregado em<br/>%2 + %1<br/>caricato su<br/>%2 + %1<br/>berakodva ide:<br/>%2 + %1<br/>загружен в<br/>%2 + %1<br/>は<br/>%2へ積み込まれました + %1<br/>는<br/>%2 에 실림 + %1<br/>裝載至<br/>%2 + %1<br/>装载至<br/>%2 + Place body in bodybag Colocar cuerpo en bolsa para cadáveres @@ -2854,7 +2870,7 @@ %1 ha usato %2 %1 usou %2 %1 použil %2 - %1 は %2 をつかいました + %1 は %2 を使いました %1 已使用 %2 %1 已使用 %2 %1 (이)가 %2 을 사용함 @@ -2901,7 +2917,7 @@ %1 ha usato Kit Pronto Soccorso Personale %1 usó Kit de Primeros Auxilios %1 a utilisé une trousse - %1 は応急処置キットをつかいました + %1 は応急処置キットを使いました %1 已使用了个人急救包 %1 已使用了個人急救包 %1 (이)가 개인응급키트를 사용함 @@ -3161,6 +3177,16 @@ 选择你喜欢的选单样式; 预设为3D选项或放射状 選擇你喜歡的選單樣式; 預設為3D選項或放射狀 + + Show medical interaction for self + 自分に治療インタラクションを表示 + Pokaż menu interakcji medycznej dla postaci + + + Show the self interaction medical actions + セルフ インタラクションに治療動作を表示します。 + Pokaż elementy menu interakcji medycznej dla postaci + Selections (3d) Pozycje (3D) @@ -4621,7 +4647,7 @@ Kde může být použit adrenalin? (Pouze základní zdravotní systém) Onde pode-se usar a epinefrina? (Somente sistema médico básico) Где может использоваться адреналин? (Базовая медицина) - どこでもアドレナリンをつかえるようにしますか? (ベーシック医療のみ) + どこでもアドレナリンを使えるようにしますか? (ベーシック医療のみ) 어디에서 에피네프린을 사용할 수 있습니까? (기본 의료) 在哪里可以使用肾上腺素? (基本医疗) 在哪裡可以使用腎上腺素? (基本醫療) @@ -4637,7 +4663,7 @@ Lieu d'utilisation da trousse sanitaire Elsősegélycsomag helyek Locazioni Kit Pronto Soccorso - 応急処置キットをつかう場所 + 応急処置キットを使う場所 개인응급키트 사용 장소 个人急救包使用地点 個人急救包使用地點 @@ -4653,7 +4679,7 @@ Où la trousse sanitaire peut être utilisée ? Hol lehet az elsősegélycsomagot használni? Dove può essere usato il Kit Pronto Soccorso? - どこでも応急処置キットをつかえるようにしますか? + どこでも応急処置キットを使えるようにしますか? 어디에서 개인응급키트를 사용할 수 있습니까? 在哪里可以使用个人急救包? 在哪裡可以使用個人急救包? @@ -4685,7 +4711,7 @@ Onde o kit de primeiros socorros pode ser utilizado? Когда может использоваться аптечка? Quando può essere usato il Kit Pronto Soccorso? - どこでも応急処置キットをつかえるようにしますか? + どこでも応急処置キットを使えるようにしますか? 언제 개인응급키트를 사용할 수 있습니까? 何时可以使用个人急救包? 何時可以使用個人急救包? @@ -4781,7 +4807,7 @@ Qui peut utiliser les trousses chirurgicales? Ki használhatja a sebészkészletet? Chi può usare il Kit Chirurgico? - だれでも縫合キットをつかえるようにしますか? + だれでも縫合キットを使えるようにしますか? 어느 인원이 봉합키트를 사용할 수 있습니까? 谁能够使用手术包? 誰能夠使用手術包? @@ -4813,7 +4839,7 @@ La trousse chirurgicale doit être consommée à l'utilisation? Eltávolítódjon a sebészkészlet használatkor? Il Kit Chirurgico dev'essere rimosso dopo l'uso? - 縫合キットをつかった後に削除しますか? + 縫合キットを使った後に削除しますか? 봉합키트를 사용하고 나서 제거합니까? 手术包会在使用后被删除吗? 手術包會在使用後被刪除嗎? @@ -4845,7 +4871,7 @@ Où peut être utilisé les trousses chirurgicales? Hol lehet a sebészkészletet használni? Dove può essere usato il Kit Chirurgico? - どこでも縫合キットをつかえるようにしますか? + どこでも縫合キットを使えるようにしますか? 어디에서 봉합키트를 사용할 수 있게 합니까? 定义手术包可被使用的地方? 定義手術包可被使用的地方? @@ -4877,7 +4903,7 @@ Onde o kit cirúrgico pode ser utilizado? Когда может использоваться хирургический набор? Quando può essere usato il Kit Chirurgico? - いつでも縫合キットをつかえるようにしますか? + いつでも縫合キットを使えるようにしますか? 언제 봉합키트를 사용할 수 있습니까? 何时可以使用手术工具包? 何時可以使用手術工具包? @@ -4985,7 +5011,7 @@ Paramètre du revive [ACE] Újraélesztés beállításai [ACE] Impostazioni Revive [ACE] - リバイブ設定 [ACE] + 蘇生設定 [ACE] 소생 설정 [ACE] 复苏设定 [ACE] 復甦設定 [ACE] @@ -5001,7 +5027,7 @@ Activer le revive Újraélesztés engedélyezése Abilita Revive - リバイブを有効化 + 蘇生を有効化 소생 활성화 启用复苏 啟用復甦 @@ -5017,7 +5043,7 @@ Active un système de revive basique Egy alap újraélesztési rendszer engedélyezése Abilita un sistema revive basico - ベーシックなリバイブを有効化 + ベーシックな蘇生を有効化 기본 소생 시스템 활성화 启用基本复苏系统 啟用基本復甦系統 @@ -5033,7 +5059,7 @@ Délai maximum pour le revive Maximum újraélesztési idő Tempo massimo Revive - 最大リバイブ時間 + 最大蘇生待機時間 최대 소생 시간 最大复苏时间 最大復甦時間 @@ -5049,7 +5075,7 @@ Délai d'attente maximum pour un revive Maximum másodperc, amit egy egység újraélesztési állapotban tölthet Numero massimo di secondi che un'unità può spendere in stato revive - ユニットがリバイブ状態になっている最大時間を設定できます + ユニットが蘇生待機状態になっている時の最大時間を設定できます 소생상태에서 인원이 버틸 수 있는 최대 시간을 초 단위로 정합니다 人员在等待复苏状态下能够等待的最大时间(秒) 人員在等待復甦狀態下能夠等待的最大時間(秒) @@ -5065,7 +5091,7 @@ Nombre maximum de revive Maximum újraélesztési lehetőségek Numero massimo Revives - 最大リバイブ数 + 最大蘇生数 최대 소생 횟수 最大被救活次数 最大被救活次數 @@ -5081,7 +5107,7 @@ Nombre de vie maximum d'une unité. 0 ou -1 désactive Egy egység maximum "életei". 0 vagy -1 letiltja. Numero massimo di vite di un'unità. 0 o -1 per disabilitare. - ユニットの最大リバイブ数を設定できます。0 または -1 は無効化になります + ユニットの最大蘇生数を設定できます。0 または -1 は無効化になります 소생 가능한 횟수입니다. 0 혹은 -1 로 비활성화 합니다 一个人员最大可被救活次数,0或-1为关闭 (无限救活) 一個人員最大可被救活次數,0或-1為關閉 (無限救活) @@ -5584,7 +5610,7 @@ Atraso durante cessar fogo da AI durante inconsciência médica Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales. Задержка прекращения огня ботами, когда игрок теряет сознание по медицинским причинам. - AI はプレイヤーが医療的な理由で気絶している場合にかぎり、撃つのをためらいます。 + AI はプレイヤーが医療的な理由で気絶している場合に限り、撃つのをためらいます。 Opóźnij stan wstrzymania ognia u AI kiedy gracz jest nieprzytomny z powodów medycznych. 의료상의 이유로 플레이어가 기절할 경우 인공지능이 발사를 지연합니다. 当玩家为无意识的状态时, 延长AI的开火时间 @@ -5613,6 +5639,7 @@ 打開蓋子 打开盖子 뚜껑 열기 + Otwórz pokrywę Close lid @@ -5622,6 +5649,7 @@ 關閉蓋子 关闭盖子 뚜껑 닫기 + Zamknij pokrywę Unconscious animation during treatment @@ -5629,6 +5657,7 @@ 治疗时死亡动画 醫療時加入的昏迷動作 Animazione da svenuto durante la cura + Nieprzytomne animacje podczas leczenia Allow animation of unconscious patients during treatment. @@ -5636,6 +5665,7 @@ 在无意识患者治疗时死亡,会播放死亡动画? 允許醫療時加入昏迷的動作 Permette l'animazione da svenuto dei pazioenti durante loro la cura. + Zezwalaj na animacje nieprzytomnych pacjentów podczas leczenia. Move unconscious units from group @@ -5643,6 +5673,7 @@ 从小队中移除无意识伤者 從小隊中移動昏迷的單位 Toglie le unità svenute dal grouppo + Przenieś nieprzytomne jednostki z grupy When a group member goes unconscious, removes them from their group. @@ -5650,6 +5681,7 @@ 当一个队员失去意识时,他将被移除出小队 當隊員昏迷時,將被他的小組中刪除 Quando un membro del gruppo sviene, viene tolto dal gruppo. + Kiedy członek grupy straci przytomność, usuwa ich z ich grupy. Overdosing @@ -5657,6 +5689,7 @@ 过量 過量 Overdose + Przedawkowanie Makes patient vulnerable to Morphine/Epinephrine/Atropine overdosing. @@ -5664,6 +5697,22 @@ 当队员处于吗啡/肾上腺素/阿托品过量时再次受伤,他的伤害会更重 當隊員對嗎啡/腎上腺素/阿托品過量時,會使他的傷害更重 Rende il paziente suscettibile di overdose da morfina, epinefrina o atropina. + Sprawia, że pacjent jest podatny na przedawkowanie morfiny/epinefryny. + + + Convert vanilla items + 標準アイテムを変換 + Skonwertuj przedmioty z Army3 (vanilia) na przedmioty medyczne ACE3 + + + Enables or disables whether vanilla medical items are converted to ACE medical items or just removed + 有効化すると標準の治療アイテムを ACE 治療アイテムへ変換し、無効化すると削除します。 + Decyduje czy oryginalne przedmioty medyczne z Army 3 mają być skonwertowane na przedmioty medyczne ACE3 czy usunięte + + + Just remove vanilla medical + 標準の治療アイテムを削除 + Usuń przedmioty z Army 3 (vanilia) diff --git a/addons/medical/ui/RscTitles.hpp b/addons/medical/ui/RscTitles.hpp index 3f9113a9d2..00182d24dd 100644 --- a/addons/medical/ui/RscTitles.hpp +++ b/addons/medical/ui/RscTitles.hpp @@ -48,6 +48,22 @@ class Rsctitles { idc = 55; text = QPATHTOF(ui\body_leg_right.paa); }; + class bodyImgTournAL: bodyImgHead { + idc = 56; + text = QPATHTOF(ui\tourniquet_arm_left.paa); + }; + class bodyImgTournAR: bodyImgHead { + idc = 57; + text = QPATHTOF(ui\tourniquet_arm_right.paa); + }; + class bodyImgTournLL: bodyImgHead { + idc = 58; + text = QPATHTOF(ui\tourniquet_leg_left.paa); + }; + class bodyImgTournLR: bodyImgHead { + idc = 59; + text = QPATHTOF(ui\tourniquet_leg_right.paa); + }; class InjuryListLabel { idc = 199; type = CT_STATIC; diff --git a/addons/medical/ui/tourniquet_arm_left.paa b/addons/medical/ui/tourniquet_arm_left.paa new file mode 100644 index 0000000000..800b1c5fb8 Binary files /dev/null and b/addons/medical/ui/tourniquet_arm_left.paa differ diff --git a/addons/medical/ui/tourniquet_arm_right.paa b/addons/medical/ui/tourniquet_arm_right.paa new file mode 100644 index 0000000000..5692d258a9 Binary files /dev/null and b/addons/medical/ui/tourniquet_arm_right.paa differ diff --git a/addons/medical/ui/tourniquet_leg_left.paa b/addons/medical/ui/tourniquet_leg_left.paa new file mode 100644 index 0000000000..5f0ff6b20f Binary files /dev/null and b/addons/medical/ui/tourniquet_leg_left.paa differ diff --git a/addons/medical/ui/tourniquet_leg_right.paa b/addons/medical/ui/tourniquet_leg_right.paa new file mode 100644 index 0000000000..902b42632b Binary files /dev/null and b/addons/medical/ui/tourniquet_leg_right.paa differ diff --git a/addons/medical_ai/StateMachine.hpp b/addons/medical_ai/StateMachine.hpp index 36642fbab3..130458f563 100644 --- a/addons/medical_ai/StateMachine.hpp +++ b/addons/medical_ai/StateMachine.hpp @@ -1,5 +1,5 @@ class GVAR(stateMachine) { - list = "allUnits select {local _x}"; + list = QUOTE(call EFUNC(common,getLocalUnits)); skipNull = 1; class Initial { diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index 21027747a5..c5c24a53e1 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -6,7 +6,8 @@ 次に AI 治療を有効 AI医疗启用 AI醫療啟用 - AI medica per: + AI medica abilitata per: + Medyczna SI aktywowana dla Enable AI units to heal themselves and each other. @@ -14,6 +15,7 @@ 使AI单位能够彼此治疗自己 啟用AI能夠彼此醫療自己 Permette alle unità AI di curare se stesse e fra di loro. + Zezwala jednostki SI do leczenia siebie samych i siebie nawzajem. Only Server and HC diff --git a/addons/medical_blood/XEH_postInit.sqf b/addons/medical_blood/XEH_postInit.sqf index ceff7f074c..a26afea627 100644 --- a/addons/medical_blood/XEH_postInit.sqf +++ b/addons/medical_blood/XEH_postInit.sqf @@ -28,9 +28,9 @@ if (isServer) then { if ((GVAR(enabledFor) == 1) && {!hasInterface}) exitWith {}; // 1: enabledFor_OnlyPlayers private _listcode = if (GVAR(enabledFor) == 1) then { - {[ACE_player] select {[_x] call FUNC(isBleeding)}} // ace_player is only possible local player + {[ACE_player]} // ace_player is only possible local player } else { - {allUnits select {(local _x) && {[_x] call FUNC(isBleeding)}}}; // filter all local bleeding units + EFUNC(common,getLocalUnits) // filter all local units }; private _stateMachine = [_listcode, true] call CBA_statemachine_fnc_create; diff --git a/addons/medical_blood/functions/fnc_onBleeding.sqf b/addons/medical_blood/functions/fnc_onBleeding.sqf index e21f68f02f..c800c32dc6 100644 --- a/addons/medical_blood/functions/fnc_onBleeding.sqf +++ b/addons/medical_blood/functions/fnc_onBleeding.sqf @@ -17,6 +17,7 @@ params ["_unit"]; +if (!([_unit] call FUNC(isBleeding))) exitWith {}; if (((vehicle _unit) != _unit) && {!((vehicle _unit) isKindOf "StaticWeapon")}) exitWith {}; // Don't bleed on ground if mounted private _lastTime = _unit getVariable [QGVAR(lastTime), -10]; diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml index 0464d661b7..d58f41bfc4 100644 --- a/addons/medical_blood/stringtable.xml +++ b/addons/medical_blood/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/medical_menu/functions/fnc_updateUIInfo.sqf b/addons/medical_menu/functions/fnc_updateUIInfo.sqf index 3c54cd71f0..f1341bf693 100644 --- a/addons/medical_menu/functions/fnc_updateUIInfo.sqf +++ b/addons/medical_menu/functions/fnc_updateUIInfo.sqf @@ -143,6 +143,7 @@ if ((EGVAR(medical,level) >= 2) && {([_target] call EFUNC(medical,hasMedicalEnab [_selectionBloodLoss, _damaged, _display] call FUNC(updateBodyImage); [_display, _genericMessages, _allInjuryTexts] call FUNC(updateInformationLists); +[_display, _target getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]]] call EFUNC(medical,updateTourniquets); [_display, _target getVariable [QEGVAR(medical,logFile_activity_view), []]] call FUNC(updateActivityLog); [_display, _target getVariable [QEGVAR(medical,logFile_quick_view), []]] call FUNC(updateQuickViewLog); diff --git a/addons/medical_menu/stringtable.xml b/addons/medical_menu/stringtable.xml index 8398a96a01..7b273febc6 100644 --- a/addons/medical_menu/stringtable.xml +++ b/addons/medical_menu/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -832,6 +832,7 @@ 医疗菜单最大范围 醫療選單最大範圍 Dirstanza menù medico + Maksymalny zasięg menu medycznego Maximum distance from where the Medical Menu can be opened. @@ -839,6 +840,7 @@ 醫療選單可以開啟的最大距離 医疗选单可以开启的最大距离 Massima distanza dalla quale si può aprire il menù medico. + Maksymalny dystans skąd menu medyczne może być otwarte. diff --git a/addons/medical_menu/ui/menu.hpp b/addons/medical_menu/ui/menu.hpp index 16c79e7c6a..0743dc93d5 100644 --- a/addons/medical_menu/ui/menu.hpp +++ b/addons/medical_menu/ui/menu.hpp @@ -309,6 +309,22 @@ class GVAR(medicalMenu) { idc = 55; text = QPATHTOEF(medical,ui\body_leg_right.paa); }; + class bodyImgTournAL: bodyImgHead { + idc = 56; + text = QPATHTOEF(medical,ui\tourniquet_arm_left.paa); + }; + class bodyImgTournAR: bodyImgHead { + idc = 57; + text = QPATHTOEF(medical,ui\tourniquet_arm_right.paa); + }; + class bodyImgTournLL: bodyImgHead { + idc = 58; + text = QPATHTOEF(medical,ui\tourniquet_leg_left.paa); + }; + class bodyImgTournLR: bodyImgHead { + idc = 59; + text = QPATHTOEF(medical,ui\tourniquet_leg_right.paa); + }; class selectHead: ACE_gui_buttonBase { diff --git a/addons/microdagr/CfgEventHandlers.hpp b/addons/microdagr/CfgEventHandlers.hpp index 47564cbd2d..789cfeb05c 100644 --- a/addons/microdagr/CfgEventHandlers.hpp +++ b/addons/microdagr/CfgEventHandlers.hpp @@ -13,6 +13,6 @@ class Extended_PreInit_EventHandlers { class Extended_PostInit_EventHandlers { class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); + clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit)); }; }; diff --git a/addons/microdagr/data/MicroDAGR.rvmat b/addons/microdagr/data/microdagr.rvmat similarity index 100% rename from addons/microdagr/data/MicroDAGR.rvmat rename to addons/microdagr/data/microdagr.rvmat diff --git a/addons/microdagr/data/MicroDAGR_co.paa b/addons/microdagr/data/microdagr_co.paa similarity index 100% rename from addons/microdagr/data/MicroDAGR_co.paa rename to addons/microdagr/data/microdagr_co.paa diff --git a/addons/microdagr/functions/fnc_updateDisplay.sqf b/addons/microdagr/functions/fnc_updateDisplay.sqf index a78f369d56..877bbb2bcc 100644 --- a/addons/microdagr/functions/fnc_updateDisplay.sqf +++ b/addons/microdagr/functions/fnc_updateDisplay.sqf @@ -167,7 +167,9 @@ case (APP_MODE_WAYPOINTS): { } forEach _waypoints; _currentIndex = (_currentIndex max 0) min (count _waypoints); - _wpListBox lbSetCurSel _currentIndex; + if ((lbCurSel _wpListBox) != _currentIndex) then { + _wpListBox lbSetCurSel _currentIndex; + }; //Reset focus to a dummy ctrl (top button), otherwise HOME/POS1 key goes to top of listBox and has keybind blocked ctrlSetFocus (_display displayCtrl IDC_TOPMENUBUTTON); diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index dbe7cff87f..d2808fac0a 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -300,7 +300,7 @@ UP Beállítása Definisci WayPoints Definir WP - ウェイポイント設定 + WP設定 웨이포인트 설정 设置路径点 設置路徑點 @@ -500,24 +500,38 @@ MicroDAGR - Waypoint Precision MicroDAGR - Wegpunkt Genauigkeit + MicroDAGR - Precisione del Waypoint + MicroDAGR - ウェイポイントの精度 + MicroDAGR - Precyzja PT Controls how precise the waypointdistance can be displayed Legt die Genauigkeit der Entfernung von Wegpunkten fest + Controlla quanto precisamente può essere visualizzato il waypoint a distanza + 表示されるウェイポイントの精度を設定します + Kontroluje jak precyzyjnie może być wyświetlany dystans PT 100m 100m + 100m + 100m + 100m 10m 10m + 10m + 10m + 10m 1m 1m + 1m + 1m + 1m - Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap. Moduł ten pozwala kontrolować jak duża ilość informacji jest załadowana do przedmiotów MicroDAGR. Mniejsza ilość danych ogranicza widok mapy pokazując mniej rzeczy na minimapie. diff --git a/addons/minedetector/CfgEventHandlers.hpp b/addons/minedetector/CfgEventHandlers.hpp index f19d0e18ec..e90bed419e 100644 --- a/addons/minedetector/CfgEventHandlers.hpp +++ b/addons/minedetector/CfgEventHandlers.hpp @@ -1,3 +1,8 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; class Extended_PreInit_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preInit)); @@ -5,6 +10,6 @@ class Extended_PreInit_EventHandlers { }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/minedetector/XEH_postInit.sqf b/addons/minedetector/XEH_postInit.sqf index 7ea04b5a5d..1c448794cc 100644 --- a/addons/minedetector/XEH_postInit.sqf +++ b/addons/minedetector/XEH_postInit.sqf @@ -5,16 +5,12 @@ GVAR(detectorConfigs) = call CBA_fnc_createNamespace; // Create a dictionary of detectable classnames GVAR(detectableClasses) = call CBA_fnc_createNamespace; + +private _detectableClasses = call (uiNamespace getVariable [QGVAR(detectableClasses), {[]}]); //See XEH_preStart.sqf { - if ((getNumber (_x >> QGVAR(detectable))) == 1) then { - GVAR(detectableClasses) setVariable [configName _x, true]; - }; -} forEach (configProperties [configFile >> "CfgVehicles", "isClass _x", true]); -{ - if ((getNumber (_x >> QGVAR(detectable))) == 1) then { - GVAR(detectableClasses) setVariable [configName _x, true]; - }; -} forEach (configProperties [configFile >> "CfgAmmo", "isClass _x", true]); + GVAR(detectableClasses) setVariable [_x, true]; +} forEach _detectableClasses; +TRACE_1("built cache",count allVariables GVAR(detectableClasses)); [QGVAR(enableDetector), FUNC(enableDetector)] call CBA_fnc_addEventHandler; [QGVAR(disableDetector), FUNC(disableDetector)] call CBA_fnc_addEventHandler; diff --git a/addons/minedetector/XEH_preStart.sqf b/addons/minedetector/XEH_preStart.sqf new file mode 100644 index 0000000000..48f003d08e --- /dev/null +++ b/addons/minedetector/XEH_preStart.sqf @@ -0,0 +1,19 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" + +// Cache detectable classes, see XEH_postInit.sqf +private _detectableClasses = []; +{ + if ((getNumber (_x >> QGVAR(detectable))) == 1) then { + _detectableClasses pushBackUnique configName _x; + }; +} forEach (configProperties [configFile >> "CfgVehicles", "isClass _x", true]); +{ + if ((getNumber (_x >> QGVAR(detectable))) == 1) then { + _detectableClasses pushBackUnique configName _x; + }; +} forEach (configProperties [configFile >> "CfgAmmo", "isClass _x", true]); + +TRACE_1("compiled",count _detectableClasses); +uiNamespace setVariable [QGVAR(detectableClasses), compileFinal str _detectableClasses]; diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index 7c2fb90d22..d2d5c1ecf0 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -93,6 +93,7 @@ class CfgAmmo { // Attack profile type selection defaultAttackProfile = "JAV_TOP"; attackProfiles[] = { "JAV_TOP", "JAV_DIR" }; + useModeForAttackProfile = 1; }; }; class ACE_Javelin_FGM148_static: ACE_Javelin_FGM148 { diff --git a/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf index 45e2c4f900..adfd1b5e01 100644 --- a/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf +++ b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf @@ -23,18 +23,19 @@ if (!([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) private _currentShooter = objNull; private _currentMagazine = ""; +private _turretPath = []; if (isNull (ACE_controlledUAV param [0, objNull])) then { if (((vehicle ACE_player) == ACE_player) || {ACE_player call CBA_fnc_canUseWeapon}) then { _currentShooter = ACE_player; _currentMagazine = currentMagazine ACE_player; } else { _currentShooter = vehicle ACE_player; - private _turretPath = if (ACE_player == (driver _currentShooter)) then {[-1]} else {ACE_player call CBA_fnc_turretPath}; + _turretPath = if (ACE_player == (driver _currentShooter)) then {[-1]} else {ACE_player call CBA_fnc_turretPath}; _currentMagazine = _currentShooter currentMagazineTurret _turretPath; }; } else { _currentShooter = ACE_controlledUAV select 0; - private _turretPath = ACE_controlledUAV select 2; + _turretPath = ACE_controlledUAV select 2; _currentMagazine = _currentShooter currentMagazineTurret _turretPath; }; @@ -47,6 +48,11 @@ TRACE_3("",_currentShooter,_currentMagazine,_ammo); // Bail if guidance is disabled for this ammo if ((getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "enabled")) != 1) exitWith {TRACE_1("not enabled",_ammo)}; +private _useModeForAttackProfile = (getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "useModeForAttackProfile")) == 1; +private _weaponStateToken = if (_currentShooter isEqualTo ACE_player) then { _currentShooter } else { [_currentShooter, _turretPath] }; +(weaponState _weaponStateToken) params ["_weapon", "", "_mode"]; +TRACE_4("",_useModeForAttackProfile,_weaponStateToken,_weapon,_mode); + // Verify ammo has explicity added guidance config (ignore inheritances) private _configs = configProperties [(configFile >> "CfgAmmo" >> _ammo), QUOTE(configName _x == QUOTE(QUOTE(ADDON))), false]; if ((count _configs) < 1) exitWith {TRACE_2("not explicity enabled",_ammo,_configs)}; @@ -54,7 +60,11 @@ if ((count _configs) < 1) exitWith {TRACE_2("not explicity enabled",_ammo,_confi private _attackProfiles = getArray (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "attackProfiles"); if ((count _attackProfiles) <= 1) exitWith {TRACE_1("no choices for attack profile",_attackProfiles)}; -private _currentFireMode = _currentShooter getVariable [QGVAR(attackProfile), "#undefined"]; +private _currentFireMode = if (_useModeForAttackProfile) then { + getText (configFile >> "CfgWeapons" >> _weapon >> _mode >> QGVAR(attackProfile)) +} else { + _currentShooter getVariable [QGVAR(attackProfile), "#undefined"] +}; // Just like onFired, this is case sensitive! private _index = _attackProfiles find _currentFireMode; @@ -65,7 +75,21 @@ _index = (_index + 1) % (count _attackProfiles); private _nextFireMode = _attackProfiles select _index; TRACE_4("",_currentFireMode,_nextFireMode,_index,_attackProfiles); -_currentShooter setVariable [QGVAR(attackProfile), _nextFireMode, false]; + +private _currentFireMode = if (_useModeForAttackProfile) then { + TRACE_2("setting fire mode",_weaponStateToken,_nextFireMode); + for "_weaponIndex" from 0 to 299 do { + ACE_player action ["SwitchWeapon", _currentShooter, ACE_player, _weaponIndex]; + (weaponState _weaponStateToken) params ["_xWeapon", "", "_xMode"]; + if ((_xWeapon == _weapon) && {(getText (configFile >> "CfgWeapons" >> _weapon >> _xMode >> QGVAR(attackProfile))) == _nextFireMode}) exitWith { + TRACE_2("Restoring",_weaponIndex,weaponState _currentShooter); + }; + if ((weaponState _weaponStateToken) isEqualTo ["","","","",0]) exitWith {ERROR_2("weaponState not found",_weapon,_nextFireMode);}; + }; +} else { + TRACE_2("setVariable attackProfile",_currentShooter,_nextFireMode); + _currentShooter setVariable [QGVAR(attackProfile), _nextFireMode, false]; +}; playSound "ACE_Sound_Click"; diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index eb4d2051cf..0e690c79f4 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -17,7 +17,7 @@ * Public: No */ -params ["_shooter","","","","_ammo","","_projectile"]; +params ["_shooter","_weapon","","_mode","_ammo","","_projectile"]; // Bail on not missile if (!(_ammo isKindOf "MissileBase")) exitWith {}; @@ -44,6 +44,9 @@ private _target = _shooter getVariable [QGVAR(target), nil]; private _targetPos = _shooter getVariable [QGVAR(targetPosition), nil]; private _seekerType = _shooter getVariable [QGVAR(seekerType), nil]; private _attackProfile = _shooter getVariable [QGVAR(attackProfile), nil]; +if ((getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "useModeForAttackProfile")) == 1) then { + _attackProfile = getText (configFile >> "CfgWeapons" >> _weapon >> _mode >> QGVAR(attackProfile)) +}; private _lockMode = _shooter getVariable [QGVAR(lockMode), nil]; private _laserCode = _shooter getVariable [QEGVAR(laser,code), ACE_DEFAULT_LASER_CODE]; diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index cb3cf6ac03..1758dea3e3 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -72,7 +72,7 @@ Laserowo naprowadzana rakieta Hydra-70 DAGR Hydra-70 DAGR lasergelenkte Rakete Hydra-70 DAGR laserem naváděná střela - Hydra-70 DAGR missile guida laser + Hydra-70 DAGR Missile a Guida Laser Míssil guiado a laser Hydra-70 DAGR Hydra-70 DAGR lézer-irányított rakéta Управляемая ракета лазерного наведения Hydra-70 DAGR @@ -120,7 +120,7 @@ Laserowo naprowadzana rakieta Hellfire II AGM-114K Hellfire II AGM-114K Lasergelenkte Rakete Hellfire II AGM-114K laserem naváděná střela - Missile guida laser Hellfire II AGM-114K + Missile a Guida Laser Hellfire II AGM-114K Míssil guiado a laser Hellfire II AGM-114K Hellfire II AGM-114K lézer-irányított rakéta Управляемая ракета лазерного наведения Hellfire II AGM-114K diff --git a/addons/missionmodules/stringtable.xml b/addons/missionmodules/stringtable.xml index 90142f9795..cb28cb3d7e 100644 --- a/addons/missionmodules/stringtable.xml +++ b/addons/missionmodules/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/mk6mortar/cfgMagazines.hpp b/addons/mk6mortar/CfgMagazines.hpp similarity index 93% rename from addons/mk6mortar/cfgMagazines.hpp rename to addons/mk6mortar/CfgMagazines.hpp index a726bc5a9f..0d5c1d5703 100644 --- a/addons/mk6mortar/cfgMagazines.hpp +++ b/addons/mk6mortar/CfgMagazines.hpp @@ -4,6 +4,7 @@ class cfgMagazines { count = 1; scope = 2; scopeCurator = 2; + EGVAR(arsenal,hide) = -1; author = ECSTRING(common,ACETeam); displayName = CSTRING(magazine_HE_displayName); displayNameShort = ""; @@ -17,6 +18,7 @@ class cfgMagazines { count = 1; scope = 2; scopeCurator = 2; + EGVAR(arsenal,hide) = -1; author = ECSTRING(common,ACETeam); displayName = CSTRING(magazine_Smoke_displayName); displayNameShort = ""; @@ -30,6 +32,7 @@ class cfgMagazines { count = 1; scope = 2; scopeCurator = 2; + EGVAR(arsenal,hide) = -1; author = ECSTRING(common,ACETeam); displayName = CSTRING(magazine_Illum_displayName); displayNameShort = ""; @@ -43,6 +46,7 @@ class cfgMagazines { count = 1; scope = 2; scopeCurator = 2; + EGVAR(arsenal,hide) = -1; author = ECSTRING(common,ACETeam); displayName = CSTRING(magazine_HE_Guided_displayName); displayNameShort = ""; @@ -56,6 +60,7 @@ class cfgMagazines { count = 1; scope = 2; scopeCurator = 2; + EGVAR(arsenal,hide) = -1; author = ECSTRING(common,ACETeam); displayName = CSTRING(magazine_HE_LaserGuided_displayName); displayNameShort = ""; diff --git a/addons/mk6mortar/RscInGameUI.hpp b/addons/mk6mortar/RscInGameUI.hpp index 7d32512827..3c2a1da534 100644 --- a/addons/mk6mortar/RscInGameUI.hpp +++ b/addons/mk6mortar/RscInGameUI.hpp @@ -9,7 +9,7 @@ class RscInGameUI { idc = 80085; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0, 0, 0, 0.1}; - x = "(profilenamespace getVariable ['IGUI_GRID_WEAPON_X', ((safezoneX + safezoneW) - (12.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.5 * (((safezoneW / safezoneH) min 1.2) / 40))])"; + x = "3.8 * (((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable [""IGUI_GRID_WEAPON_X"",((safezoneX + safezoneW) - (10 * (((safezoneW / safezoneH) min 1.2) / 40)) - 4.3 * (((safezoneW / safezoneH) min 1.2) / 40))])"; y = "2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getVariable ['IGUI_GRID_WEAPON_Y', (safezoneY + 0.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])"; w = "10 * (((safezoneW / safezoneH) min 1.2) / 40)"; h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index b6dbbc2db5..a8f7740527 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -72,6 +72,8 @@ MK6迫擊炮 MK6迫击炮 Mk6 迫撃砲 + Mortier Mk6 + Moździerz Mk6 Mk6 Settings @@ -282,7 +284,7 @@ Připavuji náboj Preparar munição Подготовка снаряда - 事前に装填 + 砲弾を事前装填 탄약 준비중 准备弹头中 準備彈頭中 @@ -312,7 +314,7 @@ Nabít Dýmovnici Carregar Fumaça Зарядить дымовой - 煙幕弾を装填 + 発煙弾を装填 연막탄 장전 装载烟雾弹 裝載煙霧彈 @@ -387,7 +389,7 @@ 82mm Kouřový náboj Munição 82mm Fumaça Дымовой снаряд 82мм - 82mm 煙幕弾 + 82mm 発煙弾 82mm 연막탄 82mm烟雾弹 82mm煙霧彈 @@ -477,7 +479,7 @@ [ACE] Bedna s municí (82mm Dýmovnice) [ACE] Caixa de Munição 82mm Fumaça [ACE] Ящик дымовых снарядов 82мм - [ACE] 82mm 煙幕弾入り弾薬箱 + [ACE] 82mm 発煙弾入り弾薬箱 [ACE] 82mm 연막탄 상자 [ACE] 82mm烟雾弹药箱 [ACE] 82mm煙霧彈藥箱 @@ -507,7 +509,7 @@ [ACE] Bedna se standardní 82mm municí [ACE] Caixa de Munição 82mm Padrão [ACE] Ящик снарядов 82мм (стандартный) - [ACE] 82mm 梱包箱 + [ACE] 82mm 保管箱 [ACE] 82mm 기본 장비 상자 [ACE] 82mm预设弹药箱 [ACE] 82mm預設彈藥箱 diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index 1e8caf3a5f..45a3bf65c3 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/nametags/ACE_Settings.hpp b/addons/nametags/ACE_Settings.hpp index 702cba07cd..5b5d7b79cc 100644 --- a/addons/nametags/ACE_Settings.hpp +++ b/addons/nametags/ACE_Settings.hpp @@ -1,10 +1,6 @@ class ACE_Settings { class GVAR(defaultNametagColor) { - value[] = {0.77, 0.51, 0.08, 1}; - typeName = "COLOR"; - isClientSettable = 1; - displayName = CSTRING(DefaultNametagColor); - category = CSTRING(Module_DisplayName); + movedToSQF = 1; }; class GVAR(showPlayerNames) { value = 1; diff --git a/addons/nametags/XEH_preInit.sqf b/addons/nametags/XEH_preInit.sqf index b47cf6628d..9361d05015 100644 --- a/addons/nametags/XEH_preInit.sqf +++ b/addons/nametags/XEH_preInit.sqf @@ -6,4 +6,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/nametags/functions/fnc_drawNameTagIcon.sqf b/addons/nametags/functions/fnc_drawNameTagIcon.sqf index 093496cfb8..61a8a1b930 100644 --- a/addons/nametags/functions/fnc_drawNameTagIcon.sqf +++ b/addons/nametags/functions/fnc_drawNameTagIcon.sqf @@ -57,10 +57,18 @@ _fnc_parameters = { private _color = [1, 1, 1, _alpha]; if ((group _target) != (group _player)) then { _color = +GVAR(defaultNametagColor); //Make a copy, then multiply both alpha values (allows client to decrease alpha in settings) - _color set [3, (_color select 3) * _alpha]; } else { - _color = [[1, 1, 1, _alpha], [1, 0, 0, _alpha], [0, 1, 0, _alpha], [0, 0, 1, _alpha], [1, 1, 0, _alpha]] select ((["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find ([assignedTeam _target] param [0, "MAIN"])) max 0); + _color = +([ + GVAR(nametagColorMain), + GVAR(nametagColorRed), + GVAR(nametagColorGreen), + GVAR(nametagColorBlue), + GVAR(nametagColorYellow) + ] select ( + (["MAIN", "RED", "GREEN", "BLUE", "YELLOW"] find ([assignedTeam _target] param [0, "MAIN"])) max 0 + )); }; + _color set [3, (_color select 3) * _alpha]; private _scale = [0.333, 0.5, 0.666, 0.83333, 1] select GVAR(tagSize); diff --git a/addons/nametags/functions/fnc_initIsSpeaking.sqf b/addons/nametags/functions/fnc_initIsSpeaking.sqf index 62a96bf5d9..b400e2d6fa 100644 --- a/addons/nametags/functions/fnc_initIsSpeaking.sqf +++ b/addons/nametags/functions/fnc_initIsSpeaking.sqf @@ -44,7 +44,7 @@ if (isClass (configFile >> "CfgPatches" >> "acre_api")) then { }; } else { if (isClass (configFile >> "CfgPatches" >> "task_force_radio")) then { - INFO("TFR Detected."); + INFO("TFAR Detected."); DFUNC(isSpeaking) = { params ["_unit"]; (_unit getVariable ["tf_isSpeaking", false]) && {!(_unit getVariable ["ACE_isUnconscious", false])} diff --git a/addons/nametags/initSettings.sqf b/addons/nametags/initSettings.sqf new file mode 100644 index 0000000000..b2cf482ce1 --- /dev/null +++ b/addons/nametags/initSettings.sqf @@ -0,0 +1,56 @@ +// CBA Settings [ADDON: ace_nametags]: + +[ + QGVAR(defaultNametagColor), "COLOR", + [LSTRING(DefaultNametagColor)], + [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize "str_a3_rscdisplaygameoptions_buttongui"], + [0.77, 0.51, 0.08, 1], + false, // isGlobal + {[QGVAR(defaultNametagColor), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_settings_fnc_init; + +[ + QGVAR(nametagColorMain), "COLOR", + ["str_team_main"], + [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize "str_a3_rscdisplaygameoptions_buttongui"], + [1.00, 1.00, 1.00, 1], + false, // isGlobal + {[QGVAR(nametagColorMain), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_settings_fnc_init; + +[ + QGVAR(nametagColorRed), "COLOR", + ["str_team_red"], + [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize "str_a3_rscdisplaygameoptions_buttongui"], + [1.00, 0.67, 0.67, 1], + false, // isGlobal + {[QGVAR(nametagColorRed), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_settings_fnc_init; + +[ + QGVAR(nametagColorGreen), "COLOR", + ["str_team_green"], + [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize "str_a3_rscdisplaygameoptions_buttongui"], + [0.67, 1.00, 0.67, 1], + false, // isGlobal + {[QGVAR(nametagColorGreen), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_settings_fnc_init; + +[ + QGVAR(nametagColorBlue), "COLOR", + ["str_team_blue"], + [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize "str_a3_rscdisplaygameoptions_buttongui"], + [0.67, 0.67, 1.00, 1], + false, // isGlobal + {[QGVAR(nametagColorBlue), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_settings_fnc_init; + +[ + QGVAR(nametagColorYellow), + "COLOR", + ["str_team_yellow"], + [format ["ACE %1", localize LSTRING(Module_DisplayName)], localize "str_a3_rscdisplaygameoptions_buttongui"], + [1.00, 1.00, 0.67, 1], + false, // isGlobal + {[QGVAR(nametagColorYellow), _this] call EFUNC(common,cbaSettings_settingChanged)} +] call CBA_settings_fnc_init; diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 5cc0d8872d..dd75dafe80 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -545,6 +545,7 @@ 玩家名字标签透明度 玩家名稱透明度 Trasparenza Etichette Nome + Przezroczystość etykiet gracza diff --git a/addons/nightvision/CfgWeapons.hpp b/addons/nightvision/CfgWeapons.hpp index 5d87b0170c..a81835996f 100644 --- a/addons/nightvision/CfgWeapons.hpp +++ b/addons/nightvision/CfgWeapons.hpp @@ -12,7 +12,10 @@ class CfgWeapons { GVAR(bluRadius) = 0.26; }; class NVGogglesB_grn_F: NVGoggles { // APEX NVG/Thermal - modelOptics = "\A3\weapons_f\reticle\optics_night"; // use vanilla modelOptics so it will show in IR mode + modelOptics = "\A3\weapons_f_exp\reticle\ENVG.p3d"; // use vanilla modelOptics so it will show in IR mode + }; + class NVGogglesB_gry_F: NVGoggles { + modelOptics = "\A3\weapons_f_exp\reticle\ENVG.p3d"; }; class NVGoggles_OPFOR: NVGoggles { modelOptics = ""; diff --git a/addons/nightvision/XEH_preInit.sqf b/addons/nightvision/XEH_preInit.sqf index d021ef1f57..9361d05015 100644 --- a/addons/nightvision/XEH_preInit.sqf +++ b/addons/nightvision/XEH_preInit.sqf @@ -6,6 +6,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; -#include "initSettings.sqf"; +#include "initSettings.sqf" ADDON = true; diff --git a/addons/nightvision/initSettings.sqf b/addons/nightvision/initSettings.sqf index 884c53055a..5b6492a2cb 100644 --- a/addons/nightvision/initSettings.sqf +++ b/addons/nightvision/initSettings.sqf @@ -6,7 +6,8 @@ localize LSTRING(Category), [0,2,1,1], // [min, max, default value, trailing decimals (-1 for whole numbers only)] true, // isGlobal - {[QGVAR(effectScaling), _this] call EFUNC(common,cbaSettings_settingChanged)} + {[QGVAR(effectScaling), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ QGVAR(fogScaling), "SLIDER", @@ -14,7 +15,8 @@ localize LSTRING(Category), [0,2,1,1], // [min, max, default value, trailing decimals (-1 for whole numbers only)] true, // isGlobal - {[QGVAR(fogScaling), _this] call EFUNC(common,cbaSettings_settingChanged)} + {[QGVAR(fogScaling), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index b91eff3b09..3c5e9115f0 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,8 @@ ACE-Nachtsicht ACE夜視鏡 ACE夜视镜 + ACE Vision Nocturne + ACE Noktowizja NV Goggles (Gen1) @@ -252,6 +254,8 @@ Nebel in Nachtsicht 夜視鏡霧氣程度 夜视镜雾气程度 + Épaisseur du brouillard (JVN) + Skala Mgły NVG Fog is used to limit visibility. @@ -260,6 +264,8 @@ Nebel wird genutzt, um die Sichtbarkeit einzuschränken. 透過霧氣來縮減夜視鏡的可視距離 透过雾气来缩减夜视镜的可视距离。 + Le brouillard est utilisé pour limiter la visibilité + Mgła jest wykorzystywana do ograniczenia widoczności. NVG Effect Scale @@ -268,6 +274,8 @@ Nachtsichteffekte 夜視鏡效果程度 夜视镜效果程度 + Intensité des effets + Skala Efektów NVG Blur and brightness effects [Setting to 0 will disable ALL nightvision effects] @@ -276,6 +284,8 @@ Unschärfe und Helligkeitseffekte [Dies auf 0 zu setzen deaktiviert SÄMTLICHE Nachtsichteffekte] 調整模糊與亮度的效果。[設值為0會關閉所有夜視鏡的特殊效果] 调整模糊与亮度的效果。[设值为0会关闭所有夜视镜的特殊效果] + Effets de flou et de luminosité [Règler cette option sur 0 désactivera TOUS les effets de vision nocturne] + Efekty rozmazania i jasności [Ustawienie na 0 wyłączy WSZYSTKIE efekty noktowizji] Aim Down Sights Blur @@ -283,6 +293,9 @@ Visierunschärfe 瞄準具模糊程度 瞄准具模糊程度 + Flou de visée + Blur durante la mira + Rozmazanie podczas celowania z narządów celowniczych NVG Noise Scale @@ -290,6 +303,9 @@ 夜視鏡雜訊程度 夜视镜杂讯程度 暗視装置のノイズ度 + Intensité du bruit (JVN) + Fattore di Disturbo del NVG + Skala Szumu NVG Image noise intensity when wearing NVGs @@ -297,18 +313,27 @@ 調整配戴夜視鏡時畫面雜訊的多寡。 调整配戴夜视镜时画面杂讯的多寡。 暗視装置を使用時に起きる画像ノイズの強度です + Intensité du bruit de l'image lorsque vous portez des JVN + Intensità del disturbo dell'immagine quando i NVG sono equipaggiati + Intensywność efektu szumu podczas noszenia gogli noktowizyjnych Shutter Effects シャッター効果 快门效果 快門效果 + Effets d'obturateur + Effetti lampeggianti + Efekt Shutter Rolling shutter effect from muzzle flashes 発射炎が作るローリング シャッター効果です 枪械开火时产生瞬间快门效果 槍開火時瞬間產生快門效果 + Effets d'obturateur à rideau dû aux flashs du canon + Effetto lampeggiante dato dal lampo dello sparo + Efekt rolling shutter z błysków wylotowych diff --git a/addons/nlaw/CfgAmmo.hpp b/addons/nlaw/CfgAmmo.hpp index f51816d692..b579ebeb06 100644 --- a/addons/nlaw/CfgAmmo.hpp +++ b/addons/nlaw/CfgAmmo.hpp @@ -29,6 +29,7 @@ class CfgAmmo { // Attack profile type selection defaultAttackProfile = QGVAR(directAttack); attackProfiles[] = {QGVAR(directAttack), QGVAR(overflyTopAttack)}; + useModeForAttackProfile = 1; showHintOnCycle = 1; // Run once at fired event diff --git a/addons/nlaw/CfgWeapons.hpp b/addons/nlaw/CfgWeapons.hpp index 35f5b17122..cf2c5862e9 100644 --- a/addons/nlaw/CfgWeapons.hpp +++ b/addons/nlaw/CfgWeapons.hpp @@ -1,3 +1,5 @@ +class Mode_SemiAuto; + class CfgWeapons { class Launcher_Base_F; class launch_NLAW_F: Launcher_Base_F { @@ -9,5 +11,11 @@ class CfgWeapons { distanceZoomMax = 0; }; }; + class Single: Mode_SemiAuto { + EGVAR(missileGuidance,attackProfile) = QGVAR(directAttack); + }; + class Overfly: Single { + EGVAR(missileGuidance,attackProfile) = QGVAR(overflyTopAttack); + }; }; }; diff --git a/addons/nlaw/stringtable.xml b/addons/nlaw/stringtable.xml index 8292cba0b9..c986467887 100644 --- a/addons/nlaw/stringtable.xml +++ b/addons/nlaw/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/noradio/XEH_preInit.sqf b/addons/noradio/XEH_preInit.sqf index 5be74ddf1b..61492aa36d 100644 --- a/addons/noradio/XEH_preInit.sqf +++ b/addons/noradio/XEH_preInit.sqf @@ -35,4 +35,5 @@ if (hasInterface) then { } else { [ACE_player, "isPlayer"] call EFUNC(common,unmuteUnit); }; -}] call CBA_settings_fnc_init; +}, true // Needs mission restart +] call CBA_settings_fnc_init; diff --git a/addons/noradio/stringtable.xml b/addons/noradio/stringtable.xml index 3bb0fbc0da..d8aa43d4e2 100644 --- a/addons/noradio/stringtable.xml +++ b/addons/noradio/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ 玩家靜音 玩家静音 プレイヤーをミュート + Wycisz Gracza Mutes the controlled player avatar. @@ -16,6 +17,7 @@ 靜音玩家所控制的角色 静音玩家所控制的角色。 プレイヤーに操作されているこのキャラをミュートします。 + Wycisza awatar kontrolowany przez gracza diff --git a/addons/optics/XEH_postInit.sqf b/addons/optics/XEH_postInit.sqf index 2c02e72638..abb97e5b5d 100644 --- a/addons/optics/XEH_postInit.sqf +++ b/addons/optics/XEH_postInit.sqf @@ -13,11 +13,11 @@ GVAR(camera) = objNull; }; }] call CBA_fnc_addEventHandler; -// camera has to be re-created every time another camera is created. Otherwise r2t is either black or transparent. @todo Add popular custom cameras to the event in ACE_common. -["ace_activeCameraChanged", { - params ["", "_isfeatureCameraActive"]; - TRACE_1("ace_activeCameraChanged",_isfeatureCameraActive); - if (!_isfeatureCameraActive) then { +// camera has to be re-created every time another camera is created. Otherwise r2t is either black or transparent.. +["featureCamera", { + params ["_player", "_featureCamera"]; + TRACE_1("featureCamera",_featureCamera); + if (_featureCamera isEqualTo "") then { // Destroy the camera, and it will be re-created in the onDrawScope2d helper if (!isNull GVAR(camera)) then { GVAR(camera) cameraEffect ["TERMINATE", "BACK"]; @@ -25,7 +25,7 @@ GVAR(camera) = objNull; TRACE_1("destroying pip camera for restart",GVAR(camera)); }; }; -}] call CBA_fnc_addEventHandler; +}] call CBA_fnc_addPlayerEventHandler; // Register fire event handler ["ace_firedPlayer", DFUNC(handleFired)] call CBA_fnc_addEventHandler; diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index bd0c93016a..4ef6afd120 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -28,7 +28,7 @@ Debug információt küld az RPT-be és a vágólapra. Отправляет отладочную информацию в RPT и буфер обмена. Invia informazioni di debug all'RPT e al Blocco Note - デバッグ情報を RPT とクリップボードに送った。 + デバッグ情報を RPT とクリップボードに送ります。 디버그 정보를 보고하기 및 클립보드에 복사하기 위해 보냅니다. 复制除错讯息至剪贴簿与RPT报告档中。 複製除錯訊息至剪貼簿與RPT報告檔中 @@ -60,7 +60,7 @@ Resetovat aktuální animaci. Restablece tu estado de animación. Resetta il tuo stato animazione - 現在のアニメーションの状況を初期化します。 + 現在のアニメーション状態を初期化します。 자신의 동작 상태 초기화 当ACE发生动作BUG时,点此修复。 當ACE發生動作BUG時,點此修復 diff --git a/addons/overheating/CfgEventHandlers.hpp b/addons/overheating/CfgEventHandlers.hpp index 5da5fd0dc2..becf395052 100644 --- a/addons/overheating/CfgEventHandlers.hpp +++ b/addons/overheating/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index e3995047a0..9ea7e36a06 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ 過熱 过热 過熱 + Przegrzewanie Display text on jam diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index fc29bb24ba..6dca54adcb 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -28,12 +28,16 @@ 後方噴射の範囲 向后喷射的范围 後方尾焰的範圍 + Raggio della fiammata [lanciarazzi] + Zasięg backblast'u Backblast angle 後方噴射の角度 向后喷射的角度 後方尾焰的角度 + Angolo della fiammata [lanciarazzi] + Kąt backblast'u diff --git a/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf index 280765d8a2..f1589e1e04 100644 --- a/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf +++ b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf @@ -37,4 +37,3 @@ switch (_type) do { } forEach [380, 382]; }; }; -nil // switch might return true if no case was found. Just to make sure the return value matches diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf index d4aa11f883..e31d2863eb 100644 --- a/addons/parachute/functions/fnc_showAltimeter.sqf +++ b/addons/parachute/functions/fnc_showAltimeter.sqf @@ -22,28 +22,47 @@ if (isNull (uiNamespace getVariable ["ACE_Altimeter", displayNull])) exitWith {} GVAR(AltimeterActive) = true; -[{ - if (!GVAR(AltimeterActive)) exitWith {[_this select 1] call CBA_fnc_removePerFrameEventHandler}; - disableSerialization; - (_this select 0) params ["_display", "_unit", "_oldHeight", "_prevTime"]; - if !("ACE_Altimeter" in assignedItems _unit) exitWith {[_this select 1] call CBA_fnc_removePerFrameEventHandler; call FUNC(hideAltimeter)}; +private _display = uiNamespace getVariable ["ACE_Altimeter", displayNull]; +private _HeightText = _display displayCtrl 1100; +private _DecendRate = _display displayCtrl 1000; +private _TimeText = _display displayCtrl 1001; - private _HeightText = _display displayCtrl 1100; - private _DecendRate = _display displayCtrl 1000; - private _TimeText = _display displayCtrl 1001; +[{ + _this params ["_args", "_pfhID"]; + _args params ["_unit", "_oldHeight", "_prevTime", "_HeightText", "_DecendRate", "_TimeText"]; + + if !(GVAR(AltimeterActive)) exitWith { + _pfhID call CBA_fnc_removePerFrameEventHandler; + }; + + if !("ACE_Altimeter" in assignedItems _unit) exitWith { + call FUNC(hideAltimeter); + _pfhID call CBA_fnc_removePerFrameEventHandler; + }; private _hour = floor daytime; private _minute = floor ((daytime - _hour) * 60); - - private _height = ((getPosASL _unit) select 2) + EGVAR(common,mapAltitude); private _curTime = CBA_missionTime; private _timeDiff = _curTime - _prevTime; - private _descentRate = if (_timeDiff > 0) then {floor((_oldHeight - _height) / _timeDiff)} else {0}; + + private _height = ((getPosASL _unit) select 2) + EGVAR(common,mapAltitude); + private _descentRate = if (_timeDiff > 0) then { + floor((_oldHeight - _height) / _timeDiff) + } else { + 0 + }; _TimeText ctrlSetText (format ["%1:%2", [_hour, 2] call CBA_fnc_formatNumber, [_minute, 2] call CBA_fnc_formatNumber]); _HeightText ctrlSetText (format ["%1", floor _height]); _DecendRate ctrlSetText (format ["%1", _descentRate max 0]); - (_this select 0) set [2, _height]; - (_this select 0) set [3, _curTime]; -}, 0.2, [uiNamespace getVariable ["ACE_Altimeter", displayNull], _unit, floor ((getPosASL _unit) select 2), CBA_missionTime]] call CBA_fnc_addPerFrameHandler; + (_this select 0) set [1, _height]; + (_this select 0) set [2, _curTime]; +}, 0.2, [ + _unit, + floor ((getPosASL _unit) select 2), + CBA_missionTime, + _HeightText, + _DecendRate, + _TimeText +]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index f1321d54bb..facea0a4ed 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -104,6 +104,7 @@ Nascondi Altimetro in Caduta Libera 隱藏自由落體高度計 隐藏自由落体高度计 + Schowaj wysokościomierz podczas swobodnego opadania Hides the altitude and speed shown while free falling or parachuting. @@ -112,6 +113,7 @@ Nasconde l'altitudine e la velocità mostrate durante la caduta libera o paracadutandosi. 在自由落體時或開傘下隱藏自由落體高度計 在自由落体时或开伞下隐藏自由落体高度计。 + Chowa wysokość i prędkość pokazywaną podczas swobodnego opadania lub spadania ze spadochronem. diff --git a/addons/pylons/XEH_postInit.sqf b/addons/pylons/XEH_postInit.sqf index 6a8f781469..3e0b9bb4f0 100644 --- a/addons/pylons/XEH_postInit.sqf +++ b/addons/pylons/XEH_postInit.sqf @@ -1,30 +1,38 @@ #include "script_component.hpp" -private _filter = "isClass (_x >> 'Components' >> 'TransportPylonsComponent') && {(getNumber (_x >> 'scope')) > 0}"; -GVAR(aircraftWithPylons) = (_filter configClasses (configFile >> "CfgVehicles")) apply {configName _x}; -{ - [_x, "init", { - params ["_aircraft"]; +GVAR(aircraftWithPylons) = []; - private _loadoutAction = [ - QGVAR(loadoutAction), - localize LSTRING(ConfigurePylons), - "", - {[_target] call FUNC(showDialog)}, - { - if (!GVAR(enabledFromAmmoTrucks)) exitWith {false}; +GVAR(loadoutAction) = [ // create action + QGVAR(loadoutAction), + localize LSTRING(ConfigurePylons), + "", + {[_target] call FUNC(showDialog)}, + { + if (!GVAR(enabledFromAmmoTrucks)) exitWith {false}; - private _vehicles = nearestObjects [_target, ["Air", "LandVehicle", "Slingload_base_F", "ReammoBox_F"], GVAR(searchDistance) + 10]; - private _filter = ["transportAmmo", QEGVAR(rearm,defaultSupply)] select (["ace_rearm"] call EFUNC(common,isModLoaded)); - private _rearmVehicles = {(getNumber (configFile >> "CfgVehicles" >> typeOf _x >> _filter)) > 0} count _vehicles; + private _vehicles = nearestObjects [_target, ["Air", "LandVehicle", "Slingload_base_F", "ReammoBox_F"], GVAR(searchDistance) + 10]; + private _isRearmVehicle = if (["ace_rearm"] call EFUNC(common,isModLoaded)) then { + _vehicles findIf {[_x] call EFUNC(rearm,isSource)} != -1; + } else { + private _cfgVehicle = configFile >> "CfgVehicles"; + _vehicles findIf {getNumber (_cfgVehicle >> typeOf _x >> "transportAmmo") > 0} != -1; + }; + + (_isRearmVehicle && {[ace_player, _target] call FUNC(canConfigurePylons)}) + } +] call EFUNC(interact_menu,createAction); - (_rearmVehicles > 0 && {[ace_player, _target] call FUNC(canConfigurePylons)}) - } - ] call EFUNC(interact_menu,createAction); +["Air", "init", { // on air vehicle init, add action to class if has pylons + params ["_vehicle"]; + private _typeOf = typeOf _vehicle; + + if (_typeOf in GVAR(aircraftWithPylons)) exitWith {}; + if (!isClass (configFile >> "CfgVehicles" >> _typeOf >> 'Components' >> 'TransportPylonsComponent')) exitWith {}; + + GVAR(aircraftWithPylons) pushBack _typeOf; + [_typeOf, 0, ["ACE_MainActions"], GVAR(loadoutAction)] call EFUNC(interact_menu,addActionToClass); +}, true, ["ParachuteBase"], true] call CBA_fnc_addClassEventHandler; - [_aircraft, 0, ["ACE_MainActions"], _loadoutAction] call EFUNC(interact_menu,addActionToObject); - }, false, [], true] call CBA_fnc_addClassEventHandler; -} forEach GVAR(aircraftWithPylons); [QGVAR(setPylonLoadOutEvent), { params ["_aircraft", "_pylonIndex", "_pylon", "_turret", "_weaponToRemove"]; diff --git a/addons/pylons/config.cpp b/addons/pylons/config.cpp index 011167fd22..fc7159e08b 100644 --- a/addons/pylons/config.cpp +++ b/addons/pylons/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"ace_interact_menu", "ace_zeus"}; + requiredAddons[] = {"ace_interact_menu"}; author = ECSTRING(common,ACETeam); authors[] = {"654wak654"}; url = ECSTRING(main,URL); diff --git a/addons/pylons/functions/fnc_showDialog.sqf b/addons/pylons/functions/fnc_showDialog.sqf index 2ce438e0ab..119489f4d8 100644 --- a/addons/pylons/functions/fnc_showDialog.sqf +++ b/addons/pylons/functions/fnc_showDialog.sqf @@ -1,23 +1,25 @@ #include "script_component.hpp" /* -* Author: 654wak654 -* Shows the aircraft loadout dialog for given aircraft. -* -* Arguments: -* 0: Aircraft -* 1: Is curator. Disables time and resource requirements. (default: false) -* -* Return Value: -* None -* -* Example: -* [vehicle ace_player] call ace_pylons_fnc_showDialog -* -* Public: Yes -*/ + * Author: 654wak654 + * Shows the aircraft loadout dialog for given aircraft. + * + * Arguments: + * 0: Aircraft + * 1: Is curator. Disables time and resource requirements. (default: false) + * + * Return Value: + * None + * + * Example: + * [vehicle ace_player] call ace_pylons_fnc_showDialog + * + * Public: Yes + */ params ["_aircraft", ["_isCurator", false]]; +if (_isCurator && {!(["ace_zeus"] call EFUNC(common,isModLoaded))}) exitWith { WARNING("ace_zeus not loaded"); }; + if !(typeOf _aircraft in GVAR(aircraftWithPylons)) exitWith { if (_isCurator) then { [LSTRING(AircraftDoesntHavePylons)] call EFUNC(zeus,showMessage); diff --git a/addons/pylons/stringtable.xml b/addons/pylons/stringtable.xml index 8a15c5ebad..a1949e816c 100644 --- a/addons/pylons/stringtable.xml +++ b/addons/pylons/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,8 @@ 飞机武器配置 항공기 무장 AUSRÜSTUNG DES FLUGGERÄTS + ÉQUIPEMENTS DE L'AÉRONEF + WYPOSAŻENIE POJAZDU POWIETRZNEGO Loadouts for %1 @@ -18,6 +20,8 @@ %1用的武器配置 %1 무장 Ausrüstung für %1 + Équipements pour %1 + Wyposażenia dla %1 Configure Pylons @@ -27,6 +31,8 @@ 设定导弹挂架 파일런 설정 Konfiguriere Außenlaststationen + Configurer les pylônes + Konfiguruj Pylony ACE Pylons @@ -36,6 +42,8 @@ ACE 导弹挂架 ACE 파일런 ACE Außenlaststationen + ACE Pylônes + Pylony ACE <empty> @@ -45,6 +53,8 @@ <空> <비어있음> <leer> + <vide> + <puste> Pylons that are colored red will have to be manually rearmed. @@ -54,6 +64,8 @@ 以红色标记出的导弹挂架必须以手动方式进行弹药整补。 붉은색의 파일런은 수동으로 재무장해야 합니다. Außenlaststationen, die rot markiert sind, müssen manuell aufmunitioniert werden. + Les pylônes colorés en rouge devront être réarmés manuellement. + Pylony, które są w kolorze czerwonym muszą być manualnie dozbrojone. %1 is already configuring this aircraft! @@ -63,6 +75,8 @@ %1已经正在定义此飞机的武器配置! 이미 이 항공기에 장착되어 있음 (%1) %1 konfiguriert dieses Fluggerät bereits! + %1 est déjà en train de configurer cet aéronef ! + %1 już konfiguruje ten pojazd! Replacing pylon %1 out of %2... @@ -72,6 +86,8 @@ 共有%2个发射架,正在整装%1号挂架中... 교체중 (%2 -> %1) Ersetze Außenlaststation %1 von insgesamt %2 + Remplacement du pylône %1 sur %2 ... + Wymiana pylonów %1 z %2... Stopped at pylon %1! @@ -81,6 +97,8 @@ 已停止在%1号挂架! %1 파일런이 멈춤 Gestoppt bei Außenlaststation %1 + Arrêté au pylône %1 ! + Zatrzymano na pylonie %1! Vehicle too far @@ -90,6 +108,8 @@ 载具过远 車両が遠すぎます Fahrzeug zu weit entfernt + Véhicule trop éloigné + Pojazd za daleko Enable Pylons Menu for Zeus @@ -97,6 +117,8 @@ 啟用派龍架選單給宙斯 Abilita Menù Piloni da Zeus Zeus でパイロン メニューを有効化 + Activer le menu des pylônes (Zeus) + Aktywuj Menu Pylonów dla Zeus'a Enables use of the zeus module. @@ -104,6 +126,8 @@ 允啟使用宙斯模塊 Abilita l'uso dal modulo di Zeus Zeus モジュールでパイロン メニューを利用できます。 + Autorise l'utilisation des modules Zeus + Aktywuj wykorzystanie modułu zeus'a. Enable Pylons Menu from Ammo Trucks @@ -111,6 +135,8 @@ 啟用從彈藥卡車使用派龍架選單 Abilita Menù Piloni da mezzi rifornimento munizioni 弾薬トラックからパイロン メニューを有効化 + Activer le menu des pylônes (camion de munitions) + Aktywuj Menu Pylonów dla Ciężarówek z amunicją Enables use of pylons menu from ammo trucks. @@ -118,6 +144,8 @@ 允許從彈藥卡車使用派龍架選單 Abilita l'uso del Menù Piloni da mezzi rifornimento munizioni 弾薬給弾トラックからパイロン メニューを利用できます。 + Autorise l'utilisation du menu des pylônes depuis les camions de munitions. + Aktywuj wykorzystanie menu pylonów z ciężarówek z amunicją. This aircraft doesn't have pylons @@ -125,6 +153,8 @@ 這架飛機沒有派龍架 Questo aereo non ha piloni 航空機にパイロンがありません + Cet aéronef n'a pas de pylônes + Ten pojazd nie posiada pylonów Configure pylons module is disabled for zeus @@ -132,6 +162,8 @@ 宙斯模塊的派龍架設定已被禁用 Il modulo per configurare i piloni da Zeus è disabilitato Zeus のパイロン モジュールを無効化 + La configuration de pylônes est désactivé pour Zeus + Konfiguracja modułu pylonów jest wyłączona dla zeus'a Rearm New Pylons @@ -141,6 +173,8 @@ 重新武装新的派龙架 새파일런 재무장 Neue Außenlaststationen. aufmunitionieren + Réarmer les nouveaux pylônes + Dozbrój Nowe Pylony Automatically rearm new pylons from the nearest rearm vehicle. @@ -150,6 +184,8 @@ 自动从附近的整装载具中为导弹挂架进行弹药整装。 근처의 재무장 차량에서 빈 파일런을 자동으로 재무장 합니다. Neue Außenlaststationen. automatisch vom nächsten Munitionsfahrzeug aufmunitionieren + Réarmer automatiquement tout les nouveau pylônes depuis le véhicule de munitions le plus proche. + Automatycznie dozbrajaj nowe pylony z najbliższego pojazdu dozbrajania. Time Per Pylon @@ -159,6 +195,8 @@ 导弹挂架整装所需时间(个别) 파일런당 시간 Zeit pro Außenlaststation + Durée par pylône + Czas na Pylon The time it takes to replace each pylon (in seconds). @@ -168,6 +206,8 @@ 每个挂架需花多久时间进行整装单位为秒)。 파일런을 재설정 하는데 걸리는 시간 (초) Die benötigte Zeit, um einzelne Außenlaststationen zu ersetzen (in Sekunden). + Le temps nécessaire pour remplacer chaque pylône (en secondes). + Czas, jaki trwa wymiana każdego z pylonów (w sekundach). Search Distance @@ -177,6 +217,8 @@ 搜索距离 검색 반경 Suchdistanz + Distance de recherche + Dystans Szukania The distance an aircraft needs to be from a rearm vehicle. @@ -186,6 +228,8 @@ 设定飞机必须距离整装载具多少公尺才能进行弹药整装。 항공기에서 재보급 가능한 재무장 차량을 찾습니다. Die Distanz, die ein Fahrzeug von einem Munitionsfahrzeug entfernt sein darf. + La distance à laquelle un aéronef doit être d'un véhicule de munitions. + Dystans, w jakim pojazd musi być od pojazdu dozbrajania. Require Engineer @@ -195,6 +239,8 @@ 必须是工兵 정비병 요구 Benötigt Pionier + Requiert ingénieur + Wymaga Mechanika Require an engineer. @@ -204,6 +250,8 @@ 必须是工兵才能进行弹药整装。 정비병이 필요합니다. Benötigt einen Pionier. + Requiert un ingénieur. + Wymaga mechanika. Require Toolkit @@ -213,6 +261,8 @@ 需要工具包 툴킷 요구 Benötigt Werkzeugkasten + Requiert trousse à outils + Wymaga Narzędzi Require a toolkit in inventory. @@ -222,6 +272,8 @@ 需要工具包才能进行弹药整装。 툴킷이 필요합니다. Benötigt einen Werkzeugkasten im Inventar. + Requiert une trousse à outils dans l'inventaire. + Wymaga narzędzi w ekwipunku. diff --git a/addons/quickmount/ACE_Settings.hpp b/addons/quickmount/ACE_Settings.hpp index b4e07be4b4..e494789d92 100644 --- a/addons/quickmount/ACE_Settings.hpp +++ b/addons/quickmount/ACE_Settings.hpp @@ -1,41 +1,14 @@ class ACE_Settings { class GVAR(enabled) { - value = 0; - typeName = "BOOL"; - category = CSTRING(Category); - displayName = ECSTRING(common,Enabled); - description = CSTRING(KeybindDescription); - isClientSettable = 1; - force = 0; + movedToSQF = 1; }; class GVAR(distance) { - value = DEFAULT_DISTANCE; - typeName = "SCALAR"; - category = CSTRING(Category); - displayName = CSTRING(Distance); - description = CSTRING(DistanceDescription); - isClientSettable = 0; - force = 0; - values[] = {"0m", "1m", "2m", "3m", "4m", "5m", "6m", "7m", "8m", "9m", "10m"}; + movedToSQF = 1; }; class GVAR(speed) { - value = DEFAULT_SPEED; - typeName = "SCALAR"; - category = CSTRING(Category); - displayName = CSTRING(Speed); - description = CSTRING(SpeedDescription); - isClientSettable = 0; - force = 0; - values[] = {"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"}; + movedToSQF = 1; }; class GVAR(priority) { - value = DEFAULT_PRIORITY; - typeName = "SCALAR"; - category = CSTRING(Category); - displayName = CSTRING(Priority); - description = CSTRING(PriorityDescription); - isClientSettable = 1; - force = 0; - values[] = {"$str_getin_pos_driver", "$str_getin_pos_gunn", "$str_getin_pos_comm", "$STR_GETIN_POS_PASSENGER"}; + movedToSQF = 1; }; }; diff --git a/addons/quickmount/CfgVehicles.hpp b/addons/quickmount/CfgVehicles.hpp index 702f7cab4e..a0b54df48b 100644 --- a/addons/quickmount/CfgVehicles.hpp +++ b/addons/quickmount/CfgVehicles.hpp @@ -34,4 +34,51 @@ class CfgVehicles { description = CSTRING(KeybindDescription); }; }; + +#define GETIN_ACTIONS \ + class ACE_Actions { \ + class ACE_MainActions { \ + class GVAR(GetIn) { \ + displayName = "$STR_rscMenu.hppRscGroupRootMenu_Items_GetIn1"; \ + condition = QUOTE(call DFUNC(canShowFreeSeats)); \ + statement = QUOTE(call DFUNC(getInNearest)); \ + exceptions[] = {"isNotSwimming"}; \ + insertChildren = QUOTE((_this select 2) param [ARR_2(0, [])]); \ + }; \ + }; \ + }; \ + class ACE_SelfActions { \ + class GVAR(ChangeSeat) { \ + displayName = CSTRING(ChangeSeat); \ + condition = QUOTE(call DFUNC(canShowFreeSeats)); \ + statement = ""; \ + insertChildren = QUOTE((_this select 2) param [ARR_2(0, [])]); \ + }; \ + } + + class LandVehicle; + class Car: LandVehicle { + GETIN_ACTIONS; + }; + class Motorcycle: LandVehicle { + GETIN_ACTIONS; + }; + class StaticWeapon: LandVehicle { + GETIN_ACTIONS; + }; + class Tank: LandVehicle { + GETIN_ACTIONS; + }; + class Air; + class Helicopter: Air { + GETIN_ACTIONS; + }; + class Plane: Air { + GETIN_ACTIONS; + }; + class Ship; + class Ship_F: Ship { + GETIN_ACTIONS; + }; + }; diff --git a/addons/quickmount/XEH_PREP.hpp b/addons/quickmount/XEH_PREP.hpp index eba2f68296..5b0ec5a042 100644 --- a/addons/quickmount/XEH_PREP.hpp +++ b/addons/quickmount/XEH_PREP.hpp @@ -1,2 +1,4 @@ +PREP(addFreeSeatsActions); +PREP(canShowFreeSeats); PREP(getInNearest); PREP(moduleInit); diff --git a/addons/quickmount/XEH_preInit.sqf b/addons/quickmount/XEH_preInit.sqf index b47cf6628d..9361d05015 100644 --- a/addons/quickmount/XEH_preInit.sqf +++ b/addons/quickmount/XEH_preInit.sqf @@ -6,4 +6,6 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/quickmount/functions/fnc_addFreeSeatsActions.sqf b/addons/quickmount/functions/fnc_addFreeSeatsActions.sqf new file mode 100644 index 0000000000..b49525d406 --- /dev/null +++ b/addons/quickmount/functions/fnc_addFreeSeatsActions.sqf @@ -0,0 +1,247 @@ +#include "script_component.hpp" +/* + * Author: Dystopian + * Creates actions for vehicle free seats. + * + * Arguments: + * 0: Vehicle + * 1: Unit + * + * Return Value: + * Child actions + * + * Example: + * [cursorObject, player] call ace_quickmount_fnc_addFreeSeatsActions + * + * Public: No + */ + +#define TAKEN_SEAT_TIMEOUT 0.5 + +#define ICON_DRIVER "A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_driver_ca.paa" +#define ICON_PILOT "A3\ui_f\data\IGUI\Cfg\Actions\getinpilot_ca.paa" +#define ICON_CARGO "A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_cargo_ca.paa" +#define ICON_GUNNER "A3\ui_f\data\IGUI\Cfg\Actions\getingunner_ca.paa" +#define ICON_COMMANDER "A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_commander_ca.paa" +#define ICON_TURRET "A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_gunner_ca.paa" +#define ICON_FFV "A3\ui_f\data\IGUI\Cfg\CrewAimIndicator\gunnerAuto_ca.paa" + +#define TO_COMPARTMENT_STRING(var) if !(var isEqualType "") then {var = format [ARR_2("Compartment%1",var)]} + +// if unit isn't moved to new seat in TAKEN_SEAT_TIMEOUT, we move him back to his seat +#define WAIT_IN_OR_MOVE_BACK \ + [ARR_5( \ + {!isNull objectParent (_this select 0)}, \ + { \ + params [ARR_2("_player","_damageBlocked")]; \ + if (_damageBlocked) then {_player allowDamage true}; \ + LOG_1("moved in in %1 frames",diag_frameno-GVAR(frame)); \ + }, \ + [ARR_4(_player,_damageBlocked,_moveBackCode,_moveBackParams)], \ + TAKEN_SEAT_TIMEOUT, \ + { \ + params [ARR_4("_player","_damageBlocked","_moveBackCode","_moveBackParams")]; \ + [ARR_2(_player,_moveBackParams)] call _moveBackCode; \ + if (_damageBlocked) then {_player allowDamage true}; \ + localize "str_mis_state_failed" call EFUNC(common,displayTextStructured); \ + } \ + )] call CBA_fnc_waitUntilAndExecute; + +#define IS_MOVED_OUT \ +( \ + isNull objectParent _player \ + && { \ + [] isEqualTo _currentTurret \ + || {local _target isEqualTo (_target turretLocal _currentTurret)} \ + } \ +) + +#define MOVE_IN_CODE(command) (_this select 0) command (_this select 1) + +private _fnc_move = { + (_this select 2) params ["_moveInCode", "_moveInParams", "_currentTurret", "_moveBackCode", "_moveBackParams", ["_enabledByAnimationSource", ""]]; + TRACE_7("fnc_move params",_moveInCode,_moveInParams,_currentTurret,_moveBackCode,_moveBackParams,_enabledByAnimationSource,call {GVAR(frame)=diag_frameno}); + + // check bugged FFV + if ( + !("" isEqualTo _enabledByAnimationSource) + && {1 > _target doorPhase _enabledByAnimationSource} + ) exitWith {}; + + // workaround getting damage when moveOut while vehicle is moving + private _damageBlocked = false; + if (isDamageAllowed _player) then { + _player allowDamage false; + _damageBlocked = true; + }; + private _preserveEngineOn = _player == driver _target && {isEngineOn _target}; + moveOut _player; + if (_preserveEngineOn) then {_target engineOn true}; + + // moveIn right after moveOut doesn't work in MP for non-local vehicles, player just stays out + // so we have to wait some time (e.g. until player is out and turret locality become vehicle locality) + // usually it's done in the same frame for local vehicles/turrets and takes 3-7 frames for non-local, so in MP can look a little lagging + if (IS_MOVED_OUT) exitWith { + LOG("moved out in current frame"); + [_player, _moveInParams] call _moveInCode; + WAIT_IN_OR_MOVE_BACK; + }; + [ + {params ["_target", "_player", "_currentTurret"]; IS_MOVED_OUT}, + { + params ["", "_player", "", "_moveInCode", "_moveInParams", "_moveBackCode", "_moveBackParams", "_damageBlocked"]; + LOG_2("moved out in %1 frames",diag_frameno-GVAR(frame),call {GVAR(frame)=diag_frameno; 0}); + [_player, _moveInParams] call _moveInCode; + WAIT_IN_OR_MOVE_BACK; + }, + [_target, _player, _currentTurret, _moveInCode, _moveInParams, _moveBackCode, _moveBackParams, _damageBlocked] + ] call CBA_fnc_waitUntilAndExecute; +}; + +scopeName "main"; + +params ["_vehicle", "_player"]; + +private _vehicleConfig = configFile >> "CfgVehicles" >> typeOf _vehicle; +private _isInVehicle = _player in _vehicle; +private _fullCrew = fullCrew [_vehicle, "", true]; + +private ["_driverCompartments", "_isDriverIsolated", "_cargoCompartments", "_cargoCompartmentsLast", "_compartment", "_currentTurret", "_moveBackCode", "_moveBackParams"]; + +if (_isInVehicle) then { + _driverCompartments = (_vehicleConfig >> "driverCompartments") call BIS_fnc_getCfgData; + // Air class by default has driverCompartments=0 and cargoCompartments[]={0}, so we have to disable them + _isDriverIsolated = _driverCompartments isEqualTo 0 && {_vehicle isKindOf "Air"}; + TO_COMPARTMENT_STRING(_driverCompartments); + + _cargoCompartments = getArray (_vehicleConfig >> "cargoCompartments"); + { + if !(_x isEqualType "") then { + _cargoCompartments set [_forEachIndex, format ["Compartment%1", _x]]; + }; + } forEach _cargoCompartments; + _cargoCompartmentsLast = count _cargoCompartments - 1; + + // find current compartment + ( + _fullCrew select (_fullCrew findIf {_player == _x select 0}) + ) params ["", "_role", "_cargoIndex", "_turretPath"]; + + _currentTurret = _turretPath; + + switch (_role) do { + case "driver": { + if (_isDriverIsolated) then { + [] breakOut "main"; + }; + _compartment = _driverCompartments; + _moveBackCode = {MOVE_IN_CODE(moveInDriver)}; + _moveBackParams = _vehicle; + }; + case "cargo": { + private _cargoNumber = fullCrew [_vehicle, "cargo", true] findIf {_player == _x select 0}; + _compartment = _cargoCompartments select (_cargoNumber min _cargoCompartmentsLast); + _moveBackCode = {MOVE_IN_CODE(moveInCargo)}; + _moveBackParams = [_vehicle, _cargoIndex]; + }; + default { + private _turretConfig = [_vehicleConfig, _turretPath] call CBA_fnc_getTurret; + _compartment = (_turretConfig >> "gunnerCompartments") call BIS_fnc_getCfgData; + TO_COMPARTMENT_STRING(_compartment); + _moveBackCode = {MOVE_IN_CODE(moveInTurret)}; + _moveBackParams = [_vehicle, _turretPath]; + }; + }; + TRACE_6("current",_role,_cargoIndex,_turretPath,_compartment,_driverCompartments,_cargoCompartments); +}; + +private _actions = []; +private _cargoNumber = -1; +{ + scopeName "crewLoop"; + _x params ["_unit", "_role", "_cargoIndex", "_turretPath", "_isPersonTurret"]; + if (!isNull _unit && {alive _unit}) then { + if (_role == "cargo") then { + INC(_cargoNumber); + }; + } else { + private ["_name", "_icon", "_statement", "_params"]; + switch (toLower _role) do { + case "driver": { + if ( + lockedDriver _vehicle + || {unitIsUAV _vehicle} + || {0 == getNumber (_vehicleConfig >> "hasDriver")} + ) then { + breakTo "crewLoop"; + }; + if (_isInVehicle) then { + if (_compartment != _driverCompartments || {_isDriverIsolated}) then {breakTo "crewLoop"}; + _params = [{MOVE_IN_CODE(moveInDriver)}, _vehicle, _currentTurret, _moveBackCode, _moveBackParams]; + _statement = _fnc_move; + } else { + _params = ["GetInDriver", _vehicle]; + _statement = {_player action (_this select 2)}; + }; + if (_vehicle isKindOf "Air") then { + _name = localize "str_getin_pos_pilot"; + _icon = ICON_PILOT; + } else { + _name = localize "str_driver"; + _icon = ICON_DRIVER; + }; + }; + case "cargo": { + INC(_cargoNumber); + if (_vehicle lockedCargo _cargoIndex) then {breakTo "crewLoop"}; + if (_isInVehicle) then { + if (_compartment != (_cargoCompartments select (_cargoNumber min _cargoCompartmentsLast))) then {breakTo "crewLoop"}; + _params = [{MOVE_IN_CODE(moveInCargo)}, [_vehicle, _cargoIndex], _currentTurret, _moveBackCode, _moveBackParams]; + _statement = _fnc_move; + } else { + _params = ["GetInCargo", _vehicle, _cargoNumber]; + _statement = {_player action (_this select 2)}; + }; + _name = format ["%1 %2", localize "str_getin_pos_passenger", _cargoNumber + 1]; + _icon = ICON_CARGO; + }; + default { // all turrets including FFV + if (_vehicle lockedTurret _turretPath) then {breakTo "crewLoop"}; + if (_role == "gunner" && {unitIsUAV _vehicle}) then {breakTo "crewLoop"}; + private _turretConfig = [_vehicleConfig, _turretPath] call CBA_fnc_getTurret; + if (!_isInVehicle) then { + _params = ["GetInTurret", _vehicle, _turretPath]; + _statement = {_player action (_this select 2)}; + } else { + private _gunnerCompartments = (_turretConfig >> "gunnerCompartments") call BIS_fnc_getCfgData; + TO_COMPARTMENT_STRING(_gunnerCompartments); + if (_compartment != _gunnerCompartments) then {breakTo "crewLoop"}; + // due to arma bug the unit is stuck in wrong anim when move in turret with configured enabledByAnimationSource + private _enabledByAnimationSource = getText (_turretConfig >> "enabledByAnimationSource"); + if ( + !("" isEqualTo _enabledByAnimationSource) + && {1 > _vehicle doorPhase _enabledByAnimationSource} + ) then {breakTo "crewLoop"}; + _params = [{MOVE_IN_CODE(moveInTurret)}, [_vehicle, _turretPath], _currentTurret, _moveBackCode, _moveBackParams, _enabledByAnimationSource]; + _statement = _fnc_move; + }; + _name = getText (_turretConfig >> "gunnerName"); + _icon = switch true do { + case (0 < getNumber (_turretConfig >> "isCopilot")): {ICON_PILOT}; + case (_role == "gunner"): {ICON_GUNNER}; + case (_role == "commander"): {ICON_COMMANDER}; + case (_isPersonTurret): {ICON_FFV}; + case ("" isEqualTo getText (_turretConfig >> "gun")): {ICON_CARGO}; + default {ICON_TURRET}; + }; + }; + }; + private _action = [ + format ["%1%2%3", _role, _cargoIndex, _turretPath], + _name, _icon, _statement, {true}, {}, _params + ] call EFUNC(interact_menu,createAction); + _actions pushBack [_action, [], _vehicle]; + }; +} forEach _fullCrew; + +_actions diff --git a/addons/quickmount/functions/fnc_canShowFreeSeats.sqf b/addons/quickmount/functions/fnc_canShowFreeSeats.sqf new file mode 100644 index 0000000000..ac146a8c57 --- /dev/null +++ b/addons/quickmount/functions/fnc_canShowFreeSeats.sqf @@ -0,0 +1,45 @@ +#include "script_component.hpp" +/* + * Author: Dystopian + * Checks if Free Seats menu can be shown. + * + * Arguments: + * 0: Vehicle + * 1: Unit + * 2: Args + * + * Return Value: + * Can show menu + * + * Example: + * [cursorObject, player] call ace_quickmount_fnc_canShowFreeSeats + * + * Public: No + */ + +params ["_vehicle", "_unit", "_args"]; + +_args set [0, []]; +private _isInVehicle = _unit in _vehicle; + +GVAR(enabled) +&& { + GVAR(enableMenu) == 3 + || {_isInVehicle && {GVAR(enableMenu) == 2}} + || {!_isInVehicle && {GVAR(enableMenu) == 1}} +} +&& {alive _vehicle} +&& {2 > locked _vehicle} +&& { + -1 == crew _vehicle findIf {alive _x} + || {0.6 <= side group _unit getFriend side group _vehicle} +} +&& { + 0.3 < vectorUp _vehicle select 2 // moveIn* and GetIn* don't work for flipped vehicles + || {_vehicle isKindOf "Air"} // except Air +} +&& { + private _subActions = _this call FUNC(addFreeSeatsActions); + _args set [0, _subActions]; + !([] isEqualTo _subActions) +} diff --git a/addons/quickmount/functions/fnc_getInNearest.sqf b/addons/quickmount/functions/fnc_getInNearest.sqf index e068d2c0e6..8e8d77fe8d 100644 --- a/addons/quickmount/functions/fnc_getInNearest.sqf +++ b/addons/quickmount/functions/fnc_getInNearest.sqf @@ -70,13 +70,17 @@ if (!isNull _target && if ((!(_turretPath isEqualTo [])) && {_target lockedTurret _turretPath}) exitWith {TRACE_1("lockedTurret",_x);}; if (_effectiveRole == "turret") then { - if ((getNumber (([_target, _turretPath] call CBA_fnc_getTurret) >> "isCopilot")) == 1) exitWith { + private _turretConfig = [_target, _turretPath] call CBA_fnc_getTurret; + if (getNumber (_turretConfig >> "isCopilot") == 1) exitWith { _effectiveRole = "driver"; }; - if (_cargoIndex < 0) exitWith { - _effectiveRole = "gunner"; // door gunners / 2nd turret + if ( + _cargoIndex >= 0 // FFV + || {"" isEqualTo getText (_turretConfig >> "gun")} // turret without weapon + ) exitWith { + _effectiveRole = "cargo"; }; - _effectiveRole = "cargo"; // probably a FFV + _effectiveRole = "gunner"; // door gunners / 2nd turret }; TRACE_2("",_effectiveRole,_x); if (_effectiveRole != _desiredRole) exitWith {}; @@ -93,7 +97,7 @@ if (!isNull _target && { if ((_x select 2) == _cargoIndex) exitWith {_cargoActionIndex = _forEachIndex}; } forEach (fullCrew [_target, "cargo", true]); - + ACE_player action ["GetInCargo", _target, _cargoActionIndex]; TRACE_4("Geting In Cargo",_x,_role,_cargoActionIndex,_cargoIndex); } else { diff --git a/addons/quickmount/initSettings.sqf b/addons/quickmount/initSettings.sqf new file mode 100644 index 0000000000..f213357167 --- /dev/null +++ b/addons/quickmount/initSettings.sqf @@ -0,0 +1,52 @@ +[ + QGVAR(enabled), + "CHECKBOX", + ELSTRING(common,Enabled), + format ["ACE %1", LLSTRING(Category)], + true, + true +] call CBA_settings_fnc_init; + +[ + QGVAR(distance), + "SLIDER", + [LSTRING(Distance), LSTRING(DistanceDescription)], + format ["ACE %1", LLSTRING(Category)], + [0, 10, DEFAULT_DISTANCE, 0], + true +] call CBA_settings_fnc_init; + +[ + QGVAR(speed), + "SLIDER", + [LSTRING(Speed), LSTRING(SpeedDescription)], + format ["ACE %1", LLSTRING(Category)], + [0, 30, DEFAULT_SPEED, 0], + true +] call CBA_settings_fnc_init; + +[ + QGVAR(priority), + "LIST", + [LSTRING(Priority), LSTRING(PriorityDescription)], + format ["ACE %1", LLSTRING(Category)], + [[0, 1, 2, 3], ["str_getin_pos_driver", "str_getin_pos_gunn", "str_getin_pos_comm", "str_getin_pos_passenger"], DEFAULT_PRIORITY], + false +] call CBA_settings_fnc_init; + +[ + QGVAR(enableMenu), + "LIST", + ELSTRING(interact_menu,Category_InteractionMenu), + format ["ACE %1", LLSTRING(Category)], + [ + [0,1,2,3], + [ + "STR_A3_None", + "STR_rscMenu.hppRscGroupRootMenu_Items_GetIn1", + LSTRING(ChangeSeat), + "str_word_all" + ], + 3 + ] +] call CBA_settings_fnc_init; diff --git a/addons/quickmount/stringtable.xml b/addons/quickmount/stringtable.xml index e928380c26..ab1bf15e67 100644 --- a/addons/quickmount/stringtable.xml +++ b/addons/quickmount/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -111,5 +111,12 @@ Priorytet pozycji w pojeździe 탑승할 좌석의 우선순위를 지정합니다. + + Change seat + Пересесть + 席の変更 + Zmień zajmowaną pozycję + Cambia posto + diff --git a/addons/rangecard/CfgEventHandlers.hpp b/addons/rangecard/CfgEventHandlers.hpp index 5da5fd0dc2..becf395052 100644 --- a/addons/rangecard/CfgEventHandlers.hpp +++ b/addons/rangecard/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/realisticnames/CfgMagazines.hpp b/addons/realisticnames/CfgMagazines.hpp index bc84947798..bacaed93dc 100644 --- a/addons/realisticnames/CfgMagazines.hpp +++ b/addons/realisticnames/CfgMagazines.hpp @@ -422,6 +422,10 @@ class CfgMagazines { displayName = CSTRING(SmokeShellYellow_Name); }; + class 50Rnd_570x28_SMG_03: CA_Magazine { + displayName = CSTRING(P90_Mag_Name); + descriptionShort = CSTRING(P90_Mag_DescriptionShort); + }; // 1.70 Pylon Magazines (Should Match Weapon Name) class 2Rnd_Missile_AA_04_F; diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 6959334fb6..af04d90310 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -93,6 +93,60 @@ class CfgWeapons { class arifle_Mk20_GL_plain_F: arifle_Mk20_GL_F { displayName = CSTRING(arifle_Mk20_GL_plain_Name); }; + + // P90 (1.86) + class SMG_03_TR_BASE; + class SMG_03_TR_black: SMG_03_TR_BASE { + displayName = CSTRING(PS90_TR_Black_Name); + }; + class SMG_03_TR_khaki: SMG_03_TR_black { + displayName = CSTRING(PS90_TR_Khaki_Name); + }; + class SMG_03_TR_camo: SMG_03_TR_black { + displayName = CSTRING(PS90_TR_Camo_Name); + }; + class SMG_03_TR_hex: SMG_03_TR_BASE { + displayName = CSTRING(PS90_TR_Hex_Name); + }; + class SMG_03_black: SMG_03_TR_BASE { + displayName = CSTRING(PS90_Black_Name); + }; + class SMG_03_khaki: SMG_03_black { + displayName = CSTRING(PS90_Khaki_Name); + }; + class SMG_03_camo: SMG_03_black { + displayName = CSTRING(PS90_Camo_Name); + }; + class SMG_03_hex: SMG_03_black { + displayName = CSTRING(PS90_Hex_Name); + }; + class SMG_03C_BASE: SMG_03_TR_BASE {}; + class SMG_03C_TR_black: SMG_03C_BASE { + displayName = CSTRING(P90_TR_Black_Name); + }; + class SMG_03C_TR_khaki: SMG_03C_TR_black { + displayName = CSTRING(P90_TR_Khaki_Name); + }; + class SMG_03C_TR_camo: SMG_03C_TR_black { + displayName = CSTRING(P90_TR_Camo_Name); + }; + class SMG_03C_TR_hex: SMG_03C_TR_black { + displayName = CSTRING(P90_TR_Hex_Name); + }; + class SMG_03C_black: SMG_03C_Base { + displayName = CSTRING(P90_Black_Name); + }; + class SMG_03C_khaki: SMG_03C_black { + displayName = CSTRING(P90_Khaki_Name); + }; + class SMG_03C_camo: SMG_03C_black { + displayName = CSTRING(P90_Camo_Name); + }; + class SMG_03C_hex: SMG_03C_black { + displayName = CSTRING(P90_Hex_Name); + }; + + // Vector class SMG_01_Base; @@ -675,7 +729,32 @@ class CfgWeapons { class optic_LRPS_tna_F : optic_LRPS { displayName = CSTRING(optic_lrps_tna); }; - + + class optic_AMS_base; + class optic_AMS: optic_AMS_base { + displayName = CSTRING(optic_ams); + }; + class optic_AMS_khk: optic_AMS { + displayName = CSTRING(optic_ams_khk); + }; + class optic_AMS_snd: optic_AMS { + displayName = CSTRING(optic_ams_snd); + }; + + class optic_KHS_base; + class optic_KHS_blk: optic_KHS_base { + displayName = CSTRING(optic_khs_blk); + }; + class optic_KHS_hex: optic_KHS_blk { + displayName = CSTRING(optic_khs_hex); + }; + class optic_KHS_old: ItemCore { + displayName = CSTRING(optic_khs_old); + }; + class optic_KHS_tan: optic_KHS_blk { + displayName = CSTRING(optic_khs_tan); + }; + class optic_DMS : ItemCore { displayName = CSTRING(optic_dms); }; diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 6cd706d2e5..7d893e87c7 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -156,7 +156,7 @@ YABHON-R3 (Légitámogató) YABHON-R3 (CAS) YABHON-R3 (CAS) - YABHON-R3 (対地) + YABHON-R3 (CAS) YABHON-R3 (근접지원) "亞伯罕-R3型"空中無人載具 (近空支援) "亚伯罕-R3型"空中无人载具 (近空支援) @@ -662,6 +662,9 @@ KamAS MRL "卡瑪斯"卡車 (多管火箭) "卡玛斯"卡车 (多管火箭) + KamAZ MRL + KamAZ MRL + KamAZ MRL Karatel @@ -1058,7 +1061,7 @@ L-159 ALCA L-159 ALCA L-159 ALCA - L-159 アルカ + L-159 ALCA L-159 ALCA L-159先進輕型戰鬥機 L-159先进轻型战斗机 @@ -1074,7 +1077,7 @@ L-159 ALCA (CAS) L-159 ALCA (Légitámogató) L-159 ALCA (CAS) - L-159 アルカ (対地) + L-159 ALCA (CAS) L-159 ALCA (근접지원) L-159先進輕型戰鬥機 (近空支援) L-159先进轻型战斗机 (近空支援) @@ -1090,7 +1093,7 @@ L-159 ALCA (ВВ) L-159 ALCA (Repülő-elhárító) L-159 ALCA (AA) - L-159 アルカ (対空) + L-159 ALCA (対空) L-159 ALCA (대공) L-159先進輕型戰鬥機 (空對空) L-159先进轻型战斗机 (空对空) @@ -1247,7 +1250,7 @@ M112 подрывной заряд M112 Carga de Demolição M112 romboló tömb - M112 Demolition Block + M112 da Demolizione M112 爆薬ブロック M112 폭파 블럭 M112塑性炸藥 @@ -1272,6 +1275,9 @@ V40 Mini-Grenade V40 Minigranate + Mini Granata V40 + V40 小型手榴弾 + Mini-granat V40 M83 Smoke Grenade (White) @@ -1284,7 +1290,7 @@ M83 Granada de fumaça (Branca) M83 füstgránát (Fehér) M83 Granata fumogena (Bianco) - M18 煙幕手榴弾 (白) + M18 発煙手榴弾 (白) M83 연막탄 (하양) M83煙霧彈 (白色) M83烟雾弹 (白色) @@ -1300,7 +1306,7 @@ M18 Granada de fumaça (Azul) M18 füstgránát (Kék) M18 Granata fumogena (Blu) - M18 煙幕手榴弾 (青) + M18 発煙手榴弾 (青) M18 연막탄 (파랑) M18煙霧彈 (藍色) M18烟雾弹 (蓝色) @@ -1332,7 +1338,7 @@ M18 Granada de fumaça (Laranja) M18 füstgránát (Narancssárga) M18 Granata fumogena (Arancione) - M18 煙幕手榴弾 (橙) + M18 発煙手榴弾 (橙) M18 연막탄 (주황) M18煙霧彈 (橘色) M18烟雾弹 (橘色) @@ -1348,7 +1354,7 @@ M18 Granada de fumaça (Roxa) M18 füstgránát (Lila) M18 Granata fumogena (Viola) - M18 煙幕手榴弾 (紫) + M18 発煙手榴弾 (紫) M18 연막탄 (보라) M18煙霧彈 (紫色) M18烟雾弹 (紫色) @@ -1380,7 +1386,7 @@ M18 Granada de fumaça (Amarela) M18 füstgránát (Sárga) M18 Granata fumogena (Giallo) - M18 煙幕手榴弾 (黄) + M18 発煙手榴弾 (黄) M18 연막탄 (노랑) M18煙霧彈 (黃色) M18烟雾弹 (黄色) @@ -1616,6 +1622,9 @@ Метис-М "麥士蒂索人"-M型反坦克導彈 "麦士蒂索人"-M型反坦克导弹 + Metis-M + メチス-M + Metis-M Metis-M (Brown) @@ -1624,6 +1633,9 @@ Метис-М (Кори́чневый) "麥士蒂索人"-M型反坦克導彈(棕色) "麦士蒂索人"-M型反坦克导弹(棕色) + Metis-M (Marrone) + メチス-M (茶) + Metis-M (Brązowy) Metis-M (Green) @@ -1632,6 +1644,9 @@ Метис-М (Зелёный) "麥士蒂索人"-M型反坦克導彈(綠色) "麦士蒂索人"-M型反坦克导弹(绿色) + Metis-M (Verde) + メチス-M (緑) + Metis-M (Zielony) MX @@ -1788,7 +1803,7 @@ MXM (Чёрный) MXM (Preto) MXM (Nero) - MXM (黒) + MXM (ブラック) MXM (검정) MXM精準步槍 (黑色) MXM精准步枪 (黑色) @@ -1852,7 +1867,7 @@ F2000 (Камо) F2000 (Camo) F2000 (Camo) - F2000 (迷彩) + F2000 (カモフラージュ) F2000 (위장) F2000突擊步槍 (迷彩) F2000突击步枪 (迷彩) @@ -1916,7 +1931,7 @@ F2000 EGLM (Камо) F2000 EGLM (Camo) F2000 EGLM (Camo) - F2000 EGLM (迷彩) + F2000 EGLM (カモフラージュ) F2000 EGLM (위장) F2000突擊步槍 (榴彈-迷彩) F2000突击步枪 (榴弹-迷彩) @@ -2124,7 +2139,7 @@ GM6 Lynx (Камо) GM6 Lynx (Camo) GM6 Lynx (Camo) - GM6 リンクス (迷彩) + GM6 リンクス (カモフラージュ) GM6 Lynx (위장) GM6"天貓"反器材狙擊步槍 (迷彩) GM6"天猫"反器材狙击步枪 (迷彩) @@ -2156,7 +2171,7 @@ M200 Intervention (Камо) M200 Intervention (Camo) M200 Intervention (Camo) - M200 インターベンション (迷彩) + M200 インターベンション (カモフラージュ) M200 Intervention (위장) M200干預型狙擊步槍 (迷彩) M200干预型狙击步枪 (迷彩) @@ -2204,7 +2219,7 @@ Noreen "Bad News" ULR (Nero) Noreen "Bad News"ULR (Fekete) Noreen "Bad News" ULR (Preto) - ノレーン "バッド ニュース" ULR (黒) + ノレーン "バッド ニュース" ULR (ブラック) Noreen "Bad News" ULR (검정) 諾琳"壞消息"極距狙擊步槍 (黑色) 诺琳"坏消息"极距狙击步枪 (黑色) @@ -2220,7 +2235,7 @@ Noreen "Bad News" ULR (Camo) Noreen "Bad News"ULR (Terepmintás) Noreen "Bad News" ULR (Camuflagem) - ノレーン "バッド ニュース" ULR (迷彩) + ノレーン "バッド ニュース" ULR (カモフラージュ) Noreen "Bad News" ULR (위장) 諾琳"壞消息"極距狙擊步槍 (迷彩) 诺琳"坏消息"极距狙击步枪 (迷彩) @@ -2268,7 +2283,7 @@ SIG 556 (Nero) SIG 556 (Fekete) SIG 556 (Preto) - SIG 556 (黒) + SIG 556 (ブラック) SIG 556 (검정) SIG 556精準步槍 (黑色) SIG 556精准步枪 (黑色) @@ -2316,7 +2331,7 @@ SIG 556 (Camo) SIG 556 (Terepmintás) SIG 556 (Camuflagem) - SIG 556 (迷彩) + SIG 556 (カモフラージュ) SIG 556 (위장) SIG 556精準步槍 (迷彩) SIG 556精准步枪 (迷彩) @@ -2364,7 +2379,7 @@ ASP-1 Kir (Nero) ASP-1 Kir (Fekete) ASP-1 Kir (Preto) - ASP-1 キール (黒) + ASP-1 キール (ブラック) ASP-1 Kir (검정) ASP-1"基爾"消音狙擊步槍 (黑色) ASP-1"基尔"消音狙击步枪 (黑色) @@ -2412,7 +2427,7 @@ Cyrus (Nero) Cyrus (Fekete) Cyrus (Preto) - サイラス (黒) + サイラス (ブラック) Cyrus (검정) "居鲁士"狙擊步槍 (黑色) "居鲁士"狙击步枪 (黑色) @@ -2444,7 +2459,7 @@ Cyrus (Tan) Cyrus (Cserszín) Cyrus (Deserto) - サイラス (黄褐) + サイラス (タン) Cyrus (황갈) "居鲁士"狙擊步槍 (黃褐色) "居鲁士"狙击步枪 (黄褐色) @@ -2476,7 +2491,7 @@ M14 (Camo) M14 (Terepmintás) M14 (Camuflagem) - M14 (迷彩) + M14 (カモフラージュ) M14 (위장) M14精準步槍 (迷彩) M14精准步枪 (迷彩) @@ -2588,7 +2603,7 @@ LWMMG (Nero) LWMMG (Fekete) LWMMG (Preto) - LWMMG (黒) + LWMMG (ブラック) LWMMG (검정) 輕量化中型機槍 (黑色) 轻量化中型机枪 (黑色) @@ -2631,6 +2646,8 @@ "牧马人"吉普车(SPG-9火箭筒) "牧馬人"吉普車 (SPG-9火箭筒) ジープ ラングラー (SPG-9) + Jeep Wrangler (SPG-9) + Jeep Wrangler (SPG-9) Jeep Wrangler (LMG) @@ -2638,6 +2655,8 @@ "牧马人"吉普车(轻机枪) "牧馬人"吉普車 (輕機槍) ジープ ラングラー (LMG) + Jeep Wrangler (LMG) + Jeep Wrangler (LMG) Cessna TTx @@ -2698,7 +2717,7 @@ QBZ-95-1 (Nero) QBZ-95-1 (Fekete) QBZ-95-1 (Preto) - QBZ-95-1 (黒) + QBZ-95-1 (ブラック) QBZ-95-1 (검정) QBZ-95-1式自動步槍 (黑色) QBZ-95-1式自动步枪 (黑色) @@ -2714,7 +2733,7 @@ QBZ-95-1 (Verde Hex) QBZ-95-1 (Zöld Hex) QBZ-95-1 (Hex Verde) - QBZ-95-1 (緑蜂巣) + QBZ-95-1 (緑ヘックス) QBZ-95-1 (초록육각) QBZ-95-1式自動步槍 (綠色數位蜂巢迷彩) QBZ-95-1式自动步枪 (绿色数位蜂巢迷彩) @@ -2730,7 +2749,7 @@ QBZ-95-1 (Hex) QBZ-95-1 (Hex) QBZ-95-1 (Hex) - QBZ-95-1 (蜂巣) + QBZ-95-1 (ヘックス) QBZ-95-1 (육각) QBZ-95-1式自動步槍 (數位蜂巢迷彩) QBZ-95-1式自动步枪 (数位蜂巢迷彩) @@ -2746,7 +2765,7 @@ QBZ-95-1 GL (Nero) QBZ-95-1 GL (Fekete) QBZ-95-1 GL (Preto) - QBZ-95-1 GL (黒) + QBZ-95-1 GL (ブラック) QBZ-95-1 GL (검정) QBZ-95-1式自動步槍 (榴彈-黑色) QBZ-95-1式自动步枪 (榴弹-黑色) @@ -2762,7 +2781,7 @@ QBZ-95-1 GL (Verde Hex) QBZ-95-1 GL (Zöld Hex) QBZ-95-1 GL (Hex Verde) - QBZ-95-1 GL (緑蜂巣) + QBZ-95-1 GL (緑ヘックス) QBZ-95-1 GL (초록육각) QBZ-95-1式自動步槍 (榴彈-綠色數位蜂巢迷彩) QBZ-95-1式自动步枪 (榴弹-绿色数位蜂巢迷彩) @@ -2778,7 +2797,7 @@ QBZ-95-1 GL (Hex) QBZ-95-1 GL (Hex) QBZ-95-1 GL (Hex) - QBZ-95-1 GL (蜂巣) + QBZ-95-1 GL (ヘックス) QBZ-95-1 GL (육각) QBZ-95-1式自動步槍 (榴彈-數位蜂巢迷彩) QBZ-95-1式自动步枪 (榴弹-数位蜂巢迷彩) @@ -2810,7 +2829,7 @@ QBZ-95-1 LSW (Verde Hex) QBZ-95-1 LSW (Zöld Hex) QBZ-95-1 LSW (Hex Verde) - QBZ-95-1 LSW (緑蜂巣) + QBZ-95-1 LSW (緑ヘックス) QBZ-95-1 LSW (초록육각) QBZ-95-1式輕機槍 (綠色數位蜂巢迷彩) QBZ-95-1式轻机枪 (绿色数位蜂巢迷彩) @@ -2826,7 +2845,7 @@ QBZ-95-1 LSW (Hex) QBZ-95-1 LSW (Hex) QBZ-95-1 LSW (Hex) - QBZ-95-1 LSW (蜂巣) + QBZ-95-1 LSW (ヘックス) QBZ-95-1 LSW (육각) QBZ-95-1式輕機槍 (數位蜂巢迷彩) QBZ-95-1式轻机枪 (数位蜂巢迷彩) @@ -2842,7 +2861,7 @@ QBU-88 (Nero) QBU-88 (Fekete) QBU-88 (Preto) - QBU-88 (黒) + QBU-88 (ブラック) QBU-88 (검정) QBU-88式狙擊步槍 (黑色) QBU-88式狙击步枪 (黑色) @@ -2858,7 +2877,7 @@ QBU-88 (Verde Hex) QBU-88 (Zöld Hex) QBU-88 (Hex Verde) - QBU-88 (緑蜂巣) + QBU-88 (緑ヘックス) QBU-88 (초록육각) QBU-88式狙擊步槍 (綠色數位蜂巢迷彩) QBU-88式狙击步枪 (绿色数位蜂巢迷彩) @@ -2874,7 +2893,7 @@ QBU-88 (Hex) QBU-88 (Hex) QBU-88 (Hex) - QBU-88 (蜂巣) + QBU-88 (ヘックス) QBU-88 (육각) QBU-88式狙擊步槍 (數位蜂巢迷彩) QBU-88式狙击步枪 (数位蜂巢迷彩) @@ -2890,7 +2909,7 @@ GM6 Lynx (Verde Hex) GM6 Lynx (Zöld Hex) GM6 Lynx (Hex Verde) - GM6 リンクス (緑蜂巣) + GM6 リンクス (緑ヘックス) GM6 Lynx (초록육각) GM6"天貓"反器材狙擊步槍 (綠色數位蜂巢迷彩) GM6"天猫"反器材狙击步枪 (绿色数位蜂巢迷彩) @@ -2954,7 +2973,7 @@ HK416A5 11" (Nero) HK416A5 11" (Fekete) HK416A5 11" (Preto) - HK416A5 11" (黒) + HK416A5 11" (ブラック) HK416A5 11" (검정) HK416A5 11"突擊步槍 (黑色) HK416A5 11"突击步枪 (黑色) @@ -2970,7 +2989,7 @@ HK416A5 11" (Khaki) HK416A5 11" (Khaki) HK416A5 11" (Caqui) - HK416A5 11" (土埃) + HK416A5 11" (カーキ) HK416A5 11" (카키) HK416A5 11"突擊步槍 (卡其色) HK416A5 11"突击步枪 (卡其色) @@ -2986,7 +3005,7 @@ HK416A5 11" (Sabbia) HK416A5 11" (Homok) HK416A5 11" (Deserto) - HK416A5 11" (砂地) + HK416A5 11" (サンド) HK416A5 11" (모래) HK416A5 11"突擊步槍 (沙色) HK416A5 11"突击步枪 (沙色) @@ -3002,7 +3021,7 @@ HK416A5 11" GL (Nero) HK416A5 11" GL (Fekete) HK416A5 11" GL (Preto) - HK416A5 11" GL (黒) + HK416A5 11" GL (ブラック) HK416A5 11" GL (검정) HK416A5 11"突擊步槍 (榴彈-黑色) HK416A5 11"突击步枪 (榴弹-黑色) @@ -3018,7 +3037,7 @@ HK416A5 11" GL (Khaki) HK416A5 11" GL (Khaki) HK416A5 11" GL (Caqui) - HK416A5 11" GL (土埃) + HK416A5 11" GL (カーキ) HK416A5 11" GL (카키) HK416A5 11"突擊步槍 (榴彈-卡其色) HK416A5 11"突击步枪 (榴弹-卡其色) @@ -3034,7 +3053,7 @@ HK416A5 11" GL (Sabbia) HK416A5 11" GL (Homok) HK416A5 11" GL (Deserto) - HK416A5 11" GL (砂地) + HK416A5 11" GL (サンド) HK416A5 11" GL (모래) HK416A5 11"突擊步槍 (榴彈-沙色) HK416A5 11"突击步枪 (榴弹-沙色) @@ -3066,7 +3085,7 @@ HK416A5 14.5" (Khaki) HK416A5 14.5" (Khaki) HK416A5 14.5" (Caqui) - HK416A5 14.5" (土埃) + HK416A5 14.5" (カーキ) HK416A5 14.5" (카키) HK416A5 14.5"突擊步槍 (卡其色) HK416A5 14.5"突击步枪 (卡其色) @@ -3082,7 +3101,7 @@ HK416A5 14.5" (Sabbia) HK416A5 14.5" (Homok) HK416A5 14.5" (Deserto) - HK416A5 14.5" (砂地) + HK416A5 14.5" (サンド) HK416A5 14.5" (모래) HK416A5 14.5"突擊步槍 (沙色) HK416A5 14.5"突击步枪 (沙色) @@ -3098,7 +3117,7 @@ HK417A2 20" (Nero) HK417A2 20" (Fekete) HK417A2 20" (Preto) - HK417A2 20" (黒) + HK417A2 20" (ブラック) HK417A2 20" (검정) HK417A2 20"突擊步槍 (黑色) HK417A2 20"突击步枪 (黑色) @@ -3114,7 +3133,7 @@ HK417A2 20" (Khaki) HK417A2 20" (Khaki) HK417A2 20" (Caqui) - HK417A2 20" (土埃) + HK417A2 20" (カーキ) HK417A2 20" (카키) HK417A2 20"突擊步槍 (卡其色) HK417A2 20"突击步枪 (卡其色) @@ -3130,7 +3149,7 @@ HK417A2 20" (Sabbia) HK417A2 20" (Homok) HK417A2 20" (Deserto) - HK417A2 20" (砂地) + HK417A2 20" (サンド) HK417A2 20" (모래) HK417A2 20"突擊步槍 (沙色) HK417A2 20"突击步枪 (沙色) @@ -3146,7 +3165,7 @@ RPG-32 (Verde Hex) RPG-32 (Zöld Hex) RPG-32 (Hex Verde) - RPG-32 (緑蜂巣) + RPG-32 (緑ヘックス) RPG-32 (초록육각) RPG-32火箭發射器 (綠色數位蜂巢迷彩) RPG-32火箭发射器 (绿色数位蜂巢迷彩) @@ -3162,7 +3181,7 @@ P99 (Khaki) P99 (Khaki) P99 (Caqui) - P99 (土埃) + P99 (カーキ) P99 (카키) P99半自動手槍 (卡其色) P99半自动手枪 (卡其色) @@ -3189,12 +3208,17 @@ ポラリス DAGOR (XM312) "北極星"先進佈署越野車 (XM312重機槍) "北极星"先进布署越野车 (XM312重机枪) + Polaris DAGOR (XM312) + Polaris DAGOR (XM312) Polaris DAGOR (Mini-Spike AT) Polaris DAGOR (Mini-Spike PzAbw) "北极星"先进布署越野车("迷你长钉"反坦克导弹发射器) "北極星"先進佈署越野車("迷你長釘"反坦克導彈發射器) + Polaris DAGOR (Mini-Spike AT) + ポラリス DAGOR (ミニスパイク対戦) + Polaris DAGOR (Mini-Spike AT) Polaris DAGOR @@ -3202,6 +3226,8 @@ ポラリス DAGOR "北極星"先進佈署越野車 "北极星"先进布署越野车 + Polaris DAGOR + Polaris DAGOR Polaris DAGOR (light) @@ -3209,6 +3235,8 @@ ポラリス DAGOR (軽) "北極星"先進佈署越野車 (輕型) "北极星"先进布署越野车 (轻型) + Polaris DAGOR (leggero) + Polaris DAGOR (light) LSV Mk. II (M134) @@ -3216,6 +3244,8 @@ 輕型突擊車2式 (M134迷你機炮) 轻型突击车2式 (M134迷你机炮) LSV Mk. II (M134) + LSV Mk. II (M134) + LSV Mk. II (M134) LSV Mk. II (Metis-M) @@ -3223,6 +3253,8 @@ 轻型突击车2式 ("麦士蒂索人"-M型反坦克导弹) 輕型突擊車2式 ("麥士蒂索人"-M型反坦克導彈) LSV Mk. II (メチス-M) + LSV Mk. II (Metis-M) + LSV Mk. II (Metis-M) LSV Mk. II @@ -3230,6 +3262,8 @@ 輕型突擊車2式 轻型突击车2式 LSV Mk. II + LSV Mk. II + LSV Mk. II Rooikat 120 @@ -3237,6 +3271,8 @@ "狞猫"120主炮轮式装甲车 "獰貓"120主炮輪式裝甲車 ルーイカット 120 + Rooikat 120 + Rooikat 120 Rooikat 120 UP @@ -3244,6 +3280,8 @@ "狞猫"120主炮轮式装甲车 (城市版) "獰貓"120主炮輪式裝甲車 (城市版) ルーイカット 120 UP + Rooikat 120 UP + Rooikat 120 UP T-14 Armata @@ -3252,6 +3290,8 @@ T-14"阿玛塔"主战坦克 T-14"阿瑪塔"主戰坦克 T-14 アルマータ + T-14 Armata + T-14 Armata T-14K Armata @@ -3260,6 +3300,8 @@ T-14K"阿玛塔"主战坦克 T-14K"阿瑪塔"主戰坦克 T-14K アルマータ + T-14K Armata + T-14K Armata Wiesel 2 Ozelot (AA) @@ -3267,6 +3309,8 @@ "鼬鼠"2装甲车 (防空) "鼬鼠"2裝甲車 (防空) ウィーゼル 2 オゼロット (対空) + Wiesel 2 Ozelot (AA) + Wiesel 2 Ozelot (AA) Wiesel 2 (ATGM) @@ -3274,6 +3318,8 @@ "鼬鼠"2装甲车 (反坦导弹) "鼬鼠"2裝甲車 (反坦導彈) ウィーゼル 2 (ATGM) + Wiesel 2 (ATGM) + Wiesel 2 (ATGM) Wiesel 2 (MK20) @@ -3281,6 +3327,8 @@ "鼬鼠"2装甲车 (MK20机炮) "鼬鼠"2裝甲車 (MK20機炮) ウィーゼル 2 (MK20) + Wiesel 2 (MK20) + Wiesel 2 (MK20) Wiesel 2 RFCV (Radar) @@ -3288,6 +3336,8 @@ "鼬鼠"2装甲车 (雷达) "鼬鼠"2裝甲車 (雷達) ウィーゼル 2 (レーダー) + Wiesel 2 RFCV (Radar) + Wiesel 2 RFCV (Radar) Leupold Mark 4 HAMR @@ -3295,139 +3345,237 @@ Leupold Mark 4 HAMR Leupold Mark 4 HAMR Leupold Mark 4 HAMR + Leupold Mark 4 HAMR + Leupold Mark 4 HAMR Leupold Mark 4 HAMR (Khaki) Leupold Mark 4 HAMR (Khaki) Leupold Mark 4 HAMR (卡其色) Leupold Mark 4 HAMR (卡其色) - Leupold Mark 4 HAMR (土埃) + Leupold Mark 4 HAMR (カーキ) + Leupold Mark 4 HAMR (Khaki) + Leupold Mark 4 HAMR (Khaki) ELCAN SpecterOS (Tan) ELCAN SpecterOS (Beige) ELCAN SpecterOS (黃褐色) ELCAN SpecterOS (黄褐色) - ELCAN SpecterOS (黄褐) + ELCAN SpecterOS (タン) + ELCAN SpecterOS (Tan) + ELCAN SpecterOS (Tan) ELCAN SpecterOS (Black) ELCAN SpecterOS (Schwarz) ELCAN SpecterOS (黑色) ELCAN SpecterOS (黑色) - ELCAN SpecterOS (黒) + ELCAN SpecterOS (ブラック) + ELCAN SpecterOS (Nero) + ELCAN SpecterOS (Czarny) ELCAN SpecterOS (Green Hex) ELCAN SpecterOS (綠色數位蜂巢迷彩) ELCAN SpecterOS (绿色数位蜂巢迷彩) - ELCAN SpecterOS (緑蜂巣) + ELCAN SpecterOS (緑ヘックス) + ELCAN SpecterOS (Verde Hex) + ELCAN SpecterOS (Zielony Hex) SIG BRAVO4 / ROMEO3 (Black) SIG BRAVO4 / ROMEO3 (Schwarz) SIG BRAVO4 / ROMEO3 (黑色) SIG BRAVO4 / ROMEO3 (黑色) - SIG BRAVO4 / ROMEO3 (黒) + SIG BRAVO4 / ROMEO3 (ブラック) + SIG BRAVO4 / ROMEO3 (Nero) + SIG BRAVO4 / ROMEO3 (Czarny) SIG BRAVO4 / ROMEO3 (Khaki) SIG BRAVO4 / ROMEO3 (Khaki) SIG BRAVO4 / ROMEO3 (卡其色) SIG BRAVO4 / ROMEO3 (卡其色) - SIG BRAVO4 / ROMEO3 (土埃) + SIG BRAVO4 / ROMEO3 (カーキ) + SIG BRAVO4 / ROMEO3 (Khaki) + SIG BRAVO4 / ROMEO3 (Khaki) SIG BRAVO4 / ROMEO3 (Sand) SIG BRAVO4 / ROMEO3 (Beige) SIG BRAVO4 / ROMEO3 (沙色) SIG BRAVO4 / ROMEO3 (沙色) - SIG BRAVO4 / ROMEO3 (砂地) + SIG BRAVO4 / ROMEO3 (サンド) + SIG BRAVO4 / ROMEO3 (Sabbia) + SIG BRAVO4 / ROMEO3 (Piasek) Nightforce NXS Nightforce NXS Nightforce NXS Nightforce NXS + Nightforce NXS + Nightforce NXS Nightforce NXS (Green Hex) Nightforce NXS (綠色數位蜂巢迷彩) Nightforce NXS (绿色数位蜂巢迷彩) - Nightforce NXS (緑蜂巣) + Nightforce NXS (緑ヘックス) + Nightforce NXS (Verde Hex) + Nightforce NXS (Zielony Hex) Nightforce NXS (Jungle) Nightforce NXS (Dschungel) Nightforce NXS (叢林色) Nightforce NXS (丛林色) - Nightforce NXS (熱帯) + Nightforce NXS (ジャングル) + Nightforce NXS (Giungla) + Nightforce NXS (Dżungla) + + + US Optics MR-10 (Black) + US Optics MR-10 (Black) + US Optics MR-10 (Black) + US Optics MR-10 (ブラック) + US Optics MR-10 (Czarny) + Ottica US MR-10 (nera) + + + US Optics MR-10 (Khaki) + US Optics MR-10 (Khaki) + US Optics MR-10 (Khaki) + US Optics MR-10 (カーキ) + US Optics MR-10 (Khaki) + Ottica US MR-10 (cachi) + + + US Optics MR-10 (Sand) + US Optics MR-10 (Sand) + US Optics MR-10 (Sand) + US Optics MR-10 (サンド) + US Optics MR-10 (Piasek) + Ottica US MR-10 (sabbia) + + + KAHLES Helia (Black) + KAHLES Helia (Black) + KAHLES Helia (Black) + KAHLES ヘリア (ブラック) + KAHLES Helia (Czarny) + KAHLES Helia (nero) + + + KAHLES Helia (Hex) + KAHLES Helia (Hex) + KAHLES Helia (Hex) + KAHLES ヘリア (ヘックス) + KAHLES Helia (Hex) + KAHLES Helia (esagonale) + + + KAHLES Helia (Old) + KAHLES Helia (Old) + KAHLES Helia (Old) + KAHLES ヘリア (使い古し) + KAHLES Helia (Stary) + KAHLES Helia (vecchio) + + + KAHLES Helia (Tan) + KAHLES Helia (Tan) + KAHLES Helia (Tan) + KAHLES Helia (タン) + KAHLES Helia (Tan) + KAHLES Helia (marroncino) Burris XTR II Burris XTR II Burris XTR II Burris XTR II + Burris XTR II + Burris XTR II Burris XTR II (Green Hex) Burris XTR II (綠色數位蜂巢迷彩) Burris XTR II (绿色数位蜂巢迷彩) - Burris XTR II (緑蜂巣) + Burris XTR II (緑ヘックス) + Burris XTR II (Green Hex) + Burris XTR II (Zielony Hex) EOTech XPS3 (Tan) EOTech XPS3 (Beige) EOTech XPS3 (黃褐色) EOTech XPS3 (黄褐色) - EOTech XPS3 (黄褐) + EOTech XPS3 (タン) + EOTech XPS3 (Tan) + EOTech XPS3 (Tan) EOTech XPS3 (Black) EOTech XPS3 (Schwarz) EOTech XPS3 (黑色) EOTech XPS3 (黑色) - EOTech XPS3 (黒) + EOTech XPS3 (ブラック) + EOTech XPS3 (Black) + EOTech XPS3 (Czarny) EOTech XPS3 (Khaki) EOTech XPS3 (Khaki) EOTech XPS3 (卡其色) EOTech XPS3 (卡其色) - EOTech XPS3 (土埃) + EOTech XPS3 (カーキ) + EOTech XPS3 (Khaki) + EOTech XPS3 (Khaki) EOTech XPS3 SMG (Tan) EOTech XPS3 SMG (Beige) EOTech XPS3 SMG (黃褐色) EOTech XPS3 SMG (黄褐色) - EOTech XPS3 SMG (黄褐) + EOTech XPS3 SMG (タン) + EOTech XPS3 SMG (Tan) + EOTech XPS3 SMG (Tan) EOTech XPS3 SMG (Black) EOTech XPS3 SMG (Schwarz) EOTech XPS3 SMG (黑色) EOTech XPS3 SMG (黑色) - EOTech XPS3 SMG (黒) + EOTech XPS3 SMG (ブラック) + EOTech XPS3 SMG (Nero) + EOTech XPS3 SMG (Czarny) EOTech XPS3 SMG (Khaki) EOTech XPS3 SMG (Khaki) EOTech XPS3 SMG (卡其色) EOTech XPS3 SMG (卡其色) - EOTech XPS3 SMG (土埃) + EOTech XPS3 SMG (カーキ) + EOTech XPS3 SMG (Khaki) + EOTech XPS3 SMG (Khaki) IOR-Valdada Pitbull 2 IOR-Valdada Pitbull 2 IOR-Valdada Pitbull 2 IOR-Valdada ピットブル 2 + IOR-Valdada Pitbull 2 + IOR-Valdada Pitbull 2 Burris FastFire 2 Burris FastFire 2 Burris FastFire 2 Burris ファストファイア 2 + Burris FastFire 2 + Burris FastFire 2 C-More Railway (Red) @@ -3435,6 +3583,8 @@ C-More Railway (紅色) C-More Railway (红色) C-More レイルウェイ (赤) + C-More Railway (Rosso) + C-More Railway (Czerwony) C-More Railway (Green) @@ -3442,6 +3592,8 @@ C-More Railway (綠色) C-More Railway (绿色) C-More レイルウェイ (緑) + C-More Railway (Verde) + C-More Railway (Zielony) C-More Railway SMG (Red) @@ -3449,6 +3601,8 @@ C-More Railway SMG (紅色) C-More Railway SMG (红色) C-More レイルウェイ SMG (赤) + C-More Railway SMG (Rosso) + C-More Railway SMG (Czerwony) C-More Railway SMG (Green) @@ -3456,6 +3610,296 @@ C-More Railway SMG (綠色) C-More Railway SMG (绿色) C-More レイルウェイ SMG (緑) + C-More Railway SMG (Verde) + C-More Railway SMG (Zielony) + + + P90 TR (Black) + P90 TR (Černá) + P90 TR (Noir) + P90 TR (Negro) + P90 TR (Чёрный) + P90 TR (czarny) + P90 TR (Schwarz) + P90 TR (Nero) + P90 TR (Fekete) + P90 TR (Preto) + P90 TR (ブラック) + P90 TR (黑色) + P90 TR (黑色) + P90 TR (Black) + + + P90 TR (Khaki) + P90 TR (Khaki) + P90 TR (Kaki) + P90 TR (Caqui) + P90 TR (Хаки) + P90 TR (khaki) + P90 TR (Khaki) + P90 TR (Khaki) + P90 TR (Khaki) + P90 TR (Caqui) + P90 TR (カーキ) + P90 TR (沙色) + P90 TR (沙色) + P90 TR (Khaki) + + + P90 TR (Camo) + P90 TR (Kamufláž) + P90 TR (Camo) + P90 TR (Camuflaje) + P90 TR (Камо) + P90 TR (kamuflaż) + P90 TR (Camo) + P90 TR (Camo) + P90 TR (Terepmintás) + P90 TR (Camuflagem) + P90 TR (カモフラージュ) + P90 TR (迷彩) + P90 TR (迷彩) + P90 TR (Camo) + + + P90 TR (Hex) + P90 TR (Hex) + P90 TR (Hex) + P90 TR (Hex) + P90 TR (Гекс) + P90 TR (Hex) + P90 TR (hex) + P90 TR (Hex) + P90 TR (Hex) + P90 TR (Hex) + P90 TR (ヘックス) + P90 TR (數位蜂巢迷彩) + P90 TR (数位蜂巢迷彩) + P90 TR (Hex) + + + P90 (Black) + P90 (Černá) + P90 (Noir) + P90 (Negro) + P90 (Чёрный) + P90 (czarny) + P90 (Schwarz) + P90 (Nero) + P90 (Fekete) + P90 (Preto) + P90 (ブラック) + P90 (黑色) + P90 (黑色) + P90 (Black) + + + P90 (Khaki) + P90 (Khaki) + P90 (Kaki) + P90 (Caqui) + P90 (Хаки) + P90 (khaki) + P90 (Khaki) + P90 (Khaki) + P90 (Khaki) + P90 (Caqui) + P90 (カーキ) + P90 (沙色) + P90 (沙色) + P90 (Khaki) + + + P90 (Camo) + P90 (Kamufláž) + P90 (Camo) + P90 (Camuflaje) + P90 (Камо) + P90 (kamuflaż) + P90 (Camo) + P90 (Camo) + P90 (Terepmintás) + P90 (Camuflagem) + P90 (カモフラージュ) + P90 (迷彩) + P90 (迷彩) + P90 (Camo) + + + P90 (Hex) + P90 (Hex) + P90 (Hex) + P90 (Hex) + P90 (Гекс) + P90 (Hex) + P90 (hex) + P90 (Hex) + P90 (Hex) + P90 (Hex) + P90 (ヘックス) + P90 (數位蜂巢迷彩) + P90 (数位蜂巢迷彩) + P90 (Hex) + + + PS90 TR (Black) + PS90 TR (Černá) + PS90 TR (Noir) + PS90 TR (Negro) + PS90 TR (Чёрный) + PS90 TR (czarny) + PS90 TR (Schwarz) + PS90 TR (Nero) + PS90 TR (Fekete) + PS90 TR (Preto) + PS90 TR (ブラック) + PS90 TR (黑色) + PS90 TR (黑色) + PS90 TR (Black) + + + PS90 TR (Khaki) + PS90 TR (Khaki) + PS90 TR (Kaki) + PS90 TR (Caqui) + PS90 TR (Хаки) + PS90 TR (khaki) + PS90 TR (Khaki) + PS90 TR (Khaki) + PS90 TR (Khaki) + PS90 TR (Caqui) + PS90 TR (カーキ) + PS90 TR (沙色) + PS90 TR (沙色) + PS90 TR (Khaki) + + + PS90 TR (Camo) + PS90 TR (Kamufláž) + PS90 TR (Camo) + PS90 TR (Camuflaje) + PS90 TR (Камо) + PS90 TR (kamuflaż) + PS90 TR (Camo) + PS90 TR (Camo) + PS90 TR (Terepmintás) + PS90 TR (Camuflagem) + PS90 TR (カモフラージュ) + PS90 TR (迷彩) + PS90 TR (迷彩) + PS90 TR (Camo) + + + PS90 TR (Hex) + PS90 TR (Hex) + PS90 TR (Hex) + PS90 TR (Hex) + PS90 TR (Гекс) + PS90 TR (Hex) + PS90 TR (hex) + PS90 TR (Hex) + PS90 TR (Hex) + PS90 TR (Hex) + PS90 TR (ヘックス) + PS90 TR (數位蜂巢迷彩) + PS90 TR (数位蜂巢迷彩) + PS90 TR (Hex) + + + PS90 (Black) + PS90 (Černá) + PS90 (Noir) + PS90 (Negro) + PS90 (Чёрный) + PS90 (czarny) + PS90 (Schwarz) + PS90 (Nero) + PS90 (Fekete) + PS90 (Preto) + PS90 (ブラック) + PS90 (黑色) + PS90 (黑色) + PS90 (Black) + + + PS90 (Khaki) + PS90 (Khaki) + PS90 (Kaki) + PS90 (Caqui) + PS90 (Хаки) + PS90 (khaki) + PS90 (Khaki) + PS90 (Khaki) + PS90 (Khaki) + PS90 (Caqui) + PS90 (カーキ) + PS90 (沙色) + PS90 (沙色) + PS90 (Khaki) + + + PS90 (Camo) + PS90 (Kamufláž) + PS90 (Camo) + PS90 (Camuflaje) + PS90 (Камо) + PS90 (kamuflaż) + PS90 (Camo) + PS90 (Camo) + PS90 (Terepmintás) + PS90 (Camuflagem) + PS90 (カモフラージュ) + PS90 (迷彩) + PS90 (迷彩) + PS90 (Camo) + + + PS90 (Hex) + PS90 (Hex) + PS90 (Hex) + PS90 (Hex) + PS90 (Гекс) + PS90 (Hex) + PS90 (hex) + PS90 (Hex) + PS90 (Hex) + PS90 (Hex) + PS90 (ヘックス) + PS90 (數位蜂巢迷彩) + PS90 (数位蜂巢迷彩) + PS90 (Hex) + + + 5.7mm 50Rnd Mag + 5,7mm 50-as Tár + 5,7mm 50-Patronen-Magazin + Cargador de 50 balas SD de 5,7mm + Ch. 5,7mm 50Cps + Magazynek 5,7mm 50rd + 5.7mm 50náb. Zásobník + Carregador de 50 projéteis de 5.7mm + Caricatore 5.7mm 50Rnd + Магазин из 50-ти 5,7 мм + 5.7mm 50 発入り弾倉 + 5.7mm 50發 彈匣 + 5.7mm 50发 弹匣 + 5.7mm 50Rnd Mag + + + Caliber: 5.7mm<br />Rounds: 50<br />Used in: P90 + Kaliber: 5,7mm<br />Patronen: 50<br />Eingesetzt von: P90 + Kaliber: 5,7mm<br />Pociski: 50<br />Używany w: P90 + Calibre : 5,7mm<br />Cartouches : 50<br />Utilisé avec : P90 + Calibre: 5.7mm<br />Balas: 50<br />Se usa en: P90 + Калибр: 5,7 мм<br />Патронов: 50<br />Используются с: P90 + Calibro: 5.7mm<br />Munizioni: 50<br />In uso su: P90 + Ráže: 5.7mm<br />Nábojů: 50<br />Použití u: P90 + Calibre: 5.7mm<br />Cartuchos: 50<br />Usado em: P90 + Kaliber: 5,7mm<br />Lövedékek: 50<br />Használható: P90 + 口径: 5.7mm<br />装弾数: 50<br />次で使用: P90 + 口徑: 5.7mm<br />發數: 50<br />使用於: P90 + 口径: 5.7mm<br />发数: 50<br />使用于: P90 + 구경: 5.7mm<br />장탄수: 50<br />사용됨: P90 diff --git a/addons/rearm/ACE_ZeusActions.hpp b/addons/rearm/ACE_ZeusActions.hpp new file mode 100644 index 0000000000..2d05e34a4c --- /dev/null +++ b/addons/rearm/ACE_ZeusActions.hpp @@ -0,0 +1,10 @@ +class ACE_ZeusActions { + class ZeusUnits { + class GVAR(rearm) { + displayName = CSTRING(Rearm); + icon = QPATHTOF(ui\icon_rearm_interact.paa); + condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}}}); + statement = QUOTE(call FUNC(rearm_statement)); + }; + }; +}; diff --git a/addons/rearm/Cfg3DEN.hpp b/addons/rearm/Cfg3DEN.hpp new file mode 100644 index 0000000000..05eb3c05ff --- /dev/null +++ b/addons/rearm/Cfg3DEN.hpp @@ -0,0 +1,25 @@ +#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default}) +#define DEFAULT_REARMCARGO GET_NUMBER(configFile >> 'CfgVehicles' >> typeOf _this >> QQGVAR(defaultSupply),-1) + + +class Cfg3DEN { + class Object { + class AttributeCategories { + class ace_attributes { + class Attributes { + class GVAR(rearmCargo) { + displayName = CSTRING(rearmCargo_edenName); + tooltip = CSTRING(rearmCargo_edenDesc); + property = QGVAR(rearmCargo); + control = "EditShort"; + expression = QUOTE(if (_value != DEFAULT_REARMCARGO) then {[ARR_2(_this,_value)] call DFUNC(makeSource)}); + defaultValue = QUOTE(DEFAULT_REARMCARGO); + validate = "number"; + condition = "(1-objectBrain)*(1-objectAgent)"; + typeName = "NUMBER"; + }; + }; + }; + }; + }; +}; diff --git a/addons/rearm/CfgAmmo.hpp b/addons/rearm/CfgAmmo.hpp index 54ff37e279..78151796c0 100644 --- a/addons/rearm/CfgAmmo.hpp +++ b/addons/rearm/CfgAmmo.hpp @@ -60,6 +60,9 @@ class CfgAmmo { class B_20mm : BulletBase { GVAR(caliber) = 20; }; + class B_20mm_AP: BulletBase { + GVAR(caliber) = 20; + }; class B_25mm : BulletBase { GVAR(caliber) = 25; diff --git a/addons/rearm/XEH_PREP.hpp b/addons/rearm/XEH_PREP.hpp index dc34fbd9e9..79bd6c737f 100644 --- a/addons/rearm/XEH_PREP.hpp +++ b/addons/rearm/XEH_PREP.hpp @@ -10,6 +10,7 @@ PREP(disable); PREP(dropAmmo); PREP(getAllRearmTurrets); PREP(getCaliber); +PREP(getMagazineName); PREP(getMaxMagazines); PREP(getNeedRearmMagazines); PREP(getSupplyCount); @@ -21,7 +22,9 @@ PREP(handleRespawn); PREP(handleUnconscious); PREP(hasEnoughSupply); PREP(initSupplyVehicle); +PREP(isSource); PREP(makeDummy); +PREP(makeSource); PREP(moduleRearmSettings); PREP(pickUpAmmo); PREP(readSupplyCounter); diff --git a/addons/rearm/XEH_postInit.sqf b/addons/rearm/XEH_postInit.sqf index 1fd9462df8..3da59af9bd 100644 --- a/addons/rearm/XEH_postInit.sqf +++ b/addons/rearm/XEH_postInit.sqf @@ -9,6 +9,11 @@ GVAR(configTypesAdded) = []; }] call CBA_fnc_addEventHandler; ["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler; +[QGVAR(initSupplyVehicle), { + TRACE_1("initSupplyVehicle EH",_this); // Warning: this can run before settings are init + [FUNC(initSupplyVehicle), _this] call EFUNC(common,runAfterSettingsInit); +}] call CBA_fnc_addEventHandler; + ["vehicle", { params ["_unit"]; [_unit] call FUNC(dropAmmo); @@ -24,3 +29,6 @@ if (isServer) then { [QGVAR(rearmSuccessEH), LINKFUNC(rearmSuccess)] call CBA_fnc_addEventHandler; [QGVAR(rearmSuccessLocalEH), LINKFUNC(rearmSuccessLocal)] call CBA_fnc_addEventHandler; + +GVAR(magazineNameCache) = [] call CBA_fnc_createNamespace; +GVAR(originalMagazineNames) = []; diff --git a/addons/rearm/XEH_preInit.sqf b/addons/rearm/XEH_preInit.sqf index 9361d05015..10156a7d1c 100644 --- a/addons/rearm/XEH_preInit.sqf +++ b/addons/rearm/XEH_preInit.sqf @@ -8,4 +8,13 @@ PREP_RECOMPILE_END; #include "initSettings.sqf" +DFUNC(rearm_statement) = { // moved from config because of build problems + TRACE_1("rearm_statement",_this); + { + if (_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}) then { + [objNull, _x] call FUNC(rearmEntireVehicleSuccess); + }; + } forEach (curatorSelected select 0); +}; + ADDON = true; diff --git a/addons/rearm/config.cpp b/addons/rearm/config.cpp index 348ca8751b..0a250d0ff9 100644 --- a/addons/rearm/config.cpp +++ b/addons/rearm/config.cpp @@ -15,8 +15,9 @@ class CfgPatches { }; #include "ACE_Settings.hpp" +#include "ACE_ZeusActions.hpp" #include "CfgEventHandlers.hpp" - +#include "Cfg3DEN.hpp" #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" #include "CfgVehicles.hpp" diff --git a/addons/rearm/functions/fnc_addRearmActions.sqf b/addons/rearm/functions/fnc_addRearmActions.sqf index a714a1987a..79b976f322 100644 --- a/addons/rearm/functions/fnc_addRearmActions.sqf +++ b/addons/rearm/functions/fnc_addRearmActions.sqf @@ -20,6 +20,10 @@ params ["_truck"]; private _vehicles = nearestObjects [_truck, ["AllVehicles"], 20]; _vehicles = _vehicles select {(_x != _truck) && {!(_x isKindOf "CAManBase")} && {!(_x getVariable [QGVAR(disabled), false])}}; +if (missionNamespace getVariable [QEGVAR(mk6mortar,useAmmoHandling), false]) then { + _vehicles = _vehicles select {!(_x isKindOf "Mortar_01_base_F")}; +}; + private _vehicleActions = []; { private _vehicle = _x; @@ -56,7 +60,7 @@ private _vehicleActions = []; { private _action = [ _x, - getText(configFile >> "CfgMagazines" >> _x >> "displayName"), + _x call FUNC(getMagazineName), getText(configFile >> "CfgMagazines" >> _x >> "picture"), {_this call FUNC(takeAmmo)}, {true}, diff --git a/addons/rearm/functions/fnc_canReadSupplyCounter.sqf b/addons/rearm/functions/fnc_canReadSupplyCounter.sqf index 66ab8534bd..824eb07f78 100644 --- a/addons/rearm/functions/fnc_canReadSupplyCounter.sqf +++ b/addons/rearm/functions/fnc_canReadSupplyCounter.sqf @@ -19,10 +19,8 @@ params ["_truck", "_unit"]; (alive _unit) -&& {_unit isKindOf "CAManBase"} -&& {local _unit} && {alive _truck} && {(_truck distance _unit) < REARM_ACTION_DISTANCE} && {GVAR(supply) > 0} && {[_unit, _truck, ["IsNotInside"]] call EFUNC(common,canInteractWith)} // manually added actions need this - +&& {(_truck getVariable [QGVAR(currentSupply), 0]) >= 0} diff --git a/addons/rearm/functions/fnc_canStoreAmmo.sqf b/addons/rearm/functions/fnc_canStoreAmmo.sqf index 24d1901690..b0f22b6e07 100644 --- a/addons/rearm/functions/fnc_canStoreAmmo.sqf +++ b/addons/rearm/functions/fnc_canStoreAmmo.sqf @@ -19,9 +19,8 @@ params ["_truck", "_unit"]; (alive _unit) -&& {_unit isKindOf "CAManBase"} -&& {local _unit} && {!isNull (_unit getVariable [QGVAR(dummy), objNull])} && {alive _truck} && {(_truck distance _unit) < REARM_ACTION_DISTANCE} && {[_unit, _truck, ["IsNotInside"]] call EFUNC(common,canInteractWith)} // manually added actions need this +&& {(_truck getVariable [QGVAR(currentSupply), 0]) >= 0} diff --git a/addons/rearm/functions/fnc_canTakeAmmo.sqf b/addons/rearm/functions/fnc_canTakeAmmo.sqf index 911ffc8834..5b0a41f9b2 100644 --- a/addons/rearm/functions/fnc_canTakeAmmo.sqf +++ b/addons/rearm/functions/fnc_canTakeAmmo.sqf @@ -19,9 +19,8 @@ params ["_truck", "_unit"]; (alive _unit) -&& {_unit isKindOf "CAManBase"} -&& {local _unit} && {alive _truck} && {(_truck distance _unit) < REARM_ACTION_DISTANCE} && {isNull (_unit getVariable [QGVAR(dummy), objNull])} && {[_unit, _truck, ["IsNotInside"]] call EFUNC(common,canInteractWith)} // manually added actions need this +&& {(_truck getVariable [QGVAR(currentSupply), 0]) >= 0} diff --git a/addons/rearm/functions/fnc_getCaliber.sqf b/addons/rearm/functions/fnc_getCaliber.sqf index 6c37deb938..c43c0ecbf2 100644 --- a/addons/rearm/functions/fnc_getCaliber.sqf +++ b/addons/rearm/functions/fnc_getCaliber.sqf @@ -33,7 +33,7 @@ if (_tmpCal > 0) then { if (_tmpCal > 0) then { _cal = _tmpCal; } else { - diag_log format ["[ACE] ERROR: Undefined Ammo [%1 : %2]", _ammo, inheritsFrom (configFile >> "CfgAmmo" >> _ammo)]; + diag_log format ["[ACE] ERROR: Undefined Ammo [%1 : %2]", _ammo, configName inheritsFrom (configFile >> "CfgAmmo" >> _ammo)]; if (_ammo isKindOf "BulletBase") then { _cal = 8; } else { diff --git a/addons/rearm/functions/fnc_getMagazineName.sqf b/addons/rearm/functions/fnc_getMagazineName.sqf new file mode 100644 index 0000000000..1871cedbf7 --- /dev/null +++ b/addons/rearm/functions/fnc_getMagazineName.sqf @@ -0,0 +1,46 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Gets a non-ambigious display name for a magazine using displayNameShort (AP/HE) + * + * Arguments: + * 0: Magazine Classname + * + * Return Value: + * Display Name + * + * Example: + * ["B_20mm_AP"] call ace_rearm_fnc_getMagazineName + * + * Public: No + */ + +params ["_className"]; +TRACE_1("getMagazineName",_className); + +private _magName = GVAR(magazineNameCache) getVariable _className; +if (isNil "_magName") then { + private _displayName = getText(configFile >> "CfgMagazines" >> _className >> "displayName"); + if (_displayName == "") then { + _displayName = _className; + WARNING_1("Magazine is missing display name [%1]",_className); + }; + + GVAR(magazineNameCache) setVariable [_className, _displayName]; + GVAR(originalMagazineNames) pushBack _displayName; + TRACE_2("Adding to cache",_className,_displayName); + + // go through all existing cache entries and update if there now are duplicates + { + private _xMagName = GVAR(magazineNameCache) getVariable _x; + if ((_xMagName == _displayName) && {({_xMagName == _x} count GVAR(originalMagazineNames)) > 1}) then { + private _xMagName = format ["%1: %2", _displayName, getText(configFile >> "CfgMagazines" >> _x >> "displayNameShort")]; + GVAR(magazineNameCache) setVariable [_x, _xMagName]; + TRACE_2("Using unique name",_x,_xMagName); + }; + } forEach (allVariables GVAR(magazineNameCache)); + + _magName = GVAR(magazineNameCache) getVariable _className; +}; + +_magName diff --git a/addons/rearm/functions/fnc_hasEnoughSupply.sqf b/addons/rearm/functions/fnc_hasEnoughSupply.sqf index 232d6776ad..1af5d96a50 100644 --- a/addons/rearm/functions/fnc_hasEnoughSupply.sqf +++ b/addons/rearm/functions/fnc_hasEnoughSupply.sqf @@ -1,20 +1,20 @@ #include "script_component.hpp" /* -* Author: GitHawk -* Check whether enough supply is left to take the magazine. -* -* Arguments: -* 0: Ammo Truck -* 1: Magazine Classname -* -* Return Value: -* Enough supply -* -* Example: -* [ammo_truck, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_hasEnoughSupply -* -* Public: No -*/ + * Author: GitHawk + * Check whether enough supply is left to take the magazine. + * + * Arguments: + * 0: Ammo Truck + * 1: Magazine Classname + * + * Return Value: + * Enough supply + * + * Example: + * [ammo_truck, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_hasEnoughSupply + * + * Public: No + */ params ["_truck", "_magazineClass"]; diff --git a/addons/rearm/functions/fnc_initSupplyVehicle.sqf b/addons/rearm/functions/fnc_initSupplyVehicle.sqf index 9ca8728833..72b807d810 100644 --- a/addons/rearm/functions/fnc_initSupplyVehicle.sqf +++ b/addons/rearm/functions/fnc_initSupplyVehicle.sqf @@ -68,6 +68,8 @@ if (_oldRearmConfig || {_configSupply > 0}) then { WARNING_1("Actions already present on [%1]. Old Compat PBO?",_typeOf); }; } else { + if (_vehicle getVariable [QGVAR(objectActionsAdded), false]) exitWith {TRACE_1("Actions already added to object",_vehicle);}; + _vehicle setVariable [QGVAR(objectActionsAdded), true]; TRACE_1("Adding Object Actions",_typeOf); [_vehicle, 0, ["ACE_MainActions"], _actionReadSupplyCounter] call EFUNC(interact_menu,addActionToObject); [_vehicle, 0, ["ACE_MainActions"], _actionTakeAmmo] call EFUNC(interact_menu,addActionToObject); diff --git a/addons/rearm/functions/fnc_isSource.sqf b/addons/rearm/functions/fnc_isSource.sqf new file mode 100644 index 0000000000..175ab60f8e --- /dev/null +++ b/addons/rearm/functions/fnc_isSource.sqf @@ -0,0 +1,30 @@ +#include "script_component.hpp" +/* + * Author: shukari + * Returns if vehicle or object is a rearm source. + * + * Arguments: + * 0: target + * 1: check for vanilla rearm vehicle (default: false) + * + * Return Value: + * None + * + * Example: + * [cursorObject] call ace_rearm_fnc_isSource + * + * Public: Yes + */ +params [ + ["_target", objNull, [objNull]], + ["_testVanillaRearm", false, [false]] + ]; + +if ((_target getVariable [QGVAR(currentSupply), 0]) < 0) exitWith {false}; + +private _vehCfg = configFile >> "CfgVehicles" >> typeOf _target; +private _vanillaCargoConfig = getNumber (_vehCfg >> "transportAmmo"); +private _rearmCargoConfig = getNumber (_vehCfg >> QGVAR(defaultSupply)); +private _supplyVehicle = _target getVariable [QGVAR(isSupplyVehicle), false]; + +_rearmCargoConfig > 0 || {_supplyVehicle} || {_testVanillaRearm && _vanillaCargoConfig > 0} diff --git a/addons/rearm/functions/fnc_makeSource.sqf b/addons/rearm/functions/fnc_makeSource.sqf new file mode 100644 index 0000000000..c96c3a214a --- /dev/null +++ b/addons/rearm/functions/fnc_makeSource.sqf @@ -0,0 +1,56 @@ +#include "script_component.hpp" +/* + * Author: shukari (template from refuel makeSource) + * Makes an object into a rearm source. + * Run on server only. + * + * Arguments: + * 0: Rearm Source + * 1: Rearm amount (default: 0) + * 2: add rearm amount instead of set (default: false) + * + * Return Value: + * None + * + * Example: + * [cursorObject, 1200] call ace_rearm_fnc_makeSource + * + * Public: Yes + */ +if (!isServer) exitWith {}; + +// Only run this after the settings are initialized +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(makeSource), _this]; +}; + +params [ + ["_source", objNull, [objNull]], + ["_rearmCargo", 0, [0]], + ["_addToCurrent", false, [false]] + ]; +TRACE_3("makeSource",_source,_rearmCargo,_addToCurrent); + +if (isNull _source) exitWith {}; + +private _currentSupply = if (_addToCurrent) then { + _source getVariable [QGVAR(currentSupply), 0] +} else { + 0 +}; + +_source setVariable [QGVAR(currentSupply), _currentSupply + _rearmCargo, true]; + +private _rearmCargoConfig = getNumber (configFile >> "CfgVehicles" >> typeOf _source >> QGVAR(defaultSupply)); + +// already initialized because this is a config rearm vehicle +if (_rearmCargoConfig > 0 || _source getVariable [QGVAR(isSupplyVehicle), false]) exitWith {}; + +_source setVariable [QGVAR(isSupplyVehicle), true, true]; + +// check if menu already exists +if (!isNil {_source getVariable QGVAR(initSupplyVehicle_jipID)}) exitWith {}; + +private _jipID = [QGVAR(initSupplyVehicle), [_source]] call CBA_fnc_globalEventJIP; +[_jipID, _source] call CBA_fnc_removeGlobalEventJIP; +_source setVariable [QGVAR(initSupplyVehicle_jipID), _jipID]; diff --git a/addons/rearm/functions/fnc_readSupplyCounter.sqf b/addons/rearm/functions/fnc_readSupplyCounter.sqf index 31edaa2684..11abdc3ae8 100644 --- a/addons/rearm/functions/fnc_readSupplyCounter.sqf +++ b/addons/rearm/functions/fnc_readSupplyCounter.sqf @@ -54,7 +54,7 @@ if (GVAR(supply) == 1) then { if !(isNil "_magazines") then { { _x params ["_magazineClass", "_rounds"]; - private _line = format ["%1: %2", getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), _rounds]; + private _line = format ["%1: %2", _magazineClass call FUNC(getMagazineName), _rounds]; _numChars = _numChars max (count _line); _text = format ["%1
%2", _text, _line]; _supply = _supply + 0.5; diff --git a/addons/rearm/functions/fnc_rearm.sqf b/addons/rearm/functions/fnc_rearm.sqf index bf703e9b6b..2556096c11 100644 --- a/addons/rearm/functions/fnc_rearm.sqf +++ b/addons/rearm/functions/fnc_rearm.sqf @@ -36,11 +36,7 @@ if ((count _needRearmMagsOfClass) == 0) exitWith {ERROR_2("Could not find turret private _currentRearmableMag = _needRearmMagsOfClass select 0; _currentRearmableMag params ["", "_turretPath", "", "_pylon", "", "_magazineCount"]; -private _magazineDisplayName = getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"); -if (_magazineDisplayName == "") then { - _magazineDisplayName = _magazineClass; - ERROR_1("Magazine is missing display name [%1]",_magazineClass); -}; +private _magazineDisplayName = _magazineClass call FUNC(getMagazineName); [ TIME_PROGRESSBAR(REARM_DURATION_REARM select _idx), diff --git a/addons/rearm/functions/fnc_rearmEntireVehicle.sqf b/addons/rearm/functions/fnc_rearmEntireVehicle.sqf index b136c5d267..b3147f976c 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicle.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicle.sqf @@ -23,7 +23,7 @@ TRACE_3("rearmEntireVehicle",_truck,_player,_vehicle); [ TIME_PROGRESSBAR(10), [_truck, _vehicle, _player], - FUNC(rearmEntireVehicleSuccess), + {(_this select 0) call FUNC(rearmEntireVehicleSuccess)}, "", format [localize LSTRING(BasicRearmAction), getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], { diff --git a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf index f3eecbb245..699b37ed40 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf @@ -4,21 +4,19 @@ * Rearm an entire vehicle. * * Arguments: - * 0: Rearm information - * 0: Ammo Truck - * 1: Vehicle + * 0: Ammo Truck + * 1: Vehicle * * Return Value: * None * * Example: - * [[ammo_truck, tank]] call ace_rearm_fnc_rearmEntireVehicleSuccess + * [ammo_truck, tank] call ace_rearm_fnc_rearmEntireVehicleSuccess * * Public: No */ -params ["_args"]; -_args params ["_truck", "_vehicle"]; +params ["_truck", "_vehicle"]; TRACE_2("rearmEntireVehicleSuccess",_truck,_vehicle); if (isServer) then { diff --git a/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf b/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf index 90845648ba..6d48cd338f 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicleSuccessLocal.sqf @@ -24,30 +24,38 @@ TRACE_3("rearmEntireVehicleSuccessLocal",_truck,_vehicle,_turretPath); private _magazines = ([_vehicle] call FUNC(getNeedRearmMagazines)) select {(_x select 1) isEqualTo _turretPath}; { _x params ["_magazineClass", "_magTurretPath", "_isPylonMag", "_pylonIndex", "_maxMagazines", "_currentMagazines", "_maxRoundsPerMag", "_currentRounds"]; - + // Array of planned ammo counts in every magazine after the rearm is complete private _plannedRounds = +_currentRounds; - + // Trying to fill all existing magazines. { if (_x < _maxRoundsPerMag) then { - if ((GVAR(supply) == 0) || {[_truck, _magazineClass, (_maxRoundsPerMag - _x)] call FUNC(removeMagazineFromSupply)}) then { + if ( + GVAR(supply) == 0 + || {isNull _truck} // zeus rearm + || {[_truck, _magazineClass, (_maxRoundsPerMag - _x)] call FUNC(removeMagazineFromSupply)} + ) then { _plannedRounds set [_forEachIndex, _maxRoundsPerMag]; }; }; } forEach _currentRounds; - + // Trying to add new full magazines, if there is space left. if (_currentMagazines < _maxMagazines) then { for "_idx" from 1 to (_maxMagazines - _currentMagazines) do { - if ((GVAR(supply) == 0) || {[_truck, _magazineClass, _maxRoundsPerMag] call FUNC(removeMagazineFromSupply)}) then { + if ( + GVAR(supply) == 0 + || {isNull _truck} // zeus rearm + || {[_truck, _magazineClass, _maxRoundsPerMag] call FUNC(removeMagazineFromSupply)} + ) then { _plannedRounds pushBack _maxRoundsPerMag; }; }; }; - + TRACE_2("rearming",_x,_plannedRounds); - + // Updating new ammo counts to vehicle. if (_isPylonMag) then { _vehicle setAmmoOnPylon [_pylonIndex, (_plannedRounds select 0)]; diff --git a/addons/rearm/functions/fnc_rearmSuccessLocal.sqf b/addons/rearm/functions/fnc_rearmSuccessLocal.sqf index d141ca4a64..922d25b646 100644 --- a/addons/rearm/functions/fnc_rearmSuccessLocal.sqf +++ b/addons/rearm/functions/fnc_rearmSuccessLocal.sqf @@ -30,7 +30,7 @@ if (_pylon > 0) exitWith { if (GVAR(level) == 1) then { // Fill magazine completely if (_turretPath isEqualTo [-1]) then {_turretPath = [];}; // Convert back to pylon turret format - TRACE_2("",_pylon,_magazineClass,_rounds); + TRACE_3("",_pylon,_magazineClass,_rounds); _vehicle setPylonLoadOut [_pylon, _magazineClass, true, _turretPath]; [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _rounds, getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), @@ -40,7 +40,7 @@ if (_pylon > 0) exitWith { if (_turretPath isEqualTo [-1]) then {_turretPath = [];}; // Convert back to pylon turret format private _currentCount = _vehicle ammoOnPylon _pylon; private _newCount = ((_currentCount max 0) + _numRounds) min _rounds; - TRACE_2("",_pylon,_magazineClass,_newCount); + TRACE_3("",_pylon,_magazineClass,_newCount); _vehicle setPylonLoadOut [_pylon, _magazineClass, true, _turretPath]; _vehicle setAmmoOnPylon [_pylon, _newCount]; [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _numRounds, @@ -51,62 +51,43 @@ if (_pylon > 0) exitWith { private _currentRounds = 0; private _maxMagazines = [_vehicle, _turretPath, _magazineClass] call FUNC(getMaxMagazines); +private _ammoCounts = [_vehicle, _turretPath, _magazineClass] call FUNC(getTurretMagazineAmmo); +TRACE_3("start",_magazineClass,_maxMagazines,_ammoCounts); -if (_maxMagazines == 1) then { - private _currentMagazines = { _x == _magazineClass } count (_vehicle magazinesTurret _turretPath); - if (_currentMagazines == 0 && {!(_turretPath isEqualTo [-1])}) then { - // Driver gun will always retain it's magazines - _vehicle addMagazineTurret [_magazineClass, _turretPath]; - _vehicle setMagazineTurretAmmo [_magazineClass, 0, _turretPath]; +private _ammoToAdd = if (GVAR(level) == 2) then {_numRounds} else {_rounds}; +private _ammoAdded = 0; +private _arrayModified = false; // skip needing to remove and re-add mags, if we are only adding new ones + +{ + if (_x < _rounds) then { + private _xAdd = _ammoToAdd min (_rounds - _x); + _ammoToAdd = _ammoToAdd - _xAdd; + _ammoAdded = _ammoAdded + _xAdd; + TRACE_3("adding to existing mag",_forEachIndex,_x,_xAdd); + _ammoCounts set [_forEachIndex, _x + _xAdd]; + _arrayModified = true; }; - if (GVAR(level) == 1) then { - // Fill magazine completely - _vehicle setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; - [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _rounds, - getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; +} forEach _ammoCounts; + +while {((count _ammoCounts) < _maxMagazines) && {_ammoToAdd > 0}} do { + private _xAdd = _ammoToAdd min _rounds; + _ammoToAdd = _ammoToAdd - _xAdd; + _ammoAdded = _ammoAdded + _xAdd; + _ammoCounts pushBack _xAdd; + if (!_arrayModified) then { + TRACE_1("adding new mag to array",_xAdd); } else { - // Fill only at most _numRounds - _vehicle setMagazineTurretAmmo [_magazineClass, ((_vehicle magazineTurretAmmo [_magazineClass, _turretPath]) + _numRounds) min _rounds, _turretPath]; - [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _numRounds, - getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; - }; -} else { - for "_idx" from 1 to (_maxMagazines+1) do { - _currentRounds = _vehicle magazineTurretAmmo [_magazineClass, _turretPath]; - if (_currentRounds > 0 || {_idx == (_maxMagazines+1)}) exitWith { - if (_idx == (_maxMagazines+1) && {!(_turretPath isEqualTo [-1])}) then { - _vehicle addMagazineTurret [_magazineClass, _turretPath]; - }; - if (GVAR(level) == 2) then { - //hint format ["Target: %1\nTurretPath: %2\nNumMagazines: %3\nMaxMagazines %4\nMagazine: %5\nNumRounds: %6\nMagazine: %7", _vehicle, _turretPath, _numMagazines, _maxMagazines, _currentRounds, _numRounds, _magazineClass]; - // Fill only at most _numRounds - if ((_currentRounds + _numRounds) > _rounds) then { - _vehicle setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; - if (_numMagazines < _maxMagazines) then { - _vehicle addMagazineTurret [_magazineClass, _turretPath]; - _vehicle setMagazineTurretAmmo [_magazineClass, _currentRounds + _numRounds - _rounds, _turretPath]; - }; - } else { - _vehicle setMagazineTurretAmmo [_magazineClass, _currentRounds + _numRounds, _turretPath]; - }; - [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _numRounds, - getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; - } else { - // Fill current magazine completely and fill next magazine partially - _vehicle setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; - if (_numMagazines < _maxMagazines) then { - _vehicle addMagazineTurret [_magazineClass, _turretPath]; - _vehicle setMagazineTurretAmmo [_magazineClass, _currentRounds, _turretPath]; - }; - [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _rounds, - getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; - }; - }; - _vehicle removeMagazineTurret [_magazineClass, _turretPath]; - _numMagazines = _numMagazines - 1; + TRACE_1("adding new mag directly",_xAdd); + _vehicle addMagazineTurret [_magazineClass, _turretPath, _xAdd]; }; }; +TRACE_3("finish",_ammoToAdd,_ammoAdded,_arrayModified); +if (_arrayModified) then { // only need to call this if we modified the array, otherwise they are already added + [_vehicle, _turretPath, _magazineClass, _ammoCounts] call FUNC(setTurretMagazineAmmo); +}; + +if (_ammoAdded == 0) exitWith {ERROR_1("could not load any ammo - %1",_this);}; + +[QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _ammoAdded, +_magazineClass call FUNC(getMagazineName), +getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; diff --git a/addons/rearm/functions/fnc_storeAmmo.sqf b/addons/rearm/functions/fnc_storeAmmo.sqf index 7d4427e1a2..18b316d601 100644 --- a/addons/rearm/functions/fnc_storeAmmo.sqf +++ b/addons/rearm/functions/fnc_storeAmmo.sqf @@ -21,6 +21,8 @@ params ["_truck", "_unit"]; private _attachedDummy = _unit getVariable [QGVAR(dummy), objNull]; if (isNull _attachedDummy) exitwith {}; +private _magazineClass = _attachedDummy getVariable [QGVAR(magazineClass), "#noVar"]; + [ TIME_PROGRESSBAR(5), [_unit, _truck, _attachedDummy], @@ -31,7 +33,7 @@ if (isNull _attachedDummy) exitwith {}; [_unit, true, true] call FUNC(dropAmmo); }, "", - format [localize LSTRING(StoreAmmoAction), getText(configFile >> "CfgMagazines" >> (_attachedDummy getVariable QGVAR(magazineClass)) >> "displayName"), getText(configFile >> "CfgVehicles" >> (typeOf _truck) >> "displayName")], + format [localize LSTRING(StoreAmmoAction), _magazineClass call FUNC(getMagazineName), getText(configFile >> "CfgVehicles" >> (typeOf _truck) >> "displayName")], {true}, ["isnotinside"] ] call EFUNC(common,progressBar); diff --git a/addons/rearm/functions/fnc_takeAmmo.sqf b/addons/rearm/functions/fnc_takeAmmo.sqf index 1576044eb1..f4a7339edc 100644 --- a/addons/rearm/functions/fnc_takeAmmo.sqf +++ b/addons/rearm/functions/fnc_takeAmmo.sqf @@ -32,7 +32,7 @@ REARM_HOLSTER_WEAPON; [_unit, _magazineClass, _truck], FUNC(takeSuccess), "", - format [localize LSTRING(TakeAction), getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], + format [localize LSTRING(TakeAction), _magazineClass call FUNC(getMagazineName), getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], {true}, ["isnotinside"] ] call EFUNC(common,progressBar); diff --git a/addons/rearm/stringtable.xml b/addons/rearm/stringtable.xml index 086ed40eaf..31210642f4 100644 --- a/addons/rearm/stringtable.xml +++ b/addons/rearm/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,11 +8,13 @@ 整裝 整装 再武装 + Réarmement + Dozbrajanie Rearm Settings Aufmunitioniereinstellungen - Ustawienia przezbrajania + Ustawienia dozbrajania Настройки перевооружения Ajustes de rearme Nastavení přezbrojení @@ -27,7 +29,7 @@ This module allows you to tweak rearm system settings. Mittels diesem Modul kann das Aufmunitioniersystem angepasst werden. - Ten moduł pozwala dostosować ustawienia przezbrajania. + Ten moduł pozwala dostosować ustawienia dozbrajania. Этот модуль позволяет изменить настройки системы перевооружения. Este módulo permite que você ajuste o sistema de rearme. Tento modul umožňuje upravovat systém přezbrojení. @@ -42,14 +44,14 @@ Rearm Amount Aufmunitioniermenge - Szybkość przezbrajania + Szybkość dozbrajania Количество вооружения Quantidade de rearme Rychlost přezbrojení Ammontare Riarmo Velocidad de rearme Quantité à réarmer - 再武装できる量 + 再武装が可能な量 재보급 양 整装所需时间 整裝所需時間 @@ -57,7 +59,7 @@ How fast should a vehicle be rearmed? Wie schnell soll ein Fahrzeug aufmunitioniert werden? - Jak szybko pojazd zostanie przezbrojony? + Jak szybko pojazd zostanie dozbrajania? Как быстро техника должна перевооружаться? Quão rápido o veículo deve ser rearmado? Jak rychle bude vozidlo přezbrojeno? @@ -123,6 +125,7 @@ 彈藥補給 Zapas amunicji 탄약 보급 + Approvisionnement en munitions How much ammunition does an ammo truck carry? @@ -133,6 +136,7 @@ 彈藥卡車會攜帶多少的彈藥? Ile amunicji przewozi ciężarówka? 탄약 차량은 얼마나 많은 양의 탄약을 가질 수 있음? + Quelle quantité de munitions un camion doit-il transporter ? Unlimited ammo supply @@ -143,6 +147,7 @@ 無限彈藥 Nielimitowany zapas amunicji 무한의 탄약 + Approvisionnement en munitions illimité Limited ammo supply based on caliber @@ -153,6 +158,7 @@ 基於口徑限制彈藥數量 Zapas amunicji zależny od kalibru 구경에 따라 제한된 탄약 + Approvisionnement en munitions limité basé sur le calibre. Only specific Magazines @@ -163,6 +169,7 @@ 只有指定的彈藥 Tylko konkretne magazynki 특정 탄약만 + Seulement des chargeurs spécifiques Check remaining ammunition @@ -173,6 +180,7 @@ 檢查剩餘的彈藥 Sprawdź ilość amunicji 남은 탄약 확인 + Vérifier les munitions restantes Checking remaining ammunition... @@ -183,16 +191,18 @@ 正在檢查剩餘的彈藥中... Sprawdzanie ilości amunicji... 남은 탄약 확인중... + Vérification des munitions restantes... There is ammunition worth %1 points left. Es ist noch Munition für %1 Punkte übrig. E' presente una penalità delle munizioni %1 punti rimanenti. - 弾薬は%1残っている + 弾薬は%1残っています。 还剩下%1多的弹药. 還剩下%1多的彈藥. Pozostało %1 punktów amunicji. 여기에는 최소 %1 포인트의 탄약이 남았습니다. + Il reste des munitions d'une valeur de %1 points. The following ammunition is left:%1 @@ -203,6 +213,7 @@ 以下剩餘的彈藥:%1 Pozostała amunicja: %1 다음의 탄약이 남음 : %1 + Il reste les munitions suivantes %1 There is no ammunition left. @@ -213,11 +224,12 @@ 已經沒有剩餘的彈藥了. Brak amunicji w zapasie. 여기에는 탄약이 남지 않았습니다. + Il n'y a plus de munitions Rearm Aufmunitionieren - Przezbrój + Dozbrój Перевооружить Rearmar Přezbrojit @@ -232,7 +244,7 @@ Rearming %1 with %2... Munitioniere %1 auf mit %2... - Przezbrajanie %1 przy pomocy %2... + Dozbrajania %1 przy pomocy %2... Перевооружается %1 снарядами %2... Rearmando %1 com %2... Přezbrojuji %1 za pomoci %2... @@ -247,7 +259,7 @@ Rearming %1... Munitioniere %1 auf... - Przezbrajanie %1... + Dozbrajania %1... Перевооружается %1... Rearmando %1... Přezbrojuji %1... @@ -269,7 +281,7 @@ Sto prendendo %1 per %2... Tomando %1 para %2... Prend %1 pour %2... - %1から%2を取得中… + %1を%2用として取得中… %2를 위해 %1 가져오는중... 拿取%1给%2中... 拿取%1給%2中... @@ -283,7 +295,7 @@ Vít munici Prendi munizioni Tomar munición - Prendre la munition + Prendre des munitions 弾薬を取る 탄약 가지기 取得弹药 @@ -298,7 +310,7 @@ Sebrat munici Raccogli munizioni Levantar munición - Ramasser la munition + Ramasser les munitions 弾薬を拾得する 탄약 줍기 捡起弹药 @@ -313,7 +325,7 @@ Uskladnit munici Riponi munizioni Guardar munición - Stocker la munition + Stocker les munitions 弾薬を格納する 탄약 보관하기 储存弹药 @@ -351,14 +363,14 @@ Rearmed %1 rounds of %2 on %3 %3 wurde mit %1 Patronen %2 aufmunitioniert - Przezbrojono %1 pocisków %2 na %3 + Dozbrajania %1 pocisków %2 na %3 Перевооружено %1 снарядов %2 на %3 Rearmando %1 cartuchos de %2 em %3 Přezbrojeno % nábojů z %2 u %3 Riarmati %1 colpi di %2 su %3 Rearmadas %1 rondas de %2 en %3 %1 balles réarmées de %2 dans %3 - %1発の%2を%3から装填しました + %1発の%2を%3に装填しました %3에 2%의 %1 탄약 재보급 整装了%1发%2到%3上 整裝了%1發%2到%3上 @@ -573,5 +585,19 @@ FAB-250M-54 FAB-250M-54 + + Rearm Cargo + Munitionsvorrat + 再武装用カーゴ + Ładunek Dozbrajający + Rifornimento Munizioni + + + The cargo for rearming (-1 disable) + Der Munitionsvorrat, zum Aufmunitionieren von Fahrzeugen (-1 deaktiviert) + カーゴからの再武装 (-1 で無効化) + Ładunek do dozbrajania (-1 wyłączy) + Il rifornimento delle munizioni (-1 per disabilitarlo) + diff --git a/addons/recoil/CfgEventHandlers.hpp b/addons/recoil/CfgEventHandlers.hpp index c0726f161a..becf395052 100644 --- a/addons/recoil/CfgEventHandlers.hpp +++ b/addons/recoil/CfgEventHandlers.hpp @@ -13,6 +13,6 @@ class Extended_PreInit_EventHandlers { class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/recoil/functions/fnc_camshake.sqf b/addons/recoil/functions/fnc_camshake.sqf index fff9fecd6c..f5fa820b65 100644 --- a/addons/recoil/functions/fnc_camshake.sqf +++ b/addons/recoil/functions/fnc_camshake.sqf @@ -69,6 +69,6 @@ private _camshake = [ BASE_FREQ ]; -TRACE_4("addCamShake",_recoil,_powerCoef,_powerMod,_camshake);\ +TRACE_4("addCamShake",_recoil,_powerCoef,_powerMod,_camshake); addCamShake _camshake; diff --git a/addons/refuel/XEH_postInit.sqf b/addons/refuel/XEH_postInit.sqf index 43933f2cf5..e6c0ad5b93 100644 --- a/addons/refuel/XEH_postInit.sqf +++ b/addons/refuel/XEH_postInit.sqf @@ -62,36 +62,26 @@ GVAR(actions) = [ ]; // init menu for config refuel vehicles -private _sourceClasses = []; -{ - private _fuelCargo = getNumber (_x >> QGVAR(fuelCargo)); - if (_fuelCargo > 0 || {_fuelCargo == REFUEL_INFINITE_FUEL}) then { - private _sourceClass = configName _x; - // check if we can use actions with inheritance - if ( - !isText (_x >> "EventHandlers" >> "CBA_Extended_EventHandlers" >> "init") // addActionToClass relies on XEH init - || {configName _x isKindOf "Static"} // CBA_fnc_addClassEventHandler doesn't support "Static" class - ) then { - if (2 == getNumber (_x >> "scope")) then { - [_sourceClass, 0, ["ACE_MainActions"], GVAR(mainAction)] call EFUNC(interact_menu,addActionToClass); - { - [_sourceClass, 0, ["ACE_MainActions", QGVAR(Refuel)], _x] call EFUNC(interact_menu,addActionToClass); - } forEach GVAR(actions); - TRACE_1("add menu to static",_sourceClass); - }; - } else { - if (0 == {_sourceClass isKindOf _x} count _sourceClasses) then { - _sourceClasses pushBack _sourceClass; - [_sourceClass, 0, ["ACE_MainActions"], GVAR(mainAction), true] call EFUNC(interact_menu,addActionToClass); - { - [_sourceClass, 0, ["ACE_MainActions", QGVAR(Refuel)], _x, true] call EFUNC(interact_menu,addActionToClass); - } forEach GVAR(actions); - TRACE_1("add menu to dynamic",_sourceClass); - }; - }; - }; -} forEach ('true' configClasses (configFile >> "CfgVehicles")); +private _cacheRefuelClasses = call (uiNamespace getVariable [QGVAR(cacheRefuelClasses), {[[],[]]}]); +_cacheRefuelClasses params [["_staticClasses", [], [[]]], ["_dynamicClasses", [], [[]]]]; +{ + private _className = _x; + [_className, 0, ["ACE_MainActions"], GVAR(mainAction)] call EFUNC(interact_menu,addActionToClass); + { + [_className, 0, ["ACE_MainActions", QGVAR(Refuel)], _x] call EFUNC(interact_menu,addActionToClass); + } forEach GVAR(actions); + TRACE_1("add menu to static",_x); +} forEach _staticClasses; + +{ + private _className = _x; + [_className, 0, ["ACE_MainActions"], GVAR(mainAction), true] call EFUNC(interact_menu,addActionToClass); + { + [_className, 0, ["ACE_MainActions", QGVAR(Refuel)], _x, true] call EFUNC(interact_menu,addActionToClass); + } forEach GVAR(actions); + TRACE_1("add menu to dynamic",_x); +} forEach _dynamicClasses; #ifdef DRAW_HOOKS_POS addMissionEventHandler ["Draw3D", { diff --git a/addons/refuel/XEH_preStart.sqf b/addons/refuel/XEH_preStart.sqf index 022888575e..fa5fe4acda 100644 --- a/addons/refuel/XEH_preStart.sqf +++ b/addons/refuel/XEH_preStart.sqf @@ -1,3 +1,30 @@ #include "script_component.hpp" #include "XEH_PREP.hpp" + +// cache refuel vehicles, see XEH_postInit.sqf +private _staticClasses = []; +private _dynamicClasses = []; + +{ + private _fuelCargo = getNumber (_x >> QGVAR(fuelCargo)); + if (_fuelCargo > 0 || {_fuelCargo == REFUEL_INFINITE_FUEL}) then { + private _sourceClass = configName _x; + // check if we can use actions with inheritance + if ( + !isText (_x >> "EventHandlers" >> "CBA_Extended_EventHandlers" >> "init") // addActionToClass relies on XEH init + || {configName _x isKindOf "Static"} // CBA_fnc_addClassEventHandler doesn't support "Static" class + ) then { + if (2 == getNumber (_x >> "scope")) then { + _staticClasses pushBackUnique _sourceClass; + }; + } else { + if (-1 == _dynamicClasses findIf {_sourceClass isKindOf _x}) then { + _dynamicClasses pushBackUnique _sourceClass; + }; + }; + }; +} forEach ('true' configClasses (configFile >> "CfgVehicles")); + +TRACE_2("compiled",count _staticClasses,count _dynamicClasses); +uiNamespace setVariable [QGVAR(cacheRefuelClasses), compileFinal str [_staticClasses, _dynamicClasses]]; diff --git a/addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf b/addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf index 7f4d936ed3..9fae9abdab 100644 --- a/addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf +++ b/addons/refuel/functions/fnc_startNozzleInHandsPFH.sqf @@ -72,7 +72,7 @@ TRACE_2("start",_unit,_nozzle); }; if !(_unit == vehicle _unit && {_unit isEqualTo ACE_player}) exitWith { - TRACE_1("stop vehicle/player",_unit,vehicle _unit); + TRACE_2("stop vehicle/player",_unit,vehicle _unit); DROP_NOZZLE UNHOLSTER_WEAPON END_PFH diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index 32d0528ae3..19a22dc390 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -131,7 +131,7 @@ Scollega manicotto benzina Desconectar surtidor Déconnecter la pompe - 給油ノズルを外しました + 給油ノズルを外す 주유기 뽑기 断开燃料喷嘴 斷開燃料噴嘴 @@ -279,6 +279,7 @@ 無法開啟燃料噴嘴 无法开启燃料喷嘴 주유기를 켤 수 없습니다. + Nie można włączyć dyszy paliwowej %1 Liters fueled @@ -450,6 +451,7 @@ 儲油量 储油量 연료통 크기 + Pojemność Ładunku Paliwa @@ -461,6 +463,7 @@ 設定有多少油料可供載具進行加油(-1時關閉,-10為無限油量) 设定有多少油料可供载具进行加油(-1时关闭,-10为无限油量) 재급유에 사용 할 수 있는 연료량 (-1=비활성, -10=무한) + Pojemność paliwa dostępnego do tankowania (-1 wyłącz, -10 jeśli nieskończone) Refuel Hose attach coordinates @@ -471,6 +474,7 @@ 加油軟管安裝位置 加油软管安装位置 재급유기 부착 좌표 + Koordynaty przyłączenia węża paliwowego Model coordinates used to attach refuel hose @@ -481,6 +485,7 @@ 設定加油軟管會安裝到模型的哪個位置上 设定加油软管会安装到模型的哪个位置上 재급유기 부착에 쓰이는 모델 좌표 + Modelowe koordynaty wykorzystane do przyłączenia węża paliwowego diff --git a/addons/reload/CfgEventHandlers.hpp b/addons/reload/CfgEventHandlers.hpp index 6016e7712a..25731670fa 100644 --- a/addons/reload/CfgEventHandlers.hpp +++ b/addons/reload/CfgEventHandlers.hpp @@ -13,7 +13,7 @@ class Extended_PreInit_EventHandlers { class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/repair/CfgEden.hpp b/addons/repair/CfgEden.hpp index be92ec6689..03614b3a2f 100644 --- a/addons/repair/CfgEden.hpp +++ b/addons/repair/CfgEden.hpp @@ -1,3 +1,8 @@ +#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default}) + +#define DEFAULT_ISENGINEER ([ARR_2(0,1)] select (_this getUnitTrait 'engineer')) +#define DEFAULT_ISREPAIRVEHICLE GET_NUMBER(configFile >> 'CfgVehicles' >> typeOf _this >> QQGVAR(canRepair),0) + class ctrlToolbox; class Cfg3DEN { @@ -35,10 +40,10 @@ class Cfg3DEN { property = QUOTE(ace_isEngineer); displayName = CSTRING(AssignEngineerRole_role_DisplayName); tooltip = CSTRING(AssignEngineerRole_role_Description); - expression = "if (_value != -1) then {_this setVariable ['%s',_value, true];}"; + expression = QUOTE(if !(_value == DEFAULT_ISENGINEER || {_value == -1}) then {_this setVariable [ARR_3('%s',_value,true)]}); typeName = "NUMBER"; condition = "objectBrain"; - defaultValue = "-1"; + defaultValue = QUOTE(DEFAULT_ISENGINEER); control = QGVAR(isEngineerControl); }; class ace_isRepairVehicle { @@ -47,21 +52,16 @@ class Cfg3DEN { control = "CheckboxNumber"; displayName = CSTRING(AssignRepairVehicle_role_DisplayName); tooltip = CSTRING(AssignRepairVehicle_role_Description); - expression = "_this setVariable ['%s',_value, true];"; + expression = QUOTE(if (_value != DEFAULT_ISREPAIRVEHICLE) then {_this setVariable [ARR_3('%s',_value,true)]}); typeName = "NUMBER"; condition = "objectVehicle"; - defaultValue = 0; + defaultValue = QUOTE(DEFAULT_ISREPAIRVEHICLE); }; - class ace_isRepairFacility { + class ace_isRepairFacility: ace_isRepairVehicle { property = QUOTE(ace_isRepairFacility); - value = 0; - control = "CheckboxNumber"; displayName = CSTRING(AssignRepairFacility_role_DisplayName); tooltip = CSTRING(AssignRepairFacility_role_Description); - expression = "_this setVariable ['%s',_value, true];"; - typeName = "NUMBER"; condition = "(1 - objectBrain) * (1 - objectVehicle)"; - defaultValue = 0; }; class GVAR(editorLoadedTracks) { displayName = CSTRING(editorLoadedTracks); @@ -74,16 +74,11 @@ class Cfg3DEN { condition = "objectHasInventoryCargo"; typeName = "NUMBER"; }; - class GVAR(editorLoadedWheels) { + class GVAR(editorLoadedWheels): GVAR(editorLoadedTracks) { displayName = CSTRING(editorLoadedWheels); tooltip = CSTRING(editorLoadedWheels_tooltip); property = QGVAR(editorLoadedWheels); - control = "Edit"; - expression = "_this setVariable ['%s',_value];"; defaultValue = "[0,1] select (_this isKindOf 'Car')"; // must match pre init script - validate = "number"; - condition = "objectHasInventoryCargo"; - typeName = "NUMBER"; }; }; }; diff --git a/addons/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index 7f0255d2a5..a41c2db501 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -456,8 +456,7 @@ class CfgVehicles { GVAR(hitpointPositions)[] = {{"HitTurret", {0,-2,0}}}; }; - class Car_F; - class Offroad_01_base_F: Car_F {}; + class Offroad_01_base_F; class Offroad_01_repair_base_F: Offroad_01_base_F { GVAR(canRepair) = 1; transportRepair = 0; @@ -483,7 +482,25 @@ class CfgVehicles { GVAR(canRepair) = 0; }; - class Truck_03_base_F; + class Car_F: Car { + class HitPoints; + }; + class Truck_F: Car_F { + class HitPoints: HitPoints { + class HitLBWheel; + class HitRBWheel; + }; + }; + class Truck_03_base_F: Truck_F { + class HitPoints: HitPoints { + class HitLBWheel: HitLBWheel { + name = "wheel_1_4_steering"; // return original values back to fix double wheel hitpoint + }; + class HitRBWheel: HitRBWheel { + name = "wheel_2_4_steering"; + }; + }; + }; class O_Truck_03_repair_F: Truck_03_base_F { GVAR(canRepair) = 1; transportRepair = 0; diff --git a/addons/repair/data/model.cfg b/addons/repair/data/model.cfg index 5be2ddde24..38ccf5e4a3 100644 --- a/addons/repair/data/model.cfg +++ b/addons/repair/data/model.cfg @@ -4,14 +4,6 @@ class CfgSkeletons { skeletonInherit = ""; skeletonBones[] = {}; }; - - class ace_wheel: Default { - skeletonBones[] = {}; - }; - - class ace_track: Default { - skeletonBones[] = {}; - }; }; class CfgModels { @@ -22,7 +14,7 @@ class CfgModels { }; class ace_wheel: Default { - skeletonName = "ace_wheel"; + skeletonName = ""; sectionsInherit = ""; sections[] = { "mat_tyre", @@ -31,10 +23,12 @@ class CfgModels { }; class ace_track: Default { - skeletonName = "ace_track"; + skeletonName = ""; sectionsInherit = ""; sections[] = { "mat_track" }; }; + + class material_dummy: Default {}; }; diff --git a/addons/repair/data/trailObjects_co.paa b/addons/repair/data/trailobjects_co.paa similarity index 100% rename from addons/repair/data/trailObjects_co.paa rename to addons/repair/data/trailobjects_co.paa diff --git a/addons/repair/data/trailObjects_steel.rvmat b/addons/repair/data/trailobjects_steel.rvmat similarity index 100% rename from addons/repair/data/trailObjects_steel.rvmat rename to addons/repair/data/trailobjects_steel.rvmat diff --git a/addons/repair/data/trailObjects_steel_damage.rvmat b/addons/repair/data/trailobjects_steel_damage.rvmat similarity index 100% rename from addons/repair/data/trailObjects_steel_damage.rvmat rename to addons/repair/data/trailobjects_steel_damage.rvmat diff --git a/addons/repair/data/trailObjects_steel_destruct.rvmat b/addons/repair/data/trailobjects_steel_destruct.rvmat similarity index 100% rename from addons/repair/data/trailObjects_steel_destruct.rvmat rename to addons/repair/data/trailobjects_steel_destruct.rvmat diff --git a/addons/repair/data/trailObjects_tyre.rvmat b/addons/repair/data/trailobjects_tyre.rvmat similarity index 100% rename from addons/repair/data/trailObjects_tyre.rvmat rename to addons/repair/data/trailobjects_tyre.rvmat diff --git a/addons/repair/data/trailObjects_tyre_damage.rvmat b/addons/repair/data/trailobjects_tyre_damage.rvmat similarity index 100% rename from addons/repair/data/trailObjects_tyre_damage.rvmat rename to addons/repair/data/trailobjects_tyre_damage.rvmat diff --git a/addons/repair/functions/fnc_addRepairActions.sqf b/addons/repair/functions/fnc_addRepairActions.sqf index 5761206b3e..c409591911 100644 --- a/addons/repair/functions/fnc_addRepairActions.sqf +++ b/addons/repair/functions/fnc_addRepairActions.sqf @@ -34,7 +34,7 @@ if (_type in _initializedClasses) exitWith {}; private _hitPointsAddedNames = []; private _hitPointsAddedStrings = []; private _hitPointsAddedAmount = []; -private _processedHitpoints = []; +private _processedSelections = []; private _icon = ["a3\ui_f\data\igui\cfg\actions\repair_ca.paa", "#FFFFFF"]; // Custom position can be defined via config for associated hitpoint @@ -47,7 +47,7 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR private _hitpoint = toLower (_hitPoints select _forEachIndex); if (_selection in _wheelHitSelections) then { // Wheels should always be unique - if (_hitpoint in _processedHitpoints) exitWith {TRACE_3("Duplicate Wheel",_hitpoint,_forEachIndex,_selection);}; + if (_selection in _processedSelections) exitWith {TRACE_3("Duplicate Wheel",_hitpoint,_forEachIndex,_selection);}; private _position = compile format ["_target selectionPosition ['%1', 'HitPoints'];", _selection]; @@ -68,13 +68,15 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR _statement = {[_this select 1, _this select 0, _this select 2 select 0, "ReplaceWheel"] call DFUNC(repair)}; _action = [_name, _text, _icon, _statement, _condition, {}, [_hitpoint], _position, 2] call EFUNC(interact_menu,createAction); [_type, 0, [], _action] call EFUNC(interact_menu,addActionToClass); + + _processedSelections pushBack _selection; } else { // Empty selections don't exist if (_selection isEqualTo "") exitWith { TRACE_3("Skipping Empty Sel",_hitpoint,_forEachIndex,_selection); }; // Empty hitpoints don't contain enough information if (_hitpoint isEqualTo "") exitWith { TRACE_3("Skipping Empty Hit",_hitpoint,_forEachIndex,_selection); }; // Ignore glass hitpoints - if ((_hitPoint find "glass") != -1) exitWith { TRACE_3("Skipping Glass",_hitpoint,_forEachIndex,_selection); }; + if ((_hitpoint find "glass") != -1) exitWith { TRACE_3("Skipping Glass",_hitpoint,_forEachIndex,_selection); }; // Ignore hitpoints starting with # (seems to be lights) if ((_hitpoint select [0,1]) == "#") exitWith { TRACE_3("Skipping # hit",_hitpoint,_forEachIndex,_selection); }; // Ignore ERA/Slat armor (vanilla uses hitera_/hitslat_, pre-1.82 RHS uses era_) @@ -125,7 +127,7 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR if (_hitpoint in TRACK_HITPOINTS) then { // Tracks should always be unique - if (_hitpoint in _processedHitpoints) exitWith {TRACE_3("Duplicate Track",_hitpoint,_forEachIndex,_selection);}; + if (_selection in _processedSelections) exitWith {TRACE_3("Duplicate Track",_hitpoint,_forEachIndex,_selection);}; _position = compile format ["private _return = _target selectionPosition ['%1', 'HitPoints']; _return set [1, 0]; _return", _selection]; TRACE_4("Adding RepairTrack",_hitpoint,_forEachIndex,_selection,_text); private _condition = {[_this select 1, _this select 0, _this select 2 select 0, "RepairTrack"] call DFUNC(canRepair)}; @@ -145,7 +147,7 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR }; }; - _processedHitPoints pushBack _hitpoint; + _processedSelections pushBack _selection; }; } forEach _hitSelections; diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf index 9363f53671..9edd36bc83 100644 --- a/addons/repair/functions/fnc_repair.sqf +++ b/addons/repair/functions/fnc_repair.sqf @@ -139,12 +139,16 @@ if (_consumeItems > 0) then { // Parse the config for the progress callback private _callbackProgress = getText (_config >> "callbackProgress"); if (_callbackProgress == "") then { - _callbackProgress = "true"; -}; -if (isNil _callbackProgress) then { - _callbackProgress = compile _callbackProgress; + _callbackProgress = { + (_this select 0) params ["", "_target"]; + (alive _target) && {(abs speed _target) < 1} // make sure vehicle doesn't drive off + }; } else { - _callbackProgress = missionNamespace getVariable _callbackProgress; + if (isNil _callbackProgress) then { + _callbackProgress = compile _callbackProgress; + } else { + _callbackProgress = missionNamespace getVariable _callbackProgress; + }; }; diff --git a/addons/repair/initSettings.sqf b/addons/repair/initSettings.sqf index c392711218..e226085a29 100644 --- a/addons/repair/initSettings.sqf +++ b/addons/repair/initSettings.sqf @@ -78,7 +78,8 @@ [localize ELSTRING(OptionsMenu,CategoryLogistics), localize "str_state_repair"], true, // default value true, // isGlobal - {[QGVAR(addSpareParts), _this] call EFUNC(common,cbaSettings_settingChanged)} + {[QGVAR(addSpareParts), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index aa94feddbd..467721b8f5 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -1831,6 +1831,7 @@ Cingoli di Scorta 備用履帶 备用履带 + Zapasowe Gąsienice Number of spare tracks in cargo. @@ -1839,6 +1840,7 @@ Numero dei cingoli di scorta nel cargo. 設定載具在貨艙內攜帶的備用履帶數量 设定载具在货舱内携带的备用履带数量。 + Liczba zapasowych gąsienic w ładunku. Spare Wheels @@ -1847,6 +1849,7 @@ Ruote di Scorta 備用輪胎 备用轮胎 + Zapasowe Koła Number of spare wheels in cargo. @@ -1855,6 +1858,7 @@ Numero delle ruote di scorta nel cargo. 設定載具在貨艙內攜帶的備用輪胎數量 设定载具在货舱内携带的备用轮胎数量。 + Liczba zapasowych kół w ładunku. Auto shut off engine on repair @@ -1862,6 +1866,7 @@ 维修时自动关闭发动机。 維修時自動關閉引擎 Motore spento automaticamente durante la riparazione + Automatycznie wyłącz silnik podczas napraw Automatically shut off the engine when doing repairs. @@ -1869,6 +1874,7 @@ 修理时自动关闭发动机。 維修時自動關閉引擎 Spegne automaticamente il motore quando si fanno riparazioni. + Automatycznie wyłącz silnik podczas napraw. diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 265334d20f..d87b6efa7c 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,6 +7,7 @@ 重生 重生 リスポン + Odrodzenie Deploy in 5 seconds... @@ -286,6 +287,7 @@ 屍體移除計時器 尸体移除计时器 死体削除タイマー + Czas usunięcia ciała This module enables you to configure ACE functionality specific to respawns. diff --git a/addons/safemode/XEH_postInit.sqf b/addons/safemode/XEH_postInit.sqf index 81c1521c92..db922f9b35 100644 --- a/addons/safemode/XEH_postInit.sqf +++ b/addons/safemode/XEH_postInit.sqf @@ -1,15 +1,10 @@ // by esteldunedain #include "script_component.hpp" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" if (!hasInterface) exitWith {}; -// IGNORE_PRIVATE_WARNING(_player) -//["Soldier", {_player = ACE_player; if (currentWeapon _player in (_player getVariable [QGVAR(safedWeapons), []])) then {[false] call FUNC(setSafeModeVisual)}] call EFUNC(common,addInfoDisplayEventHandler); -//@todo addEventHandler infoDisplayChanged with select 1 == "Soldier" - -// add keybinds -["ACE3 Weapons", QGVAR(safeMode), localize LSTRING(SafeMode), -{ +["ACE3 Weapons", QGVAR(safeMode), localize LSTRING(SafeMode), { // Conditions: canInteract if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific @@ -18,6 +13,9 @@ if (!hasInterface) exitWith {}; // Statement [ACE_player, currentWeapon ACE_player, currentMuzzle ACE_player] call FUNC(lockSafety); true -}, -{false}, -[41, [false, true, false]], false] call CBA_fnc_addKeybind; +}, {false}, [DIK_GRAVE, [false, true, false]], false] call CBA_fnc_addKeybind; + +["unit", { + private _weaponSafe = currentWeapon ACE_player in (ACE_player getVariable [QGVAR(safedWeapons), []]); + [!_weaponSafe] call FUNC(setSafeModeVisual); +}] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/safemode/functions/fnc_lockSafety.sqf b/addons/safemode/functions/fnc_lockSafety.sqf index e3c1b71f30..c3ce5a8b86 100644 --- a/addons/safemode/functions/fnc_lockSafety.sqf +++ b/addons/safemode/functions/fnc_lockSafety.sqf @@ -60,7 +60,19 @@ if (_unit getVariable [QGVAR(actionID), -1] == -1) then { }; if (_muzzle isEqualType "") then { + private _laserEnabled = _unit isIRLaserOn _weapon || {_unit isFlashlightOn _weapon}; + _unit selectWeapon _muzzle; + + if ( + _laserEnabled + && { + _muzzle == primaryWeapon _unit // prevent UGL switch + || {"" == primaryWeapon _unit} // Arma switches to primary weapon if exists + } + ) then { + {_unit action [_x, _unit]} forEach ["GunLightOn", "IRLaserOn"]; + }; }; // play fire mode selector sound diff --git a/addons/safemode/functions/fnc_unlockSafety.sqf b/addons/safemode/functions/fnc_unlockSafety.sqf index 5a787277e4..3194de6f14 100644 --- a/addons/safemode/functions/fnc_unlockSafety.sqf +++ b/addons/safemode/functions/fnc_unlockSafety.sqf @@ -30,8 +30,20 @@ if (_safedWeapons isEqualTo []) then { _unit setVariable [QGVAR(actionID), -1]; }; +private _laserEnabled = _unit isIRLaserOn _weapon || {_unit isFlashlightOn _weapon}; + _unit selectWeapon _muzzle; +if ( + _laserEnabled + && { + _muzzle == primaryWeapon _unit // prevent UGL switch + || {"" == primaryWeapon _unit} // Arma switches to primary weapon if exists + } +) then { + {_unit action [_x, _unit]} forEach ["GunLightOn", "IRLaserOn"]; +}; + if (inputAction "nextWeapon" > 0) then { // switch to the last mode to roll over to first after the default nextWeapon action // get weapon modes diff --git a/addons/sandbag/data/model.cfg b/addons/sandbag/data/model.cfg index 064073b314..92055d87be 100644 --- a/addons/sandbag/data/model.cfg +++ b/addons/sandbag/data/model.cfg @@ -4,7 +4,6 @@ class CfgSkeletons { skeletonInherit = ""; skeletonBones[] = {}; }; - class ACE_SB_Skeleton: Default {}; }; class CfgModels { @@ -16,6 +15,8 @@ class CfgModels { class ace_sandbag_build { sectionsInherit = "Default"; sections[] = {"zbytek"}; - skeletonName = "ACE_SB_Skeleton"; + skeletonName = ""; }; + class ace_sandbag_m: Default {}; + class ace_sandbag_nogeo: Default {}; }; diff --git a/addons/sandbag/stringtable.xml b/addons/sandbag/stringtable.xml index de9ecd8a18..9284d23468 100644 --- a/addons/sandbag/stringtable.xml +++ b/addons/sandbag/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index 2a5be51ee0..86c4820caa 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -104,8 +104,8 @@ class CfgWeapons { class optic_LRPS : ItemCore { ACE_ScopeHeightAboveRail = 4.2098; - ACE_ScopeAdjust_Vertical[] = {-4, 30}; - ACE_ScopeAdjust_Horizontal[] = {-6, 6}; + ACE_ScopeAdjust_Vertical[] = {0, 27}; + ACE_ScopeAdjust_Horizontal[] = {-8, 8}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { @@ -156,8 +156,8 @@ class CfgWeapons { class optic_AMS_base : ItemCore { ACE_ScopeHeightAboveRail = 3.8933; - ACE_ScopeAdjust_Vertical[] = {-4, 30}; - ACE_ScopeAdjust_Horizontal[] = {-6, 6}; + ACE_ScopeAdjust_Vertical[] = {0, 16}; + ACE_ScopeAdjust_Horizontal[] = {-11, 11}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { @@ -176,8 +176,8 @@ class CfgWeapons { class optic_KHS_base : ItemCore { ACE_ScopeHeightAboveRail = 4.30723; - ACE_ScopeAdjust_Vertical[] = {-4, 30}; - ACE_ScopeAdjust_Horizontal[] = {-6, 6}; + ACE_ScopeAdjust_Vertical[] = {0, 19}; + ACE_ScopeAdjust_Horizontal[] = {-9, 9}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { @@ -196,8 +196,8 @@ class CfgWeapons { class optic_KHS_old : ItemCore { ACE_ScopeHeightAboveRail = 4.30723; - ACE_ScopeAdjust_Vertical[] = {-4, 30}; - ACE_ScopeAdjust_Horizontal[] = {-6, 6}; + ACE_ScopeAdjust_Vertical[] = {0, 19}; + ACE_ScopeAdjust_Horizontal[] = {-9, 9}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; class ItemInfo : InventoryOpticsItem_Base_F { diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index aa297fd32d..2c6030801f 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -218,6 +218,7 @@ 使用旧版介面 昔の UI を使用 기존 UI 사용 + Wykorzystaj legacy UI Displays elevation and windage with signed numbers @@ -227,6 +228,7 @@ 使用带着标签的数字显示归零远近与风偏程度 印付きの数字で仰角と横風を表示 기존의 부호가 있는 숫자로 표고와 폭을 표시합니다. + Wyświetla elewację i tarcie powietrza poprzez podpisane liczby Simplified zeroing @@ -236,6 +238,7 @@ 단순화 된 영점 조정 簡單歸零 简单归零 + Uproszczone zerowanie Replicates the vanilla zeroing system for riflescopes. @@ -245,6 +248,7 @@ 라이플스코프 용 바닐라 영점조정 시스템을 복제합니다. 使用原版的歸零系統來取代ACE複雜的歸零模擬。 使用原版的归零系统来取代ACE复杂的归零模拟。 + Replikuje system zerowania, dla celowników karabinowych, z domyślnej gry. Minor adjustment up @@ -377,7 +381,7 @@ Set zero adjustment Nullung durchführen - Zresetuj wyzerowanie + Ustaw wyzerowanie Сбросить корректировку Establecer ajuste a cero Imposta i valori dell'azzeramento @@ -398,6 +402,7 @@ 영점 조정 재설정 重設歸零 重设归零 + Zresetuj wyzerowanie This module adds windage and elevation adjustment turrets on high power rifle scopes. @@ -419,6 +424,7 @@ %1D %1D %1D + %1D %1L @@ -429,6 +435,7 @@ %1L %1L %1L + %1L %1R @@ -439,16 +446,21 @@ %1R %1R %1R + %1R Horizontal limits 水平限制 水平制限 + Limite orrizontale + Limit poziomy Vertical limits 垂直限制 垂直制限 + Limite verticale + Limit pionowy diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index 3abaa07592..7f37e06b01 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/spectator/XEH_postInit.sqf b/addons/spectator/XEH_postInit.sqf index 715dbe1c3d..a02f36ae67 100644 --- a/addons/spectator/XEH_postInit.sqf +++ b/addons/spectator/XEH_postInit.sqf @@ -34,3 +34,5 @@ if (hasInterface) then { } ] call CBA_fnc_waitUntilAndExecute; }; + +["ace_spectator", {GETMVAR(GVAR(isSet),false)}] call CBA_fnc_registerFeatureCamera; diff --git a/addons/spectator/functions/fnc_ui_handleKeyDown.sqf b/addons/spectator/functions/fnc_ui_handleKeyDown.sqf index aa10af0358..25a50d140b 100644 --- a/addons/spectator/functions/fnc_ui_handleKeyDown.sqf +++ b/addons/spectator/functions/fnc_ui_handleKeyDown.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" -#include "\A3\ui_f\hpp\defineDIKCodes.inc" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" /* * Author: Nelson Duarte, AACO, SilentSpike * Function used to handle key down event diff --git a/addons/spectator/functions/fnc_ui_handleKeyUp.sqf b/addons/spectator/functions/fnc_ui_handleKeyUp.sqf index 1ab7213aa1..cf08d4caf6 100644 --- a/addons/spectator/functions/fnc_ui_handleKeyUp.sqf +++ b/addons/spectator/functions/fnc_ui_handleKeyUp.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" -#include "\A3\ui_f\hpp\defineDIKCodes.inc" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" /* * Author: Nelson Duarte, SilentSpike * Function used to handle key up event diff --git a/addons/spectator/functions/fnc_ui_updateHelp.sqf b/addons/spectator/functions/fnc_ui_updateHelp.sqf index f715cb1eca..d1187ae355 100644 --- a/addons/spectator/functions/fnc_ui_updateHelp.sqf +++ b/addons/spectator/functions/fnc_ui_updateHelp.sqf @@ -1,5 +1,5 @@ #include "script_component.hpp" -#include "\A3\ui_f\hpp\defineDIKCodes.inc" +#include "\a3\ui_f\hpp\defineDIKCodes.inc" /* * Author: Nelson Duarte, SilentSpike * Updates spectator UI help element diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index 4958671946..634fd675cf 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,8 @@ 旁观者 スペクテイター 관전자 + Spectateur + Obserwator ACE Spectator @@ -44,6 +46,8 @@ 可觀察AI 可观察AI AI 활성 + IA Activée + SI Aktywowane Make AI viewable in spectator @@ -53,6 +57,8 @@ 開啟此功能後可在觀察者模式下觀察AI單位 开启此功能后可在观察者模式下观察AI单位。 관전자가 AI를 관전 할 수 있습니다. + Rends les IA visibles en spectateur + Spraw, aby SI było widoczne jako obserwator Camera modes @@ -259,6 +265,8 @@ 單位圖示 单位图示 아이콘 + Icônes + Ikony Projectiles @@ -268,6 +276,8 @@ 顯示彈道 显示弹道 발사체 + Projectiles + Pociski Next Unit @@ -307,6 +317,8 @@ 視覺模式 视觉模式 보기 모드 + Mode de vision + Tryb Wizji Slow Speed @@ -316,6 +328,8 @@ 慢速度 慢速度 느린 속도 + Vitesse lente + Wolna Prędkość diff --git a/addons/spottingscope/data/model.cfg b/addons/spottingscope/data/model.cfg index 86d50db6ca..bfabf87b2d 100644 --- a/addons/spottingscope/data/model.cfg +++ b/addons/spottingscope/data/model.cfg @@ -86,4 +86,6 @@ class CfgModels { skeletonName = "ace_spottingscope_skeleton"; sectionsInherit = "Default"; }; + + class material_dummy: Default {}; }; diff --git a/addons/spottingscope/stringtable.xml b/addons/spottingscope/stringtable.xml index fdf621a29e..b11bff24ac 100644 --- a/addons/spottingscope/stringtable.xml +++ b/addons/spottingscope/stringtable.xml @@ -9,7 +9,7 @@ Telescopio Téléscope de visée Zaměřovací dalekohled - Spotting Scope + Cannocchiale Megfigyelő távcső Luneta de observador 観測用スコープ @@ -25,7 +25,7 @@ Coger telescopio Prendre téléscope de visée Zvednout zaměřovací dalekohled - Raccogli spottingscope + Raccogli Cannocchiale Mefgigy. távcső felvétele Pegar luneta de observador 観測用スコープを拾う @@ -41,7 +41,7 @@ Colocar telescopio Placer téléscope de visée Položit zaměřovací dalekohled - Posiziona spottingscope + Posiziona Cannocchiale Megfigy. távcső elhelyezése Colocar luneta de observador 観測用スコープを置く diff --git a/addons/switchunits/CfgEventHandlers.hpp b/addons/switchunits/CfgEventHandlers.hpp index 5da5fd0dc2..becf395052 100644 --- a/addons/switchunits/CfgEventHandlers.hpp +++ b/addons/switchunits/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/switchunits/functions/fnc_handleMapClick.sqf b/addons/switchunits/functions/fnc_handleMapClick.sqf index 4e8a527445..73f48c1fc0 100644 --- a/addons/switchunits/functions/fnc_handleMapClick.sqf +++ b/addons/switchunits/functions/fnc_handleMapClick.sqf @@ -21,16 +21,11 @@ params ["_faction", "_pos"]; _faction params ["", "_sides"]; -private _sideNearest = []; +private _nearestObjects = nearestObjects [_pos, ["Man"], 15]; -{ - if ([_x] call FUNC(isValidAi) && (side group _x in _sides)) then { - _sideNearest pushBack _x; - }; - nil -} count (nearestObjects [_pos, ["Man"], 15]); +private _nearestValidUnitIndex = _nearestObjects findIf {(side group _x in _sides) && {[_x] call FUNC(isValidAi)}}; -if (count _sideNearest > 0) then { - [_sideNearest select 0] call FUNC(switchUnit); +if (_nearestValidUnitIndex != -1) then { + [_nearestObjects select _nearestValidUnitIndex] call FUNC(switchUnit); openMap false; }; diff --git a/addons/switchunits/functions/fnc_initPlayer.sqf b/addons/switchunits/functions/fnc_initPlayer.sqf index e4d663f746..5fe6d5be6e 100644 --- a/addons/switchunits/functions/fnc_initPlayer.sqf +++ b/addons/switchunits/functions/fnc_initPlayer.sqf @@ -32,12 +32,9 @@ if (vehicle _playerUnit == _playerUnit) then { removeAllWeapons _playerUnit; removeGoggles _playerUnit; removeHeadgear _playerUnit; - removeVest _playerUnit; removeAllAssignedItems _playerUnit; - clearAllItemsFromBackpack _playerUnit; - removeBackpack _playerUnit; + removeAllContainers _playerUnit; _playerUnit linkItem "ItemMap"; - removeUniform _playerUnit; [_playerUnit, "forceWalk", "ACE_SwitchUnits", true] call EFUNC(common,statusEffect_set); diff --git a/addons/switchunits/functions/fnc_markAiOnMap.sqf b/addons/switchunits/functions/fnc_markAiOnMap.sqf index 5dc1017c48..6c2eb0b0d9 100644 --- a/addons/switchunits/functions/fnc_markAiOnMap.sqf +++ b/addons/switchunits/functions/fnc_markAiOnMap.sqf @@ -36,7 +36,7 @@ GVAR(AllMarkerNames) = []; // create markers { - if (([_x] call FUNC(isValidAi) && (side group _x in _sides)) || (_x getVariable [QGVAR(IsPlayerControlled), false])) then { + if ((_x getVariable [QGVAR(IsPlayerControlled), false]) || {(side group _x in _sides) && {[_x] call FUNC(isValidAi)}}) then { private _markerName = str _x; diff --git a/addons/switchunits/functions/fnc_nearestPlayers.sqf b/addons/switchunits/functions/fnc_nearestPlayers.sqf index 9f60c1a6b7..1d649d0843 100644 --- a/addons/switchunits/functions/fnc_nearestPlayers.sqf +++ b/addons/switchunits/functions/fnc_nearestPlayers.sqf @@ -18,12 +18,4 @@ params ["_position", "_radius"]; -private _nearestPlayers = []; - -{ - if ([_x] call EFUNC(common,isPlayer) && {alive _x}) then { - _nearestPlayers pushBack _x; - }; -} forEach (nearestObjects [_position, ["Man"], _radius]); - -_nearestPlayers + (nearestObjects [_position, ["Man"], _radius]) select {alive _x && {[_x] call EFUNC(common,isPlayer)}}; diff --git a/addons/switchunits/functions/fnc_startSwitchUnits.sqf b/addons/switchunits/functions/fnc_startSwitchUnits.sqf index 759ae3cbf4..f5cc4c1330 100644 --- a/addons/switchunits/functions/fnc_startSwitchUnits.sqf +++ b/addons/switchunits/functions/fnc_startSwitchUnits.sqf @@ -20,10 +20,10 @@ params ["_player"]; if (GVAR(EnableSwitchUnits)) then { private _sides = []; - if(GVAR(SwitchToWest)) then {_sides pushBack west;}; - if(GVAR(SwitchToEast)) then {_sides pushBack east;}; - if(GVAR(SwitchToIndependent)) then {_sides pushBack independent;}; - if(GVAR(SwitchToCivilian)) then {_sides pushBack civilian;}; + if (GVAR(SwitchToWest)) then {_sides pushBack west;}; + if (GVAR(SwitchToEast)) then {_sides pushBack east;}; + if (GVAR(SwitchToIndependent)) then {_sides pushBack independent;}; + if (GVAR(SwitchToCivilian)) then {_sides pushBack civilian;}; if (_player getVariable ["ACE_CanSwitchUnits", false]) then { [_player, _sides] call FUNC(initPlayer); diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 57822047c8..539a755bc4 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,21 +1,22 @@ - + Switch Units - Cambio Unità + Cambia Unità 切換單位 切换单位 ユニット切り替え 병력 전환 Einheitenwechsel + Przełącz Jednostki Switched unit Einheit gewechselt Юнит переключён Prohozená jednotka - Przełącz jednostkę + Przełączona jednostka Cambiado de unidad Unité changée Egység átváltva diff --git a/addons/tacticalladder/CfgEventHandlers.hpp b/addons/tacticalladder/CfgEventHandlers.hpp index cb09874dab..5b2eb3a053 100644 --- a/addons/tacticalladder/CfgEventHandlers.hpp +++ b/addons/tacticalladder/CfgEventHandlers.hpp @@ -7,13 +7,13 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/tacticalladder/data/model.cfg b/addons/tacticalladder/data/model.cfg index bc7da07960..ec200139ff 100644 --- a/addons/tacticalladder/data/model.cfg +++ b/addons/tacticalladder/data/model.cfg @@ -28,121 +28,114 @@ class CfgSkeletons { skeletonInherit = ""; skeletonBones[] = { "Pelvis","", - "Spine","Pelvis", - "Spine1","Spine", - "Spine2","Spine1", - "Spine3","Spine2", - "Camera","Pelvis", - "weapon","Spine1", - "launcher","Spine1", - - // Head skeleton in hierarchy - "neck","Spine3", - "neck1","neck", - "head","neck1", - - // New facial features - "Face_Hub","head", - "Face_Jawbone","Face_Hub", - "Face_Jowl","Face_Jawbone", - "Face_chopRight","Face_Jawbone", - "Face_chopLeft","Face_Jawbone", - "Face_LipLowerMiddle","Face_Jawbone", - "Face_LipLowerLeft","Face_Jawbone", - "Face_LipLowerRight","Face_Jawbone", - "Face_Chin","Face_Jawbone", - "Face_Tongue","Face_Jawbone", - "Face_CornerRight","Face_Hub", - "Face_CheekSideRight","Face_CornerRight", - "Face_CornerLeft","Face_Hub", - "Face_CheekSideLeft","Face_CornerLeft", - "Face_CheekFrontRight","Face_Hub", - "Face_CheekFrontLeft","Face_Hub", - "Face_CheekUpperRight","Face_Hub", - "Face_CheekUpperLeft","Face_Hub", - "Face_LipUpperMiddle","Face_Hub", - "Face_LipUpperRight","Face_Hub", - "Face_LipUpperLeft","Face_Hub", - "Face_NostrilRight","Face_Hub", - "Face_NostrilLeft","Face_Hub", - "Face_Forehead","Face_Hub", - "Face_BrowFrontRight","Face_Forehead", - "Face_BrowFrontLeft","Face_Forehead", - "Face_BrowMiddle","Face_Forehead", - "Face_BrowSideRight","Face_Forehead", - "Face_BrowSideLeft","Face_Forehead", - "Face_Eyelids","Face_Hub", - "Face_EyelidUpperRight","Face_Hub", - "Face_EyelidUpperLeft","Face_Hub", - "Face_EyelidLowerRight","Face_Hub", - "Face_EyelidLowerLeft","Face_Hub", - "EyeLeft","Face_Hub", - "EyeRight","Face_Hub", - - // Left upper side - "LeftShoulder","Spine3", - "LeftArm","LeftShoulder", - "LeftArmRoll","LeftArm", - "LeftForeArm","LeftArmRoll", - "LeftForeArmRoll","LeftForeArm", - "LeftHand","LeftForeArmRoll", - "LeftHandRing","LeftHand", - "LeftHandRing1","LeftHandRing", - "LeftHandRing2","LeftHandRing1", - "LeftHandRing3","LeftHandRing2", - "LeftHandPinky1","LeftHandRing", - "LeftHandPinky2","LeftHandPinky1", - "LeftHandPinky3","LeftHandPinky2", - "LeftHandMiddle1","LeftHand", - "LeftHandMiddle2","LeftHandMiddle1", - "LeftHandMiddle3","LeftHandMiddle2", - "LeftHandIndex1","LeftHand", - "LeftHandIndex2","LeftHandIndex1", - "LeftHandIndex3","LeftHandIndex2", - "LeftHandThumb1","LeftHand", - "LeftHandThumb2","LeftHandThumb1", - "LeftHandThumb3","LeftHandThumb2", - - // Right upper side - "RightShoulder","Spine3", - "RightArm","RightShoulder", - "RightArmRoll","RightArm", - "RightForeArm","RightArmRoll", - "RightForeArmRoll","RightForeArm", - "RightHand","RightForeArmRoll", - "RightHandRing","RightHand", - "RightHandRing1","RightHandRing", - "RightHandRing2","RightHandRing1", - "RightHandRing3","RightHandRing2", - "RightHandPinky1","RightHandRing", - "RightHandPinky2","RightHandPinky1", - "RightHandPinky3","RightHandPinky2", - "RightHandMiddle1","RightHand", - "RightHandMiddle2","RightHandMiddle1", - "RightHandMiddle3","RightHandMiddle2", - "RightHandIndex1","RightHand", - "RightHandIndex2","RightHandIndex1", - "RightHandIndex3","RightHandIndex2", - "RightHandThumb1","RightHand", - "RightHandThumb2","RightHandThumb1", - "RightHandThumb3","RightHandThumb2", - - // Left lower side - "LeftUpLeg","Pelvis", - "LeftUpLegRoll","LeftUpLeg", - "LeftLeg","LeftUpLegRoll", - "LeftLegRoll","LeftLeg", - "LeftFoot","LeftLegRoll", - "LeftToeBase","LeftFoot", - - // Right lower side - "RightUpLeg","Pelvis", - "RightUpLegRoll","RightUpLeg", - "RightLeg","RightUpLegRoll", - "RightLegRoll","RightLeg", - "RightFoot","RightLegRoll", - "RightToeBase","RightFoot" - }; + "Spine","Pelvis", + "Spine1","Spine", + "Spine2","Spine1", + "Spine3","Spine2", + "camera","Pelvis",// case has changed for arma3 + "weapon","Spine1", + "launcher","Spine1", + "Neck","Spine3", + "Neck1","Neck", + "Head","Neck1", //Head skeleton in hierarchy + //Left upper side + "LeftShoulder","Spine3", + "LeftArm","LeftShoulder", + "LeftArmRoll","LeftArm", + "LeftForeArm","LeftArmRoll", + "LeftForeArmRoll","LeftForeArm", + "LeftHand","LeftForeArmRoll", + "LeftHandRing","LeftHand", + "LeftHandRing1","LeftHandRing", + "LeftHandRing2","LeftHandRing1", + "LeftHandRing3","LeftHandRing2", + "LeftHandPinky1","LeftHandRing", + "LeftHandPinky2","LeftHandPinky1", + "LeftHandPinky3","LeftHandPinky2", + "LeftHandMiddle1","LeftHand", + "LeftHandMiddle2","LeftHandMiddle1", + "LeftHandMiddle3","LeftHandMiddle2", + "LeftHandIndex1","LeftHand", + "LeftHandIndex2","LeftHandIndex1", + "LeftHandIndex3","LeftHandIndex2", + "LeftHandThumb1","LeftHand", + "LeftHandThumb2","LeftHandThumb1", + "LeftHandThumb3","LeftHandThumb2", + //Right upper side + "RightShoulder","Spine3", + "RightArm","RightShoulder", + "RightArmRoll","RightArm", + "RightForeArm","RightArmRoll", + "RightForeArmRoll","RightForeArm", + "RightHand","RightForeArmRoll", + "RightHandRing","RightHand", + "RightHandRing1","RightHandRing", + "RightHandRing2","RightHandRing1", + "RightHandRing3","RightHandRing2", + "RightHandPinky1","RightHandRing", + "RightHandPinky2","RightHandPinky1", + "RightHandPinky3","RightHandPinky2", + "RightHandMiddle1","RightHand", + "RightHandMiddle2","RightHandMiddle1", + "RightHandMiddle3","RightHandMiddle2", + "RightHandIndex1","RightHand", + "RightHandIndex2","RightHandIndex1", + "RightHandIndex3","RightHandIndex2", + "RightHandThumb1","RightHand", + "RightHandThumb2","RightHandThumb1", + "RightHandThumb3","RightHandThumb2", + //Left lower side + "LeftUpLeg","Pelvis", + "LeftUpLegRoll","LeftUpLeg", + "LeftLeg","LeftUpLegRoll", + "LeftLegRoll","LeftLeg", + "LeftFoot","LeftLegRoll", + "LeftToeBase","LeftFoot", + //Right lower side + "RightUpLeg","Pelvis", + "RightUpLegRoll","RightUpLeg", + "RightLeg","RightUpLegRoll", + "RightLegRoll","RightLeg", + "RightFoot","RightLegRoll", + "RightToeBase","RightFoot", + //New facial features arma3 only + "Face_Hub","Head", + "Face_Jawbone","Face_Hub", + "Face_Jowl","Face_Jawbone", + "Face_chopRight","Face_Jawbone", + "Face_chopLeft","Face_Jawbone", + "Face_LipLowerMiddle","Face_Jawbone", + "Face_LipLowerLeft","Face_Jawbone", + "Face_LipLowerRight","Face_Jawbone", + "Face_Chin","Face_Jawbone", + "Face_Tongue","Face_Jawbone", + "Face_CornerRight","Face_Hub", + "Face_CheekSideRight","Face_CornerRight", + "Face_CornerLeft","Face_Hub", + "Face_CheekSideLeft","Face_CornerLeft", + "Face_CheekFrontRight","Face_Hub", + "Face_CheekFrontLeft","Face_Hub", + "Face_CheekUpperRight","Face_Hub", + "Face_CheekUpperLeft","Face_Hub", + "Face_LipUpperMiddle","Face_Hub", + "Face_LipUpperRight","Face_Hub", + "Face_LipUpperLeft","Face_Hub", + "Face_NostrilRight","Face_Hub", + "Face_NostrilLeft","Face_Hub", + "Face_Forehead","Face_Hub", + "Face_BrowFrontRight","Face_Forehead", + "Face_BrowFrontLeft","Face_Forehead", + "Face_BrowMiddle","Face_Forehead", + "Face_BrowSideRight","Face_Forehead", + "Face_BrowSideLeft","Face_Forehead", + "Face_Eyelids","Face_Hub", + "Face_EyelidUpperRight","Face_Hub", + "Face_EyelidUpperLeft","Face_Hub", + "Face_EyelidLowerRight","Face_Hub", + "Face_EyelidLowerLeft","Face_Hub", + "EyeLeft","Face_Hub", + "EyeRight","Face_Hub" + };// end of skeleton array // location of pivot points (local axes) for hierarchical animation pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d"; }; diff --git a/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf b/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf index dac503a828..f8e2ce9f3a 100644 --- a/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf +++ b/addons/tacticalladder/functions/fnc_cancelTLdeploy.sqf @@ -32,8 +32,7 @@ GVAR(ladder) animate ["rotate", 0]; { GVAR(ladder) animate [_x, 0]; - true -} count __ANIMS; +} forEach __ANIMS; //Don't "optimize" this to a count. See #6607 // remove mouse buttons and hint call EFUNC(interaction,hideMouseHint); diff --git a/addons/tacticalladder/functions/fnc_isLadderEmpty.sqf b/addons/tacticalladder/functions/fnc_isLadderEmpty.sqf index 47c646ef29..5af9ecaafd 100644 --- a/addons/tacticalladder/functions/fnc_isLadderEmpty.sqf +++ b/addons/tacticalladder/functions/fnc_isLadderEmpty.sqf @@ -20,12 +20,6 @@ params ["_ladder"]; private _unitsNearLadder = nearestObjects [_ladder, ["CAManBase"], 4]; TRACE_1("Near Ladder",_unitsNearLadder); -private _ladderEmpty = true; -{ - if (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> animationState _x >> "ACE_isLadder") == 1) exitWith { - _ladderEmpty = false; - TRACE_1("On Ladder",_x); - }; -} forEach _unitsNearLadder; +private _CfgAnimationStates = configFile >> "CfgMovesMaleSdr" >> "States"; -_ladderEmpty +(_unitsNearLadder findIf {getNumber (_CfgAnimationStates >> animationState _x >> "ACE_isLadder") == 1}) == -1 diff --git a/addons/tacticalladder/stringtable.xml b/addons/tacticalladder/stringtable.xml index e94a292bc1..bec5b05e64 100644 --- a/addons/tacticalladder/stringtable.xml +++ b/addons/tacticalladder/stringtable.xml @@ -9,7 +9,7 @@ Escalera telescópica Echelle téléscopique Teleskopický žebřík - Telescopic Ladder + Scala Telescopica Teleszkopikus létra Escada telescópica タクティカル ラダー @@ -25,7 +25,7 @@ Despelgar escalera Déployer l'échelle Rozložit žebřík - Deploy ladder + Piazza scala Létra lerakása Implantar escada ラダーを設置 @@ -41,7 +41,7 @@ Soltar escalera Lacher l'échelle Položit žebřík - Drop ladder + Lascia scala Létra eldobása Derrubar escada ラダーを落とす @@ -56,7 +56,7 @@ Extender Разложить Prodloužit - Estendi, +Ctrl ruota + Estendi Extender Déployer 伸ばす @@ -87,7 +87,7 @@ Colocar escalera Positionner l'échelle Umístit žebřík - Position ladder + Posiziona scala Létra elhelyezése Posicionar escada ラダーの位置 @@ -103,7 +103,7 @@ Recoger escalera Prendre l'échelle Vzít žebřík - Pickup ladder + Prendi scala Létra felvétele Pegar escada ラダーを拾う diff --git a/addons/tagging/XEH_postInit.sqf b/addons/tagging/XEH_postInit.sqf index 1e7003281a..7fefa5757e 100644 --- a/addons/tagging/XEH_postInit.sqf +++ b/addons/tagging/XEH_postInit.sqf @@ -4,39 +4,10 @@ // Cache for static objects GVAR(cacheStaticModels) = [false] call CBA_fnc_createNamespace; - -// Consider static everything vehicle that inherit from Static -// This include houses (which we don't need), but also walls, that we do -private _cfgBase = configFile >> "CfgVehicles"; -private _countOptions = count _cfgBase; -for "_index" from 0 to (_countOptions - 1) do { - private _cfgClass = _cfgBase select _index; - if (isClass _cfgClass) then { - if ((configName _cfgClass) isKindOf "Static") then { - private _model = getText (_cfgClass >> "model"); - if (_model != "") then { - private _array = _model splitString "\"; - GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true]; - }; - }; - }; -}; - -// Also consider static all object inheriting from bridges -_cfgBase = configFile >> "CfgNonAIVehicles"; -_countOptions = count _cfgBase; -for "_index" from 0 to (_countOptions - 1) do { - private _cfgClass = _cfgBase select _index; - if (isClass _cfgClass) then { - if ((configName _cfgClass) isKindOf ["Bridge_base_F", _cfgBase]) then { - private _model = getText (_cfgClass >> "model"); - if (_model != "") then { - private _array = _model splitString "\"; - GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true]; - }; - }; - }; -}; +private _cacheStaticModels = call (uiNamespace getVariable [QGVAR(cacheStaticModels), {[]}]); +{ + GVAR(cacheStaticModels) setVariable [_x, true]; +} forEach _cacheStaticModels; if (hasInterface) then { // Compile and cache config tags diff --git a/addons/tagging/XEH_preStart.sqf b/addons/tagging/XEH_preStart.sqf index 022888575e..342b4b6407 100644 --- a/addons/tagging/XEH_preStart.sqf +++ b/addons/tagging/XEH_preStart.sqf @@ -1,3 +1,32 @@ #include "script_component.hpp" #include "XEH_PREP.hpp" + +private _cacheStaticModels = []; + +private _vehicleClasses = "isClass _x && (configName _x) isKindOf 'Static'" configClasses (configFile >> "CfgVehicles"); + +// Consider static everything vehicle that inherit from Static +// This include houses (which we don't need), but also walls, that we do +{ + private _model = getText (_x >> "model"); + if (_model != "") then { + private _array = _model splitString "\"; + _cacheStaticModels pushBackUnique toLower (_array select ((count _array) - 1)); + }; +} forEach _vehicleClasses; + +private _nonAIVehicleClasses = "isClass _x" configClasses (configFile >> "CfgNonAIVehicles"); + +// Also consider static all object inheriting from bridges +private _cfgBase = configFile >> "CfgNonAIVehicles"; +{ + private _model = getText (_x >> "model"); + if (_model != "") then { + private _array = _model splitString "\"; + _cacheStaticModels pushBackUnique toLower (_array select ((count _array) - 1)); + }; +} forEach (_nonaivehicleClasses select {(configName _x) isKindOf ["Bridge_base_F", _cfgBase]}); + +uiNamespace setVariable [QGVAR(cacheStaticModels), compileFinal str _cacheStaticModels]; +TRACE_1("compiled",count _cacheStaticModels); diff --git a/addons/tagging/functions/fnc_addCustomTag.sqf b/addons/tagging/functions/fnc_addCustomTag.sqf index cb426493b3..6dccf3bfb2 100644 --- a/addons/tagging/functions/fnc_addCustomTag.sqf +++ b/addons/tagging/functions/fnc_addCustomTag.sqf @@ -9,6 +9,7 @@ * 2: Required Item * 3: Textures Paths * 4: Icon Path (default: "") + * 5: Material Paths (optional) * * Return Value: * Sucessfully Added Tag @@ -24,7 +25,8 @@ params [ ["_displayName", "", [""]], ["_requiredItem", "", [""]], ["_textures", [], [[]]], - ["_icon", "", [""]] + ["_icon", "", [""]], + ["_materials", [], [[]]] ]; // Verify @@ -50,4 +52,4 @@ if (_textures isEqualTo []) exitWith { _identifier = [_identifier] call CBA_fnc_removeWhitespace; // Add -[QGVAR(applyCustomTag), [_identifier, _displayName, _requiredItem, _textures, _icon]] call CBA_fnc_globalEventJIP; +[QGVAR(applyCustomTag), [_identifier, _displayName, _requiredItem, _textures, _icon, _materials]] call CBA_fnc_globalEventJIP; diff --git a/addons/tagging/functions/fnc_addTagActions.sqf b/addons/tagging/functions/fnc_addTagActions.sqf index a5fdcd219a..f9add50829 100644 --- a/addons/tagging/functions/fnc_addTagActions.sqf +++ b/addons/tagging/functions/fnc_addTagActions.sqf @@ -19,7 +19,7 @@ params ["_unit"]; private _actions = []; { - _x params ["_class", "_displayName", "_requiredItem", "_textures", "_icon"]; + _x params ["_class", "_displayName", "_requiredItem", "_textures", "_icon", "_materials"]; _actions pushBack [ [ @@ -27,8 +27,18 @@ private _actions = []; _displayName, _icon, { - (_this select 2) params ["_unit", "_class", "_textures"]; - [_unit, selectRandom _textures] call FUNC(tag); + (_this select 2) params ["_unit", "_class", "_textures", "", "_materials"]; + + ( + if (count _textures == count _materials) then { + private _textureIndex = floor random count _textures; + [_textures select _textureIndex, _materials select _textureIndex] + } else { + [selectRandom _textures, selectRandom _materials] + } + ) params ["_randomTexture", "_randomMaterial"]; + + [_unit, _randomTexture, _randomMaterial] call FUNC(tag); _unit setVariable [QGVAR(lastUsedTag), _class]; }, { @@ -36,7 +46,7 @@ private _actions = []; _requiredItem in (_unit call EFUNC(common,uniqueItems)) }, {}, - [_unit, _class, _textures, _requiredItem] + [_unit, _class, _textures, _requiredItem, _materials] ] call EFUNC(interact_menu,createAction), [], _unit diff --git a/addons/tagging/functions/fnc_applyCustomTag.sqf b/addons/tagging/functions/fnc_applyCustomTag.sqf index be73d85021..d7a14820a8 100644 --- a/addons/tagging/functions/fnc_applyCustomTag.sqf +++ b/addons/tagging/functions/fnc_applyCustomTag.sqf @@ -9,6 +9,7 @@ * 2: Required Item * 3: Textures Paths * 4: Icon Path (default: "") + * 5: Material Paths * * Return Value: * None diff --git a/addons/tagging/functions/fnc_compileConfigTags.sqf b/addons/tagging/functions/fnc_compileConfigTags.sqf index c9aaca9506..df9f01ac45 100644 --- a/addons/tagging/functions/fnc_compileConfigTags.sqf +++ b/addons/tagging/functions/fnc_compileConfigTags.sqf @@ -44,10 +44,12 @@ _failure = true; }; + private _materials = getArray (_x >> "materials"); + private _icon = getText (_x >> "icon"); if (!_failure) then { - GVAR(cachedTags) pushBack [_class, _displayName, _requiredItem, _textures, _icon]; + GVAR(cachedTags) pushBack [_class, _displayName, _requiredItem, _textures, _icon, _materials]; GVAR(cachedRequiredItems) pushBackUnique _requiredItem; }; } forEach ("true" configClasses (configFile >> "ACE_Tags")); diff --git a/addons/tagging/functions/fnc_createTag.sqf b/addons/tagging/functions/fnc_createTag.sqf index 296fc4503f..5f2a60cf86 100644 --- a/addons/tagging/functions/fnc_createTag.sqf +++ b/addons/tagging/functions/fnc_createTag.sqf @@ -9,6 +9,7 @@ * 2: Colour of the tag (valid colours are black, red, green and blue or full path to custom texture) * 3: Object it should be tied to * 4: Unit that created the tag + * 5: Material of the tag (Optional) * * Return Value: * Tag created @@ -19,7 +20,7 @@ * Public: No */ -params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_object", "_unit"]; +params ["_tagPosASL", "_vectorDirAndUp", "_texture", "_object", "_unit", ["_material","",[""]]]; TRACE_5("createTag:",_tagPosASL,_vectorDirAndUp,_texture,_object,_unit); if (_texture == "") exitWith { @@ -29,9 +30,10 @@ if (_texture == "") exitWith { private _tag = createSimpleObject ["UserTexture1m_F", _tagPosASL]; _tag setObjectTextureGlobal [0, _texture]; +if (_material != "") then { _tag setObjectMaterialGlobal [0, _material] }; _tag setVectorDirAndUp _vectorDirAndUp; -// Throw a global event for mision makers +// Throw a global event for mission makers ["ace_tagCreated", [_tag, _texture, _object, _unit]] call CBA_fnc_globalEvent; if (isNull _object) exitWith {true}; diff --git a/addons/tagging/functions/fnc_quickTag.sqf b/addons/tagging/functions/fnc_quickTag.sqf index bb672ed947..1939ce1679 100644 --- a/addons/tagging/functions/fnc_quickTag.sqf +++ b/addons/tagging/functions/fnc_quickTag.sqf @@ -49,5 +49,16 @@ if (GVAR(quickTag) == 3) then { // Tag if !(_possibleTags isEqualTo []) then { private _availableTags = _possibleTags select {(_x select 2) in (_unit call EFUNC(common,uniqueItems))}; - [_unit, selectRandom ((selectRandom _availableTags) select 3)] call FUNC(tag); + (selectRandom _availableTags) params ["", "", "", "_textures", "", "_materials"]; + + ( + if (count _textures == count _materials) then { + private _textureIndex = floor random count _textures; + [_textures select _textureIndex, _materials select _textureIndex] + } else { + [selectRandom _textures, selectRandom _materials] + } + ) params ["_randomTexture", "_randomMaterial"]; + + [_unit, _randomTexture, _randomMaterial] call FUNC(tag); }; diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index 2f129ece28..1a0fe20e64 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -6,6 +6,7 @@ * Arguments: * 0: Unit * 1: The colour of the tag (valid colours are black, red, green and blue or full path to custom texture) + * 2: Material of the tag (Optional) * * Return Value: * Sucess @@ -18,7 +19,8 @@ params [ ["_unit", objNull, [objNull]], - ["_texture", "", [""]] + ["_texture", "", [""]], + ["_material", "", [""]] ]; if (isNull _unit || {_texture == ""}) exitWith { @@ -35,7 +37,7 @@ private _intersections = lineIntersectsSurfaces [_startPosASL, _endPosASL, _unit // If there's no intersections if (_intersections isEqualTo []) exitWith { - TRACE_3("No intersections",_intersections); + TRACE_1("No intersections",_intersections); false }; @@ -93,7 +95,7 @@ if ( !([ 0.5 * TAG_SIZE, 0.5 * TAG_SIZE] call _fnc_isOk) || {!([ 0.5 * TAG_SIZE,-0.5 * TAG_SIZE] call _fnc_isOk) || {!([-0.5 * TAG_SIZE, 0.5 * TAG_SIZE] call _fnc_isOk) || {!([-0.5 * TAG_SIZE,-0.5 * TAG_SIZE] call _fnc_isOk)}}}) exitWith { - TRACE_3("Unsuitable location:",_touchingPoint); + TRACE_1("Unsuitable location:",_touchingPoint); false }; @@ -110,6 +112,6 @@ private _vectorDirAndUp = [_surfaceNormal vectorMultiply -1, _v3]; // Tell the server to create the tag and handle its destruction [QGVAR(createTag), _this] call CBA_fnc_serverEvent; -}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _texture, _object, _unit], 0.6] call CBA_fnc_waitAndExecute; +}, [_touchingPoint vectorAdd (_surfaceNormal vectorMultiply 0.06), _vectorDirAndUp, _texture, _object, _unit, _material], 0.6] call CBA_fnc_waitAndExecute; true diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index f9fc615d78..75de55efcc 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index a0413a3346..9e0c1364da 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/tripod/CfgEventHandlers.hpp b/addons/tripod/CfgEventHandlers.hpp index eaec430c1e..3a79000a3c 100644 --- a/addons/tripod/CfgEventHandlers.hpp +++ b/addons/tripod/CfgEventHandlers.hpp @@ -7,13 +7,13 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/tripod/data/model.cfg b/addons/tripod/data/model.cfg index 3770ac0f82..517f9c50f1 100644 --- a/addons/tripod/data/model.cfg +++ b/addons/tripod/data/model.cfg @@ -65,4 +65,6 @@ class CfgModels { }; }; }; + + class w_sniper_tripod: Default {}; }; diff --git a/addons/tripod/stringtable.xml b/addons/tripod/stringtable.xml index a63bda06b0..daea7e95fd 100644 --- a/addons/tripod/stringtable.xml +++ b/addons/tripod/stringtable.xml @@ -91,7 +91,7 @@ régler szabályzás подстройка - aggiusta + regola 調節 조절 调整 diff --git a/addons/ui/functions/fnc_setAdvancedElement.sqf b/addons/ui/functions/fnc_setAdvancedElement.sqf index 0b5a174c5a..4e2ececf6c 100644 --- a/addons/ui/functions/fnc_setAdvancedElement.sqf +++ b/addons/ui/functions/fnc_setAdvancedElement.sqf @@ -6,7 +6,7 @@ * Arguments: * 0: Element Name * 1: Show/Hide Element - * 2: Show Hint + * 2: Show Hint (default: false) * 3: Force change even when disallowed (default: false) * * Return Value: @@ -18,12 +18,13 @@ * Public: No */ -params ["_element", "_show", ["_showHint", false, [true]], ["_force", false, [true]] ]; +params ["_element", "_show", ["_showHint", false, [true]], ["_force", false, [true]]]; private _cachedElement = GVAR(configCache) getVariable _element; -if (isNil "_cachedElement") exitWith {}; +if (isNil "_cachedElement") exitWith {TRACE_1("nil element",_this)}; if (!_force && {!GVAR(allowSelectiveUI)}) exitWith { + TRACE_1("not allowed",_this); [LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured); false }; @@ -31,8 +32,14 @@ if (!_force && {!GVAR(allowSelectiveUI)}) exitWith { _cachedElement params ["_idd", "_elements", "_location", "_conditions"]; // Exit if main vehicle type condition not fitting -private _canUseWeapon = ACE_player call CBA_fnc_canUseWeapon; -if ((_canUseWeapon && {_location == 2}) || {!_canUseWeapon && {_location == 1}}) exitWith {false}; +private _canUseWeaponOrInCargo = ACE_player call CBA_fnc_canUseWeapon || {-1 < vehicle ACE_player getCargoIndex ACE_player}; +if ( + (_canUseWeaponOrInCargo && {_location == VEHICLE_ONLY}) + || {!_canUseWeaponOrInCargo && {_location == GROUND_ONLY}} +) exitWith { + TRACE_3("skip location",_this,_canUseWeaponOrInCargo,_location); + false +}; // Get setting from config API { @@ -59,7 +66,7 @@ if (!_force) then { }; }; -_show = [1, 0] select _show; +private _fade = [1, 0] select _show; // Disable/Enable elements private _success = false; @@ -69,9 +76,9 @@ private _success = false; // Loop through IGUI displays as they can be present several times for some reason { if (_idd == ctrlIDD _x) then { - //TRACE_3("Setting Element Visibility",_show,_idd,_idc); + TRACE_4("Setting Element Visibility",_element,_fade,_idd,_idc); - (_x displayCtrl _idc) ctrlSetFade _show; + (_x displayCtrl _idc) ctrlSetFade _fade; (_x displayCtrl _idc) ctrlCommit 0; _success = true; diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index 11013cf28b..06b253238b 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/vector/functions/fnc_clearDisplay.sqf b/addons/vector/functions/fnc_clearDisplay.sqf index b54a3f534f..8d4578a2da 100644 --- a/addons/vector/functions/fnc_clearDisplay.sqf +++ b/addons/vector/functions/fnc_clearDisplay.sqf @@ -4,13 +4,13 @@ * Clears the vectors control items. * * Arguments: - * 0: String + * 0: "azimuth" or "distance" * * Return Value: * None * * Example: - * [5] call ace_vector_fnc_clearDisplay + * ["azimuth"] call ace_vector_fnc_clearDisplay * * Public: No */ diff --git a/addons/vector/functions/fnc_dataTransfer.sqf b/addons/vector/functions/fnc_dataTransfer.sqf index a1ee95df0c..b50a823be9 100644 --- a/addons/vector/functions/fnc_dataTransfer.sqf +++ b/addons/vector/functions/fnc_dataTransfer.sqf @@ -17,7 +17,7 @@ private _distance = call FUNC(getDistance); private _direction = call FUNC(getDirection); -private _azimuth = _direction select 0; -private _inclination = _direction select 1; +_direction params ["_azimuth", "_inclination"]; + //Send Data to connected GPS [QGVAR(rangefinderData), [_distance, _azimuth, _inclination]] call CBA_fnc_localEvent; diff --git a/addons/vector/functions/fnc_getFallOfShot.sqf b/addons/vector/functions/fnc_getFallOfShot.sqf index 8ff1f38332..7fbaa6ad98 100644 --- a/addons/vector/functions/fnc_getFallOfShot.sqf +++ b/addons/vector/functions/fnc_getFallOfShot.sqf @@ -15,14 +15,12 @@ * Public: No */ -private _distanceP1 = GVAR(pData) select 0; -private _directionP1 = GVAR(pData) select 1; -private _azimuthP1 = _directionP1 select 0; -private _inclinationP1 = _directionP1 select 1; + +GVAR(pData) params ["_distanceP1", "_directionP1"]; +_directionP1 params ["_azimuthP1", "_inclinationP1"]; private _distanceP2 = call FUNC(getDistance); private _directionP2 = call FUNC(getDirection); -private _azimuthP2 = _directionP2 select 0; -private _inclinationP2 = _directionP2 select 1; +_directionP2 params ["_azimuthP2", "_inclinationP2"]; private _abscissa = _distanceP1 * sin (_azimuthP1 - _azimuthP2); private _ordinate = _distanceP1 * cos (_inclinationP1 - _inclinationP2) - _distanceP2 * cos (_azimuthP1 - _azimuthP2); diff --git a/addons/vector/functions/fnc_getHeightDistance.sqf b/addons/vector/functions/fnc_getHeightDistance.sqf index 768436677c..00bd888cdf 100644 --- a/addons/vector/functions/fnc_getHeightDistance.sqf +++ b/addons/vector/functions/fnc_getHeightDistance.sqf @@ -18,8 +18,7 @@ private _distance = call FUNC(getDistance); private _direction = call FUNC(getDirection); -private _azimuth = _direction select 0; -private _inclination = _direction select 1; +_direction params ["_azimuth", "_inclination"]; if (_distance < -999) exitWith { [-1000, -1000] // return diff --git a/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf b/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf index 2abcd8238d..33d9a07dc0 100644 --- a/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf +++ b/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf @@ -15,15 +15,12 @@ * Public: No */ -private _distanceP1 = GVAR(pData) select 0; -private _directionP1 = GVAR(pData) select 1; -private _azimuthP1 = _directionP1 select 0; -private _inclinationP1 = _directionP1 select 1; +GVAR(pData) params ["_distanceP1", "_directionP1"]; +_directionP1 params ["_azimuthP1", "_inclinationP1"]; private _distanceP2 = call FUNC(getDistance); private _directionP2 = call FUNC(getDirection); -private _azimuthP2 = _directionP2 select 0; -private _inclinationP2 = _directionP2 select 1; +_directionP2 params ["_azimuthP2", "_inclinationP2"]; private _relDirection = sqrt ((_azimuthP1 - _azimuthP2) ^ 2 + (_inclinationP1 - _inclinationP2) ^ 2); private _relDistance = sqrt (_distanceP1 ^ 2 + _distanceP2 ^ 2 - 2 * _distanceP1 * _distanceP2 * cos _relDirection); diff --git a/addons/vector/functions/fnc_getRelativeDistance.sqf b/addons/vector/functions/fnc_getRelativeDistance.sqf index 71abfda53d..bbe9ca1672 100644 --- a/addons/vector/functions/fnc_getRelativeDistance.sqf +++ b/addons/vector/functions/fnc_getRelativeDistance.sqf @@ -15,15 +15,11 @@ * Public: No */ -private _distanceP1 = GVAR(pData) select 0; -private _directionP1 = GVAR(pData) select 1; -private _azimuthP1 = _directionP1 select 0; -private _inclinationP1 = _directionP1 select 1; - +GVAR(pData) params ["_distanceP1", "_directionP1"]; +_directionP1 params ["_azimuthP1", "_inclinationP1"]; private _distanceP2 = call FUNC(getDistance); private _directionP2 = call FUNC(getDirection); -private _azimuthP2 = _directionP2 select 0; -private _inclinationP2 = _directionP2 select 1; +_directionP2 params ["_azimuthP2", "_inclinationP2"]; private _relDirection = sqrt ((_azimuthP1 - _azimuthP2) ^ 2 + (_inclinationP1 - _inclinationP2) ^ 2); diff --git a/addons/vector/functions/fnc_illuminate.sqf b/addons/vector/functions/fnc_illuminate.sqf index 18535d2861..999fc5c29a 100644 --- a/addons/vector/functions/fnc_illuminate.sqf +++ b/addons/vector/functions/fnc_illuminate.sqf @@ -4,13 +4,13 @@ * * * Arguments: - * 0: String + * 0: Enable illumination * * Return Value: * None * * Example: - * ["5"] call ace_vector_fnc_illuminate + * [true] call ace_vector_fnc_illuminate * * Public: No */ diff --git a/addons/vector/functions/fnc_nextMode.sqf b/addons/vector/functions/fnc_nextMode.sqf index 74250ca1f2..cd00b4977d 100644 --- a/addons/vector/functions/fnc_nextMode.sqf +++ b/addons/vector/functions/fnc_nextMode.sqf @@ -4,13 +4,13 @@ * * * Arguments: - * 0: String + * 0: Name of mode ("settings", "config") * * Return Value: * Array * * Example: - * ["5"] call ace_vector_fnc_nextMode + * ["settings"] call ace_vector_fnc_nextMode * * Public: No */ diff --git a/addons/vector/functions/fnc_onKeyDown.sqf b/addons/vector/functions/fnc_onKeyDown.sqf index 6a58ff96fc..a9c6b90b2d 100644 --- a/addons/vector/functions/fnc_onKeyDown.sqf +++ b/addons/vector/functions/fnc_onKeyDown.sqf @@ -10,7 +10,7 @@ * None * * Example: - * ["5"] call ace_vector_fnc_onKeyDown + * ["azimuth"] call ace_vector_fnc_onKeyDown * * Public: No */ diff --git a/addons/vehiclelock/CfgEventHandlers.hpp b/addons/vehiclelock/CfgEventHandlers.hpp index 712cc2be1c..becf395052 100644 --- a/addons/vehiclelock/CfgEventHandlers.hpp +++ b/addons/vehiclelock/CfgEventHandlers.hpp @@ -16,21 +16,3 @@ class Extended_PostInit_EventHandlers { init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; - -class Extended_InitPost_EventHandlers { - class Car { - class ADDON { - serverInit = QUOTE(_this call FUNC(handleVehicleInitPost)); - }; - }; - class Tank { - class ADDON { - serverInit = QUOTE(_this call FUNC(handleVehicleInitPost)); - }; - }; - class Helicopter { - class ADDON { - serverInit = QUOTE(_this call FUNC(handleVehicleInitPost)); - }; - }; -}; diff --git a/addons/vehiclelock/CfgVehicles.hpp b/addons/vehiclelock/CfgVehicles.hpp index 1115928057..62a6a525fe 100644 --- a/addons/vehiclelock/CfgVehicles.hpp +++ b/addons/vehiclelock/CfgVehicles.hpp @@ -4,13 +4,13 @@ displayName = CSTRING(Action_UnLock); \ condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(2,3)]}); \ statement = QUOTE([ARR_3(QUOTE(QGVAR(setVehicleLock)), [ARR_2(_target,false)], [_target])] call CBA_fnc_targetEvent); \ - icon = QPATHTOF(UI\key_menuIcon_ca.paa); \ + icon = QPATHTOF(ui\key_menuIcon_ca.paa); \ }; \ class ACE_lockVehicle { \ displayName = CSTRING(Action_Lock); \ condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(0,1)]}); \ statement = QUOTE([ARR_3(QUOTE(QGVAR(setVehicleLock)), [ARR_2(_target,true)], [_target])] call CBA_fnc_targetEvent); \ - icon = QPATHTOF(UI\key_menuIcon_ca.paa); \ + icon = QPATHTOF(ui\key_menuIcon_ca.paa); \ }; \ class ACE_lockpickVehicle { \ displayName = CSTRING(Action_Lockpick); \ @@ -26,7 +26,7 @@ condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(2,3)]}); \ statement = QUOTE([ARR_3(QUOTE(QGVAR(setVehicleLock)), [ARR_2(_target,false)], [_target])] call CBA_fnc_targetEvent); \ exceptions[] = {"isNotSwimming"}; \ - icon = QPATHTOF(UI\key_menuIcon_ca.paa); \ + icon = QPATHTOF(ui\key_menuIcon_ca.paa); \ }; \ class ACE_lockVehicle { \ displayName = CSTRING(Action_Lock); \ @@ -34,7 +34,7 @@ condition = QUOTE(([ARR_2(_player, _target)] call FUNC(hasKeyForVehicle)) && {(locked _target) in [ARR_2(0,1)]}); \ statement = QUOTE([ARR_3(QUOTE(QGVAR(setVehicleLock)), [ARR_2(_target,true)], [_target])] call CBA_fnc_targetEvent); \ exceptions[] = {"isNotSwimming"}; \ - icon = QPATHTOF(UI\key_menuIcon_ca.paa); \ + icon = QPATHTOF(ui\key_menuIcon_ca.paa); \ }; \ class ACE_lockpickVehicle { \ displayName = CSTRING(Action_Lockpick); \ @@ -58,6 +58,9 @@ class CfgVehicles { class Helicopter: Air { MACRO_LOCK_ACTIONS }; + class Plane: Air { + MACRO_LOCK_ACTIONS + }; class Motorcycle: LandVehicle { MACRO_LOCK_ACTIONS }; @@ -79,7 +82,7 @@ class CfgVehicles { scope = 1; isGlobal = 1; isSingular = 1; - icon = QPATHTOF(UI\Icon_Module_VehicleLock_ca.paa); + icon = QPATHTOF(ui\Icon_Module_VehicleLock_ca.paa); functionPriority = 0; class Arguments { class LockVehicleInventory { @@ -117,7 +120,7 @@ class CfgVehicles { function = QFUNC(moduleSync); scope = 2; isGlobal = 0; - icon = QPATHTOF(UI\Icon_Module_VehicleKey_ca.paa); + icon = QPATHTOF(ui\Icon_Module_VehicleKey_ca.paa); functionPriority = 0; class Arguments {}; class ModuleDescription: ModuleDescription { diff --git a/addons/vehiclelock/XEH_postInit.sqf b/addons/vehiclelock/XEH_postInit.sqf index 3888a6e87a..64bd4fd642 100644 --- a/addons/vehiclelock/XEH_postInit.sqf +++ b/addons/vehiclelock/XEH_postInit.sqf @@ -4,12 +4,18 @@ [QGVAR(setupCustomKey), {_this call FUNC(serverSetupCustomKeyEH)}] call CBA_fnc_addEventHandler; [QGVAR(setVehicleLock), {_this call FUNC(setVehicleLockEH)}] call CBA_fnc_addEventHandler; -if (!hasInterface) exitwith {}; - ["ace_settingsInitialized", { - TRACE_1("SettingsInitialized eh",GVAR(LockVehicleInventory)); + TRACE_2("SettingsInitialized eh",GVAR(LockVehicleInventory),GVAR(VehicleStartingLockState)); - if (GVAR(LockVehicleInventory)) then { - ["CAManBase", "InventoryOpened", {_this call FUNC(onOpenInventory);}] call CBA_fnc_addClassEventHandler; + if (hasInterface && {GVAR(LockVehicleInventory)}) then { + ["CAManBase", "InventoryOpened", {_this call FUNC(onOpenInventory)}] call CBA_fnc_addClassEventHandler; + }; + if (isServer && {GVAR(VehicleStartingLockState) != -1}) then { + [{ + TRACE_1("adding lock handler",GVAR(VehicleStartingLockState)); + { + [_x, "initpost", LINKFUNC(handleVehicleInitPost), true, [], true] call CBA_fnc_addClassEventHandler; + } forEach ["Car", "Tank", "Air"]; + }, [], 0.25] call CBA_fnc_waitAndExecute; }; }] call CBA_fnc_addEventHandler; diff --git a/addons/vehiclelock/functions/fnc_handleVehicleInitPost.sqf b/addons/vehiclelock/functions/fnc_handleVehicleInitPost.sqf index e79a7b1573..eb0ecb21a7 100644 --- a/addons/vehiclelock/functions/fnc_handleVehicleInitPost.sqf +++ b/addons/vehiclelock/functions/fnc_handleVehicleInitPost.sqf @@ -2,7 +2,7 @@ /* * Author: PabstMirror * For every lockable vehicle, sets the starting lock state to a sane value. - * Only run if the InitModule is placed. + * Only run if the enabled via settings * * Arguments: * 0: Vehicle @@ -16,28 +16,18 @@ * Public: No */ -if (!isServer) exitWith {}; - params ["_vehicle"]; -TRACE_1("params",_vehicle); +TRACE_1("handleVehicleInitPost",_vehicle); -[{ - //If the module wasn't placed, just exit (needs to be in wait because objectInitEH is before moduleInit) - if (GVAR(VehicleStartingLockState) == -1) exitWith {}; - - params ["_vehicle"]; - - if ((_vehicle isKindOf "Car") || {_vehicle isKindOf "Tank"} || {_vehicle isKindOf "Helicopter"}) then { - //set lock state (eliminates the ambigious 1-"Default" and 3-"Locked for Player" states) - private _lock = switch (GVAR(VehicleStartingLockState)) do { - case (0): { (locked _vehicle) in [2, 3] }; - case (1): { true }; - case (2): { false }; - }; - if ((_lock && {(locked _vehicle) != 2}) || {!_lock && {(locked _vehicle) != 0}}) then { - TRACE_3("Setting Lock State",_lock,(typeOf _vehicle),_vehicle); - [QGVAR(SetVehicleLock), [_vehicle, _lock], [_vehicle]] call CBA_fnc_targetEvent; - }; +if (alive _vehicle) then { + //set lock state (eliminates the ambigious 1-"Default" and 3-"Locked for Player" states) + private _lock = switch (GVAR(VehicleStartingLockState)) do { + case 0: {locked _vehicle in [2, 3]}; + case 1: {true}; + case 2: {false}; }; - //Delay call until mission start (so everyone has the eventHandler's installed) -}, [_vehicle], 0.25] call CBA_fnc_waitAndExecute; + if ((_lock && {locked _vehicle != 2}) || {!_lock && {locked _vehicle != 0}}) then { + TRACE_3("Setting Lock State",_lock,typeOf _vehicle,_vehicle); + [QGVAR(SetVehicleLock), [_vehicle, _lock], [_vehicle]] call CBA_fnc_targetEvent; + }; +}; diff --git a/addons/vehiclelock/functions/fnc_hasKeyForVehicle.sqf b/addons/vehiclelock/functions/fnc_hasKeyForVehicle.sqf index 149ece1f95..bda8f67b65 100644 --- a/addons/vehiclelock/functions/fnc_hasKeyForVehicle.sqf +++ b/addons/vehiclelock/functions/fnc_hasKeyForVehicle.sqf @@ -22,20 +22,16 @@ TRACE_2("params",_unit,_veh); if (isNull _unit) exitWith {ERROR("null unit"); false}; if (isNull _veh) exitWith {ERROR("null vehicle"); false}; -private _returnValue = false; - //Master can open anything "no matter what" private _items = _unit call EFUNC(common,uniqueItems); -if ("ACE_key_master" in _items) then {_returnValue = true}; +if ("ACE_key_master" in _items) exitWith {true}; //Check side key private _sideKeyName = [_veh] call FUNC(getVehicleSideKey); -if (_sideKeyName in _items) then {_returnValue = true}; +if (_sideKeyName in _items) exitWith {true}; //Check custom keys private _customKeys = _veh getVariable [QGVAR(customKeys), []]; -{ - if (_x in (magazinesDetail _unit)) then {_returnValue = true;}; -} forEach _customKeys; +private _magazines = magazinesDetail _unit; -_returnValue +(_customKeys findIf {_x in _magazines}) != -1 diff --git a/addons/vehiclelock/functions/fnc_lockpick.sqf b/addons/vehiclelock/functions/fnc_lockpick.sqf index 66ed89fa6f..f106216c89 100644 --- a/addons/vehiclelock/functions/fnc_lockpick.sqf +++ b/addons/vehiclelock/functions/fnc_lockpick.sqf @@ -32,11 +32,11 @@ if ((locked _veh) == 0) exitWith {false}; //need lockpick item if !("ACE_key_lockpick" in (_unit call EFUNC(common,uniqueItems))) exitWith {false}; -private _vehLockpickStrenth = _veh getVariable[QGVAR(lockpickStrength), GVAR(DefaultLockpickStrength)]; -if (!(_vehLockpickStrenth isEqualType 0)) exitWith {ERROR("ACE_vehicleLock_LockpickStrength invalid"); false}; +private _vehLockpickStrength = _veh getVariable[QGVAR(lockpickStrength), GVAR(DefaultLockpickStrength)]; +if (!(_vehLockpickStrength isEqualType 0)) exitWith {ERROR("ACE_vehicleLock_LockpickStrength invalid"); false}; //-1 indicates unpickable lock -if (_vehLockpickStrenth < 0) exitWith {false}; +if (_vehLockpickStrength < 0) exitWith {false}; //Condition check for progressBar private _condition = { @@ -53,7 +53,7 @@ switch (_funcType) do { _returnValue = !([_unit, _veh] call FUNC(hasKeyForVehicle)) && {(locked _veh) in [2, 3]}; }; case "startLockpick": { - [_vehLockpickStrenth, [_unit, _veh, "finishLockpick"], {(_this select 0) call FUNC(lockpick)}, {}, (localize LSTRING(Action_LockpickInUse)), _condition, ["isNotInside", "isNotSwimming"]] call EFUNC(common,progressBar); + [_vehLockpickStrength, [_unit, _veh, "finishLockpick"], {(_this select 0) call FUNC(lockpick)}, {}, (localize LSTRING(Action_LockpickInUse)), _condition, ["isNotInside", "isNotSwimming"]] call EFUNC(common,progressBar); }; case "finishLockpick": { [QGVAR(setVehicleLock), [_veh, false], [_veh]] call CBA_fnc_targetEvent; diff --git a/addons/vehiclelock/functions/fnc_moduleSync.sqf b/addons/vehiclelock/functions/fnc_moduleSync.sqf index f65ad5399d..5aede3f620 100644 --- a/addons/vehiclelock/functions/fnc_moduleSync.sqf +++ b/addons/vehiclelock/functions/fnc_moduleSync.sqf @@ -27,14 +27,13 @@ if !(_activated) exitWith {WARNING("Vehicle Lock Sync Module - placed but not ac [{ params ["_syncedObjects"]; - private _listOfVehicles = []; - { - if ((_x isKindOf "Car") || (_x isKindOf "Tank") || (_x isKindOf "Helicopter")) then { - _listOfVehicles pushBack _x; - }; - } forEach _syncedObjects; + private _listOfVehicles = _syncedObjects select { + private _object = _x; + #define CLASSNAMES ["Car", "Tank", "Air"] + IS_KIND_OF_ANY(_object,CLASSNAMES) + }; - if ((count _listOfVehicles) == 0) exitWith { //Verbose error for mission makers (only shows on server) + if (_listOfVehicles isEqualTo []) exitWith { //Verbose error for mission makers (only shows on server) ["ACE_VehicleLock_fnc_moduleSync: no vehicles synced"] call BIS_fnc_error; }; diff --git a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf index 836cccc21d..92cbe0144d 100644 --- a/addons/vehiclelock/functions/fnc_onOpenInventory.sqf +++ b/addons/vehiclelock/functions/fnc_onOpenInventory.sqf @@ -20,13 +20,13 @@ params ["_unit", "_container"]; TRACE_2("params",_unit,_container); //Only check for player: -if (_unit != ace_player) exitWith {}; +if (_unit != ACE_player) exitWith {}; if (GVAR(LockVehicleInventory) && //if setting not enabled - {(vehicle ace_player) == ace_player} && //Player dismounted - {(_container isKindOf "Car") || (_container isKindOf "Tank") || (_container isKindOf "Helicopter")} && //container is a lockable veh + {(vehicle ACE_player) == ACE_player} && //Player dismounted + {(_container isKindOf "Car") || {(_container isKindOf "Tank") || {_container isKindOf "Helicopter"}}} && //container is a lockable veh {(locked _container) in [2,3]} && //Vehicle is locked - {!([ace_player, _container] call FUNC(hasKeyForVehicle))} //player doesn't have key + {!([ACE_player, _container] call FUNC(hasKeyForVehicle))} //player doesn't have key ) then { //Give feedback that vehicle is locked playSound "ACE_Sound_Click"; @@ -41,8 +41,7 @@ if (GVAR(LockVehicleInventory) && //if setting not enabled (findDisplay 602) closeDisplay 0; [{ TRACE_1("Opening Player Inventory", _this); - ACE_player action ["Gear", objNull] + ACE_player action ["Gear", objNull]; }, []] call CBA_fnc_execNextFrame; - }, - []] call CBA_fnc_waitUntilAndExecute; + }, []] call CBA_fnc_waitUntilAndExecute; }; diff --git a/addons/vehiclelock/initSettings.sqf b/addons/vehiclelock/initSettings.sqf index 238268a8dc..30de8a692c 100644 --- a/addons/vehiclelock/initSettings.sqf +++ b/addons/vehiclelock/initSettings.sqf @@ -15,7 +15,8 @@ LSTRING(DisplayName), false, // default value true, // isGlobal - {[QGVAR(lockVehicleInventory), _this] call EFUNC(common,cbaSettings_settingChanged)} + {[QGVAR(lockVehicleInventory), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; [ @@ -24,5 +25,6 @@ LSTRING(DisplayName), [[-1,0,1,2],["str_cfg_envsounds_default", LSTRING(VehicleStartingLockState_AsIs), LSTRING(VehicleStartingLockState_Locked), LSTRING(VehicleStartingLockState_Unlocked)], 0], // [values, titles, defaultIndex] true, // isGlobal - {[QGVAR(vehicleStartingLockState), _this] call EFUNC(common,cbaSettings_settingChanged)} + {[QGVAR(vehicleStartingLockState), _this] call EFUNC(common,cbaSettings_settingChanged)}, + true // Needs mission restart ] call CBA_settings_fnc_init; diff --git a/addons/vehiclelock/script_component.hpp b/addons/vehiclelock/script_component.hpp index 77b7186373..066e4ea8b6 100644 --- a/addons/vehiclelock/script_component.hpp +++ b/addons/vehiclelock/script_component.hpp @@ -15,3 +15,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define IS_KIND_OF_ANY(object,classnames) ((classnames) findIf {(object) isKindOf _x} > -1) diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index 95fcadfc98..738e490454 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,7 @@ ACE 車両の施錠 ACE 차량 잠금 ACE Fahrzeugsperre + ACE Zamknięcie Pojazdu Unlock Vehicle diff --git a/addons/vehicles/functions/fnc_startEngine.sqf b/addons/vehicles/functions/fnc_startEngine.sqf index b5e414b039..507036b0cb 100644 --- a/addons/vehicles/functions/fnc_startEngine.sqf +++ b/addons/vehicles/functions/fnc_startEngine.sqf @@ -18,7 +18,7 @@ params ["_vehicle", "_isEngineOn"]; -if (!_isEngineOn || {floor abs speed _vehicle > 0}) exitWith {}; +if (!_isEngineOn || {floor abs speed _vehicle > 0 || {!isNull isVehicleCargo _vehicle}}) exitWith {}; [{ params ["_args", "_idPFH"]; diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index b51e262bdc..b2d282b305 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -37,6 +37,7 @@ Speed Limit Limite di velocità 速度制限 + Ograniczenie prędkości Speed Limiter @@ -58,11 +59,13 @@ Increase Speed Limit Aumenta limite di velocità 速度制限を増やす + Zwiększ ograniczenie prędkości Decrease Speed Limit Diminuisce limite di velocità 速度制限を減らす + Zmniejsz ograniczenie prędkości diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 7ea9bb1cce..5c2d2ec287 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/weaponselect/functions/fnc_putWeaponAway.sqf b/addons/weaponselect/functions/fnc_putWeaponAway.sqf index e74a9c4c6b..0622d62ae0 100644 --- a/addons/weaponselect/functions/fnc_putWeaponAway.sqf +++ b/addons/weaponselect/functions/fnc_putWeaponAway.sqf @@ -17,6 +17,4 @@ params ["_unit"]; -_unit call EFUNC(common,fixLoweredRifleAnimation); - _unit action ["SwitchWeapon", _unit, _unit, 299]; diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index 758a20ffcf..5148114b0f 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -376,6 +376,7 @@ 切換碰撞燈 切换碰撞灯 衝突防止灯を切り替え + Przełącz światła kolizyjne diff --git a/addons/weather/functions/fnc_calculateRoughnessLength.sqf b/addons/weather/functions/fnc_calculateRoughnessLength.sqf index 17519c8092..57723355e8 100644 --- a/addons/weather/functions/fnc_calculateRoughnessLength.sqf +++ b/addons/weather/functions/fnc_calculateRoughnessLength.sqf @@ -19,8 +19,10 @@ #define ROUGHNESS_LENGTHS [0.0002, 0.0005, 0.0024, 0.03, 0.055, 0.1, 0.2, 0.4, 0.8, 1.6] private _windSource = _this vectorDiff ((vectorNormalized wind) vectorMultiply 25); - -private _nearBuildings = count (_windSource nearObjects ["Building", 50]); +private _nearBuildings = { + // Filter lights - fixes high roughness on airports (#6602) + str _x find "light" == -1 +} count (_windSource nearObjects ["Building", 50]); private _isWater = surfaceIsWater _windSource; if (_nearBuildings == 0 && _isWater) exitWith { diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 12ef0dc630..c5cf4d4a37 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -89,6 +89,7 @@ 透过增加湿度、温度与气压来增强天气模拟的表现。 気温や湿度、大気圧によって既存の天候を拡張します。 온도, 습도 및 기압에 따라 기존 날씨를 확장합니다. + Poszerza istniejącą pogodę o temperaturę, wilgotność i ciśnienie powietrza. Update Interval @@ -130,6 +131,7 @@ 风力模拟(基于地图) 風シミュレーション (マップを基に) 바람 시뮬레이션 (지도 기반) + Symulacja Wiatru (bazowana na mapie) Enables the map based wind simulation (overwrites vanilla wind) @@ -139,6 +141,7 @@ 启用后将遵照地图特色进行风力模拟(覆盖掉官方原版的风力模拟) マップを基にした風シミュレーションを有効化 (標準の風を上書き) 지도 기반의 바람 시뮬레이션을 활성화합니다 (바닐라 바람을 덮음) + Aktywuje symulację wiatru bazującą na mapie (nadpisuje wind z domyślnej wersji gry) diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 932a4c76a1..53648b2e37 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,4 +1,4 @@ - + diff --git a/addons/yardage450/CfgEventHandlers.hpp b/addons/yardage450/CfgEventHandlers.hpp index 10dce0a9bf..2bed8a2eef 100644 --- a/addons/yardage450/CfgEventHandlers.hpp +++ b/addons/yardage450/CfgEventHandlers.hpp @@ -7,12 +7,12 @@ class Extended_PreStart_EventHandlers { class Extended_PreInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + init = QUOTE(call COMPILE_FILE(XEH_preInit)); }; }; class Extended_PostInit_EventHandlers { class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_postInit) ); + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; }; diff --git a/addons/yardage450/data/Bushnell.rvmat b/addons/yardage450/data/bushnell.rvmat similarity index 100% rename from addons/yardage450/data/Bushnell.rvmat rename to addons/yardage450/data/bushnell.rvmat diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp index 74095cb4a2..1d86d5fee3 100644 --- a/addons/zeus/CfgVehicles.hpp +++ b/addons/zeus/CfgVehicles.hpp @@ -186,6 +186,13 @@ class CfgVehicles { function = QFUNC(moduleLoadIntoCargo); icon = "a3\ui_f\data\IGUI\Cfg\Actions\loadVehicle_ca.paa"; }; + class GVAR(moduleCargoParadrop): GVAR(moduleBase) { + curatorCanAttach = 1; + category = QGVAR(AI); + displayName = CSTRING(moduleCargoParadrop_DisplayName); + function = QFUNC(moduleCargoParadrop); + icon = QPATHTOF(UI\Icon_Module_Zeus_ParadropCargo_ca.paa); + }; class GVAR(modulePatrolArea): GVAR(moduleBase) { curatorCanAttach = 1; category = QGVAR(AI); @@ -317,4 +324,27 @@ class CfgVehicles { class ModuleArsenal_F: Module_F { function=QFUNC(bi_moduleArsenal); }; + + class Man; + class CAManBase: Man { + class ACE_SelfActions { + class GVAR(create) { + displayName = CSTRING(CreateZeus); + condition = QUOTE(call FUNC(canCreateModule)); + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; + //Set GVAR(zeus) to null first to disable the action through the isNil check + statement = QUOTE(GVAR(zeus) = objNull; [ARR_2(QQGVAR(createZeus), ACE_player)] call CBA_fnc_serverEvent); + showDisabled = 1; + icon = "\A3\Ui_F_Curator\Data\Logos\arma3_curator_eye_32_ca.paa"; + }; + class GVAR(delete) { + displayName = CSTRING(DeleteZeus); + condition = QUOTE(!(isNil QQGVAR(zeus) || {isNull GVAR(zeus)})); + exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting", "isNotOnLadder", "isNotRefueling"}; + statement = QUOTE(deleteVehicle GVAR(zeus); GVAR(zeus) = nil); + showDisabled = 1; + icon = "\A3\Ui_F_Curator\Data\Logos\arma3_curator_eye_32_ca.paa"; + }; + }; + }; }; diff --git a/addons/zeus/XEH_PREP.hpp b/addons/zeus/XEH_PREP.hpp index 910b0db4d1..2d218ddb8f 100644 --- a/addons/zeus/XEH_PREP.hpp +++ b/addons/zeus/XEH_PREP.hpp @@ -5,6 +5,7 @@ PREP(bi_moduleCurator); PREP(bi_moduleMine); PREP(bi_moduleProjectile); PREP(bi_moduleRemoteControl); +PREP(canCreateModule); PREP(getModuleDestination); PREP(handleZeusUnitAssigned); PREP(moduleAddArsenal); @@ -13,6 +14,7 @@ PREP(moduleAddSpareTrack); PREP(moduleAddSpareWheel); PREP(moduleAddOrRemoveFRIES); PREP(moduleCaptive); +PREP(moduleCargoParadrop); PREP(moduleConfigurePylons); PREP(moduleGarrison); PREP(moduleGlobalSetSkill); diff --git a/addons/zeus/XEH_postInit.sqf b/addons/zeus/XEH_postInit.sqf index 63a62d5948..6de64b6d99 100644 --- a/addons/zeus/XEH_postInit.sqf +++ b/addons/zeus/XEH_postInit.sqf @@ -1,5 +1,7 @@ #include "script_component.hpp" +#define IDD_DISPLAY3DEN 313 + ["ace_settingsInitialized",{ // Only add an InitPost EH if setting is enabled (and apply retroactively) if (isServer && {GVAR(autoAddObjects)}) then { @@ -39,4 +41,44 @@ if (isServer) then { _x removeCuratorEditableObjects [_objects, true]; } forEach allCurators; }] call CBA_fnc_addEventHandler; + + [QGVAR(createZeus), { + params ["_ownerPlayer"]; + private _owner = ["#adminLogged", getPlayerUID _ownerPlayer] select isMultiplayer; + private _group = createGroup sideLogic; + private _zeus = _group createUnit ["ModuleCurator_F", [0,0,0], [], 0, "NONE"]; + missionNamespace setVariable [format [QGVAR(zeus_%1), _owner], _zeus]; + _zeus setVariable ["owner", _owner, true]; + _zeus setVariable ["Addons", 3, true]; + _zeus setVariable ["BIS_fnc_initModules_disableAutoActivation", false]; + _zeus setCuratorCoef ["Place", 0]; + _zeus setCuratorCoef ["Delete", 0]; + _group deleteGroupWhenEmpty true; + if (!isMultiplayer && {!isNull findDisplay IDD_DISPLAY3DEN}) then { + // if loaded from editor (but not after restart), addons are not activated so we do it manually + private _addons = ('true' configClasses (configFile >> "CfgPatches")) apply {configName _x}; + activateAddons _addons; + removeAllCuratorAddons _zeus; + _zeus addCuratorAddons _addons; + }; + [QGVAR(zeusCreated), _zeus, _ownerPlayer] call CBA_fnc_targetEvent; + }] call CBA_fnc_addEventHandler; + + addMissionEventHandler ["HandleDisconnect", { + private _owner = _this select 2; + private _zeusVarName = format [QGVAR(zeus_%1), _owner]; + private _zeus = missionNamespace getVariable _zeusVarName; + if (!isNil "_zeus") then { + if (!isNull _zeus) then {deleteVehicle _zeus}; + missionNamespace setVariable [_zeusVarName, nil]; + }; + }]; +}; + +if (hasInterface) then { + [QGVAR(zeusCreated), { + params ["_zeus"]; + GVAR(zeus) = _zeus; + [localize "str_a3_cfgvehicles_moduletasksetstate_f_arguments_state_values_created_0"] call EFUNC(common,displayTextStructured); + }] call CBA_fnc_addEventHandler; }; diff --git a/addons/zeus/XEH_preInit.sqf b/addons/zeus/XEH_preInit.sqf index a55f9c304e..909005e73e 100644 --- a/addons/zeus/XEH_preInit.sqf +++ b/addons/zeus/XEH_preInit.sqf @@ -12,4 +12,6 @@ if (isServer) then { GVAR(GlobalSkillAI) = [0.5,0.5,0.5,0.5,true,true]; +#include "initSettings.sqf" + ADDON = true; diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp index 37cfa24dd4..932d5e09c8 100644 --- a/addons/zeus/config.cpp +++ b/addons/zeus/config.cpp @@ -54,7 +54,8 @@ class CfgPatches { }; class GVAR(cargo): ADDON { units[] = { - QGVAR(moduleLoadIntoCargo) + QGVAR(moduleLoadIntoCargo), + QGVAR(moduleCargoParadrop) }; }; class GVAR(repair): ADDON { diff --git a/addons/zeus/functions/fnc_bi_moduleArsenal.sqf b/addons/zeus/functions/fnc_bi_moduleArsenal.sqf index fffca62fc3..65c394a67e 100644 --- a/addons/zeus/functions/fnc_bi_moduleArsenal.sqf +++ b/addons/zeus/functions/fnc_bi_moduleArsenal.sqf @@ -39,6 +39,9 @@ if (_activated && local _logic) then { [{ params ["_unit"]; + player remoteControl _unit; + EGVAR(arsenal,moduleUsed) = true; + [_unit, _unit, true] call EFUNC(arsenal,openBox); }, [_unit]] call CBA_fnc_directCall; } else { diff --git a/addons/zeus/functions/fnc_canCreateModule.sqf b/addons/zeus/functions/fnc_canCreateModule.sqf new file mode 100644 index 0000000000..df6cb99400 --- /dev/null +++ b/addons/zeus/functions/fnc_canCreateModule.sqf @@ -0,0 +1,25 @@ +#include "script_component.hpp" +/* + * Author: Dystopian + * Check whether local player is currently allowed to create a Zeus Module + * + * Arguments: + * None + * + * Return Value: + * Allowed to create module + * + * Example: + * call ace_zeus_fnc_canCreateModule + * + * Public: No + */ + +(isNil QGVAR(zeus)) && { + switch (GVAR(canCreateZeus)) do { + case CAN_CREATE_ADMIN: {isServer || {IS_ADMIN_LOGGED}}; + case CAN_CREATE_CONSOLE: {call BIS_fnc_isDebugConsoleAllowed}; + case CAN_CREATE_ALL: {true}; + default {false}; + } +} diff --git a/addons/zeus/functions/fnc_moduleCargoParadrop.sqf b/addons/zeus/functions/fnc_moduleCargoParadrop.sqf new file mode 100644 index 0000000000..948a54a7a9 --- /dev/null +++ b/addons/zeus/functions/fnc_moduleCargoParadrop.sqf @@ -0,0 +1,71 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Commands the selected vehicle to paradrop all cargo at the specified location + * + * Arguments: + * 0: Module logic + * 1: Synchronized units + * 2: Activated + * + * Return Value: + * None + * + * Example: + * [LOGIC, [], true] call ace_zeus_fnc_moduleCargoParadrop + * + * Public: No + */ + +if (canSuspend) exitWith {[FUNC(moduleCargoParadrop), _this] call CBA_fnc_directCall;}; + +params ["_logic", "", "_activated"]; + +if ((!local _logic) || {!_activated}) exitWith {}; + +// Validate the module target +private _vehicle = attachedTo _logic; +private _pilot = driver _vehicle; +TRACE_4("moduleCargoParadrop placed",_logic,typeOf _vehicle,_pilot,typeOf _pilot); + +deleteVehicle _logic; // cleanup logic now, we just needed it to get the attached vehicle + +if (!(missionNamespace getVariable [QEGVAR(cargo,enable), false])) exitWith { + [LSTRING(RequiresAddon)] call FUNC(showMessage); +}; +if (isNull _vehicle) exitWith { + [LSTRING(NothingSelected)] call FUNC(showMessage); +}; +if (!(_vehicle isKindOf "Air")) exitWith { + [format ["%1 %2", localize "str_dn_aircraft", localize "str_msg_no_veh_select"]] call FUNC(showMessage); +}; +if ((!alive _vehicle) || {!alive _pilot}) exitWith { + [LSTRING(OnlyAlive)] call FUNC(showMessage); +}; +if ([_pilot] call EFUNC(common,isPlayer)) exitWith { + ["str_a3_cfgvehicles_moduleremotecontrol_f_errorPlayer"] call FUNC(showMessage); +}; +if ((_vehicle getVariable [QEGVAR(cargo,loaded), []]) isEqualTo []) exitWith { + [LSTRING(paradrop_noCargoLoaded)] call FUNC(showMessage); +}; + +[_vehicle, { + params ["_successful", "_vehicle", "_mousePosASL"]; + TRACE_3("getModuleDestination return",_successful,_vehicle,_mousePosASL); + + if ((!_successful) || {!alive _vehicle}) exitWith {}; + + private _pilot = driver _vehicle; + private _group = group _pilot; + + if ((!alive _vehicle) || {!alive _pilot} || {[_pilot] call EFUNC(common,isPlayer)}) exitWith {TRACE_2("invalid",_vehicle,_pilot);}; + + [_group] call CBA_fnc_clearWaypoints; + + private _wp = _group addWaypoint [ASLtoAGL _mousePosASL, 0]; + _wp setWaypointType "SCRIPTED"; + _wp setWaypointScript QPATHTOF(functions\DOUBLES(fnc,moduleCargoParadropWaypoint).sqf); + + TRACE_2("Waypoint Added",_wp,local _group); // Locality is handled by the waypoint + +}, localize LSTRING(moduleCargoParadrop_DisplayName), "\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], 45] call FUNC(getModuleDestination); diff --git a/addons/zeus/functions/fnc_moduleCargoParadropWaypoint.sqf b/addons/zeus/functions/fnc_moduleCargoParadropWaypoint.sqf new file mode 100644 index 0000000000..1b4e00960c --- /dev/null +++ b/addons/zeus/functions/fnc_moduleCargoParadropWaypoint.sqf @@ -0,0 +1,75 @@ +#include "script_component.hpp" +/* + * Author: PabstMirror + * Handles the paradrop cargo scripted waypoint (Scheduled Environment) + * + * Arguments: + * 0: Group + * 1: Waypoint Position + * + * Return Value: + * Waypoint Finished + * + * Example: + * [group, [0,0,0]] call ace_zeus_fnc_moduleCargoParadropWaypoint + * + * Public: No + */ + +params [["_vehicleGroup", grpNull, [grpNull]], ["_wpPos", [0, 0, 0], [[]], 3]]; +TRACE_2("moduleCargoParadropWaypoint",_vehicleGroup,_wpPos); + +private _vehicle = vehicle leader _vehicleGroup; +private _commander = driver _vehicle; +private _cargo = _vehicle getVariable [QEGVAR(cargo,loaded), []]; +if (!(_vehicle isKindOf "Air")) exitWith {WARNING_1("not in a air vehicle",typeOf _vehicle); true}; +if (_cargo isEqualTo []) exitWith {WARNING_1("no cargo",_cargo); true}; + +private _previousSpeedMode = speedMode _vehicleGroup; +private _nextMoveUpdate = -1; +private _closeEnoughTicks = 0; // should prevent aircraft from endlessly going in circles trying to hit a point + +// Start moving the vehicle to the drop off point +waitUntil { + sleep 0.1; + if ((!alive _vehicle) || {!alive _commander}) exitWith {true}; + + if (CBA_missionTime > _nextMoveUpdate) then { + private _heading = _vehicle getDir _wpPos; + private _movePos = _vehicle getPos [1000, _heading]; + TRACE_2("move",_vehicleGroup,_movePos); + _vehicle flyInHeight 150; + _vehicleGroup move _movePos; + _nextMoveUpdate = CBA_missionTime + 3; + }; + if ((_vehicle distance2D _wpPos) < 300) then {_closeEnoughTicks = _closeEnoughTicks + 1}; + private _leadDistance = _closeEnoughTicks * 3 + linearConversion [0, 300, (speed _vehicle), 50, 100, true]; + (_vehicle distance2D _wpPos) < _leadDistance +}; +TRACE_2("Finished primary movement",_vehicle distance2D _wpPos,_closeEnoughTicks); + +if ((!alive _vehicle) || {!alive _commander}) exitWith {TRACE_2("died",alive _vehicle, alive _commander); true}; +if (((getPos _vehicle) select 2) < 25) exitWith {TRACE_1("too low",getPos _vehicle); true}; + +// Fly level and straight +private _unloadFlightPos = _vehicle getRelPos [1000, 0]; +_vehicle flyInHeight 150; +_vehicleGroup setSpeedMode "LIMITED"; +_vehicleGroup move _unloadFlightPos; + +sleep 0.5; + +TRACE_2("Starting unload",_vehicle,_cargo); +{ + TRACE_1("cargo-paradropItem",_x); + [QEGVAR(cargo,paradropItem), [_x, _vehicle, false], _vehicle] call CBA_fnc_targetEvent; + sleep 1; +} forEach (+_cargo); // copy because array will be modified after each drop + +TRACE_1("Unload finished",_vehicle); + +sleep 0.5; +_vehicleGroup setSpeedMode _previousSpeedMode; + +TRACE_1("WP Done",_vehicle); +true diff --git a/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf b/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf index a43ba78189..4659fba2d5 100644 --- a/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf +++ b/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf @@ -20,7 +20,7 @@ params ["_varName", "_varValue"]; _varValue params ["_general", "_accuracy", "_handling", "_spotting", "_cover", "_combat"]; TRACE_1("Params",_this); -TRACE_6("AI settings updated",GVAR(GlobalSkillAI)); +TRACE_1("AI settings updated",GVAR(GlobalSkillAI)); { if (local _x) then { _x setSkill ["general", _general]; diff --git a/addons/zeus/functions/fnc_moduleGroupSide.sqf b/addons/zeus/functions/fnc_moduleGroupSide.sqf index 397320f0ee..087838ed30 100644 --- a/addons/zeus/functions/fnc_moduleGroupSide.sqf +++ b/addons/zeus/functions/fnc_moduleGroupSide.sqf @@ -1,6 +1,6 @@ #include "script_component.hpp" /* - * Author: SilentSpike + * Author: SilentSpike, Brett * Zeus module function to change side of a group on dialog confirmation * * Arguments: @@ -25,20 +25,30 @@ if (_side == _newSide) exitWith {}; private _oldGroup = group _unit; private _newGroup = createGroup _newSide; +// Preserve groupid from the previous group if doesn't already exist +if ((allGroups findIf {side _x isEqualTo _newSide && {(groupId _oldGroup) isEqualTo (groupId _newGroup)}}) == -1) then { + _newGroup setGroupIdGlobal [groupId _oldGroup]; +}; + // Pretty hacky, will replace units return group with this new group if unconcious if (GETVAR(_unit,ACE_isUnconscious,false) && {GETMVAR(EGVAR(medical,moveUnitsFromGroupOnUnconscious),false)}) then { - private _previousGroupsList = _unit getVariable [QEGVAR(common,previousGroupSwitchTo), []]; + private _previousGroupsList = _unit getVariable [QEGVAR(common,previousGroupSwitchTo), []]; - { - if ("ACE_isUnconscious" == (_x select 2)) exitWith { - _x set [0,_newGroup]; - _x set [1,_newSide]; - _previousGroupsList set [_forEachIndex, _x]; - }; - } forEach _previousGroupsList; + { + if ("ACE_isUnconscious" == (_x select 2)) exitWith { + _x set [0,_newGroup]; + _x set [1,_newSide]; + _previousGroupsList set [_forEachIndex, _x]; + }; + } forEach _previousGroupsList; - _unit setVariable [QEGVAR(common,previousGroupSwitchTo), _previousGroupsList, true]; + _unit setVariable [QEGVAR(common,previousGroupSwitchTo), _previousGroupsList, true]; } else { - (units _unit) joinSilent _newGroup; + // Preserve assignedTeam for each unit + { + private _team = assignedTeam _x; + [_x] joinSilent _newGroup; + _x assignTeam _team; + } forEach units _unit; deleteGroup _oldGroup; }; diff --git a/addons/zeus/functions/fnc_moduleLoadIntoCargo.sqf b/addons/zeus/functions/fnc_moduleLoadIntoCargo.sqf index a5462443bb..7411c8ee9f 100644 --- a/addons/zeus/functions/fnc_moduleLoadIntoCargo.sqf +++ b/addons/zeus/functions/fnc_moduleLoadIntoCargo.sqf @@ -43,7 +43,7 @@ if (!alive _cargo) exitWith { params ["_successful", "_cargo", "_mousePosASL"]; if (!_successful) exitWith {}; - private _holder = (nearestObjects [ASLToAGL _mousePosASL, EGVAR(cargo,cargoHolderTypes), 5]) param [0, objNull]; + private _holder = (nearestObjects [ASLToAGL _mousePosASL, EGVAR(cargo,cargoHolderTypes), 15, true]) param [0, objNull]; // 2d distance search if (isNull _holder) exitWith { [LSTRING(NothingSelected)] call FUNC(showMessage); }; diff --git a/addons/zeus/initSettings.sqf b/addons/zeus/initSettings.sqf new file mode 100644 index 0000000000..1db3fe5205 --- /dev/null +++ b/addons/zeus/initSettings.sqf @@ -0,0 +1,22 @@ +[ + QGVAR(canCreateZeus), + "LIST", + format [LLSTRING(MenuSetting), LLSTRING(CreateZeus)], + format ["ACE %1", LLSTRING(DisplayName)], + [ + [ + CAN_CREATE_NONE, + CAN_CREATE_ADMIN, + CAN_CREATE_CONSOLE, + CAN_CREATE_ALL + ], + [ + localize "STR_A3_None", + localize "str_3den_attributes_enabledebugconsole_host_text", + localize "str_ui_debug_title", + localize "str_3den_attributes_enabledebugconsole_all_text" + ], + 0 + ], + true +] call CBA_settings_fnc_init; diff --git a/addons/zeus/script_component.hpp b/addons/zeus/script_component.hpp index edbc5b2954..957c7699d3 100644 --- a/addons/zeus/script_component.hpp +++ b/addons/zeus/script_component.hpp @@ -23,3 +23,8 @@ #define H_PART(num) (num * (SIZEY / 25)) #define X_PART(num) (W_PART(num) + (safeZoneX + (safeZoneW - SIZEX) / 2)) #define Y_PART(num) (H_PART(num) + (safeZoneY + (safeZoneH - SIZEY) / 2)) + +#define CAN_CREATE_NONE -1 +#define CAN_CREATE_ADMIN 0 +#define CAN_CREATE_CONSOLE 1 +#define CAN_CREATE_ALL 2 diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index de8cef035c..0df5016f7d 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -8,6 +8,7 @@ 宙斯 Zeus 제우스 + Zeus Zeus Settings @@ -36,7 +37,7 @@ Különböző beállítási lehetőségeket biztosít a Zeus részeihez. Позволяет контролировать различные аспекты Зевса. Fornisce controllo su vari aspetti di Zeus. - Zeus の操作性をさまざまな側面から強化します。 + Zeus の操作性を様々な側面から強化します。 Zeus에게 다양한 방면의 조작을 제공해줍니다 提供宙斯各个方面的控制权 提供宙斯各個方面的控制權 @@ -68,7 +69,7 @@ Globális üzeneteket jelez ki, ha egy játékos Zeus-nak lesz beosztva. Отображает глобальное всплывающее сообщение, когда один из игроков становится Зевсом. Mostra messaggi popup globali quando un giocatore viene assegnato come Zeus. - プレイヤーが Zeus になるとき、全体へポップアップ表示をおこないます。 + プレイヤーが Zeus になる際、全体へポップアップ表示を行います。 플레이어가 Zeus 될 시 서버에 이를 알리는 팝업이 등장합니다. 当一位玩家被指定为宙斯时显示全域讯息 當一位玩家被指定為宙斯時顯示全域訊息 @@ -132,7 +133,7 @@ Szélhangokat játszik le, ha a Zeus távvezérel egy egységet. Проигрывает звук ветра каждый раз, когда Зевс вселяется в юнита. Esegui rumori di vento quando Zeus controlla un'unità in remoto. - ユニットが Zeus 遠隔操作になったとき、風の音がします。 + ユニットが Zeus 遠隔操作になった際、風の音がします。 Zeus가 유닛을 조작할 때 바람소리가 납니다. 当宙斯开始控制单位时利用风的声音提示 當宙斯開始控制單位時利用風的聲音提示 @@ -148,7 +149,7 @@ Tüzérségi figyelmeztetés Предупреждение об арте Allarme Esplosivi - 砲撃の警告 + 砲撃警告 폭격 경고 武装警告 武裝警告 @@ -164,7 +165,7 @@ Rádiós figyelmeztetés kiadása, ha a Zeus tüzérséget használ. Проигрывает звук радио каждый раз, когда Зевс использует артиллерию. Riproduci un messaggio radio quando Zeus usa esplosivi. - Zeus が砲撃をつかうときに、無線で警告を流します。 + Zeus が砲撃を使う際に、無線で警告を流します。 Zeus가 폭격시 경고 무전을 재생합니다. 当宙斯开始攻击时使用无线电警告 當宙斯開始攻擊時使用無線電警告 @@ -244,7 +245,7 @@ Elfogott állapot váltása Пленный (вкл./выкл.) Attivatore Prigioniero - 捕虜として切り替え + 捕虜に切り替え 포로 토글 切换俘虏 切換俘虜 @@ -265,7 +266,7 @@ Update Editable Objects Aktualisiere bearbeitbare Objekte - 編集可能なオブジェクトを更新 + 編集可能オブジェクトを更新 Aktualizuj edytowalne obiekty 수정 가능한 물체 갱신 Màj les objets éditables @@ -277,21 +278,27 @@ Editing Mode 編輯模式 Modalità per editare + 編集モード + Tryb Edytowania Add or remove editable objects from Zeus 新增或移除可編輯物件給宙斯 Agguingi o rimuovi oggetti che Zeus può modificare + Zeus から編集可能オブジェクトの追加と削除をする + Dodaj lub usuń edytowalne obiekty z Zeus'a Add Objects 新增物件 Aggiungi Oggetti + オブジェクト追加 + Dodaj obiekty Remove Objects Entferne Objekte - オブジェクトの削除 + オブジェクト削除 물체 삭제 Usuń obiekty Enlève les objets @@ -313,7 +320,7 @@ Apply changes to all curators Änderungen bei allen Zeus' aktualisieren - 全キュレーターへ変更を適用 + 全キュレーターへ変更を適用します。 모든 큐레이터에 변화를 적용합니다 Zatwierdź zmiany dla wszystkich kuratorów Applique les changements à tous les curateurs @@ -323,16 +330,22 @@ Additional Objects + Oggetti aggiuntivi + オブジェクト増加 + Dodatkowe obiekty Additional objects to include in the action regardless of Task Radius + Oggetti aggiuntivi da includere nell'azione indipendentemente dal Raggio di Attività + タスク範囲に関係無くオブジェクトを更に増加させます + Dodatkowe obiekty do uwzględnienia w akcji niezależnie od zasięgu zadania Global AI Skill Compétence global de l'IA Мастерство ботов Globální zkušenosti AI - 総合的な AI スキル + 総合的 AI スキル Globalne umiejętności AI Globale KI-Fähigkeit 서버 인공지능 실력 @@ -563,7 +576,7 @@ Unable to remove FRIES, ropes are deployed. FRIES kann nicht entfernt werden, noch in Benutzung - すでにロープが展開されているため、FRIES を削除できません。 + 既にロープが展開されているため、FRIES を削除できません。 패스트로프 제거 불가능, 줄이 이미 배치되었습니다. Nie można usunąć FRIES, liny są wypuszczone. Pas en mesure d'enlever le FRIES, les cordes ne sont pas déployées. @@ -759,7 +772,7 @@ Ersatzkette hinzufügen Agregar oruga de repuesto Ajouter une chenille de secours - 車両へ予備タイヤを追加します。 + 車両へ予備タイヤを追加 예비 궤도 추가 增加备用履带 增加備用履帶 @@ -932,12 +945,21 @@ None + Niente + Żadne + なし Players + Giocatori + Gracze + プレイヤー Players and AI + Giocati e AI + Gracze i SI + プレイヤーと AI Add Objects to Curator @@ -987,6 +1009,7 @@ 選擇要卸載的貨物 Scegli il carico da scaricare 選択したカーゴを降ろす + Wybierz ładunek do wyładowania Task Radius @@ -1066,6 +1089,7 @@ 裝載到貨物中 装载到货物中 화물 싣기 + Załaduj do ładunku Toggle NVGs @@ -1076,6 +1100,7 @@ 切換夜視鏡 切换夜视镜 야시경 토글 + Przełącz NVG NVG Equipment @@ -1086,6 +1111,7 @@ 夜視鏡裝備 夜视镜装备 야시경 장비 + Ekwipunek NVG Add or remove NVGs from units @@ -1096,6 +1122,7 @@ 增加或移除單位的夜視鏡 增加或移除单位的夜视镜 야시경 추가/제거 + Dodaj lub usuń noktowizję z jednostek Toggle Target @@ -1103,6 +1130,7 @@ 切换目标 切換目標 Scambia obiettivo + Przełącz cel Units affected by the toggle @@ -1110,6 +1138,7 @@ 被选单位受切换影响 受切換所影響的單位 Unità influenzate dallo scambio + Jednostki pod wpływem przełączenia Selected Group @@ -1120,6 +1149,7 @@ 選擇小隊 选择小队 그룹 선택 + Wybrana grupa Toggle Flashlights @@ -1130,6 +1160,7 @@ 切換手電筒 切换手电筒 손전등 토글 + Przełącz latarki Flashlights @@ -1140,6 +1171,7 @@ 手電筒 手电筒 손전등 + Latarki Add Gear @@ -1150,6 +1182,7 @@ 增加裝備 增加装备 장비 추가 + Dodaj wyposażenie Garrison Group @@ -1159,6 +1192,7 @@ 佈置駐軍 布置驻军 그룹 주둔 + Rozmieść grupę w garnizonie Fill from top to bottom @@ -1168,6 +1202,7 @@ 由上而下進行填滿 由上而下进行填满 위에서부터 채우기 + Wypełnij od góry do dołu Fill buildings from the highest position first @@ -1177,6 +1212,7 @@ 從建築物的最高點開始布置衛哨 从建筑物的最高点开始布置卫哨 건물의 높은 위치부터 먼저 채움 + Wypełnij budynki zaczynając od najwyższej pozycji Building filling mode @@ -1186,6 +1222,7 @@ 駐軍填充建築物模式 驻军填充建筑物模式 건물 채우기 모드 + Tryb wypełniania budynków Even filling @@ -1195,6 +1232,7 @@ 平均分配 平均分配 평균 채우기 + Równe wypełnienie Building by building @@ -1204,6 +1242,7 @@ 一棟填滿後再換下一棟 一栋填满后再换下一栋 건물에서 건물로 + Budynek za budynkiem Random filling @@ -1213,6 +1252,7 @@ 隨機分配 随机分配 무작위 채우기 + Losowe wypełnienie Teleport @@ -1222,6 +1262,7 @@ 傳送 传送 순간이동 + Teleport Un-garrison Group @@ -1231,6 +1272,7 @@ 解除駐軍駐守狀態 解除驻军驻守状态 주둔해제 + Cofnij rozmieszczenie grupu w garnizonie No players found @@ -1433,7 +1475,7 @@ Die Einheit ist bereits ein Selbstmordattentäter Az egység már öngyilkos bombázó L'unità è già un kamikaze - すでに自爆ユニットです + 既に自爆ユニットです 유닛은 이미 자살 폭탄 테러범이다. Jednostka jest już zamachowcem-samobójcą A unidade já é um suicida @@ -1446,6 +1488,7 @@ 添加ACE模式军火库 增加完整的ACE軍火庫 Aggiungi l'arsenale ACE completo + Dodaj pełny arsenał ACE Remove ACE Arsenal @@ -1453,6 +1496,38 @@ 删除ACE模式军火库 移除ACE軍火庫 Rimuovi l'arsenale ACE + Usuń arsenał ACE + + + Create Zeus + Создать Зевса + Zeus を作る + Stwórz Zeus'a + Crea Zeus + + + Delete Zeus + Удалить Зевса + Zeus を消す + Usuń Zeus'a + Cancella Zeus + + + "%1" menu + Меню "%1" + "%1" メニュー + "%1" menu + menu "%1" + + + Paradrop Cargo + カーゴを空中投下 + Zrzut ładunku (cargo) + + + No cargo loaded + カーゴは未積載 + Niczego nie załadowano do cargo diff --git a/addons/zeus/ui/Icon_Module_Zeus_ParadropCargo_ca.paa b/addons/zeus/ui/Icon_Module_Zeus_ParadropCargo_ca.paa new file mode 100644 index 0000000000..d1790a405b Binary files /dev/null and b/addons/zeus/ui/Icon_Module_Zeus_ParadropCargo_ca.paa differ diff --git a/circle.yml b/circle.yml index 2cdec68b4a..77b01ba205 100644 --- a/circle.yml +++ b/circle.yml @@ -1,22 +1,63 @@ version: 2 jobs: - build: + validate-scripts: docker: - - image: acemod/armake + - image: acemod/sqflint:latest steps: - checkout - run: - name: Validate SQF And Config style + name: Validate SQF and Config style command: python tools/sqf_validator.py && python tools/config_style_checker.py + + linting: + docker: + - image: acemod/sqflint:latest + steps: + - checkout + - run: + name: Lint sqf code + command: sqflint -d addons || true + + armake: + docker: + - image: acemod/armake:master + steps: + - checkout + - run: + name: Version + command: armake --version - run: name: Build - command: armake --version - - deploy: - name: Update documentation and translation statistics command: | + make -j 4 + + update-docs: + docker: + - image: acemod/armake:latest + steps: + - checkout + - run: + name: Update documentation and translation statistics + command: | if [ "${CIRCLE_BRANCH}" == "master" ] && [ "${CIRCLE_PROJECT_USERNAME}" == "acemod" ]; then pip install pygithub pygithub3 python3 tools/deploy.py else echo "Skipping, not on acemod/ACE3 master branch..." fi + +workflows: + version: 2 + build-job: + jobs: + - linting + - validate-scripts + - armake: + requires: + - validate-scripts + - update-docs: + requires: + - armake + filters: + branches: + only: master diff --git a/docs/.gitattributes b/docs/.gitattributes index 3c59efe684..de2616570b 100644 --- a/docs/.gitattributes +++ b/docs/.gitattributes @@ -2,3 +2,4 @@ *.png binary *.jpg binary *.paa binary +*.sh eol=lf diff --git a/docs/Dockerfile b/docs/Dockerfile index d8ae94bc6a..b979f76fe3 100644 --- a/docs/Dockerfile +++ b/docs/Dockerfile @@ -1,6 +1,6 @@ -FROM phpcommunity/github-pages +FROM starefossen/github-pages LABEL maintainer "bux" -COPY ./entrypoint.sh /usr/src/app +COPY entrypoint.sh /usr/local/bin/entrypoint -ENTRYPOINT ["./entrypoint.sh"] +ENTRYPOINT ["/usr/local/bin/entrypoint"] diff --git a/docs/README_DE.md b/docs/README_DE.md index 297113ed81..701939741a 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Fehlermeldungen @@ -18,8 +18,8 @@ ACE3 Slack - - ACE3 Build Status + + ACE3 Build Status

diff --git a/docs/README_PL.md b/docs/README_PL.md index a8f008ed77..b99b96ca95 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -3,7 +3,7 @@

- ACE3 Wersja + ACE3 Wersja ACE3 Zagadnienia @@ -17,8 +17,8 @@ ACE3 Slack - - ACE3 Build Status + + ACE3 Build Status

Wymaga najnowszej wersji CBA A3. Odwiedź nas na Facebook | YouTube | Twitter | Reddit

diff --git a/docs/_config.yml b/docs/_config.yml index 2ae92cadb6..224559582d 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -9,16 +9,16 @@ ace: version: major: 3 minor: 12 - patch: 3 - build: 36 + patch: 6 + build: 43 acex: githubUrl: https://github.com/acemod/ACEX version: major: 3 - minor: 3 - patch: 1 - build: 8 + minor: 4 + patch: 2 + build: 13 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 09dddceed8..a1d68d7786 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -9,16 +9,16 @@ ace: version: major: 3 minor: 12 - patch: 3 - build: 36 + patch: 6 + build: 43 acex: githubUrl: https://github.com/acemod/ACEX version: major: 3 - minor: 3 - patch: 1 - build: 8 + minor: 4 + patch: 2 + build: 13 markdown: kramdown diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 40abe57472..f19bcdbc93 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -43,7 +43,7 @@ {% endif %} {% if include.component == "captives" %} -`ACE_Interaction` +`ace_interaction` {% endif %} {% if include.component == "cargo" %} @@ -71,7 +71,7 @@ {% endif %} {% if include.component == "disarming" %} -`ACE_Interaction` +`ace_interaction` {% endif %} {% if include.component == "disposable" %} @@ -150,6 +150,10 @@ `ace_common` {% endif %} +{% if include.component == "hot" %} +`ace_common`, `ace_missileguidance` +{% endif %} + {% if include.component == "huntir" %} `ace_common` {% endif %} @@ -307,7 +311,7 @@ {% endif %} {% if include.component == "pylons" %} -`ace_interact_menu`, `ace_zeus` +`ace_interact_menu` {% endif %} {% if include.component == "quickmount" %} @@ -446,12 +450,8 @@ `ace_common`, `ace_ai` {% endif %} -{% if include.component == "compat_adr_97" %} -`A3_Weapons_F_Mod` -{% endif %} - {% if include.component == "compat_r3f" %} -`r3f_armes_c`, `r3f_armes`, `r3f_acc` +`r3f_armes_c`, `R3F_G17_addons`, `r3f_acc` {% endif %} {% if include.component == "compat_rh_acc" %} @@ -483,7 +483,7 @@ {% endif %} {% if include.component == "compat_rksl_pm_ii" %} -`RKSL_PMII` +`RKSL_PMII`, `RKSL_PMII_525` {% endif %} {% if include.component == "compat_sma3_iansky" %} diff --git a/docs/docker-compose.yml b/docs/docker-compose.yml index 0795ef1b5c..ca25a38c0a 100644 --- a/docs/docker-compose.yml +++ b/docs/docker-compose.yml @@ -7,8 +7,7 @@ services: context: . dockerfile: Dockerfile environment: - - JEKYLLARGS=--incremental - ports: - - "4000:4000" + JEKYLLARGS: --incremental + ports: ['4000:4000'] volumes: - - ./:/usr/src/app + - './:/usr/src/app' diff --git a/docs/entrypoint.sh b/docs/entrypoint.sh old mode 100644 new mode 100755 index d15c7f7baa..ea16b75778 --- a/docs/entrypoint.sh +++ b/docs/entrypoint.sh @@ -1,3 +1,3 @@ #!/bin/sh -jekyll serve --future --config _config_dev.yml -H 0.0.0.0 -P 4000 ${JEKYLLARGS} +jekyll serve --force_polling --future --config _config_dev.yml -H 0.0.0.0 -P 4000 ${JEKYLLARGS} diff --git a/docs/src/package-lock.json b/docs/src/package-lock.json index a20abaa185..e68f8ff216 100644 --- a/docs/src/package-lock.json +++ b/docs/src/package-lock.json @@ -4,29 +4,42 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "optional": true + }, + "@types/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", + "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==", + "dev": true, + "optional": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -39,29 +52,30 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "dev": true, + "optional": true }, "archive-type": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", - "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", "dev": true, + "optional": true, "requires": { - "file-type": "3.9.0" - } - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true, + "optional": true + } } }, "argparse": { @@ -70,17 +84,14 @@ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -88,10 +99,10 @@ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-find-index": { @@ -100,6 +111,15 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -107,21 +127,21 @@ "dev": true }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, "async": { @@ -130,35 +150,10 @@ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "async-each-series": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", - "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", - "dev": true, - "optional": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "balanced-match": { @@ -167,201 +162,467 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "optional": true, "requires": { - "tweetnacl": "0.14.5" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", + "dev": true, + "optional": true }, "bin-build": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", - "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", + "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", "dev": true, "optional": true, "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "download": "4.4.3", - "exec-series": "1.0.3", - "rimraf": "2.2.8", - "tempfile": "1.1.1", - "url-regex": "3.2.0" + "decompress": "^4.0.0", + "download": "^6.2.2", + "execa": "^0.7.0", + "p-map-series": "^1.0.0", + "tempfile": "^2.0.0" } }, "bin-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", - "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", + "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", "dev": true, "optional": true, "requires": { - "executable": "1.1.0" + "execa": "^0.7.0", + "executable": "^4.1.0" } }, "bin-version": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", - "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.0.0.tgz", + "integrity": "sha512-Ekhwm6AUiMbZ1LgVCNMkgjovpMR30FyQN74laAW9gs0NPjZR5gdY0ARNB0YsQG8GOme3CsHbxmeyq/7Ofq6QYQ==", "dev": true, "optional": true, "requires": { - "find-versions": "1.2.1" + "execa": "^1.0.0", + "find-versions": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "optional": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "optional": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "optional": true, + "requires": { + "pump": "^3.0.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true, + "optional": true + } } }, "bin-version-check": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", - "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", + "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", "dev": true, "optional": true, "requires": { - "bin-version": "1.0.4", - "minimist": "1.2.0", - "semver": "4.3.6", - "semver-truncate": "1.1.2" + "bin-version": "^3.0.0", + "semver": "^5.6.0", + "semver-truncate": "^1.1.2" }, "dependencies": { "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true, "optional": true } } }, "bin-wrapper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", - "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", + "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", "dev": true, "optional": true, "requires": { - "bin-check": "2.0.0", - "bin-version-check": "2.1.0", - "download": "4.4.3", - "each-async": "1.1.1", - "lazy-req": "1.1.0", - "os-filter-obj": "1.0.3" - } - }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "body-parser": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", - "dev": true, - "requires": { - "bytes": "2.2.0", - "content-type": "1.0.4", - "debug": "2.2.0", - "depd": "1.1.2", - "http-errors": "1.3.1", - "iconv-lite": "0.4.13", - "on-finished": "2.3.0", - "qs": "5.2.0", - "raw-body": "2.1.7", - "type-is": "1.6.16" + "bin-check": "^4.1.0", + "bin-version-check": "^4.0.0", + "download": "^7.1.0", + "import-lazy": "^3.1.0", + "os-filter-obj": "^2.0.0", + "pify": "^4.0.1" }, "dependencies": { - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", - "dev": true + "download": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", + "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "dev": true, + "optional": true, + "requires": { + "archive-type": "^4.0.0", + "caw": "^2.0.1", + "content-disposition": "^0.5.2", + "decompress": "^4.2.0", + "ext-name": "^5.0.0", + "file-type": "^8.1.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^8.3.1", + "make-dir": "^1.2.0", + "p-event": "^2.1.0", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } }, - "qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", - "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", - "dev": true + "file-type": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", + "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "dev": true, + "optional": true + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "optional": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "http://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "optional": true + }, + "p-event": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.1.0.tgz", + "integrity": "sha512-sDEpDVnzLGlJj3k590uUdpfEUySP5yAYlvfTCu5hTDvSTXQVecYWKcEwdO49PrZlnJ5wkfAvtawnno/jyXeqvA==", + "dev": true, + "optional": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "optional": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "optional": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "optional": true, + "requires": { + "prepend-http": "^2.0.0" + } } } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", "dev": true, "requires": { - "hoek": "2.16.3" + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true, + "optional": true + }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "buffer": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", "dev": true, + "optional": true, "requires": { - "pako": "0.2.9" + "base64-js": "0.0.8", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "optional": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "optional": true + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-to-vinyl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", - "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", "dev": true, - "requires": { - "file-type": "3.9.0", - "readable-stream": "2.3.3", - "uuid": "2.0.3", - "vinyl": "1.2.0" - } + "optional": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true, + "optional": true }, "builtin-modules": { "version": "1.1.1", @@ -370,9 +631,57 @@ "dev": true }, "bytes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "optional": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true, + "optional": true + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, "camelcase": { @@ -387,50 +696,21 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, "caw": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", - "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", + "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", "dev": true, + "optional": true, "requires": { - "get-proxy": "1.1.0", - "is-obj": "1.0.1", - "object-assign": "3.0.0", - "tunnel-agent": "0.4.3" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - } - } - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" } }, "chalk": { @@ -439,121 +719,162 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "optional": true, "requires": { - "chalk": "1.1.3" + "mimic-response": "^1.0.0" } }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", - "dev": true - }, "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "optional": true, "requires": { - "q": "1.5.1" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "coffeescript": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", "dev": true }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, + "optional": true, "requires": { - "graceful-readlink": "1.0.1" + "graceful-readlink": ">= 1.0.0" } }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, + "optional": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, "console-stream": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", @@ -561,51 +882,110 @@ "dev": true, "optional": true }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + } + } + }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", "dev": true }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, - "requires": { - "capture-stack-trace": "1.0.0" - } + "optional": true }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "csso": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.0.0.tgz", - "integrity": "sha1-F4tDpEYhIhwndWCG9THgL0KQDug=", + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", "dev": true, "optional": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true, + "optional": true + }, + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "dev": true, + "optional": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "css-url-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "dev": true, + "optional": true + }, + "css-what": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "dev": true, + "optional": true + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "optional": true, + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "optional": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + } } }, "currently-unhandled": { @@ -614,24 +994,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "array-find-index": "^1.0.1" } }, "dateformat": { @@ -640,17 +1003,17 @@ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "meow": "^3.3.0" } }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "^2.1.1" } }, "decamelize": { @@ -659,276 +1022,334 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, "decompress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", - "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", "dev": true, + "optional": true, "requires": { - "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.6.0", - "decompress-tar": "3.1.0", - "decompress-tarbz2": "3.1.0", - "decompress-targz": "3.1.0", - "decompress-unzip": "3.4.0", - "stream-combiner2": "1.1.1", - "vinyl-assign": "1.2.1", - "vinyl-fs": "2.4.4" + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "optional": true, + "requires": { + "mimic-response": "^1.0.0" } }, "decompress-tar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", - "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, + "optional": true, "requires": { - "is-tar": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } + "optional": true } } }, "decompress-tarbz2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", - "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, + "optional": true, "requires": { - "is-bzip2": "1.0.0", - "object-assign": "2.1.1", - "seek-bzip": "1.0.5", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } + "optional": true } } }, "decompress-targz": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", - "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, + "optional": true, "requires": { - "is-gzip": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } + "optional": true } } }, "decompress-unzip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", - "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dev": true, + "optional": true, "requires": { - "is-zip": "1.0.0", - "read-all-stream": "3.1.0", - "stat-mode": "0.2.2", - "strip-dirs": "1.1.1", - "through2": "2.0.3", - "vinyl": "1.2.0", - "yauzl": "2.9.1" + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" }, "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "file-type": { + "version": "3.9.0", + "resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "dev": true, + "optional": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "optional": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" } } } }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, "define-properties": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, + "optional": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "download": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", - "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "caw": "1.2.0", - "concat-stream": "1.6.0", - "each-async": "1.1.1", - "filenamify": "1.2.1", - "got": "5.7.1", - "gulp-decompress": "1.2.0", - "gulp-rename": "1.2.2", - "is-url": "1.2.2", - "object-assign": "4.1.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "stream-combiner2": "1.1.1", - "vinyl": "1.2.0", - "vinyl-fs": "2.4.4", - "ware": "1.3.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dev": true, "requires": { - "readable-stream": "2.3.3" + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, - "duplexify": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", - "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - } - }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", - "dev": true, - "requires": { - "onetime": "1.1.0", - "set-immediate-shim": "1.0.1" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true, + "optional": true + } } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "optional": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "optional": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "download": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", + "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", + "dev": true, + "optional": true, + "requires": { + "caw": "^2.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.0.0", + "ext-name": "^5.0.0", + "file-type": "5.2.0", + "filenamify": "^2.0.0", + "get-stream": "^3.0.0", + "got": "^7.0.0", + "make-dir": "^1.0.0", + "p-event": "^1.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "optional": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true, + "optional": true + }, "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "optional": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true, + "optional": true + }, + "error": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", + "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", "dev": true, "requires": { - "once": "1.4.0" + "string-template": "~0.2.1", + "xtend": "~4.0.0" } }, "error-ex": { @@ -937,7 +1358,33 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "optional": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "optional": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, "escape-string-regexp": { @@ -959,35 +1406,76 @@ "dev": true }, "exec-buffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-2.0.1.tgz", - "integrity": "sha1-ACijG+CxRgth0HX5avRYO54zXqA=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", "dev": true, "optional": true, "requires": { - "rimraf": "2.2.8", - "tempfile": "1.1.1" + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + } } }, - "exec-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", - "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "optional": true, "requires": { - "async-each-series": "1.1.0", - "object-assign": "4.1.1" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } } }, "executable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", - "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, "optional": true, "requires": { - "meow": "3.7.0" + "pify": "^2.2.0" } }, "exit": { @@ -997,69 +1485,180 @@ "dev": true }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "optional": true, + "requires": { + "mime-db": "^1.28.0" + } }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "optional": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "fast-glob": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.4.tgz", + "integrity": "sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" } }, "faye-websocket": { @@ -1068,16 +1667,17 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, + "optional": true, "requires": { - "pend": "1.2.0" + "pend": "~1.2.0" } }, "figures": { @@ -1086,50 +1686,56 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.7.0.tgz", + "integrity": "sha512-AbaGtdWYYRaVrv2MwL/65myuRJ9j3e79e7etJ79US18QHuVlzJBcQHUH+HxDUoLtbyWRTUfLzLkGXX3pP9kfZg==", "dev": true }, "filename-reserved-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true, + "optional": true }, "filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", + "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", "dev": true, + "optional": true, "requires": { - "filename-reserved-regex": "1.0.0", - "strip-outer": "1.0.0", - "trim-repeated": "1.0.0" + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" } }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "find-up": { @@ -1138,21 +1744,28 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "find-versions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", - "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.0.0.tgz", + "integrity": "sha512-IUvtItVFNmTtKoB0PRfbkR0zR9XMG5rWNO3qI1S8L0zdv+v2gqzM0pAunloxqbqAfT8w7bg8n/5gHzTXte8H5A==", "dev": true, "optional": true, "requires": { - "array-uniq": "1.0.3", - "get-stdin": "4.0.1", - "meow": "3.7.0", - "semver-regex": "1.0.0" + "array-uniq": "^2.0.0", + "semver-regex": "^2.0.0" + }, + "dependencies": { + "array-uniq": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.0.0.tgz", + "integrity": "sha512-O3QZEr+3wDj7otzF7PjNGs6CA3qmYMLvt5xGkjY/V0VxS+ovvqVo/5wKM/OVOAyuX4DTh9H31zE/yKtO66hTkg==", + "dev": true, + "optional": true + } } }, "findup-sync": { @@ -1161,7 +1774,7 @@ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", "dev": true, "requires": { - "glob": "5.0.15" + "glob": "~5.0.0" }, "dependencies": { "glob": { @@ -1170,98 +1783,67 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "dev": true, + "optional": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "map-cache": "^0.2.2" } }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "optional": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "optional": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.2.8" - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } + "optional": true }, "gaze": { "version": "1.1.2", @@ -1269,37 +1851,17 @@ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", "dev": true, "requires": { - "globule": "1.2.0" + "globule": "^1.0.0" } }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, "get-proxy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", - "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", + "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", "dev": true, + "optional": true, "requires": { - "rc": "1.2.2" + "npm-conf": "^1.1.0" } }, "get-stdin": { @@ -1308,39 +1870,85 @@ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "dev": true }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "optional": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, "getobject": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, "gifsicle": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", - "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-4.0.1.tgz", + "integrity": "sha512-A/kiCLfDdV+ERV/UB+2O41mifd+RxH8jlRG8DMxZO84Bma/Fw0htqZ+hY2iaalLRNyUu7tYZQslqUBJxBggxbg==", "dev": true, "optional": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "execa": "^1.0.0", + "logalot": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "optional": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "optional": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "optional": true, + "requires": { + "pump": "^3.0.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true, + "optional": true + } } }, "glob": { @@ -1349,48 +1957,12 @@ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -1399,38 +1971,61 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "globby": { + "version": "8.0.1", + "resolved": "http://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", "dev": true, "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" }, "dependencies": { "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -1440,9 +2035,9 @@ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "~4.17.4", + "minimatch": "~3.0.2" }, "dependencies": { "glob": { @@ -1451,46 +2046,37 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "dev": true, + "optional": true, "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" } }, "graceful-fs": { @@ -1503,30 +2089,32 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "dev": true, + "optional": true }, "grunt": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.2.tgz", - "integrity": "sha1-TmpeaVtwRy/VME9fqeNCNoNqc7w=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz", + "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", "dev": true, "requires": { - "coffeescript": "1.10.0", - "dateformat": "1.0.12", - "eventemitter2": "0.4.14", - "exit": "0.1.2", - "findup-sync": "0.3.0", - "glob": "7.0.6", - "grunt-cli": "1.2.0", - "grunt-known-options": "1.1.0", - "grunt-legacy-log": "1.0.2", - "grunt-legacy-util": "1.0.0", - "iconv-lite": "0.4.21", - "js-yaml": "3.5.5", - "minimatch": "3.0.4", - "nopt": "3.0.6", - "path-is-absolute": "1.0.1", - "rimraf": "2.2.8" + "coffeescript": "~1.10.0", + "dateformat": "~1.0.12", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.3.0", + "glob": "~7.0.0", + "grunt-cli": "~1.2.0", + "grunt-known-options": "~1.1.0", + "grunt-legacy-log": "~2.0.0", + "grunt-legacy-util": "~1.1.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.5.2", + "minimatch": "~3.0.2", + "mkdirp": "~0.5.1", + "nopt": "~3.0.6", + "path-is-absolute": "~1.0.0", + "rimraf": "~2.6.2" }, "dependencies": { "grunt-cli": { @@ -1535,10 +2123,19 @@ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", "dev": true, "requires": { - "findup-sync": "0.3.0", - "grunt-known-options": "1.1.0", - "nopt": "3.0.6", - "resolve": "1.1.7" + "findup-sync": "~0.3.0", + "grunt-known-options": "~1.1.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" } } } @@ -1549,259 +2146,232 @@ "integrity": "sha1-YVCYYwhOhx1+ht5IwBUlntl3Rb0=", "dev": true, "requires": { - "chalk": "1.1.3", - "source-map": "0.5.7" + "chalk": "^1.0.0", + "source-map": "^0.5.3" } }, "grunt-contrib-imagemin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-imagemin/-/grunt-contrib-imagemin-1.0.1.tgz", - "integrity": "sha1-5Ho1YTN29MqpwfkERlA8rhyUTXk=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-imagemin/-/grunt-contrib-imagemin-3.1.0.tgz", + "integrity": "sha512-c0duAb018eowVVfqNMN0S5Esx8mRZ1OP/hkEoKnJkOCaD9/DywKGvLuhschF+DByPSs4k1u1y38w9Bt+ihJG8A==", "dev": true, "requires": { - "async": "1.5.2", - "chalk": "1.1.3", - "gulp-rename": "1.2.2", - "imagemin": "4.0.0", - "pretty-bytes": "3.0.1" + "chalk": "^2.4.1", + "imagemin": "^6.0.0", + "imagemin-gifsicle": "^6.0.1", + "imagemin-jpegtran": "^6.0.0", + "imagemin-optipng": "^6.0.0", + "imagemin-svgo": "^7.0.0", + "p-map": "^1.2.0", + "plur": "^3.0.1", + "pretty-bytes": "^5.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "grunt-contrib-uglify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-2.3.0.tgz", - "integrity": "sha1-s9AmDr3WzvoS/y+Onh4ln33kIW8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.0.tgz", + "integrity": "sha512-vy3Vop2KDqdiwcGOGAjyKvjHFrRD/YK4KPQWR3Yt6OdYlgFw1z7HCuk66+IJ9s7oJmp9uRQXuuSHyawKRAgiMw==", "dev": true, "requires": { - "chalk": "1.1.3", - "maxmin": "1.1.0", - "object.assign": "4.0.4", - "uglify-js": "2.8.29", - "uri-path": "1.0.0" + "chalk": "^2.4.1", + "maxmin": "^2.1.0", + "uglify-js": "~3.4.8", + "uri-path": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "grunt-contrib-watch": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.1.tgz", - "integrity": "sha512-8Zka/svGl6+ZwF7d6z/CfXwsb4cDODnajmZsY4nUAs9Ob0kJEcsLiDf5qm2HdDoEcm3NHjWCrFiWx+PZ2y4D7A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", + "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", "dev": true, "requires": { - "async": "1.5.2", - "gaze": "1.1.2", - "lodash": "4.17.10", - "tiny-lr": "0.2.1" + "async": "^2.6.0", + "gaze": "^1.1.0", + "lodash": "^4.17.10", + "tiny-lr": "^1.1.1" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + } } }, "grunt-known-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", + "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", "dev": true }, "grunt-legacy-log": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.2.tgz", - "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", + "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", "dev": true, "requires": { - "colors": "1.1.2", - "grunt-legacy-log-utils": "1.0.0", - "hooker": "0.2.3", - "lodash": "4.17.10" + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.5" } }, "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", + "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", "dev": true, "requires": { - "chalk": "1.1.3", - "lodash": "4.3.0" + "chalk": "~2.4.1", + "lodash": "~4.17.10" }, "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", + "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", "dev": true, "requires": { - "async": "1.5.2", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "4.3.0", - "underscore.string": "3.2.3", - "which": "1.2.14" + "async": "~1.5.2", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.10", + "underscore.string": "~3.3.4", + "which": "~1.3.0" }, "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } } } }, "grunt-sass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-2.1.0.tgz", - "integrity": "sha512-XkexnQt/9rhReNd+Y7T0n/2g5FqYOQKfi2iSlpwDqvgs7EgEaGTxNhnWzHnbW5oNRvzL9AHopBG3AgRxL0d+DA==", - "dev": true, - "requires": { - "each-async": "1.1.1", - "node-sass": "4.9.0", - "object-assign": "4.1.1" - } - }, - "gulp-decompress": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", - "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", - "dev": true, - "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "gulp-util": "3.0.8", - "readable-stream": "2.3.3" - } - }, - "gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.0.2.tgz", + "integrity": "sha512-Ogq4cWqBre71gZIkgxIxevgzZHSIIsrKu/5yvPDl4Mvib0A4TRTJEQUdpQ0YV1iai0DPjayz02vDJE6KUVHQ2w==", "dev": true }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "1.0.0" - } - }, "gzip-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", - "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", "dev": true, "requires": { - "browserify-zlib": "0.1.4", - "concat-stream": "1.6.0" + "duplexer": "^0.1.1" } }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "optional": true, "requires": { - "chalk": "1.1.3", - "commander": "2.15.1", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - } + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -1810,41 +2380,70 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true, + "optional": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true, + "optional": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "has-symbol-support-x": "^1.4.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } }, "hooker": { "version": "0.2.3", @@ -1858,140 +2457,123 @@ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", "dev": true }, - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", "dev": true, - "requires": { - "inherits": "2.0.3", - "statuses": "1.5.0" - } + "optional": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true, + "optional": true }, "http-parser-js": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.12.tgz", - "integrity": "sha1-uc+/Sizybw/DSxDKFImid3HjR08=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", "dev": true }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "safer-buffer": ">= 2.1.2 < 3" } }, - "iconv-lite": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", - "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } + "optional": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true }, "imagemin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-4.0.0.tgz", - "integrity": "sha1-6Q5/CTaDZZXxj6Ff6Qb0+iWeqEc=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", "dev": true, "requires": { - "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.6.0", - "imagemin-gifsicle": "4.2.0", - "imagemin-jpegtran": "4.3.2", - "imagemin-optipng": "4.3.0", - "imagemin-svgo": "4.2.1", - "optional": "0.1.4", - "readable-stream": "2.3.3", - "stream-combiner2": "1.1.1", - "vinyl-fs": "2.4.4" + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "imagemin-gifsicle": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-4.2.0.tgz", - "integrity": "sha1-D++butNHbmt2iFc2zFsLh6CHV8o=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-6.0.1.tgz", + "integrity": "sha512-kuu47c6iKDQ6R9J10xCwL0lgs0+sMz3LRHqRcJ2CRBWdcNmo3T5hUaM8hSZfksptZXJLGKk8heSAvwtSdB1Fng==", "dev": true, "optional": true, "requires": { - "gifsicle": "3.0.4", - "is-gif": "1.0.0", - "through2": "0.6.5" + "exec-buffer": "^3.0.0", + "gifsicle": "^4.0.0", + "is-gif": "^3.0.0" } }, "imagemin-jpegtran": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-4.3.2.tgz", - "integrity": "sha1-G8bR4r0T/bZNJFUm1jWn5d/rEvw=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-6.0.0.tgz", + "integrity": "sha512-Ih+NgThzqYfEWv9t58EItncaaXIHR0u9RuhKa8CtVBlMBvY0dCIxgQJQCfwImA4AV1PMfmUKlkyIHJjb7V4z1g==", "dev": true, "optional": true, "requires": { - "is-jpg": "1.0.0", - "jpegtran-bin": "3.2.0", - "through2": "2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } + "exec-buffer": "^3.0.0", + "is-jpg": "^2.0.0", + "jpegtran-bin": "^4.0.0" } }, "imagemin-optipng": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-4.3.0.tgz", - "integrity": "sha1-dgRmOrLuMVczJ0cm/Rw3TStErbY=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-6.0.0.tgz", + "integrity": "sha512-FoD2sMXvmoNm/zKPOWdhKpWdFdF9qiJmKC17MxZJPH42VMAp17/QENI/lIuP7LCUnLVAloO3AUoTSNzfhpyd8A==", "dev": true, "optional": true, "requires": { - "exec-buffer": "2.0.1", - "is-png": "1.1.0", - "optipng-bin": "3.1.4", - "through2": "0.6.5" + "exec-buffer": "^3.0.0", + "is-png": "^1.0.0", + "optipng-bin": "^5.0.0" } }, "imagemin-svgo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-4.2.1.tgz", - "integrity": "sha1-VPB9xW9HJgRi32phxUvvtEtXvlU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.0.0.tgz", + "integrity": "sha512-+iGJFaPIMx8TjFW6zN+EkOhlqcemdL7F3N3Y0wODvV2kCUBuUtZK7DRZc1+Zfu4U2W/lTMUyx2G8YMOrZntIWg==", "dev": true, "optional": true, "requires": { - "is-svg": "1.1.1", - "svgo": "0.6.6", - "through2": "2.0.3" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } + "is-svg": "^3.0.0", + "svgo": "^1.0.5" } }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "dev": true, + "optional": true }, "indent-string": { "version": "2.1.0", @@ -1999,7 +2581,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "inflight": { @@ -2008,8 +2590,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2019,31 +2601,36 @@ "dev": true }, "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, - "is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "into-stream": { + "version": "3.1.0", + "resolved": "http://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "optional": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, + "irregular-plurals": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", + "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "is-relative": "0.1.3" + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -2064,28 +2651,49 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, - "is-bzip2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", - "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", - "dev": true + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true, + "optional": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true, + "optional": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, "is-extendable": { @@ -2106,86 +2714,73 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-gif": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", - "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz", + "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==", "dev": true, - "optional": true + "optional": true, + "requires": { + "file-type": "^10.4.0" + } }, "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, - "is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", - "dev": true - }, "is-jpg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", - "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz", + "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=", "dev": true, "optional": true }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, "is-natural-number": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", - "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", - "dev": true + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true, + "optional": true }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, - "is-obj": { + "is-object": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", + "dev": true, + "optional": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "optional": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } }, "is-png": { "version": "1.1.0", @@ -2194,72 +2789,49 @@ "dev": true, "optional": true }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", - "dev": true + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "optional": true, + "requires": { + "has": "^1.0.1" + } }, "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true + "dev": true, + "optional": true }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-1.1.1.tgz", - "integrity": "sha1-rA76r7ZTrFhHNwix+HNjbKEQ4xs=", "dev": true, "optional": true }, - "is-tar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", - "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", - "dev": true + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "optional": true, + "requires": { + "html-comment-regex": "^1.1.0" + } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-url": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", - "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", - "dev": true + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "optional": true, + "requires": { + "has-symbols": "^1.0.0" + } }, "is-utf8": { "version": "0.2.1", @@ -2267,16 +2839,10 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-zip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", - "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "isarray": { @@ -2292,37 +2858,33 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "jpegtran-bin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz", - "integrity": "sha1-9g7PSumZwL2tLp+83ytvCYHnops=", + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "optional": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", - "dev": true + "jpegtran-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz", + "integrity": "sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ==", + "dev": true, + "optional": true, + "requires": { + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" + } }, "js-yaml": { "version": "3.5.5", @@ -2330,68 +2892,25 @@ "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" + "argparse": "^1.0.2", + "esprima": "^2.6.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true, "optional": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, + "optional": true, "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "json-buffer": "3.0.0" } }, "kind-of": { @@ -2400,44 +2919,13 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "dev": true, - "optional": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" + "is-buffer": "^1.1.5" } }, "livereload-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", - "integrity": "sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", "dev": true }, "load-json-file": { @@ -2446,161 +2934,17 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "3.0.1" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" - } + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "logalot": { "version": "2.1.0", @@ -2609,15 +2953,16 @@ "dev": true, "optional": true, "requires": { - "figures": "1.7.0", - "squeak": "1.3.0" + "figures": "^1.3.5", + "squeak": "^1.0.0" } }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loud-rejection": { "version": "1.6.0", @@ -2625,15 +2970,16 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "optional": true }, "lpad-align": { "version": "1.1.2", @@ -2642,47 +2988,90 @@ "dev": true, "optional": true, "requires": { - "get-stdin": "4.0.1", - "indent-string": "2.1.0", - "longest": "1.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" } }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, - "maxmin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", - "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "chalk": "1.1.3", - "figures": "1.7.0", - "gzip-size": "1.0.0", - "pretty-bytes": "1.0.4" + "object-visit": "^1.0.0" + } + }, + "maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" }, "dependencies": { "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "number-is-nan": "^1.0.0" } } } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true, + "optional": true }, "meow": { "version": "3.7.0", @@ -2690,79 +3079,66 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "dev": true }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } } } }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", "dev": true, - "requires": { - "mime-db": "1.33.0" - } + "optional": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "optional": true }, "minimatch": { "version": "3.0.4", @@ -2770,7 +3146,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2779,6 +3155,27 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -2797,144 +3194,44 @@ } }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "duplexer2": "0.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "1.1.14" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, - "requires": { - "fstream": "1.0.11", - "glob": "7.0.6", - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.79.0", - "rimraf": "2.2.8", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.2.14" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-sass": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", - "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.2", - "get-stdin": "4.0.1", - "glob": "7.0.6", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.10.0", - "node-gyp": "3.6.2", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "4.1.2", - "which": "1.2.14" - } - }, - "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - } - } - }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", - "dev": true + "optional": true }, "nopt": { "version": "3.0.6", @@ -2942,7 +3239,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-package-data": { @@ -2951,31 +3248,81 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, + "optional": true, "requires": { - "remove-trailing-separator": "1.1.0" + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "optional": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "optional": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", "dev": true, + "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "optional": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "optional": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "optional": true, + "requires": { + "boolbase": "~1.0.0" } }, "number-is-nan": { @@ -2984,52 +3331,81 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "object-keys": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true + "dev": true, + "optional": true }, - "object.assign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", - "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "object-keys": "1.0.11" + "isobject": "^3.0.0" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, + "optional": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "ee-first": "1.1.1" + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "optional": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" } }, "once": { @@ -3038,114 +3414,99 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "optional": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", - "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", - "dev": true - }, "optipng-bin": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", - "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-5.1.0.tgz", + "integrity": "sha512-9baoqZTNNmXQjq/PQTWEXbVV3AMO2sI/GaaqZJZ8SExfAzjijeAP7FEeT+TtyumSw7gr0PZtSUYB/Ke7iHQVKA==", "dev": true, "optional": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" - } - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" + "bin-build": "^3.0.0", + "bin-wrapper": "^4.0.0", + "logalot": "^2.0.0" } }, "os-filter-obj": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", - "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", + "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "dev": true, + "optional": true, + "requires": { + "arch": "^2.1.0" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", "dev": true, "optional": true }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "p-event": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", "dev": true, + "optional": true, "requires": { - "lcid": "1.0.0" + "p-timeout": "^1.1.1" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "optional": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true, + "optional": true + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "p-map-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", + "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", "dev": true, + "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "p-reduce": "^1.0.0" } }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", "dev": true }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", "dev": true, + "optional": true + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "optional": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - } + "p-finally": "^1.0.0" } }, "parse-json": { @@ -3154,13 +3515,13 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, "path-dirname": { @@ -3175,7 +3536,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -3184,22 +3545,30 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "optional": true + }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true + "dev": true, + "optional": true }, "pify": { "version": "2.3.0", @@ -3219,47 +3588,68 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, + "plur": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plur/-/plur-3.0.1.tgz", + "integrity": "sha512-lJl0ojUynAM1BZn58Pas2WT/TXeC1+bS+UqShl0x9+49AtOn7DixRXVzaC8qrDOIxNDmepKnLuMTH7NQmkX0PA==", + "dev": true, + "requires": { + "irregular-plurals": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "dev": true, + "optional": true }, "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.1.0.tgz", + "integrity": "sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA==", + "dev": true }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "dev": true, + "optional": true + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true, + "optional": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "dev": true, + "optional": true }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, "q": { "version": "1.5.1", @@ -3269,108 +3659,50 @@ "optional": true }, "qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", - "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz", + "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA==", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "query-string": { + "version": "5.1.1", + "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, + "optional": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", "dev": true, "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", - "unpipe": "1.0.0" + "bytes": "1", + "string_decoder": "0.10" }, "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", + "string_decoder": { + "version": "0.10.31", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } } }, - "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", - "dev": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" - } - }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -3379,8 +3711,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { @@ -3388,14 +3720,15 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, + "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "redent": { @@ -3404,29 +3737,24 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -3441,67 +3769,13 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" - }, - "dependencies": { - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, "resolve": { @@ -3510,85 +3784,56 @@ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dev": true, + "optional": true, "requires": { - "align-text": "0.1.4" + "lowercase-keys": "^1.0.0" } }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true, + "optional": true + }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", "dev": true }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "7.0.6", - "lodash": "4.17.10", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" - } - } - } - }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -3596,34 +3841,14 @@ "dev": true, "optional": true }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "2.4.3", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, "seek-bzip": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", "dev": true, + "optional": true, "requires": { - "commander": "2.8.1" + "commander": "~2.8.1" } }, "semver": { @@ -3633,9 +3858,9 @@ "dev": true }, "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", "dev": true, "optional": true }, @@ -3646,20 +3871,48 @@ "dev": true, "optional": true, "requires": { - "semver": "5.4.1" + "semver": "^5.3.0" } }, - "set-blocking": { + "set-value": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "optional": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "optional": true }, "signal-exit": { "version": "3.0.2", @@ -3667,13 +3920,147 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "hoek": "2.16.3" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "optional": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "optional": true, + "requires": { + "sort-keys": "^1.0.0" } }, "source-map": { @@ -3682,10 +4069,23 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, "spdx-correct": { @@ -3694,7 +4094,7 @@ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -3709,6 +4109,15 @@ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", "dev": true }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -3722,105 +4131,69 @@ "dev": true, "optional": true, "requires": { - "chalk": "1.1.3", - "console-stream": "0.1.1", - "lpad-align": "1.1.2" + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" } }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true, + "optional": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } } } }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true, - "requires": { - "readable-stream": "2.3.3" - } + "optional": true }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -3829,64 +4202,43 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" + "is-utf8": "^0.2.0" } }, "strip-dirs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", - "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, + "optional": true, "requires": { - "chalk": "1.1.3", - "get-stdin": "4.0.1", - "is-absolute": "0.1.7", - "is-natural-number": "2.1.1", - "minimist": "1.2.0", - "sum-up": "1.0.3" + "is-natural-number": "^4.0.1" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "optional": true + }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, "strip-outer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", - "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, + "optional": true, "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "sum-up": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", - "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", - "dev": true, - "requires": { - "chalk": "1.1.3" + "escape-string-regexp": "^1.0.2" } }, "supports-color": { @@ -3896,167 +4248,146 @@ "dev": true }, "svgo": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.6.6.tgz", - "integrity": "sha1-s0CIkDbyD5tEdUMHfQ9Vc+0ETAg=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz", + "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==", "dev": true, "optional": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.0.0", - "js-yaml": "3.6.1", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~2.0.1", + "colors": "~1.1.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "~0.1.0", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "^1.1.0", + "csso": "^3.5.0", + "js-yaml": "^3.12.0", + "mkdirp": "~0.5.1", + "object.values": "^1.0.4", + "sax": "~1.2.4", + "stable": "~0.1.6", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" }, "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "optional": true + }, "js-yaml": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "optional": true, "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } } } }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, + "optional": true, "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.0", - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" } }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true, + "optional": true + }, "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "uuid": "2.0.3" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "through2-filter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", "dev": true, + "optional": true, "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" } }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true + "through": { + "version": "2.3.8", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true, + "optional": true }, "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", - "dev": true + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true, + "optional": true }, "tiny-lr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", "dev": true, "requires": { - "body-parser": "1.14.2", - "debug": "2.2.0", - "faye-websocket": "0.10.0", - "livereload-js": "2.3.0", - "parseurl": "1.3.2", - "qs": "5.1.0" + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" } }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true, + "optional": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "kind-of": "^3.0.2" } }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "punycode": "1.4.1" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "trim-newlines": { @@ -4070,108 +4401,147 @@ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", "dev": true, + "optional": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.2" } }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "glob": "6.0.4" + "commander": "~2.17.1", + "source-map": "~0.6.1" }, "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unbzip2-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz", + "integrity": "sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^3.0.1", + "through": "^2.3.6" + } + }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "dev": true, + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", "dev": true, "optional": true }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "underscore.string": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", - "dev": true - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "unpipe": { + "unset-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", - "dev": true + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } }, "uri-path": { "version": "1.0.0", @@ -4179,42 +4549,58 @@ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", "dev": true }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, "optional": true, "requires": { - "ip-regex": "1.0.3" + "prepend-http": "^1.0.1" } }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true, + "optional": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "vali-date": { + "util.promisify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "optional": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true, + "optional": true }, "validate-npm-package-license": { "version": "3.0.1", @@ -4222,94 +4608,8 @@ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-assign": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", - "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "readable-stream": "2.3.3" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "3.5.1", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - }, - "dependencies": { - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - } - } - }, - "ware": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", - "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", - "dev": true, - "requires": { - "wrap-fn": "0.1.5" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "websocket-driver": { @@ -4318,8 +4618,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.12", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -4328,66 +4628,14 @@ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", - "dev": true, - "optional": true - }, "which": { "version": "1.2.14", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, + "optional": true, "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrap-fn": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", - "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", - "dev": true, - "requires": { - "co": "3.1.0" + "isexe": "^2.0.0" } }, "wrappy": { @@ -4402,63 +4650,22 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } + "optional": true }, "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, + "optional": true, "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } } } diff --git a/docs/src/package.json b/docs/src/package.json index f1a4c361a0..8e98082823 100644 --- a/docs/src/package.json +++ b/docs/src/package.json @@ -1,12 +1,15 @@ { "name": "ACE3", "version": "0.1.0", + "dependencies": { + "lodash": "^4.17.11" + }, "devDependencies": { - "grunt": "^1.0.2", + "grunt": "^1.0.3", "grunt-contrib-concat": "^1.0.1", - "grunt-contrib-imagemin": "^1.0.1", - "grunt-contrib-uglify": "^2.0.0", - "grunt-contrib-watch": "^1.0.1", - "grunt-sass": "^2.1.0" + "grunt-contrib-imagemin": "^3.1.0", + "grunt-contrib-uglify": "^4.0.0", + "grunt-contrib-watch": "^1.1.0", + "grunt-sass": "^3.0.2" } } diff --git a/docs/team.md b/docs/team.md index 2dc5c9be62..034fac4227 100644 --- a/docs/team.md +++ b/docs/team.md @@ -1,149 +1,65 @@ --- -title: The Team +title: ACE3 Maintainers layout: page group: mainNav order: 3 --- -## ACE3 Project Lead +This page lists all current maintainers for the ACE3 projects with their areas of expertise and roles. -Name | Responsibilities ---- | --- -[bux](https://github.com/bux){:target="_blank"} | Scripting, Testing -[Felix Wiegand](https://github.com/koffeinflummi){:target="_blank"} | Scripting, Model Import -[Glowbal](https://github.com/glowbal){:target="_blank"} | Scripting, UI -[NouberNou](https://github.com/Noubernou){:target="_blank"} | Coding, Modeling, Performance, SME -[ViperMaul](https://github.com/vipermaul){:target="_blank"} | Project Manager +## Project maintainers -## ACE3 Core Team +This lists all the maintainers responsible for project management and the overall direction of the ACE3 project. -Name | Responsibilities ---- | --- -[BaerMitUmlaut](https://github.com/BaerMitUmlaut){:target="_blank"} | Scripting, Config -[commy2](https://github.com/commy2){:target="_blank"} | Scripting, Config -[esteldunedain](https://github.com/esteldunedain){:target="_blank"} | Scripting, Config -[Garth "L-H" de Wet](https://github.com/CorruptedHeart){:target="_blank"} | Scripting, Config -[Giallustio](https://github.com/Giallustio){:target="_blank"} | Scripting, Config, Model Import, Testing -gundy| Scripting -Janus | Small Models & Graphics -[jaynus](https://github.com/jaynus){:target="_blank"} | Coding, Performance, SME -[jokoho48](https://github.com/jokoho48){:target="_blank"} | Scripting, Model Editing / Import -[Jonpas](https://github.com/Jonpas){:target="_blank"} | Scripting, Tools, Documentation -[Kieran](https://github.com/kieran-s){:target="_blank"} | Scripting, Medical Consult (paramedic student) -[PabstMirror](https://github.com/PabstMirror){:target="_blank"} | Scripting, Config -[Ruthberg](https://github.com/ulteq){:target="_blank"} | Scripting, Config -[SilentSpike](https://github.com/SilentSpike){:target="_blank"} | Scripting, Config -tpM | ACSE Dev Lead - Sounds, SME -[VKing](https://github.com/VKing6){:target="_blank"} | Configs, Scripting, Testing, Model Editing, Regular Expressions +- [bux](https://github.com/bux){:target="_blank"} + - Scripting, Testing +- [Jonpas](https://github.com/Jonpas){:target="_blank"} + - Scripting, Tools, Documentation +- [Felix Wiegand](https://github.com/koffeinflummi){:target="_blank"} + - Scripting, Model Import +- [NouberNou](https://github.com/Noubernou){:target="_blank"} + - Coding, Modeling, Performance, SME +- [PabstMirror](https://github.com/PabstMirror){:target="_blank"} + - Scripting, Config +- [ViperMaul](https://github.com/vipermaul){:target="_blank"} + - Project management +- [Glowbal](https://github.com/thojkooi){:target="_blank"} + - Build automation, project management, architecture +## Core maintainers + +- [BaerMitUmlaut](https://github.com/BaerMitUmlaut){:target="_blank"} + - Scripting, Config +- [commy2](https://github.com/commy2){:target="_blank"} + - Scripting, Config +- [esteldunedain](https://github.com/esteldunedain){:target="_blank"} + - Scripting, Config +- [jaynus](https://github.com/jaynus){:target="_blank"} + - Coding, Performance, SME +- [jokoho48](https://github.com/jokoho48){:target="_blank"} + - Scripting, Model Editing / Import +- [SilentSpike](https://github.com/SilentSpike){:target="_blank"} + - Scripting, Config +- [Ruthberg](https://github.com/ulteq){:target="_blank"} + - Scripting, Config +- [VKing](https://github.com/VKing6){:target="_blank"} + - Configs, Scripting, Testing, Model Editing + +## Maintainers + +- [Alganthe](https://github.com/alganthe){:target="_blank"} +- [TheMagnetar](https://github.com/TheMagnetar){:target="_blank"} + - Scripting +- [Garth "L-H" de Wet](https://github.com/CorruptedHeart){:target="_blank"} + - Scripting, Config +- gundy +- Janus +- tpM +- [Kieran](https://github.com/kieran-s){:target="_blank"} +- [Giallustio](https://github.com/Giallustio){:target="_blank"} +- [654wak654](https://github.com/654wak654){:target="_blank"} +- [mharis001](https://github.com/mharis001){:target="_blank"} ## Contributors -* [BIG]Bull -* 11RDP-LoupVert -* 654wak654 -* ACCtomeek -* adam3adam -* Adanteh -* aeroson -* Aggr094 -* alef -* Aleksey EpMAK Yermakov -* Alganthe -* Andrea "AtixNeon" Verano -* Anthariel -* Anton -* Arkhir -* Asgar Serran -* BaerMitUmlaut -* Bamse -* Bla1337 -* BlackPixxel -* BlackQwar -* Brakoviejo -* Brisse -* Brostrom.A (Evul) -* BullHorn -* chris579 -* classicarma -* Clon1998 -* Codingboy -* Coren -* Crusty -* Dharma Bellamkonda -* Dimaslg -* dixon13 -* Drill -* Dudakov aka [OMCB]Kaban -* Dslyecxi -* ElTyranos -* eRazeri -* evromalarkey -* F3 Project -* Falke75 -* Ferenczi -* Ferenzi -* FFAAMOD -* Filip Basara -* fr89k -* FreeZbe -* geraldbolso1899 -* Ghost -* Gianmarco Varriale (TeamNuke) -* GieNkoV -* GitHawk -* gpgpgpgp -* Grey-Soldierman -* Grzegorz -* Hamburger SV -* Harakhti -* havena -* Hawkins -* Head -* Hybrid V -* Karneck -* Kavinsky -* Keithen -* Kllrt -* legman -* Legolasindar "Viper" -* licht-im-Norden87 -* looter -* Luigi "Luigium" Myrini -* Macusercom -* MarcBook -* meat -* Michail Nikolaev -* MikeMatrix -* nic547 -* nikolauska -* nomisum -* OnkelDisMaster -* oscarmolinadev -* PaxJaromeMalues -* Phyma -* pokertour -* Professor -* rakowozz -* ramius86 -* Raspu86 -* Riccardo Petricca -* Robert Boklahánics -* ruPaladin -* simon84 -* Skengman2 -* Sniperwolf572 -* System98 -* SzwedzikPL -* Tachi -* Tessa Elieff -* Toaster -* Tonic -* Tourorist -* Tuupertunut -* Valentin Torikian -* voiper -* VyMajoris(W-Cephei) -* Winter -* xrufix -* zGuba +An up-to-date list of our contributors can be found on Github at [acemod/ACE3/contributors](https://github.com/acemod/ACE3/graphs/contributors). diff --git a/docs/tools/document_functions.py b/docs/tools/document_functions.py new file mode 100644 index 0000000000..b51aae18a3 --- /dev/null +++ b/docs/tools/document_functions.py @@ -0,0 +1,306 @@ +#!/usr/bin/env python3 +""" +Author: SilentSpike +Crawl function headers to produce appropriate documentation of public functions. + +Supported header sections: + - Author(s) (with description below) + - Arguments + - Return Value + - Example(s) + - Public (by default function will only be documented if set to "Yes") + +EXAMPLES + document_functions common --debug + Crawl only functions in addons/common and only reports debug messages. +""" + +import os +import sys +import re +import argparse + +class FunctionFile: + def __init__(self, directory="."): + self.directory = directory + + # False unless specified in processing + self.debug = False + + # Empty until imported from file + self.path = "" + self.header = "" + + # Defaults until header is processed + self.public = False + self.authors = [] + self.description = "" + self.arguments = [] + self.return_value = [] + self.example = "" + + # Filepath should only be logged once + self.logged = False + + def import_header(self, file_path): + self.path = file_path + + with open(file_path) as file: + code = file.read() + + header_match = re.match(r"\s*/\*.+?\*/", code, re.S) + if header_match: + self.header = header_match.group(0) + else: + self.feedback("Missing header", 3) + + def has_header(self): + return bool(self.header) + + def process_header(self, debug=False): + # Detailed debugging occurs here so value is set + self.debug = debug + + # Preemptively cut away the comment characters (and leading/trailing whitespace) + self.header_text = "\n".join([x[3:].strip() for x in self.header.splitlines()]) + + # Split the header into expected sections + self.sections = re.split(r"^(Author|Argument|Return Value|Example|Public)s?:\s?", self.header_text, 0, re.M) + + # If public section is missing we can't continue + public_raw = self.get_section("Public") + if not public_raw: + self.feedback("Public value undefined", 3) + return + + # Determine whether the header is public + self.public = self.process_public(public_raw) + + # Don't bother to process the rest if private + # Unless in debug mode + if not self.public and not self.debug: + return + + # Retrieve the raw sections text for processing + author_raw = self.get_section("Author") + arguments_raw = self.get_section("Argument") + return_value_raw = self.get_section("Return Value") + example_raw = self.get_section("Example") + + # Author and description are stored in first section + if author_raw: + self.authors = self.process_author(author_raw) + self.description = self.process_description(author_raw) + + if arguments_raw: + self.arguments = self.process_arguments(arguments_raw) + + # Process return + if return_value_raw: + self.return_value = self.process_return_value(return_value_raw) + + # Process example + if example_raw: + self.example = example_raw.strip() + + def get_section(self, section_name): + try: + section_text = self.sections[self.sections.index(section_name) + 1] + return section_text + except ValueError: + self.feedback("Missing \"{}\" header section".format(section_name), 2) + return "" + + def process_public(self, raw): + # Raw just includes an EOL character + public_text = raw[:-1] + + if not re.match(r"(Yes|No)", public_text, re.I): + self.feedback("Invalid public value \"{}\"".format(public_text), 2) + + return public_text.capitalize() == "Yes" + + def is_public(self): + return self.public + + def process_author(self, raw): + # Authors are listed on the first line + authors_text = raw.splitlines()[0] + + # Seperate authors are divided by commas + return authors_text.split(", ") + + def process_description(self, raw): + # Just use all the lines after the authors line + description_text = "".join(raw.splitlines(1)[1:]) + + return description_text + + def process_arguments(self, raw): + lines = raw.splitlines() + + if lines[0] == "None": + return [] + + if lines.count("") == len(lines): + self.feedback("No arguments provided (use \"None\" where appropriate)", 2) + return [] + + if lines[-1] == "": + lines.pop() + else: + self.feedback("No blank line after arguments list", 1) + + arguments = [] + for argument in lines: + valid = re.match(r"^(\d+):\s(.+?)\<([\s\w]+?)\>(\s\(default: (.+)\))?$", argument) + + if valid: + arg_index = valid.group(1) + arg_name = valid.group(2) + arg_types = valid.group(3) + arg_default = valid.group(5) + arg_notes = [] + + if arg_index != str(len(arguments)): + self.feedback("Argument index {} does not match listed order".format(arg_index), 1) + + if arg_default == None: + arg_default = "" + + arguments.append([arg_index, arg_name, arg_types, arg_default, arg_notes]) + else: + # Notes about the above argument won't start with an index + # Only applies if there exists an above argument + if re.match(r"^(\d+):", argument) or not arguments: + self.feedback("Malformed argument \"{}\"".format(argument), 2) + arguments.append(["?", "Malformed", "?", "?", []]) + else: + arguments[-1][-1].append(argument) + + return arguments + + def process_return_value(self, raw): + return_value = raw.strip() + + if return_value == "None": + return [] + + valid = re.match(r"^(.+?)\<([\s\w]+?)\>", return_value) + + if valid: + return_name = valid.group(1) + return_types = valid.group(2) + else: + self.feedback("Malformed return value \"{}\"".format(return_value), 2) + return ["Malformed",""] + + return [return_name, return_types] + + def document(self, component): + str_list = [] + + # Title + str_list.append("\n## ace_{}_fnc_{}\n".format(component,os.path.basename(self.path)[4:-4])) + # Description + str_list.append("__Description__\n\n" + self.description) + # Arguments + if self.arguments: + str_list.append("__Parameters__\n\nIndex | Description | Datatype(s) | Default Value\n--- | --- | --- | ---\n") + for argument in self.arguments: + str_list.append("{} | {} | {} | {}\n".format(*argument)) + str_list.append("\n") + else: + str_list.append("__Parameters__\n\nNone\n\n") + # Return Value + if self.return_value: + str_list.append("__Return Value__\n\nDescription | Datatype(s)\n--- | ---\n{} | {}\n\n".format(*self.return_value)) + else: + str_list.append("__Return Value__\n\nNone\n\n") + # Example + str_list.append("__Example__\n\n```sqf\n{}\n```\n\n".format(self.example)) + # Authors + str_list.append("\n__Authors__\n\n") + for author in self.authors: + str_list.append("- {}\n".format(author)) + # Horizontal rule + str_list.append("\n---\n") + + return ''.join(str_list) + + def log_file(self, error=False): + # When in debug mode we only want to see the files with errors + if not self.debug or error: + if not self.logged: + rel_path = os.path.relpath(self.path, self.directory) + + self.write("Processing... {}".format(rel_path), 1) + self.logged = True + + def feedback(self, message, level=0): + priority_str = ["Info","Warning","Error","Aborted"][level] + + self.log_file(level > 0) + self.write("{0}: {1}".format(priority_str, message)) + + def write(self, message, indent=2): + to_print = [" "]*indent + to_print.append(message) + print("".join(to_print)) + +def document_functions(components): + os.makedirs('../wiki/functions/', exist_ok=True) + + for component in components: + output = os.path.join('../wiki/functions/',component) + ".md" + with open(output, "w") as file: + for function in components[component]: + file.write(function.document(component)) + +def crawl_dir(directory, debug=False): + components = {} + + for root, dirs, files in os.walk(directory): + for file in files: + if file.endswith(".sqf") and file.startswith("fnc_"): + file_path = os.path.join(root, file) + + # Attempt to import the header from file + function = FunctionFile(directory) + function.import_header(file_path) + + # Undergo data extraction and detailed debug + if function.has_header(): + function.process_header(debug) + + if function.is_public() and not debug: + # Add functions to component key (initalise key if necessary) + component = os.path.basename(os.path.dirname(root)) + components.setdefault(component,[]).append(function) + + function.feedback("Publicly documented") + + document_functions(components) + +def main(): + print(""" + ######################### + # Documenting Functions # + ######################### + """) + + parser = argparse.ArgumentParser() + parser.add_argument('directory', nargs="?", type=str, default=".", help='only crawl specified module addon folder') + parser.add_argument('--debug', action="store_true", help='only check for header debug messages') + args = parser.parse_args() + + # abspath is just used for the terminal output + prospective_dir = os.path.abspath(os.path.join('../../addons/',args.directory)) + if os.path.isdir(prospective_dir): + print("Directory: {}".format(prospective_dir)) + crawl_dir(prospective_dir, args.debug) + else: + print("Invalid directory: {}".format(prospective_dir)) + +if __name__ == "__main__": + main() diff --git a/docs/wiki/development/arma-3-scheduler-and-our-practices.md b/docs/wiki/development/arma-3-scheduler-and-our-practices.md index 773dc97924..2eb07d8bf3 100644 --- a/docs/wiki/development/arma-3-scheduler-and-our-practices.md +++ b/docs/wiki/development/arma-3-scheduler-and-our-practices.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Arma 3 Scheduler And Our Practices +title: Arma 3 Scheduler and our Practices description: Explanation for certain ACE3 practices and rules regarding scheduled and unscheduled execution in Arma. group: development parent: wiki diff --git a/docs/wiki/development/branching-and-release.md b/docs/wiki/development/branching-and-release.md index 7e6c1772da..80216f3b92 100644 --- a/docs/wiki/development/branching-and-release.md +++ b/docs/wiki/development/branching-and-release.md @@ -40,7 +40,7 @@ During this release process between the Friday and Tuesday, the day of release, ### 3.1 Branching * New features, bug fixes that are not a hotfix or other work will always be branched off `master` or another branch but never a `hotfix` or the `release` branch. -* Hotfixes are always branched off the `release` branch +* Hotfixes are always branched off the `release` branch. * The `release` branch is never merged or deleted. Only `master` or hotfixes are allowed to merge into the `release` branch. ### 3.2 Diagram diff --git a/docs/wiki/development/documentation-guidelines-and-tips.md b/docs/wiki/development/documentation-guidelines-and-tips.md index ba2d14df13..5a508d14c6 100644 --- a/docs/wiki/development/documentation-guidelines-and-tips.md +++ b/docs/wiki/development/documentation-guidelines-and-tips.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Documentation guidelines and tips +title: Documentation Guidelines and Tips group: development parent: wiki order: 19 diff --git a/docs/wiki/development/how-to-translate-ace3.md b/docs/wiki/development/how-to-translate-ace3.md index 3f57ee315e..6ceb41a01f 100644 --- a/docs/wiki/development/how-to-translate-ace3.md +++ b/docs/wiki/development/how-to-translate-ace3.md @@ -1,6 +1,6 @@ --- layout: wiki -title: How to translate ACE3 +title: How to Translate ACE3 description: This page describes in short how you can help translating ACE3 into your language. group: development parent: wiki diff --git a/docs/wiki/development/index.html b/docs/wiki/development/index.html index 8fdacb3d50..b9dcc99a95 100644 --- a/docs/wiki/development/index.html +++ b/docs/wiki/development/index.html @@ -1,5 +1,5 @@ --- -title: Development documentation +title: Development Documentation layout: default group: subNav order: 1 diff --git a/docs/wiki/development/modularity-and-pbo-structure.md b/docs/wiki/development/modularity-and-pbo-structure.md index 23dcf9a8f3..6f8ab50ef4 100644 --- a/docs/wiki/development/modularity-and-pbo-structure.md +++ b/docs/wiki/development/modularity-and-pbo-structure.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Modularity And PBO Structure +title: Modularity and PBO Structure description: group: development parent: wiki diff --git a/docs/wiki/development/setting-up-the-development-environment.md b/docs/wiki/development/setting-up-the-development-environment.md index b1e8ba9bb3..4de655102d 100644 --- a/docs/wiki/development/setting-up-the-development-environment.md +++ b/docs/wiki/development/setting-up-the-development-environment.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Setting Up The Development Environment +title: Setting Up the Development Environment description: This page describes how you can setup your development environment for ACE3, allowing you to properly build ACE and utilize file patching. group: development parent: wiki diff --git a/docs/wiki/feature/aircraft.md b/docs/wiki/feature/aircraft.md index 61e669d644..80d2c658a9 100644 --- a/docs/wiki/feature/aircraft.md +++ b/docs/wiki/feature/aircraft.md @@ -34,9 +34,6 @@ Pilots and copilots of all helicopters can now eject. ### 1.6 Laser marker for Wildcat Adds a laser marker to the copilot seat of the Wildcat. -### 1.7 HUD for AH-9 -Adds a HUD to the AH-9 based on the Comanche's HUD. - ## 2. Usage ### 2.1 Switching flare modes diff --git a/docs/wiki/feature/dagr.md b/docs/wiki/feature/dagr.md index 13e08811aa..f69793f1f9 100644 --- a/docs/wiki/feature/dagr.md +++ b/docs/wiki/feature/dagr.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Dagr +title: DAGR description: Defense Advanced GPS Receiver. group: feature category: equipment diff --git a/docs/wiki/feature/fastroping.md b/docs/wiki/feature/fastroping.md index 86fe3de7c1..09b599c816 100644 --- a/docs/wiki/feature/fastroping.md +++ b/docs/wiki/feature/fastroping.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Fastroping +title: Fast-Roping description: System for adding fast roping capabilities to helicopters. group: feature category: realism diff --git a/docs/wiki/feature/hot.md b/docs/wiki/feature/hot.md new file mode 100644 index 0000000000..30a512342f --- /dev/null +++ b/docs/wiki/feature/hot.md @@ -0,0 +1,66 @@ +--- +layout: wiki +title: HOT +description: HOT 1/2/3 Missiles +group: feature +category: equipment +parent: wiki +mod: ace +version: + major: 3 + minor: 13 + patch: 0 +--- + +## 1. Overview + +### 1.1 Guidance + +HOT missile is a wire-guided SACLOS weapon. It requires the shooter to provide constant aiming in order to hit its target. + +### 1.2 Attack profiles + +The missile requires line of sight to the target at all times. Keep your crosshair on the target as the missile cruises toward it until impact. +If you lose line of sight the missile will stop tracking toward your crosshair and will fly on its current trajectory. You can regain control if the missile re-enters line of sight. +If the missile exceeds its maximum range the wire will snap and it will fly off in a random direction. + +### 1.3 Missile Types + +There are 4 HOT missiles included +- HOT 1: Able to penetrate around 800mm RHA. Max range is 4000 meters. HEAT +- HOT 2: Able to penetrate around 900mm RHA. Max range is 4000 meters. HEAT +- HOT 2MP: Anti-Infantry. Contains 1000 steel balls that scatter on impact. Also contains a chemical incendiary device which has a kill radius of around 20 meters. Able to penetrate around 350mm RHA. Max range is 4000 meters. HE +- HOT 3: Able to penetrate around 1250mm RHA. Max range is 4300 meters. Tandem HEAT + +## 2. Usage + +- Select the HOT launcher and aim toward your target. Once you fire the weapon you must keep your crosshair on the target until impact. Note: The HOT missile sits 0.5 meters above the crosshair +- If the missile exceeds 4000 meters (4300 meters for the HOT 3) the wire will snap and you will lose control over the missile. +- If the missile is 30 degrees outside of your current crosshair position the seeker will not be able to find the missile and you will lose control over it. + +## 3 Adding to vehicles + +- Easiest way to add is via the 1.70 Pylons system. +- HOT missiles can also be added to other vehicles via config or script. + +### 3.1 Classnames + +- Weapons: `ace_hot_1_launcher`, `2_launcher`, `ace_hot_2mp_launcher`, `ace_hot_3_launcher`, `ace_hot_generic_launcher` +- Magazines: `ace_hot_1_6Rnd`, `ace_hot_1_2Rnd`, `ace_hot_2_6Rnd`, `ace_hot_2_2Rnd`, `ace_hot_2mp_6Rnd`, `ace_hot_2mp_2Rnd`, `ace_hot_3_6Rnd`, `ace_hot_3_2Rnd` +- Pylon Magazines: `ace_hot_1_PylonMissile_1Rnd`, `ace_hot_1_PylonRack_1Rnd`, `ace_hot_1_PylonRack_3Rnd`, `ace_hot_1_PylonRack_4Rnd`, `ace_hot_2_PylonMissile_1Rnd`, `ace_hot_2_PylonRack_1Rnd`, `ace_hot_2_PylonRack_3Rnd`, `ace_hot_2_PylonRack_4Rnd`, `ace_hot_2mp_PylonMissile_1Rnd`, `ace_hot_2mp_PylonRack_1Rnd`, `ace_hot_2mp_PylonRack_3Rnd`, `ace_hot_2mp_PylonRack_4Rnd`, `ace_hot_3_PylonMissile_1Rnd`, `ace_hot_3_PylonRack_1Rnd`, `ace_hot_3_PylonRack_3Rnd`, `ace_hot_3_PylonRack_4Rnd` + +### 3.2 Script Example + +- Adding HOT to e.g. a Cessna Civilian Plane: + +```cpp +if (local this) then { + this addWeaponTurret ["ace_hot_generic_launcher", [-1]]; + this addMagazineTurret ["ace_hot_2mp_6Rnd", [-1]]; + this addMagazineTurret ["ace_hot_3_6Rnd", [-1]]; +}; +``` + +## 4. Dependencies + +{% include dependencies_list.md component="hot" %} diff --git a/docs/wiki/feature/interact-menu.md b/docs/wiki/feature/interact-menu.md index c77e28d7f5..01a732cf7a 100644 --- a/docs/wiki/feature/interact-menu.md +++ b/docs/wiki/feature/interact-menu.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Interact Menu +title: Interaction Menu description: Base framework for interaction menu. group: feature category: interaction diff --git a/docs/wiki/feature/spotting-scope.md b/docs/wiki/feature/spotting-scope.md index 72ee5e1cf3..d982eaa92c 100644 --- a/docs/wiki/feature/spotting-scope.md +++ b/docs/wiki/feature/spotting-scope.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Spotting scope +title: Spotting Scope description: Adds a deployable spotting scope. group: feature category: equipment diff --git a/docs/wiki/feature/tacticallader.md b/docs/wiki/feature/tacticallader.md index 2ecba08931..135b56e5fc 100644 --- a/docs/wiki/feature/tacticallader.md +++ b/docs/wiki/feature/tacticallader.md @@ -1,6 +1,6 @@ --- layout: wiki -title: Tactical ladder +title: Tactical Ladder description: Adds a deployable ladder with adjustable height that you can transport on your back. group: feature category: equipment diff --git a/docs/wiki/framework/arsenal-framework.md b/docs/wiki/framework/arsenal-framework.md index 9dd8767832..90f21c9d64 100644 --- a/docs/wiki/framework/arsenal-framework.md +++ b/docs/wiki/framework/arsenal-framework.md @@ -56,6 +56,37 @@ Examples: - `[_box, ["item1", "item2", "itemN"]] call ace_arsenal_fnc_removeVirtualItems` - `[_box, true, false] call ace_arsenal_fnc_removeVirtualItems` +### 1.3 Arsenal only with items from default loadouts (See section 4) + +```cpp + * 0: Box + * 1: Items + * 2: Add globally (optional) + ``` + +Built upon the function of section 1.1, this can be used to make an Arsenal only with the items from your precreated loadouts. This is the best choice if you do not want to make a full arsenal available to have your Loadouts spawnable. + +```cpp + I. Spawn the same amount of units as you have loadouts, give each unit one of them + II. Start the mission then press ESC once loaded + III. Clear the debug console then enter the following: + + +private _items = allUnits apply {getUnitLoadout _x}; +_items = str _items splitString "[]," joinString ","; +_items = parseSimpleArray ("[" + _items + "]"); +_items = _items arrayIntersect _items select {_x isEqualType "" && {_x != ""}}; +copyToClipboard str _items; + +IV. Paste the created array from your clipboard into the space where the items are listed CTRL+V. The array is created with brackets. + ``` + +Examples: + +For a new Box: - `[_box, ["item1", "item2", "itemN"]] call ace_arsenal_fnc_initBox` + +For an existing Box: - `[_box, ["item1", "item2", "itemN"]] call ace_arsenal_fnc_addVirtualItems` + ## 2. Access to ACE Arsenal ### 2.1 Adding ACE Arsenal to a box @@ -109,7 +140,7 @@ Example: ACE Arsenal has 2 new config entries for items: -- `ace_arsenal_hide`: `0`(shown) or `1` (hidden), used to hide items from ACE Arsenal. +- `ace_arsenal_hide`: `0`(shown) or `1` (hidden), used to hide items from ACE Arsenal or `-1` (forced show), for vehicle magazines. - `ace_arsenal_uniqueBase`: Class name of the item that ACE Arsenal will replace it with when saving a loadout. Both of them are optional. diff --git a/docs/wiki/framework/atragmx.md b/docs/wiki/framework/atragmx-framework.md similarity index 97% rename from docs/wiki/framework/atragmx.md rename to docs/wiki/framework/atragmx-framework.md index c999da9c99..822e4506be 100644 --- a/docs/wiki/framework/atragmx.md +++ b/docs/wiki/framework/atragmx-framework.md @@ -10,6 +10,7 @@ version: major: 3 minor: 0 patch: 0 +redirect_from: "/wiki/framework/atragmx.html" --- ## 1. Configs Values diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 435db4e487..7a1481a299 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -46,8 +46,9 @@ MenuType: 0 = Interaction, 1 = Self Interaction |----------|---------|---------|---------|---------|---------| |`ace_interactMenuOpened` | [_menuType] | Local | Listen | Interaction Menu Opened |`ace_interactMenuClosed` | [_menuType] | Local | Listen | Interaction Menu Closed +|`ace_interact_menu_newControllableObject` | [_typeOf] | Local | Listen | New controlable object, only fires once per type (add self interactions) -### 2.4 Logistics (`ace_cargo`) +### 2.4 Cargo (`ace_cargo`) | Event Key | Parameters | Locality | Type | Description | |----------|---------|---------|---------|---------|---------| @@ -76,6 +77,18 @@ MenuType: 0 = Interaction, 1 = Self Interaction |----------|---------|---------|---------|---------|---------| |`ace_tagCreated` | [_tagObject, _texture, _tagAttachedTo (can be null), _unitThatCreated] | Global | Listen | Tag is created +### 2.8 Explosives (`ace_explosives`) + +| Event Key | Parameters | Locality | Type | Description | +|----------|---------|---------|---------|---------|---------| +|`ace_tripflareTriggered` | [_flareObject, [_posX, _posY, _posZ]] | Global | Listen | Tripflare triggered + +### 2.9 Logistics Wirecutter (`ace_logistics`) + +| Event Key | Parameters | Locality | Type | Description | +|----------|---------|---------|---------|---------|---------| +|`ace_wireCuttingStarted` | [_unit, _fence] | Global | Listen | Fence cutting started + ## 3. Usage Also Reference [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} documentation. diff --git a/docs/wiki/framework/explosives-framework.md b/docs/wiki/framework/explosives-framework.md index bd6779b68e..fe59e388ef 100644 --- a/docs/wiki/framework/explosives-framework.md +++ b/docs/wiki/framework/explosives-framework.md @@ -204,3 +204,9 @@ Jammer that blocks RF triggers: true }] call ace_explosives_fnc_addDetonateHandler; ``` + +#### 5.4 Custom timer limits +`Added in 3.12.7` + +Can set custom min and max time for the timer trigger, can set one or both, time in seconds +`ace_explosives_customTimerMin` / `ace_explosives_customTimerMax` diff --git a/docs/wiki/framework/interactionMenu-framework.md b/docs/wiki/framework/interactionMenu-framework.md index 44f4623ece..069baf351c 100644 --- a/docs/wiki/framework/interactionMenu-framework.md +++ b/docs/wiki/framework/interactionMenu-framework.md @@ -70,7 +70,7 @@ class CAManBase: Man { Two steps, creating an action (array) and then adding it to either a class or object. Important: `ace_common_fnc_canInteractWith` is not automatically checked and needs to be explicitly called. -### 2.1 fnc_createAction +### 3.1 fnc_createAction `ace_interact_menu_fnc_createAction` @@ -91,7 +91,7 @@ Important: `ace_common_fnc_canInteractWith` is not automatically checked and nee */ ``` -### 2.2 fnc_addActionToClass +### 3.2 fnc_addActionToClass `ace_interact_menu_fnc_addActionToClass` @@ -107,7 +107,7 @@ Important: `ace_common_fnc_canInteractWith` is not automatically checked and nee ``` By default this function will not use inheritance, so actions will only be added to the specific class. -### 2.3 fnc_addActionToObject +### 3.3 fnc_addActionToObject `ace_interact_menu_fnc_addActionToObject` @@ -121,7 +121,7 @@ By default this function will not use inheritance, so actions will only be added */ ``` -### 2.4 fnc_addActionToZeus +### 3.4 fnc_addActionToZeus `ace_interact_menu_fnc_addActionToZeus` @@ -133,7 +133,7 @@ By default this function will not use inheritance, so actions will only be added */ ``` -### 2.5 Examples +### 3.5 Examples External: @@ -177,7 +177,7 @@ _action = ["myMissionEvent1","Mission Event: Play Base Alarm","",_statement,{tru [["ACE_ZeusActions"], _action] call ace_interact_menu_fnc_addActionToZeus; ``` -### 2.6 Advanced Example +### 3.6 Advanced Example This adds an interaction to a unit that allows passing items that the player is carrying. @@ -221,3 +221,20 @@ _modifierFunc = { _action = ["GiveItems", "?","",_statement,_condition,_insertChildren,[123],"",4,[false, false, false, true, false], _modifierFunc] call ace_interact_menu_fnc_createAction; [q3, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; ``` + +### 3.7 Using `ace_interact_menu_newControllableObject` event + +CBA event `ace_interact_menu_newControllableObject` fires only once the first time the player controls a new object (new man, vehicle or controlled UAV) +This is the ideal way to add self interaction actions, as adding them via `addActionToClass` will force self interaction actions to be compiled for classes that may never be used. + +```cpp +// Example: Add radio self-action to all civilian cars +["ace_interact_menu_newControllableObject", { + params ["_type"]; // string of the object's classname + if (!(_type isKindOf "Car")) exitWith {}; + if ((getNumber (configFile >> "CfgVehicles" >> _type >> "side")) != 3) exitWith {}; + + private _action = ["playRadio","Play Radio","",{playMusic "NeverGonnaGiveYouUp"},{true}] call ace_interact_menu_fnc_createAction; + [_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass; +}] call CBA_fnc_addEventHandler; +``` diff --git a/docs/wiki/frameworkx/field-rations-framework.md b/docs/wiki/frameworkx/field-rations-framework.md new file mode 100644 index 0000000000..c5080e230d --- /dev/null +++ b/docs/wiki/frameworkx/field-rations-framework.md @@ -0,0 +1,104 @@ +--- +layout: wiki +title: Field Rations Framework +description: Explains how to set-up ACEX Field Rations. +group: framework +parent: wiki +mod: acex +version: + major: 3 + minor: 4 + patch: 0 +--- + +## 1. Config Values + +### 1.1 Consumable Items + +Config Name | Type | Description +----------- | ---- | ----------- +`acex_field_rations_thirstQuenched` | Number | Amount of thirst quenched when item is consumed* +`acex_field_rations_hungerSatiated` | Number | Amount of hunger satiated when item is consumed* +`acex_field_rations_consumeTime` | Number | Time required to consume the item (in seconds) +`acex_field_rations_consumeText` | String | Progress bar text (OPTIONAL) +`acex_field_rations_consumeAnims` | Array | Animations to play when consuming item** (OPTIONAL) +`acex_field_rations_consumeSounds` | Array | Sounds to play when consuming item** (OPTIONAL) +`acex_field_rations_replacementItem` | String | Class name of replacement item to add on consumption (OPTIONAL) +`acex_field_rations_refillItem` | String | Makes an item refillable, class name of item added when refilled (OPTIONAL) +`acex_field_rations_refillAmount` | Number | Amount of water required to refill item (OPTIONAL) +`acex_field_rations_refillTime` | Number | Time required to refill item (in seconds) (OPTIONAL) + + +_* Value range is 0 to 100 and can be modified by the corresponding coefficient setting._ + +_** Array is in format: STAND, CROUCH, PRONE. If player is in vehicle, the first element is used._ + +### 1.2 Water Sources + +Config Name | Type | Description +----------- | ---- | ----------- +`acex_field_rations_waterSupply` | Number | Amount of water inside the object (-1 - disabled, -10 - infinite) (OPTIONAL) +`acex_field_rations_offset` | Array | Refill action offset relative to model (OPTIONAL) + +## 2. Events + +Event Name | Passed Parameter(s) | Locality | Description +---------- | ------------------- | -------- | ----------- +`acex_rationConsumed` | [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated] | Local | Item consumed +`acex_rationRefilled` | [_source, _player, _item, _refillItem, _refillAmount] | Local | Item refilled + +## 3. Scripting + +### 3.1 Getting water supply + +`acex_field_rations_fnc_getRemainingWater` + +```cpp +* Returns the remaining water in a source. +* +* Arguments: +* 0: Water source +* +* Return Value: +* Remaining water +* +* Example: +* [_source] call acex_field_rations_fnc_getRemainingWater +``` + +### 3.2 Setting water supply + +`acex_field_rations_fnc_setRemainingWater` + +```cpp +* Sets the remaining water supply for given water source. +* +* Arguments: +* 0: Water source +* 1: Amount (-10 - Infinite, -1 - Disabled) +* +* Return Value: +* None +* +* Example: +* [_source, 1000] call acex_field_rations_fnc_setRemainingWater +``` + +### 3.3 Adding a status modifier + +`acex_field_rations_fnc_addStatusModifier` + +```cpp +* Adds a status modifier. Should be called on all machines. +* Code must return a NUMBER which will be applied additively with other status changes. +* +* Arguments: +* 0: Status to modify (0 - Thirst, 1 - Hunger, 2 - Both) +* 1: Code (is passed the unit ) +* +* Return Value: +* None +* +* Example: +* [0, {random 1}] call acex_field_rations_fnc_addStatusModifier +``` diff --git a/docs/wiki/user/how-to-make-a-feature-request.md b/docs/wiki/user/how-to-make-a-feature-request.md index 2aade6e4f9..c1aae0fe6f 100644 --- a/docs/wiki/user/how-to-make-a-feature-request.md +++ b/docs/wiki/user/how-to-make-a-feature-request.md @@ -1,6 +1,6 @@ --- layout: wiki -title: How to make a feature request +title: How to Make a Feature Request description: ACE3 requires a special procedure to make feature requests. Because due to our current work load, in the period of weeks prior and posterior to the first release, new feature requests are under embargo. group: user order: 11 diff --git a/docs/wiki/user/how-to-report-an-issue.md b/docs/wiki/user/how-to-report-an-issue.md index 11d2023b02..2c244ebb2e 100644 --- a/docs/wiki/user/how-to-report-an-issue.md +++ b/docs/wiki/user/how-to-report-an-issue.md @@ -1,6 +1,6 @@ --- layout: wiki -title: How to report an issue +title: How to Report an Issue description: If you have found an issue with ACE3 please read this entry before reporting it. group: user order: 10 diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index 0c6f397ad3..ef6d8f8ded 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -90,7 +90,7 @@ endif() string(TIMESTAMP ACE_BUILDSTAMP "%Y-%m-%dT%H:%M:%SZ") set(ACE_VERSION_MAJOR 3) set(ACE_VERSION_MINOR 12) -set(ACE_VERSION_REVISION 0) +set(ACE_VERSION_REVISION 3) EXECUTE_PROCESS(COMMAND git rev-parse --verify HEAD OUTPUT_VARIABLE T_ACE_VERSION_BUILD OUTPUT_STRIP_TRAILING_WHITESPACE diff --git a/include/a3/data_f/$PBOPREFIX$ b/include/a3/data_f/$PBOPREFIX$ new file mode 100644 index 0000000000..74761492ac --- /dev/null +++ b/include/a3/data_f/$PBOPREFIX$ @@ -0,0 +1 @@ +a3\data_f \ No newline at end of file diff --git a/include/a3/data_f/penetration/cloth.rvmat b/include/a3/data_f/penetration/cloth.rvmat new file mode 100644 index 0000000000..c83e3e7eb7 --- /dev/null +++ b/include/a3/data_f/penetration/cloth.rvmat @@ -0,0 +1,3 @@ +surfaceInfo="A3\data_f\Penetration\cloth.bisurf"; +diffuse[]={0.75,0.80000001,0.30000001,1}; +ambient[]={0.75,0.80000001,0.30000001,1}; diff --git a/include/a3/data_f/penetration/default.rvmat b/include/a3/data_f/penetration/default.rvmat new file mode 100644 index 0000000000..1ac19d7748 --- /dev/null +++ b/include/a3/data_f/penetration/default.rvmat @@ -0,0 +1,9 @@ +surfaceInfo="A3\data_f\Penetration\default.bisurf"; +ambient[]={0.48699999,0.32800001,0.249,1}; +diffuse[]={0.48699999,0.32800001,0.249,1}; +forcedDiffuse[]={0,0,0,0}; +emmisive[]={0,0,0,1}; +specular[]={0,0,0,1}; +specularPower=1; +PixelShaderID="Normal"; +VertexShaderID="Basic"; diff --git a/include/a3/data_f/penetration/metal.rvmat b/include/a3/data_f/penetration/metal.rvmat new file mode 100644 index 0000000000..261639da06 --- /dev/null +++ b/include/a3/data_f/penetration/metal.rvmat @@ -0,0 +1,9 @@ +surfaceInfo="A3\data_f\Penetration\metal.bisurf"; +ambient[]={0.69999999,0.80000001,0.77999997,1}; +diffuse[]={0.69999999,0.80000001,0.77999997,1}; +forcedDiffuse[]={0,0,0,0}; +emmisive[]={0,0,0,1}; +specular[]={0,0,0,1}; +specularPower=1; +PixelShaderID="Normal"; +VertexShaderID="Basic"; diff --git a/include/a3/data_f/penetration/metal_plate.rvmat b/include/a3/data_f/penetration/metal_plate.rvmat new file mode 100644 index 0000000000..3b19c02ddc --- /dev/null +++ b/include/a3/data_f/penetration/metal_plate.rvmat @@ -0,0 +1,9 @@ +surfaceInfo="A3\data_f\Penetration\metal_plate.bisurf"; +ambient[]={0.69999999,0.80000001,0.77999997,1}; +diffuse[]={0.69999999,0.80000001,0.77999997,1}; +forcedDiffuse[]={0,0,0,0}; +emmisive[]={0,0,0,1}; +specular[]={0,0,0,1}; +specularPower=1; +PixelShaderID="Normal"; +VertexShaderID="Basic"; diff --git a/include/a3/data_f/penetration/metal_plate_thin.rvmat b/include/a3/data_f/penetration/metal_plate_thin.rvmat new file mode 100644 index 0000000000..6027df8d27 Binary files /dev/null and b/include/a3/data_f/penetration/metal_plate_thin.rvmat differ diff --git a/include/a3/data_f/penetration/plastic.rvmat b/include/a3/data_f/penetration/plastic.rvmat new file mode 100644 index 0000000000..223c0129bd --- /dev/null +++ b/include/a3/data_f/penetration/plastic.rvmat @@ -0,0 +1,3 @@ +surfaceInfo="A3\data_f\Penetration\plastic.bisurf"; +diffuse[]={0.89999998,0.80000001,0.60000002,1}; +ambient[]={0.89999998,0.80000001,0.60000002,1}; diff --git a/include/a3/data_f/penetration/tyre.rvmat b/include/a3/data_f/penetration/tyre.rvmat new file mode 100644 index 0000000000..711d3fa369 --- /dev/null +++ b/include/a3/data_f/penetration/tyre.rvmat @@ -0,0 +1,3 @@ +surfaceInfo="A3\data_f\Penetration\tyre.bisurf"; +diffuse[]={0.1,0.1,0.1,1}; +ambient[]={0.1,0.1,0.1,1}; diff --git a/include/a3/data_f/penetration/wood.rvmat b/include/a3/data_f/penetration/wood.rvmat new file mode 100644 index 0000000000..466b9eb212 --- /dev/null +++ b/include/a3/data_f/penetration/wood.rvmat @@ -0,0 +1,9 @@ +surfaceInfo="A3\data_f\Penetration\wood.bisurf"; +ambient[]={0.5,0.25,0,1}; +diffuse[]={0.5,0.25,0,1}; +forcedDiffuse[]={0,0,0,0}; +emmisive[]={0,0,0,1}; +specular[]={0,0,0,1}; +specularPower=1; +PixelShaderID="Normal"; +VertexShaderID="Basic"; diff --git a/include/a3/ui_f/$PBOPREFIX$ b/include/a3/ui_f/$PBOPREFIX$ new file mode 100644 index 0000000000..bcaad3e8cc --- /dev/null +++ b/include/a3/ui_f/$PBOPREFIX$ @@ -0,0 +1 @@ +a3\ui_f \ No newline at end of file diff --git a/include/a3/ui_f/hpp/defineCommonColors.inc b/include/a3/ui_f/hpp/defineCommonColors.inc new file mode 100755 index 0000000000..474b732f28 --- /dev/null +++ b/include/a3/ui_f/hpp/defineCommonColors.inc @@ -0,0 +1,309 @@ +/////////////////////////////////////////////////////////////////////////// +/// GUI +/////////////////////////////////////////////////////////////////////////// + +//--- Background color with defaults (not multipliable) +#define GUI_BCG_RGB_R "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.13])" +#define GUI_BCG_RGB_G "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.54])" +#define GUI_BCG_RGB_B "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.21])" +#define GUI_BCG_ALPHA "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.8])" + +#define GUI_BCG_RGB GUI_BCG_RGB_R, GUI_BCG_RGB_G, GUI_BCG_RGB_B +#define GUI_BCG_COLOR {GUI_BCG_RGB,GUI_BCG_ALPHA} +#define GUI_BCG_COLOR_SELECTED {GUI_BCG_RGB,0.5} + +//--- TitleBar text color +#define GUI_TITLETEXT_RGB_R "(profilenamespace getvariable ['GUI_TITLETEXT_RGB_R',1.0])" +#define GUI_TITLETEXT_RGB_G "(profilenamespace getvariable ['GUI_TITLETEXT_RGB_G',1.0])" +#define GUI_TITLETEXT_RGB_B "(profilenamespace getvariable ['GUI_TITLETEXT_RGB_B',1.0])" +#define GUI_TITLETEXT_ALPHA "(profilenamespace getvariable ['GUI_TITLETEXT_RGB_A',0.6])" +#define GUI_TITLETEXT_COLOR {GUI_TITLETEXT_RGB_R, GUI_TITLETEXT_RGB_G, GUI_TITLETEXT_RGB_B, GUI_TITLETEXT_ALPHA} + +//--- Background for wGUI displays +#define GUI_BCG_MENU_RGB 0, 0, 0 +#define GUI_BCG_MENU {GUI_BCG_MENU_RGB, 0.7} + +//--- Background for editor +#define GUI_BCG_EDITOR_RGB 0.1, 0.1, 0.1 +#define GUI_BCG_EDITOR {GUI_BCG_EDITOR_RGB, 1} + +//--- Medium background (obsolete; Dwarden's displays) +#define GUI_BCG_MEDIUM_RGB GUI_BCG_RGB +#define GUI_BCG_MEDIUM_ALPHA GUI_BCG_ALPHA +#define GUI_BCG_MEDIUM_COLOR {GUI_BCG_MEDIUM_RGB,GUI_BCG_MEDIUM_ALPHA} + +//--- Dark background (HUD) +#define GUI_BCG_DARK_RGB GUI_BCG_RGB +#define GUI_BCG_DARK_ALPHA 0.85 +#define GUI_BCG_DARK_COLOR {GUI_BCG_DARK_RGB,GUI_BCG_DARK_ALPHA} +#define GUI_BCG_DARK_TRANSPARENT {GUI_BCG_DARK_RGB,GUI_BCG_DARK_ALPHA / 2} + +//--- Active color (inversed to selected color) +#define GUI_BCG_ACTIVE_RGB 1, 1, 1 + +//--- Warning color (exit buttons) +#define GUI_BCG_ERROR_RGB 0.7, 0, 0 + +//--- Text color +#define GUI_TEXT_RGB 1, 1, 1 +#define GUI_TEXT_ALPHA 1.0 +#define GUI_TEXT_COLOR {GUI_TEXT_RGB,GUI_TEXT_ALPHA} +#define GUI_TEXT_SHADOW {0,0,0,0.5} +#define GUI_TEXT_HTML_COLOR "#ffffff" +#define GUI_TEXT_HTML_SHADOW "#80000000" + +//--- List: text colors and background highlight +#define GUI_LIST_TEXT_COLOR {GUI_TEXT_RGB,0.8} +#define GUI_LIST_TEXT_COLOR_SELECTED {GUI_TEXT_RGB,1.0} +#define GUI_LIST_BCG_SELECTED {0,0,0,0.2} + +//--- Tooltip colours +#define GUI_TOOLTIP_TEXT_COLOR {1, 1, 1, 1} +#define GUI_TOOLTIP_BOX_COLOR {1, 1, 1, 1} +#define GUI_TOOLTIP_SHADE_COLOR {0, 0, 0, 0.65} + + +/////////////////////////////////////////////////////////////////////////// +/// iGUI +/////////////////////////////////////////////////////////////////////////// +//--- IGUI Background color +#define IGUI_BCG_RGB_R "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])" +#define IGUI_BCG_RGB_G "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])" +#define IGUI_BCG_RGB_B "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])" +#define IGUI_BCG_RGB_A "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])" +#define IGUI_BCG_RGB IGUI_BCG_RGB_R, IGUI_BCG_RGB_G, IGUI_BCG_RGB_B +#define IGUI_BCG_COLOR {IGUI_BCG_RGB,IGUI_BCG_RGB_A} + +//--- IGUI Text color +#define IGUI_TEXT_RGB_R "(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])" +#define IGUI_TEXT_RGB_G "(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])" +#define IGUI_TEXT_RGB_B "(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])" +#define IGUI_TEXT_RGB_A "(profilenamespace getvariable ['IGUI_TEXT_RGB_A',0.8])" +#define IGUI_TEXT_RGB IGUI_TEXT_RGB_R, IGUI_TEXT_RGB_G, IGUI_TEXT_RGB_B +#define IGUI_TEXT_COLOR {IGUI_TEXT_RGB,IGUI_TEXT_RGB_A} + +//--- IGUI Warning color +#define IGUI_WARNING_RGB_R "(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])" +#define IGUI_WARNING_RGB_G "(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])" +#define IGUI_WARNING_RGB_B "(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])" +#define IGUI_WARNING_RGB_A "(profilenamespace getvariable ['IGUI_WARNING_RGB_A',0.8])" +#define IGUI_WARNING_RGB IGUI_WARNING_RGB_R, IGUI_WARNING_RGB_G, IGUI_WARNING_RGB_B +#define IGUI_WARNING_COLOR {IGUI_WARNING_RGB,IGUI_WARNING_RGB_A} + +//--- IGUI Error color +#define IGUI_ERROR_RGB_R "(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])" +#define IGUI_ERROR_RGB_G "(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])" +#define IGUI_ERROR_RGB_B "(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])" +#define IGUI_ERROR_RGB_A "(profilenamespace getvariable ['IGUI_ERROR_RGB_A',1.0])" +#define IGUI_ERROR_RGB IGUI_ERROR_RGB_R, IGUI_ERROR_RGB_G, IGUI_ERROR_RGB_B +#define IGUI_ERROR_COLOR {IGUI_ERROR_RGB,IGUI_ERROR_RGB_A} + +//--- HUD Text color (obsolete defines; ToDo: Replace with IGUI_TEXT_COLOR and IGUI_BCG_COLOR) +#define CA_UI_HUD IGUI_TEXT_COLOR + + + +/////////////////////////////////////////////////////////////////////////// +/// Sides +/////////////////////////////////////////////////////////////////////////// + +//--- BLUFOR +#define Map_BLUFOR_R "(profilenamespace getvariable ['Map_BLUFOR_R',0])" +#define Map_BLUFOR_G "(profilenamespace getvariable ['Map_BLUFOR_G',1])" +#define Map_BLUFOR_B "(profilenamespace getvariable ['Map_BLUFOR_B',1])" +#define Map_BLUFOR_A "(profilenamespace getvariable ['Map_BLUFOR_A',0.8])" +#define Map_BLUFOR_RGB Map_BLUFOR_R, Map_BLUFOR_G, Map_BLUFOR_B +#define Map_BLUFOR_RGBA {Map_BLUFOR_RGB,Map_BLUFOR_A} + +//--- OPFOR +#define Map_OPFOR_R "(profilenamespace getvariable ['Map_OPFOR_R',0])" +#define Map_OPFOR_G "(profilenamespace getvariable ['Map_OPFOR_G',1])" +#define Map_OPFOR_B "(profilenamespace getvariable ['Map_OPFOR_B',1])" +#define Map_OPFOR_A "(profilenamespace getvariable ['Map_OPFOR_A',0.8])" +#define Map_OPFOR_RGB Map_OPFOR_R, Map_OPFOR_G, Map_OPFOR_B +#define Map_OPFOR_RGBA {Map_OPFOR_RGB,Map_OPFOR_A} + +//--- Independent +#define Map_Independent_R "(profilenamespace getvariable ['Map_Independent_R',0])" +#define Map_Independent_G "(profilenamespace getvariable ['Map_Independent_G',1])" +#define Map_Independent_B "(profilenamespace getvariable ['Map_Independent_B',1])" +#define Map_Independent_A "(profilenamespace getvariable ['Map_Independent_A',0.8])" +#define Map_Independent_RGB Map_Independent_R, Map_Independent_G, Map_Independent_B +#define Map_Independent_RGBA {Map_Independent_RGB,Map_Independent_A} + +//--- Civilian +#define Map_Civilian_R "(profilenamespace getvariable ['Map_Civilian_R',0])" +#define Map_Civilian_G "(profilenamespace getvariable ['Map_Civilian_G',1])" +#define Map_Civilian_B "(profilenamespace getvariable ['Map_Civilian_B',1])" +#define Map_Civilian_A "(profilenamespace getvariable ['Map_Civilian_A',0.8])" +#define Map_Civilian_RGB Map_Civilian_R, Map_Civilian_G, Map_Civilian_B +#define Map_Civilian_RGBA {Map_Civilian_RGB,Map_Civilian_A} + +//--- Unknown +#define Map_Unknown_R "(profilenamespace getvariable ['Map_Unknown_R',0])" +#define Map_Unknown_G "(profilenamespace getvariable ['Map_Unknown_G',1])" +#define Map_Unknown_B "(profilenamespace getvariable ['Map_Unknown_B',1])" +#define Map_Unknown_A "(profilenamespace getvariable ['Map_Unknown_A',0.8])" +#define Map_Unknown_RGB Map_Unknown_R, Map_Unknown_G, Map_Unknown_B +#define Map_Unknown_RGBA {Map_Unknown_RGB,Map_Unknown_A} + + + +/////////////////////////////////////////////////////////////////////////// +/// Misc +/////////////////////////////////////////////////////////////////////////// +//overwritten by Warka +#define CA_UI_ACTION {0.9,0.9,0.9,0.4} +#define CA_UI_ACTION_AVAILABLE IGUI_TEXT_COLOR +#define CA_UI_ACTION_ACTIVE {0.24,0.87,0,0.8} +#define CA_IGUI_Green {0.709,0.972,0.384,1} +#define CA_IGUI_GreenDark {0.259,0.463,0.149, 1} //MUF-added from A3 //{0.659,0.863,0.549,0.6} +#define CA_IGUI_Background IGUI_BCG_COLOR + +#define Color_Orange {GUI_BCG_RGB, 1} +#define Color_DarkOrange {GUI_BCG_MEDIUM_RGB, 0.7} + +#define CA_colordark {0, 0, 0, 1} +#define CA_UI_element_background Color_White +#define CA_UI_background {0.6, 0.6, 0.6, 0.4} +#define CA_UI_title_background {0.1961,0.1451,0.0941,1.0} +#define CA_UI_green {0.709,0.972,0.384,1} +#define CA_UI_red {0.58, 0.1147, 0.1108, 1} + +#define CA_UI_grey {0.4,0.4,0.4,1} +#define CA_UI_transparent {1,1,1,0} + +#define CA_IGUI_Red {0.706,0.0745,0.0196,1} +#define CA_IGUI_Orange {0.863,0.584,0.0,1} +#define CA_IGUI_YellowGreen {0.8275,0.8196,0.1961,1.0} +#define CA_IGUI_Blue {0.196,0.592,0.706, 1} +#define CA_IGUI_Grey {0.606,0.606,0.606,1} + +#define Color_White {0.95, 0.95, 0.95, 1} +//#define Color_Black {0.023529, 0, 0.0313725, 1} +#define Color_Black {0, 0, 0, 1} +#define Color_Gray {1, 1, 1, 0.5} +#define Color_Empty {0, 0, 0, 0} + +#define Color_Back {0.1, 0.1, 0.1, 0.4} +#define Color_BackList {0.2, 0.2, 0.2, 0.2} + +#define ProcTextWhite "#(argb,8,8,3)color(1,1,1,1)" +#define ProcTextBlack "#(argb,8,8,3)color(0,0,0,1)" +#define ProcTextGray "#(argb,8,8,3)color(0.3,0.3,0.3,1)" +#define ProcTextRed "#(argb,8,8,3)color(1,0,0,1)" +#define ProcTextGreen "#(argb,8,8,3)color(0,1,0,1)" +#define ProcTextBlue "#(argb,8,8,3)color(0,0,1,1)" +#define ProcTextOrange "#(argb,8,8,3)color(1,0.5,0,1)" +#define ProcTextTransparent "#(argb,8,8,3)color(0,0,0,0)" +#define ProcTextHUD "#(argb,8,8,3)color(0.600,0.8392,0.4706,1.0)" +#define ProcTextPurple "#(argb,8,8,3)color(0.75,0,0.75,1)" + + +/////////////////////////////////////////////////////////////////////////// +/// Task colors: 3D task marker +/////////////////////////////////////////////////////////////////////////// +#define COLOR_TASK_ICON_UNASSIGNED_RGB 1,1,1 +#define COLOR_TASK_ICON_UNASSIGNED_A 0.5 +#define COLOR_TASK_ICON_UNASSIGNED_RGBA COLOR_TASK_ICON_UNASSIGNED_RGB,COLOR_TASK_ICON_UNASSIGNED_A +#define COLOR_TASK_ICON_ASSIGNED_RGB 1,0.72,0.3 +#define COLOR_TASK_ICON_ASSIGNED_A 0.5 +#define COLOR_TASK_ICON_ASSIGNED_RGBA COLOR_TASK_ICON_ASSIGNED_RGB,COLOR_TASK_ICON_ASSIGNED_A +#define COLOR_TASK_ICON_CUSTOM_RGB 0.3,0.72,1 +#define COLOR_TASK_ICON_CUSTOM_A 0.5 +#define COLOR_TASK_ICON_CUSTOM_RGBA COLOR_TASK_ICON_CUSTOM_RGB,COLOR_TASK_ICON_CUSTOM_A + + +#define COLOR_TASK_BACKGROUND_UNASSIGNED_RGB 1,1,1 +#define COLOR_TASK_BACKGROUND_UNASSIGNED_A 1 +#define COLOR_TASK_BACKGROUND_UNASSIGNED_RGBA COLOR_TASK_BACKGROUND_UNASSIGNED_RGB,COLOR_TASK_BACKGROUND_UNASSIGNED_A +#define COLOR_TASK_BACKGROUND_ASSIGNED_RGB 1,0.72,0.3 +#define COLOR_TASK_BACKGROUND_ASSIGNED_A 1 +#define COLOR_TASK_BACKGROUND_ASSIGNED_RGBA COLOR_TASK_BACKGROUND_ASSIGNED_RGB,COLOR_TASK_BACKGROUND_ASSIGNED_A +#define COLOR_TASK_BACKGROUND_CUSTOM_RGB 0.3,0.72,1 +#define COLOR_TASK_BACKGROUND_CUSTOM_A 1 +#define COLOR_TASK_BACKGROUND_CUSTOM_RGBA COLOR_TASK_BACKGROUND_CUSTOM_RGB,COLOR_TASK_BACKGROUND_CUSTOM_A + + +#define COLOR_TASK_TEXT_UNASSIGNED_RGB 0.91,0.91,0.91 +#define COLOR_TASK_TEXT_UNASSIGNED_A 0.55 +#define COLOR_TASK_TEXT_UNASSIGNED_RGBA COLOR_TASK_TEXT_UNASSIGNED_RGB,COLOR_TASK_TEXT_UNASSIGNED_A +#define COLOR_TASK_TEXT_ASSIGNED_RGB 0.91,0.65,0.27 +#define COLOR_TASK_TEXT_ASSIGNED_A 0.55 +#define COLOR_TASK_TEXT_ASSIGNED_RGBA COLOR_TASK_TEXT_ASSIGNED_RGB,COLOR_TASK_TEXT_ASSIGNED_A +#define COLOR_TASK_TEXT_CUSTOM_RGB 0.27,0.65,0.91 +#define COLOR_TASK_TEXT_CUSTOM_A 0.55 +#define COLOR_TASK_TEXT_CUSTOM_RGBA COLOR_TASK_TEXT_CUSTOM_RGB,COLOR_TASK_TEXT_CUSTOM_A + + +/////////////////////////////////////////////////////////////////////////// +/// Task colors: generic +/////////////////////////////////////////////////////////////////////////// +#define COLOR_TASK_UNASSIGNED_RGB COLOR_TASK_BACKGROUND_UNASSIGNED_RGB +#define COLOR_TASK_UNASSIGNED_RGBA COLOR_TASK_UNASSIGNED_RGB,1 + +#define COLOR_TASK_ASSIGNED_RGB COLOR_TASK_BACKGROUND_ASSIGNED_RGB +#define COLOR_TASK_ASSIGNED_RGBA COLOR_TASK_ASSIGNED_RGB,1 + +#define COLOR_TASK_CUSTOM_RGB COLOR_TASK_BACKGROUND_CUSTOM_RGB +#define COLOR_TASK_CUSTOM_RGBA COLOR_TASK_CUSTOM_RGB,1 + +//navigation elements +#define IGUI_CURSOR_COLOR {COLOR_TASK_TEXT_UNASSIGNED_RGBA} + +/////////////////////////////////////////////////////////////////////////// +/// Custom info / Sensors (duplicated in \A3\cfgSensors.hpp !!!) +/////////////////////////////////////////////////////////////////////////// + +#define COLOR_SENSORS_RADAR_RGB 0.0,1.0,1.0 +#define COLOR_SENSORS_RADAR_A 1.0 +#define COLOR_SENSORS_RADAR_RGBA {COLOR_SENSORS_RADAR_RGB,COLOR_SENSORS_RADAR_A} + +#define COLOR_SENSORS_IR_RGB 1.0,0.0,0.0 +#define COLOR_SENSORS_IR_A 1.0 +#define COLOR_SENSORS_IR_RGBA {COLOR_SENSORS_IR_RGB,COLOR_SENSORS_IR_A} + +#define COLOR_SENSORS_RWR_RGB 0.5, 1, 0.5 +#define COLOR_SENSORS_RWR_A 0.5 +#define COLOR_SENSORS_RWR_RGBA {COLOR_SENSORS_RWR_RGB,COLOR_SENSORS_RWR_A} + +#define COLOR_SENSORS_NV_RGB 1,1,1 +#define COLOR_SENSORS_NV_A 0 +#define COLOR_SENSORS_NV_RGBA {COLOR_SENSORS_NV_RGB,COLOR_SENSORS_NV_A} + +#define COLOR_SENSORS_LAS_RGB 1,1,1 +#define COLOR_SENSORS_LAS_A 0 +#define COLOR_SENSORS_LAS_RGBA {COLOR_SENSORS_LAS_RGB,COLOR_SENSORS_LAS_A} + +#define COLOR_SENSORS_VIS_RGB 1.0,1.0,0.5 +#define COLOR_SENSORS_VIS_A 0.8 +#define COLOR_SENSORS_VIS_RGBA {COLOR_SENSORS_VIS_RGB,COLOR_SENSORS_VIS_A} + +#define COLOR_SENSORS_MAN_RGB 1.0, 0.5, 1.0 +#define COLOR_SENSORS_MAN_A 1.0 +#define COLOR_SENSORS_MAN_RGBA {COLOR_SENSORS_MAN_RGB,COLOR_SENSORS_MAN_A} + + +#define COLOR_SENSORS_ENEMY_RGB 1.0, 0.0, 0.0 +#define COLOR_SENSORS_ENEMY_A 1.0 +#define COLOR_SENSORS_ENEMY_RGBA {COLOR_SENSORS_ENEMY_RGB,COLOR_SENSORS_ENEMY_A} + +#define COLOR_SENSORS_FRIENDLY_RGB 0.0, 1.0, 0.0 +#define COLOR_SENSORS_FRIENDLY_A 1.0 +#define COLOR_SENSORS_FRIENDLY_RGBA {COLOR_SENSORS_FRIENDLY_RGB,COLOR_SENSORS_FRIENDLY_A} + +#define COLOR_SENSORS_GROUP_RGB 0.7, 1.0, 0.4 +#define COLOR_SENSORS_GROUP_A 1.0 +#define COLOR_SENSORS_GROUP_RGBA {COLOR_SENSORS_GROUP_RGB,COLOR_SENSORS_GROUP_A} + +#define COLOR_SENSORS_WARNING_RGB 1.0, 1.0, 0.0 +#define COLOR_SENSORS_WARNING_A 1.0 +#define COLOR_SENSORS_WARNING_RGBA {COLOR_SENSORS_WARNING_RGB,COLOR_SENSORS_WARNING_A} + +#define COLOR_SENSORS_THREAT_RGB 1.0, 0.5, 0.0 +#define COLOR_SENSORS_THREAT_A 1.0 +#define COLOR_SENSORS_THREAT_RGBA {COLOR_SENSORS_THREAT_RGB,COLOR_SENSORS_THREAT_A} + +#define COLOR_SENSORS_DEFAULT_RGB 1.0, 1.0, 1.0 +#define COLOR_SENSORS_DEFAULT_A 1.0 +#define COLOR_SENSORS_DEFAULT_RGBA {COLOR_SENSORS_DEFAULT_RGB,COLOR_SENSORS_DEFAULT_A} \ No newline at end of file diff --git a/include/a3/ui_f/hpp/defineCommonGrids.inc b/include/a3/ui_f/hpp/defineCommonGrids.inc new file mode 100644 index 0000000000..777257255a --- /dev/null +++ b/include/a3/ui_f/hpp/defineCommonGrids.inc @@ -0,0 +1,464 @@ +/////////////////////////////////////////////////////////////////////////// +/// GUI +/////////////////////////////////////////////////////////////////////////// + +//--- Hack to avoid too large display upon first startup (fixed in engine) +//#define GUI_GRID_OLD_WAbs ((safezoneW / ((floor (safezoneW / safezoneH)) max 1)) min 1.2) + +//--- New grid for new A3 displays +#define GUI_GRID_WAbs ((safezoneW / safezoneH) min 1.2) +#define GUI_GRID_HAbs (GUI_GRID_WAbs / 1.2) +#define GUI_GRID_W (GUI_GRID_WAbs / 40) +#define GUI_GRID_H (GUI_GRID_HAbs / 25) +#define GUI_GRID_X (safezoneX) +#define GUI_GRID_Y (safezoneY + safezoneH - GUI_GRID_HAbs) + +//--- MUF - Test grid used in MP +#define GUI_GRID_MP_WAbs GUI_GRID_WAbs +#define GUI_GRID_MP_HAbs GUI_GRID_HAbs +#define GUI_GRID_MP_W GUI_GRID_W +#define GUI_GRID_MP_H GUI_GRID_H +#define GUI_GRID_MP_X (SafezoneX) +#define GUI_GRID_MP_Y (safezoneY) + +//--- Screen Center +#define GUI_GRID_CENTER_WAbs GUI_GRID_WAbs +#define GUI_GRID_CENTER_HAbs GUI_GRID_HAbs +#define GUI_GRID_CENTER_W GUI_GRID_W +#define GUI_GRID_CENTER_H GUI_GRID_H +#define GUI_GRID_CENTER_X (safezoneX + (safezoneW - GUI_GRID_CENTER_WAbs)/2) +#define GUI_GRID_CENTER_Y (safezoneY + (safezoneH - GUI_GRID_CENTER_HAbs)/2) + +//--- Bottom center position (used by Revive UI) +#define GUI_GRID_CENTER_BOTTOM_WAbs GUI_GRID_WAbs +#define GUI_GRID_CENTER_BOTTOM_HAbs GUI_GRID_HAbs +#define GUI_GRID_CENTER_BOTTOM_W GUI_GRID_W +#define GUI_GRID_CENTER_BOTTOM_H GUI_GRID_H +#define GUI_GRID_CENTER_BOTTOM_X (safezoneX + (safezoneW - GUI_GRID_CENTER_WAbs)/2) +#define GUI_GRID_CENTER_BOTTOM_Y (safezoneY + safezoneH - GUI_GRID_CENTER_HAbs) + +//--- Screen Top Center +#define GUI_GRID_TOPCENTER_WAbs GUI_GRID_WAbs +#define GUI_GRID_TOPCENTER_HAbs GUI_GRID_HAbs +#define GUI_GRID_TOPCENTER_W GUI_GRID_W +#define GUI_GRID_TOPCENTER_H GUI_GRID_H +#define GUI_GRID_TOPCENTER_X GUI_GRID_CENTER_X +#define GUI_GRID_TOPCENTER_Y safezoneY + +//--- Screen Bottom Center +#define GUI_GRID_BOTTOMCENTER_WAbs GUI_GRID_WAbs +#define GUI_GRID_BOTTOMCENTER_HAbs GUI_GRID_HAbs +#define GUI_GRID_BOTTOMCENTER_W GUI_GRID_W +#define GUI_GRID_BOTTOMCENTER_H GUI_GRID_H +#define GUI_GRID_BOTTOMCENTER_X GUI_GRID_CENTER_X +#define GUI_GRID_BOTTOMCENTER_Y GUI_GRID_Y + +//--- 2D Editor - TEST A3 +#define GUI_GRID_EDITOR_WAbs GUI_GRID_CENTER_WAbs +#define GUI_GRID_EDITOR_HAbs GUI_GRID_CENTER_HAbs +#define GUI_GRID_EDITOR_W GUI_GRID_CENTER_W +#define GUI_GRID_EDITOR_H GUI_GRID_CENTER_H +#define GUI_GRID_EDITOR_X (safezoneX) +#define GUI_GRID_EDITOR_Y (safezoneY) + +//--- Diary +#define GUI_GRID_DIARY_WAbs GUI_GRID_WAbs +#define GUI_GRID_DIARY_HAbs GUI_GRID_HAbs +#define GUI_GRID_DIARY_W GUI_GRID_W +#define GUI_GRID_DIARY_H GUI_GRID_H +#define GUI_GRID_DIARY_X (safezoneX) +#define GUI_GRID_DIARY_Y (safezoneY) + +//--- Top left +#define GUI_GRID_TOPLEFT_WAbs GUI_GRID_WAbs +#define GUI_GRID_TOPLEFT_HAbs GUI_GRID_HAbs +#define GUI_GRID_TOPLEFT_W GUI_GRID_W +#define GUI_GRID_TOPLEFT_H GUI_GRID_H +#define GUI_GRID_TOPLEFT_X (safezoneX) +#define GUI_GRID_TOPLEFT_Y (safezoneY) + + +/////////////////////////////////////////////////////////////////////////// +/// iGUI +/////////////////////////////////////////////////////////////////////////// + +//--- IGUI Vehicle +#define IGUI_GRID_VEHICLE_WAbs (10 * GUI_GRID_W) +#define IGUI_GRID_VEHICLE_HAbs (4.5 * GUI_GRID_H) +#define IGUI_GRID_VEHICLE_XDef (safezoneX + 0.5 * GUI_GRID_W) +#define IGUI_GRID_VEHICLE_YDef (safezoneY + 0.5 * GUI_GRID_H) +#define IGUI_GRID_VEHICLE_X (profilenamespace getvariable ["IGUI_GRID_VEHICLE_X",IGUI_GRID_VEHICLE_XDef]) +#define IGUI_GRID_VEHICLE_Y (profilenamespace getvariable ["IGUI_GRID_VEHICLE_Y",IGUI_GRID_VEHICLE_YDef]) +#define IGUI_GRID_VEHICLE_W GUI_GRID_W +#define IGUI_GRID_VEHICLE_H GUI_GRID_H + +//--- IGUI Radar +#define IGUI_GRID_RADAR_WAbs (5.6 * GUI_GRID_W) +#define IGUI_GRID_RADAR_HAbs (5.6 * GUI_GRID_H) +#define IGUI_GRID_RADAR_XDef (safezoneX + safezoneW / 2 - 2.8 * GUI_GRID_W) +#define IGUI_GRID_RADAR_YDef (safezoneY + 0.5 * GUI_GRID_H) +#define IGUI_GRID_RADAR_X (profilenamespace getvariable ["IGUI_GRID_RADAR_X",IGUI_GRID_RADAR_XDef]) +#define IGUI_GRID_RADAR_Y (profilenamespace getvariable ["IGUI_GRID_RADAR_Y",IGUI_GRID_RADAR_YDef]) +#define IGUI_GRID_RADAR_W GUI_GRID_W +#define IGUI_GRID_RADAR_H GUI_GRID_H + +//--- IGUI Weapon +#define IGUI_GRID_WEAPON_WAbs (10 * GUI_GRID_W) +#define IGUI_GRID_WEAPON_HAbs (4.5 * GUI_GRID_H) +#define IGUI_GRID_WEAPON_XDef ((safezoneX + safezoneW) - IGUI_GRID_WEAPON_WAbs - 4.3 * GUI_GRID_W) +#define IGUI_GRID_WEAPON_YDef (safezoneY + 0.5 * GUI_GRID_H) +#define IGUI_GRID_WEAPON_X (profilenamespace getvariable ["IGUI_GRID_WEAPON_X",IGUI_GRID_WEAPON_XDef]) +#define IGUI_GRID_WEAPON_Y (profilenamespace getvariable ["IGUI_GRID_WEAPON_Y",IGUI_GRID_WEAPON_YDef]) +#define IGUI_GRID_WEAPON_W GUI_GRID_W +#define IGUI_GRID_WEAPON_H GUI_GRID_H + +//--- IGUI Stance indicator +#define IGUI_GRID_STANCE_WAbs (3.7 * GUI_GRID_W) +#define IGUI_GRID_STANCE_HAbs (3.7 * GUI_GRID_H) +#define IGUI_GRID_STANCE_XDef ((safezoneX + safezoneW) - IGUI_GRID_STANCE_WAbs - 0.5 * GUI_GRID_W) +#define IGUI_GRID_STANCE_YDef (safezoneY + 0.5 * GUI_GRID_H) +#define IGUI_GRID_STANCE_X (profilenamespace getvariable ["IGUI_GRID_STANCE_X",IGUI_GRID_STANCE_XDef]) +#define IGUI_GRID_STANCE_Y (profilenamespace getvariable ["IGUI_GRID_STANCE_Y",IGUI_GRID_STANCE_YDef]) +#define IGUI_GRID_STANCE_W GUI_GRID_W +#define IGUI_GRID_STANCE_H GUI_GRID_H + +//--- IGUI Stamina Bar +#define IGUI_GRID_STAMINA_WAbs (10 * GUI_GRID_W) +#define IGUI_GRID_STAMINA_HAbs (1 * GUI_GRID_H) +#define IGUI_GRID_STAMINA_XDef IGUI_GRID_WEAPON_XDef +#define IGUI_GRID_STAMINA_YDef (safezoneY + 4.05 * GUI_GRID_H) +#define IGUI_GRID_STAMINA_X (profilenamespace getvariable ["IGUI_GRID_STAMINA_X",IGUI_GRID_STAMINA_XDef]) +#define IGUI_GRID_STAMINA_Y (profilenamespace getvariable ["IGUI_GRID_STAMINA_Y",IGUI_GRID_STAMINA_YDef]) +#define IGUI_GRID_STAMINA_W GUI_GRID_W +#define IGUI_GRID_STAMINA_H GUI_GRID_H + +//--- IGUI Notification +#define IGUI_GRID_NOTIFICATION_WAbs (12 * GUI_GRID_W) +#define IGUI_GRID_NOTIFICATION_HAbs (6 * GUI_GRID_H) +#define IGUI_GRID_NOTIFICATION_XDef (0.5 - 6 * GUI_GRID_W) +#define IGUI_GRID_NOTIFICATION_YDef (safezoneY + 6.5 * GUI_GRID_H) +#define IGUI_GRID_NOTIFICATION_X (profilenamespace getvariable ["IGUI_GRID_NOTIFICATION_X",IGUI_GRID_NOTIFICATION_XDef]) +#define IGUI_GRID_NOTIFICATION_Y (profilenamespace getvariable ["IGUI_GRID_NOTIFICATION_Y",IGUI_GRID_NOTIFICATION_YDef]) +#define IGUI_GRID_NOTIFICATION_W GUI_GRID_W +#define IGUI_GRID_NOTIFICATION_H GUI_GRID_H + +//--- IGUI Action / Command Menu +#define IGUI_GRID_MENU_WAbs (4.5 * GUI_GRID_W) +#define IGUI_GRID_MENU_HAbs (13.5 * IGUI_TEXT_SIZE_MEDIUM) +#define IGUI_GRID_MENU_XDef (1.5 * GUI_GRID_W + safezoneX) +#define IGUI_GRID_MENU_YDef (5 * GUI_GRID_H + safezoneY) +#define IGUI_GRID_MENU_X (profilenamespace getvariable ["IGUI_GRID_MENU_X",IGUI_GRID_MENU_XDef]) +#define IGUI_GRID_MENU_Y (profilenamespace getvariable ["IGUI_GRID_MENU_Y",IGUI_GRID_MENU_YDef]) +#define IGUI_GRID_MENU_W GUI_GRID_W +#define IGUI_GRID_MENU_H GUI_GRID_H + +//--- IGUI Communication menu icons +#define IGUI_GRID_COMM_WAbs (1.5 * GUI_GRID_W) +#define IGUI_GRID_COMM_HAbs (15 * GUI_GRID_H) +#define IGUI_GRID_COMM_XDef (0 * GUI_GRID_W + safezoneX) +#define IGUI_GRID_COMM_YDef (5 * GUI_GRID_H + safezoneY) +#define IGUI_GRID_COMM_X (profilenamespace getvariable ["IGUI_GRID_COMM_X",IGUI_GRID_COMM_XDef]) +#define IGUI_GRID_COMM_Y (profilenamespace getvariable ["IGUI_GRID_COMM_Y",IGUI_GRID_COMM_YDef]) +#define IGUI_GRID_COMM_W GUI_GRID_W +#define IGUI_GRID_COMM_H GUI_GRID_H + +//--- IGUI Hint +#define IGUI_GRID_HINT_WAbs (12 * GUI_GRID_W) +#define IGUI_GRID_HINT_HAbs (8 * GUI_GRID_H) +#define IGUI_GRID_HINT_XDef ((safezoneX + safezoneW) - IGUI_GRID_HINT_WAbs - 1 * GUI_GRID_W) +#define IGUI_GRID_HINT_YDef (safezoneY + 6 * GUI_GRID_H) +#define IGUI_GRID_HINT_X (profilenamespace getvariable ["IGUI_GRID_HINT_X",IGUI_GRID_HINT_XDef]) +#define IGUI_GRID_HINT_Y (profilenamespace getvariable ["IGUI_GRID_HINT_Y",IGUI_GRID_HINT_YDef]) +#define IGUI_GRID_HINT_W GUI_GRID_W +#define IGUI_GRID_HINT_H GUI_GRID_H + +//--- IGUI GPS +#define IGUI_GRID_GPS_XDef (safezoneX + safezoneW - 11 * GUI_GRID_W) +#define IGUI_GRID_GPS_YDef (safezoneY + safezoneH - 20.5 * GUI_GRID_H) +#define IGUI_GRID_GPS_WDef (10 * GUI_GRID_W) +#define IGUI_GRID_GPS_HDef (10 * GUI_GRID_H) +#define IGUI_GRID_GPS_X (profilenamespace getvariable ['IGUI_GRID_GPS_X',IGUI_GRID_GPS_XDef]) +#define IGUI_GRID_GPS_Y (profilenamespace getvariable ['IGUI_GRID_GPS_Y',IGUI_GRID_GPS_YDef]) +#define IGUI_GRID_GPS_WAbs (profilenamespace getvariable ['IGUI_GRID_GPS_W',IGUI_GRID_GPS_WDef]) +#define IGUI_GRID_GPS_HAbs (profilenamespace getvariable ['IGUI_GRID_GPS_H',IGUI_GRID_GPS_HDef]) + +//--- IGUI AV Camera +#define IGUI_GRID_AVCAMERA_XDef (safezoneX + safezoneW - 11.6 * GUI_GRID_W) +#define IGUI_GRID_AVCAMERA_YDef (safezoneY + safezoneH - 17.2 * GUI_GRID_H) +#define IGUI_GRID_AVCAMERA_WDef (10.6 * GUI_GRID_W) +#define IGUI_GRID_AVCAMERA_HDef (6.7 * GUI_GRID_H) +#define IGUI_GRID_AVCAMERA_X (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_X',IGUI_GRID_AVCAMERA_XDef]) +#define IGUI_GRID_AVCAMERA_Y (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_Y',IGUI_GRID_AVCAMERA_YDef]) +#define IGUI_GRID_AVCAMERA_WAbs (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_W',IGUI_GRID_AVCAMERA_WDef]) +#define IGUI_GRID_AVCAMERA_HAbs (profilenamespace getvariable ['IGUI_GRID_AVCAMERA_H',IGUI_GRID_AVCAMERA_HDef]) + +//--- IGUI IGUI Chat Log +#define IGUI_GRID_CHAT_XDef (safezoneX + 1 * GUI_GRID_W) +#define IGUI_GRID_CHAT_YDef (safezoneY + safezoneH - 10.5 * GUI_GRID_H) +#define IGUI_GRID_CHAT_WDef (20 * GUI_GRID_W) +#define IGUI_GRID_CHAT_HDef (5 * GUI_GRID_H) +#define IGUI_GRID_CHAT_X (profilenamespace getvariable ["IGUI_GRID_CHAT_X",IGUI_GRID_CHAT_XDef]) +#define IGUI_GRID_CHAT_Y (profilenamespace getvariable ["IGUI_GRID_CHAT_Y",IGUI_GRID_CHAT_YDef]) +#define IGUI_GRID_CHAT_WAbs (profilenamespace getvariable ["IGUI_GRID_CHAT_W",IGUI_GRID_CHAT_WDef]) +#define IGUI_GRID_CHAT_HAbs (profilenamespace getvariable ["IGUI_GRID_CHAT_H",IGUI_GRID_CHAT_HDef]) + +//--- IGUI Command Bar +#define IGUI_GRID_BAR_WAbs (36 * GUI_GRID_W) +#define IGUI_GRID_BAR_HAbs (4 * GUI_GRID_H) +#define IGUI_GRID_BAR_XDef (safezoneX + 1 * GUI_GRID_W) +#define IGUI_GRID_BAR_YDef (safezoneY + safezoneH - 4.5 * GUI_GRID_H) +#define IGUI_GRID_BAR_X (profilenamespace getvariable ["IGUI_GRID_BAR_X",IGUI_GRID_BAR_XDef]) +#define IGUI_GRID_BAR_Y (profilenamespace getvariable ["IGUI_GRID_BAR_Y",IGUI_GRID_BAR_YDef]) +#define IGUI_GRID_BAR_W GUI_GRID_W +#define IGUI_GRID_BAR_H GUI_GRID_H + +//--- IGUI MP Progress +#define IGUI_GRID_MP_WAbs (2.5 * GUI_GRID_W) +#define IGUI_GRID_MP_HAbs (15 * GUI_GRID_H) +#define IGUI_GRID_MP_XDef (safezoneX + safezoneW - 2 * GUI_GRID_W) +#define IGUI_GRID_MP_YDef (5 * GUI_GRID_H + safezoneY) +#define IGUI_GRID_MP_X (profilenamespace getvariable ["IGUI_GRID_MP_X",IGUI_GRID_MP_XDef]) +#define IGUI_GRID_MP_Y (profilenamespace getvariable ["IGUI_GRID_MP_Y",IGUI_GRID_MP_YDef]) +#define IGUI_GRID_MP_W GUI_GRID_W +#define IGUI_GRID_MP_H GUI_GRID_H + +//--- IGUI Custom Mission Display +#define IGUI_GRID_MISSION_WAbs (20 * GUI_GRID_W) +#define IGUI_GRID_MISSION_HAbs (5 * GUI_GRID_H) +#define IGUI_GRID_MISSION_XDef (safezoneX + safezoneW - 21 * GUI_GRID_W) +#define IGUI_GRID_MISSION_YDef (safezoneY + safezoneH - 10.5 * GUI_GRID_H) +#define IGUI_GRID_MISSION_X (profilenamespace getvariable ["IGUI_GRID_MISSION_X",IGUI_GRID_MISSION_XDef]) +#define IGUI_GRID_MISSION_Y (profilenamespace getvariable ["IGUI_GRID_MISSION_Y",IGUI_GRID_MISSION_YDef]) +#define IGUI_GRID_MISSION_W GUI_GRID_W +#define IGUI_GRID_MISSION_H GUI_GRID_H + +//--- IGUI Custom Info +#define IGUI_GRID_CUSTOMINFO_WDef (10 * GUI_GRID_W) +#define IGUI_GRID_CUSTOMINFO_HDef (10 * GUI_GRID_H) +#define IGUI_GRID_CUSTOMINFOLEFT_XDef (safezoneX + 0.5 * GUI_GRID_W) +#define IGUI_GRID_CUSTOMINFOLEFT_YDef (safezoneY + safezoneH - 21 * GUI_GRID_H) +#define IGUI_GRID_CUSTOMINFORIGHT_XDef ((safezoneX + safezoneW) - (IGUI_GRID_CUSTOMINFO_WDef + 0.5 * GUI_GRID_W)) +#define IGUI_GRID_CUSTOMINFORIGHT_YDef (safezoneY + safezoneH - 21 * GUI_GRID_H) + +#define IGUI_GRID_CUSTOMINFOLEFT_X (profilenamespace getvariable ["IGUI_GRID_CUSTOMINFOLEFT_X",IGUI_GRID_CUSTOMINFOLEFT_XDef]) +#define IGUI_GRID_CUSTOMINFOLEFT_Y (profilenamespace getvariable ["IGUI_GRID_CUSTOMINFOLEFT_Y",IGUI_GRID_CUSTOMINFOLEFT_YDef]) +#define IGUI_GRID_CUSTOMINFORIGHT_X (profilenamespace getvariable ["IGUI_GRID_CUSTOMINFORIGHT_X",IGUI_GRID_CUSTOMINFORIGHT_XDef]) +#define IGUI_GRID_CUSTOMINFORIGHT_Y (profilenamespace getvariable ["IGUI_GRID_CUSTOMINFORIGHT_Y",IGUI_GRID_CUSTOMINFORIGHT_YDef]) +#define IGUI_GRID_CUSTOMINFO_WAbs (profilenamespace getvariable ["IGUI_GRID_CUSTOMINFORIGHT_W",IGUI_GRID_CUSTOMINFO_WDef]) +#define IGUI_GRID_CUSTOMINFO_HAbs (profilenamespace getvariable ["IGUI_GRID_CUSTOMINFORIGHT_H",IGUI_GRID_CUSTOMINFO_HDef]) +#define IGUI_GRID_CUSTOMINFO_INNER_WAbs IGUI_GRID_CUSTOMINFO_WAbs - 0.25 * GUI_GRID_W +#define IGUI_GRID_CUSTOMINFO_INNER_HAbs IGUI_GRID_CUSTOMINFO_HAbs - 1.25 * GUI_GRID_H + + +/////////////////////////////////////////////////////////////////////////// +/// Old +/////////////////////////////////////////////////////////////////////////// + +//--- Old grid, that is used for old A3 and TKOH displays +#define GUI_GRID_OLD_WAbs ((safezoneW / safezoneH) min 1.2) +#define GUI_GRID_OLD_HAbs (GUI_GRID_OLD_WAbs / 1.2) +#define GUI_GRID_OLD_W (GUI_GRID_OLD_WAbs / 32) +#define GUI_GRID_OLD_H (GUI_GRID_OLD_HAbs / 20) +#define GUI_GRID_OLD_X (safezoneX) +#define GUI_GRID_OLD_Y (safezoneY + safezoneH - GUI_GRID_OLD_HAbs) + +//--- Centered +//#define GUI_GRID_OLD_X (safezoneX + (safezoneW - GUI_GRID_OLD_CENTER_WAbs)/2) +//--- Dark magic +//#define GUI_GRID_OLD_X (profilenamespace getvariable ['GUI_GRID_OLD_X',(safezoneX + (safezoneW - GUI_GRID_OLD_CENTER_WAbs)/2)]) +//#define GUI_GRID_OLD_Y (profilenamespace getvariable ['GUI_GRID_OLD_Y',(safezoneY + safezoneH - GUI_GRID_OLD_HAbs)]) + +//MUF-TEST: Anchor near the right edge of the screen - when changing Interface size, this point doesn't change its X position +#define GUI_ANCHOR_RIGHT (0.983 * safezoneW + safezoneX) +#define GUI_ANCHOR_LEFT 0 + +//--- Screen Center +#define GUI_GRID_OLD_CENTER_WAbs GUI_GRID_OLD_WAbs +#define GUI_GRID_OLD_CENTER_HAbs GUI_GRID_OLD_HAbs +#define GUI_GRID_OLD_CENTER_W GUI_GRID_OLD_W +#define GUI_GRID_OLD_CENTER_H GUI_GRID_OLD_H +#define GUI_GRID_OLD_CENTER_X (safezoneX + (safezoneW - GUI_GRID_OLD_CENTER_WAbs)/2) +#define GUI_GRID_OLD_CENTER_Y (safezoneY + (safezoneH - GUI_GRID_OLD_CENTER_HAbs)/2) + +//--- 2D Editor +#define GUI_GRID_OLD_EDITOR_WAbs GUI_GRID_OLD_CENTER_WAbs +#define GUI_GRID_OLD_EDITOR_HAbs GUI_GRID_OLD_CENTER_HAbs +#define GUI_GRID_OLD_EDITOR_W GUI_GRID_OLD_CENTER_W +#define GUI_GRID_OLD_EDITOR_H GUI_GRID_OLD_CENTER_H +#define GUI_GRID_OLD_EDITOR_X GUI_GRID_OLD_CENTER_X +#define GUI_GRID_OLD_EDITOR_Y (safezoneY) + +//--- Debug console (center down) +#define GUI_GRID_OLD_DEBUG_WAbs GUI_GRID_OLD_WAbs +#define GUI_GRID_OLD_DEBUG_HAbs GUI_GRID_OLD_HAbs +#define GUI_GRID_OLD_DEBUG_W GUI_GRID_OLD_W +#define GUI_GRID_OLD_DEBUG_H GUI_GRID_OLD_H +#define GUI_GRID_OLD_DEBUG_X (safezoneX + (safezoneW - GUI_GRID_OLD_DEBUG_WAbs)/2) +#define GUI_GRID_OLD_DEBUG_Y (safezoneY + safezoneH - GUI_GRID_OLD_DEBUG_HAbs) + +//--- IGUI Common +#define IGUI_GRID_OLD_WAbs GUI_GRID_OLD_WAbs +#define IGUI_GRID_OLD_HAbs GUI_GRID_OLD_HAbs +#define IGUI_GRID_OLD_W GUI_GRID_OLD_W +#define IGUI_GRID_OLD_H GUI_GRID_OLD_H +#define IGUI_GRID_OLD_X (safezoneX + (safezoneW - IGUI_GRID_OLD_WAbs) / 2) +#define IGUI_GRID_OLD_Y (safezoneY + safezoneH - IGUI_GRID_OLD_HAbs) + +//--- IGUI Bottom +#define IGUI_GRID_OLD_BOTTOM_WAbs IGUI_GRID_OLD_WAbs +#define IGUI_GRID_OLD_BOTTOM_HAbs IGUI_GRID_OLD_HAbs +#define IGUI_GRID_OLD_BOTTOM_W IGUI_GRID_OLD_W +#define IGUI_GRID_OLD_BOTTOM_H IGUI_GRID_OLD_H +#define IGUI_GRID_OLD_BOTTOM_X (safezoneX + (safezoneW - IGUI_GRID_OLD_BOTTOM_WAbs) / 2) +#define IGUI_GRID_OLD_BOTTOM_Y (safezoneY + safezoneH - IGUI_GRID_OLD_BOTTOM_HAbs) + +//--- IGUI Analogue Gauges ----------------------------------------------------------------------------------------------------- +//--- Analogue gauge - Speed +#define IGUI_GRID_GAUGESPEED_XDef (safezoneX + (safezoneW / 2) - 19.75 * GUI_GRID_W) +#define IGUI_GRID_GAUGESPEED_YDef (safezoneY + safezoneH - 11.7 * GUI_GRID_H) +#define IGUI_GRID_GAUGESPEED_X (profilenamespace getvariable ['IGUI_GRID_GAUGESPEED_X',IGUI_GRID_GAUGESPEED_XDef]) +#define IGUI_GRID_GAUGESPEED_Y (profilenamespace getvariable ['IGUI_GRID_GAUGESPEED_Y',IGUI_GRID_GAUGESPEED_YDef]) +#define IGUI_GRID_GAUGESPEED_WAbs (7.5 * GUI_GRID_W) +#define IGUI_GRID_GAUGESPEED_HAbs (7.5 * GUI_GRID_H) + +//--- Analogue gauge - Alt +#define IGUI_GRID_GAUGEALT_XDef (safezoneX + (safezoneW / 2) - 11.75 * GUI_GRID_W) +#define IGUI_GRID_GAUGEALT_YDef (safezoneY + safezoneH - 11.7 * GUI_GRID_H) +#define IGUI_GRID_GAUGEALT_X (profilenamespace getvariable ['IGUI_GRID_GAUGEALT_X',IGUI_GRID_GAUGEALT_XDef]) +#define IGUI_GRID_GAUGEALT_Y (profilenamespace getvariable ['IGUI_GRID_GAUGEALT_Y',IGUI_GRID_GAUGEALT_YDef]) +#define IGUI_GRID_GAUGEALT_WAbs (7.5 * GUI_GRID_W) +#define IGUI_GRID_GAUGEALT_HAbs (7.5 * GUI_GRID_H) + +//--- Analogue gauge - Horizon +#define IGUI_GRID_GAUGEHORIZON_XDef (safezoneX + ((safezoneW - 7.5 * GUI_GRID_W) / 2)) +#define IGUI_GRID_GAUGEHORIZON_YDef (safezoneY + safezoneH - 11.7 * GUI_GRID_H) +#define IGUI_GRID_GAUGEHORIZON_X (profilenamespace getvariable ['IGUI_GRID_GAUGEHORIZON_X',IGUI_GRID_GAUGEHORIZON_XDef]) +#define IGUI_GRID_GAUGEHORIZON_Y (profilenamespace getvariable ['IGUI_GRID_GAUGEHORIZON_Y',IGUI_GRID_GAUGEHORIZON_YDef]) +#define IGUI_GRID_GAUGEHORIZON_WAbs (7.5 * GUI_GRID_W) +#define IGUI_GRID_GAUGEHORIZON_HAbs (7.5 * GUI_GRID_H) + +//--- Analogue gauge - Stability +#define IGUI_GRID_GAUGESTABILITY_XDef (safezoneX + (safezoneW / 2) + 4.25 * GUI_GRID_W) +#define IGUI_GRID_GAUGESTABILITY_YDef (safezoneY + safezoneH - 11.7 * GUI_GRID_H) +#define IGUI_GRID_GAUGESTABILITY_X (profilenamespace getvariable ['IGUI_GRID_GAUGESTABILITY_X',IGUI_GRID_GAUGESTABILITY_XDef]) +#define IGUI_GRID_GAUGESTABILITY_Y (profilenamespace getvariable ['IGUI_GRID_GAUGESTABILITY_Y',IGUI_GRID_GAUGESTABILITY_YDef]) +#define IGUI_GRID_GAUGESTABILITY_WAbs (7.5 * GUI_GRID_W) +#define IGUI_GRID_GAUGESTABILITY_HAbs (7.5 * GUI_GRID_H) + +//--- Analogue gauge - Compass +#define IGUI_GRID_GAUGECOMPASS_XDef (safezoneX + (safezoneW / 2) + 12.25 * GUI_GRID_W) +#define IGUI_GRID_GAUGECOMPASS_YDef (safezoneY + safezoneH - 11.7 * GUI_GRID_H) +#define IGUI_GRID_GAUGECOMPASS_X (profilenamespace getvariable ['IGUI_GRID_GAUGECOMPASS_X',IGUI_GRID_GAUGECOMPASS_XDef]) +#define IGUI_GRID_GAUGECOMPASS_Y (profilenamespace getvariable ['IGUI_GRID_GAUGECOMPASS_Y',IGUI_GRID_GAUGECOMPASS_YDef]) +#define IGUI_GRID_GAUGECOMPASS_WAbs (7.5 * GUI_GRID_W) +#define IGUI_GRID_GAUGECOMPASS_HAbs (7.5 * GUI_GRID_H) + +//--- Analogue gauge - Damage indicators +// #define IGUI_GRID_GAUGEDAMAGE_XDef (safezoneX + (safezoneW / 2) - 19 * GUI_GRID_W) +// #define IGUI_GRID_GAUGEDAMAGE_YDef (safezoneY + safezoneH - 7 * GUI_GRID_H) +// #define IGUI_GRID_GAUGEDAMAGE_X (profilenamespace getvariable ['IGUI_GRID_GAUGEDAMAGE_X',IGUI_GRID_GAUGEDAMAGE_XDef]) +// #define IGUI_GRID_GAUGEDAMAGE_Y (profilenamespace getvariable ['IGUI_GRID_GAUGEDAMAGE_Y',IGUI_GRID_GAUGEDAMAGE_YDef]) +// #define IGUI_GRID_GAUGEDAMAGE_WAbs (9.6 * GUI_GRID_W) +// #define IGUI_GRID_GAUGEDAMAGE_HAbs (2.4 * GUI_GRID_H) +//--- IGUI Analogue Gauges ----------------------------------------------------------------------------------------------------- + +//--- Sling Load Assistant +#define IGUI_GRID_SLINGLOADASSISTANT_XDef (safezoneX + safezoneW - 8 * GUI_GRID_W) +#define IGUI_GRID_SLINGLOADASSISTANT_YDef (safezoneY + safezoneH - 19.5 * GUI_GRID_H) +#define IGUI_GRID_SLINGLOADASSISTANT_WDef (7 * GUI_GRID_W) +#define IGUI_GRID_SLINGLOADASSISTANT_HDef (9.5 * GUI_GRID_H) +#define IGUI_GRID_SLINGLOADASSISTANT_X (profilenamespace getvariable ['IGUI_GRID_SLINGLOADASSISTANT_X',IGUI_GRID_SLINGLOADASSISTANT_XDef]) +#define IGUI_GRID_SLINGLOADASSISTANT_Y (profilenamespace getvariable ['IGUI_GRID_SLINGLOADASSISTANT_Y',IGUI_GRID_SLINGLOADASSISTANT_YDef]) +#define IGUI_GRID_SLINGLOADASSISTANT_WAbs (profilenamespace getvariable ['IGUI_GRID_SLINGLOADASSISTANT_W',IGUI_GRID_SLINGLOADASSISTANT_WDef]) +#define IGUI_GRID_SLINGLOADASSISTANT_HAbs (profilenamespace getvariable ['IGUI_GRID_SLINGLOADASSISTANT_H',IGUI_GRID_SLINGLOADASSISTANT_HDef]) + +//--- Squad Radar +// #define IGUI_GRID_SQUADRADAR_XDef (safezoneX + (safezoneW / 2) - 3 * GUI_GRID_W) +// #define IGUI_GRID_SQUADRADAR_YDef (safezoneY + safezoneH - 10.9 * GUI_GRID_H) +// #define IGUI_GRID_SQUADRADAR_X (profilenamespace getvariable ['IGUI_GRID_SQUADRADAR_X',IGUI_GRID_SQUADRADAR_XDef]) +// #define IGUI_GRID_SQUADRADAR_Y (profilenamespace getvariable ['IGUI_GRID_SQUADRADAR_Y',IGUI_GRID_SQUADRADAR_YDef]) +// #define IGUI_GRID_SQUADRADAR_WAbs (6 * GUI_GRID_W) +// #define IGUI_GRID_SQUADRADAR_HAbs (6 * GUI_GRID_H) + +// #define IGUI_GRID_SQUADRADAR_LIST1_XDef (IGUI_GRID_SQUADRADAR_XDef + IGUI_GRID_SQUADRADAR_WAbs) +// #define IGUI_GRID_SQUADRADAR_LIST1_YDef (IGUI_GRID_SQUADRADAR_YDef) +// #define IGUI_GRID_SQUADRADAR_LIST1_X (profilenamespace getvariable ['IGUI_GRID_SQUADRADAR_LIST1_X',IGUI_GRID_SQUADRADAR_LIST1_XDef]) +// #define IGUI_GRID_SQUADRADAR_LIST1_Y (profilenamespace getvariable ['IGUI_GRID_SQUADRADAR_LIST1_Y',IGUI_GRID_SQUADRADAR_LIST1_YDef]) +// #define IGUI_GRID_SQUADRADAR_LIST1_WAbs (6 * GUI_GRID_W) +// #define IGUI_GRID_SQUADRADAR_LIST1_HAbs (6 * GUI_GRID_H) + +// #define IGUI_GRID_SQUADRADAR_LIST2_XDef (IGUI_GRID_SQUADRADAR_LIST1_XDef + IGUI_GRID_SQUADRADAR_LIST1_WAbs) +// #define IGUI_GRID_SQUADRADAR_LIST2_YDef (IGUI_GRID_SQUADRADAR_LIST1_YDef) +// #define IGUI_GRID_SQUADRADAR_LIST2_X (profilenamespace getvariable ['IGUI_GRID_SQUADRADAR_LIST2_X',IGUI_GRID_SQUADRADAR_LIST2_XDef]) +// #define IGUI_GRID_SQUADRADAR_LIST2_Y (profilenamespace getvariable ['IGUI_GRID_SQUADRADAR_LIST2_Y',IGUI_GRID_SQUADRADAR_LIST2_YDef]) +// #define IGUI_GRID_SQUADRADAR_LIST2_WAbs (6 * GUI_GRID_W) +// #define IGUI_GRID_SQUADRADAR_LIST2_HAbs (6 * GUI_GRID_H) + +//--- IGUI Action / Command Menu +#define IGUI_GRID_OLD_MENU_WAbs (4.5 * IGUI_GRID_OLD_W) +#define IGUI_GRID_OLD_MENU_HAbs (10 * (IGUI_TEXT_SIZE_MEDIUM * 1.3)) +#define IGUI_GRID_OLD_MENU_XDef (1 * IGUI_GRID_OLD_W + safezoneX) +#define IGUI_GRID_OLD_MENU_YDef (5 * IGUI_GRID_OLD_H + safezoneY) +#define IGUI_GRID_OLD_MENU_X (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_X",IGUI_GRID_OLD_MENU_XDef]) +#define IGUI_GRID_OLD_MENU_Y (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_Y",IGUI_GRID_OLD_MENU_YDef]) +#define IGUI_GRID_OLD_MENU_W IGUI_GRID_OLD_W +#define IGUI_GRID_OLD_MENU_H IGUI_GRID_OLD_H + +//--- E3 +/* +#define IGUI_GRID_OLD_MENU_WAbs (4.5 * IGUI_GRID_OLD_W) +#define IGUI_GRID_OLD_MENU_HAbs (10 * (IGUI_TEXT_SIZE_MEDIUM * 1.3)) +#define IGUI_GRID_OLD_MENU_XDef (0.6) +#define IGUI_GRID_OLD_MENU_YDef (0.55) +#define IGUI_GRID_OLD_MENU_X (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_X",IGUI_GRID_OLD_MENU_XDef]) +#define IGUI_GRID_OLD_MENU_Y (profilenamespace getvariable ["IGUI_GRID_OLD_MENU_Y",IGUI_GRID_OLD_MENU_YDef]) +#define IGUI_GRID_OLD_MENU_W IGUI_GRID_OLD_W +#define IGUI_GRID_OLD_MENU_H IGUI_GRID_OLD_H +*/ + +//--- IGUI Task +#define IGUI_GRID_OLD_TASK_WAbs (12 * IGUI_GRID_OLD_W) +#define IGUI_GRID_OLD_TASK_HAbs (2 * IGUI_GRID_OLD_H) +#define IGUI_GRID_OLD_TASK_XDef (10 * IGUI_GRID_OLD_W + IGUI_GRID_OLD_X) +#define IGUI_GRID_OLD_TASK_YDef (1 * IGUI_GRID_OLD_H + safezoneY) +#define IGUI_GRID_OLD_TASK_X IGUI_GRID_OLD_TASK_XDef +#define IGUI_GRID_OLD_TASK_Y IGUI_GRID_OLD_TASK_YDef +#define IGUI_GRID_OLD_TASK_W IGUI_GRID_OLD_W +#define IGUI_GRID_OLD_TASK_H IGUI_GRID_OLD_H + +//--- IGUI PIP +#define IGUI_GRID_OLD_PIP_XDef (safezoneX + safezoneW - 6.8 * IGUI_GRID_OLD_W) +#define IGUI_GRID_OLD_PIP_YDef (7 * IGUI_GRID_OLD_H + IGUI_GRID_OLD_Y) +#define IGUI_GRID_OLD_PIP_WDef (6 * IGUI_GRID_OLD_W) +#define IGUI_GRID_OLD_PIP_HDef (IGUI_GRID_OLD_PIP_WDef) +//#define IGUI_GRID_OLD_PIP_X (profilenamespace getvariable ['IGUI_GRID_OLD_PIP_X',IGUI_GRID_OLD_PIP_XDef]) +//#define IGUI_GRID_OLD_PIP_Y (profilenamespace getvariable ['IGUI_GRID_OLD_PIP_Y',IGUI_GRID_OLD_PIP_YDef]) +//#define IGUI_GRID_OLD_PIP_WAbs (profilenamespace getvariable ['IGUI_GRID_OLD_PIP_W',IGUI_GRID_OLD_PIP_WDef]) +#define IGUI_GRID_OLD_PIP_X IGUI_GRID_OLD_PIP_XDef +#define IGUI_GRID_OLD_PIP_Y IGUI_GRID_OLD_PIP_YDef +#define IGUI_GRID_OLD_PIP_WAbs IGUI_GRID_OLD_PIP_WDef +#define IGUI_GRID_OLD_PIP_HAbs (IGUI_GRID_OLD_PIP_WAbs) + + +//--- MUF - experimental optics grid +// #define GUI_GRID_OLD_OPTICS_X (SafezoneX + ((SafezoneW - SafezoneH) / 2)) +// #define GUI_GRID_OLD_OPTICS_Y (SafezoneY) +// #define GUI_GRID_OLD_OPTICS_W (0.01875) +// #define GUI_GRID_OLD_OPTICS_H (0.025) +// #define GUI_GRID_OLD_OPTICS_WAbs ((SafezoneX + ((SafezoneW - SafezoneH) / 2)) / 0.01875) +// #define GUI_GRID_OLD_OPTICS_HAbs (SafezoneH / 0.01875) + +#define GUI_GRID_OLD_OPTICS_X (SafezoneX + ((SafezoneW - SafezoneH) / 2)) +#define GUI_GRID_OLD_OPTICS_Y (SafezoneY) +#define GUI_GRID_OLD_OPTICS_W (0.01875 * SafezoneH) +#define GUI_GRID_OLD_OPTICS_H (0.025 * SafezoneH) +#define GUI_GRID_OLD_OPTICS_WAbs (SafezoneH) +#define GUI_GRID_OLD_OPTICS_HAbs (SafezoneH) + +//--- MUF - experimental AV Terminal grid +#define GUI_GRID_OLD_AV_TERMINAL_X (safezoneX) +#define GUI_GRID_OLD_AV_TERMINAL_Y (safezoneY) +#define GUI_GRID_OLD_AV_TERMINAL_W (safezoneW / 64) +#define GUI_GRID_OLD_AV_TERMINAL_H (safezoneH / 40) +#define GUI_GRID_OLD_AV_TERMINAL_WAbs (safezoneW) +#define GUI_GRID_OLD_AV_TERMINAL_HAbs (safezoneH) \ No newline at end of file diff --git a/include/a3/ui_f/hpp/defineDIKCodes.inc b/include/a3/ui_f/hpp/defineDIKCodes.inc new file mode 100644 index 0000000000..c641d60132 --- /dev/null +++ b/include/a3/ui_f/hpp/defineDIKCodes.inc @@ -0,0 +1,190 @@ +#ifndef DIK_ESCAPE + +/**************************************************************************** + * + * DirectInput keyboard scan codes + * + ****************************************************************************/ + +#define DIK_ESCAPE 0x01 +#define DIK_1 0x02 +#define DIK_2 0x03 +#define DIK_3 0x04 +#define DIK_4 0x05 +#define DIK_5 0x06 +#define DIK_6 0x07 +#define DIK_7 0x08 +#define DIK_8 0x09 +#define DIK_9 0x0A +#define DIK_0 0x0B +#define DIK_MINUS 0x0C /* - on main keyboard */ +#define DIK_EQUALS 0x0D +#define DIK_BACK 0x0E /* backspace */ +#define DIK_TAB 0x0F +#define DIK_Q 0x10 +#define DIK_W 0x11 +#define DIK_E 0x12 +#define DIK_R 0x13 +#define DIK_T 0x14 +#define DIK_Y 0x15 +#define DIK_U 0x16 +#define DIK_I 0x17 +#define DIK_O 0x18 +#define DIK_P 0x19 +#define DIK_LBRACKET 0x1A +#define DIK_RBRACKET 0x1B +#define DIK_RETURN 0x1C /* Enter on main keyboard */ +#define DIK_LCONTROL 0x1D +#define DIK_A 0x1E +#define DIK_S 0x1F +#define DIK_D 0x20 +#define DIK_F 0x21 +#define DIK_G 0x22 +#define DIK_H 0x23 +#define DIK_J 0x24 +#define DIK_K 0x25 +#define DIK_L 0x26 +#define DIK_SEMICOLON 0x27 +#define DIK_APOSTROPHE 0x28 +#define DIK_GRAVE 0x29 /* accent grave */ +#define DIK_LSHIFT 0x2A +#define DIK_BACKSLASH 0x2B +#define DIK_Z 0x2C +#define DIK_X 0x2D +#define DIK_C 0x2E +#define DIK_V 0x2F +#define DIK_B 0x30 +#define DIK_N 0x31 +#define DIK_M 0x32 +#define DIK_COMMA 0x33 +#define DIK_PERIOD 0x34 /* . on main keyboard */ +#define DIK_SLASH 0x35 /* / on main keyboard */ +#define DIK_RSHIFT 0x36 +#define DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define DIK_LMENU 0x38 /* left Alt */ +#define DIK_SPACE 0x39 +#define DIK_CAPITAL 0x3A +#define DIK_F1 0x3B +#define DIK_F2 0x3C +#define DIK_F3 0x3D +#define DIK_F4 0x3E +#define DIK_F5 0x3F +#define DIK_F6 0x40 +#define DIK_F7 0x41 +#define DIK_F8 0x42 +#define DIK_F9 0x43 +#define DIK_F10 0x44 +#define DIK_NUMLOCK 0x45 +#define DIK_SCROLL 0x46 /* Scroll Lock */ +#define DIK_NUMPAD7 0x47 +#define DIK_NUMPAD8 0x48 +#define DIK_NUMPAD9 0x49 +#define DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define DIK_NUMPAD4 0x4B +#define DIK_NUMPAD5 0x4C +#define DIK_NUMPAD6 0x4D +#define DIK_ADD 0x4E /* + on numeric keypad */ +#define DIK_NUMPAD1 0x4F +#define DIK_NUMPAD2 0x50 +#define DIK_NUMPAD3 0x51 +#define DIK_NUMPAD0 0x52 +#define DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define DIK_OEM_102 0x56 /* < > | on UK/Germany keyboards */ +#define DIK_F11 0x57 +#define DIK_F12 0x58 + +#define DIK_F13 0x64 /* (NEC PC98) */ +#define DIK_F14 0x65 /* (NEC PC98) */ +#define DIK_F15 0x66 /* (NEC PC98) */ + +#define DIK_KANA 0x70 /* (Japanese keyboard) */ +#define DIK_ABNT_C1 0x73 /* / ? on Portugese (Brazilian) keyboards */ +#define DIK_CONVERT 0x79 /* (Japanese keyboard) */ +#define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ +#define DIK_YEN 0x7D /* (Japanese keyboard) */ +#define DIK_ABNT_C2 0x7E /* Numpad . on Portugese (Brazilian) keyboards */ +#define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ +#define DIK_PREVTRACK 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ +#define DIK_AT 0x91 /* (NEC PC98) */ +#define DIK_COLON 0x92 /* (NEC PC98) */ +#define DIK_UNDERLINE 0x93 /* (NEC PC98) */ +#define DIK_KANJI 0x94 /* (Japanese keyboard) */ +#define DIK_STOP 0x95 /* (NEC PC98) */ +#define DIK_AX 0x96 /* (Japan AX) */ +#define DIK_UNLABELED 0x97 /* (J3100) */ +#define DIK_NEXTTRACK 0x99 /* Next Track */ +#define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define DIK_RCONTROL 0x9D +#define DIK_MUTE 0xA0 /* Mute */ +#define DIK_CALCULATOR 0xA1 /* Calculator */ +#define DIK_PLAYPAUSE 0xA2 /* Play / Pause */ +#define DIK_MEDIASTOP 0xA4 /* Media Stop */ +#define DIK_VOLUMEDOWN 0xAE /* Volume - */ +#define DIK_VOLUMEUP 0xB0 /* Volume + */ +#define DIK_WEBHOME 0xB2 /* Web home */ +#define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ +#define DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define DIK_SYSRQ 0xB7 +#define DIK_RMENU 0xB8 /* right Alt */ +#define DIK_PAUSE 0xC5 /* Pause */ +#define DIK_HOME 0xC7 /* Home on arrow keypad */ +#define DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define DIK_END 0xCF /* End on arrow keypad */ +#define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define DIK_LWIN 0xDB /* Left Windows key */ +#define DIK_RWIN 0xDC /* Right Windows key */ +#define DIK_APPS 0xDD /* AppMenu key */ +#define DIK_POWER 0xDE /* System Power */ +#define DIK_SLEEP 0xDF /* System Sleep */ +#define DIK_WAKE 0xE3 /* System Wake */ +#define DIK_WEBSEARCH 0xE5 /* Web Search */ +#define DIK_WEBFAVORITES 0xE6 /* Web Favorites */ +#define DIK_WEBREFRESH 0xE7 /* Web Refresh */ +#define DIK_WEBSTOP 0xE8 /* Web Stop */ +#define DIK_WEBFORWARD 0xE9 /* Web Forward */ +#define DIK_WEBBACK 0xEA /* Web Back */ +#define DIK_MYCOMPUTER 0xEB /* My Computer */ +#define DIK_MAIL 0xEC /* Mail */ +#define DIK_MEDIASELECT 0xED /* Media Select */ + +/* + * Alternate names for keys, to facilitate transition from DOS. + */ +#define DIK_BACKSPACE DIK_BACK /* backspace */ +#define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */ +#define DIK_LALT DIK_LMENU /* left Alt */ +#define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */ +#define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */ +#define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */ +#define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */ +#define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */ +#define DIK_RALT DIK_RMENU /* right Alt */ +#define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */ +#define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */ +#define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */ +#define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */ +#define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */ +#define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */ + +/* + * Alternate names for keys originally not used on US keyboards. + */ +#define DIK_CIRCUMFLEX DIK_PREVTRACK /* Japanese keyboard */ + + +/* + * Combination keys + */ +#define INPUT_CTRL_OFFSET 512 +#define INPUT_SHIFT_OFFSET 1024 +#define INPUT_ALT_OFFSET 2048 + + +#endif /* DIK_ESCAPE */ + diff --git a/include/a3/ui_f/hpp/defineResincl.inc b/include/a3/ui_f/hpp/defineResincl.inc new file mode 100644 index 0000000000..7a94b6b592 --- /dev/null +++ b/include/a3/ui_f/hpp/defineResincl.inc @@ -0,0 +1,3170 @@ +/*******************/ +/* Tactical menu */ +/*******************/ + +// Menu commands + // main menu +#define CMD_SEPARATOR -1 +#define CMD_NOTHING -2 +#define CMD_HIDE_MENU -3 +#define CMD_BACK -4 +// Custom menu command +#define CMD_EXECUTE -5 + +#ifdef _CONFIG +enum +{ +// note: this CMD should be if possible organized as is menu +// (items from the same menu together) +// this makes searching much easier + +//main menu level +CMD_GETIN, +CMD_GETOUT, +CMD_ACTION, + +// move submenu + +// other commands +CMD_ADVANCE, +CMD_STAY_BACK, +CMD_FLANK_LEFT, +CMD_FLANK_RIGHT, +CMD_NEXT_WAYPOINT, +CMD_HIDE, +CMD_JOIN, +CMD_STOP, +CMD_EXPECT, +CMD_MOVE, + + // formations +CMD_FORM_COLUMN, +CMD_FORM_STAGCOL, +CMD_FORM_WEDGE, +CMD_FORM_ECHLEFT, +CMD_FORM_ECHRIGHT, +CMD_FORM_VEE, +CMD_FORM_LINE, +CMD_FORM_DIAMOND, +CMD_FORM_FILE, + +// engage +CMD_ENGAGE, +CMD_LOOSE_FORM, +CMD_KEEP_FORM, + +CMD_HOLD_FIRE, +CMD_OPEN_FIRE, +CMD_FIRE, + +// status +CMD_WATCH, +CMD_WATCH_AROUND, +CMD_WATCH_AUTO, +CMD_WATCH_DIR, + +// combat modes +CMD_STEALTH, +CMD_COMBAT, +CMD_AWARE, +CMD_SAFE, + +// heal +CMD_HEALBLEEDING, +CMD_HEAL, +CMD_HEAL_SELF, +CMD_REPAIR_VEHICLE, +CMD_CARRY, +CMD_DROP_CARRIED, +CMD_PUTIN, +CMD_UNLOADFROM, + +// swiming and diving +CMD_KEEP_DEPTH_RELATIVE_UP, +CMD_KEEP_DEPTH_RELATIVE_DOWN, +CMD_KEEP_DEPTH_LEADER, +CMD_KEEP_DEPTH_UNDERSURFACE, +CMD_KEEP_DEPTH_ABOVESURFACE, +CMD_KEEP_DEPTH_BOTTOM, + +//suppress fire +CMD_SUPPRESS, + +CMD_POS_UP, +CMD_POS_MIDDLE, +CMD_POS_DOWN, +CMD_POS_AUTO, + // teams +CMD_TEAM_MAIN, +CMD_TEAM_RED, +CMD_TEAM_GREEN, +CMD_TEAM_BLUE, +CMD_TEAM_YELLOW, +CMD_ASSIGN_MAIN, +CMD_ASSIGN_RED, +CMD_ASSIGN_GREEN, +CMD_ASSIGN_BLUE, +CMD_ASSIGN_YELLOW, +CMD_TEAM_DISSOLVE, + +// radio +CMD_RADIO_ALPHA, +CMD_RADIO_BRAVO, +CMD_RADIO_CHARLIE, +CMD_RADIO_DELTA, +CMD_RADIO_ECHO, +CMD_RADIO_FOXTROT, +CMD_RADIO_GOLF, +CMD_RADIO_HOTEL, +CMD_RADIO_INDIA, +CMD_RADIO_JULIET, + +// reply commands + +CMD_REPLY_DONE, +CMD_REPLY_FAIL, +CMD_REPLY_COPY, +CMD_REPLY_REPEAT, +CMD_REPLY_WHERE_ARE_YOU, +CMD_REPORT, +CMD_REPLY_ENGAGING, +CMD_REPLY_UNDER_FIRE, +CMD_REPLY_HIT, +CMD_REPLY_ONE_LESS, +CMD_REPLY_FIREREADY, +CMD_REPLY_FIRENOTREADY, +CMD_REPLY_KILLED, +CMD_REPLY_AMMO_LOW, +CMD_REPLY_FUEL_LOW, +CMD_REPLY_INJURED, +CMD_REPLY_OUT_OF_FAKs, + +CMD_SUPPORT_MEDIC, +CMD_SUPPORT_AMBULANCE, +CMD_SUPPORT_REPAIR, +CMD_SUPPORT_REARM, +CMD_SUPPORT_REFUEL, +CMD_SUPPORT_DONE, + +CMD_RADIO_CUSTOM, +CMD_RADIO_CUSTOM_1, +CMD_RADIO_CUSTOM_2, +CMD_RADIO_CUSTOM_3, +CMD_RADIO_CUSTOM_4, +CMD_RADIO_CUSTOM_5, +CMD_RADIO_CUSTOM_6, +CMD_RADIO_CUSTOM_7, +CMD_RADIO_CUSTOM_8, +CMD_RADIO_CUSTOM_9, +CMD_RADIO_CUSTOM_0, + +CMD_UNIT_1, +CMD_UNIT_2, +CMD_UNIT_3, +CMD_UNIT_4, +CMD_UNIT_5, +CMD_UNIT_6, +CMD_UNIT_7, +CMD_UNIT_8, +CMD_UNIT_9, +CMD_UNIT_10, +CMD_UNIT_11, +CMD_UNIT_12, +CMD_UNITS_ALL, + +CMD_MY_VEHICLE, + +CMD_SELECT_MAIN, +CMD_SELECT_RED, +CMD_SELECT_GREEN, +CMD_SELECT_BLUE, +CMD_SELECT_YELLOW, + +CMD_VEHICLE_1, +CMD_VEHICLE_2, +CMD_VEHICLE_3, +CMD_VEHICLE_4, +CMD_VEHICLE_5, +CMD_VEHICLE_6, +CMD_VEHICLE_7, +CMD_VEHICLE_8, +CMD_VEHICLE_9, +CMD_VEHICLE_10, +CMD_VEHICLE_11, +CMD_VEHICLE_12, + +CMD_SINGLE_UNITS, + +CMD_MP_CHANNEL_GLOBAL, +CMD_MP_CHANNEL_SIDE, +CMD_MP_CHANNEL_COMMAND, +CMD_MP_CHANNEL_GROUP, +CMD_MP_CHANNEL_VEHICLE, + +CMD_CONVERSATION, + +// Context sensitive commands +CMD_MOVE_AUTO, +CMD_STOP_AUTO, +CMD_WATCH_CTX, +CMD_GETIN_AUTO, +CMD_REARM_AUTO, +CMD_ATTACK_AUTO, +CMD_FIRE_AT_POSITION_AUTO, +CMD_SELECT_AUTO, +CMD_SELECT_AUTO_ADD, +CMD_DESELECT_AUTO, +CMD_JOIN_AUTO, +CMD_OPEN_FIRE_AUTO, +CMD_HOLD_FIRE_AUTO, +CMD_COMPLEX_COMMAND, +CMD_DISABLE_MINE, + +CMD_SELECT_UNIT_FROM_BAR, +CMD_DESELECT_UNIT_FROM_BAR, +CMD_SELECT_VEHICLE_FROM_BAR, +CMD_DESELECT_VEHICLE_FROM_BAR, +CMD_SELECT_TEAM_FROM_BAR, +CMD_DESELECT_TEAM_FROM_BAR, + +CMD_JOIN_ALL, + +CMD_SWITCH_TO_LEADER, +CMD_SWITCH_TO_SELECTED, + +CMD_NOTARGET, + +CMD_HC_SELECT_AUTO, +CMD_HC_SELECT_AUTO_ADD, +CMD_HC_DESELECT_AUTO, +CMD_HC_SELECT_UNIT_FROM_BAR, +CMD_HC_DESELECT_UNIT_FROM_BAR, +CMD_HC_SELECT_TEAM_FROM_BAR, +CMD_HC_DESELECT_TEAM_FROM_BAR, +CMD_OPENPARACHUTE, +CMD_TAKE_BACKPACK, +CMD_ASSEMBLE_WEAPON, +CMD_DISASSEMBLE_WEAPON, +CMD_ENGAGE_AUTO, +CMD_FIRE_AUTO, +CMD_FIRE_AT_POSITION_AMMO // same as CMD_FIRE_AT_POSITION_AUTO but with custom magazine +}; + +/// In-game UI hiding animation type +enum HideType +{ + HTNone, // no animation + HTFade, // fade in / fade out + HTMoveLeft, // move from / to the left + HTMoveRight // move from / to the right +}; + +enum +{ + SPTPlain, + SPTPercents +}; + +#endif + + +/*******************/ +/* Controls */ +/*******************/ + +// Control types +#define CT_STATIC 0 +#define CT_BUTTON 1 +#define CT_EDIT 2 +#define CT_SLIDER 3 +#define CT_COMBO 4 +#define CT_LISTBOX 5 +#define CT_TOOLBOX 6 +#define CT_CHECKBOXES 7 +#define CT_PROGRESS 8 +#define CT_HTML 9 +#define CT_STATIC_SKEW 10 +#define CT_ACTIVETEXT 11 +#define CT_TREE 12 +#define CT_STRUCTURED_TEXT 13 +#define CT_CONTEXT_MENU 14 +#define CT_CONTROLS_GROUP 15 +#define CT_SHORTCUTBUTTON 16 +#define CT_HITZONES 17 +#define CT_CONTROLS_TABLE 19 +#define CT_XKEYDESC 40 +#define CT_XBUTTON 41 +#define CT_XLISTBOX 42 +#define CT_XSLIDER 43 +#define CT_XCOMBO 44 +#define CT_ANIMATED_TEXTURE 45 +#define CT_OBJECT 80 +#define CT_OBJECT_ZOOM 81 +#define CT_OBJECT_CONTAINER 82 +#define CT_OBJECT_CONT_ANIM 83 +#define CT_LINEBREAK 98 +#define CT_USER 99 +#define CT_MAP 100 +#define CT_MAP_MAIN 101 +#define CT_LISTNBOX 102 +#define CT_ITEMSLOT 103 +#define CT_CHECKBOX 77 +#define CT_VEHICLE_DIRECTION 105 + +// Static styles +#define ST_POS 0x0F +#define ST_HPOS 0x03 +#define ST_VPOS 0x0C +#define ST_LEFT 0x00 +#define ST_RIGHT 0x01 +#define ST_CENTER 0x02 +#define ST_DOWN 0x04 +#define ST_UP 0x08 +#define ST_VCENTER 0x0C + +#define ST_TYPE 0xF0 +#define ST_SINGLE 0x00 +#define ST_MULTI 0x10 +#define ST_TITLE_BAR 0x20 +#define ST_PICTURE 0x30 +#define ST_FRAME 0x40 +#define ST_BACKGROUND 0x50 +#define ST_GROUP_BOX 0x60 +#define ST_GROUP_BOX2 0x70 +#define ST_HUD_BACKGROUND 0x80 +#define ST_TILE_PICTURE 0x90 +#define ST_WITH_RECT 0xA0 +#define ST_LINE 0xB0 +#define ST_UPPERCASE 0xC0 +#define ST_LOWERCASE 0xD0 + +#define ST_SHADOW 0x100 +#define ST_NO_RECT 0x200 +#define ST_KEEP_ASPECT_RATIO 0x800 + +#define ST_TITLE ST_TITLE_BAR + ST_CENTER + +// Slider styles +#define SL_DIR 0x400 +#define SL_VERT 0 +#define SL_HORZ 0x400 + +#define SL_TEXTURES 0x10 + +// progress bar +#define ST_VERTICAL 0x01 +#define ST_HORIZONTAL 0 + +// Listbox styles +#define LB_TEXTURES 0x10 +#define LB_MULTI 0x20 + +// Tree styles +#define TR_SHOWROOT 1 +#define TR_AUTOCOLLAPSE 2 + +// MessageBox styles +#define MB_BUTTON_OK 1 +#define MB_BUTTON_CANCEL 2 +#define MB_BUTTON_USER 4 +#define MB_ERROR_DIALOG 8 + +// Xbox buttons +#define KEY_XINPUT 0x00050000 + +#define KEY_XBOX_A KEY_XINPUT + 0 +#define KEY_XBOX_B KEY_XINPUT + 1 +#define KEY_XBOX_X KEY_XINPUT + 2 +#define KEY_XBOX_Y KEY_XINPUT + 3 +#define KEY_XBOX_Up KEY_XINPUT + 4 +#define KEY_XBOX_Down KEY_XINPUT + 5 +#define KEY_XBOX_Left KEY_XINPUT + 6 +#define KEY_XBOX_Right KEY_XINPUT + 7 +#define KEY_XBOX_Start KEY_XINPUT + 8 +#define KEY_XBOX_Back KEY_XINPUT + 9 +#define KEY_XBOX_LeftBumper KEY_XINPUT + 10 +#define KEY_XBOX_RightBumper KEY_XINPUT + 11 +#define KEY_XBOX_LeftTrigger KEY_XINPUT + 12 +#define KEY_XBOX_RightTrigger KEY_XINPUT + 13 +#define KEY_XBOX_LeftThumb KEY_XINPUT + 14 +#define KEY_XBOX_RightThumb KEY_XINPUT + 15 +#define KEY_XBOX_LeftThumbXRight KEY_XINPUT + 16 +#define KEY_XBOX_LeftThumbYUp KEY_XINPUT + 17 +#define KEY_XBOX_RightThumbXRight KEY_XINPUT + 18 +#define KEY_XBOX_RightThumbYUp KEY_XINPUT + 19 +#define KEY_XBOX_LeftThumbXLeft KEY_XINPUT + 20 +#define KEY_XBOX_LeftThumbYDown KEY_XINPUT + 21 +#define KEY_XBOX_RightThumbXLeft KEY_XINPUT + 22 +#define KEY_XBOX_RightThumbYDown KEY_XINPUT + 23 + +// Predefined controls +#define IDC_OK 1 +#define IDC_CANCEL 2 +#define IDC_AUTOCANCEL 3 +#define IDC_ABORT 4 +#define IDC_RESTART 5 +#define IDC_USER_BUTTON 6 +#define IDC_EXIT_TO_MAIN 7 + +// my own control window for tests +#define IDC_MY_FIRST_LISTBOX 110 +#define IDC_MY_FIRST_BUTTON 111 +#define IDC_MY_FIRST_SLIDER 112 + +#define IDC_MAP 51 +#define IDC_WEATHER 52 +#define IDC_POSITION 53 +#define IDC_TIME 54 +#define IDC_DATE 55 +#define IDC_BRIEFING 56 +#define IDC_MAP_NOTES 57 +#define IDC_MAP_PLAN 58 +#define IDC_MAP_TEAM_SWITCH 59 +#define IDC_MAP_GROUP 60 +//#define IDC_MAP_BRIEFING 61 +//#define IDC_MAP_DEBRIEFING 62 +#define IDC_RADIO_ALPHA 63 +#define IDC_RADIO_BRAVO 64 +#define IDC_RADIO_CHARLIE 65 +#define IDC_RADIO_DELTA 66 +#define IDC_RADIO_ECHO 67 +#define IDC_RADIO_FOXTROT 68 +#define IDC_RADIO_GOLF 69 +#define IDC_RADIO_HOTEL 70 +#define IDC_RADIO_INDIA 71 +#define IDC_RADIO_JULIET 72 +#define IDC_MAP_NAME 73 +#define IDC_WARRANT 74 +#define IDC_GPS 75 + +#define IDC_NOTEPAD_PICTURE 76 + +#define IDC_GPS_ALT 77 +#define IDC_GPS_HEADING 78 + +// - diary topics (used in multiple displays - diary, map, briefing, debriefing) +#define IDC_DIARY_TOPIC_MAP 80 +#define IDC_DIARY_TOPIC_1 81 +#define IDC_DIARY_TOPIC_2 82 +#define IDC_DIARY_TOPIC_3 83 +#define IDC_DIARY_TOPIC_4 84 +#define IDC_DIARY_TOPIC_5 85 +#define IDC_DIARY_TOPIC_6 86 +#define IDC_DIARY_TOPIC_7 87 +#define IDC_DIARY_TOPIC_8 88 +#define IDC_DIARY_TOPIC_9 89 + +#define IDC_HSLIDER 98 +#define IDC_VSLIDER 99 + +#define IDC_ARTILLERY_MAP 500 +#define IDC_ARTILLERY_MAP_FIRE 501 + +#define IDC_ARTILLERY_MAP_NAME 502 +#define IDC_ARTILLERY_MAP_ID 503 +#define IDC_ARTILLERY_MAP_GRID 504 +#define IDC_ARTILLERY_MAP_DIST 505 +#define IDC_ARTILLERY_MAP_MIN 506 +#define IDC_ARTILLERY_MAP_MAX 507 +#define IDC_ARTILLERY_MAP_DIR 508 +#define IDC_ARTILLERY_MAP_ALT 509 +#define IDC_ARTILLERY_MAP_MODE 510 +#define IDC_ARTILLERY_MAP_AMMO 511 +#define IDC_ARTILLERY_MAP_SHELLS 512 +#define IDC_ARTILLERY_MAP_SPREAD 513 +#define IDC_ARTILLERY_MAP_ETA 514 +#define IDC_ARTILLERY_MAP_AMMOCOUNT 515 +#define IDC_ARTILLERY_MAP_WARNING 516 +#define IDC_ARTILLERY_MAP_AIMABOVE 517 + +#define IDC_DIARY_TOPIC_LIST 1001 +#define IDC_DIARY_TOPIC_LISTINDEX 1002 +#define IDC_DIARY_TOPIC_HTML 1003 +#define IDC_DIARY_TOPIC_ADD_RECORD 1004 +#define IDC_DIARY_TOPIC_HTML_GROUP 1013 + +#define IDC_DIARY_PLAYER_NAME 111 +#define IDC_DIARY_MISSION_NAME 112 +#define IDC_DIARY_CURRENT_TASK 113 +#define IDC_DIARY_PLAYER_RANK 116 +//VON/chat muting in Diary +#define IDC_DIARY_PLAYERS_BUTTON 117 +#define IDC_DIARY_PLAYERS_SORT 118 +#define IDC_DIARY_MUTE_ALL 119 + +#define IDC_DIARY_TOPIC_BACKGROUND 1021 +#define IDC_DIARY_SUBTOPIC_BACKGROUND 1022 +#define IDC_DIARY_CONTENT_BACKGROUND 1023 + +//IDCs for marker color and icon. +//Are directly connected to RscMapControl, namely its idcMarkerColor and idcMarkerIcon parameters. +//Engine searches for the parameters in any display where RscMapControl is used, that's why they got more uncommon IDCs. +#define IDC_DIARY_MARKER_COLOR 1090 +#define IDC_DIARY_MARKER_ICON 1091 + + +// Instances of display +#define IDD_MAIN 0 +#define IDD_GAME 1 +#define IDD_SINGLE_MISSION 2 +#define IDD_OPTIONS 3 +#define IDD_CONFIGURE 4 +#define IDD_OPTIONS_VIDEO 5 +#define IDD_OPTIONS_AUDIO 6 +#define IDD_MULTIPLAYER 8 +#define IDD_LOAD_AAR 9 +#define IDD_MAIN_MAP 12 +#define IDD_SAVE 13 +#define IDD_END 14 +#define IDD_SERVER 17 +#define IDD_CLIENT 18 +#define IDD_IP_ADDRESS 19 +#define IDD_SERVER_SETUP 20 +#define IDD_CLIENT_SETUP 21 +#define IDD_CLIENT_WAIT 22 +#define IDD_CHAT 24 +#define IDD_CUSTOM_ARCADE 25 +#define IDD_ARCADE_MAP 26 +#define IDD_ARCADE_UNIT 27 +#define IDD_ARCADE_WAYPOINT 28 +#define IDD_TEMPLATE_SAVE 29 +#define IDD_TEMPLATE_LOAD 30 +#define IDD_LOGIN 31 +#define IDD_INTEL 32 +#define IDD_CAMPAIGN 33 +#define IDD_CREDITS 34 +#define IDD_INTEL_GETREADY 37 +#define IDD_ARCADE_GROUP 40 +#define IDD_ARCADE_SENSOR 41 +#define IDD_NEW_USER 42 +#define IDD_CAMPAIGN_LOAD 43 +#define IDD_ARCADE_EFFECTS 44 +#define IDD_ARCADE_MARKER 45 +#define IDD_MISSION 46 +#define IDD_INTRO 47 +#define IDD_OUTRO 48 +#define IDD_INTERRUPT 49 +#define IDD_DEBRIEFING 50 +#define IDD_SELECT_ISLAND 51 +#define IDD_SERVER_GET_READY 52 +#define IDD_CLIENT_GET_READY 53 +#define IDD_INSERT_MARKER 54 +#define IDD_VOICE_CHAT 55 +#define IDD_DEBUG 56 +#define IDD_HINTC 57 +#define IDD_MISSION_END 58 +#define IDD_SERVER_SIDE 59 +#define IDD_CLIENT_SIDE 60 +#define IDD_MULTIPLAYER_ROLE 61 +#define IDD_AWARD 62 +#define IDD_CHANNEL 63 +#define IDD_PASSWORD 64 +#define IDD_MP_PLAYERS 65 +#define IDD_REVERT 66 +#define IDD_PORT 69 +#define IDD_MP_SETUP 70 +#define IDD_FILTER 71 +#define IDD_HINTC_EX 72 +#define IDD_SELECT_PROFILE 73 +#define IDD_CAMPAIGN_SELECT 74 +#define IDD_PROFILE 75 +#define IDD_PROFILE_NAME 76 +#define IDD_PROFILE_FACE 77 +#define IDD_PROFILE_VOICE 78 +#define IDD_PROFILE_CONTROLLER 79 +#define IDD_PROFILE_AUDIO 80 +#define IDD_PROFILE_VIDEO 81 +#define IDD_PROFILE_LIVE 82 +#define IDD_MP_TYPE 83 +#define IDD_MP_PASSCODE 84 +#define IDD_OPTIMATCH_FILTER 86 +#define IDD_QUICKMATCH 87 +#define IDD_FRIENDS 88 +#define IDD_FRIENDS_OPTIONS 89 +#define IDD_XWIZARD_TEMPLATE 90 +#define IDD_XWIZARD_INTEL 91 +#define IDD_XWIZARD_NAME 92 +#define IDD_XWIZARD_ISLAND 93 +#define IDD_XWIZARD_WEATHER 94 +#define IDD_XWIZARD_TIME 95 +#define IDD_XWIZARD_UNIT 96 +#define IDD_XWIZARD_MAP 97 +#define IDD_XWIZARD_UNIT_SELECT 98 +#define IDD_XWIZARD_UNIT_SELECT_CUSTOM 99 +#define IDD_XWIZARD_WAYPOINT 100 +#define IDD_DOWNLOAD_CONTENT 101 +#define IDD_DOWNLOAD_CONTENT_DETAILS 102 +#define IDD_XPLAYERS 103 +#define IDD_XPLAYERS_ACTIONS 104 +#define IDD_XPLAYERS_FEEDBACK 105 +#define IDD_GEAR 106 +#define IDD_EQUIP 555 +#define IDD_DOWNLOAD_CONTENT_INSTALL 108 +#define IDD_SERVER_SETTINGS 109 +#define IDD_SERVER_ADVANCED 110 +#define IDD_SERVER_SELECT_PLAYER 112 +#define IDD_DEDICATED_SERVER 114 +#define IDD_FRIEND_MISSIONS 115 +#define IDD_LIVE_STATS 116 +#define IDD_LIVE_STATS_BOARD 117 +#define IDD_NETWORK_CONDITIONS 118 +#define IDD_SEND_VOICE_MAIL 119 +#define IDD_RECEIVE_VOICE_MAIL 120 +#define IDD_SELECT_ISLAND_NEW 351 + +#define IDD_EDIT_OBJECT 121 +#define IDD_MISSION_LOAD 122 +#define IDD_MISSION_SAVE 123 + +#define IDD_EDIT_DIARY_RECORD 125 + +#define IDD_SERVER_VOTED 126 +#define IDD_DEDICATED_SERVER_SETTINGS 127 + +#define IDD_MISSION_EDITOR 128 + +#define IDD_DIARY 129 + +#define IDD_TEAM_SWITCH 130 + +#define IDD_CONFIGURE_ACTION 131 + +#define IDD_HOST_SETTINGS 132 + +#define IDD_MINIMAP 133 +#define IDD_OVERLAY_CREATE 134 +#define IDD_OVERLAY_LOAD 135 + +#define IDD_ESRB 136 + +#define IDD_MISSION_EDITOR_REALTIME 137 + +//TODO: Has to be checked by Pete! +#define IDD_EDIT_BRIEFING 138 +#define IDD_LIVE 139 + +#define IDD_LASE 141 + +#define IDD_LAYER_LOAD 142 + +#define IDD_CONTROLS 143 +#define IDD_INTERRUPT_REVERT 144 + +#define IDD_PERFORMANCE 145 +#define IDD_XWIZARD_PARAMS 146 +#define IDD_XWIZARD_PARAMETER 147 + +#define IDD_CONFIGURE_JOYSTICKS 148 +#define IDD_CAPTURE 149 +#define IDD_CUSTOMIZE_CONTROLLER 150 +#define IDD_GAMEOPTIONS 151 + +//new editor dialog +#define IDD_ARCADE_MODULES 153 +#define IDD_SELECT_SAVE 154 +#define IDD_DSINTERFACE 155 +#define IDD_ADDON_ACTIONS 156 + +// PhysX debug window +#define IDD_PHYSX_DEBUG 157 + +// mod launcher dialog +#define IDD_MOD_LAUNCHER 157 +#define IDD_NEW_MOD 158 + +// joystick schemes mapping dialog +#define IDD_JOYSTICK_SCHEMES 159 + +//AV Terminal dialog - MUF +#define IDD_AV_TERMINAL 160 +//Field Manual +#define IDD_FIELD_MANUAL 162 +//Dialogue for controls scheme selection +#define IDD_CONTROLS_SCHEME 163 +//Dialogue for choosing layout of mission editor. NOTE: 161-163 are already in use, see A3\Ui_f\hpp\defineResincl.inc +#define IDD_EDITOR_LAYOUT 164 +//Dialogue for publishing mission on Steam. +#define IDD_PUBLISH_MISSION 165 +//Dialogue for selecting tags for mission on Steam. +#define IDD_PUBLISH_MISSION_TAGS 166 +//Dialogue for selecting file from the hard drive +#define IDD_FILE_SELECT_DIALOG 167 +//Idd reserved for debriefing 168 +#define IDD_DLC_VEHICLEMSGBOX 169 +#define IDD_DLC_PURCHASENOTIFICATION 170 +#define IDD_BOOTCAMPMSGBOX 171 +#define IDD_COMMUNITY_GUIDE 172 +#define IDD_SLING_LOAD_ASSISTANT 173 +#define IDD_DLC_CONTENTBROWSER 174 +#define IDD_MP_SCORE_TABLE 175 +#define IDD_CAMPAIGN_MP 176 +#define IDD_MP_QUICK_PLAY 177 +#define IDD_MP_SERVER_SEARCH 178 +#define IDD_MP_SERVER_FOUND 179 +#define IDD_KEYMAPMSGBOX 180 + +// MessageBoxes +#define IDD_MSG_DELETEPLAYER 200 +#define IDD_MSG_DELETEGAME 201 +#define IDD_MSG_CLEARTEMPLATE 202 +#define IDD_MSG_EXITTEMPLATE 203 +#define IDD_MSG_LAUNCHGAME 204 // ADDED IN PATCH 1.04 + +#define IDD_MSG_NEWACCOUNT 205 + +#define IDD_MSG_FRIENDS_REMOVE 206 +#define IDD_MSG_FRIENDS_BLOCK 207 +#define IDD_MSG_FRIENDS_INVITE 208 + +#define IDD_MSG_DELETEMISSION 209 + +#define IDD_MSG_XONLINE_CONNECTION_FAILED 210 +#define IDD_MSG_XONLINE_UPDATE_REQUIRED 211 +#define IDD_MSG_XONLINE_SERVER_BUSY 212 +#define IDD_MSG_XONLINE_REQUIRED_MSG 213 +#define IDD_MSG_XONLINE_RECOMMENDED_MSG 214 +#define IDD_MSG_XONLINE_INVALID_USER 215 +#define IDD_MSG_XONLINE_WRONG_PASSCODE 216 + +#define IDD_MSG_CANCEL_SUBSCRIPTION 217 +#define IDD_MSG_SUBSCRIBE 218 +#define IDD_MSG_PURCHASE 219 +#define IDD_MSG_INSTALL_ABORT 220 +#define IDD_MSG_INSTALL_RESULT 221 + +#define IDD_MSG_DECLINE_INVITATION 222 +#define IDD_MSG_REVOKE_INVITATION 223 +#define IDD_MSG_BLOCK_REQUEST 224 +#define IDD_MSG_DECLINE_REQUEST 225 +#define IDD_MSG_CANCEL_REQUEST 226 +#define IDD_MSG_KICK_OFF 227 +#define IDD_MSG_TERMINATE_SESSION 228 +#define IDD_MSG_NETWORK_CONDITIONS 229 + +#define IDD_MSG_STATS_NOT_UPLOADED 230 + +#define IDD_MSG_LOAD_FAILED 231 +#define IDD_MSG_DELETESAVE 232 + +#define IDD_MSG_DISK_FULL 233 + +#define IDD_MSG_RESTART_MISSION 234 +#define IDD_MSG_SAVE_MISSION 235 +#define IDD_MSG_SIGN_OUT 236 +#define IDD_MSG_LOAD_MISSION 237 +#define IDD_MSG_NEGATIVE_FEEDBACK 238 +#define IDD_MSG_PENDING_INVITATION 239 +#define IDD_MSG_HOST_SESSION 240 +#define IDD_MSG_ROLES_LOST 241 +#define IDD_MSG_ACCEPT_INVITATION 242 +#define IDD_MSG_MP_PLAYER_COUNT 243 +#define IDD_MSG_GAME_JOIN 244 +#define IDD_MSG_EDITOR_WIZARD_NONAME_MISSION 245 + +#define IDD_MSG_RESTART_NEEDED 246 + +// new editor +#define IDD_MSG_COMMIT_OVERLAY 247 +#define IDD_MSG_CLEAR_OVERLAY 248 +#define IDD_MSG_LOAD_OVERLAY 249 +#define IDD_MSG_EXIT_OVERLAY 250 +#define IDD_MSG_CREATE_OVERLAY 251 +#define IDD_MSG_CLOSE_OVERLAY 252 +#define IDD_MSG_LOAD_AAR 253 +#define IDD_MSG_CLEAR_MISSION 254 +#define IDD_MSG_RETRY_MISSION 255 +#define IDD_MSG_DELETE_DIARY_RECORD 256 + +// XBOX 360 profile and save messages +#define IDD_MSG_XBOX_NO_SIGN_IN 257 +#define IDD_MSG_XBOX_NO_STORAGE 258 +#define IDD_MSG_XBOX_STORAGE_CHANGED 259 +#define IDD_MSG_XBOX_SAVE_FAILED 260 +#define IDD_MSG_XBOX_NO_STORAGE_ON_INVITE 261 + +#define IDD_OPTIONS_AUDIO_ADJUST_MIC 262 + +//MUF-MessageBox for restarting mission editor during layout change +#define IDD_MSG_RESTART_EDITOR 263 + +#define IDD_PROGRESS_MESSAGE 264 + +//Message box for confirming deleting published mission +#define IDD_MSG_DELETE_STEAM_MISSION 265 +//Message box for confirming updating published mission +#define IDD_MSG_UPDATE_STEAM_MISSION 266 +//Message box for confirming saving current mission before the publish dialog is opened +#define IDD_MSG_SAVE_MISSION_BEFORE_PUBLISH 267 +//Message box for asking user to agree with Battleye licence. +#define IDD_MSG_BATTLEYE_LICENCE 268 +#define IDD_MSG_UPNP_ACTIVATION 269 +//#define IDD_MSG_ACCOUNT_LOGIN_GUIDE 270 - Reserved + +// InGameUI +#define IDD_UNITINFO 300 +#define IDD_HINT 301 +#define IDD_TASKHINT 302 +#define IDD_STANCEINFO 303 +#define IDD_AVCAMERA 304 +#define IDD_STAMINA_BAR 305 + +//Custom Info +#define IDD_CUSTOMINFO 310 +#define IDD_CUSTOMINFO_MINIMAP 311 +#define IDD_CUSTOMINFO_SLA 312 +#define IDD_CUSTOMINFO_CREW 313 +#define IDD_CUSTOMINFO_SENS 314 +#define IDD_CUSTOMINFO_FEEDUAV 315 +#define IDD_CUSTOMINFO_FEEDDRIVER 316 +#define IDD_CUSTOMINFO_FEEDPRIMARYGUNNER 317 +#define IDD_CUSTOMINFO_FEEDCOMMANDER 318 +#define IDD_CUSTOMINFO_FEEDMISSILE 319 +#define IDD_CUSTOMINFO_MINEDETECT 320 + + +// Futura ui +#define IDD_FUTURAGEAR 602 +// FUTURA GEAR controls +#define IDC_FG_PRIMARY 610 +#define IDC_FG_SECONDARY 611 +#define IDC_FG_HANDGUN 612 + +// prefix 620 means slot items +//--- +#define IDC_FG_MAP 6211 +#define IDC_FG_COMPASS 6212 +#define IDC_FG_WATCH 6213 +#define IDC_FG_RADIO 6214 +#define IDC_FG_GPS 6215 + +#define IDC_FG_GOGGLES 6216 +#define IDC_FG_HMD 6217 +#define IDC_FG_BINOC 6238 + +#define IDC_FG_BACKPACK2 6239 +#define IDC_FG_HEADGEAR 6240 + +// prefix 630 means slot container items(uniform, vest, backpack) +#define IDC_FG_UNIFORM_SLOT 6301 +#define IDC_FG_VEST_SLOT 6302 +#define IDC_FG_BACKPACK_SLOT 6303 +/// containers load +#define IDC_FG_UNIFORM_LOAD 6304 +#define IDC_FG_VEST_LOAD 6305 +#define IDC_FG_BACKPACK_LOAD 6306 +#define IDC_FG_GROUND_LOAD 6307 +#define IDC_FG_TOTAL_LOAD 6308 +//--- +#define IDC_FG_MAGAZINES 618 +// primary +#define IDC_FG_PW_MUZZLE 620 +#define IDC_FG_PW_OPTICS 621 +#define IDC_FG_PW_FLASHLIGHT 622 +#define IDC_FG_PW_MAGAZINE 623 +// secondary +#define IDC_FG_SW_MUZZLE 624 +#define IDC_FG_SW_OPTICS 625 +#define IDC_FG_SW_FLASHLIGHT 626 +#define IDC_FG_SW_MAGAZINE 627 +// handgun +#define IDC_FG_HG_MUZZLE 628 +#define IDC_FG_HG_OPTICS 629 +#define IDC_FG_HG_FLASHLIGHT 630 +#define IDC_FG_HG_MAGAZINE 631 + +#define IDC_FG_GROUND_ITEMS 632 +#define IDC_FG_CHOSEN_CONTAINER 640 +#define IDC_FG_PW_UNDERBARREL 641 +#define IDC_FG_SW_UNDERBARREL 642 +#define IDC_FG_HG_UNDERBARREL 643 +#define IDC_FG_PW_MAGAZINE_GL 644 +// #define IDC_FG_BACKPACK_ITEMS 633 +// #define IDC_FG_ITEMS 619 + +// new inventory + +// filter +#define IDC_FG_GROUND_FILTER 6554 + +// images which will painted over containers during DnD state +#define IDC_FG_GROUND_MARKER 6385 +#define IDC_FG_CONTAINER_MARKER 6325 +#define IDC_FG_CHOSEN_MARKER 6405 + +#define IDC_FG_VEST_CONTAINER 638 +#define IDC_FG_UNIFORM_CONTAINER 633 +#define IDC_FG_BACKPACK_CONTAINER 619 + +#define IDC_FG_VEST_TAB 6381 +#define IDC_FG_VEST_TEXT 6382 +#define IDC_FG_UNIFORM_TAB 6331 +#define IDC_FG_UNIFORM_TEXT 6332 +#define IDC_FG_BACKPACK_TAB 6191 +#define IDC_FG_BACKPACK_TEXT 6192 + +#define IDC_FG_CHOSEN_TAB 6401 +#define IDC_FG_CHOSEN_TEXT 6402 +#define IDC_FG_GROUND_TAB 6321 +#define IDC_FG_GROUND_TEXT 6322 +#define IDC_DLC_TEMPLATE_LOGO 100 +#define IDC_DLC_TEMPLATE_BACKGROUND 101 +/////////////// + +/// weight info +#define IDC_FG_GROUND_WEIGHT 634 +#define IDC_FG_BACKPACK_WEIGHT 635 +#define IDC_FG_ITEMS_WEIGHT 636 + +/// player info +#define IDC_FG_TOTAL_WEIGHT 637 +////// + +// Arcade Sites +#define IDD_ARCADE_SITE 700 + +#define IDC_AS_AZIMUT 701 +#define IDC_AS_AZIMUT_PICTURE 702 + +// ---- combos +#define IDC_AS_SIDE 703 +#define IDC_AS_FACTION 704 +#define IDC_AS_CLASS 705 +#define IDC_AS_SITETYPE 706 +#define IDC_AS_REPAIRABLE 707 +#define IDC_AS_FASTTRAVEL 708 +#define IDC_AS_STORAGE 709 +// ---- flags +#define IDC_AS_FLGEQUIP 710 +#define IDC_AS_FLGFOOD 711 +#define IDC_AS_FLGARMORED 712 +#define IDC_AS_FLGFUEL 713 +#define IDC_AS_FLGWEAPON 714 +// ---- strings +#define IDC_AS_NAME 715 +#define IDC_AS_DESC 716 +#define IDC_AS_INIT 717 +#define IDC_AS_CONDITION 718 +#define IDC_AS_RADIUS 719 +// ---- sliders +#define IDC_AS_HEALTH 720 +#define IDC_AS_MOOD 721 +#define IDC_AS_PRESENCE 722 + +#define IDC_AS_ARGUMENTS 733 +//////////////////////////////////////// + +// Virtual keyboard +#define IDC_VK_SHIFT 1001 +#define IDC_VK_CAPSLOCK 1002 +#define IDC_VK_SYMBOLS 1003 +#define IDC_VK_ACCENTS 1004 +#define IDC_VK_BACKSPACE 1005 +#define IDC_VK_LEFT 1006 +#define IDC_VK_RIGHT 1007 +#define IDC_VK_BASE 1010 + +// Main display controls +#define IDC_MAIN_GAME 101 +#define IDC_MAIN_OPTIONS 102 +#define IDC_MAIN_TRAINING 103 +#define IDC_MAIN_CUSTOM 104 +#define IDC_MAIN_MULTIPLAYER 105 +#define IDC_MAIN_QUIT 106 +#define IDC_MAIN_CREDITS 107 +#define IDC_MAIN_ARCADE 108 +#define IDC_MAIN_PLAYER 109 +#define IDC_MAIN_RANK 110 +#define IDC_MAIN_ISLAND 111 +#define IDC_MAIN_DATE 112 +#define IDC_MAIN_MISSION 113 +#define IDC_MAIN_CONTINUE 114 +#define IDC_MAIN_EDITOR 115 +#define IDC_MAIN_BOOK 116 +#define IDC_MAIN_SINGLE 117 +#define IDC_MAIN_VERSION 118 +#define IDC_MAIN_SINGLE_PROFILES 119 +#define IDC_MAIN_CAMPAIGN_PROFILES 120 +#define IDC_MAIN_MP_PROFILES 121 +#define IDC_MAIN_SETTINGS_PROFILES 122 +#define IDC_MAIN_SYSTEM_LINK 123 +#define IDC_MAIN_CUSTOM_PROFILES 124 +#define IDC_MAIN_SIGN_IN_STATUS 125 +#define IDC_MAIN_PLAYER_LABEL 126 +#define IDC_MAIN_PLAYER_NAME 127 +#define IDC_MAIN_CONTROLS 128 +#define IDC_MAIN_PLAYER_ID 129 +#define IDC_MAIN_PLAYER_COLOR 130 +#define IDC_MAIN_SERVICE_ID_LABEL 131 +#define IDC_MAIN_NICKNAME_LABEL 132 +#define IDC_MAIN_NICKNAME_BG 133 +#define IDC_MAIN_LOAD 134 +#define IDC_MAIN_SAVE 135 +#define IDC_MAIN_AAR 136 +#define IDC_MAIN_ACHIEVEMENTS 137 +#define IDC_MAIN_SINGLEPLAYER 138 +#define IDC_MAIN_MOD_LIST 139 +#define IDC_MAIN_MOD_LAUNCHER 140 +#define IDC_MAIN_MOD_ICONS 141 +#define IDC_SP_EDITOR 142 +#define IDC_MAIN_FIELD_MANUAL 143 +#define IDC_MAIN_DLC_ICONS 144 +#define IDC_MAIN_DLC_OWNED_ICONS 145 +#define IDC_MAIN_DLC_ICONS_BACK 146 +#define IDC_MAIN_MOD_ICONS_BACK 147 +#define IDC_MAIN_DLC_OWNED_ICONS_BACK 148 +#define IDC_MAIN_BOOTCAMP_CAMPAIGN 149 +#define IDC_MAIN_BOOTCAMP_SHOWCASES 150 +#define IDC_MAIN_BOOTCAMP_CHALLENGES 151 +#define IDC_MAIN_BOOTCAMP_VRTRAINING 152 +#define IDC_MAIN_QUICKPLAY 154 +#define IDC_MAIN_UNIT 155 + +#define IDC_MAIN_CARDAS_CUDL 199 // muj vlastni cudl + +#define IDC_MAIN_VIDEOCONTROL 3335 + +#define IDC_MAIN_TAB_LOGIN 9001 +#define IDC_MAIN_TAB_LIBRARY 9002 +#define IDC_MAIN_TAB_SINGLE 9003 +#define IDC_MAIN_TAB_MULTIPLAYER 9004 +#define IDC_MAIN_TAB_OPTIONS 9005 +#define IDC_MAIN_TAB_CONTROLS 9006 +#define IDC_MAIN_TAB_EDITOR 9007 +#define IDC_MAIN_TAB_QUIT 9008 +#define IDC_MAIN_TAB_AAR 9011 + +#define IDC_BUILD_VERSION 9009 +#define IDC_BUILD_DATE 9010 + +// Single player display controls +#define IDC_SP_TRAINING 101 +//#define IDC_SP_EDITOR 102 +#define IDC_SP_MISSION 103 +#define IDC_SP_CAMPAIGN 104 + +// Select profile display controls +#define IDC_PROFILES_LIST 101 +#define IDC_PROFILES_HEAD 102 +#define IDC_PROFILES_TITLE 103 +#define IDC_PROFILES_CONTROLLER 104 +#define IDC_PROFILES_DIFFICULTY 105 +#define IDC_PROFILES_MISSION 106 +#define IDC_PROFILES_LIVE 107 +#define IDC_PROFILES_MISSION_TEXT 108 +#define IDC_PROFILES_SIGN_IN_STATUS 109 +#define IDC_PROFILES_EDIT 110 +#define IDC_PROFILES_DELETE 111 + +// Edit profile display controls +#define IDC_PROFILE_NAME 101 +#define IDC_PROFILE_FACE 102 +#define IDC_PROFILE_VOICE 103 +#define IDC_PROFILE_CONTROLLER 104 +#define IDC_PROFILE_AUDIO 105 +#define IDC_PROFILE_VIDEO 106 +#define IDC_PROFILE_HEAD 108 +#define IDC_PROFILE_SUM_NAME 109 +#define IDC_PROFILE_SUM_CONTROLLER 110 +#define IDC_PROFILE_SUM_LIVE 111 +#define IDC_PROFILE_VOICE_MASK 112 +#define IDC_PROFILE_SIGN_IN_STATUS 113 +#define IDC_PROFILE_CREDITS 114 +#define IDC_PROFILE_STORAGE_DEVICE 115 + +// Edit profile name display controls +#define IDC_PROFILE_NAME_PREVIEW 101 + +// Edit profile face +#define IDC_PROF_FACE_FACE 101 +#define IDC_PROF_FACE_GLASSES 102 +#define IDC_PROF_FACE_HEAD 103 + +// Edit profile voice +#define IDC_PROF_VOICE_SPEAKER 101 +#define IDC_PROF_VOICE_PITCH_TITLE 102 +#define IDC_PROF_VOICE_PITCH_VALUE 103 +#define IDC_PROF_VOICE_PITCH 104 +#define IDC_PROF_VOICE_MASK 105 +#define IDC_PROF_VOICE_THROUGH_SPEAKERS 106 +#define IDC_PROF_VOICE_HEAD 107 +#define IDC_PROF_VOICE_DEFAULT 108 + +// Edit profile controller +#define IDC_PROF_CONTR_VEHICLE 101 +#define IDC_PROF_CONTR_TYPE 102 +#define IDC_PROF_CONTR_IMAGE 103 +#define IDC_PROF_CONTR_SCHEME 104 +#define IDC_PROF_CONTR_SENSITIVITY 105 +#define IDC_PROF_CONTR_A 200 +#define IDC_PROF_CONTR_B 201 +#define IDC_PROF_CONTR_Y 202 +#define IDC_PROF_CONTR_X 203 +#define IDC_PROF_CONTR_WHITE 204 +#define IDC_PROF_CONTR_BLACK 205 +#define IDC_PROF_CONTR_LEFT 206 +#define IDC_PROF_CONTR_RIGHT 207 +#define IDC_PROF_CONTR_UP 208 +#define IDC_PROF_CONTR_DOWN 209 +#define IDC_PROF_CONTR_BACK 210 +#define IDC_PROF_CONTR_START 211 +#define IDC_PROF_CONTR_LEFT_THUMB 212 +#define IDC_PROF_CONTR_LEFT_THUMB_MOVE_X 213 +#define IDC_PROF_CONTR_LEFT_THUMB_MOVE_Y 214 +#define IDC_PROF_CONTR_RIGHT_THUMB 215 +#define IDC_PROF_CONTR_RIGHT_THUMB_MOVE_X 216 +#define IDC_PROF_CONTR_RIGHT_THUMB_MOVE_Y 217 +#define IDC_PROF_CONTR_LEFT_TRIGGER 218 +#define IDC_PROF_CONTR_RIGHT_TRIGGER 219 +#define IDC_PROF_CONTR_LEFT_THUMB_MOVE 220 +#define IDC_PROF_CONTR_RIGHT_THUMB_MOVE 221 +#define IDC_PROF_CONTR_DPAD 222 +#define IDC_PROF_CONTR_NEXT_SCHEME 223 +#define IDC_PROF_CONTR_PREV_SCHEME 224 +#define IDC_PROF_CONTR_Y_AXIS 225 +#define IDC_PROF_CONTR_VIBRATIONS 226 + +// Controller buttons +// #define IDC_CONTROLLER_BUTTONS 101 + +// Edit profile audio options +#define IDC_PROF_AUDIO_MUSIC_TITLE 101 +#define IDC_PROF_AUDIO_MUSIC_VALUE 102 +#define IDC_PROF_AUDIO_MUSIC 103 +#define IDC_PROF_AUDIO_RADIO_TITLE 104 +#define IDC_PROF_AUDIO_RADIO_VALUE 105 +#define IDC_PROF_AUDIO_RADIO 106 +#define IDC_PROF_AUDIO_EFFECT_TITLE 107 +#define IDC_PROF_AUDIO_EFFECT_VALUE 108 +#define IDC_PROF_AUDIO_EFFECT 109 +#define IDC_PROF_AUDIO_DEFAULT 110 + +// Edit profile video options +#define IDC_PROF_VIDEO_BRIGHT 101 +#define IDC_PROF_VIDEO_BRIGHT_TITLE 102 +#define IDC_PROF_VIDEO_BRIGHT_VALUE 103 +#define IDC_PROF_VIDEO_GAMMA 104 +#define IDC_PROF_VIDEO_GAMMA_TITLE 105 +#define IDC_PROF_VIDEO_GAMMA_VALUE 106 +#define IDC_PROF_VIDEO_SUBTITLES 107 +#define IDC_PROF_VIDEO_RADIO 108 +#define IDC_PROF_VIDEO_DEFAULT 109 + +// Select profile an Xbox live account display controls +#define IDC_PROFILE_LIVE_ACCOUNTS 101 +#define IDC_PROFILE_LIVE_CREATE 102 + +// Select difficulty dialog +#define IDC_DIFF_LIST 108 +#define IDC_DIFF_DESC 102 + +// Single mission display controls +#define IDC_SINGLE_MISSION 101 +#define IDC_SINGLE_OVERVIEW 102 +#define IDC_SINGLE_MISSION_PAD 103 +#define IDC_SINGLE_DIFF 104 +#define IDC_SINGLE_LOAD 105 +#define IDC_SINGLE_TITLE 106 +#define IDC_SINGLE_DELETE 107 +#define IDC_SINGLE_COPY 108 +#define IDC_SINGLE_EDIT 109 +#define IDC_SINGLE_NAME 110 +#define IDC_SINGLE_AUTHOR 111 +#define IDC_SINGLE_PICTURE 112 +#define IDC_SINGLE_DESCRIPTION 113 +#define IDC_SINGLE_LOADING_PICTURE 114 +#define IDC_SINGLE_SHOW_MISSION_WORKSHOP 115 +#define IDC_SINGLE_SHOW_GAME_WORKSHOP 116 +#define IDC_SINGLE_SHOW_GAME_OR_MISSION_WORKSHOP 117 +#define IDC_SINGLE_MISSION_SORT_COMBO 118 +#define IDC_SINGLE_MISSION_SORT_ORDER 119 +#define IDC_SINGLE_MISSION_BUY_DLC 120 +#define IDC_SINGLE_MISSION_DLCSTRIPE 121 +#define IDC_SINGLE_MISSION_DLCICON 122 + +// Xbox style mission wizard +#define IDC_XWIZ_TEMPLATE 101 +#define IDC_XWIZ_TEMPLATE_OVERVIEW 102 + +#define IDC_XWIZ_NAME 101 +#define IDC_XWIZ_ISLAND 102 +#define IDC_XWIZ_WEATHER 103 +#define IDC_XWIZ_TIME 104 +#define IDC_XWIZ_SUM_NAME 105 +#define IDC_XWIZ_SUM_TIME 106 +#define IDC_XWIZ_SUM_TEMPLATE 107 +#define IDC_XWIZ_SUM_ISLAND 108 +#define IDC_XWIZ_SUM_WEATHER 109 +#define IDC_XWIZ_SUM_WEATHER_FORECAST 110 +#define IDC_XWIZ_UNIT 111 +#define IDC_XWIZ_MAP 112 +#define IDC_XWIZ_SUM_DATE 113 +#define IDC_XWIZ_PARAM 114 +#define IDC_XWIZ_SAVE 115 + +#define IDC_XWIZ_UNITS 101 +#define IDC_XWIZ_UNITS_OVERVIEW 102 + +#define IDC_XWIZ_PARAMS 101 +#define IDC_XWIZ_PARAMS_TITLES 102 +#define IDC_XWIZ_PARAMS_VALUES 103 +#define IDC_EDIT 104 +#define IDD_XWIZARD_PARAMETER_TITLE 105 + +#define IDC_XWIZ_UNIT_SELECT 101 +#define IDC_XWIZ_UNIT_SELECT_TITLE 102 + +#define IDC_XWIZ_UNIT_CLASS 101 +#define IDC_XWIZ_UNIT_TYPE 102 +#define IDC_XWIZ_UNIT_COUNT 103 +#define IDC_XWIZ_UNIT_SIDE 104 +#define IDC_XWIZ_UNIT_SELECT_CUSTOM_TITLE 105 + +#define IDC_XWIZ_WP_TYPE 101 +#define IDC_XWIZ_WP_BEHAVIOUR 102 +#define IDC_XWIZ_WP_FORMATION 103 +#define IDC_XWIZ_WP_COMBAT_MODE 104 + +#define IDC_XWIZ_ISLAND_LIST 101 +#define IDC_XWIZ_ISLAND_MAP 102 +#define IDC_XWIZ_ISLAND_SHOTS 103 + +#define IDC_XWIZ_WEATHER_TITLE 101 +#define IDC_XWIZ_WEATHER_VALUE 102 +#define IDC_XWIZ_WEATHER_FORECAST_TITLE 103 +#define IDC_XWIZ_WEATHER_FORECAST_VALUE 104 +#define IDC_XWIZ_FOG_TITLE 105 +#define IDC_XWIZ_FOG_VALUE 106 +#define IDC_XWIZ_FOG_FORECAST_TITLE 107 +#define IDC_XWIZ_FOG_FORECAST_VALUE 108 +#define IDC_XWIZ_VIEW_DISTANCE_TITLE 109 +#define IDC_XWIZ_VIEW_DISTANCE_VALUE 110 + +#define IDC_XWIZ_TIME_HOUR 101 +#define IDC_XWIZ_TIME_MINUTE 102 +#define IDC_XWIZ_TIME_DAY 103 +#define IDC_XWIZ_TIME_MONTH 104 +#define IDC_XWIZ_TIME_YEAR 105 + +#define IDC_XWIZ_MAP_POINTS 101 +#define IDC_XWIZ_MAP_DELETE 102 +#define IDC_XWIZ_MAP_EDIT 103 +#define IDC_XWIZ_MAP_INSERT_WP 104 +#define IDC_XWIZ_MAP_NOTEPAD 105 +#define IDC_XWIZ_MAP_MOVE 106 + +// Select campaign display +#define IDC_CAMPAIGNS_LIST 101 +#define IDC_CAMPAIGNS_CAMPAIGN 102 +#define IDC_CAMPAIGNS_DESCRIPTION 103 + +// Campaign display +#define IDC_CAMPAIGN_HISTORY 101 +#define IDC_CAMPAIGN_REPLAY 102 +#define IDC_CAMPAIGN_DIFF 103 +#define IDC_CAMPAIGN_NAME 104 +#define IDC_CAMPAIGN_AUTHOR 105 +#define IDC_CAMPAIGN_PICTURE 106 +#define IDC_CAMPAIGN_DESCRIPTION 107 +#define IDC_CAMPAIGN_TEXT_ESTDEPLOY 108 +#define IDC_CAMPAIGN_RELEASEDATE 109 +#define IDC_CAMPAIGN_BUY_DLC 110 +#define IDC_CAMPAIGN_DLCSTRIPE 111 +#define IDC_CAMPAIGN_DLCICON 112 + +// MP campaign display +#define IDC_CAMPAIGN_MP_LIST 101 +#define IDC_CAMPAIGN_MP_TITLE 102 +#define IDC_CAMPAIGN_MP_NAME 103 +#define IDC_CAMPAIGN_MP_AUTHOR 104 +#define IDC_CAMPAIGN_MP_PICTURE 105 +#define IDC_CAMPAIGN_MP_DESCRIPTION 106 +#define IDC_CAMPAIGN_MP_PLAY 107 +#define IDC_CAMPAIGN_MP_HOST 108 +#define IDC_CAMPAIGN_MP_JOIN 109 +#define IDC_CAMPAIGN_MP_BUY_DLC 110 + +// Revert display +#define IDC_REVERT_BOOK 101 +#define IDC_REVERT_TITLE 102 +#define IDC_REVERT_QUESTION 103 + +// Game display controls +#define IDC_GAME_SELECT 301 +#define IDC_SIDE_NAME 101 + +// Options display controls +#define IDC_OPTIONS_VIDEO 301 +#define IDC_OPTIONS_AUDIO 302 +#define IDC_OPTIONS_CONFIGURE 303 +#define IDC_OPTIONS_DIFFICULTY 304 +#define IDC_OPTIONS_NOTEBOOK 305 +#define IDC_OPTIONS_CREDITS 306 +#define IDC_OPTIONS_GAMEOPTIONS 307 + +#define IDC_OPTIONS_OBJECT_VISIBILITY_VALUE 308 +#define IDC_OPTIONS_OBJECT_VISIBILITY_SLIDER 309 +#define IDC_OPTIONS_VISIBILITY_TEXT 310 +#define IDC_OPTIONS_SHADOW_VISIBILITY_VALUE 311 +#define IDC_OPTIONS_SHADOW_VISIBILITY_SLIDER 312 +#define IDC_OPTIONS_SHADOW_VISIBILIT_TEXT 313 +#define IDC_OPTIONS_TRAFFIC_VISIBILITY_VALUE 314 +#define IDC_OPTIONS_TRAFFIC_VISIBILITY_SLIDER 315 + +#define IDC_OPTIONS_PIP_VALUE 334 +#define IDC_OPTIONS_SW_VALUE 335 +#define IDC_OPTIONS_FXAA_VALUE 336 +#define IDC_OPTIONS_WATER_SS_REFLECTIONS_VALUE 337 + +#define IDC_OPTIONS_QUALITY_VALUE 101 +#define IDC_OPTIONS_QUALITY_SLIDER 102 +#define IDC_OPTIONS_VISIBILITY_VALUE 103 +#define IDC_OPTIONS_VISIBILITY_SLIDER 104 + +#define IDC_OPTIONS_DRAWDISTANCE_VALUE 1336 +#define IDC_OPTIONS_DRAWDISTANCE_SLIDER 1337 + +#define IDC_OPTIONS_RATE_VALUE 105 +#define IDC_OPTIONS_RATE_SLIDER 106 +#define IDC_OPTIONS_TEXTURES_VALUE 107 +#define IDC_OPTIONS_TEXTURES_SLIDER 108 +#define IDC_OPTIONS_GAMMA_VALUE 109 +#define IDC_OPTIONS_GAMMA_SLIDER 110 +#define IDC_OPTIONS_BRIGHT_VALUE 111 +#define IDC_OPTIONS_BRIGHT_SLIDER 112 +#define IDC_OPTIONS_RESOLUTION 113 +#define IDC_OPTIONS_DISPLAY_MODE 1131 +#define IDC_OPTIONS_REFRESH 114 +#define IDC_OPTIONS_OBJSHADOWS 115 +//#define IDC_OPTIONS_VEHSHADOWS 116 +//#define IDC_OPTIONS_CLOUDLETS 117 +//#define IDC_OPTIONS_HWTL 118 +#define IDC_OPTIONS_BLOOD 119 +//#define IDC_OPTIONS_MULTITEXTURING 120 +#define IDC_OPTIONS_WBUFFER 121 +#define IDC_OPTIONS_BLOOD_TEXT 122 +#define IDC_OPTIONS_TERRAIN 123 +#define IDC_OPTIONS_LIFESTATE 199 +#define IDC_OPTIONS_TUTORIAL_HINTS 140 + +#define IDC_OBJECTS_DETAIL 124 +#define IDC_TEXTURE_DETAIL 125 +#define IDC_QUALITY_PREFERENCE 126 +#define IDC_SHADING_DETAIL 127 +#define IDC_SHADOW_DETAIL 128 + +#define IDC_OPTIONS_VIDEO_DEFAULT 129 +#define IDC_OPTIONS_VIDEO_AUTODETECT 1291 + +#define IDC_ANISO_DETAIL 130 +#define IDC_HDR_DETAIL 131 +#define IDC_POSTPROCESS_EFFECTS 132 +#define IDC_FSAA_DETAIL 133 +#define IDC_ASPECT_RATIO 134 +#define IDC_ATOC_DETAIL 1300 +#define IDC_PPAA_DETAIL 1301 + +#define IDC_OPTIONS_PP_SSAO 1310 +#define IDC_OPTIONS_PP_BLOOM_SLIDER 1311 +#define IDC_OPTIONS_PP_BLOOM_VALUE 1312 +#define IDC_OPTIONS_PP_ROTBLUR_SLIDER 1313 +#define IDC_OPTIONS_PP_ROTBLUR_VALUE 1314 +#define IDC_OPTIONS_PP_RADIALBLUR_SLIDER 1315 +#define IDC_OPTIONS_PP_RADIALBLUR_VALUE 1316 +#define IDC_OPTIONS_PP_DOF_SLIDER 1317 +#define IDC_OPTIONS_PP_DOF_VALUE 1318 +#define IDC_OPTIONS_PP_CAUSTICS 1319 +#define IDC_OPTIONS_PP_SHARPEN_SLIDER 1320 +#define IDC_OPTIONS_PP_SHARPEN_VALUE 1321 +#define IDC_OPTIONS_PP_COLOR_CORRECTIONS 1322 +#define IDC_OPTIONS_PP_BRIGHTNESS_SLIDER 1323 +#define IDC_OPTIONS_PP_BRIGHTNESS_VALUE 1324 +#define IDC_OPTIONS_PP_CONTRAST_SLIDER 1325 +#define IDC_OPTIONS_PP_CONTRAST_VALUE 1326 +#define IDC_OPTIONS_PP_SATURATION_SLIDER 1327 +#define IDC_OPTIONS_PP_SATURATION_VALUE 1328 + +#define IDC_OPTIONS_VIDEO_FPS_TEXT 1400 +#define IDC_OPTIONS_VIDEO_PERF_WARNING 1401 + + +#define IDC_OPTIONS_LANGUAGE 135 + +#define IDC_OPTIONS_IGUISIZE 136 +#define IDC_OPTIONS_IGUISIZE_LABEL 1014 +#define IDC_OPTIONS_IGUISIZE_TEXT 137 +#define IDC_OPTIONS_HEADBOB 138 + +#define IDC_VRAM_VALUE 139 + +#define IDC_VSYNC_VALUE 140 +#define IDC_OPTIONS_IMPERIALUNITS 141 +#define IDC_OPTIONS_VEHICLEFREELOOK 142 +#define IDC_OPTIONS_STREAM_FRIENDLY 143 +#define IDC_OPTIONS_ADAPTIVE_CROSSHAIR 144 +#define IDC_OPTIONS_INSTRUCTOR_FIGURE 145 +#define IDC_OPTIONS_ENABLE_RTD 146 +#define IDC_OPTIONS_ALLOW_FULL_RTD_HUD 147 +#define IDC_OPTIONS_ALLOW_ROUGH_LANDING_RTD 148 +#define IDC_OPTIONS_WIND_INFLUENCE_DYN_RTD 149 +#define IDC_OPTIONS_AUTO_TRIM_RTD 150 +#define IDC_OPTIONS_STRESS_DAMAGE_RTD 151 + +#define IDC_PARTICLES_EFFECTS 143 +#define IDC_OPTIONS_DYNAMIC_LIGHTS 144 + +#define IDC_OPTIONS_SLIDER_FILLRATE 1234 +#define IDC_OPTIONS_VALUE_FILLRATE 1236 + + +#define IDC_OPTIONS_MUSIC_VALUE 101 +#define IDC_OPTIONS_MUSIC_SLIDER 102 +#define IDC_OPTIONS_EFFECTS_VALUE 103 +#define IDC_OPTIONS_EFFECTS_SLIDER 104 +#define IDC_OPTIONS_VOICES_VALUE 105 +#define IDC_OPTIONS_VOICES_SLIDER 106 +#define IDC_OPTIONS_SAMPLING 107 +#define IDC_OPTIONS_HWACC 108 +#define IDC_OPTIONS_EAX 109 +#define IDC_OPTIONS_SINGLE_VOICE 110 +#define IDC_OPTIONS_AUDIO_DEFAULT 111 +#define IDC_OPTIONS_PLAYER_VOICE 112 +#define IDC_OPTIONS_VON_VALUE 113 +#define IDC_OPTIONS_VON_SLIDER 114 +#define IDC_OPTIONS_SAMPLES_VALUE 115 +#define IDC_OPTIONS_SAMPLES_SLIDER 116 +#define IDC_OPTIONS_MIC_SENS_SLIDER 117 +#define IDC_OPTIONS_MIC_ADJUST 118 + +// microphone adjustment +#define IDC_OPTIONS_MIC_PROGRESS_BAR 1001 +#define IDC_OPTIONS_MIC_PROGRESS 1002 + +#define IDC_OPTIONS_SUBTITLES 102 +#define IDC_OPTIONS_RADIO 103 + +#define IDC_DIFF_AI_LEVEL_TEXT 1510 +#define IDC_DIFF_AI_LEVEL 1511 +#define IDC_DIFF_AI_SKILL_LABEL 1512 +#define IDC_DIFF_AI_SKILL_SLIDER 1513 +#define IDC_DIFF_AI_SKILL_VALUE 1514 +#define IDC_DIFF_AI_PRECISION_LABEL 1515 +#define IDC_DIFF_AI_PRECISION_SLIDER 1516 +#define IDC_DIFF_AI_PRECISION_VALUE 1517 +#define IDC_DIFF_PICTURE 1518 +#define IDC_DIFF_DESCRIPTION 1519 +#define IDC_DIFF_OPTIONS_GROUP 1520 +#define IDC_DIFF_REDUCED_DAMAGE 1521 +#define IDC_DIFF_GROUP_INDICATORS 1522 +#define IDC_DIFF_FRIENDLY_TAG 1523 +#define IDC_DIFF_ENEMY_TAG 1524 +#define IDC_DIFF_MINES 1525 +#define IDC_DIFF_COMMANDS 1526 +#define IDC_DIFF_WAYPOINTS 1527 +#define IDC_DIFF_WEAPON_INFO 1528 +#define IDC_DIFF_STANCE_INDICATOR 1529 +#define IDC_DIFF_STAMINA_BAR 1530 +#define IDC_DIFF_CROSSHAIR 1531 +#define IDC_DIFF_VISION_AID 1532 +#define IDC_DIFF_THIRD_PERSON 1533 +#define IDC_DIFF_CAMERA_SHAKE 1534 +#define IDC_DIFF_SCORE_TABLE 1535 +#define IDC_DIFF_KILLED_BY 1536 +#define IDC_DIFF_VON_ID 1537 +#define IDC_DIFF_EXTENDED_MAP_FRIENDLY 1538 +#define IDC_DIFF_AUTO_REPORT 1539 +#define IDC_DIFF_MULTIPLE_SAVES 1540 +// #define IDC_DIFF_SQUAD_RADAR 1541 +#define IDC_DIFF_TACTICAL_PING 1542 +#define IDC_DIFF_EXTENDED_MAP_ENEMY 1543 +#define IDC_DIFF_EXTENDED_MAP_MINES 1544 +#define IDC_DIFF_MINIMAP_ALLOWED 1545 +#define IDC_DIFF_EXTENDED_MAP_PING 1546 + +// Configure display controls +#define IDC_CONFIG_DEFAULT 101 +#define IDC_CONFIG_KEYS 102 +#define IDC_CONFIG_XAXIS 103 +#define IDC_CONFIG_YAXIS 104 +#define IDC_CONFIG_YREVERSED 105 +#define IDC_CONFIG_JOYSTICK 106 +#define IDC_CONFIG_BUTTONS 107 +#define IDC_CONFIG_CONTROLS_PAGE 108 +#define IDC_CONFIG_FLOATING_ZONE 109 +#define IDC_CONFIG_MOUSE_FILTERING 110 +#define IDC_CONFIG_GEARBOX_MODE 112 +#define IDC_CONFIG_MOUSE_ACCELERATION 113 +#define IDC_CONFIG_KEY_PRESETS 114 + +// dialog for selecting default controls preset +#define IDC_CONFIG_DEFAULTCONTROLS_LIST 101 + +// Multiplayer type display controls +#define IDC_MP_TYPE_RANKED_MATCH 101 +#define IDC_MP_TYPE_PLAYER_MATCH 102 +#define IDC_MP_TYPE_SYSTEM_LINK 103 +#define IDC_MP_TYPE_FRIENDS 104 +#define IDC_MP_TYPE_DOWNLOAD 105 +#define IDC_MP_TYPE_INFO 106 +#define IDC_MP_TYPE_STATS 107 +#define IDC_MP_TYPE_SIGN_OUT 108 +#define IDC_MP_TYPE_DEDICATED_SERVER 109 +#define IDC_MP_TYPE_SERVER 110 +#define IDC_MP_TYPE_APPEAR_OFFLINE 111 + +// Xbox Live display controls +#define IDC_LIVE_QUICK_MATCH 101 +#define IDC_LIVE_CUSTOM_MATCH 102 +#define IDC_LIVE_CREATE_MATCH 103 + +// Friends dialog +#define IDC_FRIENDS_LIST 101 +#define IDC_FRIENDS_STATUS 102 + +// Friends options dialog +#define IDC_FRIENDS_PLAYER 101 +#define IDC_FRIENDS_GAME_INVITE 102 +#define IDC_FRIENDS_GAME_CANCEL 103 +#define IDC_FRIENDS_GAME_ACCEPT 104 +#define IDC_FRIENDS_GAME_DECLINE 105 +#define IDC_FRIENDS_GAME_JOIN 106 +#define IDC_FRIENDS_ACCEPT 107 +#define IDC_FRIENDS_DECLINE 108 +#define IDC_FRIENDS_STOP 109 +#define IDC_FRIENDS_CANCEL 110 +#define IDC_FRIENDS_REMOVE 111 +#define IDC_FRIENDS_VOICE 112 +#define IDC_FRIENDS_FEEDBACK 113 +#define IDC_FRIENDS_GAME_INVITE_VOICE 114 +#define IDC_FRIENDS_PLAY_MESSAGE 115 +#define IDC_FRIENDS_MISSIONS 152 +#define IDC_MULTI_BATTLEYE_FILTER 154 +#define IDC_MULTI_EXPANSIONS_FILTER 155 + +// Send voice mail dialog +#define IDC_SVM_TITLE 101 +#define IDC_SVM_PLAYER 102 +#define IDC_SVM_RECORD 103 +#define IDC_SVM_PLAY 104 +#define IDC_SVM_SEND 105 +#define IDC_SVM_PROGRESS 106 +#define IDC_SVM_TIME 107 + +// Receive voice mail dialog +#define IDC_RVM_TITLE 101 +#define IDC_RVM_PLAYER 102 +#define IDC_RVM_PLAY 103 +#define IDC_RVM_FEEDBACK 104 +#define IDC_RVM_PROGRESS 105 +#define IDC_RVM_TIME 106 + +// Xbox players dialog +#define IDC_XPLAYERS_LIST 101 +#define IDC_XPLAYERS_STATUS 102 +#define IDC_XPLAYERS_DISABLE_VOICE 103 +#define IDC_XPLAYERS_ENABLE_VOICE 104 +#define IDC_XPLAYERS_KICKOFF 105 + +// Xbox players options dialog +#define IDC_XPLAYERS_PLAYER 101 +#define IDC_XPLAYERS_ASK 102 +#define IDC_XPLAYERS_MUTE 103 +#define IDC_XPLAYERS_FEEDBACK 104 +#define IDC_XPLAYERS_CANCEL 105 +#define IDC_XPLAYERS_ASK_VOICE 107 + +// Feedback dialog +#define IDC_FEEDBACK_PLAYER 101 +#define IDC_FEEDBACK_DATE 102 +#define IDC_FEEDBACK_GREAT_SESSION 103 +#define IDC_FEEDBACK_GOOD_ATTITUDE 104 +#define IDC_FEEDBACK_BAD_NAME 105 +#define IDC_FEEDBACK_CURSING 106 +#define IDC_FEEDBACK_SCREAM 107 +#define IDC_FEEDBACK_CHEAT 108 +#define IDC_FEEDBACK_THREAT 109 +#define IDC_FEEDBACK_MSG_HARASSING 110 +#define IDC_FEEDBACK_MSG_OFFENSIVE 111 +#define IDC_FEEDBACK_MSG_SPAM 112 + +// Download content display controls +#define IDC_DOWNLOAD_CONTENT_LIST 101 + +#define IDC_DOWNLOAD_CONTENT_TITLE 101 +#define IDC_DOWNLOAD_CONTENT_TERMS 102 +#define IDC_DOWNLOAD_CONTENT_PICTURE 103 +#define IDC_DOWNLOAD_CONTENT_SHOW_PRICE 104 + +#define IDC_DOWNLOAD_CONTENT_PRICE_TITLE 101 +#define IDC_DOWNLOAD_CONTENT_PRICE 102 +#define IDC_DOWNLOAD_CONTENT_PRICE_QUESTION 103 + +#define IDC_INSTALL_CONTENT_PROGRESS 101 +#define IDC_INSTALL_CONTENT_NAME 102 +#define IDC_INSTALL_CONTENT_TIME 103 + +// Multiplayer passcode display controls +#define IDC_MP_PASSCODE_FIRST 101 + +// Multiplayer display controls +#define IDC_MULTI_TITLE 101 +#define IDC_MULTI_SESSIONS 102 +//#define IDC_MULTI_REMOTE 103 //Renamed to IDC_MULTI_TAB_DIRECT_CONNECT +//#define IDC_MULTI_NEW 104 //Renamed to IDC_MULTI_TAB_HOST_SERVER +#define IDC_MULTI_JOIN 105 +#define IDC_MULTI_NOTEBOOK 106 +#define IDC_MULTI_PASSWORD 107 +#define IDC_MULTI_PORT 108 +#define IDC_MULTI_SERVER_ICON 111 +#define IDC_MULTI_SERVER_COLUMN 112 +#define IDC_MULTI_MISSION_ICON 113 +#define IDC_MULTI_MISSION_COLUMN 114 +#define IDC_MULTI_STATE_ICON 115 +#define IDC_MULTI_STATE_COLUMN 116 +#define IDC_MULTI_PLAYERS_ICON 117 +#define IDC_MULTI_PLAYERS_COLUMN 118 +#define IDC_MULTI_PING_ICON 119 +#define IDC_MULTI_PING_COLUMN 120 +#define IDC_MULTI_PROGRESS 121 +#define IDC_MULTI_INTERNET 122 +#define IDC_MULTI_REFRESH 123 +#define IDC_MULTI_FILTER 124 +#define IDC_MULTI_SERVER_FILTER 125 +#define IDC_MULTI_MISSION_FILTER 126 +#define IDC_MULTI_PLAYERS_FILTER 127 +#define IDC_MULTI_PING_FILTER 128 +#define IDC_MP_HOST 129 +#define IDC_MP_TYPE 130 +#define IDC_MP_MISSION 131 +#define IDC_MP_ISLAND 132 +#define IDC_MP_STATE 133 +#define IDC_MP_TIMELEFT 134 +#define IDC_MP_SLOTS_PUBLIC 135 +#define IDC_MP_SLOTS_PRIVATE 136 +#define IDC_MP_NO_SESSION 137 +#define IDC_MP_DIFFICULTY 138 +#define IDC_MP_LANGUAGE 139 +#define IDC_MULTI_GAMETYPE_ICON 140 +#define IDC_MULTI_GAMETYPE_COLUMN 141 +#define IDC_MP_PING 142 +#define IDC_MP_PASSWORD 143 +#define IDC_MP_PLATFORM 144 +#define IDC_MP_COUNTRY 145 +#define IDC_MP_VERSION 146 +#define IDC_MP_VERSION_REQUIRED 147 +#define IDC_MP_MODS 148 +#define IDC_MP_PLAYERS_ROW 149 +#define IDC_MULTI_PASSWORDED_FILTER 150 +#define IDC_MULTI_FULL_FILTER 151 +#define IDC_MULTI_TYPE_FILTER 152 +#define IDC_MP_NEXT_SESSION 153 +#define IDC_MULTI_BATTLEYE_FILTER 154 +#define IDC_MULTI_EXPANSIONS_FILTER 155 +#define IDC_MULTI_FAVORITE_COLUMN 156 +#define IDC_MULTI_FAVORITE_ICON 157 +#define IDC_MULTI_SERVER_COUNT 158 +#define IDC_MULTI_TAB_INTERNET 159 +#define IDC_MULTI_TAB_RECENT 160 +#define IDC_MULTI_TAB_LAN 161 +#define IDC_MULTI_TAB_FRIENDS 162 +#define IDC_MULTI_TAB_OFFICIAL 163 //Changed 164 to 163 +#define IDC_MULTI_TAB_QUICK_PLAY 164 //IDC_MULTI_QUICK_PLAY renamed to IDC_MULTI_TAB_OFFICIAL, changed to 164 +#define IDC_MULTI_TAB_SERVERS 165 //IDC_MULTI_SERVERS renamed to IDC_MULTI_TAB_SERVERS, changed to 165 +#define IDC_MULTI_TAB_DIRECT_CONNECT 166 //IDC_MULTI_REMOTE 103 renamed and changed to IDC_MULTI_TAB_DIRECT_CONNECT +#define IDC_MULTI_TAB_HOST_SERVER 167 //IDC_MULTI_NEW 104 renamed and changed to IDC_MULTI_TAB_HOST_SERVER +#define IDC_MULTI_LAUNCHER 168 //Launcher button +#define IDC_MP_FILEPATCHING 169 + +//MP Quick Play dialogue +#define IDC_MP_QUICK_GAME_TYPE 110 +#define IDC_MP_QUICK_MAX_PING 111 +#define IDC_MP_QUICK_BEST_SERVER 112 +#define IDC_MP_QUICK_FIND_SERVER 113 +#define IDC_MP_QUICK_SHOW_SERVERS 114 +#define IDC_MP_QUICK_SHOW_SERVERS 114 +#define IDC_MP_QUICK_MODE_TITLE 115 +#define IDC_MP_QUICK_MODE_PICTURE 116 +#define IDC_MP_QUICK_MODE_DESCRIPTION 117 +#define IDC_MP_QUICK_MODE_BACKGROUND 118 + +//Server Search dialogue +#define IDC_MP_SERVER_SEARCH_STATUS 101 +#define IDC_MP_SERVER_SEARCH_PROGRESS 102 + +//Server Found dialogue +#define IDC_MP_SERVER_FOUND_COUNTDOWN 101 +#define IDC_MP_SERVER_FOUND_MISSION 102 +#define IDC_MP_SERVER_FOUND_GAME_TYPE 103 +#define IDC_MP_SERVER_FOUND_PLAYERS 104 +#define IDC_MP_SERVER_FOUND_BUTTON_NEXT 105 +#define IDC_MP_SERVER_FOUND_BUTTON_JOIN 106 + +#define IDC_OPTIMATCH_FILTER_SPEED 101 +#define IDC_OPTIMATCH_FILTER_TYPE 102 +#define IDC_OPTIMATCH_FILTER_MIN_PLAYERS 103 +#define IDC_OPTIMATCH_FILTER_MAX_PLAYERS 104 +#define IDC_OPTIMATCH_FILTER_LANGUAGE 105 +#define IDC_OPTIMATCH_FILTER_DIFFICULTY 106 + +#define IDC_PASSWORD 101 + +#define IDC_IP_ADDRESS 101 +#define IDC_IP_PORT 102 + +#define IDC_PORT_PORT 101 + +#define IDC_FILTER_SERVER 101 +#define IDC_FILTER_MISSION 102 +#define IDC_FILTER_MAXPING 103 +#define IDC_FILTER_MINPLAYERS 104 +#define IDC_FILTER_MAXPLAYERS 105 +#define IDC_FILTER_FULL 106 +#define IDC_FILTER_PASSWORDED 107 +#define IDC_FILTER_DEFAULT 108 +#define IDC_FILTER_TYPE 109 +#define IDC_FILTER_BATTLEYE 110 +#define IDC_FILTER_EXPANSIONS 111 +#define IDC_FILTER_MONETIZED 112 + +#define IDC_CLIENT_TEXT 101 +#define IDC_CLIENT_PLAYERS 102 +#define IDC_CLIENT_PROGRESS 103 + +#define IDC_SERVER_ISLAND 101 +#define IDC_SERVER_MISSION 102 +#define IDC_SERVER_EDITOR 103 +#define IDC_SERVER_DIFF 104 +#define IDC_SERVER_PLAYERS 105 +#define IDC_SERVER_GAMETYPE 106 +#define IDC_SERVER_SLOTS 107 +#define IDC_SERVER_SLOTS_PRIVATE 108 +#define IDC_SERVER_SLOTS_PUBLIC 109 +#define IDC_SERVER_MIN_PLAYERS 110 +#define IDC_SERVER_MAX_PLAYERS 111 +#define IDC_SERVER_SLOTS_PRIVATE_TITLE 112 +#define IDC_SERVER_SLOTS_PRIVATE_TEXT 112 +#define IDC_SERVER_SLOTS_PUBLIC_TITLE 113 +#define IDC_SERVER_SLOTS_PUBLIC_TEXT 113 +#define IDC_SERVER_SLOTS_PUBLIC_VALUE 114 +#define IDC_SERVER_SLOTS_PRIVATE_VALUE 115 +#define IDC_SERVER_VOTED_MISSIONS 116 +#define IDC_SERVER_PLAYERS_TITLE 117 +#define IDC_SERVER_TIMEOUT 118 +#define IDC_SERVER_VOTED_DIFFICULTY 119 +#define IDC_SERVER_DELETE 120 +#define IDC_SERVER_COPY 121 +#define IDC_SERVER_EDIT 122 +#define IDC_SERVER_LOAD 123 +#define IDC_SERVER_PRIVATE_SLOTS_TITLE 124 +#define IDC_SERVER_PRIVATE_SLOTS_VALUE 125 +#define IDC_SERVER_PRIVATE_SLOTS 126 +#define IDC_SERVER_MAXIMUM_SLOTS_TITLE 127 +#define IDC_SERVER_MAXIMUM_SLOTS 128 +#define IDC_SERVER_MAXIMUM_SLOTS_VALUE 129 +#define IDC_SERVER_MI_OVERVIEW 130 +#define IDC_SERVER_MI_GAMETYPE 131 +#define IDC_SERVER_MI_MAX_PLAYERS 132 +#define IDC_SERVER_MI_RESPAWN 133 +#define IDC_SERVER_MI_MIN_PLAYERS 134 +#define IDC_SERVER_SHOW_MISSION_WORKSHOP 135 +#define IDC_SERVER_SHOW_GAME_WORKSHOP 136 +#define IDC_SERVER_MI_NAME 137 +#define IDC_SERVER_MI_AUTHOR 138 +#define IDC_SERVER_MI_PICTURE 139 +#define IDC_SERVER_MI_DESCRIPTION 140 +#define IDC_SERVER_LOADING_PICTURE 141 +#define IDC_SERVER_GAME_OR_MISSION_WORKSHOP 142 +#define IDC_SERVER_ISLAND_TITLE 143 +#define IDC_SERVER_MISSION_TITLE 144 +#define IDC_SERVER_DIFF_INDICATOR 145 +#define IDC_SERVER_PURCHASE_BUTTON 146 + + +#define IDC_REQUIRED_BATTLEYE 201 + +// _VBS3 +#define IDC_AAR_SERVER 121 +#define IDC_AAR_SERVER_FILES 122 +#define IDC_AAR_DOWNLOADPROGRESS 123 +#define IDC_AAR_DOWNLOADSTART 124 +#define IDC_AAR_DOWNLOADSTOP 125 + +// Host settings dialog +#define IDC_HOST_NAME 101 +#define IDC_HOST_PASSWORD 102 +#define IDC_HOST_MAX_PLAYERS 103 +#define IDC_HOST_PRIVATE 104 +#define IDC_HOST_PORT 105 +#define IDC_HOST_PORT_WARNING 106 +#define IDC_HOST_UPNP 107 + +#define IDC_DED_SERVER_SLOTS_PUBLIC 101 +#define IDC_DED_SERVER_SLOTS_PUBLIC_TITLE 102 +#define IDC_DED_SERVER_SLOTS_PUBLIC_VALUE 103 +#define IDC_DED_SERVER_SLOTS_PRIVATE 104 +#define IDC_DED_SERVER_SLOTS_PRIVATE_TITLE 105 +#define IDC_DED_SERVER_SLOTS_PRIVATE_VALUE 106 + +#define IDC_WIZT_TEMPLATES 101 +#define IDC_WIZT_OVERVIEW 102 +#define IDC_WIZT_NAME 103 + +#define IDC_WIZM_EDIT 101 + +#define IDC_SRVSETUP_PLAYERS 101 +#define IDC_SRVSETUP_UNITS 102 +#define IDC_SRVSETUP_ISLAND 103 +#define IDC_SRVSETUP_NAME 104 +#define IDC_SRVSETUP_DESC 105 +#define IDC_SRVSETUP_ASSIGN 106 +#define IDC_SRVSETUP_UNASSIGN 107 +#define IDC_SRVSETUP_RANDOM 108 +#define IDC_SRVSETUP_PARAM1 109 +#define IDC_SRVSETUP_PARAM1_TEXT 110 +#define IDC_SRVSETUP_PARAM2 111 +#define IDC_SRVSETUP_PARAM2_TEXT 112 + +#define IDC_SRVSIDE_NAME 101 +#define IDC_SRVSIDE_ISLAND 102 +#define IDC_SRVSIDE_POOL 103 +#define IDC_SRVSIDE_WEST 104 +#define IDC_SRVSIDE_EAST 105 +#define IDC_SRVSIDE_RESIST 106 +#define IDC_SRVSIDE_CIVIL 107 +#define IDC_SRVSIDE_WEST_TEXT 108 +#define IDC_SRVSIDE_EAST_TEXT 109 +#define IDC_SRVSIDE_RESIST_TEXT 110 +#define IDC_SRVSIDE_CIVIL_TEXT 111 +#define IDC_SRVSIDE_DEFAULT 112 +#define IDC_SRVSIDE_PARAM1 113 +#define IDC_SRVSIDE_PARAM1_TEXT 114 +#define IDC_SRVSIDE_PARAM2 115 +#define IDC_SRVSIDE_PARAM2_TEXT 116 +#define IDC_SRVSIDE_PLAYERS 117 + +#define IDC_MPROLE_TITLE 101 +#define IDC_MPROLE_NAME 102 +#define IDC_MPROLE_ISLAND 103 +#define IDC_MPROLE_DESC 104 +#define IDC_MPROLE_POOL 105 +#define IDC_MPROLE_POOL_TEXT 106 +#define IDC_MPROLE_ROLES 107 +#define IDC_MPROLE_DEFAULT 108 +#define IDC_MPROLE_ENABLE 109 +#define IDC_MPROLE_SIDES 110 +#define IDC_MPROLE_ENABLE_ALL 111 + +#define IDC_CLIENT_GAME 101 + +#define IDC_CLIENTMAP_START1 101 +#define IDC_CLIENTMAP_START2 102 + +#define IDC_CLIENT_READY_PLAYERS 120 +#define IDC_CLIENT_READY_PLAYERS_TITLE 121 +#define IDC_CLIENT_READY_TIMEOUT 122 + +#define IDC_SERVER_READY_PLAYERS 120 +#define IDC_SERVER_READY_PLAYERS_TITLE 121 + +#define IDC_MP_PLAYERS 101 +#define IDC_MP_PL 102 +#define IDC_MP_PL_NAME 103 +#define IDC_MP_PL_MAIL 104 +#define IDC_MP_PL_ICQ 105 +#define IDC_MP_PL_REMARK 106 +#define IDC_MP_SQ 107 +#define IDC_MP_SQ_NAME 108 +#define IDC_MP_SQ_ID 109 +#define IDC_MP_SQ_MAIL 110 +#define IDC_MP_SQ_WEB 111 +#define IDC_MP_SQ_PICTURE 112 +#define IDC_MP_SQ_TITLE 113 +#define IDC_MP_KICKOFF 114 +#define IDC_MP_BAN 115 +#define IDC_MP_PL_MISSION 116 +#define IDC_MP_PL_ISLAND 117 +#define IDC_MP_PL_TIME 118 +#define IDC_MP_PL_MINPING 119 +#define IDC_MP_PL_AVGPING 120 +#define IDC_MP_PL_MAXPING 121 +#define IDC_MP_PL_MINBAND 122 +#define IDC_MP_PL_AVGBAND 123 +#define IDC_MP_PL_MAXBAND 124 +#define IDC_MP_PL_DESYNC 125 +#define IDC_MP_PL_REST 126 +#define IDC_MP_MUTE 127 + +#define IDC_CLIENT_WAIT_TITLE 130 // is used together with MP_PL + +#define IDC_MPSETUP_NAME 101 +#define IDC_MPSETUP_ISLAND 102 +#define IDC_MPSETUP_DESC 103 +#define IDC_MPSETUP_WEST 104 +#define IDC_MPSETUP_EAST 105 +#define IDC_MPSETUP_GUERRILA 106 +#define IDC_MPSETUP_CIVILIAN 107 +#define IDC_MPSETUP_ROLES_TITLE 108 +#define IDC_MPSETUP_ROLES 109 +#define IDC_MPSETUP_PARAM1_TITLE 110 +#define IDC_MPSETUP_PARAM1 111 +#define IDC_MPSETUP_PARAM2_TITLE 112 +#define IDC_MPSETUP_PARAM2 113 +#define IDC_MPSETUP_POOL 114 +#define IDC_MPSETUP_MESSAGE 115 +#define IDC_MPSETUP_KICK 116 +#define IDC_MPSETUP_ENABLE_ALL 117 +#define IDC_MPSETUP_LOCK 118 +#define IDC_MPSETUP_SIDE 119 +#define IDC_MPSETUP_POOL_TITLE 120 +#define IDC_MPSETUP_TIMEOUT 121 +#define IDC_MPSETUP_PLAYERS 122 +#define IDC_MPSETUP_FRIENDS 123 +#define IDC_MPSETUP_ADVANCED 124 +#define IDC_MPSETUP_GAMERCARD 125 +#define IDC_MPSETUP_PARTYGUI 126 +#define IDC_MPSETUP_ASSIGNROLE 127 +#define IDC_MPSETUP_PARAMS 128 +#define IDC_MPSETUP_DSINTERFACE 129 +#define IDC_MPSETUP_MISSION_WORKSHOP 130 +#define IDC_MPSETUP_LOGIC 131 +#define IDC_MPSETUP_VIRTUAL 132 +#define IDC_MPSETUP_PLAYERS_BUTTON 133 +#define IDC_MPSETUP_PLAYERS_SORT 134 +#define IDC_MPSETUP_PING_BUTTON 135 +#define IDC_MPSETUP_PING_SORT 136 +#define IDC_MPSETUP_MUTE_ALL 137 + +#define IDC_MPSETUP_MSG_MESSAGE 101 +#define IDC_MPSETUP_MSG_PROGRESS 102 +#define IDC_MPSETUP_MSG_TIME 103 + +#define IDC_PROGRESS_MSG_MESSAGE 101 +#define IDC_PROGRESS_MSG_PROGRESS 102 +#define IDC_PROGRESS_MSG_TIME 103 + +#define IDC_SERVER_SETTINGS_PARAM1_TEXT 101 +#define IDC_SERVER_SETTINGS_PARAM1 102 +#define IDC_SERVER_SETTINGS_PARAM2_TEXT 103 +#define IDC_SERVER_SETTINGS_PARAM2 104 +#define IDC_SERVER_SETTINGS_AI 105 +#define IDC_SERVER_SETTINGS_ASSIGN 106 + +#define IDC_SERVER_ADVANCED_ROLES 101 +#define IDC_SERVER_ADVANCED_DISABLE_ALL 102 +#define IDC_SERVER_ADVANCED_AUTOASSIGN 103 + +#define IDC_SERVER_SELECT_PLAYERS 101 + +// Main map display controls +#define IDC_MAP_WATCH 101 +#define IDC_MAP_COMPASS 102 +#define IDC_MAP_WALKIE_TALKIE 103 +#define IDC_MAP_NOTEPAD 104 +#define IDC_MAP_WARRANT 105 +#define IDC_MAP_GPS 106 +#define IDC_MAP_TEXTURES 107 +#define IDC_MAP_BRIEFING_SHOW 108 +#define IDC_MAP_BRIEFING_PAGE 109 +#define IDC_MAP_PREV_MARKER 110 +#define IDC_MAP_NEXT_MARKER 111 +#define IDC_MAP_GEAR 112 + +// Diary display controls +#define IDC_DIARY 101 +#define IDC_DIARY_INDEX 102 +#define IDC_DIARY_PAGE 103 +#define IDC_DIARY_ADD 104 + +// Select island display controls +#define IDC_SELECT_ISLAND 101 +#define IDC_SELECT_ISLAND_NOTEBOOK 102 +#define IDC_SELECT_ISLAND_WIZARD 103 +#define IDC_SELECT_ISLAND_EDITOR 104 +#define IDC_SELECT_ISLAND_EDITOR_OLD 105 +//Redefined in Eden +//IDC_SELECT_ISLAND_EDITOR_OLD 105 +//IDC_SELECT_ISLAND_3DEN 106 +#define IDC_SELECT_ISLAND_BUTTON_PURCHASE 107 + +// Custom arcade display controls +#define IDC_CUST_GAME 101 +#define IDC_CUST_PLAY 102 +#define IDC_CUST_EDIT 103 +#define IDC_CUST_DELETE 104 +#define IDC_CUST_EDIT_2 105 + +#define IDC_MISSION_PARAMS_LABEL 101 +#define IDC_MISSION_PARAMS_COMBO 102 + +#define IDC_ARCMAP_LOAD 101 +#define IDC_ARCMAP_SAVE 102 +#define IDC_ARCMAP_CLEAR 103 +#define IDC_ARCMAP_MODE 104 +#define IDC_ARCMAP_INTEL 105 +#define IDC_ARCMAP_MERGE 106 +#define IDC_ARCMAP_PREVIEW 107 +#define IDC_ARCMAP_CONTINUE 108 +#define IDC_ARCMAP_SECTION 109 +#define IDC_ARCMAP_IDS 111 +#define IDC_ARCMAP_TEXTURES 112 +#define IDC_ARCMAP_MISSION_NAME 113 +#define IDC_ARCMAP_MAP 114 +#define IDC_ARCMAP_BACKGROUND 115 +#define IDC_ARCMAP_LAYOUT 116 +#define IDC_ARCMAP_PUBLISH_MISSION 117 + +#define IDC_ARCUNIT_TITLE 101 +#define IDC_ARCUNIT_SIDE 102 +#define IDC_ARCUNIT_VEHICLE 103 +#define IDC_ARCUNIT_RANK 104 +#define IDC_ARCUNIT_CTRL 105 +#define IDC_ARCUNIT_CLASS 107 +#define IDC_ARCUNIT_HEALTH 108 +#define IDC_ARCUNIT_FUEL 109 +#define IDC_ARCUNIT_AMMO 110 +#define IDC_ARCUNIT_AZIMUT 111 +#define IDC_ARCUNIT_SPECIAL 112 +#define IDC_ARCUNIT_AGE 113 +#define IDC_ARCUNIT_AZIMUT_PICTURE 114 +#define IDC_ARCUNIT_PLACE 115 +#define IDC_ARCUNIT_PRESENCE 116 +#define IDC_ARCUNIT_PRESENCE_COND 117 +#define IDC_ARCUNIT_TEXT 118 +#define IDC_ARCUNIT_LOCK 119 +#define IDC_ARCUNIT_INIT 120 +#define IDC_ARCUNIT_SKILL 121 +#define IDC_ARCUNIT_DESC 122 +#define IDC_ARCUNIT_FACTION 123 +#define IDC_ARCUNIT_ELEVATION 124 +#define IDC_ARCUNIT_EQUIP 125 +#define IDC_ARCUNIT_RADIUS 126 +#define IDC_ARCUNIT_ARGUMENTS 127 +#define IDC_ARCUNIT_CATEGORY 128 +#define IDC_ARCUNIT_SETTINGS 2301 + +#define IDC_ARCGRP_SIDE 101 +#define IDC_ARCGRP_TYPE 102 +#define IDC_ARCGRP_NAME 103 +#define IDC_ARCGRP_AZIMUT 104 +#define IDC_ARCGRP_AZIMUT_PICTURE 105 +#define IDC_ARCGRP_FACTION 106 +#define IDC_ARCGRP_UNITS_LIST 107 + +#define IDC_ARCWP_TITLE 101 +#define IDC_ARCWP_TYPE 102 +#define IDC_ARCWP_SEQ 103 +#define IDC_ARCWP_DESC 104 +#define IDC_ARCWP_SEMAPHORE 105 +#define IDC_ARCWP_FORM 106 +#define IDC_ARCWP_SPEED 107 +#define IDC_ARCWP_COMBAT 108 +#define IDC_ARCWP_PLACE 109 +#define IDC_ARCWP_EFFECTS 110 +#define IDC_ARCWP_TIMEOUT_MIN 111 +#define IDC_ARCWP_TIMEOUT_MAX 112 +#define IDC_ARCWP_TIMEOUT_MID 113 +#define IDC_ARCWP_HOUSEPOS 114 +#define IDC_ARCWP_HOUSEPOSTEXT 115 +#define IDC_ARCWP_EXPACTIV 116 +#define IDC_ARCWP_SHOW 117 +#define IDC_ARCWP_EXPCOND 118 +#define IDC_ARCWP_SCRIPT 119 +#define IDC_ARCWP_PREC 120 +#define IDC_ARCWP_HEIGHT 121 +#define IDC_ARCWP_HEIGHTTEXT 122 +#define IDC_ARCWP_SCRIPTTEXT 123 +#define IDC_ARCWP_CATEGORY 124 + +#define IDC_ARCWP_ARGUMENTS 125 +#define IDC_ARCWP_ARGUMENTSTEXT 126 +#define IDC_ARCWP_NAME 127 + +#define IDC_ARCEFF_SOUND 103 +#define IDC_ARCEFF_VOICE 104 +#define IDC_ARCEFF_SOUND_ENV 105 +#define IDC_ARCEFF_SOUND_DET 106 +#define IDC_ARCEFF_MUSIC 107 +#define IDC_ARCEFF_TITTYPE 108 +#define IDC_ARCEFF_TITEFF 109 +#define IDC_ARCEFF_TITTEXT 110 +#define IDC_ARCEFF_TITRES 111 +#define IDC_ARCEFF_TITOBJ 112 +//#define IDC_ARCEFF_PLAYERONLY 113 +#define IDC_ARCEFF_CONDITION 113 +#define IDC_ARCEFF_TEXT_TITTEXT 114 + +#define IDC_ARCSENS_TITLE 101 +#define IDC_ARCSENS_A 102 +#define IDC_ARCSENS_B 103 +#define IDC_ARCSENS_ANGLE 104 +#define IDC_ARCSENS_ACTIV 105 +#define IDC_ARCSENS_PRESENCE 106 +#define IDC_ARCSENS_REPEATING 107 +#define IDC_ARCSENS_INTERRUPT 108 +#define IDC_ARCSENS_TIMEOUT_MIN 109 +#define IDC_ARCSENS_TIMEOUT_MAX 110 +#define IDC_ARCSENS_TIMEOUT_MID 111 +#define IDC_ARCSENS_TYPE 112 +#define IDC_ARCSENS_OBJECT 113 +#define IDC_ARCSENS_TEXT 114 +#define IDC_ARCSENS_AGE 115 +#define IDC_ARCSENS_EFFECTS 116 +#define IDC_ARCSENS_EXPCOND 117 +#define IDC_ARCSENS_EXPACTIV 118 +#define IDC_ARCSENS_EXPDESACTIV 119 +#define IDC_ARCSENS_RECT 120 +#define IDC_ARCSENS_NAME 121 + +#define IDC_ARCMARK_TITLE 101 +#define IDC_ARCMARK_NAME 102 +#define IDC_ARCMARK_MARKER 103 +#define IDC_ARCMARK_TYPE 104 +#define IDC_ARCMARK_COLOR 105 +#define IDC_ARCMARK_A 106 +#define IDC_ARCMARK_B 107 +#define IDC_ARCMARK_ANGLE 108 +#define IDC_ARCMARK_TYPE_TEXT 109 +#define IDC_ARCMARK_FILL 110 +#define IDC_ARCMARK_TEXT 111 + +#define IDC_INTEL_RESISTANCE 101 +#define IDC_INTEL_MONTH 102 +#define IDC_INTEL_DAY 103 +#define IDC_INTEL_HOUR 104 +#define IDC_INTEL_MINUTE 105 +#define IDC_INTEL_BRIEFING_NAME 106 +#define IDC_INTEL_BRIEFING_DESC 107 +#define IDC_INTEL_WEATHER 108 +#define IDC_INTEL_FOG 109 +#define IDC_INTEL_WEATHER_FORECAST 110 +#define IDC_INTEL_FOG_FORECAST 111 +#define IDC_INTEL_YEAR 112 +//added by MUF - new intel dialog-------------------------- +#define IDC_INTEL_WEATHER_TB 113 +#define IDC_INTEL_WEATHER_FORECAST_TB 114 + +#define IDC_INTEL_FOG_CB 115 +#define IDC_INTEL_FOG_TB 116 +#define IDC_INTEL_FOG_FORECAST_TB 117 + +#define IDC_INTEL_RAIN_CB 118 +#define IDC_INTEL_RAIN 119 +#define IDC_INTEL_RAIN_TB 120 +#define IDC_INTEL_RAIN_FORECAST 121 +#define IDC_INTEL_RAIN_FORECAST_TB 122 + +#define IDC_INTEL_LIGHTN_CB 123 +#define IDC_INTEL_LIGHTN 124 +#define IDC_INTEL_LIGHTN_TB 125 +#define IDC_INTEL_LIGHTN_FORECAST 126 +#define IDC_INTEL_LIGHTN_FORECAST_TB 127 + +#define IDC_INTEL_WAVES_CB 128 +#define IDC_INTEL_WAVES 129 +#define IDC_INTEL_WAVES_TB 130 +#define IDC_INTEL_WAVES_FORECAST 131 +#define IDC_INTEL_WAVES_FORECAST_TB 132 + +#define IDC_INTEL_WIND_CB 133 +#define IDC_INTEL_STRENGTH 134 +#define IDC_INTEL_STRENGTH_TB 135 +#define IDC_INTEL_STRENGTH_FORECAST 136 +#define IDC_INTEL_STRENGTH_FORECAST_TB 137 + +#define IDC_INTEL_GUSTS 138 +#define IDC_INTEL_GUSTS_TB 139 +#define IDC_INTEL_GUSTS_FORECAST 140 +#define IDC_INTEL_GUSTS_FORECAST_TB 141 + +#define IDC_INTEL_WINDDIR 142 +#define IDC_INTEL_WINDDIR_TB 143 +#define IDC_INTEL_WINDDIR_FORECAST 144 +#define IDC_INTEL_WINDDIR_FORECAST_TB 145 + +#define IDC_INTEL_CHNGTIME 146 +#define IDC_INTEL_CHNGTIME_HOUR_TB 147 +#define IDC_INTEL_CHNGTIME_MIN_TB 148 + +#define IDC_INTEL_CHNGTIME_HLEFT 149 +#define IDC_INTEL_CHNGTIME_HMIDDLE 150 +#define IDC_INTEL_CHNGTIME_HRIGHT 151 + +//added by MUF - new intel dialog-------------------------- + +// Dialog for choosing Editor's layout +#define IDC_LAYOUT_LIST 101 +#define IDC_LAYOUT_PICTURE 102 + +// Chat +#define IDC_CHANNEL 101 +#define IDC_CHANNEL_VOICE 102 +#define IDC_CHANNEL_MUTE_VON 103 +#define IDC_CHANNEL_MUTE_CHAT 104 + +#define IDC_CHAT 101 + +#define IDC_VOICE_CHAT 101 + +// Save / load template +#define IDC_TEMPL_NAME 101 +#define IDC_TEMPL_TITLE 102 +#define IDC_TEMPL_MODE 103 +#define IDC_TEMPL_ISLAND 104 + +// publish / update to Steam workshop +#define IDC_PUBLISH_STEAM_TITLE 101 +#define IDC_PUBLISH_STEAM_TAGS 102 +#define IDC_PUBLISH_STEAM_PICTURE 103 +#define IDC_PUBLISH_STEAM_DESCRIPTION 104 +#define IDC_PUBLISH_STEAM_MISSION_LIST 105 +#define IDC_PUBLISH_STEAM_VISIBILITY 106 +#define IDC_PUBLISH_STEAM_CHANGE_NOTES 107 +#define IDC_PUBLISH_STEAM_PREVIEW_FILE 108 +#define IDC_PUBLISH_CHECKBOX_LICENCE 109 +#define IDC_PUBLISH_TEXT_MISSION_SIZE 110 +#define IDC_PUBLISH_TEXT_QUOTA 111 +#define IDC_PUBLISH_BUTTON_PUBLISH 112 +#define IDC_PUBLISH_BUTTON_UPDATE 113 +#define IDC_PUBLISH_BUTTON_DELETE 114 +#define IDC_PUBLISH_BUTTON_EDIT_TAGS 115 +#define IDC_PUBLISH_BUTTON_WORKSHOP 116 +#define IDC_PUBLISH_BUTTON_WORKSHOP_LICENCE 117 +#define IDC_PUBLISH_BUTTON_SELECT_PREVIEW 118 +#define IDC_PUBLISH_BUTTON_DEFAULT_PREVIEW 119 +#define IDC_PUBLISH_STORAGE_SLIDER 120 +// group that is hidden when new mission is selected and shown when already uploaded mission is selected +#define IDC_PUBLISH_STEAM_HIDE_NEW_MISSION 121 +// group that is shown when new mission is selected and hidden when already uploaded mission is selected +#define IDC_PUBLISH_STEAM_SHOW_NEW_MISSION 122 + +// publish / update to Steam workshop - tags dialog +#define IDC_PUBLISH_STEAM_TAGS_AVAILABLE 101 +#define IDC_PUBLISH_STEAM_TAGS_SELECTED 102 +#define IDC_PUBLISH_STEAM_TAGS_ADD 103 +#define IDC_PUBLISH_STEAM_TAGS_REMOVE 104 +#define IDC_PUBLISH_STEAM_TAGS_NEXT 105 +#define IDC_PUBLISH_STEAM_TAGS_BACK 106 +#define IDC_PUBLISH_STEAM_TAGS_TITLE 107 + +// select file dialog +#define IDC_FILE_SELECT_PATH 101 +#define IDC_FILE_SELECT_DIR_TREE 102 +#define IDC_FILE_SELECT_FILE_LIST 103 +#define IDC_FILE_SELECT_PREVIEW 104 + + +//Login display +#define IDC_LOGIN_USER_LIST 101 +#define IDC_LOGIN_EDIT 102 +#define IDC_LOGIN_NEW_USER 103 +#define IDC_LOGIN_DELETE 104 +#define IDC_LOGIN_NAME 105 +#define IDC_LOGIN_FACE 106 +#define IDC_LOGIN_SPEAKER 107 +#define IDC_LOGIN_PITCH 108 +#define IDC_LOGIN_HEAD 109 +#define IDC_LOGIN_GLASSES 110 +#define IDC_LOGIN_ID 111 +#define IDC_LOGIN_SQUAD 112 +#define IDC_LOGIN_SQUAD_TEXT 113 +#define IDC_LOGIN_DISCARD 114 +#define IDC_LOGIN_TAB_AVATAR 115 +#define IDC_LOGIN_TAB_UNIT 116 +#define IDC_LOGIN_UNIT_SELECT 117 +#define IDC_LOGIN_UNIT_LOGO 118 +#define IDC_LOGIN_UNIT_NAME 119 +#define IDC_LOGIN_UNIT_MOTTO 120 +#define IDC_LOGIN_UNIT_DESCRIPTION 121 +#define IDC_LOGIN_ID_TEXT 122 +#define IDC_LOGIN_REFRESH 123 + +// Interrupt display +#define IDC_INT_OPTIONS 101 +#define IDC_INT_LOAD 102 +#define IDC_INT_SAVE 103 +#define IDC_INT_ABORT 104 +#define IDC_INT_RETRY 105 +#define IDC_INT_TITLE 106 +#define IDC_INT_SETTINGS 107 +#define IDC_INT_FRIENDS 108 +#define IDC_INT_PLAYERS 109 +#define IDC_INT_APPEAR_OFFLINE 110 +#define IDC_INT_MISSION 111 +#define IDC_INT_SIGN_IN_STATUS 112 +#define IDC_INT_EDIT_MAP 113 +#define IDC_INT_EDIT_3D 114 +#define IDC_INT_EDIT_PREVIEW 115 +#define IDC_INT_EDIT_REALTIME 116 +#define IDC_INT_RESTART 117 +#define IDC_INT_DIARY 118 +#define IDC_INT_REVERT 119 +#define IDC_INT_MISSIONNAME 120 +#define IDC_INT_TRAFFIC_LIGHT 121 +#define IDC_INT_FIELD_MANUAL 122 + +// Interrupt revert display +#define IDC_INT_REVERT_TYPE 101 + +// Select save display +#define IDC_SELECT_SAVE_SLOTS 101 + +// Mission end display +#define IDC_ME_SUBTITLE 101 +#define IDC_ME_QUOTATION 102 +#define IDC_ME_AUTHOR 103 +#define IDC_ME_RETRY 104 +#define IDC_ME_LOAD 105 +#define IDC_ME_RESTART 106 +#define IDC_ME_TEAM_SWITCH 107 + +// Get ready display +#define IDC_GETREADY_NAME 101 +#define IDC_GETREADY_DESC 102 +#define IDC_GETREADY_PRIMARY 105 +#define IDC_GETREADY_SECONDARY 106 +#define IDC_GETREADY_PLAYER 107 +#define IDC_GETREADY_DATE 108 +#define IDC_GETREADY_MODE 110 +#define IDC_GETREADY_PRIMARY_TEXT 111 +#define IDC_GETREADY_SECONDARY_TEXT 112 +#define IDC_GETREADY_EDITMODE 113 +#define IDC_GETREADY_TITLE 114 + +#define IDC_GEAR_UNIT 101 +#define IDC_GEAR_SKILL 102 +#define IDC_GEAR_VEHICLE 103 +#define IDC_GEAR_POOL 105 +#define IDC_GEAR_OVERVIEW 106 +#define IDC_GEAR_SLOT_PRIMARY 107 +#define IDC_GEAR_SLOT_SECONDARY 108 +#define IDC_GEAR_SLOT_ITEM1 109 +#define IDC_GEAR_SLOT_ITEM2 110 +#define IDC_GEAR_SLOT_ITEM3 111 +#define IDC_GEAR_SLOT_ITEM4 112 +#define IDC_GEAR_SLOT_ITEM5 113 +#define IDC_GEAR_SLOT_ITEM6 114 +#define IDC_GEAR_SLOT_ITEM7 115 +#define IDC_GEAR_SLOT_ITEM8 116 +#define IDC_GEAR_SLOT_ITEM9 117 +#define IDC_GEAR_SLOT_ITEM10 118 +#define IDC_GEAR_SLOT_ITEM11 119 +#define IDC_GEAR_SLOT_ITEM12 120 +#define IDC_GEAR_SLOT_HANDGUN 121 +#define IDC_GEAR_SLOT_HANGUN_ITEM1 122 +#define IDC_GEAR_SLOT_HANGUN_ITEM2 123 +#define IDC_GEAR_SLOT_HANGUN_ITEM3 124 +#define IDC_GEAR_SLOT_HANGUN_ITEM4 125 +#define IDC_GEAR_SLOT_HANGUN_ITEM5 126 +#define IDC_GEAR_SLOT_HANGUN_ITEM6 127 +#define IDC_GEAR_SLOT_HANGUN_ITEM7 128 +#define IDC_GEAR_SLOT_HANGUN_ITEM8 129 +#define IDC_GEAR_SLOT_SPECIAL1 130 +#define IDC_GEAR_SLOT_SPECIAL2 131 +#define IDC_GEAR_REARM 132 +#define IDC_GEAR_CONTINUE 133 +#define IDC_GEAR_SLOT_INVENTORY1 134 +#define IDC_GEAR_SLOT_INVENTORY2 135 +#define IDC_GEAR_SLOT_INVENTORY3 136 +#define IDC_GEAR_SLOT_INVENTORY4 137 +#define IDC_GEAR_SLOT_INVENTORY5 138 +#define IDC_GEAR_SLOT_INVENTORY6 139 +#define IDC_GEAR_SLOT_INVENTORY7 140 +#define IDC_GEAR_SLOT_INVENTORY8 141 +#define IDC_GEAR_SLOT_INVENTORY9 142 +#define IDC_GEAR_SLOT_INVENTORY10 143 +#define IDC_GEAR_SLOT_INVENTORY11 144 +#define IDC_GEAR_SLOT_INVENTORY12 145 + +#define IDC_GEAR_ADD_ITEM 146 +#define IDC_GEAR_REMOVE_ITEM 147 + +#define IDC_GEAR_FILTER 148 +#define IDC_GEAR_FILTER_ICON1 149 +#define IDC_GEAR_FILTER_ICON2 150 +#define IDC_GEAR_FILTER_ICON3 151 +#define IDC_GEAR_FILTER_ICON4 152 +#define IDC_GEAR_FILTER_ICON5 153 +#define IDC_GEAR_FILTER_ICON6 154 + +#define IDC_GEAR_POOL_GROUP 155 +#define IDC_GEAR_SOURCE_NAME 156 +#define IDC_GEAR_OPEN_BAG 157 +#define IDC_GEAR_CLOSE_BAG 158 +#define IDC_GEAR_ADD_DEFAULT 255 +#define IDC_GEAR_CLEAR_ALL 256 +#define IDC_BAG_ITEMS_GROUP 159 +#define IDC_UNIT_ITEMS_GROUP 160 + +#define IDC_GEAR_BAG_EMPTY 5000 +/* +#define IDC_GEAR_BAG_EMPTY_SLOT1 5000 +#define IDC_GEAR_BAG_EMPTY_SLOT2 5001 +#define IDC_GEAR_BAG_EMPTY_SLOT3 5002 +. +. +. +#define IDC_GEAR_BAG_EMPTY_SLOT499 5498 +#define IDC_GEAR_BAG_EMPTY_SLOT500 5499 +*/ +#define IDC_GEAR_BAG_FULL 5500 + +// Debriefing +/* +#define IDC_DEBRIEFING_LEFT 101 +#define IDC_DEBRIEFING_RIGHT 102 +*/ +#define IDC_DEBRIEFING_STAT 103 +#define IDC_DEBRIEFING_RESTART 104 +#define IDC_DEBRIEFING_PAD2 105 +#define IDC_DEBRIEFING_PLAYERS_TITLE_BG 106 +#define IDC_DEBRIEFING_PLAYERS_TITLE 107 +#define IDC_DEBRIEFING_PLAYERS_BG 108 +#define IDC_DEBRIEFING_PLAYERS 109 +#define IDC_DEBRIEFING_TIMEOUT 110 +#define IDC_DEBRIEFING_RESULT 111 +#define IDC_DEBRIEFING_TITLE 112 +#define IDC_DEBRIEFING_DEBRIEFING 113 +#define IDC_DEBRIEFING_OBJECTIVES 114 +#define IDC_DEBRIEFING_INFO 115 +#define IDC_DEBRIEFING_SHOW_PLAYERS 116 +#define IDC_DEBRIEFING_SHOW_PAGE2 117 +#define IDC_DEBRIEFING_LIVE_STATS 118 +#define IDC_DEBRIEFING_PREV_PAGE 119 +#define IDC_DEBRIEFING_NEXT_PAGE 120 +#define IDC_DEBRIEFING_LOAD 121 +#define IDC_DEBRIEFING_TEXT_GROUP 122 +#define IDC_DEBRIEFING_OBJECTIVES_GROUP 123 +#define IDC_DEBRIEFING_STATS_GROUP 124 +#define IDC_DEBRIEFING_MISSION_WORKSHOP 125 +#define IDC_DEBRIEFING_READY 126 +#define IDC_DEBRIEFING_DISCONNECT 127 + +// Debug display +#define IDC_DEBUG_EXP 101 +#define IDC_DEBUG_APPLY 102 +#define IDC_DEBUG_LOG 103 +#define IDC_DEBUG_SEARCH 161 +#define IDC_DEBUG_SEARCH_BUTTON 162 +#define IDC_DEBUG_HISTORY 163 + +#define IDC_DEBUG_EXP1 121 +#define IDC_DEBUG_EXP2 122 +#define IDC_DEBUG_EXP3 123 +#define IDC_DEBUG_EXP4 124 + +#define IDC_DEBUG_RES1 141 +#define IDC_DEBUG_RES2 142 +#define IDC_DEBUG_RES3 143 +#define IDC_DEBUG_RES4 144 + +#define IDC_DEBUG_CLEAR_LOG 151 +#define IDC_DEBUG_FILTER_EDIT 152 + +// Debug PhysX Display +#define IDC_PHYSX_DEBUG_DIAGMODE 101 +#define IDC_PHYSX_DEBUG_DIAGMODEDRAW 102 + +#define IDC_PHYSX_DEBUG_TERRAIN 103 +#define IDC_PHYSX_DEBUG_STATIC 104 +#define IDC_PHYSX_DEBUG_KINEMATIC 105 +#define IDC_PHYSX_DEBUG_DYNAMIC 106 + +#define IDC_PHYSX_DEBUG_CHECK_BUTTONS_START 109 +#define IDC_PHYSX_DEBUG_WORLD_AXES 110 +#define IDC_PHYSX_DEBUG_BODY_AXES 111 +#define IDC_PHYSX_DEBUG_BODY_MASS_AXES 112 +#define IDC_PHYSX_DEBUG_BODY_LIN_VELOCITY 113 +#define IDC_PHYSX_DEBUG_BODY_ANG_VELOCITY 114 +#define IDC_PHYSX_DEBUG_BODY_JOINT_GROUPS 115 +#define IDC_PHYSX_DEBUG_JOINT_LOCAL_AXES 116 +#define IDC_PHYSX_DEBUG_JOINT_WORLD_AXES 117 +#define IDC_PHYSX_DEBUG_JOINT_LIMITS 118 +#define IDC_PHYSX_DEBUG_CONTACT_POINT 119 +#define IDC_PHYSX_DEBUG_CONTACT_NORMAL 120 +#define IDC_PHYSX_DEBUG_CONTACT_ERROR 121 +#define IDC_PHYSX_DEBUG_CONTACT_FORCE 122 +#define IDC_PHYSX_DEBUG_ACTOR_AXES 123 +#define IDC_PHYSX_DEBUG_COLLISION_AABBS 124 +#define IDC_PHYSX_DEBUG_COLLISION_SHAPES 125 +#define IDC_PHYSX_DEBUG_COLLISION_AXES 126 +#define IDC_PHYSX_DEBUG_COLLISION_COMPOUNDS 127 +#define IDC_PHYSX_DEBUG_COLLISION_VNORMALS 128 +#define IDC_PHYSX_DEBUG_COLLISION_FNORMALS 129 +#define IDC_PHYSX_DEBUG_COLLISION_EDGES 130 +#define IDC_PHYSX_DEBUG_COLLISION_SPHERES 131 +#define IDC_PHYSX_DEBUG_COLLISION_STATIC 132 +#define IDC_PHYSX_DEBUG_COLLISION_DYNAMIC 133 +#define IDC_PHYSX_DEBUG_COLLISION_FREE 134 +#define IDC_PHYSX_DEBUG_COLLISION_CCD 135 +#define IDC_PHYSX_DEBUG_COLLISION_SKELETONS 136 +#define IDC_PHYSX_DEBUG_CHECK_BUTTONS_END 148 + +#define IDC_PHYSX3_DEBUG_CHECK_BUTTONS_START 149 +#define IDC_PHYSX3_DEBUG_WORLD_AXES 150 +#define IDC_PHYSX3_DEBUG_BODY_AXES 151 +#define IDC_PHYSX3_DEBUG_BODY_MASS_AXES 152 +#define IDC_PHYSX3_DEBUG_BODY_LIN_VELOCITY 153 +#define IDC_PHYSX3_DEBUG_BODY_ANG_VELOCITY 154 +#define IDC_PHYSX3_DEBUG_BODY_JOINT_GROUPS 155 +#define IDC_PHYSX3_DEBUG_CONTACT_POINT 156 +#define IDC_PHYSX3_DEBUG_CONTACT_NORMAL 157 +#define IDC_PHYSX3_DEBUG_CONTACT_ERROR 158 +#define IDC_PHYSX3_DEBUG_CONTACT_FORCE 159 +#define IDC_PHYSX3_DEBUG_ACTOR_AXES 160 +#define IDC_PHYSX3_DEBUG_COLLISION_AABBS 161 +#define IDC_PHYSX3_DEBUG_COLLISION_SHAPES 162 +#define IDC_PHYSX3_DEBUG_COLLISION_AXES 163 +#define IDC_PHYSX3_DEBUG_COLLISION_COMPOUNDS 164 +#define IDC_PHYSX3_DEBUG_COLLISION_FNORMALS 165 +#define IDC_PHYSX3_DEBUG_COLLISION_EDGES 166 +#define IDC_PHYSX3_DEBUG_COLLISION_STATIC 167 +#define IDC_PHYSX3_DEBUG_COLLISION_DYNAMIC 168 +#define IDC_PHYSX3_DEBUG_COLLISION_PAIRS 169 +#define IDC_PHYSX3_DEBUG_JOINT_LOCAL_AXES 170 +#define IDC_PHYSX3_DEBUG_JOINT_LIMITS 171 +#define IDC_PHYSX3_DEBUG_PARTICLE_SYSTEM_POSITION 172 +#define IDC_PHYSX3_DEBUG_PARTICLE_SYSTEM_VELOCITY 173 +#define IDC_PHYSX3_DEBUG_PARTICLE_SYSTEM_COLLISION_NORMAL 174 +#define IDC_PHYSX3_DEBUG_PARTICLE_SYSTEM_BOUNDS 175 +#define IDC_PHYSX3_DEBUG_PARTICLE_SYSTEM_GRID 176 +#define IDC_PHYSX3_DEBUG_PARTICLE_SYSTEM_BROADPHASE_BOUNDS 177 +#define IDC_PHYSX3_DEBUG_PARTICLE_SYSTEM_MAX_MOTION_DISTANCE 178 +#define IDC_PHYSX3_DEBUG_CHECK_BUTTONS_END 188 + +#define IDC_PHYSX_DEBUG_ALL 190 +#define IDC_PHYSX_DEBUG_NONE 191 +#define IDC_PHYSX_DEBUG_DIAGMODEPERF 192 +#define IDC_PHYSX_DEBUG_DIAGMODESTATS 193 + +#define IDC_PHYSX_DEBUG_USECONVEXSHAPES 194 +#define IDC_PHYSX_DEBUG_USEROADWAYS 195 +#define IDC_PHYSX_DEBUG_USEONECAPSULE 196 +#define IDC_PHYSX_DEBUG_IMMEDIATEFETCH 197 + +#define IDC_PHYSX_DEBUG_BASIC 198 + +// DS interface display +#define IDC_DSI_PLAYERLIST 101 +#define IDC_DSI_MISSONLIST 102 + +// HintC display +#define IDC_HINTC_BG 101 +#define IDC_HINTC_HINT 102 +#define IDC_HINTC_TITLE 103 +#define IDC_HINTC_CONTINUE 104 +#define IDC_HINTC_LINE1 105 +#define IDC_HINTC_LINE2 106 + +// Insert marker display +#define IDC_INSERT_MARKER 101 +#define IDC_INSERT_MARKER_PICTURE 102 +#define IDC_INSERT_MARKER_CHANNELS 103 + +// InGameUI +// - unit info +#define IDC_IGUI_TIME 101 +#define IDC_IGUI_DATE 102 +#define IDC_IGUI_NAME 103 +#define IDC_IGUI_UNIT 104 +#define IDC_IGUI_VALUE_EXP 106 +#define IDC_IGUI_COMBAT_MODE 107 +#define IDC_IGUI_VALUE_HEALTH 109 +#define IDC_IGUI_HITZONES 111 +#define IDC_IGUI_VALUE_FUEL 113 +#define IDC_IGUI_CARGO_MAN 114 +#define IDC_IGUI_CARGO_FUEL 115 +#define IDC_IGUI_CARGO_REPAIR 116 +#define IDC_IGUI_CARGO_AMMO 117 +#define IDC_IGUI_WEAPON 118 +#define IDC_IGUI_AMMO 119 +#define IDC_IGUI_VEHICLE 120 +#define IDC_IGUI_SPEED 121 +#define IDC_IGUI_ALT 122 +#define IDC_IGUI_FORMATION 123 +#define IDC_IGUI_BG 124 +#define IDC_IGUI_COMMANDER 125 +#define IDC_IGUI_DRIVER 126 +#define IDC_IGUI_GUNNER 127 + +#define IDC_IGUI_SPEED_FREEFALL 380 +#define IDC_IGUI_SPEED_VERTICAL_FREEFALL 381 +#define IDC_IGUI_ALT_FREEFALL 382 + +#define IDC_IGUI_ANALOGUE_HORIZON 383 +#define IDC_IGUI_ANALOGUE_SPEED_LADDER 384 +#define IDC_IGUI_ANALOGUE_ALT_LADDER 385 + +#define IDC_IGUI_OPTICS_GROUP 390 +#define IDC_IGUI_DRIVER_GROUP 391 +#define IDC_IGUI_DRIVER_OPTICS_GROUP 392 +#define IDC_IGUI_VEHICLE_PITCH 393 + + +//AV_Terminal +#define IDC_IGUI_AVT_NAME 100 +#define IDC_IGUI_AVT_TAKE_CONTROL 101 +#define IDC_IGUI_AVT_STATUS 102 +#define IDC_IGUI_AVT_TARGET 103 +#define IDC_IGUI_AVT_POSITION 104 +#define IDC_IGUI_AVT_PIP1 105 +#define IDC_IGUI_AVT_PIP2 106 +#define IDC_IGUI_AVT_COUNT 107 +#define IDC_IGUI_AVT_EDITOR_MENU 108 +#define IDC_IGUI_AVT_FUEL 109 +#define IDC_IGUI_AVT_WEAPON 110 +#define IDC_IGUI_AVT_AMMO 111 +#define IDC_IGUI_AVT_WEAPON_SEC 112 +#define IDC_IGUI_AVT_AMMO_SEC 113 +#define IDC_IGUI_AVT_TAKE_CONTROL_DRIVER 114 +#define IDC_IGUI_AVT_TAKE_CONTROL_GUNNER 115 +#define IDC_IGUI_AVT_AUTONOMOUS 116 +#define IDC_IGUI_AVT_COMBO 117 +#define IDC_IGUI_AVT_ALLOW_LIGHTS 118 + +//AV Camera +#define IDC_IGUI_AVC_PIP_DRIVER 100 +#define IDC_IGUI_AVC_PIP_GUNNER 101 +#define IDC_IGUI_AVC_PIP_SINGLE_VIEW 102 +#define IDC_IGUI_AVC_PIP_SOURCE 103 +#define IDC_IGUI_AVC_PIP_HEADING 104 +#define IDC_IGUI_AVC_PIP_MODE 105 + +//Sling Load Assistant +#define IDC_SLA_MAP 100 +#define IDC_SLA_HDIST 101 +#define IDC_SLA_VDIST 102 +#define IDC_SLA_STATUS 103 +#define IDC_SLA_LIFT_PROGRESS 104 +#define IDC_SLA_HEIGHT_BAR 105 +#define IDC_SLA_MAX_ALT 106 +#define IDC_SLA_VIEWPORT 107 + +//Sensors Display +#define IDC_SENS_VIEWPORT 101 +#define IDC_SENS_CIRCLES 102 +#define IDC_SENS_VEHICLE 103 +#define IDC_SENS_RANGE 104 +#define IDC_SENS_RADARON 105 +#define IDC_SENS_RADAROFF 106 +#define IDC_SENS_TARGET 107 +#define IDC_SENS_TARGETRANGE 108 +#define IDC_SENS_TARGETSPEED 109 +#define IDC_SENS_TARGETALT 110 +#define IDC_SENS_HEADING 111 + +//Mine detector Display +#define IDC_MINEDETECT_VIEWPORT 101 +#define IDC_MINEDETECT_CIRCLES 102 +#define IDC_MINEDETECT_VEHICLE 103 +#define IDC_MINEDETECT_RANGE 104 + +//Crew list +#define IDC_CREW_VEHICLE 101 +#define IDC_CREW_LIST 102 + +//MP Score Table +#define IDC_MP_SCORE_TABLE_TITLE 101 +#define IDC_MP_SCORE_TABLE_PLAYERS_LIST 102 +#define IDC_MP_SCORE_TABLE_SIDES_LIST 103 +#define IDC_MP_SCORE_TABLE_LINE_TEMPLATE 104 +#define IDC_MP_SCORE_TABLE_LINE_BACK 105 +#define IDC_MP_SCORE_TABLE_ORDER 106 +#define IDC_MP_SCORE_TABLE_PLAYERSNAME 107 +#define IDC_MP_SCORE_TABLE_KILLS_INF 108 +#define IDC_MP_SCORE_TABLE_KILLS_SOFT 109 +#define IDC_MP_SCORE_TABLE_KILLS_ARMOR 110 +#define IDC_MP_SCORE_TABLE_KILLS_AIR 111 +#define IDC_MP_SCORE_TABLE_KILLED 112 +#define IDC_MP_SCORE_TABLE_KILLSTOTAL 113 + +//Vehicle MessageBox +#define IDC_VEHICLEMSGBOX_BACKGROUND 100 +#define IDC_VEHICLEMSGBOX_LOGO 101 +#define IDC_VEHICLEMSGBOX_TEXT 102 +#define IDC_VEHICLEMSGBOX_PURCHASE 103 + +//Action Notification +#define IDC_DLC_ACTION_NOTIFICATION_GROUP 11406 +#define IDC_DLC_ACTION_NOTIFICATION_LOGO 100 +#define IDC_DLC_ACTION_NOTIFICATION_TEXT 101 +#define IDC_DLC_ACTION_NOTIFICATION_TITLE 102 + +//first aid icons +#define IDC_IGUI_BLEEDING0 401 +#define IDC_IGUI_BLEEDING1 402 +#define IDC_IGUI_INJURED_HEAD0 403 +#define IDC_IGUI_INJURED_HEAD1 404 +#define IDC_IGUI_INJURED_HANDS0 405 +#define IDC_IGUI_INJURED_HANDS1 406 +#define IDC_IGUI_INJURED_HANDS2 407 +#define IDC_IGUI_INJURED_LEGS0 408 +#define IDC_IGUI_INJURED_LEGS1 409 +#define IDC_IGUI_INJURED_LEGS2 410 +#define IDC_IGUI_BODY 411 +#define IDC_IGUI_VALUE_OXYGEN 412 +#define IDC_IGUI_BURNING 413 + +#define IDC_IGUI_ALT_WANTED 128 +#define IDC_IGUI_SPEED_WANTED 129 +#define IDC_IGUI_POSITION 130 +#define IDC_IGUI_OPTIC 131 + +// _VBS3 + #define IDC_IGUI_MAGAZINE 132 + #define IDC_IGUI_OVR_STATUS 133 + //TI + #define IDC_IGUI_TI_BACK 134 + #define IDC_IGUI_TI_MODE 135 + #define IDC_IGUI_TI_BRIGHTNESS_TXT 136 + #define IDC_IGUI_TI_BRIGHTNESS 137 + #define IDC_IGUI_TI_CONTRAST_TXT 138 + #define IDC_IGUI_TI_CONTRAST 139 + #define IDC_IGUI_TI_AUTO_CONTRAST 140 + + //LASE + #define IDC_IGLR_RANGE 141 + #define IDC_IGLR_BG 142 + #define IDC_IGLR_RANGE_NUM 143 + + //AVRS + #define IDC_IGUI_NICK 144 + #define IDC_IGUI_NICK_VAL 145 + #define IDC_IGUI_BANK 146 + #define IDC_IGUI_BANK_VAL 147 +// !_VBS3 +#define IDC_IGUI_HEADING 148 + +// !new arrowhead +#define IDC_IGUI_WEAPON_MODE 149 +#define IDC_IGUI_WEAPON_GUNNER 150 +#define IDC_IGUI_COUNTER_MEASURES_AMMO 151 +#define IDC_IGUI_COUNTER_MEASURES_MODE 152 + +#define IDC_IGUI_RADARRANGE 153 +#define IDC_IGUI_VALUE_RELOAD 154 +#define IDC_IGUI_WEAPON_AMMO 155 + +// New Arma 3 +#define IDC_IGUI_STANCE_INDICATOR 188 +#define IDC_IGUI_GPS_PLAYER 189 +#define IDC_IGUI_SPEED2 190 +#define IDC_IGUI_ALT2 191 +#define IDC_IGUI_PILOT_OPTIC_ZOOM 192 +#define IDC_IGUI_STAMINA_BAR 193 + +// weapon/turret info controls +#define IDC_IGUI_WEAPON_DISTANCE 151 +#define IDC_IGUI_WEAPON_VISION_MODE 152 +#define IDC_IGUI_WEAPON_FLIR_MODE 153 +#define IDC_IGUI_WEAPON_FOV_MODE 154 +#define IDC_IGUI_WEAPON_COMPASS 155 +#define IDC_IGUI_WEAPON_HEADING 156 +#define IDC_IGUI_WEAPON_AUTOHOVER 157 +#define IDC_IGUI_WEAPON_LASER_MARKER_ON 158 +#define IDC_IGUI_WEAPON_BALL_ENABLED 159 +#define IDC_IGUI_WEAPON_JAVELIN_DAY 160 +#define IDC_IGUI_WEAPON_JAVELIN_FLTR 161 +#define IDC_IGUI_WEAPON_JAVELIN_NFOV 162 +#define IDC_IGUI_WEAPON_JAVELIN_WFOV 163 +#define IDC_IGUI_WEAPON_BALL_RANGE 164 +#define IDC_IGUI_WEAPON_BALISTIC_COMP 165 +#define IDC_IGUI_WEAPON_JAVELIN_SEEK 166 +#define IDC_IGUI_WEAPON_JAVELIN_MISSLE 167 +#define IDC_IGUI_WEAPON_ELEVATION 168 +#define IDC_IGUI_WEAPON_ELEVATION_TEXT 169 +#define IDC_IGUI_WEAPON_STATIC_ITEMS 170 +#define IDC_IGUI_WEAPON_GPS_PLAYER 171 +#define IDC_IGUI_WEAPON_GPS_TARGET 172 +#define IDC_IGUI_WEAPON_ARTI_DIST 173 +#define IDC_IGUI_WEAPON_ARTI_TIME 174 +#define IDC_IGUI_WEAPON_ARTI_ELEV 175 +#define IDC_IGUI_WEAPON_ARTI_ELEV_NEED 176 +#define IDC_IGUI_WEAPON_ARTI_OUT_RANGE 177 +#define IDC_IGUI_WEAPON_ARTI_AUTO_ELEV 178 +#define IDC_IGUI_WEAPON_VISION_MODE2 179 +#define IDC_IGUI_WEAPON_OPTICS_ZOOM 180 +#define IDC_IGUI_WEAPON_TARGET_UNIT 181 +#define IDC_IGUI_WEAPON_OPTICS_PITCH 182 +#define IDC_IGUI_WEAPON_DISTANCE2 183 + +// unit info (to preserve order) - new A3 +#define IDC_IGUI_AMMOCOUNT 184 +#define IDC_IGUI_MAGCOUNT 185 + +#define IDC_IGUI_DEPTH 186 +#define IDC_IGUI_WEAPON_MODE_TEXTURE 187 +#define IDC_IGUI_WEAPON_SPEED 188 +#define IDC_IGUI_WEAPON_ALT 189 +#define IDC_IGUI_WEAPON_TIME 190 + +#define IDC_IGUI_WEAPON_CAM_TRACK_AREA 194 +#define IDC_IGUI_WEAPON_CAM_TRACK_TARGET 195 + +#define IDC_IGUI_WEAPON_JAVELIN_ATTACK_FROM_TOP 196 +#define IDC_IGUI_WEAPON_JAVELIN_ATTACK_DIRECT 197 + +#define IDC_IGUI_WEAPON_LASED_DISTANCE 198 +#define IDC_IGUI_WEAPON_LASED_SPEED 199 +#define IDC_IGUI_WEAPON_LASED_VALID 200 +#define IDC_IGUI_WEAPON_LASED_ERR_LEAD 201 +#define IDC_IGUI_WEAPON_LASED_ERR_ELEV 202 +#define IDC_IGUI_WEAPON_LASED_ERR_OBJECT 203 +#define IDC_IGUI_WEAPON_LASER_ZEROING_DELAY 204 + +#define IDC_IGUI_THROTTLE 205 +#define IDC_IGUI_VEHICLE_DIRECTION 206 +#define IDC_IGUI_VEHICLE_DIRECTION2 207 + + + + + +// helicopter unit info +#define IDC_IGUI_GMETER 501 +#define IDC_IGUI_RADARALTIMETER 505 +#define IDC_IGUI_RADARALTIMETER_BAR 506 +#define IDC_IGUI_RADARALTIMETER_VALUE 507 +#define IDC_IGUI_TORQUE 510 +#define IDC_IGUI_WINDINDICATOR 515 +#define IDC_IGUI_WINDINDICATOR_TEXT 516 +#define IDC_IGUI_WINDINDICATOR_IMAGE 517 +#define IDC_IGUI_STABILITYINDICATOR 520 +#define IDC_IGUI_STABILITYINDICATOR_AXIS 521 +#define IDC_IGUI_STABILITYINDICATOR_OFFSET 522 +#define IDC_IGUI_COLLECTIVE 525 +#define IDC_IGUI_AIRSPEEDINDICATOR 530 +#define IDC_IGUI_AIRSPEEDINDICATOR_AXIS 531 +#define IDC_IGUI_AIRSPEEDINDICATOR_VALUE 532 +#define IDC_IGUI_ALTIMETER 535 +#define IDC_IGUI_ALTIMETER_AXIS 536 +#define IDC_IGUI_ALTIMETER_VALUE 537 +#define IDC_IGUI_ATTITUDEINDICATOR 540 +#define IDC_IGUI_ATTITUDEINDICATOR_LITE 541 +#define IDC_IGUI_TRIMINDICATOR 545 +#define IDC_IGUI_AUTOHOVERNDICATOR 546 +#define IDC_IGUI_HELIHUD_MISCELLANEOUS 550 + +// helicopter Analogue unit info +#define IDC_IGUI_ANALOGUE_SPEED 601 +#define IDC_IGUI_ANALOGUE_SPEED_NEEDLE 602 +#define IDC_IGUI_ANALOGUE_SPEED_MIN 603 +#define IDC_IGUI_ANALOGUE_SPEED_MAX 604 +#define IDC_IGUI_ANALOGUE_SPEED_TEXT 605 +#define IDC_IGUI_ANALOGUE_SPEED_IMPERIAL 606 +#define IDC_IGUI_ANALOGUE_SPEED_METRIC 607 + +#define IDC_IGUI_ANALOGUE_ALTITUDE 611 +#define IDC_IGUI_ANALOGUE_ALTITUDE_NEEDLE 612 +#define IDC_IGUI_ANALOGUE_ALTITUDE_MIN 613 +#define IDC_IGUI_ANALOGUE_ALTITUDE_MAX 614 +#define IDC_IGUI_ANALOGUE_ALTITUDE_TEXT 615 +#define IDC_IGUI_ANALOGUE_ALTITUDE_IMPERIAL 616 +#define IDC_IGUI_ANALOGUE_ALTITUDE_METRIC 617 + +#define IDC_IGUI_ANALOGUE_ATTITUDE 621 +#define IDC_IGUI_ANALOGUE_ATTITUDE_HORIZON 622 +#define IDC_IGUI_ANALOGUE_ATTITUDE_VALUE 623 + +#define IDC_IGUI_ANALOGUE_COMPASS 631 +#define IDC_IGUI_ANALOGUE_COMPASS_DIR 632 +#define IDC_IGUI_ANALOGUE_COMPASS_WIND 633 +#define IDC_IGUI_ANALOGUE_COMPASS_WAYPOINT 634 +#define IDC_IGUI_ANALOGUE_COMPASS_MIN 635 +#define IDC_IGUI_ANALOGUE_COMPASS_MAX 636 +#define IDC_IGUI_ANALOGUE_COMPASS_TEXT 637 +#define IDC_IGUI_ANALOGUE_COMPASS_WIND_TEXT 638 + +#define IDC_IGUI_ANALOGUE_STABILITY 641 +#define IDC_IGUI_ANALOGUE_STABILITY_SPEED 642 +#define IDC_IGUI_ANALOGUE_STABILITY_TEXT 643 +#define IDC_IGUI_ANALOGUE_STABILITY_VSPEED_NEEDLE 644 +#define IDC_IGUI_ANALOGUE_STABILITY_COLLECTIVE 645 +#define IDC_IGUI_ANALOGUE_STABILITY_VSPEED 646 +#define IDC_IGUI_ANALOGUE_STABILITY_IMPERIAL 647 +#define IDC_IGUI_ANALOGUE_STABILITY_METRIC 648 + +//damage +#define IDC_IGUI_DAMAGE_GROUP 660 +#define IDC_IGUI_DAMAGE_ENGINESRPM 662 +#define IDC_IGUI_DAMAGE_ENGINESDAMAGE 663 +#define IDC_IGUI_DAMAGE_TORQUE 664 +#define IDC_IGUI_DAMAGE_ELECTRICITY 665 +#define IDC_IGUI_DAMAGE_FUEL 666 +#define IDC_IGUI_DAMAGE_HYDRAULICS 667 +#define IDC_IGUI_DAMAGE_MAINROTOR 668 +#define IDC_IGUI_DAMAGE_TAILROTOR 669 +#define IDC_IGUI_DAMAGE_AUTOHOVER 670 +#define IDC_IGUI_DAMAGE_INSTALLATIONS 671 +#define IDC_IGUI_DAMAGE_HULL 672 +#define IDC_IGUI_DAMAGE_WHEELBRAKE 673 +#define IDC_IGUI_DAMAGE_ROTORBRAKE 674 +#define IDC_IGUI_DAMAGE_WINCH 675 +#define IDC_IGUI_DAMAGE_GEAR 676 + +// - hint +#define IDC_IGHINT_BG 101 +#define IDC_IGHINT_HINT 102 + +// - task hint +#define IDC_IGTASKHINT_BG 103 +#define IDC_IGTASKHINT_HINT 104 + +// - load mission progress bar +#define IDC_LOAD_MISSION_NAME 101 +#define IDC_LOAD_MISSION_DATE 102 +#define IDC_PROGRESS_TIME 103 +#define IDC_PROGRESS_PROGRESS 104 +#define IDC_LOAD_MISSION_PICTURE 105 +#define IDC_LOAD_MISSION_TEXT 106 + +// - dedicated server dialog +#define IDC_DS_REPORT 101 +#define IDC_DS_PLAYERS 102 +#define IDC_DS_FRIENDS 103 + +// - friend's missions dialog +#define IDC_FRIEND_MISSIONS_LIST 101 + +// - live statistics dialogs +#define IDC_LIVE_STATS_BOARDS 101 + +#define IDC_LIVE_STATS_LIST 101 +#define IDC_LIVE_STATS_COUNT 102 +#define IDC_LIVE_STATS_TITLE 103 +#define IDC_LIVE_STATS_PLAYER 104 +#define IDC_LIVE_STATS_BEGIN 105 +#define IDC_LIVE_STATS_END 106 +#define IDC_LIVE_STATS_PREV 107 +#define IDC_LIVE_STATS_NEXT 108 +#define IDC_LIVE_STATS_FRIENDS 109 +#define IDC_LIVE_STATS_GAMER_CARD 110 + +#define IDC_RECEIVING_TEXT 101 +#define IDC_RECEIVING_TIME 102 + +#define IDC_MSG_BOX_MESSAGE 101 + +#define IDC_EDITOR_OBJECTS 201 +#define IDC_EDITOR_ATTRIBUTES 202 +#define IDC_EDITOR_BACKGROUND 203 +#define IDC_EDITOR_MENU 204 +#define IDC_EDITOR_SAVE 205 +#define IDC_EDITOR_LOAD 206 +#define IDC_EDITOR_RESTART 207 +#define IDC_EDITOR_PREVIEW 208 +#define IDC_EDITOR_MAP 209 +#define IDC_EDITOR_CLEAR 210 +#define IDC_EDITOR_TYPE_LIST 211 + +// editor menu system +#define IDC_EDITOR_FILE 212 +#define IDC_EDITOR_VIEW 213 +#define IDC_EDITOR_USER 214 +#define IDC_EDITOR_MENU_FILE 216 +#define IDC_EDITOR_MENU_VIEW 217 +#define IDC_EDITOR_MENU_USER 218 + +#define IDC_EDITOR_CONTROLS_HELP 220 +#define IDC_EDITOR_LOAD_AAR 221 + +#define IDC_EDITOR_ADDOBJ_TYPES 222 +#define IDC_EDITOR_ADDOBJ_CATEGORIES 223 +#define IDC_EDITOR_ADDOBJ_LISTING 224 + +#define IDC_MINI_MAP 225 + +// editor tree filtering +#define IDC_EDITOR_OBJECTS_FILTER 236 +#define IDC_EDITOR_TREE_EXPAND_ALL 237 +#define IDC_EDITOR_TREE_EXPAND_ALL_BACK 238 +#define IDC_EDITOR_TREE_COLLAPSE_ALL 239 +#define IDC_EDITOR_TREE_COLLAPSE_ALL_BACK 240 + +#define IDC_EDIT_OBJECT_CONTROLS 101 +#define IDC_EDIT_OBJECT_TOGGLE_BUTTON 102 + +#define IDC_NEW_OBJECT_TYPE 101 +#define IDC_NEW_OBJECT_PARENT 102 + +#define IDC_MISSION_LOAD_ISLAND 101 +#define IDC_MISSION_LOAD_MISSION 102 + +#define IDC_MISSION_SAVE_MISSION 101 +#define IDC_MISSION_SAVE_TITLE 102 +#define IDC_MISSION_SAVE_DESCRIPTION 103 +#define IDC_MISSION_SAVE_PLACEMENT 104 + +#define IDC_OVERLAY_CREATE_NAME 101 +#define IDC_OVERLAY_LOAD_NAME 101 +#define IDC_OVERLAY_LOAD_MISSION 102 + +#define IDC_EDIT_DIARY_RECORD 101 +#define IDC_EDIT_DIARY_TITLE 102 + +#define IDC_LOAD_AAR_NAME 101 + +#define IDC_EDITOR_EB_PLAN 101 +#define IDC_EDITOR_EB_NOTES 102 +#define IDC_EDITOR_EB_SIDE 103 +#define IDC_EDITOR_EB_OBJECTIVES 104 +#define IDC_EDITOR_EB_NEW_OBJECTIVE 105 +#define IDC_EDITOR_EB_ADD_OBJECTIVE 106 +#define IDC_EDITOR_EB_DEL_OBJECTIVE 107 + +// - team switch display + +#define IDC_TEAM_SWITCH_ROLES 101 + +// - configure action display + +#define IDC_CONFIGURE_ACTION_TITLE 101 +#define IDC_CONFIGURE_ACTION_KEYS 102 +#define IDC_CONFIGURE_ACTION_SPECIAL 103 +#define IDC_CONFIGURE_ACTION_DELETE 104 +#define IDC_CONFIGURE_ACTION_DEFAULT 105 +#define IDC_CONFIGURE_ACTION_CLEAR 106 +#define IDC_CONFIGURE_ACTION_CANCEL 107 +#define IDC_CONFIGURE_ACTION_PREV 108 +#define IDC_CONFIGURE_ACTION_NEXT 109 + +// - controls display +#define IDC_CONTROLS_TYPE 101 +#define IDC_CONTROLS_CONFIGURE 102 + +// - miniMap display + +#define IDC_MINIMAP 101 +#define IDC_MINIMAP_VIEWPORT 102 +#define IDC_MINIMAP_GRID 197 +#define IDC_MINIMAP_HEADING 198 +#define IDC_MINIMAP_TIME 199 + + +// - scripting help display +#define IDC_SCRITING_HELP 101 +#define IDC_SCRITING_HELP_BACK 102 +#define IDC_SCRITING_HELP_FORWARD 103 +#define IDC_SCRITING_HELP_EXAMPLE 104 + +// - performance display +#define IDC_PERF_INDEX 101 +#define IDC_PERF_ENABLE 102 +#define IDC_PERF_GRAPH 103 +#define IDC_PERF_GRAPH_TITLE 104 +#define IDC_PERF_MAXTIME 105 + +// - capture display +#define IDC_CAPTURE_INDEX 101 +#define IDC_CAPTURE_TIMELINES 102 +#define IDC_CAPTURE_ZOOMIN 103 +#define IDC_CAPTURE_ZOOMOUT 104 +#define IDC_CAPTURE_EXPORT 105 +#define IDC_CAPTURE_INFO 106 +#define IDC_CAPTURE_EXPORT_ALL 107 +#define IDC_CAPTURE_IMPORT_ALL 108 +#define IDC_CAPTURE_PREVIOUS_DATA 109 +#define IDC_CAPTURE_AVERAGES 110 +#define IDC_CAPTURE_SAVE_ARCHIVE 111 +#define IDC_CAPTURE_SEARCH 112 + + +// - joysticks configuration display +#define IDC_CONTROLLER_CUSTOMIZE 101 +#define IDC_CONTROLLER_ENABLE 102 +#define IDC_CONTROLLER_XINPUT_LIST 103 +#define IDC_CONTROLLER_LIST 104 +#define IDC_CONTROLLER_REFRESH 105 + +// - customize controllers +#define IDC_CUSTOMIZE_CTRL_SENSITIVITIES 101 +#define IDC_CUSTOMIZE_CTRL_UNMAP 102 +#define IDC_CUSTOMIZE_CTRL_DEFAULT 103 +#define IDC_CUSTOMIZE_CTRL_TITLE 104 +#define IDC_CUSTOMIZE_CTRL_DEFAULT_BINDING 105 +#define IDC_CUSTOMIZE_CTRL_ADVANCED 106 +#define IDC_SENSITIVITY_SLIDER 120 +#define IDC_DEADZONE_SLIDER 220 +#define IDC_CUSTOMIZE_CTRL_ACTIVE_AXIS_ICON 320 +#define IDC_CUSTOMIZE_CTRL_STEEPNESS 420 +#define IDC_CUSTOMIZE_CTRL_VALUE 520 + +// - joystick schemes +#define IDC_JOY_SCHEMES_TITLE 101 +#define IDC_JOY_SCHEMES_LIST 102 +#define IDC_JOY_SCHEMES_MAP 103 + +// - helper IDC for DisplayCampaignLoadLight +#define IDC_MP_CAMPAIGN_RESTART 150 +#define IDC_MP_CAMPAIGN_REPLAY 151 +#define IDC_MP_CAMPAIGN_LOAD 152 + +// - addon actions display +#define IDC_ADDON_ACTIONS 101 +#define IDC_ADDON_ACTIONS_NEW_MOD 102 + +// - mod launcher +#define IDC_MOD_LAUNCHER_MODS 101 +#define IDC_MOD_LAUNCHER_PICTURE 102 +#define IDC_MOD_LAUNCHER_UP 103 +#define IDC_MOD_LAUNCHER_DOWN 104 +#define IDC_MOD_LAUNCHER_DISABLE 105 +#define IDC_MOD_LAUNCHER_ACTION 106 +#define IDC_MOD_LAUNCHER_PURCHASE 107 +#define IDC_MOD_LAUNCHER_DESCRIPTION 108 + +// - create new mod +#define IDC_MOD_NAME 101 +#define IDC_MOD_DIR 102 + + +//A3 credits +#define ONBUTTONCLICK_START_CREDITS "0 = _this spawn (uinamespace getvariable 'bis_fnc_credits');" + + +// Hitzone types +#define HZ_AIRPLANE_HULL 0 +#define HZ_AIRPLANE_ENG 22 +#define HZ_AIRPLANE_FUEL 23 +#define HZ_AIRPLANE_GEAR 24 +#define HZ_AIRPLANE_WINGS 25 +#define HZ_AIRPLANE_INST 26 + +#define HZ_HELICOPTER_HULL 1 +#define HZ_HELICOPTER_ENG 2 +#define HZ_HELICOPTER_INST 3 +#define HZ_HELICOPTER_ATRQ 4 +#define HZ_HELICOPTER_MROT 5 +#define HZ_HELICOPTER_WINCH 6 + +#define HZ_CAR_HULL 7 +#define HZ_CAR_ENG 8 +#define HZ_CAR_FUEL 9 +#define HZ_CAR_WHL 10 + +#define HZ_MOTORCYCLE_HULL 11 +#define HZ_MOTORCYCLE_ENG 12 +#define HZ_MOTORCYCLE_FUEL 13 +#define HZ_MOTORCYCLE_WHL 14 + +#define HZ_TANK_HULL 15 +#define HZ_TANK_ENG 16 +#define HZ_TANK_GUN 17 +#define HZ_TANK_LTR 18 +#define HZ_TANK_RTR 19 +#define HZ_TANK_TRRT 20 + +#define HZ_VEH_GUN HZ_TANK_GUN +#define HZ_VEH_TRRT HZ_TANK_TRRT + +#define HZ_SHIP_ENG 21 + +#define HZ_VEH_TOTAL 27 + +#define HZ_TANK_CMDGUN 28 +#define HZ_TANK_CMDTRRT 29 +#define HZ_VEH_CMDGUN HZ_TANK_CMDGUN +#define HZ_VEH_CMDTRRT HZ_TANK_CMDTRRT + +#define HZ_VEH_TRRT_TOTAL 30 +#define HZ_VEH_CMDTRRT_TOTAL 31 + +#define HZ_TANK_BOTH_TRACKS 32 diff --git a/include/a3/ui_f/hpp/defineResinclDesign.inc b/include/a3/ui_f/hpp/defineResinclDesign.inc new file mode 100644 index 0000000000..0c669371e9 --- /dev/null +++ b/include/a3/ui_f/hpp/defineResinclDesign.inc @@ -0,0 +1,1063 @@ +#define IDC_SEARCH 645 +#define IDC_SEARCH_BUTTON 646 + +//--- RscDisplayMain +#define IDC_MAIN_GAMEMODES 201 +#define IDC_MAIN_MP_SCENARIOS 202 +#define IDC_MAIN_ARSENAL 203 +#define IDC_MAIN_COMMUNITYGUIDES 204 +#define IDC_MAIN_PROFILE 205 +#define IDC_MAIN_CAMPAIGN_MP 206 + +#define IDC_MAIN_MOUSEAREA 999 +#define IDC_MAIN_BACKGROUND_PICTURE 998 +#define IDC_MAIN_BACKGROUND_BLACK 997 + +#define IDC_MAIN_GROUP_SINGLEPLAYER 1001 +#define IDC_MAIN_GROUP_MULTIPLAYER 1002 +#define IDC_MAIN_GROUP_TUTORIALS 1003 +#define IDC_MAIN_GROUP_OPTIONS 1004 +#define IDC_MAIN_GROUP_SESSION 1005 + +#define IDC_MAIN_TITLE_SINGLEPLAYER 1011 +#define IDC_MAIN_TITLE_MULTIPLAYER 1012 +#define IDC_MAIN_TITLE_TUTORIALS 1013 +#define IDC_MAIN_TITLE_OPTIONS 1014 +#define IDC_MAIN_TITLE_SESSION 1015 + +#define IDC_MAIN_TITLEICON_SINGLEPLAYER 1111 +#define IDC_MAIN_TITLEICON_MULTIPLAYER 1112 +#define IDC_MAIN_TITLEICON_TUTORIALS 1113 +#define IDC_MAIN_TITLEICON_OPTIONS 1114 +#define IDC_MAIN_TITLEICON_SESSION 1115 + +#define IDC_MAIN_SPOTLIGHT_GROUP_1 1020 +#define IDC_MAIN_SPOTLIGHT_GROUP_2 1021 +#define IDC_MAIN_SPOTLIGHT_GROUP_3 1022 +#define IDC_MAIN_SPOTLIGHT_PICTURE 1023 +#define IDC_MAIN_SPOTLIGHT_VIDEO 1024 +#define IDC_MAIN_SPOTLIGHT_HOVER 1025 +#define IDC_MAIN_SPOTLIGHT_BUTTON 1026 +#define IDC_MAIN_SPOTLIGHT_ACTION 1027 +#define IDC_MAIN_SPOTLIGHT_TEXT 1028 +#define IDC_MAIN_SPOTLIGHT_TEXTBCG 1029 + +#define IDC_MAIN_SPOTLIGHT_PREV 1060 +#define IDC_MAIN_SPOTLIGHT_NEXT 1061 + +#define IDC_MAIN_INFO_MODS 1030 +#define IDC_MAIN_INFO_DLCS 1031 +#define IDC_MAIN_INFO_DLCSOWNED 10311 +#define IDC_MAIN_INFO_NEWS 1032 +#define IDC_MAIN_INFO_VERSION 1033 + +#define IDC_MAIN_INFO_BACKGROUND 1034 +#define IDC_MAIN_INFO_BACKGROUND_ICON 1035 +#define IDC_MAIN_INFO_ICON 1036 +#define IDC_MAIN_INFO_BUTTON 1037 +#define IDC_MAIN_INFO_BUTTON_DEV 1038 +#define IDC_MAIN_INFO_NOTIFICATION 1039 + +#define IDC_MAIN_VERSION_DEV 1050 + +#define BARCOLOR 0, 0, 0, 0.75 +#define INFO_BACKGROUND_COLOR BARCOLOR +#define INFO_ICON_COLOR 1, 1, 1, 0.5 + +//--- RscDisplayDebug +#define IDC_RSCDISPLAYDEBUG_DESIGNHTML 11735 +#define IDC_RSCDISPLAYDEBUG_TEXTEXPRESSION 11736 +#define IDC_RSCDISPLAYDEBUG_TEXTVAR1 11737 +#define IDC_RSCDISPLAYDEBUG_TEXTVAR2 11738 +#define IDC_RSCDISPLAYDEBUG_TEXTVAR3 11739 +#define IDC_RSCDISPLAYDEBUG_TEXTVAR4 11740 +#define IDC_RSCDISPLAYDEBUG_TEXTWATCH 11741 +#define IDC_RSCDISPLAYDEBUG_DIAGTEXT 11747 +#define IDC_RSCDISPLAYDEBUG_DRAWTEXT 11748 +#define IDC_RSCDISPLAYDEBUG_CA_TITLE 11838 +#define IDC_RSCDISPLAYDEBUG_CA_PLAYER 12145 +#define IDC_RSCDISPLAYDEBUG_CA_VERSION 12146 +#define IDC_RSCDISPLAYDEBUG_DIAGLIST 12236 +#define IDC_RSCDISPLAYDEBUG_DIAGLIST_SEARCH 12238 +#define IDC_RSCDISPLAYDEBUG_DRAWLIST 12237 +#define IDC_RSCDISPLAYDEBUG_DIAGFRAME 12535 +#define IDC_RSCDISPLAYDEBUG_DRAWFRAME 12536 +#define IDC_RSCDISPLAYDEBUG_FRAMELOG 12537 +#define IDC_RSCDISPLAYDEBUG_G_EXPRESSION 13035 +#define IDC_RSCDISPLAYDEBUG_G_DIAG 13036 +#define IDC_RSCDISPLAYDEBUG_G_DESIGN 13037 +#define IDC_RSCDISPLAYDEBUG_G_WATCH 13038 +#define IDC_RSCDISPLAYDEBUG_G_DRAW 13039 +#define IDC_RSCDISPLAYDEBUG_DIAGBUTTON 13138 +#define IDC_RSCDISPLAYDEBUG_DRAWBUTTON 13139 +#define IDC_RSCDISPLAYDEBUG_DEBUGFLOW 13140 +#define IDC_RSCDISPLAYDEBUG_DEBUGANIM 13141 +#define IDC_RSCDISPLAYDEBUG_B_CAMERANEW 13142 +#define IDC_RSCDISPLAYDEBUG_CREATEJIRAISSUE 13143 +#define IDC_RSCDISPLAYDEBUG_DEBUGGUI 13144 +#define IDC_RSCDISPLAYDEBUG_DEBUGFUNCTIONS 13145 +#define IDC_RSCDISPLAYDEBUG_DEBUGCONFIG 13154 +#define IDC_RSCDISPLAYDEBUG_B_CAMERA 13155 +#define IDC_RSCDISPLAYDEBUG_BUTTONSCRIPT1 13157 +#define IDC_RSCDISPLAYDEBUG_BUTTONSCRIPT2 13158 +#define IDC_RSCDISPLAYDEBUG_BUTTONSCRIPT3 13159 +#define IDC_RSCDISPLAYDEBUG_BUTTONSCRIPT4 13160 +#define IDC_RSCDISPLAYDEBUG_BUTTONSCRIPT5 13161 +#define IDC_RSCDISPLAYDEBUG_BUTTONSCRIPT6 13163 +#define IDC_RSCDISPLAYDEBUG_DEBUGCAPTURE 13164 + +//--- RscDisplayAnimViewer +#define IDC_RSCDISPLAYANIMVIEWER_TITLE 1000 +#define IDC_RSCDISPLAYANIMVIEWER_BACKGROUND 1001 +#define IDC_RSCDISPLAYANIMVIEWER_TEXTACTION 1002 +#define IDC_RSCDISPLAYANIMVIEWER_TEXTPOSE 1003 +#define IDC_RSCDISPLAYANIMVIEWER_TEXTMOVEMENT 1004 +#define IDC_RSCDISPLAYANIMVIEWER_TEXTSTANCE 1005 +#define IDC_RSCDISPLAYANIMVIEWER_TEXTITEM 1006 +#define IDC_RSCDISPLAYANIMVIEWER_DESCRIPTION 1100 +#define IDC_RSCDISPLAYANIMVIEWER_MISC 1500 +#define IDC_RSCDISPLAYANIMVIEWER_ACTION 2100 +#define IDC_RSCDISPLAYANIMVIEWER_POSE 2101 +#define IDC_RSCDISPLAYANIMVIEWER_MOVEMENT 2102 +#define IDC_RSCDISPLAYANIMVIEWER_STANCE 2103 +#define IDC_RSCDISPLAYANIMVIEWER_ITEM 2104 +#define IDC_RSCDISPLAYANIMVIEWER_SOLDIER 2106 +#define IDC_RSCDISPLAYANIMVIEWER_BUTTONCLOSE 2700 + +#define IDC_RSCDISPLAYANIMVIEWER_MOUSEAREA 999 +#define IDC_RSCDISPLAYANIMVIEWER 1320 + +//--- RscDisplayFunctionsViewer +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_TITLEBACKGROUND 1000 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_BACKGROUNDLEFT 1001 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_BACKGROUNDRIGHT 1002 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_BACKGROUNDMETA 1003 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_TITLETEXT 1004 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_AUTHOR 1005 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_CODESTRUCTURED 1100 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_TITLEICON 1200 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_CODE 1400 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_NAME 1401 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_FUNCTIONS 1500 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_SOURCES 2100 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_TAGS 2101 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_CATEGORIES 2102 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_PREVIEW 2300 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_BUTTONRECOMPILE_ALL 2400 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_BUTTONRECOMPILE_SELECTED 2401 +#define IDC_RSCDISPLAYFUNCTIONSVIEWER_BUTTONCLOSE 2700 + +#define IDC_RSCDISPLAYFUNCTIONSVIEWER 1321 + +//--- Loading +#define IDC_LOADING_MAPBACKTOP 1000 +#define IDC_LOADING_MAPNAME 1001 +#define IDC_LOADING_MAPAUTHOR 1002 +#define IDC_LOADING_MAPBACKBOTTOM 1003 +#define IDC_LOADING_MISSIONBACKGROUNDTOP 1005 +#define IDC_LOADING_MISSIONNAME 1006 +#define IDC_LOADING_MISSIONAUTHOR 1007 +#define IDC_LOADING_PROGRESSMAP 1008 +#define IDC_LOADING_DISCLAIMERNAME 1009 +#define IDC_LOADING_MISSIONPICTUREBACK 1010 +#define IDC_LOADING_MISSIONGAMETYPE 1012 +#define IDC_LOADING_PROGRESSMISSION 1013 +#define IDC_LOADING_MISSIONDESCRIPTION 1100 +#define IDC_LOADING_DISCLAIMERDESCRIPTION 1101 +#define IDC_LOADING_MAPDESCRIPTION 1102 +#define IDC_LOADING_MISSION 2300 +#define IDC_LOADING_DISCLAIMER 2301 +//--- Loading - DLC part +#define IDC_LOADING_DLCNAME 3207 +#define IDC_LOADING_DLCAUTHOR 3208 +#define IDC_LOADING_DLCPICTUREBACK 3209 +#define IDC_LOADING_DLCDESCRIPTION 3296 +#define IDC_LOADING_DLCPICTURE 3393 +#define IDC_LOADING_DLCSTRIPE 3395 +#define IDC_LOADING_DLCICON 3396 + +#define IDC_LOADING_MAP 999 + +//--- LoadingStart +#define IDC_LOADINGSTART_BLACK 1000 +#define IDC_LOADINGSTART_LOGO 1200 +#define IDC_LOADINGSTART_NOISE 1201 +#define IDC_LOADINGSTART_LOADINGSTART 2310 + +//--- RscDisplayDebriefing +#define IDC_RSCDISPLAYDEBRIEFING_LISTGROUP 21903 //Defined manually +#define IDC_RSCDISPLAYDEBRIEFING_LOACTEMPLATE 21904 +#define IDC_RSCDISPLAYDEBRIEFING_TIMEBACKGROUND 20594 +#define IDC_RSCDISPLAYDEBRIEFING_MAINBACKGROUND 20595 +#define IDC_RSCDISPLAYDEBRIEFING_RATINGBACKGROUND 20596 +#define IDC_RSCDISPLAYDEBRIEFING_PLAYERNAME 20599 +#define IDC_RSCDISPLAYDEBRIEFING_TITLE 20600 +#define IDC_RSCDISPLAYDEBRIEFING_SUBTITLE 20601 +#define IDC_RSCDISPLAYDEBRIEFING_OBJECTIVESBACKGROUND 20602 +#define IDC_RSCDISPLAYDEBRIEFING_STATBACKGROUND 20603 +#define IDC_RSCDISPLAYDEBRIEFING_DESCRIPTIONBACKGROUND 20604 +#define IDC_RSCDISPLAYDEBRIEFING_LOADSBACKGROUND 20605 +#define IDC_RSCDISPLAYDEBRIEFING_RATINGTEXT 20606 +#define IDC_RSCDISPLAYDEBRIEFING_RATING 20607 +#define IDC_RSCDISPLAYDEBRIEFING_RATINGBEST 20608 +#define IDC_RSCDISPLAYDEBRIEFING_TIMETEXT 20609 +#define IDC_RSCDISPLAYDEBRIEFING_TIME 20610 +#define IDC_RSCDISPLAYDEBRIEFING_TIMEBEST 20611 +#define IDC_RSCDISPLAYDEBRIEFING_LOADSTEXT 20612 +#define IDC_RSCDISPLAYDEBRIEFING_LOADS 20613 +#define IDC_RSCDISPLAYDEBRIEFING_LOADSBEST 20614 +#define IDC_RSCDISPLAYDEBRIEFING_DLCOVERVIEWBACKGROUND 20615 +#define IDC_RSCDISPLAYDEBRIEFING_DLCOVERVIEWTEXT 20616 +#define IDC_RSCDISPLAYDEBRIEFING_DLCCOUNTDOWN 20617 +#define IDC_RSCDISPLAYDEBRIEFING_TABSBACKGROUND 20618 +#define IDC_RSCDISPLAYDEBRIEFING_DLCBAR 20619 +#define IDC_RSCDISPLAYDEBRIEFING_DESCRIPTIONTEXT 20693 +#define IDC_RSCDISPLAYDEBRIEFING_CUSTOMTEXT 20694 +#define IDC_RSCDISPLAYDEBRIEFING_SIDE1 20696 +#define IDC_RSCDISPLAYDEBRIEFING_SIDE2 20697 +#define IDC_RSCDISPLAYDEBRIEFING_SIDE3 20698 +#define IDC_RSCDISPLAYDEBRIEFING_SIDE4 20699 +#define IDC_RSCDISPLAYDEBRIEFING_SIDE5 20700 +#define IDC_RSCDISPLAYDEBRIEFING_PICTURE 20793 +#define IDC_RSCDISPLAYDEBRIEFING_MISSIONPICTURE 20794 +#define IDC_RSCDISPLAYDEBRIEFING_DLCOVERVIEWPICTURE 20795 +#define IDC_RSCDISPLAYDEBRIEFING_DLCLOCKICON 20798 +#define IDC_RSCDISPLAYDEBRIEFING_SECTION 21093 +#define IDC_RSCDISPLAYDEBRIEFING_SUMMARY 21893 +#define IDC_RSCDISPLAYDEBRIEFING_DESCRIPTION 21894 +#define IDC_RSCDISPLAYDEBRIEFING_OBJECTIVES 21895 +#define IDC_RSCDISPLAYDEBRIEFING_STAT 21896 +#define IDC_RSCDISPLAYDEBRIEFING_CUSTOM 21897 +#define IDC_RSCDISPLAYDEBRIEFING_DATA 21898 +#define IDC_RSCDISPLAYDEBRIEFING_SIDES 21899 +#define IDC_RSCDISPLAYDEBRIEFING_DLCGENERALGROUP 21900 +#define IDC_RSCDISPLAYDEBRIEFING_LOAC 21901 +#define IDC_RSCDISPLAYDEBRIEFING_DLCBUTTONALLASSETS 21995 +#define IDC_RSCDISPLAYDEBRIEFING_DLCBUTTONKARTS 21996 +#define IDC_RSCDISPLAYDEBRIEFING_DLCBUTTONHELI 21997 +#define IDC_RSCDISPLAYDEBRIEFING_DLCBUTTONMARKSMEN 21998 +#define IDC_RSCDISPLAYDEBRIEFING_DLCBUTTONAPEX 22000 + +//--- RscDisplayDebriefing - DLC item template +#define IDC_RSCDISPLAYDEBRIEFING_ITEMBACKGROUND 20623 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMBACKGROUNDBLACK 20624 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMNAME 20625 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMTEXTSESSIONTIME 20626 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMSESSIONTIME 20627 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMTEXTTOTALTIME 20628 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMTOTALTIME 20629 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMDESCRIPTION 20630 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMPICTURE 20796 +#define IDC_RSCDISPLAYDEBRIEFING_ITEMDLCLOGO 20797 +#define IDC_RSCDISPLAYDEBRIEFING_RSCDISPLAYDEBRIEFING_ITEMTEMPLATE 21902 +#define IDC_RSCDISPLAYDEBRIEFING_BUTTONPURCHASE 21999 + +//--- RscDisplayDebriefing_LOACTemplate +#define IDC_RSCDISPLAYDEBRIEFING_LOACTEMPLATE_BACKGROUND 52605 +#define IDC_RSCDISPLAYDEBRIEFING_LOACTEMPLATE_TITLE 52705 +#define IDC_RSCDISPLAYDEBRIEFING_LOACTEMPLATE_TEXT 52706 +#define IDC_RSCDISPLAYDEBRIEFING_LOACTEMPLATE_PICTURE 52805 +#define IDC_RSCDISPLAYDEBRIEFING_LOACTEMPLATE_TEXTGROUP 53905 + + +//--- RscDebugConsole +#define IDC_RSCDEBUGCONSOLE_TITLE 11884 +#define IDC_RSCDEBUGCONSOLE_EXPRESSIONBACKGROUND 11885 +#define IDC_RSCDEBUGCONSOLE_WATCHBACKGROUND 11886 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND1 11887 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND2 11888 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND3 11889 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUTBACKGROUND4 11890 +#define IDC_RSCDEBUGCONSOLE_LINK 11891 +#define IDC_RSCDEBUGCONSOLE_EXPRESSIONTEXT 11892 +#define IDC_RSCDEBUGCONSOLE_WATCHTEXT 11893 +#define IDC_RSCDEBUGCONSOLE_EXPRESSION 12284 +#define IDC_RSCDEBUGCONSOLE_WATCHINPUT1 12285 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUT1 12286 +#define IDC_RSCDEBUGCONSOLE_WATCHINPUT2 12287 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUT2 12288 +#define IDC_RSCDEBUGCONSOLE_WATCHINPUT3 12289 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUT3 12290 +#define IDC_RSCDEBUGCONSOLE_WATCHINPUT4 12291 +#define IDC_RSCDEBUGCONSOLE_WATCHOUTPUT4 12293 +#define IDC_RSCDEBUGCONSOLE_RSCDEBUGCONSOLE 13184 +#define IDC_RSCDEBUGCONSOLE_BUTTONCODEPERFORMANCE 13284 +#define IDC_RSCDEBUGCONSOLE_BUTTONEXECUTEALL 13285 +#define IDC_RSCDEBUGCONSOLE_BUTTONEXECUTESERVER 13286 +#define IDC_RSCDEBUGCONSOLE_BUTTONSPECTATORCAMERA 13287 +#define IDC_RSCDEBUGCONSOLE_BUTTONSPLENDIDCAMERA 13288 +#define IDC_RSCDEBUGCONSOLE_BUTTONFUNCTIONS 13289 +#define IDC_RSCDEBUGCONSOLE_BUTTONCONFIG 13290 +#define IDC_RSCDEBUGCONSOLE_BUTTONANIMATIONS 13291 +#define IDC_RSCDEBUGCONSOLE_BUTTONGUI 13292 +#define IDC_RSCDEBUGCONSOLE_BUTTONEXECUTELOCAL 13484 +#define IDC_RSCDEBUGCONSOLE_EXPRESSIONOUTPUT 13190 +#define IDC_RSCDEBUGCONSOLE_EXPRESSIONOUTPUTBACKGROUND 13191 + + + +//--- RscDisplayOptionsLayout +#define IDC_RSCDISPLAYOPTIONSLAYOUT_TITLE 1000 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_BACKGROUND 1001 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_TAGSTEXT 1002 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_PRESETSLABEL 1003 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_MOUSEAREA 1004 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_CENTERW 1005 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_CENTERH 1006 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_TOOLTIP 1100 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_TAGS 2100 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_PRESETS 2101 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_BUTTONSAVE 2400 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_BUTTONOK 2600 +#define IDC_RSCDISPLAYOPTIONSLAYOUT_BUTTONCANCEL 2700 + +//--- RscDisplayRespawn +#define IDC_RSCDISPLAYRESPAWN_TITLE 1000 +#define IDC_RSCDISPLAYRESPAWN_LISTBACKGROUND 1001 +#define IDC_RSCDISPLAYRESPAWN_SECTION 1002 +#define IDC_RSCDISPLAYRESPAWN_BLACK 1003 +#define IDC_RSCDISPLAYRESPAWN_CONTENTBACKGROUND 1004 +#define IDC_RSCDISPLAYRESPAWN_BLACKCONTENT 1005 +#define IDC_RSCDISPLAYRESPAWN_PLAYERSNAME 1006 +#define IDC_RSCDISPLAYRESPAWN_CONTENT 1100 +#define IDC_RSCDISPLAYRESPAWN_LIST 1500 +#define IDC_RSCDISPLAYRESPAWN_CONTENTGROUP 2300 +#define IDC_RSCDISPLAYRESPAWN_BUTTONOK 2600 +#define IDC_RSCDISPLAYRESPAWN_BUTTONCANCEL 2700 + +#define IDC_RSCDISPLAYRESPAWN_MAP 1050 + +//--- RscDisplaySelectIsland +#define IDC_RSCDISPLAYSELECTISLAND_TITLE 1000 +#define IDC_RSCDISPLAYSELECTISLAND_NAME 1002 +#define IDC_RSCDISPLAYSELECTISLAND_AUTHOR 1003 +#define IDC_RSCDISPLAYSELECTISLAND_NAMEBACKGROUND 1004 +#define IDC_RSCDISPLAYSELECTISLAND_ISLANDPANORAMA 1200 +#define IDC_RSCDISPLAYSELECTISLAND_INTERLACING 1201 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD1 1202 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD2 1203 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD3 1204 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD4 1205 +#define IDC_RSCDISPLAYSELECTISLAND_ISLANDGROUP 2300 +#define IDC_RSCDISPLAYSELECTISLAND_BUTTONCONTINUE 2600 +#define IDC_RSCDISPLAYSELECTISLAND_BUTTONCANCEL 2700 + +//--- RscSpectator +#define IDC_RSCSPECTATOR_PLAYERNAMEBACKGROUND 1000 +#define IDC_RSCSPECTATOR_PLAYERGROUP 1001 +#define IDC_RSCSPECTATOR_PLAYERNAME 1002 +#define IDC_RSCSPECTATOR_PLAYERDESCRIPTION 1100 +#define IDC_RSCSPECTATOR_PLAYERICON 1200 +#define IDC_RSCSPECTATOR_PLAYER 2300 + +//--- RscMissionEnd +#define IDC_RSCMISSIONEND_TITLE 8942 +#define IDC_RSCMISSIONEND_SUBTITLE 8943 +#define IDC_RSCMISSIONEND_SIDE1 9045 +#define IDC_RSCMISSIONEND_SIDE2 9046 +#define IDC_RSCMISSIONEND_SIDE3 9047 +#define IDC_RSCMISSIONEND_SIDE4 9048 +#define IDC_RSCMISSIONEND_SIDE5 9049 +#define IDC_RSCMISSIONEND_PICTURE 9142 +#define IDC_RSCMISSIONEND_SIDES 10248 + +//--- RscNotification +#define IDC_RSCNOTIFICATION_TITLE 12135 +#define IDC_RSCNOTIFICATION_PICTUREBACKGROUND 12136 +#define IDC_RSCNOTIFICATION_SCORE 12137 +#define IDC_RSCNOTIFICATION_DESCRIPTIONBACKGROUND 12138 +#define IDC_RSCNOTIFICATION_DESCRIPTION 12235 +#define IDC_RSCNOTIFICATION_PICTURE 12335 +#define IDC_RSCNOTIFICATION_NOTIFICATION 13435 + +#define IDC_RSCNOTIFICATION_NOTIFICATIONAREA 312 + +//--- RscCommMenuItems +#define IDC_RSCCOMMMENUITEMS_SLOT1BACKGROUND 1000 +#define IDC_RSCCOMMMENUITEMS_SLOT2BACKGROUND 1001 +#define IDC_RSCCOMMMENUITEMS_SLOT3BACKGROUND 1002 +#define IDC_RSCCOMMMENUITEMS_SLOT4BACKGROUND 1003 +#define IDC_RSCCOMMMENUITEMS_SLOT5BACKGROUND 1004 +#define IDC_RSCCOMMMENUITEMS_SLOT6BACKGROUND 1005 +#define IDC_RSCCOMMMENUITEMS_SLOT7BACKGROUND 1006 +#define IDC_RSCCOMMMENUITEMS_SLOT8BACKGROUND 1007 +#define IDC_RSCCOMMMENUITEMS_SLOT9BACKGROUND 1008 +#define IDC_RSCCOMMMENUITEMS_SLOT0BACKGROUND 1009 +#define IDC_RSCCOMMMENUITEMS_SLOT1TEXT 1010 +#define IDC_RSCCOMMMENUITEMS_SLOT1 1200 +#define IDC_RSCCOMMMENUITEMS_SLOT2 1201 +#define IDC_RSCCOMMMENUITEMS_SLOT3 1202 +#define IDC_RSCCOMMMENUITEMS_SLOT4 1203 +#define IDC_RSCCOMMMENUITEMS_SLOT5 1204 +#define IDC_RSCCOMMMENUITEMS_SLOT6 1205 +#define IDC_RSCCOMMMENUITEMS_SLOT7 1206 +#define IDC_RSCCOMMMENUITEMS_SLOT8 1207 +#define IDC_RSCCOMMMENUITEMS_SLOT9 1208 +#define IDC_RSCCOMMMENUITEMS_SLOT0 1209 +#define IDC_RSCCOMMMENUITEMS_SLOT2TEXT 1210 +#define IDC_RSCCOMMMENUITEMS_SLOT3TEXT 1211 +#define IDC_RSCCOMMMENUITEMS_SLOT4TEXT 1212 +#define IDC_RSCCOMMMENUITEMS_SLOT5TEXT 1213 +#define IDC_RSCCOMMMENUITEMS_SLOT6TEXT 1214 +#define IDC_RSCCOMMMENUITEMS_SLOT7TEXT 1215 +#define IDC_RSCCOMMMENUITEMS_SLOT8TEXT 1216 +#define IDC_RSCCOMMMENUITEMS_SLOT9TEXT 1217 +#define IDC_RSCCOMMMENUITEMS_SLOT0TEXT 1218 +#define IDC_RSCCOMMMENUITEMS_RSCCOMMMENUITEMS 2300 + +//--- RscRespawnCounter +#define IDC_RSCRESPAWNCOUNTER_MPTABLE 1000 +#define IDC_RSCRESPAWNCOUNTER_TITLE 1001 +#define IDC_RSCRESPAWNCOUNTER_TITLEBACKGROUND 1002 +#define IDC_RSCRESPAWNCOUNTER_PLAYERRESPAWNTIME 1003 +#define IDC_RSCRESPAWNCOUNTER_DESCRIPTION 1100 + +//--- RscFiringDrillTime +#define IDC_RSCFIRINGDRILLTIME_CURRENTBACKGROUND 1100 +#define IDC_RSCFIRINGDRILLTIME_BEST 1101 +#define IDC_RSCFIRINGDRILLTIME_PREVIOUS 1102 +#define IDC_RSCFIRINGDRILLTIME_BONUS 1103 +#define IDC_RSCFIRINGDRILLTIME_CURRENT 1104 +#define IDC_RSCFIRINGDRILLTIME_PENALTY 1105 +#define IDC_RSCFIRINGDRILLTIME_TIME 2300 + +//--- RscFiringDrillCheckpoint +#define IDC_RSCFIRINGDRILLCHECKPOINT_CHECKPOINTBACKGROUND 1000 +#define IDC_RSCFIRINGDRILLCHECKPOINT_TARGETBACKGROUND 1001 +#define IDC_RSCFIRINGDRILLCHECKPOINT_STANCEBACKGROUND 1002 +#define IDC_RSCFIRINGDRILLCHECKPOINT_WEAPONBACKGROUND 1003 +#define IDC_RSCFIRINGDRILLCHECKPOINT_CHECKPOINTTEXT 1004 +#define IDC_RSCFIRINGDRILLCHECKPOINT_TARGETTEXTTOTAL 1005 +#define IDC_RSCFIRINGDRILLCHECKPOINT_TARGETTEXTCURRENT 1006 +#define IDC_RSCFIRINGDRILLCHECKPOINT_CHECKPOINTPICTURE 1200 +#define IDC_RSCFIRINGDRILLCHECKPOINT_STANCEPICTURE 1201 +#define IDC_RSCFIRINGDRILLCHECKPOINT_WEAPONPICTURE 1202 +#define IDC_RSCFIRINGDRILLCHECKPOINT_TARGETPICTURE 1203 +#define IDC_RSCFIRINGDRILLCHECKPOINT_CHECKPOINT 2300 + +//--- RscAdvancedHint +#define IDC_RSCADVANCEDHINT_TITLE 11657 +#define IDC_RSCADVANCEDHINT_HINT 11757 +#define IDC_RSCADVANCEDHINT_HINTGROUP 12957 + +//--- RscSectorCapture +#define IDC_RSCSECTORCAPTURE_WEST 1001 +#define IDC_RSCSECTORCAPTURE_EAST 1002 +#define IDC_RSCSECTORCAPTURE_GUER 1003 +#define IDC_RSCSECTORCAPTURE_CIV 1004 +#define IDC_RSCSECTORCAPTURE_NAME 1005 +#define IDC_RSCSECTORCAPTURE_BACKGROUND 1200 +#define IDC_RSCSECTORCAPTURE_SECTORCAPTURE 2300 + +//--- RscMissionStatus +#define IDC_RSCMISSIONSTATUS_BARBRIDGE 13983 +#define IDC_RSCMISSIONSTATUS_BARWEST 13984 +#define IDC_RSCMISSIONSTATUS_BAREAST 13985 +#define IDC_RSCMISSIONSTATUS_BARGUER 13986 +#define IDC_RSCMISSIONSTATUS_BARCIV 13987 +#define IDC_RSCMISSIONSTATUS_BARUNKNOWN 13988 +#define IDC_RSCMISSIONSTATUS_SLOT1BACKGROUND 13989 +#define IDC_RSCMISSIONSTATUS_SLOT1PROGRESS 13990 +#define IDC_RSCMISSIONSTATUS_SLOT2BACKGROUND 13991 +#define IDC_RSCMISSIONSTATUS_SLOT2PROGRESS 13992 +#define IDC_RSCMISSIONSTATUS_SLOT3BACKGROUND 13993 +#define IDC_RSCMISSIONSTATUS_SLOT3PROGRESS 13994 +#define IDC_RSCMISSIONSTATUS_SLOT4BACKGROUND 13995 +#define IDC_RSCMISSIONSTATUS_SLOT4PROGRESS 13996 +#define IDC_RSCMISSIONSTATUS_SLOT5BACKGROUND 13997 +#define IDC_RSCMISSIONSTATUS_SLOT5PROGRESS 13998 +#define IDC_RSCMISSIONSTATUS_SLOT6BACKGROUND 13999 +#define IDC_RSCMISSIONSTATUS_SLOT6PROGRESS 14000 +#define IDC_RSCMISSIONSTATUS_SLOT7BACKGROUND 14001 +#define IDC_RSCMISSIONSTATUS_SLOT7PROGRESS 14002 +#define IDC_RSCMISSIONSTATUS_SLOT8BACKGROUND 14003 +#define IDC_RSCMISSIONSTATUS_SLOT8PROGRESS 14004 +#define IDC_RSCMISSIONSTATUS_SLOT9BACKGROUND 14005 +#define IDC_RSCMISSIONSTATUS_SLOT9PROGRESS 14006 +#define IDC_RSCMISSIONSTATUS_SLOT0BACKGROUND 14007 +#define IDC_RSCMISSIONSTATUS_SLOT0PROGRESS 14008 +#define IDC_RSCMISSIONSTATUS_SLOT1TEXT 14093 +#define IDC_RSCMISSIONSTATUS_SLOT2TEXT 14094 +#define IDC_RSCMISSIONSTATUS_SLOT3TEXT 14095 +#define IDC_RSCMISSIONSTATUS_SLOT4TEXT 14096 +#define IDC_RSCMISSIONSTATUS_SLOT5TEXT 14097 +#define IDC_RSCMISSIONSTATUS_SLOT6TEXT 14098 +#define IDC_RSCMISSIONSTATUS_SLOT7TEXT 14099 +#define IDC_RSCMISSIONSTATUS_SLOT8TEXT 14100 +#define IDC_RSCMISSIONSTATUS_SLOT9TEXT 14101 +#define IDC_RSCMISSIONSTATUS_SLOT0TEXT 14102 +#define IDC_RSCMISSIONSTATUS_SLOT1 14183 +#define IDC_RSCMISSIONSTATUS_SLOT2 14184 +#define IDC_RSCMISSIONSTATUS_SLOT3 14185 +#define IDC_RSCMISSIONSTATUS_SLOT4 14186 +#define IDC_RSCMISSIONSTATUS_SLOT5 14187 +#define IDC_RSCMISSIONSTATUS_SLOT6 14188 +#define IDC_RSCMISSIONSTATUS_SLOT7 14189 +#define IDC_RSCMISSIONSTATUS_SLOT8 14190 +#define IDC_RSCMISSIONSTATUS_SLOT9 14191 +#define IDC_RSCMISSIONSTATUS_SLOT0 14192 +#define IDC_RSCMISSIONSTATUS_RSCMISSIONSTATUS 15283 + +//--- RscFeedback +#define IDC_RSCFEEDBACK_RSCFEEDBACK 6455 + +//--- RscDisplayCommunityGuide +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_TITLE 29956 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_PLAYERSNAME 29957 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_BRIEFINGNAME 29958 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_AUTHOR 29959 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_OVERVIEWTEXT 30056 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_OVERVIEWPICTURE 30156 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_GUIDELIST 30456 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_OVERVIEWCONTROLSGROUP 31256 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_BUTTONPLAY 31556 +#define IDC_RSCDISPLAYCOMMUNITYGUIDE_BUTTONCANCEL 31656 + +//--- RscDisplayArsenal +#define IDC_RSCDISPLAYARSENAL_MOUSEAREA 899 +#define IDC_RSCDISPLAYARSENAL_MOUSEBLOCK 898 +#define IDC_RSCDISPLAYARSENAL_TABS 1800 +#define IDC_RSCDISPLAYARSENAL_FRAMELEFT 1801 +#define IDC_RSCDISPLAYARSENAL_FRAMERIGHT 1802 +#define IDC_RSCDISPLAYARSENAL_LINEICON 1803 +#define IDC_RSCDISPLAYARSENAL_LINETABLEFT 1804 +#define IDC_RSCDISPLAYARSENAL_LINETABLEFTSELECTED 1805 +#define IDC_RSCDISPLAYARSENAL_LINETABRIGHT 1806 +#define IDC_RSCDISPLAYARSENAL_ICON 900 +#define IDC_RSCDISPLAYARSENAL_ICONBACKGROUND 830 +#define IDC_RSCDISPLAYARSENAL_TAB 930 +#define IDC_RSCDISPLAYARSENAL_LIST 960 +#define IDC_RSCDISPLAYARSENAL_SORT 800 +#define IDC_RSCDISPLAYARSENAL_LISTDISABLED 860 +#define IDC_RSCDISPLAYARSENAL_LOAD 990 +#define IDC_RSCDISPLAYARSENAL_LOADCARGO 991 +#define IDC_RSCDISPLAYARSENAL_ARROWLEFT 992 +#define IDC_RSCDISPLAYARSENAL_ARROWRIGHT 993 +#define IDC_RSCDISPLAYARSENAL_BACKGROUNDLEFT 994 +#define IDC_RSCDISPLAYARSENAL_BACKGROUNDRIGHT 995 +#define IDC_RSCDISPLAYARSENAL_MESSAGE 996 + +#define IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON 0 +#define IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON 1 +#define IDC_RSCDISPLAYARSENAL_TAB_HANDGUN 2 +#define IDC_RSCDISPLAYARSENAL_TAB_UNIFORM 3 +#define IDC_RSCDISPLAYARSENAL_TAB_VEST 4 +#define IDC_RSCDISPLAYARSENAL_TAB_BACKPACK 5 +#define IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR 6 +#define IDC_RSCDISPLAYARSENAL_TAB_GOGGLES 7 +#define IDC_RSCDISPLAYARSENAL_TAB_NVGS 8 +#define IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS 9 +#define IDC_RSCDISPLAYARSENAL_TAB_MAP 10 +#define IDC_RSCDISPLAYARSENAL_TAB_GPS 11 +#define IDC_RSCDISPLAYARSENAL_TAB_RADIO 12 +#define IDC_RSCDISPLAYARSENAL_TAB_COMPASS 13 +#define IDC_RSCDISPLAYARSENAL_TAB_WATCH 14 +#define IDC_RSCDISPLAYARSENAL_TAB_FACE 15 +#define IDC_RSCDISPLAYARSENAL_TAB_VOICE 16 +#define IDC_RSCDISPLAYARSENAL_TAB_INSIGNIA 17 +#define IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC 18 +#define IDC_RSCDISPLAYARSENAL_TAB_ITEMACC 19 +#define IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE 20 +#define IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD 25 +#define IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG 21 +#define IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW 22 +#define IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT 23 +#define IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC 24 +#define IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL 26 + +#define IDC_RSCDISPLAYARSENAL_WEAPON_WEAPONBACKGROUND 29489 +#define IDC_RSCDISPLAYARSENAL_WEAPON_WEAPONTEXT 29589 +#define IDC_RSCDISPLAYARSENAL_WEAPON_WEAPON 30789 + +#define IDC_RSCDISPLAYARSENAL_INFO_INFOBACKGROUND 24515 +#define IDC_RSCDISPLAYARSENAL_INFO_INFONAME 24516 +#define IDC_RSCDISPLAYARSENAL_INFO_INFOAUTHOR 24517 +#define IDC_RSCDISPLAYARSENAL_INFO_DLCBACKGROUND 24518 +#define IDC_RSCDISPLAYARSENAL_INFO_DLCICON 24715 +#define IDC_RSCDISPLAYARSENAL_INFO_INFO 25815 + +#define IDC_RSCDISPLAYARSENAL_STATS_STATSBACKGROUND 27347 +#define IDC_RSCDISPLAYARSENAL_STATS_STAT1 27348 +#define IDC_RSCDISPLAYARSENAL_STATS_STAT2 27349 +#define IDC_RSCDISPLAYARSENAL_STATS_STAT3 27350 +#define IDC_RSCDISPLAYARSENAL_STATS_STAT4 27351 +#define IDC_RSCDISPLAYARSENAL_STATS_STAT5 27352 +#define IDC_RSCDISPLAYARSENAL_STATS_STATTEXT1 27353 +#define IDC_RSCDISPLAYARSENAL_STATS_STATTEXT2 27354 +#define IDC_RSCDISPLAYARSENAL_STATS_STATTEXT3 27355 +#define IDC_RSCDISPLAYARSENAL_STATS_STATTEXT4 27356 +#define IDC_RSCDISPLAYARSENAL_STATS_STATTEXT5 27357 +#define IDC_RSCDISPLAYARSENAL_STATS_STATS 28644 + +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_CONTROLBAR 44046 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONSAVE 44146 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONLOAD 44147 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONEXPORT 44148 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONIMPORT 44149 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONRANDOM 44150 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONINTERFACE 44151 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONOK 44346 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONTRY 44347 +#define IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONCLOSE 44448 + +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_TITLE 34619 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_COLUMN1 34620 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_TEXTNAME 34621 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_MAINBACKGROUND 34622 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_COLUMN2 34623 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_COLUMN3 34624 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_COLUMN4 34625 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_COLUMN5 34626 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME 35020 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME 35119 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE 35919 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK 36019 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONCANCEL 36020 +#define IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONDELETE 36021 + +#define IDC_RSCDISPLAYARSENAL_SPACE_SPACEARSENALBACKGROUND 26603 +#define IDC_RSCDISPLAYARSENAL_SPACE_SPACEGARAGEBACKGROUND 26604 +#define IDC_RSCDISPLAYARSENAL_SPACE_SPACEARSENAL 26803 +#define IDC_RSCDISPLAYARSENAL_SPACE_SPACEGARAGE 26804 +#define IDC_RSCDISPLAYARSENAL_SPACE_SPACE 27903 + +//--- RscDisplayGarage +#define IDC_RSCDISPLAYGARAGE_TAB_CAR 0 +#define IDC_RSCDISPLAYGARAGE_TAB_ARMOR 1 +#define IDC_RSCDISPLAYGARAGE_TAB_HELI 2 +#define IDC_RSCDISPLAYGARAGE_TAB_PLANE 3 +#define IDC_RSCDISPLAYGARAGE_TAB_NAVAL 4 +#define IDC_RSCDISPLAYGARAGE_TAB_STATIC 5 + +#define IDC_RSCDISPLAYGARAGE_TAB_SUBCREW 18 //--- Match he numbers with Arsenal right panel IDCs +#define IDC_RSCDISPLAYGARAGE_TAB_SUBANIMATION 19 +#define IDC_RSCDISPLAYGARAGE_TAB_SUBTEXTURE 20 + +#define IDC_RSCDISPLAYGARAGE3DEN_TAB_SUBANIMATION 0 +#define IDC_RSCDISPLAYGARAGE3DEN_TAB_SUBTEXTURE 1 + +//--- RscDisplayCreateJIRAIssue +#define IDC_RSCDISPLAYCREATEJIRAISSUE_BACKGROUND 29997 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_SCREENSHOTPATHTITLE 29998 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_TITLE 30097 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_BUTTONMISSION 30098 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_BUTTONMAP 30099 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_BUTTONOBJECT 30100 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_BUTTONEMPTY 30101 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_SCREENSHOTPATH 30397 +#define IDC_RSCDISPLAYCREATEJIRAISSUE_BUTTONCANCEL 31697 + +//--- RscDisplayDLCContentBrowser - main display +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_TITLEBACKGROUND 37179 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_MAINBACKGROUND 37180 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_TITLE 37099 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_PLAYERSNAME 37100 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONCANCEL 38799 //MUF - todo - was exported, but not added to config +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_LISTGROUP 38400 +//--- RscDisplayDLCContentBrowser - General +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_OVERVIEWBACKGROUND 37101 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_OVERVIEWTEXT 37102 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_TABSBACKGROUND 37106 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_OVERVIEWDLCNAME 37137 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_OVERVIEWPICTURE 37299 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_GENERALGROUP 38399 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONASSETS 38499 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONSINGLEPLAYER 38500 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONMULTIPLAYER 38501 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONFEATURES 38502 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONPURCHASE 38503 +//--- RscDisplayDLCContentBrowser - item template +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMBACKGROUND 37129 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMBACKGROUNDBLACK 37130 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMNAME 37131 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMTEXTSESSIONTIME 37132 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMSESSIONTIME 37133 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMTEXTTOTALTIME 37134 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMTOTALTIME 37135 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMDESCRIPTION 37136 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMPICTURE 37300 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_ITEMPREMIUMICON 37311 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_RSCDISPLAYDLCCONTENTBROWSER_ITEMTEMPLATE 38401 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONTRY 38504 +//--- RscDisplayDLCContentBrowser - dlc selection group +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_KARTSPURCHASED 37103 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_HELIPURCHASED 37104 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_MARKSMENPURCHASED 37105 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_KARTSBACKGROUND 37108 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_KARTSNAME 37109 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_HELIBACKGROUND 37110 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_HELINAME 37111 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_MARKSMENBACKGROUND 37112 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_MARKSMENNAME 37113 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUNDLEBACKGROUND 37114 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUNDLENAME 37115 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_KARTSLOGO 37301 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_HELILOGO 37302 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_MARKSMENLOGO 37303 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUNDLELOGO 37304 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_KARTSOVERLAY 37305 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_HELIOVERLAY 37306 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_MARKSMENOVERLAY 37307 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUNDLEOVERLAY 37308 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLCSELECTIONGROUP 38402 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_APEXBACKGROUND 37116 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_APEXNAME 37117 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_APEXPURCHASED 37118 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_APEXLOGO 37309 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_APEXOVERLAY 37310 + + +//--- GroundSupport_ProcedureVisualization +#define IDC_GROUNDSUPPORT_PROCEDUREVISUALIZATION_PROGRESS 68374 +#define IDC_GROUNDSUPPORT_PROCEDUREVISUALIZATION_TEXT 68375 + +//--- RscDisplaySelectIsland +#define IDC_RSCDISPLAYSELECTISLAND_TITLE 24691 +#define IDC_RSCDISPLAYSELECTISLAND_NAME 24693 +#define IDC_RSCDISPLAYSELECTISLAND_AUTHOR 24694 +#define IDC_RSCDISPLAYSELECTISLAND_NAMEBACKGROUND 24695 +#define IDC_RSCDISPLAYSELECTISLAND_ISLANDPANORAMA 24891 +#define IDC_RSCDISPLAYSELECTISLAND_INTERLACING 24892 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD1 24893 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD2 24894 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD3 24895 +#define IDC_RSCDISPLAYSELECTISLAND_CLOUD4 24896 +#define IDC_RSCDISPLAYSELECTISLAND_ISLANDGROUP 25991 +#define IDC_RSCDISPLAYSELECTISLAND_BUTTONCONTINUE3D 26091 +#define IDC_RSCDISPLAYSELECTISLAND_BUTTONCONTINUE 26291 +#define IDC_RSCDISPLAYSELECTISLAND_BUTTONCANCEL 26391 + +//--- RscDisplayPurchaseNotification +#define IDC_RSCDISPLAYPURCHASENOTIFICATION_TITLE 46662 +#define IDC_RSCDISPLAYPURCHASENOTIFICATION_TEXT 46663 +#define IDC_RSCDISPLAYPURCHASENOTIFICATION_DLCLIST 46762 +#define IDC_RSCDISPLAYPURCHASENOTIFICATION_PNPICTURE 46862 +#define IDC_RSCDISPLAYPURCHASENOTIFICATION_PNCONTROLSGROUP 47962 +#define IDC_RSCDISPLAYPURCHASENOTIFICATION_BUTTONOK 48262 + +//--- RscDiary +#define IDC_TASKTOOLTIP 47060 +#define IDC_TASKTOOLTIP_BACKGROUND 47061 +#define IDC_TASKTOOLTIP_TITLE 47062 +#define IDC_TASKTOOLTIP_SUBTITLE 47063 +#define IDC_TASKTOOLTIP_BUTTON 47064 +#define IDC_TASKTOOLTIP_ASSIGNEDICON 47065 +#define IDC_TASKTOOLTIP_ASSIGNEDCOUNTER 47066 + +//--- RscRespawnControlsGroup +#define IDC_RSCRESPAWNCONTROLS_RESPAWNCONTROLSGROUP 88800 +#define IDC_RSCRESPAWNCONTROLS_LOCBACKGROUND 88802 +#define IDC_RSCRESPAWNCONTROLS_ROLEBACKGROUND 88803 +#define IDC_RSCRESPAWNCONTROLS_GEARBACKGROUND 88804 +#define IDC_RSCRESPAWNCONTROLS_HEADERBACKGROUND 88801 +#define IDC_RSCRESPAWNCONTROLS_BUTTONSPECTATE 88811 +#define IDC_RSCRESPAWNCONTROLS_LOCLIST 88808 +#define IDC_RSCRESPAWNCONTROLS_ROLELIST 88809 +#define IDC_RSCRESPAWNCONTROLS_COUNTERTEXT 88826 +#define IDC_RSCRESPAWNCONTROLS_COUNTER 88806 +#define IDC_RSCRESPAWNCONTROLS_AUTORESPAWN 88830 +#define IDC_RSCRESPAWNCONTROLS_TEAMTEXT 88827 +#define IDC_RSCRESPAWNCONTROLS_TEAM 88805 +#define IDC_RSCRESPAWNCONTROLS_TICKETSTEXT 88828 +#define IDC_RSCRESPAWNCONTROLS_TICKETS 88807 +#define IDC_RSCRESPAWNCONTROLS_HEADERRESPAWNBUTTON 88829 +#define IDC_RSCRESPAWNCONTROLS_WARNING 88831 +#define IDC_RSCRESPAWNCONTROLS_COMBOLOADOUT 88813 +#define IDC_RSCRESPAWNCONTROLS_BUTTONDETAILS 88814 +#define IDC_RSCRESPAWNCONTROLS_BACKGROUNDPRIMARYWEAPON 88822 +#define IDC_RSCRESPAWNCONTROLS_BACKGROUNDSECONDARYWEAPON 88823 +#define IDC_RSCRESPAWNCONTROLS_BACKGROUNDOPTICS 88824 +#define IDC_RSCRESPAWNCONTROLS_BACKGROUNDITEM 88825 +#define IDC_RSCRESPAWNCONTROLS_PICTUREPRIMARYWEAPON 88815 +#define IDC_RSCRESPAWNCONTROLS_PICTURESECONDARYWEAPON 88816 +#define IDC_RSCRESPAWNCONTROLS_PICTUREOPTICS 88817 +#define IDC_RSCRESPAWNCONTROLS_PICTUREITEM 88818 +#define IDC_RSCRESPAWNCONTROLS_LOCTITLE 88819 +#define IDC_RSCRESPAWNCONTROLS_ROLETITLE 88820 +#define IDC_RSCRESPAWNCONTROLS_GEARTITLE 88821 +#define IDC_RSCRESPAWNCONTROLS_LOCDISABLED 88832 +#define IDC_RSCRESPAWNCONTROLS_ROLEDISABLED 88833 +#define IDC_RSCRESPAWNCONTROLS_LOADOUTDISABLED 88834 + +#define IDC_RSCRESPAWNCONTROLS_RESPAWNDETAILSCONTROLSGROUP 88850 +#define IDC_RSCRESPAWNCONTROLS_BACKGROUNDDETAILS 88851 +#define IDC_RSCRESPAWNCONTROLS_DETAILSTITLE 88852 +#define IDC_RSCRESPAWNCONTROLS_BUTTONDETAILSCLOSE 88853 + +#define IDC_RSCRESPAWNCONTROLS_RESPAWNDETAILSLISTCONTROLSGROUP 88860 +#define IDC_RSCRESPAWNCONTROLS_DETAILSLIST 88861 + +#define IDC_RSCRESPAWNCONTROLS_OVERHEADERBACKGROUND 88870 +#define IDC_RSCRESPAWNCONTROLS_OVERHEADERLEFT 88871 +#define IDC_RSCRESPAWNCONTROLS_OVERHEADERRIGHT 88872 + +#define IDC_RSCRESPAWNCONTROLS_REVIVEINFO 88874 +#define IDC_RSCRESPAWNCONTROLS_REVIVEINFO_TITLE 88875 +#define IDC_RSCRESPAWNCONTROLS_REVIVEINFO_OPTION 88876 + +#define IDC_RSCRESPAWNCONTROLS_RESPAWNINFO 88877 +#define IDC_RSCRESPAWNCONTROLS_RESPAWNINFO_TITLE 88878 +#define IDC_RSCRESPAWNCONTROLS_RESPAWNINFO_OPTION 88879 + +//--- RscRevive +#define IDC_RSCREVIVE_REVIVEPROGRESSBACKGROUND 4817 +#define IDC_RSCREVIVE_REVIVEPROGRESS 4818 +#define IDC_RSCREVIVE_REVIVEKEYPROGRESS 4819 +#define IDC_RSCREVIVE_REVIVEBAR 4820 +#define IDC_RSCREVIVE_REVIVETEXT 4917 +#define IDC_RSCREVIVE_REVIVECOUNTDOWN 4918 +#define IDC_RSCREVIVE_REVIVEINFO 4919 +#define IDC_RSCREVIVE_REVIVEKEYBACKGROUND 4920 +#define IDC_RSCREVIVE_REVIVEKEY 4921 +#define IDC_RSCREVIVE_REVIVEMEDIKIT 5017 +#define IDC_RSCREVIVE_REVIVEMEDIKITPROGRESS 5018 +#define IDC_RSCREVIVE_REVIVEDEATH 5019 +#define IDC_RSCREVIVE_REVIVERESPAWN 6117 +#define IDC_RSCREVIVE_REVIVETEXT2 6118 + +//--- DynamicGroups +#define IDC_DYNAMICGROUPS_HEADER 9377 +#define IDC_DYNAMICGROUPS_BACKGROUNDMANAGE 9379 +#define IDC_DYNAMICGROUPS_TEXTPLAYERNAME 9380 +#define IDC_DYNAMICGROUPS_BACKGROUNDGROUPNAME 9381 +#define IDC_DYNAMICGROUPS_BACKGROUNDPLAYERS 9382 +#define IDC_DYNAMICGROUPS_TEXTPLAYERSIDE 9383 +#define IDC_DYNAMICGROUPS_TEXTPLAYERCOUNT 9384 +#define IDC_DYNAMICGROUPS_TEXTPLAYERSCORE 9386 +#define IDC_DYNAMICGROUPS_TEXTPLAYERNAMEFILL 9387 +#define IDC_DYNAMICGROUPS_TEXTPLAYERSIDEFILL 9388 +#define IDC_DYNAMICGROUPS_TEXTPLAYERSCOREFILL 9389 +#define IDC_DYNAMICGROUPS_TEXTPRIVATE 9390 +#define IDC_DYNAMICGROUPS_GROUPICON 9577 +#define IDC_DYNAMICGROUPS_PICTURESIDE 9578 +#define IDC_DYNAMICGROUPS_EDITGROUPNAME 9777 +#define IDC_DYNAMICGROUPS_LISTBOXGROUPS 9877 +#define IDC_DYNAMICGROUPS_LISTBOXMANAGE 9878 +#define IDC_DYNAMICGROUPS_LISTBOXPLAYERS 9880 +#define IDC_DYNAMICGROUPS_BUTTONJOIN 9977 +#define IDC_DYNAMICGROUPS_BUTTONCREATELEAVEKICK 9978 +#define IDC_DYNAMICGROUPS_BUTTONPROMOTEDISBAND 9979 +#define IDC_DYNAMICGROUPS_BUTTONINVITE 9980 +#define IDC_DYNAMICGROUPS_TABBUTTONGROUPS 9981 +#define IDC_DYNAMICGROUPS_TABBUTTONPLAYERS 9983 +#define IDC_DYNAMICGROUPS_SECTIONMANAGE 10677 +#define IDC_DYNAMICGROUPS_SECTIONGROUPS 10679 +#define IDC_DYNAMICGROUPS_CHECKBOXPRIVATE 11177 + +//--- RscHvtPhase +#define IDC_RSCHVTPHASE_PERSISTENT 6610 +#define IDC_RSCHVTPHASE_DYNAMIC 6611 +#define IDC_RSCHVTPHASE_DOWNLOADTITLE 6612 +#define IDC_RSCHVTPHASE_DOWNLOADCONTENT 6613 +#define IDC_RSCHVTPHASE_MULTIPLIER 6614 +#define IDC_RSCHVTPHASE_RANGEBACKGROUND 6615 +#define IDC_RSCHVTPHASE_TIMER 6616 +#define IDC_RSCHVTPHASE_PROGRESSBAR 6620 +#define IDC_RSCHVTPHASE_DOWNLOADSPEED 6621 +#define IDC_RSCHVTPHASE_RANGE 6810 +#define IDC_RSCHVTPHASE_CARRIERPICTURE 6811 +#define IDC_RSCHVTPHASE_DOWNLOAD 7910 + +//--- RscPhaseRules +#define IDC_RSCPHASERULES_PHASE1NUMBER 9131 +#define IDC_RSCPHASERULES_PHASE1TEXT 9132 +#define IDC_RSCPHASERULES_PHASE2TEXT 9133 +#define IDC_RSCPHASERULES_PHASE2NUMBER 9134 +#define IDC_RSCPHASERULES_PHASE3TEXT 9135 +#define IDC_RSCPHASERULES_PHASE3NUMBER 9136 +#define IDC_RSCPHASERULES_PHASE1INFO 9137 +#define IDC_RSCPHASERULES_PHASE2INFO 9138 +#define IDC_RSCPHASERULES_PHASE3INFO 9139 +#define IDC_RSCPHASERULES_PHASERULES 10431 + +//--- RscDisplayEGSpectator +#define IDD_RSCDISPLAYEGSPECTATOR 60492 +#define IDC_RSCDISPLAYEGSPECTATOR_GAMETIMETEXT 42609 +#define IDC_RSCDISPLAYEGSPECTATOR_GAMEPHASETEXT 48610 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEBBACKGROUND 42611 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEATASK 42612 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEABACKGROUND 42613 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEBTASK 42614 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEACOLORBACKGROUND 42615 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEBCOLORBACKGROUND 42616 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEACOLOR 42617 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEBCOLOR 42618 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEAPROGRESSGROUP 48909 +#define IDC_RSCDISPLAYEGSPECTATOR_SIDEBPROGRESSGROUP 43910 +#define IDC_RSCDISPLAYEGSPECTATOR_MOUSEHANDLER 42989 +#define IDC_RSCDISPLAYEGSPECTATOR_TABS 43609 +#define IDC_RSCDISPLAYEGSPECTATOR_LIST 43109 +#define IDC_RSCDISPLAYEGSPECTATOR_LISTGROUP 43909 +#define IDC_RSCDISPLAYEGSPECTATOR_CAMERATYPESBACKGROUND 52610 +#define IDC_RSCDISPLAYEGSPECTATOR_FREE 52809 +#define IDC_RSCDISPLAYEGSPECTATOR_FOLLOW 52810 +#define IDC_RSCDISPLAYEGSPECTATOR_FPS 52811 +#define IDC_RSCDISPLAYEGSPECTATOR_CAMERATYPESGROUP 52909 +#define IDC_RSCDISPLAYEGSPECTATOR_MAP 62609 +#define IDC_RSCDISPLAYEGSPECTATOR_MAPHEADER 62610 +#define IDC_RSCDISPLAYEGSPECTATOR_MAPFOOTER 62611 +#define IDC_RSCDISPLAYEGSPECTATOR_MAPTITLE 62612 +#define IDC_RSCDISPLAYEGSPECTATOR_SPECTATORSCOUNT 62613 +#define IDC_RSCDISPLAYEGSPECTATOR_SPECTATORSICON 62809 +#define IDC_RSCDISPLAYEGSPECTATOR_MAPGROUP 63909 +#define IDC_RSCDISPLAYEGSPECTATOR_HELPBACKGROUND 72812 +#define IDC_RSCDISPLAYEGSPECTATOR_HELP 73189 +#define IDC_RSCDISPLAYEGSPECTATOR_UPPERBACKGROUND 82609 +#define IDC_RSCDISPLAYEGSPECTATOR_NAME 82610 +#define IDC_RSCDISPLAYEGSPECTATOR_LOWERLEFTBACKGROUND 82611 +#define IDC_RSCDISPLAYEGSPECTATOR_LOWERRIGHTBACKGROUND 82612 +#define IDC_RSCDISPLAYEGSPECTATOR_AVATARBACKGROUND 82613 +#define IDC_RSCDISPLAYEGSPECTATOR_KILLS_COUNT 82614 +#define IDC_RSCDISPLAYEGSPECTATOR_LANDKILLS_COUNT 82615 +#define IDC_RSCDISPLAYEGSPECTATOR_ARMOREDKILLS_COUNT 82616 +#define IDC_RSCDISPLAYEGSPECTATOR_AIRKILLS_COUNT 82617 +#define IDC_RSCDISPLAYEGSPECTATOR_DEATHS_COUNT 82618 +#define IDC_RSCDISPLAYEGSPECTATOR_TOTAL_COUNT 82619 +#define IDC_RSCDISPLAYEGSPECTATOR_AVATAR 82809 +#define IDC_RSCDISPLAYEGSPECTATOR_UNITTYPE 82810 +#define IDC_RSCDISPLAYEGSPECTATOR_KILLS 82811 +#define IDC_RSCDISPLAYEGSPECTATOR_LANDKILLS 82812 +#define IDC_RSCDISPLAYEGSPECTATOR_ARMOREDKILLS 82813 +#define IDC_RSCDISPLAYEGSPECTATOR_AIRKILLS 82814 +#define IDC_RSCDISPLAYEGSPECTATOR_DEATHS 82815 +#define IDC_RSCDISPLAYEGSPECTATOR_TOTAL 82816 +#define IDC_RSCDISPLAYEGSPECTATOR_WEAPONPICTURE 82817 +#define IDC_RSCDISPLAYEGSPECTATOR_VEHICLETYPE 82818 +#define IDC_RSCDISPLAYEGSPECTATOR_FOCUSINFO 83909 + +//--- RscEGProgress +#define IDC_RSCEGPROGRESS_DOWNLOADICONBACKGROUND 9170 +#define IDC_RSCEGPROGRESS_OBJECTIVELETTER 9171 +#define IDC_RSCEGPROGRESS_ACTIVITYBACKGROUND 9172 +#define IDC_RSCEGPROGRESS_PROGRESSBARBACKGROUND 9173 +#define IDC_RSCEGPROGRESS_TITLE 9174 +#define IDC_RSCEGPROGRESS_PROGRESSBAR 9180 +#define IDC_RSCEGPROGRESS_OBJECTIVEBACKGROUND 9370 +#define IDC_RSCEGPROGRESS_ACTIVITY 9372 +#define IDC_RSCEGPROGRESS_DOWNLOADICON 9374 +#define IDC_RSCEGPROGRESS_OBJECTIVEBACKGROUNDCOLOURED 9375 +#define IDC_RSCEGPROGRESS_DOWNLOAD 9376 + +//--- RscDisplayQuickPlay +#define IDC_RSCDISPLAYQUICKPLAY_TITLE 18702 +#define IDC_RSCDISPLAYQUICKPLAY_PLAYERSNAME 18703 +#define IDC_RSCDISPLAYQUICKPLAY_MODTEXT 18704 +#define IDC_RSCDISPLAYQUICKPLAY_CONTENTBACKGROUND 18705 +#define IDC_RSCDISPLAYQUICKPLAY_MAXPINGTEXT 18706 +#define IDC_RSCDISPLAYQUICKPLAY_BESTMATCHTEXT 18707 +#define IDC_RSCDISPLAYQUICKPLAY_MODBACKGROUND 18708 +#define IDC_RSCDISPLAYQUICKPLAY_GAMETYPEDESCRIPTION 18713 +#define IDC_RSCDISPLAYQUICKPLAY_GAMETYPETITLEBACKGROUND 18714 +#define IDC_RSCDISPLAYQUICKPLAY_GAMETYPETITLE 18715 +#define IDC_RSCDISPLAYQUICKPLAY_GAMETYPEOVERVIEW 18903 +#define IDC_RSCDISPLAYQUICKPLAY_GAMETYPEDESCRIPTIONBACKGROUND 18904 +#define IDC_RSCDISPLAYQUICKPLAY_MODICON 18905 +#define IDC_RSCDISPLAYQUICKPLAY_CONTENT 20002 +#define IDC_RSCDISPLAYQUICKPLAY_BUTTONBACK 20402 + +//--- RscDisplayCampaignLobby (Scripted campaign lobby) +#define IDD_CAMPAIGN_LOBBY 50000 +#define IDC_CAMPAIGN_LOBBY_BACKGROUND_FULL_GROUP 51000 +#define IDC_CAMPAIGN_LOBBY_BACKGROUND_GROUP 51100 +#define IDC_CAMPAIGN_LOBBY_BACKGROUND_LOADING_GROUP 51200 +#define IDC_CAMPAIGN_LOBBY_BACKGROUND_BORDER_GROUP 51300 +#define IDC_CAMPAIGN_LOBBY_TABLET_GROUP 52000 +#define IDC_CAMPAIGN_LOBBY_TABLET_BUTTON_GROUP 52100 +#define IDC_CAMPAIGN_LOBBY_TABLET_BUTTON_SEARCH_GROUP 52200 +#define IDC_CAMPAIGN_LOBBY_TABLET_BUTTON_SETTINGS_GROUP 52300 +#define IDC_CAMPAIGN_LOBBY_TABLET_BUTTON_RESPAWN_GROUP 52400 +#define IDC_CAMPAIGN_LOBBY_TABLET_BUTTON_REVIVE_GROUP 52500 +#define IDC_CAMPAIGN_LOBBY_TABLET_MILITARY_GROUP 52600 +#define IDC_CAMPAIGN_LOBBY_MAIN_GROUP 53000 +#define IDC_CAMPAIGN_LOBBY_CTRG_TREE_GROUP 53100 +#define IDC_CAMPAIGN_LOBBY_CTRG_TREE_HEADER_GROUP 53200 +#define IDC_CAMPAIGN_LOBBY_CTRG_TREE_STRUCTURE_GROUP 53300 +#define IDC_CAMPAIGN_LOBBY_CTRG_TREE_OPTION_CORE_GROUP 53400 +#define IDC_CAMPAIGN_LOBBY_CTRG_TREE_OPTION_GROUP 53500 +#define IDC_CAMPAIGN_LOBBY_LOGIN_GROUP 54100 +#define IDC_CAMPAIGN_LOBBY_ACCESS_KEY_GROUP 54200 +#define IDC_CAMPAIGN_LOBBY_MISSION_GROUP 54300 +#define IDC_CAMPAIGN_LOBBY_MISSION_VIDEO_GROUP 54400 +#define IDC_CAMPAIGN_LOBBY_MISSION_INTEL_GROUP 54500 +#define IDC_CAMPAIGN_LOBBY_MISSION_OVERLAY_GROUP 54600 +#define IDC_CAMPAIGN_LOBBY_MISSION_PLAYER_CORE_GROUP 55000 +#define IDC_CAMPAIGN_LOBBY_MISSION_PLAYER_GROUP 55100 +#define IDC_CAMPAIGN_LOBBY_PROGRESS_GROUP 56000 +#define IDC_CAMPAIGN_LOBBY_OVERLAY_GROUP 57000 + +// RscDisplayDLCContentBrowser +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_PICTUREBACKGROUND 2000 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_PICTURE 2001 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_VIDEOGROUP 2002 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_VIDEO 2003 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_ICON 2004 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_LINEL 2005 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_LINER 2006 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_LINET 2007 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_LINEB 2008 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_BUTTON 2009 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_TITLE 2010 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLC_HOVER 2011 + +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_MOUSEAREA 999 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLCGROUP 1001 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_DLCBACKGROUND 1002 +#define IDC_RSCDISPLAYDLCCONTENTBROWSER_BUTTONBACKGROUND 1003 + +//--- RscDisplayDLCPreview_List +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_BACKGROUND 31263 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_INFOTITLE 31264 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_BACKGROUNDBOTTOM 31266 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_INFO 31363 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_INFOSTATS 31364 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREANIM 31463 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTURE 31464 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_BROWSEPREV 31465 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_BROWSENEXT 31466 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREANIMOVERLAY 31467 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREOVERLAY 31468 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREANIMOVERLAYICON 31469 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREOVERLAYICON 31470 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREBACKGROUND 31471 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREANIMBACKGROUND 31472 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTUREGROUP 32563 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_PICTURELISTGROUP 32564 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_INFOGROUP 32565 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_BUTTONTRY 32663 +#define IDC_RSCDISPLAYDLCPREVIEW_LIST_BUTTONPURCHASE 32664 + +//--- RscDisplayDLCPreview_ListItem +#define IDC_RSCDISPLAYDLCPREVIEW_LISTITEM_SELECT 41883 +#define IDC_RSCDISPLAYDLCPREVIEW_LISTITEM_HOVER 41884 +#define IDC_RSCDISPLAYDLCPREVIEW_LISTITEM_PICTURE 42083 +#define IDC_RSCDISPLAYDLCPREVIEW_LISTITEM_SESSIONNOTIFICATION 42084 +#define IDC_RSCDISPLAYDLCPREVIEW_LISTITEM_BACKGROUND 42085 +#define IDC_RSCDISPLAYDLCPREVIEW_LISTITEM_BUTTON 42483 +#define IDC_RSCDISPLAYDLCPREVIEW_LISTITEM_RSCDISPLAYDLCPREVIEW_LISTITEM 43183 + +//--- RscDisplayDLCPreview +#define IDC_RSCDISPLAYDLCPREVIEW_BACKGROUND 1001 +#define IDC_RSCDISPLAYDLCPREVIEW_LOGO 1002 +#define IDC_RSCDISPLAYDLCPREVIEW_OVERVIEW 1003 +#define IDC_RSCDISPLAYDLCPREVIEW_PREVIEWGROUP 1004 +#define IDC_RSCDISPLAYDLCPREVIEW_PREVIEWBACKGROUND 1005 +#define IDC_RSCDISPLAYDLCPREVIEW_BUTTONBACKGROUND 1006 +#define IDC_RSCDISPLAYDLCPREVIEW_BUTTONPURCHASE 1007 +#define IDC_RSCDISPLAYDLCPREVIEW_AUTHOR 1008 +#define IDC_RSCDISPLAYDLCPREVIEW_LISTGROUP 1009 +#define IDC_RSCDISPLAYDLCPREVIEW_BOHEMIA 1010 + +//--- RscDisplayTimeline +#define IDD_RSCDISPLAYTIMELINE 15000 + +//--- RscDisplayTimeline +#define IDC_RSCDISPLAYTIMELINE_BACKGROUND 16985 +#define IDC_RSCDISPLAYTIMELINE_TEXTTIME 17085 +#define IDC_RSCDISPLAYTIMELINE_TEXTPLAYRATE 17086 +#define IDC_RSCDISPLAYTIMELINE_BUTTONPLAYFORWARD 17585 +#define IDC_RSCDISPLAYTIMELINE_BUTTONPLAYBACKWARD 17586 +#define IDC_RSCDISPLAYTIMELINE_BUTTONPAUSE 17587 +#define IDC_RSCDISPLAYTIMELINE_BUTTONDECREASEPLAYRATE 17588 +#define IDC_RSCDISPLAYTIMELINE_BUTTONINCREASEPLAYRATE 17589 +#define IDC_RSCDISPLAYTIMELINE_LIST 18085 +#define IDC_RSCDISPLAYTIMELINE_TIMELINECONTROLS 18285 diff --git a/include/x/cba/addons/main/$PBOPREFIX$ b/include/x/cba/addons/main/$PBOPREFIX$ new file mode 100644 index 0000000000..835b0c9a07 --- /dev/null +++ b/include/x/cba/addons/main/$PBOPREFIX$ @@ -0,0 +1 @@ +x\cba\addons\main \ No newline at end of file diff --git a/tools/cba/addons/main/script_macros_common.hpp b/include/x/cba/addons/main/script_macros_common.hpp similarity index 93% rename from tools/cba/addons/main/script_macros_common.hpp rename to include/x/cba/addons/main/script_macros_common.hpp index a847909490..4efb3c7128 100644 --- a/tools/cba/addons/main/script_macros_common.hpp +++ b/include/x/cba/addons/main/script_macros_common.hpp @@ -354,6 +354,27 @@ Author: ------------------------------------------- */ #define MESSAGE_WITH_TITLE(TITLE,MESSAGE) LOG_SYS_FILELINENUMBERS(TITLE,MESSAGE) +/* ------------------------------------------- +Macro: RETDEF() + If a variable is undefined, return the default value. Otherwise, return the + variable itself. + +Parameters: + VARIABLE - the variable to check + DEFAULT_VALUE - the default value to use if variable is undefined + +Example: + (begin example) + // _var is undefined + hintSilent format ["_var=%1", RETDEF(_var,5)]; // "_var=5" + _var = 7; + hintSilent format ["_var=%1", RETDEF(_var,5)]; // "_var=7" + (end example) +Author: + 654wak654 +------------------------------------------- */ +#define RETDEF(VARIABLE,DEFAULT_VALUE) (if (isNil {VARIABLE}) then [{DEFAULT_VALUE}, {VARIABLE}]) + /* ------------------------------------------- Macro: RETNIL() If a variable is undefined, return the value nil. Otherwise, return the @@ -365,13 +386,13 @@ Parameters: Example: (begin example) // _var is undefined - hintSilent format ["_var=%1", RETNIL(_var) ]; // "_var=any" + hintSilent format ["_var=%1", RETNIL(_var)]; // "_var=any" (end example) Author: Alef (see CBA issue #8514) ------------------------------------------- */ -#define RETNIL(VARIABLE) if (isNil{VARIABLE}) then {nil} else {VARIABLE} +#define RETNIL(VARIABLE) RETDEF(VARIABLE,nil) /* ------------------------------------------- Macros: TRACE_n() @@ -457,8 +478,8 @@ Group: General // ************************************* // Internal Functions -#define DOUBLES(var1,var2) ##var1##_##var2 -#define TRIPLES(var1,var2,var3) ##var1##_##var2##_##var3 +#define DOUBLES(var1,var2) var1##_##var2 +#define TRIPLES(var1,var2,var3) var1##_##var2##_##var3 #define QUOTE(var1) #var1 #ifdef MODULAR @@ -712,29 +733,29 @@ Examples: Author: Sickboy ------------------------------------------- */ -#define ISNILS(VARIABLE,DEFAULT_VALUE) if (isNil #VARIABLE) then { ##VARIABLE = ##DEFAULT_VALUE } +#define ISNILS(VARIABLE,DEFAULT_VALUE) if (isNil #VARIABLE) then { VARIABLE = DEFAULT_VALUE } #define ISNILS2(var1,var2,var3,var4) ISNILS(TRIPLES(var1,var2,var3),var4) #define ISNILS3(var1,var2,var3) ISNILS(DOUBLES(var1,var2),var3) #define ISNIL(var1,var2) ISNILS2(PREFIX,COMPONENT,var1,var2) #define ISNILMAIN(var1,var2) ISNILS3(PREFIX,var1,var2) -#define CREATELOGICS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"] -#define CREATELOGICLOCALS(var1,var2) ##var1##_##var2## = "LOGIC" createVehicleLocal [0, 0, 0] -#define CREATELOGICGLOBALS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]; publicVariable QUOTE(DOUBLES(var1,var2)) -#define CREATELOGICGLOBALTESTS(var1,var2) ##var1##_##var2## = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit [QUOTE(DOUBLES(ADDON,logic)), [0, 0, 0], [], 0, "NONE"] +#define CREATELOGICS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"] +#define CREATELOGICLOCALS(var1,var2) var1##_##var2 = "LOGIC" createVehicleLocal [0, 0, 0] +#define CREATELOGICGLOBALS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit ["LOGIC", [0, 0, 0], [], 0, "NONE"]; publicVariable QUOTE(DOUBLES(var1,var2)) +#define CREATELOGICGLOBALTESTS(var1,var2) var1##_##var2 = ([sideLogic] call CBA_fnc_getSharedGroup) createUnit [QUOTE(DOUBLES(ADDON,logic)), [0, 0, 0], [], 0, "NONE"] -#define GETVARS(var1,var2,var3) (##var1##_##var2 getVariable #var3) +#define GETVARS(var1,var2,var3) (var1##_##var2 getVariable #var3) #define GETVARMAINS(var1,var2) GETVARS(var1,MAINLOGIC,var2) #ifndef PATHTO_SYS - #define PATHTO_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3.sqf + #define PATHTO_SYS(var1,var2,var3) \MAINPREFIX\var1\SUBPREFIX\var2\var3.sqf #endif #ifndef PATHTOF_SYS - #define PATHTOF_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3 + #define PATHTOF_SYS(var1,var2,var3) \MAINPREFIX\var1\SUBPREFIX\var2\var3 #endif #ifndef PATHTOF2_SYS - #define PATHTOF2_SYS(var1,var2,var3) MAINPREFIX\##var1\SUBPREFIX\##var2\##var3 + #define PATHTOF2_SYS(var1,var2,var3) MAINPREFIX\var1\SUBPREFIX\var2\var3 #endif #define PATHTO_R(var1) PATHTOF2_SYS(PREFIX,COMPONENT_C,var1) @@ -760,9 +781,9 @@ Author: #define COMPILE_FILE_SYS(var1,var2,var3) COMPILE_FILE2_SYS('PATHTO_SYS(var1,var2,var3)') #define COMPILE_FILE_CFG_SYS(var1,var2,var3) COMPILE_FILE2_CFG_SYS('PATHTO_SYS(var1,var2,var3)') -#define SETVARS(var1,var2) ##var1##_##var2 setVariable +#define SETVARS(var1,var2) var1##_##var2 setVariable #define SETVARMAINS(var1) SETVARS(var1,MAINLOGIC) -#define GVARMAINS(var1,var2) ##var1##_##var2## +#define GVARMAINS(var1,var2) var1##_##var2 #define CFGSETTINGSS(var1,var2) configFile >> "CfgSettings" >> #var1 >> #var2 //#define SETGVARS(var1,var2,var3) ##var1##_##var2##_##var3 = //#define SETGVARMAINS(var1,var2) ##var1##_##var2 = @@ -773,9 +794,9 @@ Author: // #define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = { ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4)); if (isNil "_this") then { call ##var1##_##var2##_fnc_##var4 } else { _this call ##var1##_##var2##_fnc_##var4 } } // Compile-Once, at Macro. As opposed to Compile-Once, on first use. -#define PREPMAIN_SYS(var1,var2,var3) ##var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)) -#define PREP_SYS(var1,var2,var3) ##var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)) -#define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4)) +#define PREPMAIN_SYS(var1,var2,var3) var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)) +#define PREP_SYS(var1,var2,var3) var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)) +#define PREP_SYS2(var1,var2,var3,var4) var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4)) #define LSTR(var1) TRIPLES(ADDON,STR,var1) @@ -867,7 +888,7 @@ Author: #define GETVAR(var1) GETVARS(PREFIX,COMPONENT,var1) #define SETVAR SETVARS(PREFIX,COMPONENT) #define SETVARMAIN SETVARMAINS(PREFIX) -#define IFCOUNT(var1,var2,var3) if (count ##var1 > ##var2) then { ##var3 = ##var1 select ##var2 }; +#define IFCOUNT(var1,var2,var3) if (count var1 > var2) then { var3 = var1 select var2 }; //#define PREP(var1) PREP_SYS(PREFIX,COMPONENT_F,var1) @@ -1039,7 +1060,7 @@ Parameters: Author: Spooner ------------------------------------------- */ -#define IS_META_SYS(VAR,TYPE) (if (isNil {VAR}) then { false } else { (VAR) isEqualType TYPE }) +#define IS_META_SYS(VAR,TYPE) (if (isNil {VAR}) then {false} else {(VAR) isEqualType TYPE}) #define IS_ARRAY(VAR) IS_META_SYS(VAR,[]) #define IS_BOOL(VAR) IS_META_SYS(VAR,false) #define IS_CODE(VAR) IS_META_SYS(VAR,{}) @@ -1057,10 +1078,10 @@ Author: #define IS_BOOLEAN(VAR) IS_BOOL(VAR) #define IS_FUNCTION(VAR) IS_CODE(VAR) -#define IS_INTEGER(VAR) if ( IS_SCALAR(VAR) ) then { (floor(VAR) == (VAR)) } else { false } +#define IS_INTEGER(VAR) (if (IS_SCALAR(VAR)) then {floor (VAR) == (VAR)} else {false}) #define IS_NUMBER(VAR) IS_SCALAR(VAR) -#define FLOAT_TO_STRING(num) (str parseNumber (str (_this%_this) + str floor abs _this) + "." + (str (abs _this-floor abs _this) select [2]) + "0") +#define FLOAT_TO_STRING(num) (if (_this == 0) then {"0"} else {str parseNumber (str (_this % _this) + str floor abs _this) + "." + (str (abs _this - floor abs _this) select [2]) + "0"}) /* ------------------------------------------- Macro: SCRIPT() @@ -1173,6 +1194,9 @@ Author: #define ELSTRING(var1,var2) QUOTE(TRIPLES(STR,DOUBLES(PREFIX,var1),var2)) #define CSTRING(var1) QUOTE(TRIPLES($STR,ADDON,var1)) #define ECSTRING(var1,var2) QUOTE(TRIPLES($STR,DOUBLES(PREFIX,var1),var2)) + + #define LLSTRING(var1) localize QUOTE(TRIPLES(STR,ADDON,var1)) + #define LELSTRING(var1,var2) localize QUOTE(TRIPLES(STR,DOUBLES(PREFIX,var1),var2)) #endif @@ -1683,7 +1707,8 @@ Example: Author: commy2 ------------------------------------------- */ -#define IS_ADMIN serverCommandAvailable "#kick" +#define IS_ADMIN_SYS(x) x##kick +#define IS_ADMIN serverCommandAvailable 'IS_ADMIN_SYS(#)' /* ------------------------------------------- Macro: IS_ADMIN_LOGGED @@ -1703,4 +1728,38 @@ Example: Author: commy2 ------------------------------------------- */ -#define IS_ADMIN_LOGGED serverCommandAvailable "#shutdown" +#define IS_ADMIN_LOGGED_SYS(x) x##shutdown +#define IS_ADMIN_LOGGED serverCommandAvailable 'IS_ADMIN_LOGGED_SYS(#)' + +/* ------------------------------------------- +Macro: FILE_EXISTS + Check if a file exists on machines with interface + + Reports "false" if the file does not exist and throws an error in RPT. + +Parameters: + FILE - Path to the file + +Example: + (begin example) + // print "true" if file exists + systemChat str FILE_EXISTS("\A3\ui_f\data\igui\cfg\cursors\weapon_ca.paa"); + (end) + +Author: + commy2 +------------------------------------------- */ +#define FILE_EXISTS(FILE) (call {\ + private _return = false;\ + isNil {\ + private _control = (uiNamespace getVariable ["RscDisplayMain", displayNull]) ctrlCreate ["RscHTML", -1];\ + if (isNull _control) then {\ + _return = loadFile (FILE) != "";\ + } else {\ + _control htmlLoad (FILE);\ + _return = ctrlHTMLLoaded _control;\ + ctrlDelete _control;\ + };\ + };\ + _return\ +}) diff --git a/include/x/cba/addons/xeh/$PBOPREFIX$ b/include/x/cba/addons/xeh/$PBOPREFIX$ new file mode 100644 index 0000000000..45339387f4 --- /dev/null +++ b/include/x/cba/addons/xeh/$PBOPREFIX$ @@ -0,0 +1 @@ +x\cba\addons\xeh \ No newline at end of file diff --git a/include/x/cba/addons/xeh/script_xeh.hpp b/include/x/cba/addons/xeh/script_xeh.hpp new file mode 100644 index 0000000000..6fe7465203 --- /dev/null +++ b/include/x/cba/addons/xeh/script_xeh.hpp @@ -0,0 +1,110 @@ +/* + Header: script_xeh.hpp + + Description: + Used internally. +*/ +///////////////////////////////////////////////////////////////////////////////// +// MACRO: EXTENDED_EVENTHANDLERS +// Add all XEH event handlers +///////////////////////////////////////////////////////////////////////////////// + +#define EXTENDED_EVENTHANDLERS init = "call cba_xeh_fnc_init"; \ +fired = "call cba_xeh_fnc_fired"; \ +animChanged = "call cba_xeh_fnc_animChanged"; \ +animDone = "call cba_xeh_fnc_animDone"; \ +animStateChanged = "call cba_xeh_fnc_animStateChanged"; \ +containerClosed = "call cba_xeh_fnc_containerClosed"; \ +containerOpened = "call cba_xeh_fnc_containerOpened"; \ +controlsShifted = "call cba_xeh_fnc_controlsShifted"; \ +dammaged = "call cba_xeh_fnc_dammaged"; \ +engine = "call cba_xeh_fnc_engine"; \ +epeContact = "call cba_xeh_fnc_epeContact"; \ +epeContactEnd = "call cba_xeh_fnc_epeContactEnd"; \ +epeContactStart = "call cba_xeh_fnc_epeContactStart"; \ +explosion = "call cba_xeh_fnc_explosion"; \ +firedNear = "call cba_xeh_fnc_firedNear"; \ +fuel = "call cba_xeh_fnc_cba_xeh_fuel"; \ +gear = "call cba_xeh_fnc_gear"; \ +getIn = "call cba_xeh_fnc_getIn"; \ +getInMan = "call cba_xeh_fnc_getInMan"; \ +getOut = "call cba_xeh_fnc_getOut"; \ +getOutMan = "call cba_xeh_fnc_getOutMan"; \ +handleHeal = "call cba_xeh_fnc_handleHeal"; \ +hit = "call cba_xeh_fnc_hit"; \ +hitPart = "call cba_xeh_fnc_hitPart"; \ +incomingMissile = "call cba_xeh_fnc_incomingMissile"; \ +inventoryClosed = "call cba_xeh_fnc_inventoryClosed"; \ +inventoryOpened = "call cba_xeh_fnc_inventoryOpened"; \ +killed = "call cba_xeh_fnc_killed"; \ +landedTouchDown = "call cba_xeh_fnc_landedTouchDown"; \ +landedStopped = "call cba_xeh_fnc_landedStopped"; \ +local = "call cba_xeh_fnc_local"; \ +respawn = "call cba_xeh_fnc_respawn"; \ +put = "call cba_xeh_fnc_put"; \ +take = "call cba_xeh_fnc_take"; \ +seatSwitched = "call cba_xeh_fnc_seatSwitched"; \ +seatSwitchedMan = "call cba_xeh_fnc_seatSwitchedMan"; \ +soundPlayed = "call cba_xeh_fnc_soundPlayed"; \ +weaponAssembled = "call cba_xeh_fnc_weaponAssembled"; \ +weaponDisassembled = "call cba_xeh_fnc_weaponDisassembled"; \ +weaponDeployed = "call cba_xeh_fnc_weaponDeployed"; \ +weaponRested = "call cba_xeh_fnc_weaponRested"; \ +reloaded = "call cba_xeh_fnc_reloaded"; \ +firedMan = "call cba_xeh_fnc_firedMan"; \ +turnIn = "call cba_xeh_fnc_turnIn"; \ +turnOut = "call cba_xeh_fnc_turnOut"; \ +deleted = "call cba_xeh_fnc_deleted"; + +/* + MACRO: DELETE_EVENTHANDLERS + + Removes all event handlers. +*/ + +#define DELETE_EVENTHANDLERS init = ""; \ +fired = ""; \ +animChanged = ""; \ +animDone = ""; \ +animStateChanged = ""; \ +containerClosed = ""; \ +containerOpened = ""; \ +controlsShifted = ""; \ +dammaged = ""; \ +engine = ""; \ +epeContact = ""; \ +epeContactEnd = ""; \ +epeContactStart = ""; \ +explosion = ""; \ +firedNear = ""; \ +fuel = ""; \ +gear = ""; \ +getIn = ""; \ +getInMan = ""; \ +getOut = ""; \ +getOutMan = ""; \ +handleHeal = ""; \ +hit = ""; \ +hitPart = ""; \ +incomingMissile = ""; \ +inventoryClosed = ""; \ +inventoryOpened = ""; \ +killed = ""; \ +landedTouchDown = ""; \ +landedStopped = ""; \ +local = ""; \ +respawn = ""; \ +put = ""; \ +take = ""; \ +seatSwitched = ""; \ +seatSwitchedMan = ""; \ +soundPlayed = ""; \ +weaponAssembled = ""; \ +weaponDisassembled = ""; \ +weaponDeployed = ""; \ +weaponRested = ""; \ +reloaded = ""; \ +firedMan = ""; \ +turnIn = ""; \ +turnOut = ""; \ +deleted = ""; diff --git a/mod.cpp b/mod.cpp index b23f34ab79..23815ce82e 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.12.3"; +name = "Advanced Combat Environment 0.0.0"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.12.3"; +description = "ACE3 - Version 0.0.0"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; diff --git a/optionals/compat_adr_97/$PBOPREFIX$ b/optionals/compat_adr_97/$PBOPREFIX$ deleted file mode 100644 index 55c01af3d5..0000000000 --- a/optionals/compat_adr_97/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\compat_adr_90 \ No newline at end of file diff --git a/optionals/compat_adr_97/CfgAmmo.hpp b/optionals/compat_adr_97/CfgAmmo.hpp deleted file mode 100644 index 32d4deb076..0000000000 --- a/optionals/compat_adr_97/CfgAmmo.hpp +++ /dev/null @@ -1,14 +0,0 @@ -class CfgAmmo { - class BulletBase; - class B_570x28_Ball: BulletBase { - ACE_caliber = 5.7; - ACE_bulletLength = 21.6; // http://blog.thejustnation.org/2011/04/5-7x28mm-ammo-review/ - ACE_bulletMass = 2; // based on the SS190 - ACE_ballisticCoefficients[] = {0.177}; //http://m.delphiforums.com/autogun/messages/5267/7 - ACE_velocityBoundaries[] = {}; - ACE_standardAtmosphere = "ASM"; // 50/50 chance to get it right - ACE_dragModel = 7; - ACE_muzzleVelocities[] = {716,776}; - ACE_barrelLengths[] = {264,407}; - }; -}; diff --git a/optionals/compat_adr_97/CfgMagazines.hpp b/optionals/compat_adr_97/CfgMagazines.hpp deleted file mode 100644 index fe88f128fd..0000000000 --- a/optionals/compat_adr_97/CfgMagazines.hpp +++ /dev/null @@ -1,7 +0,0 @@ -class CfgMagazines { - class CA_Magazine; - class 50Rnd_570x28_SMG_03: CA_Magazine { - displayName = CSTRING(P90_Mag_Name); - descriptionShort = CSTRING(P90_Mag_DescriptionShort); - }; -}; \ No newline at end of file diff --git a/optionals/compat_adr_97/CfgWeapons.hpp b/optionals/compat_adr_97/CfgWeapons.hpp deleted file mode 100644 index 5756ed0394..0000000000 --- a/optionals/compat_adr_97/CfgWeapons.hpp +++ /dev/null @@ -1,67 +0,0 @@ -class CfgWeapons { - - class Rifle_Base_F; - class SMG_03_TR_BASE: Rifle_Base_F { - ACE_barrelTwist = 228.6; // 1:9 inch twist - ACE_barrelLength = 407; - ACE_twistDirection = 1; - modes[]= { - "Single" - }; - }; - class SMG_03_TR_black: SMG_03_TR_BASE{ - displayName = CSTRING(PS90_TR_Black_Name); - }; - class SMG_03_TR_khaki: SMG_03_TR_black { - displayName = CSTRING(PS90_TR_Khaki_Name); - }; - class SMG_03_TR_camo: SMG_03_TR_black { - displayName = CSTRING(PS90_TR_Camo_Name); - }; - class SMG_03_TR_hex: SMG_03_TR_BASE { - displayName = CSTRING(PS90_TR_Hex_Name); - }; - class SMG_03_black: SMG_03_TR_BASE { - displayName = CSTRING(PS90_Black_Name); - }; - class SMG_03_khaki: SMG_03_black { - displayName = CSTRING(PS90_Khaki_Name); - }; - class SMG_03_camo: SMG_03_black { - displayName = CSTRING(PS90_Camo_Name); - }; - class SMG_03_hex: SMG_03_black { - displayName = CSTRING(PS90_Hex_Name); - }; - class SMG_03C_BASE: SMG_03_TR_BASE { - ACE_barrelLength = 264; - modes[]= { - "Single", - "FullAuto" - }; - }; - class SMG_03C_TR_black: SMG_03C_BASE { - displayName = CSTRING(P90_TR_Black_Name); - }; - class SMG_03C_TR_khaki: SMG_03C_TR_black { - displayName = CSTRING(P90_TR_Khaki_Name); - }; - class SMG_03C_TR_camo: SMG_03C_TR_black { - displayName = CSTRING(P90_TR_Camo_Name); - }; - class SMG_03C_TR_hex: SMG_03C_TR_black { - displayName = CSTRING(P90_TR_Hex_Name); - }; - class SMG_03C_black: SMG_03C_Base { - displayName = CSTRING(P90_Black_Name); - }; - class SMG_03C_khaki: SMG_03C_black { - displayName = CSTRING(P90_Khaki_Name); - }; - class SMG_03C_camo: SMG_03C_black { - displayName = CSTRING(P90_Camo_Name); - }; - class SMG_03C_hex: SMG_03C_black { - displayName = CSTRING(P90_Hex_Name); - }; -}; diff --git a/optionals/compat_adr_97/meta.cpp b/optionals/compat_adr_97/meta.cpp deleted file mode 100644 index 8ec81b90ab..0000000000 --- a/optionals/compat_adr_97/meta.cpp +++ /dev/null @@ -1,2 +0,0 @@ -protocol = 1; -publishedid = 773136286; diff --git a/optionals/compat_adr_97/script_component.hpp b/optionals/compat_adr_97/script_component.hpp deleted file mode 100644 index 200b189b42..0000000000 --- a/optionals/compat_adr_97/script_component.hpp +++ /dev/null @@ -1,6 +0,0 @@ -#define COMPONENT compat_adr_97 -#define COMPONENT_BEAUTIFIED ADR-97 Compatibility - -#include "\z\ace\addons\main\script_mod.hpp" - -#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/compat_adr_97/stringtable.xml b/optionals/compat_adr_97/stringtable.xml deleted file mode 100644 index 698aafaacb..0000000000 --- a/optionals/compat_adr_97/stringtable.xml +++ /dev/null @@ -1,293 +0,0 @@ - - - - - P90 TR (Black) - P90 TR (Černá) - P90 TR (Noir) - P90 TR (Negro) - P90 TR (Чёрный) - P90 TR (czarny) - P90 TR (Schwarz) - P90 TR (Nero) - P90 TR (Fekete) - P90 TR (Preto) - P90 TR (ブラック) - P90 TR (黑色) - P90 TR (黑色) - P90 TR (Black) - - - P90 TR (Khaki) - P90 TR (Khaki) - P90 TR (Kaki) - P90 TR (Caqui) - P90 TR (Хаки) - P90 TR (khaki) - P90 TR (Khaki) - P90 TR (Khaki) - P90 TR (Khaki) - P90 TR (Caqui) - P90 TR (カーキ) - P90 TR (沙色) - P90 TR (沙色) - P90 TR (Khaki) - - - P90 TR (Camo) - P90 TR (Kamufláž) - P90 TR (Camo) - P90 TR (Camuflaje) - P90 TR (Камо) - P90 TR (kamuflaż) - P90 TR (Camo) - P90 TR (Camo) - P90 TR (Terepmintás) - P90 TR (Camuflagem) - P90 TR (カモフラージュ) - P90 TR (迷彩) - P90 TR (迷彩) - P90 TR (Camo) - - - P90 TR (Hex) - P90 TR (Hex) - P90 TR (Hex) - P90 TR (Hex) - P90 TR (Гекс) - P90 TR (Hex) - P90 TR (hex) - P90 TR (Hex) - P90 TR (Hex) - P90 TR (Hex) - P90 TR (ヘックス) - P90 TR (數位蜂巢迷彩) - P90 TR (数位蜂巢迷彩) - P90 TR (Hex) - - - P90 (Black) - P90 (Černá) - P90 (Noir) - P90 (Negro) - P90 (Чёрный) - P90 (czarny) - P90 (Schwarz) - P90 (Nero) - P90 (Fekete) - P90 (Preto) - P90 (ブラック) - P90 (黑色) - P90 (黑色) - P90 (Black) - - - P90 (Khaki) - P90 (Khaki) - P90 (Kaki) - P90 (Caqui) - P90 (Хаки) - P90 (khaki) - P90 (Khaki) - P90 (Khaki) - P90 (Khaki) - P90 (Caqui) - P90 (カーキ) - P90 (沙色) - P90 (沙色) - P90 (Khaki) - - - P90 (Camo) - P90 (Kamufláž) - P90 (Camo) - P90 (Camuflaje) - P90 (Камо) - P90 (kamuflaż) - P90 (Camo) - P90 (Camo) - P90 (Terepmintás) - P90 (Camuflagem) - P90 (カモフラージュ) - P90 (迷彩) - P90 (迷彩) - P90 (Camo) - - - P90 (Hex) - P90 (Hex) - P90 (Hex) - P90 (Hex) - P90 (Гекс) - P90 (Hex) - P90 (hex) - P90 (Hex) - P90 (Hex) - P90 (Hex) - P90 (ヘックス) - P90 (數位蜂巢迷彩) - P90 (数位蜂巢迷彩) - P90 (Hex) - - - PS90 TR (Black) - PS90 TR (Černá) - PS90 TR (Noir) - PS90 TR (Negro) - PS90 TR (Чёрный) - PS90 TR (czarny) - PS90 TR (Schwarz) - PS90 TR (Nero) - PS90 TR (Fekete) - PS90 TR (Preto) - PS90 TR (ブラック) - PS90 TR (黑色) - PS90 TR (黑色) - PS90 TR (Black) - - - PS90 TR (Khaki) - PS90 TR (Khaki) - PS90 TR (Kaki) - PS90 TR (Caqui) - PS90 TR (Хаки) - PS90 TR (khaki) - PS90 TR (Khaki) - PS90 TR (Khaki) - PS90 TR (Khaki) - PS90 TR (Caqui) - PS90 TR (カーキ) - PS90 TR (沙色) - PS90 TR (沙色) - PS90 TR (Khaki) - - - PS90 TR (Camo) - PS90 TR (Kamufláž) - PS90 TR (Camo) - PS90 TR (Camuflaje) - PS90 TR (Камо) - PS90 TR (kamuflaż) - PS90 TR (Camo) - PS90 TR (Camo) - PS90 TR (Terepmintás) - PS90 TR (Camuflagem) - PS90 TR (カモフラージュ) - PS90 TR (迷彩) - PS90 TR (迷彩) - PS90 TR (Camo) - - - PS90 TR (Hex) - PS90 TR (Hex) - PS90 TR (Hex) - PS90 TR (Hex) - PS90 TR (Гекс) - PS90 TR (Hex) - PS90 TR (hex) - PS90 TR (Hex) - PS90 TR (Hex) - PS90 TR (Hex) - PS90 TR (ヘックス) - PS90 TR (數位蜂巢迷彩) - PS90 TR (数位蜂巢迷彩) - PS90 TR (Hex) - - - PS90 (Black) - PS90 (Černá) - PS90 (Noir) - PS90 (Negro) - PS90 (Чёрный) - PS90 (czarny) - PS90 (Schwarz) - PS90 (Nero) - PS90 (Fekete) - PS90 (Preto) - PS90 (ブラック) - PS90 (黑色) - PS90 (黑色) - PS90 (Black) - - - PS90 (Khaki) - PS90 (Khaki) - PS90 (Kaki) - PS90 (Caqui) - PS90 (Хаки) - PS90 (khaki) - PS90 (Khaki) - PS90 (Khaki) - PS90 (Khaki) - PS90 (Caqui) - PS90 (カーキ) - PS90 (沙色) - PS90 (沙色) - PS90 (Khaki) - - - PS90 (Camo) - PS90 (Kamufláž) - PS90 (Camo) - PS90 (Camuflaje) - PS90 (Камо) - PS90 (kamuflaż) - PS90 (Camo) - PS90 (Camo) - PS90 (Terepmintás) - PS90 (Camuflagem) - PS90 (カモフラージュ) - PS90 (迷彩) - PS90 (迷彩) - PS90 (Camo) - - - PS90 (Hex) - PS90 (Hex) - PS90 (Hex) - PS90 (Hex) - PS90 (Гекс) - PS90 (Hex) - PS90 (hex) - PS90 (Hex) - PS90 (Hex) - PS90 (Hex) - PS90 (ヘックス) - PS90 (數位蜂巢迷彩) - PS90 (数位蜂巢迷彩) - PS90 (Hex) - - - 5.7mm 50Rnd Mag - 5,7mm 50-as Tár - 5,7mm 50-Patronen-Magazin - Cargador de 50 balas SD de 5,7mm - Ch. 5,7mm 50Cps - Magazynek 5,7mm 50rd - 5.7mm 50náb. Zásobník - Carregador de 50 projéteis de 5.7mm - Caricatore 5.7mm 50Rnd - Магазин из 50-ти 5,7 мм - 5.7mm 50 発入り弾倉 - 5.7mm 50發 彈匣 - 5.7mm 50发 弹匣 - 5.7mm 50Rnd Mag - - - Caliber: 5.7mm<br />Rounds: 50<br />Used in: P90 - Kaliber: 5,7mm<br />Patronen: 50<br />Eingesetzt von: P90 - Kaliber: 5,7mm<br />Pociski: 50<br />Używany w: P90 - Calibre : 5,7mm<br />Cartouches : 50<br />Utilisé avec : P90 - Calibre: 5.7mm<br />Balas: 50<br />Se usa en: P90 - Калибр: 5,7 мм<br />Патронов: 50<br />Используются с: P90 - Calibro: 5.7mm<br />Munizioni: 50<br />In uso su: P90 - Ráže: 5.7mm<br />Nábojů: 50<br />Použití u: P90 - Calibre: 5.7mm<br />Cartuchos: 50<br />Usado em: P90 - Kaliber: 5,7mm<br />Lövedékek: 50<br />Használható: P90 - 口径: 5.7mm<br />装弾数: 50<br />次で使用: P90 - 口徑: 5.7mm<br />發數: 50<br />使用於: P90 - 口径: 5.7mm<br />发数: 50<br />使用于: P90 - 구경: 5.7mm<br />장탄수: 50<br />사용됨: P90 - - - diff --git a/optionals/compat_r3f/CfgAmmo.hpp b/optionals/compat_r3f/CfgAmmo.hpp index a708d34e2d..1145e9ab0f 100644 --- a/optionals/compat_r3f/CfgAmmo.hpp +++ b/optionals/compat_r3f/CfgAmmo.hpp @@ -2,6 +2,7 @@ class CfgAmmo { class Default; class BulletBase; class R3F_9x19_Ball: BulletBase { // https://github.com/acemod/ACE3/blob/master/addons/ballistics/CfgAmmo.hpp#L370 + hit = 6; // R3F default value 13, BI default value 5 typicalSpeed = 350; // R3F config airFriction = -0.00201185; // ACE3 value, default -0.001413 ACE_caliber = 9.017; diff --git a/optionals/compat_r3f/CfgMagazines.hpp b/optionals/compat_r3f/CfgMagazines.hpp index 82247aa887..3a36eadfed 100644 --- a/optionals/compat_r3f/CfgMagazines.hpp +++ b/optionals/compat_r3f/CfgMagazines.hpp @@ -1,7 +1,7 @@ class CfgMagazines { class CA_magazine; class R3F_securite_mag: CA_magazine { - scope = 0; // default 2 + scope = 1; // Game Update 1.84: "Tweaked: Magazines can now be hidden in Virtual Arsenal by setting their scope to 1", R3F default value 2 }; class R3F_15Rnd_9x19_PAMAS: CA_magazine { initSpeed = 350; // R3F config @@ -9,6 +9,9 @@ class CfgMagazines { class R3F_15Rnd_9x19_HKUSP: CA_magazine { initSpeed = 350; // R3F config }; + class R3F_17Rnd_9x19_G17: CA_magazine { + initSpeed = 350; // R3F config + }; class R3F_30Rnd_9x19_MP5: CA_magazine { initSpeed = 400; // R3F config }; diff --git a/optionals/compat_r3f/CfgWeapons.hpp b/optionals/compat_r3f/CfgWeapons.hpp index 97fcb6c23e..e25f959009 100644 --- a/optionals/compat_r3f/CfgWeapons.hpp +++ b/optionals/compat_r3f/CfgWeapons.hpp @@ -23,10 +23,10 @@ class CfgWeapons { class R3F_Famas_F1_M203: R3F_Famas_F1 { muzzles[] = {"this","Lance_Grenades"}; }; - class R3F_Famas_surb: R3F_Famas_F1 { + class R3F_Famas_surb: R3F_Famas_F1 { // R3F FAMAS Surbaissé, should be FAMAS Valorisé : http://narval34.free.fr/fiche_tech_famas.pdf ACE_RailHeightAboveBore = 5.08219; - ACE_barrelTwist = 228.6; // 1:9" - ACE_barrelLength = 450.0; // Beretta barrel + ACE_barrelTwist = 228.6; // 1:9" FAMAS Surbaissé, should be 1:7" FAMAS Valorisé + ACE_barrelLength = 450.0; // 3D model with Beretta barrel : FAMAS Valorisé }; class R3F_Famas_surb_M203: R3F_Famas_surb { muzzles[] = {"this","Lance_Grenades"}; @@ -230,12 +230,27 @@ class CfgWeapons { ACE_barrelLength = 125.0; muzzles[] = {"this"}; initSpeed = -1.0; // default 410 + class Single: Mode_SemiAuto { + dispersion=0.0025; // 8.59 MOA (a square of 6.25/6.25cm at 25 meters), R3F default value 0.025 (85.94 MOA) + }; }; class R3F_HKUSP: Pistol_Base_F { ACE_barrelTwist = 250.0; ACE_barrelLength = 121.0; muzzles[] = {"this"}; initSpeed = -1.0; // default 410 + class Single: Mode_SemiAuto { + dispersion=0.002; // 6.88 MOA (a square of 5/5cm at 25 meters), R3F default value 0.02 (68.75 MOA) + }; + }; + class R3F_G17: Pistol_Base_F { + ACE_barrelTwist = 250.0; + ACE_barrelLength = 114.0; + muzzles[] = {"this"}; + initSpeed = -1.0; // default 410 + class Single: Mode_SemiAuto { + dispersion=0.0029; // R3F default value, 9.97 MOA (a square of 7.25/7.25cm at 25 meters) + }; }; class ItemCore; class InventoryOpticsItem_Base_F; @@ -265,6 +280,31 @@ class CfgWeapons { }; class R3F_FELIN_FRF2: ItemCore { ACE_ScopeHeightAboveRail = 4.28091; + class ItemInfo: InventoryOpticsItem_Base_F { + class OpticsModes { + class Felin {}; + class Oeilleton: Felin { + opticsID=2; + opticsDisplayName=""; + useModelOptics=0; + opticsPPEffects[]={}; + opticsFlare=0; + opticsDisablePeripherialVision=0; + opticsZoomMin=0.25; + opticsZoomMax=1.25; + opticsZoomInit=0.75; + memoryPointCamera="eye_Oeilleton"; + visionMode[]={}; + discretefov[]={}; + discreteDistance[]={200}; + discreteDistanceInitIndex=0; + distanceZoomMin=200; + distanceZoomMax=200; + discreteInitIndex=0; + cameraDir=""; + }; + }; + }; }; class R3F_J8: ItemCore { // http://www.scrome.com/assets/templates/flexibility/pdf/Scrome_Marksman_Scope_LTE_Datasheet_GB.pdf ACE_ScopeHeightAboveRail = 4.474; // Inaccurate BDC reticle, designed to work with the vanilla ballistic and R3F values. @@ -492,6 +532,6 @@ class ACE_ATragMX_Presets { }; class R3F_HK417L { // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model, Muzzle Velocity vs. Temperature Interpolation, C1 Ballistic Coefficient vs. Distance Interpolation - preset[] = {"R3F HK417L M80", 820, 100, 0.0884448, -0.00103711, 7.62, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 27.94, 0.398, 1, "ICAO", {{-15, 801},{0, 808},{10, 815},{15, 820},{25, 834},{30, 843},{35, 854}}, {{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}}; + preset[] = {"R3F HK417L M80", 820, 100, 0.0884448, -0.00103711, 7.62, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 27.94, 0.398, 1, "ICAO", {{-15, 801},{0, 808},{10, 815},{15, 820},{25, 834},{30, 843},{35, 854}}, {{200, 0.398}, {400, 0.398}, {600, 0.398}, {800, 0.39}, {1000, 0.383}, {1200, 0.379}, {1400, 0.378}}}; }; }; diff --git a/optionals/compat_r3f/config.cpp b/optionals/compat_r3f/config.cpp index c1263172d5..90218d7f04 100644 --- a/optionals/compat_r3f/config.cpp +++ b/optionals/compat_r3f/config.cpp @@ -6,7 +6,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"r3f_armes_c", "r3f_armes", "r3f_acc"}; + requiredAddons[] = {"r3f_armes_c", "R3F_G17_addons", "r3f_acc"}; author = ECSTRING(common,ACETeam); authors[] = {"Ruthberg"}; url = ECSTRING(main,URL); diff --git a/optionals/compat_rh_acc/CfgWeapons.hpp b/optionals/compat_rh_acc/CfgWeapons.hpp index df63559f06..001506ce8d 100644 --- a/optionals/compat_rh_acc/CfgWeapons.hpp +++ b/optionals/compat_rh_acc/CfgWeapons.hpp @@ -158,18 +158,4 @@ class CfgWeapons { }; }; }; - - /* Flashlights */ - class InventoryFlashLightItem_Base_F; - - class RH_SFM952V: ItemCore { - class ItemInfo: InventoryFlashLightItem_Base_F { - class FlashLight { - ACE_Flashlight_Colour = "white"; - ACE_Flashlight_Beam = QPATHTOEF(map,UI\Flashlight_beam_white_ca.paa); - ACE_Flashlight_Size = 2.75; - ACE_Flashlight_Sound = 1; - }; - }; - }; }; diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 742841484d..f09d1cc787 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -64,6 +64,7 @@ class CfgWeapons { ACE_barrelLength = 657.86; }; class rhs_weap_pkm: rhs_weap_pkp { + ACE_Overheating_allowSwapBarrel = 1; ACE_barrelTwist = 240.03; ACE_barrelLength = 645.16; }; diff --git a/optionals/compat_rhs_gref3/CfgWeapons.hpp b/optionals/compat_rhs_gref3/CfgWeapons.hpp index f7408af2ba..d851d598e0 100644 --- a/optionals/compat_rhs_gref3/CfgWeapons.hpp +++ b/optionals/compat_rhs_gref3/CfgWeapons.hpp @@ -74,6 +74,7 @@ class CfgWeapons { }; class Rifle_Long_Base_F; class rhs_weap_m84: Rifle_Long_Base_F { + ACE_Overheating_allowSwapBarrel = 1; ACE_barrelTwist=240; ACE_barrelLength=658; }; diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp index cb1ba9ded1..ee2540e234 100644 --- a/optionals/compat_rhs_usf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -243,6 +243,7 @@ class CfgAmmo { // Attack profile type selection defaultAttackProfile = "JAV_TOP"; attackProfiles[] = { "JAV_TOP", "JAV_DIR" }; + useModeForAttackProfile = 1; }; }; diff --git a/optionals/compat_rhs_usf3/CfgMagazineWells.hpp b/optionals/compat_rhs_usf3/CfgMagazineWells.hpp deleted file mode 100644 index 6be0ec603f..0000000000 --- a/optionals/compat_rhs_usf3/CfgMagazineWells.hpp +++ /dev/null @@ -1,5 +0,0 @@ -class CfgMagazineWells { - class UGL_40x36 { // rhsusf\addons\rhsusf_c_weapons\cfgMagazineWells.hpp - ADDON[] = {"ACE_HuntIR_M203"}; - }; -}; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index 190cbadd35..b9029d5c55 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -7,7 +7,7 @@ class CfgWeapons { EGVAR(nightvision,bluRadius) = 0.13; }; class rhsusf_ANPVS_15: rhsusf_ANPVS_14 { // Binocular (same as base) - modelOptics = ""; + modelOptics = ""; EGVAR(nightvision,border) = QPATHTOEF(nightvision,data\nvg_mask_binos_4096.paa); EGVAR(nightvision,bluRadius) = 0.15; }; @@ -70,18 +70,19 @@ class CfgWeapons { ACE_barrelTwist = 177.8; ACE_barrelLength = 508.0; }; - class rhs_weap_lmg_minimi_railed; // Rifle_Base_F - scope = private; + class rhs_weap_saw_base: Rifle_Base_F { // Base class for all Minimi + ACE_Overheating_allowSwapBarrel = 1; + }; + class rhs_weap_lmg_minimi_railed; class rhs_weap_m249_pip_S: rhs_weap_lmg_minimi_railed { ACE_RailHeightAboveBore = 4.11044; ACE_barrelLength = 348; ACE_barrelTwist = 177.8; - ACE_Overheating_allowSwapBarrel = 1; }; class rhs_weap_m249_pip_L: rhs_weap_lmg_minimi_railed { ACE_RailHeightAboveBore = 4.34899; ACE_barrelLength = 464.8; ACE_barrelTwist = 177.8; - ACE_Overheating_allowSwapBarrel = 1; }; class rhs_weap_m240_base; // Rifle_Long_Base_F class rhs_weap_m240B: rhs_weap_m240_base { @@ -219,6 +220,13 @@ class CfgWeapons { canLock = 0; lockingTargetSound[] = {"",0,1}; lockedTargetSound[] = {"",0,1}; + class Single; + class Cruise: Single { + EGVAR(missileGuidance,attackProfile) = "JAV_DIR"; + }; + class TopDown: Single { + EGVAR(missileGuidance,attackProfile) = "JAV_TOP"; + }; }; class Launcher_Base_F; @@ -233,11 +241,18 @@ class CfgWeapons { ace_overpressure_damage = 0.75; }; + #define HEARING_PROTECTION_OPEN EGVAR(hearing,protection) = 0; EGVAR(hearing,lowerVolume) = 0; #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5; #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; // Fast Helmets class rhsusf_opscore_01; + class rhsusf_ihadss: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_ut_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; class rhsusf_opscore_aor1_pelt: rhsusf_opscore_01 { HEARING_PROTECTION_PELTOR }; @@ -287,6 +302,9 @@ class CfgWeapons { HEARING_PROTECTION_PELTOR }; class rhsusf_opscore_cover; + class rhsusf_opscore_mc_cover_pelt_nsw: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; class rhsusf_opscore_mc_cover_pelt: rhsusf_opscore_cover { HEARING_PROTECTION_PELTOR }; @@ -372,7 +390,9 @@ class CfgWeapons { class rhsusf_mich_bare_norotos_alt_semi: rhsusf_mich_bare_norotos_semi { HEARING_PROTECTION_PELTOR }; - class rhsusf_mich_bare_norotos_arc_semi; + class rhsusf_mich_bare_norotos_arc_semi: rhsusf_mich_bare_norotos_alt_semi { + HEARING_PROTECTION_OPEN + }; class rhsusf_mich_bare_norotos_arc_alt_semi: rhsusf_mich_bare_norotos_arc_semi { HEARING_PROTECTION_PELTOR }; diff --git a/optionals/compat_rhs_usf3/config.cpp b/optionals/compat_rhs_usf3/config.cpp index 59aaa625bd..5847a2ac40 100644 --- a/optionals/compat_rhs_usf3/config.cpp +++ b/optionals/compat_rhs_usf3/config.cpp @@ -17,7 +17,6 @@ class CfgPatches { #include "CfgAmmo.hpp" #include "CfgEventHandlers.hpp" #include "CfgMagazines.hpp" -#include "CfgMagazineWells.hpp" #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" #include "CfgGlasses.hpp" diff --git a/optionals/compat_rksl_pm_ii/CfgWeapons.hpp b/optionals/compat_rksl_pm_ii/CfgWeapons.hpp index 705d6b10e2..dcf9fe569b 100644 --- a/optionals/compat_rksl_pm_ii/CfgWeapons.hpp +++ b/optionals/compat_rksl_pm_ii/CfgWeapons.hpp @@ -3,13 +3,13 @@ class CfgWeapons { class ItemCore; class InventoryOpticsItem_Base_F; - class RKSL_optic_PMII_312 : ItemCore { + class RKSL_optic_PMII_312: ItemCore { ACE_ScopeHeightAboveRail = 4.2235; - ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Vertical[] = { -1, 12 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class Snip { discreteDistance[] = { 100 }; @@ -19,13 +19,29 @@ class CfgWeapons { }; }; - class RKSL_optic_PMII_312_sunshade : ItemCore { + class RKSL_optic_PMII_312_sunshade: ItemCore { ACE_ScopeHeightAboveRail = 4.2235; - ACE_ScopeAdjust_Vertical[] = { -4, 30 }; + ACE_ScopeAdjust_Vertical[] = { -1, 12 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { + class OpticsModes { + class Snip { + discreteDistance[] = { 100 }; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + + class RKSL_optic_PMII_525: ItemCore { + ACE_ScopeHeightAboveRail = 4.2235; + ACE_ScopeAdjust_Vertical[] = { 0, 26 }; + ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class Snip { discreteDistance[] = { 100 }; diff --git a/optionals/compat_rksl_pm_ii/config.cpp b/optionals/compat_rksl_pm_ii/config.cpp index 8cb36802b1..1242f7d0a6 100644 --- a/optionals/compat_rksl_pm_ii/config.cpp +++ b/optionals/compat_rksl_pm_ii/config.cpp @@ -6,9 +6,9 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = REQUIRED_VERSION; - requiredAddons[] = {"RKSL_PMII"}; + requiredAddons[] = {"RKSL_PMII", "RKSL_PMII_525"}; author = ECSTRING(common,ACETeam); - authors[] = {"Ruthberg"}; + authors[] = {"Ruthberg", "Dedmen"}; url = ECSTRING(main,URL); VERSION_CONFIG; }; diff --git a/optionals/nouniformrestrictions/CfgVehicles.hpp b/optionals/nouniformrestrictions/CfgVehicles.hpp index 8d10f3f65f..e39640b995 100644 --- a/optionals/nouniformrestrictions/CfgVehicles.hpp +++ b/optionals/nouniformrestrictions/CfgVehicles.hpp @@ -20,6 +20,7 @@ class CfgVehicles { class O_Soldier_diver_base_F; class I_G_Sharpshooter_F; class B_Soldier_F; + class I_C_Soldier_Para_2_F; class I_G_Soldier_LAT2_F; class I_crew_F; @@ -245,9 +246,21 @@ class CfgVehicles { class O_G_Sharpshooter_F: I_G_Sharpshooter_F { modelSides[] = {6}; }; + class B_Captain_Pettka_F: B_Soldier_02_f { + modelSides[] = {6}; + }; + class B_Captain_Jay_F: B_Soldier_02_f { + modelSides[] = {6}; + }; + class I_Captain_Hladas_F: I_officer_F { + modelSides[] = {6}; + }; class Underwear_F: B_Soldier_F { modelSides[] = {6}; }; + class B_G_Captain_Ivan_F: I_C_Soldier_Para_2_F { + modelSides[] = {6}; + }; class C_man_sport_1_F: C_man_1 { modelSides[] = {6}; }; @@ -276,3 +289,4 @@ class CfgVehicles { modelSides[] = {6}; }; }; + diff --git a/optionals/particles/script_component.hpp b/optionals/particles/script_component.hpp index 82729c42da..53a4988a8d 100644 --- a/optionals/particles/script_component.hpp +++ b/optionals/particles/script_component.hpp @@ -43,14 +43,13 @@ interval = 1; \ }; \ } -#define MERGE(var1,var2) ##var1####var2 -#define EFFECT_AFTER_WATER(color) class ACE_SmokeAfterWater##color##: ACE_SmokeAfterWaterWhite { \ +#define EFFECT_AFTER_WATER(color) class ACE_SmokeAfterWater##color: ACE_SmokeAfterWaterWhite { \ class SmokeAfterWater: SmokeAfterWater { \ - type = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ + type = QUOTE(ACE_SmokeAfterWater##color); \ }; \ } #define CLOUDLET_UNDERWATER(color) class SmokeShell##color##UW; \ class SmokeShell##color##2UW: SmokeShell##color##UW { \ - postEffects = QUOTE(MERGE(ACE_SmokeAfterWater,color)); \ + postEffects = QUOTE(ACE_SmokeAfterWater##color); \ } diff --git a/optionals/tracers/CfgAmmo.hpp b/optionals/tracers/CfgAmmo.hpp index a432be3286..c74d6ac708 100644 --- a/optionals/tracers/CfgAmmo.hpp +++ b/optionals/tracers/CfgAmmo.hpp @@ -5,21 +5,36 @@ class CfgAmmo { class SubmunitionBullet; //No idea - class B_56x15_dual: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_56x15_dual: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white //Pistol - class B_9x21_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_9x21_Ball: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white class B_9x21_Ball_Tracer_Green: B_9x21_Ball {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green + class B_9x21_Ball_Tracer_Red: B_9x21_Ball_Tracer_Green {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red + class B_9x21_Ball_Tracer_Yellow: B_9x21_Ball_Tracer_Green {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow + class Sub_F_Signal_Green: B_9x21_Ball {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green + class Sub_F_Signal_Red: Sub_F_Signal_Green {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_45ACP_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_45ACP_Ball_Green: B_45ACP_Ball {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_45ACP_Ball_Yellow: B_45ACP_Ball {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow //Assault rifle + + class B_50BW_Ball_F: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; + + class B_545x39_Ball_F: BulletBase {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow + class B_545x39_Ball_Green_F: B_545x39_Ball_F {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow + class B_556x45_Ball: BulletBase {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow class B_556x45_Ball_Tracer_Red: B_556x45_Ball {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_556x45_Ball_Tracer_Green: B_556x45_Ball {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_556x45_Ball_Tracer_Yellow: B_556x45_Ball {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow + // class B_556x45_Ball_Tracer_White: B_556x45_Ball {model = PATHTOF(ace_TracerWhite2.p3d);}; //New class for testing + + class B_580x42_Ball_F: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; + class ACE_580x42_Ball_Tracer_Red: B_580x42_Ball_F {model = PATHTOF(ace_TracerRed2.p3d);}; + class ACE_580x42_Ball_Tracer_Yellow: B_580x42_Ball_F {model = PATHTOF(ace_TracerYellow2.p3d);}; class B_65x39_Caseless: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_65x39_Caseless_green: B_65x39_Caseless {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green @@ -34,8 +49,11 @@ class CfgAmmo { class B_65x39_Minigun_Caseless_Yellow_splash: B_65x39_Minigun_Caseless_Red_splash {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow class B_65x39_Minigun_Caseless_Green_splash: B_65x39_Minigun_Caseless_Red_splash {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green + class B_762x39_Ball_F: BulletBase {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow + class B_762x39_Ball_Green_F: B_762x39_Ball_F {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow + //Battle rifle - class B_762x51_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_762x51_Ball: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white class B_762x51_Tracer_Red: B_762x51_Ball {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_762x51_Tracer_Green: B_762x51_Ball {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_762x51_Tracer_Yellow: B_762x51_Ball {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow @@ -52,7 +70,7 @@ class CfgAmmo { class B_762x54_Tracer_Yellow: B_762x54_Ball {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow //Sniper rifle - class B_127x99_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_127x99_Ball: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white class B_127x99_Ball_Tracer_Red: B_127x99_Ball {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_127x99_Ball_Tracer_Green: B_127x99_Ball {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_127x99_Ball_Tracer_Yellow: B_127x99_Ball {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow @@ -70,13 +88,17 @@ class CfgAmmo { class B_338_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_338_NM_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red + class ACE_338_NM_Ball_red : B_338_NM_Ball {model = PATHTOF(ace_TracerRed2.p3d);}; + class ACE_338_NM_Ball_yellow : B_338_NM_Ball {model = PATHTOF(ace_TracerYellow2.p3d);}; class B_127x54_Ball: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_93x64_Ball: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green + class ACE_93x64_Ball_tracer_red : B_93x64_Ball {model = PATHTOF(ace_TracerRed2.p3d);}; + class ACE_93x64_Ball_tracer_yellow : B_93x64_Ball {model = PATHTOF(ace_TracerYellow2.p3d);}; //Autocannon - class B_19mm_HE: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_19mm_HE: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white class B_30mm_HE; class B_30mm_HE_Tracer_Red: B_30mm_HE {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red @@ -96,9 +118,9 @@ class CfgAmmo { class B_20mm: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_20mm_Tracer_Red: B_20mm {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red - class B_25mm: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_25mm: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white - class B_30mm_AP: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_30mm_AP: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white class B_30mm_AP_Tracer_Red: B_30mm_AP {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_30mm_AP_Tracer_Green: B_30mm_AP {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_30mm_AP_Tracer_Yellow: B_30mm_AP {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow @@ -113,7 +135,7 @@ class CfgAmmo { class B_40mm_APFSDS_Tracer_Green: B_40mm_APFSDS {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_40mm_APFSDS_Tracer_Yellow: B_40mm_APFSDS {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow - class B_35mm_AA: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white + class B_35mm_AA: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white class B_35mm_AA_Tracer_Red: B_35mm_AA {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_35mm_AA_Tracer_Green: B_35mm_AA {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_35mm_AA_Tracer_Yellow: B_35mm_AA {model = PATHTOF(ace_TracerYellow2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_yellow @@ -122,12 +144,12 @@ class CfgAmmo { class Cannon_30mm_HE_Plane_CAS_02_F: Gatling_30mm_HE_Plane_CAS_01_F {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green.p3d //Cannon - class Sh_120mm_HE: ShellBase {model = PATHTOF(ace_shell_tracer_red.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_white + class Sh_120mm_HE: ShellBase {model = PATHTOF(ace_shell_tracer_white.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_white class Sh_120mm_HE_Tracer_Red: Sh_120mm_HE {model = PATHTOF(ace_shell_tracer_red.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_red class Sh_120mm_HE_Tracer_Green: Sh_120mm_HE {model = PATHTOF(ace_shell_tracer_green.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_green class Sh_120mm_HE_Tracer_Yellow: Sh_120mm_HE {model = PATHTOF(ace_shell_tracer_yellow.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_yellow - class Sh_120mm_APFSDS: ShellBase {model = PATHTOF(ace_shell_tracer_red.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_white + class Sh_120mm_APFSDS: ShellBase {model = PATHTOF(ace_shell_tracer_white.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_white class Sh_120mm_APFSDS_Tracer_Red: Sh_120mm_APFSDS {model = PATHTOF(ace_shell_tracer_red.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_red class Sh_120mm_APFSDS_Tracer_Green: Sh_120mm_APFSDS {model = PATHTOF(ace_shell_tracer_green.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_green class Sh_120mm_APFSDS_Tracer_Yellow: Sh_120mm_APFSDS {model = PATHTOF(ace_shell_tracer_yellow.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_yellow @@ -156,4 +178,4 @@ class CfgAmmo { class Sh_105mm_HEAT_MP_T_Red: Sh_105mm_HEAT_MP {model = PATHTOF(ace_shell_tracer_red.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_red class Sh_105mm_HEAT_MP_T_Green: Sh_105mm_HEAT_MP {model = PATHTOF(ace_shell_tracer_green.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_green class Sh_105mm_HEAT_MP_T_Yellow: Sh_105mm_HEAT_MP {model = PATHTOF(ace_shell_tracer_yellow.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\shell_tracer_yellow -}; \ No newline at end of file +}; diff --git a/optionals/tracers/CfgMagazineWells.hpp b/optionals/tracers/CfgMagazineWells.hpp new file mode 100644 index 0000000000..4d0b0d5788 --- /dev/null +++ b/optionals/tracers/CfgMagazineWells.hpp @@ -0,0 +1,156 @@ +class CfgMagazineWells { + class STANAG_556x45_Large { + ADDON[] = { + "ACE_150Rnd_556x45_Drum_green", + "ACE_150Rnd_556x45_Drum_yellow", + "ACE_150Rnd_556x45_Drum_tracer_green", + "ACE_150Rnd_556x45_Drum_tracer_yellow" + }; + }; + class CBA_556x45_STANAG_2D_XL { + ADDON[] = { + "ACE_150Rnd_556x45_Drum_green", + "ACE_150Rnd_556x45_Drum_yellow", + "ACE_150Rnd_556x45_Drum_tracer_green", + "ACE_150Rnd_556x45_Drum_tracer_yellow" + }; + }; + class M249_556x45 { + ADDON[] = { + "ACE_200Rnd_556x45_Box_green", + "ACE_200Rnd_556x45_Box_tracer_green" + }; + }; + class CBA_556x45_MINIMI { + ADDON[] = { + "ACE_200Rnd_556x45_Box_green", + "ACE_200Rnd_556x45_Box_tracer_green" + }; + }; + class CTAR_580x42 { + ADDON[] = { + "ACE_30Rnd_580x42_Mag_red", + "ACE_30Rnd_580x42_Mag_yellow", + "ACE_30Rnd_580x42_Mag_tracer_red", + "ACE_30Rnd_580x42_Mag_tracer_yellow" + }; + }; + class CBA_580x42_TYPE95 { + ADDON[] = { + "ACE_30Rnd_580x42_Mag_red", + "ACE_30Rnd_580x42_Mag_yellow", + "ACE_30Rnd_580x42_Mag_tracer_red", + "ACE_30Rnd_580x42_Mag_tracer_yellow" + }; + }; + class CTAR_580x42_Large { + ADDON[] = { + "ACE_100Rnd_580x42_Drum_red", + "ACE_100Rnd_580x42_Drum_yellow", + "ACE_100Rnd_580x42_Drum_tracer_red", + "ACE_100Rnd_580x42_Drum_tracer_yellow" + }; + }; + class CBA_580x42_TYPE95_XL { + ADDON[] = { + "ACE_100Rnd_580x42_Drum_red", + "ACE_100Rnd_580x42_Drum_yellow", + "ACE_100Rnd_580x42_Drum_tracer_red", + "ACE_100Rnd_580x42_Drum_tracer_yellow" + }; + }; + class MX_65x39 { + ADDON[] = { + "ACE_30Rnd_65x39_mx_green", + "ACE_30Rnd_65x39_mx_yellow", + "ACE_30Rnd_65x39_mx_tracer_green", + "ACE_30Rnd_65x39_mx_tracer_yellow" + }; + }; + class CBA_65x39_MX { + ADDON[] = { + "ACE_30Rnd_65x39_mx_green", + "ACE_30Rnd_65x39_mx_yellow", + "ACE_30Rnd_65x39_mx_tracer_green", + "ACE_30Rnd_65x39_mx_tracer_yellow" + }; + }; + class CBA_65x39_MX_XL { + ADDON[] = { + "ACE_100Rnd_65x39_mx_green", + "ACE_100Rnd_65x39_mx_yellow", + "ACE_100Rnd_65x39_mx_tracer_green", + "ACE_100Rnd_65x39_mx_tracer_yellow" + }; + }; + class Katiba_65x39 { + ADDON[] = { + "ACE_30Rnd_65x39_katiba_red", + "ACE_30Rnd_65x39_katiba_yellow", + "ACE_30Rnd_65x39_katiba_tracer_red", + "ACE_30Rnd_65x39_katiba_tracer_yellow" + }; + }; + class CBA_65x39_Katiba { + ADDON[] = { + "ACE_30Rnd_65x39_katiba_red", + "ACE_30Rnd_65x39_katiba_yellow", + "ACE_30Rnd_65x39_katiba_tracer_red", + "ACE_30Rnd_65x39_katiba_tracer_yellow" + }; + }; + class Mk200_65x39 { + ADDON[] = { + "ACE_200Rnd_65x39_cased_Box_green", + "ACE_200Rnd_65x39_cased_Box_red", + "ACE_200Rnd_65x39_cased_Box_tracer_green", + "ACE_200Rnd_65x39_cased_Box_tracer_red" + }; + }; + class CBA_65x39_Mk200 { + ADDON[] = { + "ACE_200Rnd_65x39_cased_Box_green", + "ACE_200Rnd_65x39_cased_Box_red", + "ACE_200Rnd_65x39_cased_Box_tracer_green", + "ACE_200Rnd_65x39_cased_Box_tracer_red" + }; + }; + class CBA_762x51_HK417 { + ADDON[] = { + "ACE_20Rnd_762x51_Mag_tracer_green", + "ACE_20Rnd_762x51_Mag_tracer_yellow" + }; + }; + class CBA_762x51_M14 { + ADDON[] = { + "ACE_20Rnd_762x51_Mag_Tracer_green", + "ACE_20Rnd_762x51_Mag_Tracer_yellow" + }; + }; + class CBA_762x51_G3 { + ADDON[] = { + "ACE_20Rnd_762x51_Mag_Tracer_green", + "ACE_20Rnd_762x51_Mag_Tracer_yellow" + }; + }; + class CBA_762x54R_LINKS { + ADDON[] = { + "ACE_150Rnd_762x54_Box_red", + "ACE_150Rnd_762x54_Box_yellow", + "ACE_150Rnd_762x54_Box_tracer_red", + "ACE_150Rnd_762x54_Box_tracer_yellow" + }; + }; + class CBA_93x64_LINKS { + ADDON[] = { + "ACE_150Rnd_93x64_Mag_red", + "ACE_150Rnd_93x64_Mag_yellow" + }; + }; + class CBA_338NM_LINKS { + ADDON[] = { + "ACE_130Rnd_338_Mag_green", + "ACE_130Rnd_338_Mag_yellow" + }; + }; +}; diff --git a/optionals/tracers/CfgMagazines.hpp b/optionals/tracers/CfgMagazines.hpp new file mode 100644 index 0000000000..a8d822696e --- /dev/null +++ b/optionals/tracers/CfgMagazines.hpp @@ -0,0 +1,245 @@ +#define STRINGS(magazine) author = ECSTRING(common,ACETeam); displayName = CSTRING(magazine) + +class CfgMagazines { + + // 5.56mm + class 150Rnd_556x45_Drum_Mag_F; + class ACE_150Rnd_556x45_Drum_green : 150Rnd_556x45_Drum_Mag_F { + ammo = "B_556x45_Ball_tracer_green"; + STRINGS(150Rnd_556x45_Drum_green); + }; + class ACE_150Rnd_556x45_Drum_yellow : 150Rnd_556x45_Drum_Mag_F { + ammo = "B_556x45_Ball_tracer_yellow"; + STRINGS(150Rnd_556x45_Drum_yellow); + }; + + class 150Rnd_556x45_Drum_Mag_tracer_F; + class ACE_150Rnd_556x45_Drum_tracer_green : 150Rnd_556x45_Drum_Mag_tracer_F { + ammo = "B_556x45_Ball_tracer_green"; + STRINGS(150Rnd_556x45_Drum_tracer_green); + descriptionShort = CSTRING(150Rnd_556x45_Drum_tracer_green_description); + }; + class ACE_150Rnd_556x45_Drum_tracer_yellow : 150Rnd_556x45_Drum_Mag_tracer_F { + ammo = "B_556x45_Ball_tracer_yellow"; + STRINGS(150Rnd_556x45_Drum_tracer_yellow); + descriptionShort = CSTRING(150Rnd_556x45_Drum_tracer_green_description); + }; + + class 200Rnd_556x45_Box_F; + class ACE_200Rnd_556x45_Box_green : 200Rnd_556x45_Box_F { + ammo = "B_556x45_Ball_tracer_green"; + STRINGS(200Rnd_556x45_Box_green); + }; + class 200Rnd_556x45_Box_tracer_F; + class ACE_200Rnd_556x45_Box_tracer_green : 200Rnd_556x45_Box_tracer_F { + ammo = "B_556x45_Ball_tracer_green"; + STRINGS(200Rnd_556x45_Box_tracer_green); + descriptionShort = CSTRING(200Rnd_556x45_Box_tracer_green_description); + }; + + // 5.8mm + class 30Rnd_580x42_Mag_F; + class ACE_30Rnd_580x42_Mag_red : 30Rnd_580x42_Mag_F { + ammo = "ACE_580x42_Ball_tracer_red"; + STRINGS(30Rnd_580x42_Mag_red); + }; + class ACE_30Rnd_580x42_Mag_yellow : 30Rnd_580x42_Mag_F { + ammo = "ACE_580x42_Ball_tracer_yellow"; + STRINGS(30Rnd_580x42_Mag_yellow); + }; + + class 30Rnd_580x42_Mag_tracer_F; + class ACE_30Rnd_580x42_Mag_tracer_red : 30Rnd_580x42_Mag_tracer_F { + ammo = "ACE_580x42_Ball_tracer_red"; + STRINGS(30Rnd_580x42_Mag_tracer_red); + descriptionShort = CSTRING(30Rnd_580x42_Mag_tracer_red_description); + }; + class ACE_30Rnd_580x42_Mag_tracer_yellow : 30Rnd_580x42_Mag_tracer_F { + ammo = "ACE_580x42_Ball_tracer_yellow"; + STRINGS(30Rnd_580x42_Mag_tracer_yellow); + descriptionShort = CSTRING(30Rnd_580x42_Mag_tracer_yellow_description); + }; + + class 100Rnd_580x42_Mag_F; + class ACE_100Rnd_580x42_Drum_red : 100Rnd_580x42_Mag_F { + ammo = "ACE_580x42_Ball_tracer_red"; + STRINGS(100Rnd_580x42_Drum_red); + }; + class ACE_100Rnd_580x42_Drum_yellow : 100Rnd_580x42_Mag_F { + ammo = "ACE_580x42_Ball_tracer_yellow"; + STRINGS(100Rnd_580x42_Drum_yellow); + }; + + class 100Rnd_580x42_Mag_tracer_F; + class ACE_100Rnd_580x42_Drum_tracer_red : 100Rnd_580x42_Mag_tracer_F { + ammo = "ACE_580x42_Ball_tracer_red"; + STRINGS(100Rnd_580x42_Drum_tracer_red); + descriptionShort = CSTRING(100Rnd_580x42_Drum_tracer_red_description); + }; + class ACE_100Rnd_580x42_Drum_tracer_yellow : 100Rnd_580x42_Mag_tracer_F { + ammo = "ACE_580x42_Ball_tracer_yellow"; + STRINGS(100Rnd_580x42_Drum_tracer_yellow); + descriptionShort = CSTRING(100Rnd_580x42_Drum_tracer_yellow_description); + }; + + // 6.5mm Caseless MX + class 30Rnd_65x39_caseless_mag; + class ACE_30Rnd_65x39_mx_green : 30Rnd_65x39_caseless_mag { + ammo = "B_65x39_Caseless_green"; + STRINGS(30Rnd_65x39_mx_green); + descriptionShort = CSTRING(30Rnd_65x39_mx_green_description); + }; + class ACE_30Rnd_65x39_mx_yellow : 30Rnd_65x39_caseless_mag { + ammo = "B_65x39_Caseless_yellow"; + STRINGS(30Rnd_65x39_mx_yellow); + descriptionShort = CSTRING(30Rnd_65x39_mx_yellow_description); + }; + + class 30Rnd_65x39_caseless_mag_tracer; + class ACE_30Rnd_65x39_mx_tracer_green : 30Rnd_65x39_caseless_mag_tracer { + ammo = "B_65x39_Caseless_green"; + picture = "a3\weapons_f\Data\UI\m_30stanag_caseless_green_CA.paa"; + STRINGS(30Rnd_65x39_mx_tracer_green); + descriptionShort = CSTRING(30Rnd_65x39_mx_tracer_green_description); + }; + class ACE_30Rnd_65x39_mx_tracer_yellow : 30Rnd_65x39_caseless_mag_tracer { + ammo = "B_65x39_Caseless_yellow"; + picture = "a3\weapons_f\Data\UI\m_30stanag_caseless_yellow_CA.paa"; + STRINGS(30Rnd_65x39_mx_tracer_yellow); + descriptionShort = CSTRING(30Rnd_65x39_mx_tracer_yellow_description); + }; + + class 100Rnd_65x39_caseless_mag; + class ACE_100Rnd_65x39_mx_green : 100Rnd_65x39_caseless_mag { + ammo = "B_65x39_Caseless_green"; + STRINGS(100Rnd_65x39_mx_green); + }; + class ACE_100Rnd_65x39_mx_yellow : 100Rnd_65x39_caseless_mag { + ammo = "B_65x39_Caseless_yellow"; + STRINGS(100Rnd_65x39_mx_yellow); + }; + + class 100Rnd_65x39_caseless_mag_tracer; + class ACE_100Rnd_65x39_mx_tracer_green : 100Rnd_65x39_caseless_mag_tracer { + ammo = "B_65x39_Caseless_green"; + picture = "a3\weapons_f\Data\UI\M_100Rnd_65x39_green_CA.paa"; + STRINGS(100Rnd_65x39_mx_tracer_green); + descriptionShort = CSTRING(100Rnd_65x39_mx_tracer_green_description); + }; + class ACE_100Rnd_65x39_mx_tracer_yellow : 100Rnd_65x39_caseless_mag_tracer { + ammo = "B_65x39_Caseless_yellow"; + picture = "a3\weapons_f\Data\UI\M_100Rnd_65x39_yellow_CA.paa"; + STRINGS(100Rnd_65x39_mx_tracer_yellow); + descriptionShort = CSTRING(100Rnd_65x39_mx_tracer_yellow_description); + }; + + // 6.5mm Caseless Katiba + class 30Rnd_65x39_caseless_green; + class ACE_30Rnd_65x39_katiba_red : 30Rnd_65x39_caseless_green { + ammo = "B_65x39_Caseless"; + STRINGS(30Rnd_65x39_katiba_red); + }; + class ACE_30Rnd_65x39_katiba_yellow : 30Rnd_65x39_caseless_green { + ammo = "B_65x39_Caseless_yellow"; + STRINGS(30Rnd_65x39_katiba_yellow); + }; + + class 30Rnd_65x39_caseless_green_mag_Tracer; + class ACE_30Rnd_65x39_katiba_tracer_red : 30Rnd_65x39_caseless_green_mag_Tracer { + ammo = "B_65x39_Caseless"; + picture = "a3\weapons_f\Data\UI\m_20stanag_red_CA.paa"; + STRINGS(30Rnd_65x39_katiba_tracer_red); + descriptionShort = CSTRING(30Rnd_65x39_katiba_tracer_red_description); + }; + class ACE_30Rnd_65x39_katiba_tracer_yellow : 30Rnd_65x39_caseless_green_mag_Tracer { + ammo = "B_65x39_Caseless_yellow"; + picture = "a3\weapons_f\Data\UI\m_20stanag_yellow_CA.paa"; + STRINGS(30Rnd_65x39_katiba_tracer_yellow); + descriptionShort = CSTRING(30Rnd_65x39_katiba_tracer_yellow_description); + }; + + // 6.5mm Cased + class 200Rnd_65x39_cased_Box; + class ACE_200Rnd_65x39_cased_Box_green : 200Rnd_65x39_cased_Box { + ammo = "B_65x39_Case_green"; + STRINGS(200Rnd_65x39_cased_Box_green); + descriptionShort = CSTRING(200Rnd_65x39_cased_Box_green_description); + }; + class ACE_200Rnd_65x39_cased_Box_red : 200Rnd_65x39_cased_Box { + ammo = "B_65x39_Case"; + STRINGS(200Rnd_65x39_cased_Box_red); + descriptionShort = CSTRING(200Rnd_65x39_cased_Box_red_description); + }; + + class 200Rnd_65x39_cased_Box_tracer; + class ACE_200Rnd_65x39_cased_Box_tracer_green : 200Rnd_65x39_cased_Box_tracer { + ammo = "B_65x39_Case_green"; + picture = "a3\weapons_f\Data\UI\M_200Rnd_65x39_green_CA.paa"; + STRINGS(200Rnd_65x39_cased_Box_tracer_green); + descriptionShort = CSTRING(200Rnd_65x39_cased_Box_tracer_green_description); + }; + class ACE_200Rnd_65x39_cased_Box_tracer_red : 200Rnd_65x39_cased_Box_tracer { + ammo = "B_65x39_Case"; + picture = "a3\weapons_f\Data\UI\M_200Rnd_65x39_red_CA.paa"; + STRINGS(200Rnd_65x39_cased_Box_tracer_red); + descriptionShort = CSTRING(200Rnd_65x39_cased_Box_tracer_red_description); + }; + + // 7.62x51 (NATO) + class ACE_20Rnd_762x51_Mag_tracer; + class ACE_20Rnd_762x51_Mag_tracer_green : ACE_20Rnd_762x51_Mag_tracer { + ammo = "B_762x51_tracer_green"; + STRINGS(20Rnd_762x51_Mag_tracer_green); + descriptionShort = CSTRING(20Rnd_762x51_Mag_tracer_green_description); + }; + class ACE_20Rnd_762x51_Mag_tracer_yellow : ACE_20Rnd_762x51_Mag_tracer { + ammo = "B_762x51_tracer_yellow"; + STRINGS(20Rnd_762x51_Mag_tracer_yellow); + descriptionShort = CSTRING(20Rnd_762x51_Mag_tracer_green_description); + }; + + // 7.62x54 (Russian) + class 150Rnd_762x54_Box; + class ACE_150Rnd_762x54_Box_red : 150Rnd_762x54_Box { + ammo = "B_762x54_tracer_red"; + STRINGS(150Rnd_762x54_Box_red); + }; + class ACE_150Rnd_762x54_Box_yellow : 150Rnd_762x54_Box { + ammo = "B_762x54_tracer_yellow"; + STRINGS(150Rnd_762x54_Box_yellow); + }; + + class 150Rnd_762x54_Box_tracer; + class ACE_150Rnd_762x54_Box_tracer_red : 150Rnd_762x54_Box_tracer { + ammo = "B_762x54_tracer_red"; + STRINGS(150Rnd_762x54_Box_tracer_red); + descriptionShort = CSTRING(150Rnd_762x54_Box_tracer_red_description); + }; + class ACE_150Rnd_762x54_Box_tracer_yellow : 150Rnd_762x54_Box_tracer { + ammo = "B_762x54_tracer_yellow"; + STRINGS(150Rnd_762x54_Box_tracer_yellow); + descriptionShort = CSTRING(150Rnd_762x54_Box_tracer_yellow_description); + }; + + // 9.3x64 + class 150Rnd_93x64_Mag; + class ACE_150Rnd_93x64_Mag_red : 150Rnd_93x64_Mag { + ammo = "ACE_93x64_tracer_red"; + STRINGS(150Rnd_93x64_Mag_red); + }; + class ACE_150Rnd_93x64_Mag_yellow : 150Rnd_93x64_Mag { + ammo = "ACE_93x64_tracer_yellow"; + STRINGS(150Rnd_93x64_Mag_yellow); + }; + + // .338 NM + class 130Rnd_338_Mag; + class ACE_130Rnd_338_Mag_green : 130Rnd_338_Mag { + ammo = "ACE_338_NM_tracer_green"; + STRINGS(130Rnd_338_Mag_green); + }; + class ACE_130Rnd_338_Mag_yellow : 130Rnd_338_Mag { + ammo = "ACE_338_NM_tracer_yellow"; + STRINGS(130Rnd_338_Mag_yellow); + }; +}; diff --git a/optionals/tracers/ace_TracerWhite2.p3d b/optionals/tracers/ace_TracerWhite2.p3d new file mode 100644 index 0000000000..40b6df46ee Binary files /dev/null and b/optionals/tracers/ace_TracerWhite2.p3d differ diff --git a/optionals/tracers/ace_shell_tracer_green.p3d b/optionals/tracers/ace_shell_tracer_green.p3d index 64963617d7..ff103a7d3b 100644 Binary files a/optionals/tracers/ace_shell_tracer_green.p3d and b/optionals/tracers/ace_shell_tracer_green.p3d differ diff --git a/optionals/tracers/ace_shell_tracer_red.p3d b/optionals/tracers/ace_shell_tracer_red.p3d index 622427ca63..72c546d549 100644 Binary files a/optionals/tracers/ace_shell_tracer_red.p3d and b/optionals/tracers/ace_shell_tracer_red.p3d differ diff --git a/optionals/tracers/ace_shell_tracer_white.p3d b/optionals/tracers/ace_shell_tracer_white.p3d new file mode 100644 index 0000000000..77f1ae8163 Binary files /dev/null and b/optionals/tracers/ace_shell_tracer_white.p3d differ diff --git a/optionals/tracers/ace_shell_tracer_yellow.p3d b/optionals/tracers/ace_shell_tracer_yellow.p3d index 3d2de95cf9..8805194838 100644 Binary files a/optionals/tracers/ace_shell_tracer_yellow.p3d and b/optionals/tracers/ace_shell_tracer_yellow.p3d differ diff --git a/optionals/tracers/config.cpp b/optionals/tracers/config.cpp index 8b44cec0d3..79e7f3364d 100644 --- a/optionals/tracers/config.cpp +++ b/optionals/tracers/config.cpp @@ -15,3 +15,5 @@ class CfgPatches { }; #include "CfgAmmo.hpp" +#include "CfgMagazines.hpp" +#include "CfgMagazineWells.hpp" diff --git a/optionals/tracers/data/TracerWhite.paa b/optionals/tracers/data/TracerWhite.paa new file mode 100644 index 0000000000..7388bd20a2 Binary files /dev/null and b/optionals/tracers/data/TracerWhite.paa differ diff --git a/optionals/tracers/data/SLX_GreenTracer_Material.rvmat b/optionals/tracers/data/slx_greentracer_material.rvmat similarity index 77% rename from optionals/tracers/data/SLX_GreenTracer_Material.rvmat rename to optionals/tracers/data/slx_greentracer_material.rvmat index 55cd8f6295..f5de615298 100644 --- a/optionals/tracers/data/SLX_GreenTracer_Material.rvmat +++ b/optionals/tracers/data/slx_greentracer_material.rvmat @@ -1,8 +1,8 @@ ambient[] = {0.2, 0.8, 0.1, 1}; diffuse[] = {0.2, 0.8, 0.1, 1}; forcedDiffuse[] = {0.2, 0.8, 0.1, 1}; -emmisive[] = {0.2, 0.8, 0.1, 1}; -specular[] = {0.0, 0.0, 0.0, 0.0}; +emmisive[] = {100, 400, 100, 1}; +specular[] = {0, 0, 0, 0}; specularPower = 0.0; renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; PixelShaderID = "Normal"; diff --git a/optionals/tracers/data/SLX_RedTracer_Material.rvmat b/optionals/tracers/data/slx_redtracer_material.rvmat similarity index 77% rename from optionals/tracers/data/SLX_RedTracer_Material.rvmat rename to optionals/tracers/data/slx_redtracer_material.rvmat index a4b990f2d7..7bc0b7c298 100644 --- a/optionals/tracers/data/SLX_RedTracer_Material.rvmat +++ b/optionals/tracers/data/slx_redtracer_material.rvmat @@ -1,8 +1,8 @@ ambient[] = {0.8, 0.1, 0.1, 1}; diffuse[] = {0.8, 0.1, 0.1, 1}; forcedDiffuse[] = {0.8, 0.1, 0.1, 1}; -emmisive[] = {0.8, 0.1, 0.1, 1}; -specular[] = {0.0, 0.0, 0.0, 0.0}; +emmisive[] = {1000, 100, 10, 1}; +specular[] = {0, 0, 0, 0}; specularPower = 0.0; renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; PixelShaderID = "Normal"; diff --git a/optionals/tracers/data/slx_whitetracer_material.rvmat b/optionals/tracers/data/slx_whitetracer_material.rvmat new file mode 100644 index 0000000000..8f2318885c --- /dev/null +++ b/optionals/tracers/data/slx_whitetracer_material.rvmat @@ -0,0 +1,9 @@ +ambient[] = {1, 0.98, 0.98, 1}; +diffuse[] = {1, 0.98, 0.98, 1}; +forcedDiffuse[] = {1, 0.98, 0.98, 1}; +emmisive[] = {250, 250, 400, 1}; +specular[] = {0, 0, 0, 0}; +specularPower = 0.0; +renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; +PixelShaderID = "Normal"; +VertexShaderID = "Basic"; diff --git a/optionals/tracers/data/SLX_YellowTracer_Material.rvmat b/optionals/tracers/data/slx_yellowtracer_material.rvmat similarity index 77% rename from optionals/tracers/data/SLX_YellowTracer_Material.rvmat rename to optionals/tracers/data/slx_yellowtracer_material.rvmat index e139bd9aa8..fa810aab32 100644 --- a/optionals/tracers/data/SLX_YellowTracer_Material.rvmat +++ b/optionals/tracers/data/slx_yellowtracer_material.rvmat @@ -1,8 +1,8 @@ ambient[] = {1, 0.98, 0.137, 1}; diffuse[] = {1, 0.98, 0.137, 1}; forcedDiffuse[] = {1, 0.98, 0.137, 1}; -emmisive[] = {1, 0.98, 0.137, 1}; -specular[] = {0.0, 0.0, 0.0, 0.0}; +emmisive[] = {500, 500, 0, 1}; +specular[] = {0, 0, 0, 0}; specularPower = 0.0; renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; PixelShaderID = "Normal"; diff --git a/optionals/tracers/data/tracer_green.rvmat b/optionals/tracers/data/tracer_green.rvmat index dc6daa6143..dd352adb2a 100644 --- a/optionals/tracers/data/tracer_green.rvmat +++ b/optionals/tracers/data/tracer_green.rvmat @@ -1,18 +1,9 @@ -//////////////////////////////////////////////////////////////////// -//Produced from mikero's Dos Tools using dll 3.17 -//http://dev-heaven.net/projects/list_files/mikero-pbodll -//////////////////////////////////////////////////////////////////// - -#define _ARMA_ - -//Class weapons : Data\bullettracer\Data\tracer_green.rvmat{ -ambient[] = {1.0,1.0,1.0,3.25}; -diffuse[] = {1.0,1.0,1.0,1.0}; -forcedDiffuse[] = {0.0,0.0,0.0,0.0}; -emmisive[] = {1.0,1.0,1.0,1.0}; -specular[] = {0.0,0.0,0.0,1.0}; +ambient[] = {1,1,1,3.25}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {100, 400, 100, 1}; +specular[] = {0,0,0,1}; specularPower = 1.0; -renderFlags[] = {"NoZWrite","AddBlend"}; +renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; PixelShaderID = "Normal"; VertexShaderID = "Basic"; -//}; diff --git a/optionals/tracers/data/tracer_green1_ca.paa b/optionals/tracers/data/tracer_green1_ca.paa index a8960e69f8..1a1f48e62d 100644 Binary files a/optionals/tracers/data/tracer_green1_ca.paa and b/optionals/tracers/data/tracer_green1_ca.paa differ diff --git a/optionals/tracers/data/tracer_red.rvmat b/optionals/tracers/data/tracer_red.rvmat index f5565e39b2..ff5f3fcd2d 100644 --- a/optionals/tracers/data/tracer_red.rvmat +++ b/optionals/tracers/data/tracer_red.rvmat @@ -1,18 +1,9 @@ -//////////////////////////////////////////////////////////////////// -//Produced from mikero's Dos Tools using dll 3.17 -//http://dev-heaven.net/projects/list_files/mikero-pbodll -//////////////////////////////////////////////////////////////////// - -#define _ARMA_ - -//Class weapons : Data\bullettracer\Data\tracer_red.rvmat{ -ambient[] = {1.0,1.0,1.0,3.25}; -diffuse[] = {1.0,1.0,1.0,1.0}; -forcedDiffuse[] = {0.0,0.0,0.0,0.0}; -emmisive[] = {1.0,1.0,1.0,1.0}; -specular[] = {0.0,0.0,0.0,1.0}; +ambient[] = {1,1,1,3.25}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {1000, 100, 10, 1}; +specular[] = {0,0,0,1}; specularPower = 1.0; -renderFlags[] = {"NoZWrite","AddBlend"}; +renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; PixelShaderID = "Normal"; VertexShaderID = "Basic"; -//}; diff --git a/optionals/tracers/data/tracer_red1_ca.paa b/optionals/tracers/data/tracer_red1_ca.paa index 171325cc55..4f32204dfb 100644 Binary files a/optionals/tracers/data/tracer_red1_ca.paa and b/optionals/tracers/data/tracer_red1_ca.paa differ diff --git a/optionals/tracers/data/tracer_white.rvmat b/optionals/tracers/data/tracer_white.rvmat new file mode 100644 index 0000000000..bed8419b18 --- /dev/null +++ b/optionals/tracers/data/tracer_white.rvmat @@ -0,0 +1,9 @@ +ambient[] = {1,1,1,3.25}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {250, 250, 400, 1}; +specular[] = {0,0,0,1}; +specularPower = 1.0; +renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; +PixelShaderID = "Normal"; +VertexShaderID = "Basic"; diff --git a/optionals/tracers/data/tracer_white1_ca.paa b/optionals/tracers/data/tracer_white1_ca.paa new file mode 100644 index 0000000000..aa96373a4c Binary files /dev/null and b/optionals/tracers/data/tracer_white1_ca.paa differ diff --git a/optionals/tracers/data/tracer_yellow.rvmat b/optionals/tracers/data/tracer_yellow.rvmat index 757791f1b9..112d055311 100644 --- a/optionals/tracers/data/tracer_yellow.rvmat +++ b/optionals/tracers/data/tracer_yellow.rvmat @@ -1,18 +1,9 @@ -//////////////////////////////////////////////////////////////////// -//Produced from mikero's Dos Tools using dll 3.17 -//http://dev-heaven.net/projects/list_files/mikero-pbodll -//////////////////////////////////////////////////////////////////// - -#define _ARMA_ - -//Class weapons : Data\bullettracer\Data\tracer_yellow.rvmat{ -ambient[] = {1.0,1.0,1.0,3.25}; -diffuse[] = {1.0,1.0,1.0,1.0}; -forcedDiffuse[] = {0.0,0.0,0.0,0.0}; -emmisive[] = {1.0,1.0,1.0,1.0}; -specular[] = {0.0,0.0,0.0,1.0}; +ambient[] = {1,1,1,3.25}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {500, 500, 0, 1}; +specular[] = {0,0,0,1}; specularPower = 1.0; -renderFlags[] = {"NoZWrite","AddBlend"}; +renderFlags[] = {"NoZWrite", "NoAlphaWrite", "AddBlend"}; PixelShaderID = "Normal"; VertexShaderID = "Basic"; -//}; diff --git a/optionals/tracers/data/tracer_yellow1_ca.paa b/optionals/tracers/data/tracer_yellow1_ca.paa index f895ffe6e3..237e5b08f6 100644 Binary files a/optionals/tracers/data/tracer_yellow1_ca.paa and b/optionals/tracers/data/tracer_yellow1_ca.paa differ diff --git a/optionals/tracers/model.cfg b/optionals/tracers/model.cfg index 296d783338..089b4a417e 100644 --- a/optionals/tracers/model.cfg +++ b/optionals/tracers/model.cfg @@ -27,18 +27,25 @@ class CfgModels { class ACE_Tracer_Default: ACE_Tracer { // BWC skeletonName = "ACE_Tracer_Skeleton_Default"; }; - // Bullet tracers - class ace_TracerRed2: ACE_Tracer_Default {}; - class ace_TracerGreen2: ACE_Tracer_Default {}; - class ace_TracerYellow2: ACE_Tracer_Default {}; - - // Bullet tracers, alternative - class tracer_green_2: ACE_Tracer {}; - class tracer_red_2: ACE_Tracer {}; - class tracer_yellow_2: ACE_Tracer {}; + + class ace_40mm_tracer_red: Default {}; + // Shell Tracers class ace_shell_tracer_green: ACE_Tracer {}; class ace_shell_tracer_red: ACE_Tracer {}; + class ace_shell_tracer_white: ACE_Tracer {}; class ace_shell_tracer_yellow: ACE_Tracer {}; + + // Bullet tracers + class ace_TracerGreen2: ACE_Tracer_Default {}; + class ace_TracerRed2: ACE_Tracer_Default {}; + class ace_TracerWhite2: ACE_Tracer_Default {}; + class ace_TracerYellow2: ACE_Tracer_Default {}; + + + // Bullet tracers, alternative + class tracer_green_2: ACE_Tracer {}; + class tracer_red_2: ACE_Tracer {}; + class tracer_yellow_2: ACE_Tracer {}; }; diff --git a/optionals/tracers/stringtable.xml b/optionals/tracers/stringtable.xml new file mode 100644 index 0000000000..acaaa60081 --- /dev/null +++ b/optionals/tracers/stringtable.xml @@ -0,0 +1,259 @@ + + + + + + 5.56 mm 150Rnd Reload Tracer (Green) Mag + 150 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Magazin + + + 5.56 mm 150Rnd Reload Tracer (Yellow) Mag + 150 Schuss 5,56 mm Nachlade-Leuchtspur (Gelb) Magazin + + + 5.56 mm 150Rnd Tracer (Green) Mag + 150 Schuss 5,56 mm Leuchtspur (Grün) Magazin + + + Caliber: 5.56x45 mm Tracer - Green<br />Rounds: 150<br />Used in: SPAR-16S + Kaliber: 5,56x45 mm Leuchtspur - grün<br />Schuss: 150<br />Verwendet in: SPAR-16S + + + 5.56 mm 150Rnd Tracer (Yellow) Mag + 150 Schuss 5,56 mm Leuchtspur (Gelb) Magazin + + + Caliber: 5.56x45 mm Tracer - Yellow<br />Rounds: 150<br />Used in: SPAR-16S + Kaliber: 5,56x45 mm Leuchtspur - gelb<br />Schuss: 150<br />Verwendet in: SPAR-16S + + + 5.56 mm 200Rnd Reload Tracer (Green) Box + 200 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Kasten + + + 5.56 mm 200Rnd Tracer (Green) Box + 200 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Kasten + + + Caliber: 5.56x45 mm Tracer - Green<br />Rounds: 200<br />Used in: LIM-85 + Kaliber: 5,56x45 mm Leuchtspur - grün<br />Schuss: 200<br />Verwendet in: LIM-85 + + + 5.8 mm 30Rnd Reload Tracer (Red) Mag + 30 Schuss 5,8 mm Nachlade-Leuchtspur (Rot) Magazin + + + 5.8 mm 30Rnd Reload Tracer (Yellow) Mag + 30 Schuss 5,8 mm Nachlade-Leuchtspur (Gelb) Magazin + + + 5.8 mm 30Rnd Tracer (Red) Mag + 30 Schuss 5,8 mm Leuchtspur (Rot) Magazin + + + Caliber: 5.8x42 mm Tracer - Red<br />Rounds: 30<br />Used in: CAR-95, CAR-95 GL + Kaliber: 5,8x42 mm Leuchtspur - rot<br />Schuss: 30<br />Verwendet in: CAR-95, CAR-95 GL + + + 5.8 mm 30Rnd Tracer (Yellow) Mag + 30 Schuss 5,8 mm Leuchtspur (Gelb) Magazin + + + Caliber: 5.8x42 mm Tracer - Yellow<br />Rounds: 30<br />Used in: CAR-95, CAR-95 GL + Kaliber: 5,8x42 mm Leuchtspur - gelb<br />Schuss: 30<br />Verwendet in: CAR-95, CAR-95 GL + + + 5.8 mm 100Rnd Reload Tracer (Red) Mag + 100 Schuss 5,8 mm Nachlade-Leuchtspur (Rot) Magazin + + + 5.8 mm 100Rnd Reload Tracer (Yellow) Mag + 100 Schuss 5,8 mm Nachlade-Leuchtspur (Gelb) Magazin + + + 5.8 mm 100Rnd Tracer (Red) Mag + 100 Schuss 5,8 mm Leuchtspur (Rot) Magazin + + + Caliber: 5.8x42 mm Tracer - Red<br />Rounds: 100<br />Used in: CAR-95-1 + Kaliber: 5,8x42 mm Leuchtspur - rot<br />Schuss: 100<br />Verwendet in: CAR-95-1 + + + 5.8 mm 100Rnd Tracer (Yellow) Mag + 100 Schuss 5,8 mm Leuchtspur (Gelb) Magazin + + + Caliber: 5.8x42 mm Tracer - Yellow<br />Rounds: 100<br />Used in: CAR-95-1 + Kaliber: 5,8x42 mm Leuchtspur - gelb<br />Schuss: 100<br />Verwendet in: CAR-95-1 + + + 6.5mm 30Rnd Reload Tracer (Green) Mag + 30 Schuss 6.5mm Nachlade-Leuchtspur (Grün) Magazin + + + Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6.5x39 mm Nachlade-Leuchtspur - Grün<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL + + + 6.5mm 30Rnd Reload Tracer (Yellow) Mag + 30 Schuss 6.5mm Nachlade-Leuchtspur (Gelb) Magazin + + + Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6.5x39 mm Nachlade-Leuchtspur - Gelb<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL + + + 6.5mm 30Rnd Tracer (Green) Mag + 30 Schuss 6.5mm Leuchtspur (Grün) Magazin + + + Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6.5x39 mm Leuchtspur - Grün<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL + + + 6.5mm 30Rnd Tracer (Yellow) Mag + 30 Schuss 6.5mm Leuchtspur (Gelb) Magazin + + + Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL + Kaliber: 6.5x39 mm Leuchtspur - Gelb<br />Patronen: 30<br />Verwendet in: MX/C/M/SW/3GL + + + 6.5mm 100Rnd Mixed Mag (Green) + 100 Schuss 6.5mm Magazin gemischt (grün) + + + 6.5mm 100Rnd Mixed Mag (Yellow) + 100 Schuss 6.5mm Magazin gemischt (gelb) + + + 6.5mm 100Rnd Mag Tracer (Green) + 100 Schuss 6.5mm Magazin Leuchtspur (Grün) + + + Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 100<br />Used in: MX SW + Kaliber: 6.5x39 mm Leuchtspur - Grün<br />Patronen: 100<br />Verwendet in: MX SW + + + 6.5mm 100Rnd Mag Tracer (Yellow) + 100 Schuss 6.5mm Magazin Leuchtspur (Gelb) + + + Caliber: 6.5x39 mm Tracer - Yellow<br />Rounds: 100<br />Used in: MX SW + Kaliber: 6.5x39 mm Leuchtspur - Gelb<br />Patronen: 100<br />Verwendet in: MX SW + + + 6.5mm 30Rnd Reload Tracer (Red) Mag + 30 Schuss 6.5mm Nachlade-Leuchtspur (Rot) Magazin + + + 6.5mm 30Rnd Reload Tracer (Yellow) Mag + 30 Schuss 6.5mm Nachlade-Leuchtspur (Gelb) Magazin + + + 6.5mm 30Rnd Tracer (Red) Mag + 30 Schuss 6.5mm Leuchtspur (Rot) Magazin + + + Caliber: 6.5x39 mm Tracer (Red) - Caseless<br />Rounds: 30<br />Used in: Katiba, Type 115 + Kaliber: 6,5x39mm Leuchtspur (Rot) ‒ hülsenlos<br />Patronen: 30<br />Eingesetzt von: Katiba, Typ 115 + + + 6.5mm 30Rnd Tracer (Yellow) Mag + 30 Schuss 6.5mm Leuchtspur (Gelb) Magazin + + + Caliber: 6.5x39 mm Tracer (Yellow) - Caseless<br />Rounds: 30<br />Used in: Katiba, Type 115 + Kaliber: 6,5x39mm Leuchtspur (Rot) ‒ hülsenlos<br />Patronen: 30<br />Eingesetzt von: Katiba, Typ 115 + + + 6.5 mm 200Rnd Belt Case Mixed (Green) + 6,5 mm 200-Schuss-Gurtkiste Gemischt (grün) + + + Caliber: 6.5x39 mm Mixed - Green<br />Rounds: 200<br />Used in: Mk200 + Kaliber: 6.5x39 mm Gemischt - Grün<br />Patronen: 200<br />Verwendet in: Mk200 + + + 6.5 mm 200Rnd Belt Case Mixed (Red) + 6,5 mm 200-Schuss-Gurtkiste Gemischt (grün) + + + Caliber: 6.5x39 mm Mixed - Red<br />Rounds: 200<br />Used in: Mk200 + Kaliber: 6.5x39 mm Mixed - Rot<br />Patronen: 200<br />Verwendet in: Mk200 + + + 6.5 mm 200Rnd Belt Case Tracer (Green) + 6,5 mm 200-Schuss-Gurtkiste Leuchtspur (grün) + + + Caliber: 6.5x39 mm Tracer - Green<br />Rounds: 200<br />Used in: Mk200 + Kaliber: 6.5x39 mm Leuchtspur - Grün<br />Patronen: 200<br />Verwendet in: Mk200 + + + 6.5 mm 200Rnd Belt Case Tracer (Red) + 6,5 mm 200-Schuss-Gurtkiste Leuchtspur (rot) + + + Caliber: 6.5x39 mm Tracer - Red<br />Rounds: 200<br />Used in: Mk200 + Kaliber: 6.5x39 mm Leuchtspur - Rot<br />Patronen: 200<br />Verwendet in: Mk200 + + + 7.62 mm 20Rnd Tracer (Green) Mag + 7,62 mm 20-Schuss-Magazin Leuchtspur (Grün) + + + Caliber: 7.62x51 mm NATO Tracer - Green<br />Rounds: 20<br />Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + Kaliber: 7,62x51 mm NATO Leuchtspur - grün<br />Patronen: 20<br />Eingesetzt von: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + + + 7.62 mm 20Rnd Tracer (Yellow) Mag + 7,62 mm 20-Schuss-Magazin Leuchtspur (Gelb) + + + Caliber: 7.62x51 mm NATO Tracer - Yellow<br />Rounds: 20<br />Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + Kaliber: 7,62x51 mm NATO Leuchtspur - gelb<br />Patronen: 20<br />Eingesetzt von: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17 + + + 7.62mm 150Rnd Box Mixed (Red) + 7.62mm 150 Schuss Kiste Gemischt (rot) + + + 7.62mm 150Rnd Box Mixed (Yellow) + 7.62mm 150 Schuss Kiste Gemischt (gelb) + + + 7.62mm 150Rnd Box Tracer (Red) + 7.62mm 150 Schuss Kiste Leuchtspur (rot) + + + Caliber: 7.62x54 mm Tracer - Red<br />Rounds: 150<br />Used in: Zafir + Kaliber: 7.62x54 mm Leuchtspur - Rot<br />Patronen: 150<br />Verwendet in: Zafir + + + 7.62mm 150Rnd Box Tracer (Yellow) + 7.62mm 150 Schuss Kiste Leuchtspur (Rot) + + + Caliber: 7.62x54 mm Tracer - Yellow<br />Rounds: 150<br />Used in: Zafir + Kaliber: 7.62x54 mm Leuchtspur - Gelb<br />Patronen: 150<br />Verwendet in: Zafir + + + 9.3mm 150Rnd Belt Mixed (Yellow) + 9.3mm 150 Schuss Gurt gemischt (Gelb) + + + 9.3mm 150Rnd Belt Mixed (Red) + 9.3mm 150 Schuss Gurt gemischt (Rot) + + + .338 NM 130Rnd Belt Mixed (Yellow) + .338 NM 130 Schuss Gurt gemischt (gelb) + + + .338 NM 130Rnd Belt Mixed (Green) + .338 NM 130 Schuss Gurt gemischt (grün) + + + + diff --git a/tools/cba/addons/xeh/script_xeh.hpp b/tools/cba/addons/xeh/script_xeh.hpp deleted file mode 100644 index ef62f1df53..0000000000 --- a/tools/cba/addons/xeh/script_xeh.hpp +++ /dev/null @@ -1,102 +0,0 @@ -/* - Header: script_xeh.hpp - - Description: - Used internally. -*/ -///////////////////////////////////////////////////////////////////////////////// -// MACRO: EXTENDED_EVENTHANDLERS -// Add all XEH event handlers -///////////////////////////////////////////////////////////////////////////////// - -#define EXTENDED_EVENTHANDLERS init = "(_this select 0) call CBA_fnc_initEvents; (_this select 0) call CBA_fnc_init"; \ -fired = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_fired"")"; \ -animChanged = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_animChanged"")"; \ -animDone = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_animDone"")"; \ -animStateChanged = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_animStateChanged"")"; \ -containerClosed = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_containerClosed"")"; \ -containerOpened = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_containerOpened"")"; \ -controlsShifted = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_controlsShifted"")"; \ -dammaged = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_dammaged"")"; \ -engine = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_engine"")"; \ -epeContact = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_epeContact"")"; \ -epeContactEnd = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_epeContactEnd"")"; \ -epeContactStart = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_epeContactStart"")"; \ -explosion = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_explosion"")"; \ -firedNear = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_firedNear"")"; \ -fuel = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_cba_xeh_fuel"")"; \ -gear = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_gear"")"; \ -getIn = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getIn"")"; \ -getInMan = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getInMan"")"; \ -getOut = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getOut"")"; \ -getOutMan = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_getOutMan"")"; \ -handleHeal = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_handleHeal"")"; \ -hit = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_hit"")"; \ -hitPart = "{_this call _x} forEach ((_this select 0 select 0) getVariable ""cba_xeh_hitPart"")"; \ -incomingMissile = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_incomingMissile"")"; \ -inventoryClosed = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_inventoryClosed"")"; \ -inventoryOpened = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_inventoryOpened"")"; \ -killed = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_killed"")"; \ -landedTouchDown = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_landedTouchDown"")"; \ -landedStopped = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_landedStopped"")"; \ -local = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_local"")"; \ -respawn = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_respawn"")"; \ -put = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_put"")"; \ -take = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_take"")"; \ -seatSwitched = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_seatSwitched"")"; \ -seatSwitchedMan = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_seatSwitchedMan"")"; \ -soundPlayed = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_soundPlayed"")"; \ -weaponAssembled = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponAssembled"")"; \ -weaponDisassembled = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponDisassembled"")"; \ -weaponDeployed = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponDeployed"")"; \ -weaponRested = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_weaponRested"")"; \ -reloaded = "{_this call _x} forEach ((_this select 0) getVariable ""cba_xeh_reloaded"")"; - - -/* - MACRO: DELETE_EVENTHANDLERS - - Removes all event handlers. -*/ - -#define DELETE_EVENTHANDLERS init = ""; \ -fired = ""; \ -animChanged = ""; \ -animDone = ""; \ -animStateChanged = ""; \ -containerClosed = ""; \ -containerOpened = ""; \ -controlsShifted = ""; \ -dammaged = ""; \ -engine = ""; \ -epeContact = ""; \ -epeContactEnd = ""; \ -epeContactStart = ""; \ -explosion = ""; \ -firedNear = ""; \ -fuel = ""; \ -gear = ""; \ -getIn = ""; \ -getInMan = ""; \ -getOut = ""; \ -getOutMan = ""; \ -handleHeal = ""; \ -hit = ""; \ -hitPart = ""; \ -incomingMissile = ""; \ -inventoryClosed = ""; \ -inventoryOpened = ""; \ -killed = ""; \ -landedTouchDown = ""; \ -landedStopped = ""; \ -local = ""; \ -respawn = ""; \ -put = ""; \ -take = ""; \ -seatSwitched = ""; \ -soundPlayed = ""; \ -weaponAssembled = ""; \ -weaponDisassembled = ""; \ -weaponDeployed = ""; \ -weaponRested = ""; \ -reloaded = ""; diff --git a/tools/event_rename.py b/tools/event_rename.py deleted file mode 100644 index 99dd261a02..0000000000 --- a/tools/event_rename.py +++ /dev/null @@ -1,115 +0,0 @@ -import os -import sys -import re - -un_capitalize = lambda s: s[:1].lower() + s[1:] if s else '' - -def add_to_config(old, new): - with open(add_to_config.file, "r+") as file: - contents = file.read() - - events_class = re.search(r"class\s+ACE_newEvents\s+{\n",contents,re.I) - - if events_class: - newline_index = events_class.end() - insert = " {0} = \"{1}\";\n".format(old,new) - else: - newline_index = len(contents) - insert = "\nclass ACE_newEvents {{\n {0} = \"{1}\";\n}};".format(old,new) - - contents = contents[:newline_index] + insert + contents[newline_index:] - - file.seek(0) - file.write(contents) - file.truncate() - -def event_replace(match): - event = un_capitalize(match.group(1)) - add_to_config(match.group(1), "ace_" + event) - - return "[\"ace_{0}\", {1}] call CBA_fnc_{2}".format(event,match.group(2),match.group(3)) - -def process_directory(dir, config=""): - if not config: - config = os.path.join(dir,"config.cpp") - if os.path.isfile(config): - add_to_config.file = config - - for p in os.listdir(dir): - path = os.path.join(dir, p) - if os.path.isdir(path): - process_directory(path, config) - continue - - ext = os.path.splitext(path)[1] - if ext not in [".sqf",".hpp",".cpp"]: - continue - - with open(path, "r+") as file: - contents = file.read() - - # Simple single-line substitutions - find = r"\[\s*\"(?!ace_)(\w+)\"\s*,\s*(.+?)\s*\]\s+call\s+CBA_fnc_((add|remove|local|global|target|server)Event(Handler)?)" - contents, subbed = re.subn(find,event_replace,contents,0,re.I) - - # Handle multi-line code blocks - for match in re.finditer(r"\[\s*\"(?!ace_)(\w+)\"\s*,\s*({.+?})\s*\]\s+call\s*CBA_fnc_(add|remove)EventHandler",contents,re.I|re.S): - pair = 0 - for i, c in enumerate(contents[match.start(2):]): - if c == "{": - pair += 1 - elif c == "}": - pair -= 1 - if pair == 0: - pair = i - break - if re.match(r"\s*\]\s+call\s+CBA_fnc_(add|remove)EventHandler",contents[pair+match.start(2)+1:],re.I): - event = un_capitalize(match.group(1)) - add_to_config(match.group(1), "ace_" + event) - - contents = contents[:match.start(1)] + "ace_" + event + contents[match.end(1):] - subbed += 1 - - # Handle multi-line argument arrays - for match in re.finditer(r"\[\s*\"(?!ace_)(\w+)\"\s*,\s*(\[.+?\])\s*\]\s+call\s*CBA_fnc_(local|global|server)Event",contents,re.I|re.S): - pair = 0 - for i, c in enumerate(contents[match.start(2):]): - if c == "[": - pair += 1 - elif c == "]": - pair -= 1 - if pair == 0: - pair = i - break - if re.match(r"\s*\]\s+call\s+CBA_fnc_(local|global|server)Event",contents[pair+match.start(2)+1:],re.I): - event = un_capitalize(match.group(1)) - add_to_config(match.group(1), "ace_" + event) - - contents = contents[:match.start(1)] + "ace_" + event + contents[match.end(1):] - subbed += 1 - - if subbed > 0: - print("Making {0} substitutions: {1}".format(subbed,path)) - - file.seek(0) - file.write(contents) - file.truncate() - -def main(): - scriptpath = os.path.realpath(sys.argv[0]) - projectpath = os.path.dirname(os.path.dirname(scriptpath)) - addonspath = os.path.join(projectpath, "addons") - - os.chdir(addonspath) - - for p in os.listdir(addonspath): - path = os.path.join(addonspath, p) - if not os.path.isdir(path): - continue - if p[0] == ".": - continue - - process_directory(path) - -if __name__ == "__main__": - sys.exit(main()) diff --git a/tools/make.ps1 b/tools/make.ps1 new file mode 100644 index 0000000000..2aac0f2c9f --- /dev/null +++ b/tools/make.ps1 @@ -0,0 +1,130 @@ +$projectRoot = Split-Path -Parent $PSScriptRoot +$releasePage = "https://github.com/KoffeinFlummi/armake/releases" +$downloadPage = "https://github.com/KoffeinFlummi/armake/releases/download/v{0}/armake_v{0}.zip" +$armake = "$projectRoot\tools\armake.exe" +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + + +function Compare-VersionNewerThan { + param( + [Parameter(Mandatory=$True)] + $version1, + + [Parameter(Mandatory=$True)] + $version2 + ) + + $version1 = $version1.Split(".") | % {[int] $_} + $version2 = $version2.Split(".") | % {[int] $_} + + $newer = $False + for ($i = 0; $i -lt $version1.Length; $i++) { + if ($version1[$i] -gt $version2[$i]) { + $newer = $True + break + } + } + + $newer +} + + +function Get-InstalledArmakeVersion { + if (Test-Path $armake) { + $version = & $armake --version + $version = $version.Substring(1) + } else { + $version = "0.0.0" + } + + $version +} + + +function Get-LatestArmakeVersion { + $client = New-Object Net.WebClient + $content = $client.DownloadString($releasePage) + $client.dispose() + + $match = $content -match "" + if (!$match) { + Write-Error "Failed to find valid armake download link." + $version = "0.0.0" + } else { + $version = $matches[1] + } + + $version +} + + +function Update-Armake { + param( + [Parameter(Mandatory=$True)] + $url + ) + + New-Item "$PSScriptRoot\temp" -ItemType "directory" -Force | Out-Null + + Write-Output "Downloading armake..." + $client = New-Object Net.WebClient + $client.DownloadFile($url, "$PSScriptRoot\temp\armake.zip") + $client.dispose() + + Write-Output "Download complete, unpacking..." + Expand-Archive "$PSScriptRoot\temp\armake.zip" "$PSScriptRoot\temp\armake" + Remove-Item "$PSScriptRoot\temp\armake.zip" + + if ([Environment]::Is64BitProcess) { + $binary = Get-ChildItem -Path "$PSScriptRoot\temp\armake" -Include "*.exe" -Recurse | Where-Object {$_.Name -match ".*w64.exe"} + } else { + $binary = Get-ChildItem -Path "$PSScriptRoot\temp\armake" -Include "*.exe" -Recurse | Where-Object {$_.Name -match ".*w64.exe"} + } + Move-Item $binary.FullName $armake -Force + + Remove-Item "$PSScriptRoot\temp" -Recurse -Force +} + + +function Build-Directory { + param( + [Parameter(Mandatory=$True)] + $directory + ) + + $component = $directory.Name + $fullPath = $directory.FullName + $parent = $directory.Parent + $binPath = "$projectRoot\@ace\$parent\ace_$component.pbo" + + Write-Output " PBO $component" + & $armake build -i "$projectRoot\include" -w unquoted-string -w redefinition-wo-undef -f $fullPath $binPath + + if ($LastExitCode -ne 0) { + Write-Error "Failed to build $component." + } +} + + +function Main { + $installed = Get-InstalledArmakeVersion + $latest = Get-LatestArmakeVersion + + if (Compare-VersionNewerThan $latest $installed) { + Write-Output "Found newer version of armake:" " Installed: $installed" " Latest: $latest" + Update-Armake ($downloadPage -f $latest) + Write-Output "Update complete, armake up-to-date." + } + + $orgLocation = Get-Location + Set-Location -Path $projectRoot + foreach ($folder in "addons", "optionals") { + New-Item "$projectRoot\@ace\$folder" -ItemType "directory" -Force | Out-Null + foreach ($component in Get-ChildItem -Directory "$PSScriptRoot\..\$folder") { + Build-Directory $component + } + } + Set-Location $orgLocation +} + +Main diff --git a/tools/publish.py b/tools/publish.py index bd4f4f8389..62317dedc8 100644 --- a/tools/publish.py +++ b/tools/publish.py @@ -98,7 +98,6 @@ def main(argv): #RHS Compat USA - http://steamcommunity.com/sharedfiles/filedetails/?id=773125288 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rhs_usf3"), "773125288", changelog_path) #RHS Compat Russians - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 @@ -107,9 +106,6 @@ def main(argv): #RHS Compat GREF - http://steamcommunity.com/sharedfiles/filedetails/?id=884966711 publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_rhs_gref3"), "884966711", changelog_path) - #ADR97 (p90)- http://steamcommunity.com/sharedfiles/filedetails/?id=773136286 - publishFolder(os.path.join(ace_optionals_dir,"@ace_compat_adr_97"), "773136286", changelog_path) - if __name__ == "__main__": diff --git a/tools/setup.py b/tools/setup.py index af1b224cbb..2991985e7b 100644 --- a/tools/setup.py +++ b/tools/setup.py @@ -96,10 +96,10 @@ def main(): return -1 try: - shutil.copytree(os.path.join(projectpath, "tools", "cba"), CBA) + shutil.copytree(os.path.join(projectpath, "include", "x", "cba"), CBA) except: raise - print("Something went wrong while copying CBA includes. Please copy tools\\cba to {} manually.".format(CBA)) + print("Something went wrong while copying CBA includes. Please copy include\\x\\cba to {} manually.".format(CBA)) return 7 print("# CBA includes copied successfully to {}.".format(CBA)) diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py index c45f0f94f2..6686004ac4 100644 --- a/tools/sqf_validator.py +++ b/tools/sqf_validator.py @@ -48,6 +48,7 @@ def check_sqf_syntax(filepath): lastIsCurlyBrace = False checkForSemicolon = False + onlyWhitespace = True # Extra information so we know what line we find errors at lineNumber = 1 @@ -61,6 +62,7 @@ def check_sqf_syntax(filepath): checkForSemicolon = not re.search('findIf', content, re.IGNORECASE) if c == '\n': # Keeping track of our line numbers + onlyWhitespace = True # reset so we can see if # is for a preprocessor command lineNumber += 1 # so we can print accurate line number information when we detect a possible error if (isInString): # while we are in a string, we can ignore everything else, except the end of the string if (c == inStringType): @@ -84,7 +86,7 @@ def check_sqf_syntax(filepath): if (c == '"' or c == "'"): isInString = True inStringType = c - elif (c == '#'): + elif (c == '#' and onlyWhitespace): ignoreTillEndOfLine = True elif (c == '/'): checkIfInComment = True @@ -114,6 +116,9 @@ def check_sqf_syntax(filepath): print("ERROR: Tab detected at {0} Line number: {1}".format(filepath,lineNumber)) bad_count_file += 1 + if (c not in [' ', '\t', '\n']): + onlyWhitespace = False + if (checkForSemicolon): if (c not in [' ', '\t', '\n', '/']): # keep reading until no white space or comments checkForSemicolon = False