diff --git a/addons/common/functions/fnc_loadSettingsLocalizedText.sqf b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf index f846fa9354..6a2711c2a7 100644 --- a/addons/common/functions/fnc_loadSettingsLocalizedText.sqf +++ b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf @@ -39,7 +39,7 @@ private _fnc_parseConfigForDisplayNames = { } else { private _value = missionNamespace getVariable [_name, -1]; if ((_value < 0) || {_value >= (count _values)}) then { - ACE_LOGWARNING_3("Setting [%1] out of bounds %2 (values[] count is %3)(", _name, _value, count _values); + ACE_LOGWARNING_3("Setting [%1] out of bounds %2 (values[] count is %3)", _name, _value, count _values); }; }; }; diff --git a/addons/explosives/XEH_postInit.sqf b/addons/explosives/XEH_postInit.sqf index 651f704a6a..e8f12ca6e3 100644 --- a/addons/explosives/XEH_postInit.sqf +++ b/addons/explosives/XEH_postInit.sqf @@ -36,16 +36,40 @@ GVAR(Setup) = objNull; GVAR(pfeh_running) = false; GVAR(CurrentSpeedDial) = 0; -// Properly angle preplaced bottom-attack SLAMs -{ - if (local _x) then { - switch (typeOf _x) do { - case ("ACE_SLAMDirectionalMine_Magnetic_Ammo"): { - [_x, getDir _x, 90] call FUNC(setPosition); - }; +// In case we are a JIP client, ask the server for orientation of any previously +// placed mine. +if (isServer) then { + ["clientRequestsOrientations", { + params ["_logic"]; + TRACE_1("clientRequestsOrientations received:",_logic); + // Filter the array before sending it + GVAR(explosivesOrientations) = GVAR(explosivesOrientations) select { + _x params ["_explosive"]; + (!isNull _explosive && {alive _explosive}) }; - }; -} forEach allMines; + TRACE_1("serverSendsOrientations sent:",GVAR(explosivesOrientations)); + ["serverSendsOrientations", _logic, [GVAR(explosivesOrientations)]] call EFUNC(common,targetEvent); + }] call EFUNC(common,addEventHandler); +} else { + ["serverSendsOrientations", { + params ["_explosivesOrientations"]; + TRACE_1("serverSendsOrientations received:",_explosivesOrientations); + { + _x params ["_explosive","_direction","_pitch"]; + TRACE_3("orientation set:",_explosive,_direction,_pitch); + [_explosive, _direction, _pitch] call FUNC(setPosition); + } forEach _explosivesOrientations; + private _group = group GVAR(localLogic); + deleteVehicle GVAR(localLogic); + GVAR(localLogic) = nil; + deleteGroup _group; + }] call EFUNC(common,addEventHandler); + + // Create a logic to get the client ID + GVAR(localLogic) = (createGroup sideLogic) createUnit ["Logic", [0,0,0], [], 0, "NONE"]; + TRACE_1("clientRequestsOrientations sent:",GVAR(localLogic)); + ["clientRequestsOrientations", [GVAR(localLogic)]] call EFUNC(common,serverEvent); +}; ["interactMenuOpened", { //Cancel placement if interact menu opened diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 8ec4fa3817..16a9a4124b 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -19,4 +19,8 @@ ADDON = false; #include "XEH_PREP.hpp" +if (isServer) then { + GVAR(explosivesOrientations) = [] +}; + ADDON = true; diff --git a/addons/explosives/functions/fnc_setPosition.sqf b/addons/explosives/functions/fnc_setPosition.sqf index b19e63ff5a..430f926138 100644 --- a/addons/explosives/functions/fnc_setPosition.sqf +++ b/addons/explosives/functions/fnc_setPosition.sqf @@ -29,3 +29,15 @@ if (isNull (attachedTo _explosive)) then { //Attaching to a vehicle (dirAndUp based on vehicle) _explosive setVectorDirAndUp [[0,0,1],[(sin _direction),(cos _direction),0]]; }; + +if (isServer) then { + // Store the orientation to broadcast it later to JIP players + GVAR(explosivesOrientations) pushBack [_explosive, _direction, _pitch]; + + // This is a good time to filter the array and remove explosives that no longer exist + GVAR(explosivesOrientations) = GVAR(explosivesOrientations) select { + _x params ["_explosive"]; + (!isNull _explosive && {alive _explosive}) + }; + TRACE_1("setPosition",GVAR(explosivesOrientations)); +}; diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 43ccb48a4c..c63c990a16 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -91,6 +91,7 @@ Blokováno Zablokowany Bloccato + Blockiert Bloqué @@ -730,4 +731,4 @@ Conectar à %1 - \ No newline at end of file + diff --git a/addons/fastroping/$PBOPREFIX$ b/addons/fastroping/$PBOPREFIX$ new file mode 100644 index 0000000000..352dc2c83a --- /dev/null +++ b/addons/fastroping/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\fastroping diff --git a/addons/fastroping/CfgEventHandlers.hpp b/addons/fastroping/CfgEventHandlers.hpp new file mode 100644 index 0000000000..e75956f440 --- /dev/null +++ b/addons/fastroping/CfgEventHandlers.hpp @@ -0,0 +1,11 @@ +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/fastroping/CfgMoves.hpp b/addons/fastroping/CfgMoves.hpp new file mode 100644 index 0000000000..da2d0f0613 --- /dev/null +++ b/addons/fastroping/CfgMoves.hpp @@ -0,0 +1,39 @@ +class CfgMovesBasic { + class DefaultDie; + class ManActions { + ACE_FastRoping = "ACE_FastRoping"; + }; +}; + +class CfgMovesMaleSdr: CfgMovesBasic { + class States { + class Crew; + class ACE_freefallLoop: Crew { + file = PATHTOF(anim\freefallLoop.rtm); + interpolateTo[] = {"Unconscious", 1}; + disableWeapons = 1; + disableWeaponsLong = 1; + canReload = 0; + looped = 1; + speed = 0.204082; + }; + class ACE_freefallStart: Crew { + file = PATHTOF(anim\freefallStart.rtm); + interpolateTo[] = {"Unconscious", 1}; + disableWeapons = 1; + disableWeaponsLong = 1; + canReload = 0; + looped = 0; + speed = 0.61224502; + }; + class ACE_slidingLoop: Crew { + file = PATHTOF(anim\slidingLoop.rtm); + interpolateTo[] = {"Unconscious", 1}; + disableWeapons = 1; + disableWeaponsLong = 1; + canReload = 0; + looped = 1; + speed = 0.441176; + }; + }; +}; diff --git a/addons/fastroping/CfgVehicles.hpp b/addons/fastroping/CfgVehicles.hpp new file mode 100644 index 0000000000..560f60cffc --- /dev/null +++ b/addons/fastroping/CfgVehicles.hpp @@ -0,0 +1,207 @@ +#define EQUIP_FRIES_ATTRIBUTE class Attributes { \ + class GVAR(equipFRIES) { \ + property = QGVAR(equipFRIES); \ + control = "Checkbox"; \ + displayName = CSTRING(Eden_equipFRIES); \ + tooltip = CSTRING(Eden_equipFRIES_Tooltip); \ + expression = [_this] call FUNC(equipFRIES); \ + typeName = "BOOL"; \ + condition = "objectVehicle"; \ + defaultValue = false; \ + }; \ +} + +class CfgVehicles { + class Building; + class NonStrategic: Building { + class AnimationSources; + }; + class ACE_friesBase: NonStrategic { + destrType = ""; + }; + class ACE_friesAnchorBar: ACE_friesBase { + author = "jokoho48"; + scope = 1; + model = PATHTOF(data\friesAnchorBar.p3d); + animated = 1; + class AnimationSources: AnimationSources { + class extendHookRight { + source = "user"; + initPhase = 0; + animPeriod = 1.5; + }; + class extendHookLeft { + source = "user"; + initPhase = 0; + animPeriod = 1.5; + }; + }; + }; + class ACE_friesGantry: ACE_friesBase { + author = "jokoho48"; + scope = 1; + model = PATHTOF(data\friesGantry.p3d); + animated = 1; + class AnimationSources: AnimationSources { + class adjustWidth { + source = "user"; + initPhase = 0.211; + animPeriod = 0; + }; + class rotateGantryLeft { + source = "user"; + initPhase = 0; + animPeriod = 0; + }; + class rotateGantryRight { + source = "user"; + initPhase = 0; + animPeriod = 0; + }; + }; + }; + class ACE_friesGantryReverse: ACE_friesGantry { + class AnimationSources: AnimationSources { + class adjustWidth { + source = "user"; + initPhase = 0.213; + animPeriod = 0; + }; + class rotateGantryLeft { + source = "user"; + initPhase = 0.5; + animPeriod = 0; + }; + class rotateGantryRight { + source = "user"; + initPhase = 0.5; + animPeriod = 0; + }; + }; + }; + + class Logic; + class Module_F: Logic { + class ModuleDescription; + }; + class ACE_Module: Module_F {}; + class ACE_moduleEquipFRIES: ACE_Module { + scope = 2; + displayName = CSTRING(Module_FRIES_DisplayName); + icon = QUOTE(PATHTOF(UI\Icon_Module_FRIES_ca.paa)); + category = "ACE"; + function = QUOTE(FUNC(moduleEquipFRIES)); + functionPriority = 10; + isGlobal = 0; + isTriggerActivated = 0; + isDisposable = 0; + author = "BaerMitUmlaut"; + + class ModuleDescription: ModuleDescription { + description = CSTRING(Module_FRIES_Description); + sync[] = {"AnyVehicle"}; + }; + }; + + class Air; + class Helicopter: Air { + class ACE_SelfActions { + class ACE_prepareFRIES { + displayName = CSTRING(Interaction_prepareFRIES); + condition = [vehicle _player] call FUNC(canPrepareFRIES); + statement = [vehicle _player] call FUNC(prepareFRIES); + showDisabled = 0; + priority = 1; + }; + class ACE_deployRopes { + displayName = CSTRING(Interaction_deployRopes); + condition = [_player, vehicle _player] call FUNC(canDeployRopes); + statement = [QGVAR(deployRopes), [vehicle _player]] call EFUNC(common,serverEvent); + showDisabled = 0; + priority = 1; + }; + class ACE_cutRopes { + displayName = CSTRING(Interaction_cutRopes); + condition = [vehicle _player] call FUNC(canCutRopes); + statement = [vehicle _player] call FUNC(cutRopes); + showDisabled = 0; + priority = 1; + }; + class ACE_fastRope { + displayName = CSTRING(Interaction_fastRope); + condition = [_player, vehicle _player] call FUNC(canFastRope); + statement = [_player, vehicle _player] call FUNC(fastRope); + showDisabled = 0; + priority = 1; + }; + }; + }; + + class Helicopter_Base_H; + class Helicopter_Base_F; + + class GVAR(helper): Helicopter_Base_F { + author = "KoffeinFlummi"; + scope = 1; + model = PATHTOF(data\helper.p3d); + class ACE_Actions { + class ACE_MainActions { + condition = "false"; + }; + }; + class Turrets {}; + }; + + class Heli_Light_02_base_F: Helicopter_Base_H { + GVAR(enabled) = 1; + GVAR(ropeOrigins[]) = {{1.41, 1.38, 0}, {-1.41, 1.38, 0}}; + GVAR(onPrepare) = QFUNC(onPrepareCommon); + GVAR(onCut) = QFUNC(onCutCommon); + }; + class Heli_Attack_02_base_F: Helicopter_Base_F { + GVAR(enabled) = 1; + GVAR(ropeOrigins[]) = {{1.25, 1.5, -0.6}, {-1.1, 1.5, -0.6}}; + GVAR(onPrepare) = QFUNC(onPrepareCommon); + GVAR(onCut) = QFUNC(onCutCommon); + }; + class Heli_Transport_01_base_F: Helicopter_Base_H { + GVAR(enabled) = 2; + GVAR(ropeOrigins[]) = {"ropeOriginRight", "ropeOriginLeft"}; + GVAR(friesType) = "ACE_friesAnchorBar"; + GVAR(friesAttachmentPoint[]) = {0.065, 2.2, -0.15}; + GVAR(onPrepare) = QFUNC(onPrepareCommon); + GVAR(onCut) = QFUNC(onCutCommon); + EQUIP_FRIES_ATTRIBUTE; + }; + class Heli_Transport_02_base_F: Helicopter_Base_H { + GVAR(enabled) = 1; + GVAR(ropeOrigins[]) = {{0.94, -4.82, -1.16}, {-0.94, -4.82, -1.16}}; + }; + class Heli_Transport_03_base_F: Helicopter_Base_H { + GVAR(enabled) = 1; + GVAR(ropeOrigins[]) = {{0.75, -5.29, -0.11}, {-0.87, -5.29, -0.11}}; + }; + class Heli_light_03_base_F: Helicopter_Base_F { + GVAR(enabled) = 2; + GVAR(ropeOrigins[]) = {"ropeOriginRight", "ropeOriginLeft"}; + GVAR(friesType) = "ACE_friesGantryReverse"; + GVAR(friesAttachmentPoint[]) = {1.04, 2.5, -0.34}; + EQUIP_FRIES_ATTRIBUTE; + }; + class Heli_light_03_unarmed_base_F: Heli_light_03_base_F { + GVAR(enabled) = 2; + GVAR(ropeOrigins[]) = {"ropeOriginRight", "ropeOriginLeft"}; + GVAR(friesType) = "ACE_friesGantry"; + GVAR(friesAttachmentPoint[]) = {-1.07, 3.26, -0.5}; + EQUIP_FRIES_ATTRIBUTE; + }; + class Heli_Transport_04_base_F; + class O_Heli_Transport_04_bench_F: Heli_Transport_04_base_F { + GVAR(enabled) = 1; + GVAR(ropeOrigins[]) = {{1.03, 1.6, -0.23}, {1.03, -1.36, -0.23}, {-1.23, 1.6, -0.23}, {-1.23, -1.36, -0.23}}; + }; + class O_Heli_Transport_04_covered_F: Heli_Transport_04_base_F { + GVAR(enabled) = 1; + GVAR(ropeOrigins[]) = {{0.83, -4.7, -0.03}, {-1.02, -4.7, -0.03}}; + }; +}; diff --git a/addons/fastroping/UI/Icon_Module_FRIES_ca.paa b/addons/fastroping/UI/Icon_Module_FRIES_ca.paa new file mode 100644 index 0000000000..9af930e35e Binary files /dev/null and b/addons/fastroping/UI/Icon_Module_FRIES_ca.paa differ diff --git a/addons/fastroping/XEH_postInit.sqf b/addons/fastroping/XEH_postInit.sqf new file mode 100644 index 0000000000..873d1091e5 --- /dev/null +++ b/addons/fastroping/XEH_postInit.sqf @@ -0,0 +1,14 @@ +#include "script_component.hpp" + +[QGVAR(deployRopes), { + _this call FUNC(deployRopes); +}] call EFUNC(common,addEventHandler); + +[QGVAR(startFastRope), { + [FUNC(fastRopeServerPFH), 0, _this] call CBA_fnc_addPerFrameHandler; +}] call EFUNC(common,addEventHandler); + +[QGVAR(ropeDetach), { + params ["_object", "_rope"]; + _object ropeDetach _rope; +}] call EFUNC(common,addEventHandler); diff --git a/addons/fastroping/XEH_preInit.sqf b/addons/fastroping/XEH_preInit.sqf new file mode 100644 index 0000000000..39aeb66a94 --- /dev/null +++ b/addons/fastroping/XEH_preInit.sqf @@ -0,0 +1,21 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(canCutRopes); +PREP(canDeployRopes); +PREP(canFastRope); +PREP(canPrepareFRIES); +PREP(cutRopes); +PREP(deployRopes); +PREP(equipFRIES); +PREP(fastRope); +PREP(fastRopeLocalPFH); +PREP(fastRopeServerPFH); +PREP(moduleEquipFRIES); +PREP(onCutCommon); +PREP(onPrepareCommon); +PREP(onRopeBreak); +PREP(prepareFRIES); + +ADDON = true; diff --git a/addons/fastroping/anim/LICENSE b/addons/fastroping/anim/LICENSE new file mode 100644 index 0000000000..2274430c9b --- /dev/null +++ b/addons/fastroping/anim/LICENSE @@ -0,0 +1,110 @@ +ARMA PUBLIC LICENSE +https://www.bistudio.com/community/licenses/arma-public-license + +Brief summary of this Licence + +PLEASE, NOTE THAT THIS SUMMARY HAS NO LEGAL EFFECT AND IS ONLY OF AN INFORMATORY NATURE DESIGNED FOR YOU TO GET THE BASIC INFORMATION ABOUT THE CONTENT OF THIS LICENCE. THE ONLY LEGALLY BINDING PROVISIONS ARE THOSE IN THE ORIGINAL AND FULL TEXT OF THIS LICENCE. + +With this licence you are free to adapt (i.e. modify, rework or update) and share (i.e. copy, distribute or transmit) the material under the following conditions: + + Attribution - You must attribute the material in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the material). + Noncommercial - You may not use this material for any commercial purposes. + Arma Only - You may not convert or adapt this material to be used in other games than Arma. + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Arma Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 - Definitions + + Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + ArmaOnly means primarily intended for or directed towards the use in any of existing and future Arma games, including but not limited to Arma: Cold War Assault, Arma, Arma 2 and Arma 3 and its official sequels and expansion packs. + Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + Licensor means the individual(s) or entity(ies) granting rights under this Public License. + NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange. + Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope + + License grant + Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + reproduce and Share the Licensed Material, in whole or in part, for NonCommercial and ArmaOnly purposes only; and + produce, reproduce, and Share Adapted Material for NonCommercial and ArmaOnly purposes only. + Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + Term. The term of this Public License is specified in Section 6(a). + Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + Downstream recipients. + Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(a)(i). + Other rights + Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + Patent and trademark rights are not licensed under this Public License. + To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial and ArmaOnly purposes. + +Section 3 – License Conditions + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + Attribution + + If You Share the Licensed Material (including in modified form), You must: + retain the following if it is supplied by the Licensor with the Licensed Material: + identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + a copyright notice; + a notice that refers to this Public License; + a notice that refers to the disclaimer of warranties; + a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(a) to the extent reasonably practicable. + If You Share Adapted Material You produce, the Adapter’s License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial and ArmaOnly purposes only; + if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. + +Section 5 – Disclaimer of Warranties and Limitation of Liability + + Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination + + This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions + + The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation + + For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Bohemia Interactive Notices + + Bohemia Interactive a.s. is not a party to this License, and makes no warranty whatsoever in connection with the Licensed Material. Bohemia Interactive a.s. will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, Bohemia Interactive a.s. may elect to apply the Public License to material it publishes and in those instances it becomes the "Licensor". + Except for the limited purpose of indicating to the public that the Licensed Material is shared under this Public License, Bohemia Interactive a.s. does not authorize the use by either party of the trademarks "Arma", "Bohemia Interactive" or any related trademark or logo of Arma or Bohemia Interactive without the prior written consent of Bohemia Interactive a.s. diff --git a/addons/fastroping/anim/freefallLoop.rtm b/addons/fastroping/anim/freefallLoop.rtm new file mode 100644 index 0000000000..1046bdd4c0 Binary files /dev/null and b/addons/fastroping/anim/freefallLoop.rtm differ diff --git a/addons/fastroping/anim/freefallStart.rtm b/addons/fastroping/anim/freefallStart.rtm new file mode 100644 index 0000000000..58aeccc0d9 Binary files /dev/null and b/addons/fastroping/anim/freefallStart.rtm differ diff --git a/addons/fastroping/anim/slidingLoop.rtm b/addons/fastroping/anim/slidingLoop.rtm new file mode 100644 index 0000000000..def4133633 Binary files /dev/null and b/addons/fastroping/anim/slidingLoop.rtm differ diff --git a/addons/fastroping/config.cpp b/addons/fastroping/config.cpp new file mode 100644 index 0000000000..25ec1876fa --- /dev/null +++ b/addons/fastroping/config.cpp @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interaction"}; + author[] = {"KoffeinFlummi", "BaerMitUmlaut"}; + authorUrl = ""; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgMoves.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/fastroping/data/friesAnchorBar.p3d b/addons/fastroping/data/friesAnchorBar.p3d new file mode 100644 index 0000000000..2b14bb8010 Binary files /dev/null and b/addons/fastroping/data/friesAnchorBar.p3d differ diff --git a/addons/fastroping/data/friesAnchorBar.rvmat b/addons/fastroping/data/friesAnchorBar.rvmat new file mode 100644 index 0000000000..06a8415c04 --- /dev/null +++ b/addons/fastroping/data/friesAnchorBar.rvmat @@ -0,0 +1,66 @@ +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,0}; +specular[] = {0.071,0.071,0.071,1}; +specularPower = 110; +PixelShaderID = "Super"; +VertexShaderID = "Super"; +class Stage1 { + texture = "z\ace\addons\fastroping\data\friesAnchorBar_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; +class Stage2 { + texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)"; + uvSource = "tex"; + class uvTransform { + aside[] = {10,0,0}; + up[] = {0,10,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; +class Stage4 { + texture = "z\ace\addons\fastroping\data\friesAnchorBar_as.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,1}; + }; +}; +class Stage5 { + texture = "z\ace\addons\fastroping\data\friesAnchorBar_smdi.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,1}; + }; +}; +class Stage6 { + texture = "#(ai,64,64,1)fresnel(4.5,1.1)"; + uvSource = "none"; +}; +class Stage7 { + texture = "a3\data_f\env_land_ca.paa"; + uvSource = "none"; +}; diff --git a/addons/fastroping/data/friesAnchorBar_as.paa b/addons/fastroping/data/friesAnchorBar_as.paa new file mode 100644 index 0000000000..5bfbbdd34e Binary files /dev/null and b/addons/fastroping/data/friesAnchorBar_as.paa differ diff --git a/addons/fastroping/data/friesAnchorBar_co.paa b/addons/fastroping/data/friesAnchorBar_co.paa new file mode 100644 index 0000000000..e816dc89ed Binary files /dev/null and b/addons/fastroping/data/friesAnchorBar_co.paa differ diff --git a/addons/fastroping/data/friesAnchorBar_nohq.paa b/addons/fastroping/data/friesAnchorBar_nohq.paa new file mode 100644 index 0000000000..2d46991424 Binary files /dev/null and b/addons/fastroping/data/friesAnchorBar_nohq.paa differ diff --git a/addons/fastroping/data/friesAnchorBar_smdi.paa b/addons/fastroping/data/friesAnchorBar_smdi.paa new file mode 100644 index 0000000000..7f8c450eda Binary files /dev/null and b/addons/fastroping/data/friesAnchorBar_smdi.paa differ diff --git a/addons/fastroping/data/friesGantry.p3d b/addons/fastroping/data/friesGantry.p3d new file mode 100644 index 0000000000..e4b54b0ec1 Binary files /dev/null and b/addons/fastroping/data/friesGantry.p3d differ diff --git a/addons/fastroping/data/friesGantry.rvmat b/addons/fastroping/data/friesGantry.rvmat new file mode 100644 index 0000000000..7976eefe42 --- /dev/null +++ b/addons/fastroping/data/friesGantry.rvmat @@ -0,0 +1,66 @@ +ambient[] = {1,1,1,1}; +diffuse[] = {1,1,1,1}; +forcedDiffuse[] = {0,0,0,0}; +emmisive[] = {0,0,0,0}; +specular[] = {0.071,0.071,0.071,1}; +specularPower = 110; +PixelShaderID = "Super"; +VertexShaderID = "Super"; +class Stage1 { + texture = "z\ace\addons\fastroping\data\friesGantry_nohq.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; +class Stage2 { + texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)"; + uvSource = "tex"; + class uvTransform { + aside[] = {10,0,0}; + up[] = {0,10,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; +class Stage3 { + texture = "#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,0}; + pos[] = {0,0,0}; + }; +}; +class Stage4 { + texture = "z\ace\addons\fastroping\data\friesGantry_as.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,1}; + }; +}; +class Stage5 { + texture = "z\ace\addons\fastroping\data\friesGantry_smdi.paa"; + uvSource = "tex"; + class uvTransform { + aside[] = {1,0,0}; + up[] = {0,1,0}; + dir[] = {0,0,1}; + pos[] = {0,0,1}; + }; +}; +class Stage6 { + texture = "#(ai,64,64,1)fresnel(4.5,1.1)"; + uvSource = "none"; +}; +class Stage7 { + texture = "a3\data_f\env_land_ca.paa"; + uvSource = "none"; +}; diff --git a/addons/fastroping/data/friesGantry_as.paa b/addons/fastroping/data/friesGantry_as.paa new file mode 100644 index 0000000000..2b61d9cceb Binary files /dev/null and b/addons/fastroping/data/friesGantry_as.paa differ diff --git a/addons/fastroping/data/friesGantry_co.paa b/addons/fastroping/data/friesGantry_co.paa new file mode 100644 index 0000000000..af3085a90c Binary files /dev/null and b/addons/fastroping/data/friesGantry_co.paa differ diff --git a/addons/fastroping/data/friesGantry_nohq.paa b/addons/fastroping/data/friesGantry_nohq.paa new file mode 100644 index 0000000000..21419b90ab Binary files /dev/null and b/addons/fastroping/data/friesGantry_nohq.paa differ diff --git a/addons/fastroping/data/friesGantry_smdi.paa b/addons/fastroping/data/friesGantry_smdi.paa new file mode 100644 index 0000000000..a11795fa3c Binary files /dev/null and b/addons/fastroping/data/friesGantry_smdi.paa differ diff --git a/addons/fastroping/data/helper.p3d b/addons/fastroping/data/helper.p3d new file mode 100644 index 0000000000..e8b05a4504 Binary files /dev/null and b/addons/fastroping/data/helper.p3d differ diff --git a/addons/fastroping/data/model.cfg b/addons/fastroping/data/model.cfg new file mode 100644 index 0000000000..de8c55b45d --- /dev/null +++ b/addons/fastroping/data/model.cfg @@ -0,0 +1,95 @@ +class CfgSkeletons { + class Default { + isDiscrete = 1; + skeletonInherit = ""; + skeletonBones[] = {}; + }; + class ace_friesAnchorBar_skeleton: Default { + isDiscrete = 1; + skeletonInherit = "Default"; + skeletonBones[] = { + "barRight", "", + "barLeft", "" + }; + }; + class ace_friesGantry_skeleton: Default { + isDiscrete = 1; + skeletonInherit = "Default"; + skeletonBones[] = { + "gantryRight", "", + "gantryLeft", "" + }; + }; +}; + +class CfgModels { + class Default { + sectionsInherit = ""; + sections[] = {""}; + skeletonName = ""; + }; + class friesAnchorBar: Default { + skeletonName = "ace_friesAnchorBar_skeleton"; + sectionsInherit = ""; + sections[] = {"ropeOriginRight", "ropeOriginLeft"}; + class animations { + class extendHookRight { + type = "translation"; + source = ""; + selection = "barRight"; + axis = "slideAxis"; + animPeriod = 0; + minValue = 0; + maxValue = 1; + minPhase = 0; + maxPhase = 1; + offset0 = 0; + offset1 = 0.45; + }; + class extendHookLeft: extendHookRight { + selection = "barLeft"; + offset1 = -0.45; + }; + }; + }; + class friesGantry: Default { + skeletonName = "ace_friesGantry_skeleton"; + sectionsInherit = ""; + sections[] = {"ropeOriginRight", "ropeOriginLeft"}; + class animations { + class adjustWidth { + type = "translation"; + source = ""; + selection = "gantryRight"; + axis = "axisWidth"; + animPeriod = 0; + minValue = 0; + maxValue = 1; + offset0 = 0; + offset1 = 10; + }; + class rotateGantryLeft { + type = "rotation"; + source = ""; + selection = "gantryLeft"; + axis = "axisRotation"; + animPeriod = 0; + minValue = 0; + maxValue = 1; + angle0 = "rad 0"; + angle1 = "rad 360"; + }; + class rotateGantryRight { + type = "rotation"; + source = ""; + selection = "gantryRight"; + axis = "axisRotation"; + animPeriod = 0; + minValue = 0; + maxValue = 1; + angle0 = "rad 0"; + angle1 = "rad 360"; + }; + }; + }; +}; diff --git a/addons/fastroping/functions/fnc_canCutRopes.sqf b/addons/fastroping/functions/fnc_canCutRopes.sqf new file mode 100644 index 0000000000..9775b155bb --- /dev/null +++ b/addons/fastroping/functions/fnc_canCutRopes.sqf @@ -0,0 +1,22 @@ +/* + * Author: BaerMitUmlaut + * Checks if the unit can cut deployed ropes. + * + * Arguments: + * 0: The helicopter itself + * + * Return Value: + * Able to cut ropes + * + * Example: + * [_vehicle] call ace_fastroping_fnc_canCutRopes + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; + +private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; + +!(_deployedRopes isEqualTo []) diff --git a/addons/fastroping/functions/fnc_canDeployRopes.sqf b/addons/fastroping/functions/fnc_canDeployRopes.sqf new file mode 100644 index 0000000000..59a26c6a17 --- /dev/null +++ b/addons/fastroping/functions/fnc_canDeployRopes.sqf @@ -0,0 +1,30 @@ +/* + * Author: BaerMitUmlaut + * Checks if the unit can deploy ropes from the helicopter. + * + * Arguments: + * 0: Unit occupying the helicopter + * 1: The helicopter itself + * + * Return Value: + * Able to deploy ropes + * + * Example: + * [_player, _vehicle] call ace_fastroping_fnc_canDeployRopes + * + * Public: No + */ + +#include "script_component.hpp" +params ["_unit", "_vehicle"]; +private ["_deployedRopes", "_config"]; + +_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; +_config = configFile >> "CfgVehicles" >> typeOf _vehicle; + +((driver _vehicle != _unit) && +{ + ((_vehicle getVariable [QGVAR(deploymentStage), 0]) == 2) || + {!(isText (_config >> QGVAR(onPrepare))) && {(_vehicle getVariable [QGVAR(deploymentStage), 0]) == 0}} +} && +{getPos _vehicle select 2 > 2}) diff --git a/addons/fastroping/functions/fnc_canFastRope.sqf b/addons/fastroping/functions/fnc_canFastRope.sqf new file mode 100644 index 0000000000..33c6bc2839 --- /dev/null +++ b/addons/fastroping/functions/fnc_canFastRope.sqf @@ -0,0 +1,26 @@ +/* + * Author: BaerMitUmlaut + * Checks if the unit can fast rope from the helicopter. + * + * Arguments: + * 0: Unit occupying the helicopter + * 1: The helicopter itself + * + * Return Value: + * Able to fast ropes + * + * Example: + * [_player, _vehicle] call ace_fastroping_fnc_canDeployRopes + * + * Public: No + */ + +#include "script_component.hpp" +params ["_unit", "_vehicle"]; + +private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; + +((driver _vehicle != _unit) && +{!(_deployedRopes isEqualTo [])} && +{{!(_x select 5)} count (_deployedRopes) > 0} && +{getPos _vehicle select 2 > 2}) diff --git a/addons/fastroping/functions/fnc_canPrepareFRIES.sqf b/addons/fastroping/functions/fnc_canPrepareFRIES.sqf new file mode 100644 index 0000000000..8231dca805 --- /dev/null +++ b/addons/fastroping/functions/fnc_canPrepareFRIES.sqf @@ -0,0 +1,27 @@ +/* + * Author: BaerMitUmlaut + * Checks if the unit can prepare the helicopters FRIES. + * + * Arguments: + * 0: The helicopter itself + * + * Return Value: + * Able to prepare FRIES + * + * Example: + * [_vehicle] call ace_fastroping_fnc_canPrepareFRIES + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; +private ["_deployedRopes", "_config"]; + +_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; +_config = configFile >> "CfgVehicles" >> typeOf _vehicle; + +(isNumber (_config >> QGVAR(enabled)) && +{(getNumber (_config >> QGVAR(enabled)) == 1) || {!(isNull (_vehicle getVariable [QGVAR(FRIES), objNull]))}} && +{(_vehicle getVariable [QGVAR(deploymentStage), 0]) == 0} && +{isText (_config >> QGVAR(onPrepare))}) diff --git a/addons/fastroping/functions/fnc_cutRopes.sqf b/addons/fastroping/functions/fnc_cutRopes.sqf new file mode 100644 index 0000000000..88b02a70af --- /dev/null +++ b/addons/fastroping/functions/fnc_cutRopes.sqf @@ -0,0 +1,50 @@ +/* + * Author: BaerMitUmlaut + * Cut deployed ropes. + * + * Arguments: + * 0: A helicopter with deployed ropes + * + * Return Value: + * None + * + * Example: + * [_vehicle] call ace_fastroping_fnc_cutRopes + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; +private ["_deployedRopes", "_config", "_waitTime"]; + +_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; +{ + _x params ["", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"]; + + //Make player fall if rope is occupied + if (_occupied) then { + private _attachedObjects = attachedObjects _dummy; + //Rope is considered occupied when it's broken as well, so check if array is empty + //Note: ropes are not considered attached objects by Arma + if !(_attachedObjects isEqualTo []) then { + detach ((attachedObjects _dummy) select 0); + }; + }; + + [QGVAR(ropeDetach), [_hook, _ropeTop]] call EFUNC(common,serverEvent); + [{{deleteVehicle _x} count _this}, [_ropeTop, _ropeBottom, _dummy, _hook], 60] call EFUNC(common,waitAndExecute); +} count _deployedRopes; + +_vehicle setVariable [QGVAR(deployedRopes), [], true]; +_vehicle setVariable [QGVAR(deploymentStage), 1, true]; + +_config = configFile >> "CfgVehicles" >> typeOf _vehicle; +_waitTime = 0; +if (isText (_config >> QGVAR(onCut))) then { + _waitTime = [_vehicle] call (missionNamespace getVariable (getText (_config >> QGVAR(onCut)))); +}; + +[{ + _this setVariable [QGVAR(deploymentStage), 0, true]; +}, _vehicle, _waitTime] call EFUNC(common,waitAndExecute); diff --git a/addons/fastroping/functions/fnc_deployRopes.sqf b/addons/fastroping/functions/fnc_deployRopes.sqf new file mode 100644 index 0000000000..c944b2c3cb --- /dev/null +++ b/addons/fastroping/functions/fnc_deployRopes.sqf @@ -0,0 +1,56 @@ +/* + * Author: BaerMitUmlaut + * Deploy ropes from the helicopter. + * + * Arguments: + * 0: The helicopter itself + * + * Return Value: + * None + * + * Example: + * [_vehicle] call ace_fastroping_fnc_deployRopes + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; +private ["_config", "_ropeOrigins", "_ropeOrigin", "_deployedRopes", "_hookAttachment", "_origin", "_dummy", "_hook", "_ropeTop", "_ropeBottom"]; + +_config = configFile >> "CfgVehicles" >> typeOf _vehicle; + +_ropeOrigins = getArray (_config >> QGVAR(ropeOrigins)); +_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; +_hookAttachment = _vehicle getVariable [QGVAR(FRIES), _vehicle]; +{ + _ropeOrigin = _x; + _hook = QGVAR(helper) createVehicle [0, 0, 0]; + _hook allowDamage false; + if (typeName _ropeOrigin == "ARRAY") then { + _hook attachTo [_hookAttachment, _ropeOrigin]; + } else { + _hook attachTo [_hookAttachment, [0, 0, 0], _ropeOrigin]; + }; + + _origin = getPosATL _hook; + + _dummy = createVehicle [QGVAR(helper), _origin vectorAdd [0, 0, -1], [], 0, "CAN_COLLIDE"]; + _dummy allowDamage false; + _dummy disableCollisionWith _vehicle; + + _ropeTop = ropeCreate [_dummy, [0, 0, 0], _hook, [0, 0, 0], 0.5]; + _ropeBottom = ropeCreate [_dummy, [0, 0, 0], 1]; + ropeUnwind [_ropeBottom, 30, 34.5, false]; + + _ropeTop addEventHandler ["RopeBreak", {[_this, "top"] call FUNC(onRopeBreak)}]; + _ropeBottom addEventHandler ["RopeBreak", {[_this, "bottom"] call FUNC(onRopeBreak)}]; + + //deployedRopes format: attachment point, top part of the rope, bottom part of the rope, attachTo helper object, occupied + _deployedRopes pushBack [_ropeOrigin, _ropeTop, _ropeBottom, _dummy, _hook, false]; + + false +} count _ropeOrigins; + +_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; +_vehicle setVariable [QGVAR(deploymentStage), 3, true]; diff --git a/addons/fastroping/functions/fnc_equipFRIES.sqf b/addons/fastroping/functions/fnc_equipFRIES.sqf new file mode 100644 index 0000000000..8e93a121f5 --- /dev/null +++ b/addons/fastroping/functions/fnc_equipFRIES.sqf @@ -0,0 +1,39 @@ +/* + * Author: BaerMitUmlaut + * Equips the given helicopter with a FRIES. + * + * Arguments: + * 0: The helicopter + * + * Return Value: + * None + * + * Example: + * [_vehicle] call ace_fastroping_fnc_equipFRIES + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; +private ["_config", "_fries"]; + +_config = configFile >> "CfgVehicles" >> typeOf _vehicle; +if !(isNumber (_config >> QGVAR(enabled))) then { + ["%1 has not been configured for ACE_Fastroping.", getText (_config >> "DisplayName")] call BIS_fnc_error; +} else { + if (getNumber (_config >> QGVAR(enabled)) == 2) then { + _fries = (getText (_config >> QGVAR(friesType))) createVehicle [0, 0, 0]; + _fries attachTo [_vehicle, (getArray (_config >> QGVAR(friesAttachmentPoint)))]; + _vehicle setVariable [QGVAR(FRIES), _fries, true]; + _vehicle addEventHandler ["Killed", { + params ["_vehicle"]; + deleteVehicle (_vehicle getVariable [QGVAR(FRIES), objNull]); + _vehicle setVariable [QGVAR(FRIES), nil, true]; + + if !((_vehicle getVariable [QGVAR(deployedRopes), []] isEqualTo [])) then { + [_vehicle] call FUNC(cutRopes); + }; + }]; + }; +}; diff --git a/addons/fastroping/functions/fnc_fastRope.sqf b/addons/fastroping/functions/fnc_fastRope.sqf new file mode 100644 index 0000000000..9d91697d22 --- /dev/null +++ b/addons/fastroping/functions/fnc_fastRope.sqf @@ -0,0 +1,40 @@ +/* + * Author: BaerMitUmlaut + * Lets the unit fast rope. + * + * Arguments: + * 0: Unit occupying the helicopter + * 1: The helicopter itself + * + * Return Value: + * None + * + * Example: + * [_player, _vehicle] call ace_fastroping_fnc_fastRope + * + * Public: No + */ + +#include "script_component.hpp" +params ["_unit", "_vehicle"]; +private ["_deployedRopes", "_usableRope", "_usableRopeIndex"]; + +//Select unoccupied rope +_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; +_usableRope = _deployedRopes select 0; +_usableRopeIndex = 0; +{ + if !(_x select 6) exitWith { + _usableRope = _x; + _usableRopeIndex = _forEachIndex; + }; +} forEach _deployedRopes; + +_usableRope set [5, true]; +_deployedRopes set [_usableRopeIndex, _usableRope]; +_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; + +//Start server PFH asap +[QGVAR(startFastRope), [_unit, _vehicle, _usableRope, _usableRopeIndex]] call EFUNC(common,serverEvent); +moveOut _unit; +[FUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf new file mode 100644 index 0000000000..8eaeb9c938 --- /dev/null +++ b/addons/fastroping/functions/fnc_fastRopeLocalPFH.sqf @@ -0,0 +1,50 @@ +/* + * Author: BaerMitUmlaut + * Local PerFrameHandler during fast roping. + * + * Arguments: + * 0: PFH arguments + * 1: PFH handle + * + * Return Value: + * None + * + * Example: + * [[_unit, _vehicle, _rope, _ropeIndex], 0] call ace_fastroping_fnc_fastRopeLocalPFH + * + * Public: No + */ + +#include "script_component.hpp" +params ["_arguments", "_pfhHandle"]; +_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex"]; +_rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"]; +private ["_vectorUp", "_vectorDir", "_origin"]; + +//Wait until the unit is actually outside of the helicopter +if (vehicle _unit != _unit) exitWith {}; + +//Start fast roping +if (animationState _unit != "ACE_slidingLoop") exitWith { + _unit disableCollisionWith _dummy; + _unit attachTo [_dummy, [0, 0, -0.5]]; + [_unit, "ACE_slidingLoop", 2] call EFUNC(common,doAnimation); +}; + +//End of fast rope +if (isNull attachedTo _unit) exitWith { + if ((getPos _unit) select 2 > 1) then { + [_unit, "ACE_freeFallStart", 2] call EFUNC(common,doAnimation); + [_unit, "ACE_freeFallLoop", 1] call EFUNC(common,doAnimation); + [{ + isTouchingGround _this + }, { + [_this, "", 2] call EFUNC(common,doAnimation); + }, _unit] call EFUNC(common,waitUntilAndExecute); + } else { + [_unit, "", 2] call EFUNC(common,doAnimation); + }; + _unit setVectorUp [0, 0, 1]; + + [_pfhHandle] call CBA_fnc_removePerFrameHandler; +}; diff --git a/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf new file mode 100644 index 0000000000..0446a332d3 --- /dev/null +++ b/addons/fastroping/functions/fnc_fastRopeServerPFH.sqf @@ -0,0 +1,75 @@ +/* + * Author: BaerMitUmlaut + * Server PerFrameHandler during fast roping. + * + * Arguments: + * 0: PFH arguments + * 1: PFH handle + * + * Return Value: + * None + * + * Example: + * [[_unit, _vehicle, _rope, _ropeIndex], 0] call ace_fastroping_fnc_fastRopeServerPFH + * + * Public: No + */ + +#include "script_component.hpp" +params ["_arguments", "_pfhHandle"]; +_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex"]; +_rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"]; +private ["_vectorUp", "_vectorDir", "_origin"]; + +//Wait until the unit is actually outside of the helicopter +if (vehicle _unit != _unit) exitWith {}; + +//Start fast roping +if (animationState _unit != "ACE_slidingLoop") exitWith { + //Fix for twitchyness + _dummy setMass 80; + _dummy setCenterOfMass [0, 0, -2]; + _origin = getPosASL _hook; + _dummy setPosASL (_origin vectorAdd [0, 0, -2]); + _dummy setVectorUp [0, 0, 1]; + + ropeUnwind [_ropeTop, 6, 34.5]; + ropeUnwind [_ropeBottom, 6, 0.5]; +}; + +//Check if rope broke and unit is falling +if (isNull attachedTo _unit) exitWith { + [_pfhHandle] call CBA_fnc_removePerFrameHandler; +}; + +//Setting the velocity manually to reduce twitching +_dummy setVelocity [0,0,-6]; + +//Check if fast rope is finished +if (((getPos _unit select 2) < 0.2) || {ropeLength _ropeTop == 34.5} || {vectorMagnitude (velocity _vehicle) > 5} || {!(alive _unit)} || {captive _unit}) exitWith { + detach _unit; + + //Reset rope + deleteVehicle _ropeTop; + deleteVehicle _ropeBottom; + + _origin = getPosASL _hook; + _dummy setPosASL (_origin vectorAdd [0, 0, -1]); + + //Restore original mass and center of mass + _dummy setMass 40; + _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]; + + _ropeTop addEventHandler ["RopeBreak", {[_this, "top"] call FUNC(onRopeBreak)}]; + _ropeBottom addEventHandler ["RopeBreak", {[_this, "bottom"] call FUNC(onRopeBreak)}]; + + //Update deployedRopes array + _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; + _deployedRopes set [_ropeIndex, [_attachmentPoint, _ropeTop, _ropeBottom, _dummy, _hook, false]]; + _vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; + + [_pfhHandle] call CBA_fnc_removePerFrameHandler; +}; diff --git a/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf b/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf new file mode 100644 index 0000000000..9bde56debe --- /dev/null +++ b/addons/fastroping/functions/fnc_moduleEquipFRIES.sqf @@ -0,0 +1,27 @@ +/* + * Author: BaerMitUmlaut + * Equips synched helicopters with a FRIES. + * + * Arguments: + * 0: Module + * + * Return Value: + * None + * + * Example: + * [_module] call ace_fastroping_fnc_moduleEquipFRIES + * + * Public: No + */ + +#include "script_component.hpp" +params ["_module"]; + +private _synchedUnits = synchronizedObjects _module; +{ + if (_x isKindOf "CAManBase") then { + _x = vehicle _x; + }; + [_x] call FUNC(equipFRIES); + false +} count _synchedUnits; diff --git a/addons/fastroping/functions/fnc_onCutCommon.sqf b/addons/fastroping/functions/fnc_onCutCommon.sqf new file mode 100644 index 0000000000..7bfb95b68b --- /dev/null +++ b/addons/fastroping/functions/fnc_onCutCommon.sqf @@ -0,0 +1,39 @@ +/* + * Author: BaerMitUmlaut + * Function for opening doors and extending the hook for most vanilla helos. + * + * Arguments: + * 0: Helicopter + * + * Return Value: + * Amount of time to wait before cutting ropes + * + * Example: + * [_vehicle] call ace_fastroping_fnc_onCutRopesCommon + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; + +private _fries = _vehicle getVariable [QGVAR(FRIES), objNull]; +if !(isNull _fries) then { + _fries animate ["extendHookRight", 0]; + _fries animate ["extendHookLeft", 0]; + [{ + _this animateDoor ["door_R", 0]; + _this animateDoor ["door_L", 0]; + _vehicle animate ["dvere1_posunZ", 0]; + _vehicle animate ["dvere2_posunZ", 0]; + }, _vehicle, 2] call EFUNC(common,waitAndExecute); + + 4 +} else { + _vehicle animateDoor ["door_R", 0]; + _vehicle animateDoor ["door_L", 0]; + _vehicle animate ["dvere1_posunZ", 0]; + _vehicle animate ["dvere2_posunZ", 0]; + + 2 +}; diff --git a/addons/fastroping/functions/fnc_onPrepareCommon.sqf b/addons/fastroping/functions/fnc_onPrepareCommon.sqf new file mode 100644 index 0000000000..d9138ea0e2 --- /dev/null +++ b/addons/fastroping/functions/fnc_onPrepareCommon.sqf @@ -0,0 +1,37 @@ +/* + * Author: BaerMitUmlaut + * Function for closing doors and retracting the hook for most vanilla helos. + * + * Arguments: + * 0: Helicopter + * + * Return Value: + * Amount of time to wait before deploying ropes + * + * Example: + * [_vehicle] call ace_fastroping_fnc_onDeployRopesCommon + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; +private ["_fries", "_waitTime"]; + +_waitTime = 2; + +_vehicle animateDoor ["door_R", 1]; +_vehicle animateDoor ["door_L", 1]; +_vehicle animate ["dvere1_posunZ", 1]; +_vehicle animate ["dvere2_posunZ", 1]; + +_fries = _vehicle getVariable [QGVAR(FRIES), objNull]; +if !(isNull _fries) then { + [{ + _this animate ["extendHookRight", 1]; + _this animate ["extendHookLeft", 1]; + }, _fries, 2] call EFUNC(common,waitAndExecute); + _waitTime = 4; +}; + +_waitTime diff --git a/addons/fastroping/functions/fnc_onRopeBreak.sqf b/addons/fastroping/functions/fnc_onRopeBreak.sqf new file mode 100644 index 0000000000..ed5f8bf1c8 --- /dev/null +++ b/addons/fastroping/functions/fnc_onRopeBreak.sqf @@ -0,0 +1,52 @@ +/* + * Author: BaerMitUmlaut + * Handles ropes breaking when deployed. + * + * Arguments: + * 0: RopeBreak EH arguments + * 1: Part of rope ("top" or "bottom") + * + * Return Value: + * None + * + * Public: No + */ + +#include "script_component.hpp" +params ["_ehArgs", "_part"]; +_ehArgs params ["_rope", "_helper1", "_helper2"]; +private ["_vehicle", "_deployedRopes", "_brokenRope", "_unit"]; + +if (_part == "bottom") then { + _helper2 = (ropeAttachedObjects _helper1) select 0; +}; + +_vehicle = attachedTo _helper2; +if (isNil "_vehicle") exitWith {}; //Exit when vehicle got destroyed +if (_vehicle isKindOf "ACE_friesBase") then { + _vehicle = attachedTo _vehicle; +}; + +_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []]; +_brokenRope = []; +{ + if ((_x select 1 == _rope) || {(_x select 2 == _rope)}) exitWith { + _brokenRope = _x; + }; +} forEach _deployedRopes; +_brokenRope set [5, true]; +_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true]; + +_unit = { + if (_x isKindOf "CAManBase") exitWith {_x}; +} forEach (attachedObjects (_brokenRope select 3)); + +if !(isNil "_unit") then { + if (_part == "top") then { + detach _unit; + } else { + //TODO: ??? + //Rope might break at the very bottom + //-> letting the unit fall is not always ideal + }; +}; diff --git a/addons/fastroping/functions/fnc_prepareFRIES.sqf b/addons/fastroping/functions/fnc_prepareFRIES.sqf new file mode 100644 index 0000000000..4896259014 --- /dev/null +++ b/addons/fastroping/functions/fnc_prepareFRIES.sqf @@ -0,0 +1,32 @@ +/* + * Author: BaerMitUmlaut + * Prepares the helicopters FRIES. + * + * Arguments: + * 0: A helicopter with deployed ropes + * + * Return Value: + * None + * + * Example: + * [_vehicle] call ace_fastroping_fnc_prepareFRIES + * + * Public: No + */ + +#include "script_component.hpp" +params ["_vehicle"]; +private ["_config", "_waitTime"]; + +//Stage indicator: 0 - travel mode; 1 - preparing FRIES; 2 - FRIES ready; 3 - ropes deployed +_vehicle setVariable [QGVAR(deploymentStage), 1, true]; + +_config = configFile >> "CfgVehicles" >> typeOf _vehicle; +_waitTime = 0; +if (isText (_config >> QGVAR(onPrepare))) then { + _waitTime = [_vehicle] call (missionNamespace getVariable (getText (_config >> QGVAR(onPrepare)))); +}; + +[{ + _this setVariable [QGVAR(deploymentStage), 2, true]; +}, _vehicle, _waitTime] call EFUNC(common,waitAndExecute); diff --git a/addons/fastroping/functions/script_component.hpp b/addons/fastroping/functions/script_component.hpp new file mode 100644 index 0000000000..00e1b5bb76 --- /dev/null +++ b/addons/fastroping/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\fastroping\script_component.hpp" diff --git a/addons/fastroping/script_component.hpp b/addons/fastroping/script_component.hpp new file mode 100644 index 0000000000..ccfa2c3e56 --- /dev/null +++ b/addons/fastroping/script_component.hpp @@ -0,0 +1,12 @@ +#define COMPONENT fastroping +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_FASTROPING + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_FASTROPING + #define DEBUG_SETTINGS DEBUG_SETTINGS_FASTROPING +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml new file mode 100644 index 0000000000..b65169b273 --- /dev/null +++ b/addons/fastroping/stringtable.xml @@ -0,0 +1,53 @@ + + + + + Equip FRIES + Rüste FRIES aus + Wyposaż FRIES + Equiper le FRIES + + + Equips compatible helicopters with a Fast Rope Insertion Extraction System. + Rüstet kompatible Helikopter mit einem Fast Rope Insertion Extraction System aus. + Wyposaża kompatybilne helikoptery w zestaw Fast Rope Insertion Extraction System. + Equipe les hélicoptères compatibles avec un Module Fast Rope Insertion Extraction System. + + + Prepare fast roping system + Bereite Fast Roping System vor + Przygotuj system zjazdu na linach + Préparer le système de corde lisse + + + Deploy ropes + Seile auswerfen + Wypuść liny + Déployer les cordes + + + Fast rope + Abseilen + Zjedź na linie + Descendre à la corde + + + Cut ropes + Seile abwerfen + Odetnij liny + Détacher les cordes + + + Equip helicopter with FRIES + Rüste Helicopter mit FRIES aus + Wyposaż helikopter w FRIES + Equiper l'hélicoptère avec le FRIED + + + Equips the selected helicopter with a Fast Rope Insertion Extraction System + Rüstet den ausgewählten Helicopter mit einem Fast Rope Insertion Extraction System aus + Wyposaża wybrany helikopter w zestaw Fast Rope Insertion Extraction System + Equipe l'hélicoptère sélectionné avec un Fast Rope Insertion Extraction System + + + diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 0e98396dc5..40b25f4aa6 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -65,12 +65,14 @@ Explosion Reflections Simulation Symulacja odbicia eksplozji Simulazione Riflessi Esplosioni + Druckwellensimulation Activar simulación de reflexiones Enable the ACE Explosion Reflection Simulation Włącz symulację odbicia eksplozji ACE Abilita la Simulazione Riflessi Esplosioni di ACE + Aktiviere die ACE-Druckwellensimulation Activa la simulación de reflexiones para las explosiones. @@ -146,4 +148,4 @@ (Solo SP) Richiede un restart editor/missione. Abilita il tracciamento visivo di schegge da frammentazione/spalling in modalità Giocatore Singolo. - \ No newline at end of file + diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index a8759a5007..b71130a248 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -77,21 +77,31 @@ if (GVAR(useCursorMenu)) then { GVAR(selfMenuOffset) = (AGLtoASL (positionCameraToWorld [0, 0, 2])) vectorDiff (AGLtoASL (positionCameraToWorld [0, 0, 0])); -if (GVAR(menuAnimationSpeed) > 0) then { - //Auto expand the first level when self, mounted vehicle or zeus (skips the first animation as there is only one choice) - if (GVAR(openedMenuType) == 0) then { - if (isNull curatorCamera) then { - if (vehicle ACE_player != ACE_player) then { - GVAR(menuDepthPath) = [["ACE_SelfActions", (vehicle ACE_player)]]; - }; - } else { - GVAR(menuDepthPath) = [["ACE_ZeusActions", (getAssignedCuratorLogic player)]]; +//Auto expand the first level when self, mounted vehicle or zeus (skips the first animation as there is only one choice) +if (GVAR(openedMenuType) == 0) then { + if (isNull curatorCamera) then { + if (vehicle ACE_player != ACE_player) then { + GVAR(menuDepthPath) = [["ACE_SelfActions", (vehicle ACE_player)]]; + GVAR(expanded) = true; + GVAR(expandedTime) = ACE_diagTime; + GVAR(lastPath) = +GVAR(menuDepthPath); + GVAR(startHoverTime) = -1000; }; } else { - GVAR(menuDepthPath) = [["ACE_SelfActions", ACE_player]]; + GVAR(menuDepthPath) = [["ACE_ZeusActions", (getAssignedCuratorLogic player)]]; + GVAR(expanded) = true; + GVAR(expandedTime) = ACE_diagTime; + GVAR(lastPath) = +GVAR(menuDepthPath); + GVAR(startHoverTime) = -1000; }; -}; - +} else { + GVAR(menuDepthPath) = [["ACE_SelfActions", ACE_player]]; + GVAR(expanded) = true; + GVAR(expandedTime) = ACE_diagTime; + GVAR(lastPath) = +GVAR(menuDepthPath); + GVAR(startHoverTime) = -1000; +}; + ["interactMenuOpened", [_menuType]] call EFUNC(common,localEvent); true diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index 7ca243817c..117a828b0b 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -116,8 +116,6 @@ if (GVAR(openedMenuType) >= 0) then { if(!_foundTarget && GVAR(actionSelected)) then { GVAR(actionSelected) = false; - GVAR(expanded) = false; - GVAR(lastPath) = []; }; for "_i" from GVAR(iconCount) to (count GVAR(iconCtrls))-1 do { ctrlDelete (GVAR(iconCtrls) select _i); diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index a532c52265..fcbeebb972 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -353,6 +353,7 @@ Get Out Wyjdź Esci + Aussteigen! Sal del vehículo! @@ -653,6 +654,7 @@ Abrir Открыть Apri + Öffnen Interaction System @@ -765,4 +767,4 @@ Mostrar "Pasar cargador" en el menú de interacción - \ No newline at end of file + diff --git a/addons/map/ACE_Settings.hpp b/addons/map/ACE_Settings.hpp index c0d2718c1f..6ff2e1e867 100644 --- a/addons/map/ACE_Settings.hpp +++ b/addons/map/ACE_Settings.hpp @@ -1,53 +1,69 @@ class ACE_Settings { class GVAR(BFT_Interval) { + category = CSTRING(Module_DisplayName); value = 1.0; typeName = "SCALAR"; displayName = CSTRING(BFT_Interval_DisplayName); description = CSTRING(BFT_Interval_Description); }; class GVAR(BFT_Enabled) { + category = CSTRING(Module_DisplayName); value = 0; typeName = "BOOL"; displayName = CSTRING(BFT_Enabled_DisplayName); description = CSTRING(BFT_Enabled_Description); }; class GVAR(BFT_HideAiGroups) { + category = CSTRING(Module_DisplayName); value = 0; typeName = "BOOL"; displayName = CSTRING(BFT_HideAiGroups_DisplayName); description = CSTRING(BFT_HideAiGroups_Description); }; + class GVAR(BFT_ShowPlayerNames) { + category = CSTRING(Module_DisplayName); + value = 0; + typeName = "BOOL"; + displayName = CSTRING(BFT_ShowPlayerNames_DisplayName); + description = CSTRING(BFT_ShowPlayerNames_Description); + }; class GVAR(mapIllumination) { + category = CSTRING(Module_DisplayName); value = 1; typeName = "BOOL"; displayName = CSTRING(MapIllumination_DisplayName); description = CSTRING(MapIllumination_Description); }; class GVAR(mapGlow) { + category = CSTRING(Module_DisplayName); value = 1; typeName = "BOOL"; displayName = CSTRING(MapGlow_DisplayName); description = CSTRING(MapGlow_Description); }; class GVAR(mapShake) { + category = CSTRING(Module_DisplayName); value = 1; typeName = "BOOL"; displayName = CSTRING(MapShake_DisplayName); description = CSTRING(MapShake_Description); }; class GVAR(mapLimitZoom) { + category = CSTRING(Module_DisplayName); value = 0; typeName = "BOOL"; displayName = CSTRING(MapLimitZoom_DisplayName); description = CSTRING(MapLimitZoom_Description); }; class GVAR(mapShowCursorCoordinates) { + category = CSTRING(Module_DisplayName); value = 0; typeName = "BOOL"; displayName = CSTRING(MapShowCursorCoordinates_DisplayName); description = CSTRING(MapShowCursorCoordinates_Description); }; class GVAR(DefaultChannel) { + category = CSTRING(Module_DisplayName); value = -1; typeName = "SCALAR"; displayName = CSTRING(DefaultChannel_DisplayName); diff --git a/addons/map/CfgVehicles.hpp b/addons/map/CfgVehicles.hpp index 7d7f98207f..df52756eee 100644 --- a/addons/map/CfgVehicles.hpp +++ b/addons/map/CfgVehicles.hpp @@ -104,9 +104,15 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 0; }; + class ShowPlayerNames { + displayName = CSTRING(BFT_ShowPlayerNames_DisplayName); + description = CSTRING(BFT_ShowPlayerNames_Description); + typeName = "BOOL"; + defaultValue = 0; + }; }; class ModuleDescription { description = CSTRING(BFT_Module_Description); }; }; -}; \ No newline at end of file +}; diff --git a/addons/map/functions/fnc_blueForceTrackingModule.sqf b/addons/map/functions/fnc_blueForceTrackingModule.sqf index 77275ffd4c..fd839cbb38 100644 --- a/addons/map/functions/fnc_blueForceTrackingModule.sqf +++ b/addons/map/functions/fnc_blueForceTrackingModule.sqf @@ -18,5 +18,6 @@ params ["_logic"]; [_logic, QGVAR(BFT_Enabled), "Enabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(BFT_Interval), "Interval"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(BFT_HideAiGroups), "HideAiGroups"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(BFT_ShowPlayerNames), "ShowPlayerNames"] call EFUNC(common,readSettingFromModule); ACE_LOGINFO_3("Blue Force Tracking Module Initialized:", GVAR(BFT_Enabled), GVAR(BFT_Interval), GVAR(BFT_HideAiGroups)); diff --git a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf index 3e966ca5f6..34d41bb49c 100644 --- a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf +++ b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf @@ -2,7 +2,7 @@ #include "script_component.hpp" // BEGIN_COUNTER(blueForceTrackingUpdate); -private ["_groupsToDrawMarkers", "_playerSide", "_anyPlayers", "_colour", "_marker"]; +private ["_groupsToDrawMarkers", "_playersToDrawMarkers", "_playerSide", "_anyPlayers", "_colour", "_marker"]; // Delete last set of markers (always) { @@ -26,6 +26,28 @@ if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then { }; }; + if (GVAR(BFT_ShowPlayerNames)) then { + _playersToDrawMarkers = allPlayers select {side _x == _playerSide}; + + { + private _markerType = [_x] call EFUNC(common,getMarkerType); + private _colour = format ["Color%1", side _x]; + + private _marker = createMarkerLocal [format ["ACE_BFT_%1", _forEachIndex], [(getPos leader _x) select 0, (getPos leader _x) select 1]]; + _marker setMarkerTypeLocal _markerType; + _marker setMarkerColorLocal _colour; + _marker setMarkerTextLocal (name _x); + + GVAR(BFT_markers) pushBack _marker; + } forEach _playersToDrawMarkers; + + _groupsToDrawMarkers = _groupsToDrawMarkers select { + { + !(_x call EFUNC(common,isPlayer)); + } count units _x > 0; + }; + }; + { private _markerType = [_x] call EFUNC(common,getMarkerType); private _colour = format ["Color%1", side _x]; @@ -33,7 +55,7 @@ if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then { private _marker = createMarkerLocal [format ["ACE_BFT_%1", _forEachIndex], [(getPos leader _x) select 0, (getPos leader _x) select 1]]; _marker setMarkerTypeLocal _markerType; _marker setMarkerColorLocal _colour; - _marker setMarkerTextLocal (groupID _x); + _marker setMarkerTextLocal (groupId _x); GVAR(BFT_markers) pushBack _marker; } forEach _groupsToDrawMarkers; diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 1b397940a4..2fb0283cd3 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -225,6 +225,30 @@ Скрыть маркеры групп, которые состоят полностью из ботов? Nascondi markers per gruppi di sole IA? + + Show player names? + Pokaż imiona graczy? + Mostrar nombres de los jugadores? + Zeigen Sie die Namen der Spieler? + Zobrazit jména hráčů? + Mostrar os nomes dos jogadores? + Afficher les noms des joueurs? + Itt található az a játékos nevét? + Показать имена игроков? + Mostra i nomi dei giocatori? + + + Show individual player names? + Pokaż poszczególne imiona graczy? + Mostrar nombres de los jugadores individuales? + Zeigen einzelnen Spielernamen? + Zobrazit názvy jednotlivých hráčů? + Mostrar nomes individuais dos jogadores? + Afficher les noms des joueurs individuels? + Itt található az adott játékos neveket? + Показать отдельные имена игроков? + Mostra i nomi dei giocatori singoli? + This module allows the tracking of allied units with BFT map markers. Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT. diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index 303998642d..141a95bc50 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -8,6 +8,7 @@ Жесты на карте Ukazování v mapě Gesti Mappa + Kartenzeichen Gestos en mapa @@ -17,6 +18,7 @@ Включено Povolit Abilita + Aktiviert Activado @@ -26,6 +28,7 @@ Макс. дистанция жестов на карте Max. vzdálenost pro ukazování v mapě Distanza Massima Gesti Mappa + Maximale Reichweite der Kartenzeichen Máx. dist. para gestos en mapa @@ -35,6 +38,7 @@ Макс. дистанция между игроками для отображения жестов на карте [по-умолчанию: 7 метров] Maximální vzdálenost mezi hráči pro zobrazení indikátoru ukázání v mapě [výchozí: 7 metrů] Distanza massima tra giocatori per mostrare i gesti in mappa [default: 7 metri] + Maximale Reichweite zwischen Spielern um Kartenzeichen anzuzeigen (Standard: 7 Meter) Máxima distancia a la cual pueden verse el indicador de gestos [defecto: 7 m] @@ -44,6 +48,7 @@ Лид. цвет по-умолчанию Výchozí barva velitele Colore Default Caposquadra + Gruppenführer-Standardfarbe Color por defecto para el lider @@ -52,6 +57,7 @@ Domyślny kolor dla liderów grup. Значение цвета для лидеров групп. Colore di riserva dei capisquadra quando non c'è nessuna impostazione gruppo. [Modulo: lascia vuoto per non forzare su clients] + Ersatz-Farbwert für Gruppenführer wenn keine Gruppeneinstellung vorhanden ist. [Modul: leer lassen um Anwendung bei Clients nicht zu erzwingen] Color por defecto para líderes cuando no está configurado [Módulo: dejar en blanco para no forzar] @@ -61,6 +67,7 @@ Цвет по-умолчанию Výchozí barva Colore Default + Standardfarbe Color por defecto @@ -69,6 +76,7 @@ Kolor domyślny Значение цвета. Colore di riserva quando non ci sono impostazioni gruppo. [Modulo: lascia vuto per non forzare sui clients] + Ersatz-Farbwert wenn keine Gruppeneinstellung vorhanden ist. [Modul: leer lassen um Anwendung bei Clients nicht zu erzwingen] Color por defecto cuando no está configurado [Módulo: dejar en blanco para no forzar] @@ -78,6 +86,7 @@ Лид. цвет Barva velitele Colore Caposquadra + Gruppenführer-Farbe Color para el líder @@ -86,6 +95,7 @@ Kolor dla liderów grup zsynchronizowanych z tym modułem. Значение цвета для лидеров групп, которые [группы] синхронизированы с этим модулем. Colore dei Caposquadra per gruppi sincronizzati con questo modulo. + Farbwert für Gruppenführer, die mit diesem Modul synchronisiert werden. Color para los líderes de los grupos sincronizados al módulo. @@ -95,6 +105,7 @@ Цвет Barva Colore + Farbe Color @@ -103,6 +114,7 @@ Kolor dla członków grup zsynchronizowanych z tym modułem. Значение цвета для членов групп, которые [группы] синхронизированы с этим модулем. Colore per membri di gruppi sincronizzati con questo modulo. + Farbwert für Gruppenmitglieder, die mit diesem Modul synchronisiert werden. Color para los miembros de los grupos sincronizados al módulo. @@ -112,6 +124,7 @@ Жесты на карте - настройки групп Ukazování v mapě - nastavení skupiny Gesti Mappa - Impostazioni Gruppi + Kartenzeichen - Gruppeneinstellungen Gestos en mapas - Configuración de grupos @@ -121,6 +134,7 @@ Интервал обновления Interval aktualizace Intervallo Aggiornamento + Update-Intervall Período de actualización @@ -130,6 +144,7 @@ Время между обновлениями данных. Čas mezi aktualizacemi dat. Intervallo tra aggiornamenti dati. + Zeit zwischen Datenupdates. Tiempo entre actualizaciones sucesivas. @@ -139,6 +154,7 @@ Конфигурация цвета групп Konfigurace barvy pro skupinu Configurazioni colori dei gruppi + Konfiguration der Gruppenfarbe Configuración de color de grupo @@ -147,6 +163,7 @@ Konfiguracja kolorów grup zawierająca tablice par kolorów ([kolorLidera, kolor]). Конфигурация цвета групп содержит массив цветовых пар ([лид. цвет, цвет]). Configurazioni colori gruppi contenenti array di coppie di colori ([leadColor, color]). + Konfiguration der Gruppenfarbe mit zugeordneten Farbpaaren der Aufstellung ([leadColor, color]). Configuración de color de grupo conteniendo una lista de pares de colores ([colorLider, colo]). @@ -155,6 +172,7 @@ Hasz ID grup zmapowanych w indeksie konfiguracji koloru grup. Хеш ID групп, соответствующих индексам конфигурации цвета групп. Hash degli ID Gruppi mappati nell'indice configurazioni colori gruppi. + Hashwert der Gruppen-ID, die dem Konfigurations-Index der Gruppenfarbe zugeordnet werden. ID de Grupo mapeado al índice de la configuración de color de grupo. @@ -163,6 +181,7 @@ Mapowanie kolorów poprzez GroupID Соответствие ID групп конфигурации цвета групп Mappatura configurazioni colori GroupID + Gruppen-ID-Farbe Konfigurationszuordnung Mapeado de ID de Grupo @@ -172,6 +191,7 @@ Включает указания на карте. Povolit ukazování v mapě Abilita i Gesti Mappa + Aktiviert die Kartenzeichen. Activar Gestos en Mapa @@ -181,6 +201,7 @@ Цвет текста имени Barva textu pro jména Colore Testo Nome + Farbe der Namenstexte. Color de los nombres @@ -189,6 +210,7 @@ Kolor nazwy gracza obok markera gestu mapy. Цвет инмени игрока рядом с маркером жестов. Colore del testo dei nametag oltre a quello dei Gesti Mappa + Farbe der Namenstexte neben der Kartenzeichen-Markierung. Color de los nombres dibujados al lado del marcados de gestos. @@ -198,7 +220,8 @@ Жесты на карте Ukazovní v mapě Gesti Mappa + Kartenzeichen Gestos en mapa - \ No newline at end of file + diff --git a/addons/markers/XEH_postInit.sqf b/addons/markers/XEH_postInit.sqf index f7bf35093c..7b5924d680 100644 --- a/addons/markers/XEH_postInit.sqf +++ b/addons/markers/XEH_postInit.sqf @@ -9,9 +9,8 @@ // request marker data for JIP if (isMultiplayer && {!isServer} && {hasInterface}) then { - private _logic = createGroup sideLogic createUnit ["Logic", [0,0,0], [], 0, "NONE"]; - - [QGVAR(sendMarkersJIP), [_logic]] call EFUNC(common,serverEvent); + GVAR(localLogic) = (createGroup sideLogic) createUnit ["Logic", [0,0,0], [], 0, "NONE"]; + [QGVAR(sendMarkersJIP), [GVAR(localLogic)]] call EFUNC(common,serverEvent); }; GVAR(mapDisplaysWithDrawEHs) = []; diff --git a/addons/markers/functions/fnc_sendMarkersJIP.sqf b/addons/markers/functions/fnc_sendMarkersJIP.sqf index 73a00519e3..5b1a779b27 100644 --- a/addons/markers/functions/fnc_sendMarkersJIP.sqf +++ b/addons/markers/functions/fnc_sendMarkersJIP.sqf @@ -21,5 +21,5 @@ TRACE_1("params",_logic); [ QGVAR(setMarkerJIP), [_logic], - [GETGVAR(allMapMarkers,[]), GETGVAR(allMapMarkersProperties,[]), _logic] + [GETGVAR(allMapMarkers,[]), GETGVAR(allMapMarkersProperties,[])] ] call EFUNC(common,targetEvent); diff --git a/addons/markers/functions/fnc_setMarkerJIP.sqf b/addons/markers/functions/fnc_setMarkerJIP.sqf index bd8832fb36..ccac7d2b7b 100644 --- a/addons/markers/functions/fnc_setMarkerJIP.sqf +++ b/addons/markers/functions/fnc_setMarkerJIP.sqf @@ -17,8 +17,8 @@ */ #include "script_component.hpp" -params ["_allMapMarkers", "_allMapMarkersProperties", "_logic"]; -TRACE_3("params",_allMapMarkers,_allMapMarkersProperties,_logic); +params ["_allMapMarkers", "_allMapMarkersProperties"]; +TRACE_3("params",_allMapMarkers,_allMapMarkersProperties); { private _index = _allMapMarkers find _x; @@ -51,4 +51,7 @@ TRACE_3("params",_allMapMarkers,_allMapMarkersProperties,_logic); false } count allMapMarkers; -deleteVehicle _logic; +private _group = group GVAR(localLogic); +deleteVehicle GVAR(localLogic); +GVAR(localLogic) = nil; +deleteGroup _group; diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index a5ce32b9e0..cd0b4b1b27 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -77,6 +77,10 @@ _minLethalDamage = if (_typeIndex >= 0) then { 0.01 }; +if (!isNull _shooter) then { + _unit setvariable [QGVAR(lastDamageSource), _shooter, false]; +}; + private _vehicle = vehicle _unit; private _effectiveSelectionName = _selection; if ((_vehicle != _unit) && {!(_vehicle isKindOf "StaticWeapon")} && {_shooter in [objNull, driver _vehicle, _vehicle]} && {_projectile == ""} && {_selection == ""}) then { @@ -98,6 +102,7 @@ if ((_minLethalDamage <= _newDamage) && {[_unit, [_effectiveSelectionName] call _damageReturn = _damageReturn min 0.89; }; + [_unit] call FUNC(addToInjuredCollection); if (_unit getVariable [QGVAR(preventInstaDeath), GVAR(preventInstaDeath)]) exitWith { diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index fd38af8932..94cad2f790 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -51,6 +51,7 @@ Inject Adenosine + Adenosin injizieren Inyectar Adenosina Wstrzyknij adenozynę @@ -248,6 +249,7 @@ Injecting Adenosine... + Adenosin injizieren... Inyectando Adenosina... Wstrzykiwanie adenozyny... @@ -937,7 +939,7 @@ Used to combat moderate to severe pain experiences - Wird verwendet um moderate bis starke Schmärzen zu lindern. + Wird verwendet um moderate bis starke Schmerzen zu lindern. Для снятия средних и сильных болевых ощущений Usado para combatir los estados dolorosos de moderados a severos Utilisé pour réduire les douleurs modérées à sévères. @@ -961,16 +963,19 @@ Adenosine autoinjector + Adenosin-Autoinjektor Asenosina auto-inyectable Autostrzykawka z adenozyną Used to counter effects of Epinephrine + Wird verwendet um die Symptome von Epiniphrin zu lindern Utilizada para contrarrestar los effectos de la Epinefrina Adenozyna. Stosowana do zwalczania efektów działania adrenaliny. A drug used to counter the effects of Epinephrine + Ein Medikament, das die Symptome von Epiniphrin bekämpft. Medicamento usado para contrarrestar los efectos de la Epinefrina. Organiczny związek chemiczny z grupy nukleozydów. Skuteczna w leczeniu częstoskurczu komorowego. Działa rozszerzająco na naczynia krwionośne. @@ -1041,7 +1046,7 @@ Medicament qui fonctionne sur le système nerveux sympathique créant une dilatation des bronches, augmente la fréquence cardiaque et annule les effets d'une réaction allergique (anaphylaxie). Utilisé lors d'arrêt cardio-respiratoire pour augmenter les chances de retrouver un pouls. EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. Una sostanza che permette di dilatare i bronchi, aumentare il battito cardiaco e combattere effetti di reazioni allergiche. Usato anche in casi di arresto cardiaco. - Ein Medikament, das die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht. + Ein Medikament, das die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen (Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht. Uma droga trabalha dilatando os bronquios, aumentando a frequência cardíaca e combate efeitos de reações alérgicas(anáfilaticas). Usado em casos de parada cardiaca com poucas changes 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ě. @@ -1232,7 +1237,7 @@ Vendaje básico (QuickClot) Bandage basique (Hémostatique) Opatrunek QuikClot ACS - Verbandpäckchen(Gerinnungsmittel) + Verbandpäckchen (Gerinnungsmittel) Általános zárókötszer (QuikClot) Bendaggio emostatico (QuikClot) Bandagem básica (Coagulante) @@ -2128,7 +2133,7 @@ %1 applied a tourniquet %1 aplicado torniquete %1 наложил жгут - %1 hat einen Tourniquet angelegt + %1 hat ein Tourniquet angelegt %1 założył stazę %1 a appliqué un garrot %1 felhelyezett egy érszorítót @@ -2272,6 +2277,7 @@ Curar hitpoints totalmente enfaixados Heal fully bandaged hitpoints Cura hitpoints completamente bendati + Heilt vollständig bandagierte Trefferpunkte Pain is only temporarily suppressed @@ -2670,7 +2676,7 @@ Střelné poranění - Smal Velocity Wound + Small Velocity Wound Kleines Ballistisches Trauma Lenta Velocità Ferita Малая огнестрельная рана @@ -2889,6 +2895,7 @@ Locations boost training Místa pro vylepšení zkušeností Località aumentano addestramento + Örtliche Trainingssteigerung Ubicación mejora entrenamiento. Miejsca zwiększają wyszkolenie @@ -2896,6 +2903,7 @@ Boost medic rating in medical vehicles or near medical facilities [untrained becomes medic, medic becomes doctor] Zlepšit zkušenosti zdravotníka v medickém vozidle nebo poblíž zdravotního zařízení [nezkušení se stane zdravotníkem, zdravotník se stane doktorem] Aumenta il rating medico in veicoli medici o vicino strutture mediche [non addestrato diventa medico, medico diventa dottore] + Steigert die medizinische Einstufung eines Soldaten in Sanitätsfarhzeugen oder in der Nähe von Sanitätseinrichtungen [untrainiert wird zu Sanitäter, Sanitäter zu Doktor] Mejora el entrenamiento médico dentro de vehículos médicos o cerca de instalaciones médicas (no entrenados se convierten en médicos, médicos se convierten en doctores) Zwiększa poziom wyszkolenia medyków wewnątrz pojazdów medycznych lub w pobliżu budynków medycznych [niedoświadczony zostaje medykiem, medyk zostaje doktorem] @@ -3069,7 +3077,7 @@ Treat remote controlled units as AI not players? - Behandle ferngesteuerte Einheiten als KI und nicht als Spieler? + Legt fest, ob ferngesteuerte Einheiten als KI anstatt als Spieler behandelt werden sollen. ¿Tratar unidades remotamente controladas como IA? Tratar unidades remotamente controladas como IA? Traktuj jednostki zdalnie sterowane (przez Zeusa) jako AI, nie jako graczy? @@ -3144,7 +3152,7 @@ Коэффициент, изменяющий уровень боли Mnożnik modyfikujący intensywność bólu Coeficiente para modificar la intensidad del dolor - Multiplikator um den Schmerzintensität zu verändern + Multiplikator um die Schmerzintensität zu verändern Koeficient intenzity bolesti Coeficiente para modificar a instensidade de dor Coefficient modifiant l'intensité de la douleur @@ -3189,6 +3197,7 @@ Basic Medical Settings [ACE] + Standard Sanitätseinstellungen [ACE] Podstawowe ustawienia medyczne Ajustes médicos básicos [ACE] @@ -3302,11 +3311,13 @@ Allow Epinephrine + Erlaube Epiniphrin Permitir Epinefrina Ograniczenia adrenaliny Who can use Epinephrine for full heal? (Basic medical only) + Wer darf Epiniphrin zur vollständigen Heilung benutzen? (Standard Sanitätseinstellungen) Configura quienes pueden usar Epinefrina (Solo sistema médico básico) Kto może skorzystać z adrenaliny w celu pełnego uleczenia? (Tylko podstawowy system medyczny) @@ -3375,7 +3386,7 @@ Удалять аптечки после использования Usuń apteczkę po użyciu Eliminar EPA después del uso - Entferne Erste-Hilfe-Set bei Verwendung + Entf. Erste-Hilfe-Set bei Verwendung Odebrat osobní lékárničku po použití Remover o KPS depois do uso Enlever le KPS à l'utilisation @@ -3396,11 +3407,13 @@ Locations Epinephrine + Orte für Epiniphrin Ubicaciones epinefrina Ograniczenia adrenaliny Where can the Epinephrine be used? (Basic Medical) + Wo kann Epiniphrin verwendet werden? (Standard Sanitätseinstellungen) Configura donde puede usarse Epinefrina (Solo sistema médico básico) Gdzie można korzystać z adrenaliny? (Podstawowy system medyczny) @@ -3430,7 +3443,7 @@ Condition PAK - Voraussetzungen für das Erste-Hilfe-Set + Bedingungen für d. Erste-Hilfe-Set Podmínka osobní lékárničky Condición EPA Condition d'utilisation du KPS @@ -3574,7 +3587,7 @@ Condition Surgical Kit (Adv) - Voraussetzungen für den Operationskasten (erweitert) + Beding. für d. Operationskasten (erw.) Podmínka chirurgické soupravy (Pokr.) Condición de equipo quirúrgico (Av) Conditions d'utilisation du kit de chirurgie @@ -3642,6 +3655,7 @@ Configure the treatment settings from ACE Basic Medical + Behandlungseinstellungen der Standard ACE-Medizin konfigurieren Configure las opciones de tratamiento del sistema médico básico de ACE Skonfiguruj ustawienia leczenia podstawowego systemu medycznego ACE @@ -3998,7 +4012,7 @@ [ACE] Ящик с медикаментами (базовая медицина) [ACE] Skrzynka z zapasami medycznymi (podstawowa) [ACE] Caja de suministros médicos (Básica) - [ACE] Sanitätskiste (standard) + [ACE] Sanitätskiste (Standard) [ACE] Zdravotnické zásoby (základní) [ACE] Caixa com suprimentos médicos [ACE] Caisse médicale (basique) @@ -4075,7 +4089,7 @@ There is no tourniquet on this body part! - An diesem Körperteil befindet sich kein Tourniquet + An diesem Körperteil befindet sich kein Tourniquet! Na tej części ciała nie ma stazy! No hay torniquete en esta parte del cuerpo! Нет жгута на этой части тела! @@ -4087,28 +4101,29 @@ Medical training Wyszkolenie medyczne Addestramento Medico + Sanitätsausbildung Entrenamiento médico Whether or not the object will be a medical vehicle. Czy pojazdy ma być pojazdem medycznym? L'oggetto in questione sarà un veicolo medico o meno. + Legt fest, ob das Objekt ein Sanitätsfahrzeug ist. Es un vehículo médico? - Delay Medical Unconscious Captivity + Delay cease fire of AI during medical unconsciousness + Verzögert Ende des KI-Beschusses bei medizinischer Bewustlosigkeit Demora antes de volverse neutral al caer inconsciente Opóźnij status captive u nieprzytomnych osób - Delay Medical Unconscious Captivity - Demora antes de volverse neutral al caer inconsciente - Opóźnij status captive u nieprzytomnych osób + Delay cease fire of AI while player is unconscious for medical reasons. + Verzögert das Ende des KI-Beschusses auf einen Spieler, wenn dieser aus medizinischen Gründen bewustlos wird. - Delay Medical Unconscious Captivity - Demora antes de volverse neutral al caer inconsciente - Opóźnij status captive u nieprzytomnych osób + Delay cease fire of AI for unconsciousness + Verzögert Ende des KI-Beschusses bei medizinischer Bewustlosigkeit \ No newline at end of file diff --git a/addons/medical_menu/stringtable.xml b/addons/medical_menu/stringtable.xml index 5cffb1c8ce..322897fa6b 100644 --- a/addons/medical_menu/stringtable.xml +++ b/addons/medical_menu/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -209,6 +209,7 @@ Vias aéreas Dýchací systém Gestione Vie Respiratorie + Atemwegssicherung Advanced Treatments @@ -596,4 +597,4 @@ Tubo Nasofaringeo [NPA] - + \ No newline at end of file diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf index 3bb97dba8c..eed96b3101 100644 --- a/addons/nametags/functions/fnc_onDraw3d.sqf +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -129,26 +129,28 @@ if (_enabledTagsNearby) then { { private _target = _x; - private _relPos = (visiblePositionASL _target) vectorDiff _camPosASL; - private _distance = vectorMagnitude _relPos; - private _projDist = _relPos vectorDistance (_vecy vectorMultiply (_relPos vectorDotProduct _vecy)); + if !(isNull _target) then { + private _relPos = (visiblePositionASL _target) vectorDiff _camPosASL; + private _distance = vectorMagnitude _relPos; + private _projDist = _relPos vectorDistance (_vecy vectorMultiply (_relPos vectorDotProduct _vecy)); - private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)}; - private _alphaMax = _onKeyPressAlphaMax; - if ((GVAR(showSoundWaves) == 2) && _drawSoundwave) then { - _drawName = _drawSoundwave; - _drawRank = false; - _alphaMax = 1; - }; - // Alpha: - // - base value determined by GVAR(playerNamesMaxAlpha) - // - decreases when _distance > _maxDistance - // - increases when the unit is speaking - // - it's clamped by the value of _onKeyPressAlphaMax unless soundwaves are forced on and the unit is talking - private _alpha = (((1 + ([0, 0.2] select _drawSoundwave) - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(playerNamesMaxAlpha)) min _alphaMax; + private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)}; + private _alphaMax = _onKeyPressAlphaMax; + if ((GVAR(showSoundWaves) == 2) && _drawSoundwave) then { + _drawName = _drawSoundwave; + _drawRank = false; + _alphaMax = 1; + }; + // Alpha: + // - base value determined by GVAR(playerNamesMaxAlpha) + // - decreases when _distance > _maxDistance + // - increases when the unit is speaking + // - it's clamped by the value of _onKeyPressAlphaMax unless soundwaves are forced on and the unit is talking + private _alpha = (((1 + ([0, 0.2] select _drawSoundwave) - 0.2 * (_distance - _maxDistance)) min 1) * GVAR(playerNamesMaxAlpha)) min _alphaMax; - if (_alpha > 0) then { - [ACE_player, _target, _alpha, _distance * 0.026, _drawName, _drawRank, _drawSoundwave] call FUNC(drawNameTagIcon); + if (_alpha > 0) then { + [ACE_player, _target, _alpha, _distance * 0.026, _drawName, _drawRank, _drawSoundwave] call FUNC(drawNameTagIcon); + }; }; nil } count _targets; diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 57a9fee566..e41f9342d4 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -41,7 +41,7 @@ Overheating Particle Effects for everyone - Zeige Partikeleffekt bei allen + Zeige Partikeleffekt bei Überhitzung für jeden Pokaż efekty cząsteczkowe dla wszystkich Effetti Particellari Surriscaldamento per tutti Efectos de partículas para todos @@ -69,21 +69,25 @@ Unjam weapon on reload + Behebt Ladehemmung beim Nachladen Desencasquillar el arma al recargar. Usuń zacięcie przy przeładowaniu Reloading clears a weapon jam. + Nachladen behebt eine Ladehemmung. Recargar el arma la desencasquilla. Przeładowywanie usuwa zacięcie Chance of unjam failing + Wahrscheinlichkeit, dass Ladehemmung nicht behoben wird Probabilidad de falla al desencasquillar. Szansa na porażkę usuw. zacięcia Probability that an unjam action might fail, requiring to be repeated. + Wahrscheinlichkeit, dass der Versuch eine Ladehemmung zu beheben fehl schlägt und erneut durchgeführt werden muss. Probabilidad de que el proceso de desencasquille falle, teniendo que repetirlo. Szansa na to, że przy przeładowaniu broni zacięcie nie zostanie usunięte, przez co czynność będzie musiała zostać powtórzona ponownie. @@ -149,6 +153,7 @@ Jam failed to clear + Ladehemmung nicht behoben Falló el desencasquillado Porażka przy usuwaniu zacięcia @@ -237,4 +242,4 @@ Температура - \ No newline at end of file + diff --git a/addons/refuel/functions/fnc_canConnectNozzle.sqf b/addons/refuel/functions/fnc_canConnectNozzle.sqf index a8495d3cd2..396931d9ba 100644 --- a/addons/refuel/functions/fnc_canConnectNozzle.sqf +++ b/addons/refuel/functions/fnc_canConnectNozzle.sqf @@ -19,8 +19,13 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; +private _engine = false; + +if (_target isKindOf "AllVehicles") then { + _engine = isEngineOn _target; +}; !(isNull _nozzle || - {isEngineOn _target} || + {_engine} || {(_target distance _unit) > REFUEL_ACTION_DISTANCE} || {!isNull (_target getVariable [QGVAR(nozzle), objNull])}) // TODO verify cant connect multiple fuel lines diff --git a/addons/refuel/functions/fnc_connectNozzleAction.sqf b/addons/refuel/functions/fnc_connectNozzleAction.sqf index 8a73eaf382..bf9b6b8092 100644 --- a/addons/refuel/functions/fnc_connectNozzleAction.sqf +++ b/addons/refuel/functions/fnc_connectNozzleAction.sqf @@ -125,7 +125,12 @@ _endPosTestOffset set [2, (_startingOffset select 2)]; _target setVariable [QGVAR(nozzle), _nozzle, true]; _source = _nozzle getVariable QGVAR(source); - _source setVariable [QGVAR(fuelCounter), [_source] call FUNC(getFuel), true]; + private _fuel = [_source] call FUNC(getFuel); + if (_fuel == REFUEL_INFINITE_FUEL) then { + _source setVariable [QGVAR(fuelCounter), 0, true]; + } else { + _source setVariable [QGVAR(fuelCounter), _fuel, true]; + }; [_unit, _target, _nozzle, _endPosTestOffset] call FUNC(refuel); }, diff --git a/addons/refuel/functions/fnc_getFuel.sqf b/addons/refuel/functions/fnc_getFuel.sqf index 47c9992788..863c017102 100644 --- a/addons/refuel/functions/fnc_getFuel.sqf +++ b/addons/refuel/functions/fnc_getFuel.sqf @@ -11,12 +11,14 @@ * Example: * [fuelTruck] call ace_refuel_fnc_getFuel * - * Public: No + * Public: Yes */ #include "script_component.hpp" params [["_target", objNull, [objNull]]]; +if (isNull _target) exitWith {0}; + private _fuel = _target getVariable QGVAR(currentFuelCargo); if (isNil "_fuel") then { diff --git a/addons/refuel/functions/fnc_readFuelCounter.sqf b/addons/refuel/functions/fnc_readFuelCounter.sqf index ac7a84f97a..519b07897d 100644 --- a/addons/refuel/functions/fnc_readFuelCounter.sqf +++ b/addons/refuel/functions/fnc_readFuelCounter.sqf @@ -26,8 +26,13 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; _args params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; private _currentFuel = [_target] call FUNC(getFuel); - private _fuelCounter = 0.01 * round (100 * ((_target getVariable [QGVAR(fuelCounter), _currentFuel]) - _currentFuel)); - [[LSTRING(Hint_FuelCounter), _fuelCounter], 1.5, _unit] call EFUNC(common,displayTextStructured); + if (_currentFuel == REFUEL_INFINITE_FUEL) then { + private _fuelCounter = 0.01 * round (100 * (_target getVariable [QGVAR(fuelCounter), 0])); + [[LSTRING(Hint_FuelCounter), _fuelCounter], 1.5, _unit] call EFUNC(common,displayTextStructured); + } else { + private _fuelCounter = 0.01 * round (100 * ((_target getVariable [QGVAR(fuelCounter), _currentFuel]) - _currentFuel)); + [[LSTRING(Hint_FuelCounter), _fuelCounter], 1.5, _unit] call EFUNC(common,displayTextStructured); + }; }, "", localize LSTRING(CheckFuelCounterAction), diff --git a/addons/refuel/functions/fnc_refuel.sqf b/addons/refuel/functions/fnc_refuel.sqf index ed986f8025..117cf5ea1e 100644 --- a/addons/refuel/functions/fnc_refuel.sqf +++ b/addons/refuel/functions/fnc_refuel.sqf @@ -59,8 +59,10 @@ private _maxFuel = getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> }; if !(_fuelInSource == REFUEL_INFINITE_FUEL) then { _fuelInSource = _fuelInSource - _rate; + } else { + _source setVariable [QGVAR(fuelCounter), (_source getVariable [QGVAR(fuelCounter), 0]) + _rate, true]; }; - if (_fuelInSource < 0 && {_fuelInSource > -1}) then { + if (_fuelInSource < 0 && {_fuelInSource > REFUEL_INFINITE_FUEL}) then { _fuelInSource = 0; _finished = true; [LSTRING(Hint_SourceEmpty), 2, _unit] call EFUNC(common,displayTextStructured); diff --git a/addons/refuel/functions/fnc_reset.sqf b/addons/refuel/functions/fnc_reset.sqf index f150055175..8c9b2aaf6b 100644 --- a/addons/refuel/functions/fnc_reset.sqf +++ b/addons/refuel/functions/fnc_reset.sqf @@ -32,8 +32,8 @@ if !(isNil "_nozzle") then { _nozzleTarget setVariable [QGVAR(nozzle), nil, true]; }; - private _rope = _nozzle getVariable [QGVAR(rope), nil]; - if !(isNil "_rope") then { + private _rope = _nozzle getVariable [QGVAR(rope), objNull]; + if !(isNull _rope) then { ropeDestroy _rope; }; diff --git a/addons/refuel/functions/fnc_returnNozzle.sqf b/addons/refuel/functions/fnc_returnNozzle.sqf index 32cedb5ac7..852a3d8c38 100644 --- a/addons/refuel/functions/fnc_returnNozzle.sqf +++ b/addons/refuel/functions/fnc_returnNozzle.sqf @@ -42,7 +42,10 @@ if (isNull _nozzle || {_source != _target}) exitWith {false}; _target setVariable [QGVAR(isConnected), false, true]; _target setVariable [QGVAR(ownedNozzle), nil, true]; - ropeDestroy (_nozzle getVariable QGVAR(rope)); + private _rope = _nozzle getVariable [QGVAR(rope), objNull]; + if !(isNull _rope) then { + ropeDestroy _rope; + }; deleteVehicle _nozzle; if !(local _target) then { diff --git a/addons/refuel/functions/fnc_setFuel.sqf b/addons/refuel/functions/fnc_setFuel.sqf index b5276454fa..6033660a48 100644 --- a/addons/refuel/functions/fnc_setFuel.sqf +++ b/addons/refuel/functions/fnc_setFuel.sqf @@ -12,7 +12,7 @@ * Example: * [fuelTruck, 42] call ace_refuel_fnc_setFuel * - * Public: No + * Public: Yes */ #include "script_component.hpp" diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index ecff435dcf..3bccce15e2 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -55,10 +55,13 @@ if (isNull _nozzle) then { // func is called on fuel truck _newNozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; _unit setVariable [QGVAR(nozzle), _newNozzle, true]; - private _rope = ropeCreate [_target, _endPosOffset, _newNozzle, [0, -0.20, 0.12], REFUEL_HOSE_LENGTH]; + if (_target isKindOf "AllVehicles") then { + // Currently ropeCreate requires its first parameter to be a real vehicle + private _rope = ropeCreate [_target, _endPosOffset, _newNozzle, [0, -0.20, 0.12], REFUEL_HOSE_LENGTH]; + _newNozzle setVariable [QGVAR(rope), _rope, true]; + }; _newNozzle setVariable [QGVAR(attachPos), _endPosOffset, true]; _newNozzle setVariable [QGVAR(source), _target, true]; - _newNozzle setVariable [QGVAR(rope), _rope, true]; _target setVariable [QGVAR(ownedNozzle), _newNozzle, true]; _unit setVariable [QGVAR(isRefueling), true]; @@ -83,7 +86,7 @@ if (isNull _nozzle) then { // func is called on fuel truck {true}, ["isnotinside"] ] call EFUNC(common,progressBar); -} else { // func is called in muzzle either connected or on ground +} else { // func is called on muzzle either connected or on ground [ 2, [_unit, _nozzle], diff --git a/addons/refuel/script_component.hpp b/addons/refuel/script_component.hpp index 0c24c3915b..02a9660bdd 100644 --- a/addons/refuel/script_component.hpp +++ b/addons/refuel/script_component.hpp @@ -16,7 +16,7 @@ #include "\z\ace\addons\main\script_macros.hpp" -#define REFUEL_INFINITE_FUEL -1 +#define REFUEL_INFINITE_FUEL -10 #define REFUEL_ACTION_DISTANCE 7 #define REFUEL_HOSE_LENGTH 12 diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index 5eeff4ff1b..5c651e8d80 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -3,7 +3,7 @@ Refuel Settings - Betankungseinst. + Betankungseinstellungen Ustawienia tankowania Настройки дозаправки Ajustes de reabastecimento @@ -312,4 +312,4 @@ Se reabastecieron %1 lt - \ No newline at end of file + diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index 882a542c7f..ffd75a38bc 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -35,6 +35,7 @@ class Extended_InitPost_EventHandlers { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); serverInit = QUOTE(_this call DFUNC(addSpareParts)); + exclude[] = {QEGVAR(fastroping,helper)}; }; }; class Plane { diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index b4667eb6bc..de640ff48c 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -381,6 +381,7 @@ Estabilizador horizontal izquierdo Levý horizontální stabilizátor Stabilizzatore Orizzontale Sinistro + Linkes Höhenleitwerk Right Horizontal Stabilizer @@ -390,6 +391,7 @@ Estabilizador horizontal derecho Pravý horizontální stabilizátor Stabilizzatore Orizzontale Destro + Rechtes Höhenleitwerk Vertical Stabilizer @@ -399,6 +401,7 @@ Estabilizador Vertical Estabilizador vertical Stabilizzatore Verticale + Seitenleitwerk Fuel Tank @@ -723,6 +726,7 @@ ERA ERA ERA + Reaktivpanzerung ERA @@ -1226,4 +1230,4 @@ Oggetti richiesti per riparare/rimuovere ruote - \ No newline at end of file + diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index fce9c2d618..6ca1cdfe27 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -106,6 +106,7 @@ Názvy interakcí Nombres de interacción Nomi Interazioni + Interaktionsnamen List of names that will be used for interaction entries, separated by commas, in order of images. @@ -116,6 +117,7 @@ Список имен, которые будут использованы при взаимодействии, разделенные запятыми, в порядке следования изображений. Lista de nombres que se utilizarán para las entradas de interacción, separados por comas, en el orden de las imágenes. Lista di nomi che verranno usati per per le interazioni, separati da virgole, in ordine per immagini. + Liste aller Namen, die für Interaktionseinträge genutzt werden. Mit Kommata getrennt, in Reihenfolge der Bilder. Slide Duration @@ -127,6 +129,7 @@ Duración de diapositiva Doba trvání snímku Durata Diapositiva + Länge der Diavorführung pro Bild Duration of each slide. Default: 0 (Automatic Transitions Disabled) @@ -138,6 +141,7 @@ Duración de cada diapositiva. Por defecto: 0 (Transiciones automáticas desactivadas) Doba trvání každého snímku. Výchozí: 0 (Automatické posouvání je zakázáno) Durata di ogni diapositiva. Default: 0 (Transizioni Automatiche Disabilitate) + Länge der Diavorführung pro Bild. Standard: 0 (Automatischer Wechsel deaktiviert) Slides @@ -149,6 +153,7 @@ Diapositivas Snímky Diapositive + Dias \ No newline at end of file diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index e52d8c6186..26be64dccb 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -37,7 +37,7 @@ SwitchUnits System System zmiany stron Sistema de cambio de unidad - Einheiten-Switch-System? + Einheiten-Wechsel-System Systém výměny stran Sistema de troca de unidades Système de changement d'unité @@ -201,4 +201,4 @@ El módulo permite a las unidades cambiar de bando durante el juego. - \ No newline at end of file + diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index c9c0161265..f84cbdb7f7 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -242,6 +242,7 @@ Добавить запасное колесо Přidat rezervní kolo Aggiungi Ruota di Scorta + Ersatzrad hinzufügen Agregar rueda de auxilio @@ -251,6 +252,7 @@ Добавляет запасное колесо в транспорт Přidá rezervní kolo do vozidla Aggiungi una ruota di scorta al veicolo + Fügt dem Fahrzeug ein Ersatzrad hinzu Agrega una rueda de auxilio al vehículo @@ -260,6 +262,7 @@ Дабавить запасную гусеницу Přidat náhradní pás Aggiungi Cingolo di Scorta + Ersatzkette hinzufügen Agregar oruga de repuesto @@ -269,6 +272,7 @@ Добавляет запасную гусеницу в транспорт Přidá náhradní pás do vozidla Aggiungi un cingolo di scorta al veicolo + Fügt dem Fahrzeug eine Ersatzkette hinzu Agrega una oruga de repuesto al vehículo @@ -322,6 +326,7 @@ Юнит должен быть транспортом с грузовым отсеком Jednotka musí být vozidlo s úložným prostorem L'unità dev'essere un veicolo con spazio di carico + Einheit muss ein Fahrzeug mit Ladekapazität sein La unidad debe ser un vehículo con espacio de carga @@ -331,6 +336,7 @@ Юнит должен иметь свободное место в грузовом отсеке Jednotka musí mít místo v úložném prostoru L'unità deve avere spazio di carico disponibile + Einheit muss freie Ladekapazität haben La unidad debe tener espacio de carga disponible @@ -377,6 +383,7 @@ Agregar objetos al director Přidat objekty kurátorovi Aggiungi Oggetti al Curatore + Fügt Objekte zum Kurator hinzu Adds any spawned object to all curators in the mission @@ -386,6 +393,7 @@ Añadir cualquier objeto creado a todos los directores en la misión Přidá jakékoliv spawnuté objekty všem kurátorům v misi Aggiungi ogni oggetto creato a tutti i Curatori in missione + Fügt jedes gespawnte Objekt allen Kuratoren der Mission hinzu - \ No newline at end of file + diff --git a/extras/blank/CfgEventHandlers.hpp b/extras/blank/CfgEventHandlers.hpp index be284a9d70..93e3311cf2 100644 --- a/extras/blank/CfgEventHandlers.hpp +++ b/extras/blank/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreStart_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preStart)); diff --git a/extras/blank/XEH_PREP.hpp b/extras/blank/XEH_PREP.hpp index d089cdc8e4..c3a795e293 100644 --- a/extras/blank/XEH_PREP.hpp +++ b/extras/blank/XEH_PREP.hpp @@ -1,2 +1 @@ - PREP(empty); diff --git a/extras/blank/script_component.hpp b/extras/blank/script_component.hpp index efce15f539..770711ec9c 100644 --- a/extras/blank/script_component.hpp +++ b/extras/blank/script_component.hpp @@ -1,6 +1,11 @@ #define COMPONENT blank #include "\z\ace\addons\main\script_mod.hpp" +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define CBA_DEBUG_SYNCHRONOUS +// #define ENABLE_PERFORMANCE_COUNTERS + #ifdef DEBUG_ENABLED_BLANK #define DEBUG_MODE_FULL #endif @@ -9,4 +14,4 @@ #define DEBUG_SETTINGS DEBUG_SETTINGS_BLANK #endif -#include "\z\ace\addons\main\script_macros.hpp" \ No newline at end of file +#include "\z\ace\addons\main\script_macros.hpp"