Merge remote-tracking branch 'refs/remotes/origin/master' into Traduction-Fr

This commit is contained in:
NorXAengell 2016-03-01 01:27:24 +01:00
commit ffe940e389
86 changed files with 1639 additions and 103 deletions

View File

@ -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);
};
};
};

View File

@ -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

View File

@ -19,4 +19,8 @@ ADDON = false;
#include "XEH_PREP.hpp"
if (isServer) then {
GVAR(explosivesOrientations) = []
};
ADDON = true;

View File

@ -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));
};

View File

@ -91,6 +91,7 @@
<Czech>Blokováno</Czech>
<Polish>Zablokowany</Polish>
<Italian>Bloccato</Italian>
<German>Blockiert</German>
<French>Bloqué</French>
</Key>
<Key ID="STR_ACE_Explosives_CancelAction">
@ -730,4 +731,4 @@
<Portuguese>Conectar à %1</Portuguese>
</Key>
</Package>
</Project>
</Project>

View File

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

View File

@ -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));
};
};

View File

@ -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;
};
};
};

View File

@ -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}};
};
};

Binary file not shown.

View File

@ -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);

View File

@ -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;

View File

@ -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 Adapters 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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@ -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"

Binary file not shown.

View File

@ -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";
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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";
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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";
};
};
};
};

View File

@ -0,0 +1,22 @@
/*
* Author: BaerMitUmlaut
* Checks if the unit can cut deployed ropes.
*
* Arguments:
* 0: The helicopter itself <OBJECT>
*
* Return Value:
* Able to cut ropes <BOOL>
*
* Example:
* [_vehicle] call ace_fastroping_fnc_canCutRopes
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
!(_deployedRopes isEqualTo [])

View File

@ -0,0 +1,30 @@
/*
* Author: BaerMitUmlaut
* Checks if the unit can deploy ropes from the helicopter.
*
* Arguments:
* 0: Unit occupying the helicopter <OBJECT>
* 1: The helicopter itself <OBJECT>
*
* Return Value:
* Able to deploy ropes <BOOL>
*
* 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})

View File

@ -0,0 +1,26 @@
/*
* Author: BaerMitUmlaut
* Checks if the unit can fast rope from the helicopter.
*
* Arguments:
* 0: Unit occupying the helicopter <OBJECT>
* 1: The helicopter itself <OBJECT>
*
* Return Value:
* Able to fast ropes <BOOL>
*
* 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})

View File

@ -0,0 +1,27 @@
/*
* Author: BaerMitUmlaut
* Checks if the unit can prepare the helicopters FRIES.
*
* Arguments:
* 0: The helicopter itself <OBJECT>
*
* Return Value:
* Able to prepare FRIES <BOOL>
*
* 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))})

View File

@ -0,0 +1,50 @@
/*
* Author: BaerMitUmlaut
* Cut deployed ropes.
*
* Arguments:
* 0: A helicopter with deployed ropes <OBJECT>
*
* 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);

View File

@ -0,0 +1,56 @@
/*
* Author: BaerMitUmlaut
* Deploy ropes from the helicopter.
*
* Arguments:
* 0: The helicopter itself <OBJECT>
*
* 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];

View File

@ -0,0 +1,39 @@
/*
* Author: BaerMitUmlaut
* Equips the given helicopter with a FRIES.
*
* Arguments:
* 0: The helicopter <OBJECT>
*
* 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);
};
}];
};
};

View File

@ -0,0 +1,40 @@
/*
* Author: BaerMitUmlaut
* Lets the unit fast rope.
*
* Arguments:
* 0: Unit occupying the helicopter <OBJECT>
* 1: The helicopter itself <OBJECT>
*
* 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;

View File

@ -0,0 +1,50 @@
/*
* Author: BaerMitUmlaut
* Local PerFrameHandler during fast roping.
*
* Arguments:
* 0: PFH arguments <ARRAY>
* 1: PFH handle <OBJECT>
*
* 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;
};

View File

@ -0,0 +1,75 @@
/*
* Author: BaerMitUmlaut
* Server PerFrameHandler during fast roping.
*
* Arguments:
* 0: PFH arguments <ARRAY>
* 1: PFH handle <OBJECT>
*
* 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;
};

View File

@ -0,0 +1,27 @@
/*
* Author: BaerMitUmlaut
* Equips synched helicopters with a FRIES.
*
* Arguments:
* 0: Module <LOGIC>
*
* 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;

View File

@ -0,0 +1,39 @@
/*
* Author: BaerMitUmlaut
* Function for opening doors and extending the hook for most vanilla helos.
*
* Arguments:
* 0: Helicopter <OBJECT>
*
* Return Value:
* Amount of time to wait before cutting ropes <NUMBER>
*
* 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
};

View File

@ -0,0 +1,37 @@
/*
* Author: BaerMitUmlaut
* Function for closing doors and retracting the hook for most vanilla helos.
*
* Arguments:
* 0: Helicopter <OBJECT>
*
* Return Value:
* Amount of time to wait before deploying ropes <NUMBER>
*
* 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

View File

@ -0,0 +1,52 @@
/*
* Author: BaerMitUmlaut
* Handles ropes breaking when deployed.
*
* Arguments:
* 0: RopeBreak EH arguments <ARRAY>
* 1: Part of rope ("top" or "bottom") <STRING>
*
* 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
};
};

View File

@ -0,0 +1,32 @@
/*
* Author: BaerMitUmlaut
* Prepares the helicopters FRIES.
*
* Arguments:
* 0: A helicopter with deployed ropes <OBJECT>
*
* 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);

View File

@ -0,0 +1 @@
#include "\z\ace\addons\fastroping\script_component.hpp"

View File

@ -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"

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Fastroping">
<Key ID="STR_ACE_Fastroping_Module_FRIES_DisplayName">
<English>Equip FRIES</English>
<German>Rüste FRIES aus</German>
<Polish>Wyposaż FRIES</Polish>
<French>Equiper le FRIES</French>
</Key>
<Key ID="STR_ACE_Fastroping_Module_FRIES_Description">
<English>Equips compatible helicopters with a Fast Rope Insertion Extraction System.</English>
<German>Rüstet kompatible Helikopter mit einem Fast Rope Insertion Extraction System aus.</German>
<Polish>Wyposaża kompatybilne helikoptery w zestaw Fast Rope Insertion Extraction System.</Polish>
<French>Equipe les hélicoptères compatibles avec un Module Fast Rope Insertion Extraction System.</French>
</Key>
<Key ID="STR_ACE_Fastroping_Interaction_prepareFRIES">
<English>Prepare fast roping system</English>
<German>Bereite Fast Roping System vor</German>
<Polish>Przygotuj system zjazdu na linach</Polish>
<French>Préparer le système de corde lisse</French>
</Key>
<Key ID="STR_ACE_Fastroping_Interaction_deployRopes">
<English>Deploy ropes</English>
<German>Seile auswerfen</German>
<Polish>Wypuść liny</Polish>
<French>Déployer les cordes</French>
</Key>
<Key ID="STR_ACE_Fastroping_Interaction_fastRope">
<English>Fast rope</English>
<German>Abseilen</German>
<Polish>Zjedź na linie</Polish>
<French>Descendre à la corde</French>
</Key>
<Key ID="STR_ACE_Fastroping_Interaction_cutRopes">
<English>Cut ropes</English>
<German>Seile abwerfen</German>
<Polish>Odetnij liny</Polish>
<French>Détacher les cordes</French>
</Key>
<Key ID="STR_ACE_Fastroping_Eden_equipFRIES">
<English>Equip helicopter with FRIES</English>
<German>Rüste Helicopter mit FRIES aus</German>
<Polish>Wyposaż helikopter w FRIES</Polish>
<French>Equiper l'hélicoptère avec le FRIED</French>
</Key>
<Key ID="STR_ACE_Fastroping_Eden_equipFRIES_Tooltip">
<English>Equips the selected helicopter with a Fast Rope Insertion Extraction System</English>
<German>Rüstet den ausgewählten Helicopter mit einem Fast Rope Insertion Extraction System aus</German>
<Polish>Wyposaża wybrany helikopter w zestaw Fast Rope Insertion Extraction System</Polish>
<French>Equipe l'hélicoptère sélectionné avec un Fast Rope Insertion Extraction System</French>
</Key>
</Package>
</Project>

View File

@ -65,12 +65,14 @@
<English>Explosion Reflections Simulation</English>
<Polish>Symulacja odbicia eksplozji</Polish>
<Italian>Simulazione Riflessi Esplosioni</Italian>
<German>Druckwellensimulation</German>
<Spanish>Activar simulación de reflexiones</Spanish>
</Key>
<Key ID="STR_ACE_Frag_EnableReflections_Desc">
<English>Enable the ACE Explosion Reflection Simulation</English>
<Polish>Włącz symulację odbicia eksplozji ACE</Polish>
<Italian>Abilita la Simulazione Riflessi Esplosioni di ACE</Italian>
<German>Aktiviere die ACE-Druckwellensimulation</German>
<Spanish>Activa la simulación de reflexiones para las explosiones.</Spanish>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack">
@ -146,4 +148,4 @@
<Italian>(Solo SP) Richiede un restart editor/missione. Abilita il tracciamento visivo di schegge da frammentazione/spalling in modalità Giocatore Singolo.</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -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

View File

@ -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);

View File

@ -353,6 +353,7 @@
<English>Get Out</English>
<Polish>Wyjdź</Polish>
<Italian>Esci</Italian>
<German>Aussteigen!</German>
<Spanish>Sal del vehículo!</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_TeamManagement">
@ -653,6 +654,7 @@
<Portuguese>Abrir</Portuguese>
<Russian>Открыть</Russian>
<Italian>Apri</Italian>
<German>Öffnen</German>
</Key>
<Key ID="STR_ACE_Interaction_Module_DisplayName">
<English>Interaction System</English>
@ -765,4 +767,4 @@
<Spanish>Mostrar "Pasar cargador" en el menú de interacción</Spanish>
</Key>
</Package>
</Project>
</Project>

View File

@ -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);

View File

@ -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);
};
};
};
};

View File

@ -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));

View File

@ -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;

View File

@ -225,6 +225,30 @@
<Russian>Скрыть маркеры групп, которые состоят полностью из ботов?</Russian>
<Italian>Nascondi markers per gruppi di sole IA?</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_ShowPlayerNames_DisplayName">
<English>Show player names?</English>
<Polish>Pokaż imiona graczy?</Polish>
<Spanish>Mostrar nombres de los jugadores?</Spanish>
<German>Zeigen Sie die Namen der Spieler?</German>
<Czech>Zobrazit jména hráčů?</Czech>
<Portuguese>Mostrar os nomes dos jogadores?</Portuguese>
<French>Afficher les noms des joueurs?</French>
<Hungarian>Itt található az a játékos nevét?</Hungarian>
<Russian>Показать имена игроков?</Russian>
<Italian>Mostra i nomi dei giocatori?</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_ShowPlayerNames_Description">
<English>Show individual player names?</English>
<Polish>Pokaż poszczególne imiona graczy?</Polish>
<Spanish>Mostrar nombres de los jugadores individuales?</Spanish>
<German>Zeigen einzelnen Spielernamen?</German>
<Czech>Zobrazit názvy jednotlivých hráčů?</Czech>
<Portuguese>Mostrar nomes individuais dos jogadores?</Portuguese>
<French>Afficher les noms des joueurs individuels?</French>
<Hungarian>Itt található az adott játékos neveket?</Hungarian>
<Russian>Показать отдельные имена игроков?</Russian>
<Italian>Mostra i nomi dei giocatori singoli?</Italian>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_Description">
<English>This module allows the tracking of allied units with BFT map markers.</English>
<Polish>Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT.</Polish>

View File

@ -8,6 +8,7 @@
<Russian>Жесты на карте</Russian>
<Czech>Ukazování v mapě</Czech>
<Italian>Gesti Mappa</Italian>
<German>Kartenzeichen</German>
<Spanish>Gestos en mapa</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_enabled_displayName">
@ -17,6 +18,7 @@
<Russian>Включено</Russian>
<Czech>Povolit</Czech>
<Italian>Abilita</Italian>
<German>Aktiviert</German>
<Spanish>Activado</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_maxRange_displayName">
@ -26,6 +28,7 @@
<Russian>Макс. дистанция жестов на карте</Russian>
<Czech>Max. vzdálenost pro ukazování v mapě</Czech>
<Italian>Distanza Massima Gesti Mappa</Italian>
<German>Maximale Reichweite der Kartenzeichen</German>
<Spanish>Máx. dist. para gestos en mapa</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_maxRange_description">
@ -35,6 +38,7 @@
<Russian>Макс. дистанция между игроками для отображения жестов на карте [по-умолчанию: 7 метров]</Russian>
<Czech>Maximální vzdálenost mezi hráči pro zobrazení indikátoru ukázání v mapě [výchozí: 7 metrů] </Czech>
<Italian>Distanza massima tra giocatori per mostrare i gesti in mappa [default: 7 metri]</Italian>
<German>Maximale Reichweite zwischen Spielern um Kartenzeichen anzuzeigen (Standard: 7 Meter)</German>
<Spanish>Máxima distancia a la cual pueden verse el indicador de gestos [defecto: 7 m]</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_defaultLeadColor_displayName">
@ -44,6 +48,7 @@
<Russian>Лид. цвет по-умолчанию</Russian>
<Czech>Výchozí barva velitele</Czech>
<Italian>Colore Default Caposquadra</Italian>
<German>Gruppenführer-Standardfarbe</German>
<Spanish>Color por defecto para el lider</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_defaultLeadColor_description">
@ -52,6 +57,7 @@
<Polish>Domyślny kolor dla liderów grup.</Polish>
<Russian>Значение цвета для лидеров групп.</Russian>
<Italian>Colore di riserva dei capisquadra quando non c'è nessuna impostazione gruppo. [Modulo: lascia vuoto per non forzare su clients]</Italian>
<German>Ersatz-Farbwert für Gruppenführer wenn keine Gruppeneinstellung vorhanden ist. [Modul: leer lassen um Anwendung bei Clients nicht zu erzwingen]</German>
<Spanish>Color por defecto para líderes cuando no está configurado [Módulo: dejar en blanco para no forzar]</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_defaultColor_displayName">
@ -61,6 +67,7 @@
<Russian>Цвет по-умолчанию</Russian>
<Czech>Výchozí barva</Czech>
<Italian>Colore Default</Italian>
<German>Standardfarbe</German>
<Spanish>Color por defecto</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_defaultColor_description">
@ -69,6 +76,7 @@
<Polish>Kolor domyślny</Polish>
<Russian>Значение цвета.</Russian>
<Italian>Colore di riserva quando non ci sono impostazioni gruppo. [Modulo: lascia vuto per non forzare sui clients]</Italian>
<German>Ersatz-Farbwert wenn keine Gruppeneinstellung vorhanden ist. [Modul: leer lassen um Anwendung bei Clients nicht zu erzwingen]</German>
<Spanish>Color por defecto cuando no está configurado [Módulo: dejar en blanco para no forzar]</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_leadColor_displayName">
@ -78,6 +86,7 @@
<Russian>Лид. цвет</Russian>
<Czech>Barva velitele</Czech>
<Italian>Colore Caposquadra</Italian>
<German>Gruppenführer-Farbe</German>
<Spanish>Color para el líder</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_leadColor_description">
@ -86,6 +95,7 @@
<Polish>Kolor dla liderów grup zsynchronizowanych z tym modułem.</Polish>
<Russian>Значение цвета для лидеров групп, которые [группы] синхронизированы с этим модулем.</Russian>
<Italian>Colore dei Caposquadra per gruppi sincronizzati con questo modulo.</Italian>
<German>Farbwert für Gruppenführer, die mit diesem Modul synchronisiert werden.</German>
<Spanish>Color para los líderes de los grupos sincronizados al módulo.</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_color_displayName">
@ -95,6 +105,7 @@
<Russian>Цвет</Russian>
<Czech>Barva</Czech>
<Italian>Colore</Italian>
<German>Farbe</German>
<Spanish>Color</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_color_description">
@ -103,6 +114,7 @@
<Polish>Kolor dla członków grup zsynchronizowanych z tym modułem.</Polish>
<Russian>Значение цвета для членов групп, которые [группы] синхронизированы с этим модулем.</Russian>
<Italian>Colore per membri di gruppi sincronizzati con questo modulo.</Italian>
<German>Farbwert für Gruppenmitglieder, die mit diesem Modul synchronisiert werden.</German>
<Spanish>Color para los miembros de los grupos sincronizados al módulo.</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_moduleGroupSettings_displayName">
@ -112,6 +124,7 @@
<Russian>Жесты на карте - настройки групп</Russian>
<Czech>Ukazování v mapě - nastavení skupiny</Czech>
<Italian>Gesti Mappa - Impostazioni Gruppi</Italian>
<German>Kartenzeichen - Gruppeneinstellungen</German>
<Spanish>Gestos en mapas - Configuración de grupos</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_interval_displayName">
@ -121,6 +134,7 @@
<Russian>Интервал обновления</Russian>
<Czech>Interval aktualizace</Czech>
<Italian>Intervallo Aggiornamento</Italian>
<German>Update-Intervall</German>
<Spanish>Período de actualización</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_interval_description">
@ -130,6 +144,7 @@
<Russian>Время между обновлениями данных.</Russian>
<Czech>Čas mezi aktualizacemi dat.</Czech>
<Italian>Intervallo tra aggiornamenti dati.</Italian>
<German>Zeit zwischen Datenupdates.</German>
<Spanish>Tiempo entre actualizaciones sucesivas.</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_GroupColorConfigurations_displayName">
@ -139,6 +154,7 @@
<Russian>Конфигурация цвета групп</Russian>
<Czech>Konfigurace barvy pro skupinu</Czech>
<Italian>Configurazioni colori dei gruppi</Italian>
<German>Konfiguration der Gruppenfarbe</German>
<Spanish>Configuración de color de grupo</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_GroupColorConfigurations_description">
@ -147,6 +163,7 @@
<Polish>Konfiguracja kolorów grup zawierająca tablice par kolorów ([kolorLidera, kolor]).</Polish>
<Russian>Конфигурация цвета групп содержит массив цветовых пар ([лид. цвет, цвет]).</Russian>
<Italian>Configurazioni colori gruppi contenenti array di coppie di colori ([leadColor, color]).</Italian>
<German>Konfiguration der Gruppenfarbe mit zugeordneten Farbpaaren der Aufstellung ([leadColor, color]).</German>
<Spanish>Configuración de color de grupo conteniendo una lista de pares de colores ([colorLider, colo]).</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_GroupColorConfigurationMapping_description">
@ -155,6 +172,7 @@
<Polish>Hasz ID grup zmapowanych w indeksie konfiguracji koloru grup.</Polish>
<Russian>Хеш ID групп, соответствующих индексам конфигурации цвета групп.</Russian>
<Italian>Hash degli ID Gruppi mappati nell'indice configurazioni colori gruppi.</Italian>
<German>Hashwert der Gruppen-ID, die dem Konfigurations-Index der Gruppenfarbe zugeordnet werden.</German>
<Spanish>ID de Grupo mapeado al índice de la configuración de color de grupo.</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_GroupColorConfigurationMapping_displayName">
@ -163,6 +181,7 @@
<Polish>Mapowanie kolorów poprzez GroupID</Polish>
<Russian>Соответствие ID групп конфигурации цвета групп</Russian>
<Italian>Mappatura configurazioni colori GroupID</Italian>
<German>Gruppen-ID-Farbe Konfigurationszuordnung</German>
<Spanish>Mapeado de ID de Grupo</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_enabled_description">
@ -172,6 +191,7 @@
<Russian>Включает указания на карте.</Russian>
<Czech>Povolit ukazování v mapě</Czech>
<Italian>Abilita i Gesti Mappa</Italian>
<German>Aktiviert die Kartenzeichen.</German>
<Spanish>Activar Gestos en Mapa</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_nameTextColor_displayName">
@ -181,6 +201,7 @@
<Russian>Цвет текста имени</Russian>
<Czech>Barva textu pro jména</Czech>
<Italian>Colore Testo Nome</Italian>
<German>Farbe der Namenstexte.</German>
<Spanish>Color de los nombres</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_nameTextColor_description">
@ -189,6 +210,7 @@
<Polish>Kolor nazwy gracza obok markera gestu mapy.</Polish>
<Russian>Цвет инмени игрока рядом с маркером жестов.</Russian>
<Italian>Colore del testo dei nametag oltre a quello dei Gesti Mappa</Italian>
<German>Farbe der Namenstexte neben der Kartenzeichen-Markierung.</German>
<Spanish>Color de los nombres dibujados al lado del marcados de gestos.</Spanish>
</Key>
<Key ID="STR_ACE_map_gestures_mapGestures_category">
@ -198,7 +220,8 @@
<Russian>Жесты на карте</Russian>
<Czech>Ukazovní v mapě</Czech>
<Italian>Gesti Mappa</Italian>
<German>Kartenzeichen</German>
<Spanish>Gestos en mapa</Spanish>
</Key>
</Package>
</Project>
</Project>

View File

@ -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) = [];

View File

@ -21,5 +21,5 @@ TRACE_1("params",_logic);
[
QGVAR(setMarkerJIP),
[_logic],
[GETGVAR(allMapMarkers,[]), GETGVAR(allMapMarkersProperties,[]), _logic]
[GETGVAR(allMapMarkers,[]), GETGVAR(allMapMarkersProperties,[])]
] call EFUNC(common,targetEvent);

View File

@ -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;

View File

@ -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 {

View File

@ -51,6 +51,7 @@
</Key>
<Key ID="STR_ACE_Medical_Inject_Adenosine">
<English>Inject Adenosine</English>
<German>Adenosin injizieren</German>
<Spanish>Inyectar Adenosina</Spanish>
<Polish>Wstrzyknij adenozynę</Polish>
</Key>
@ -248,6 +249,7 @@
</Key>
<Key ID="STR_ACE_Medical_Injecting_Adenosine">
<English>Injecting Adenosine...</English>
<German>Adenosin injizieren...</German>
<Spanish>Inyectando Adenosina...</Spanish>
<Polish>Wstrzykiwanie adenozyny...</Polish>
</Key>
@ -937,7 +939,7 @@
</Key>
<Key ID="STR_ACE_Medical_Morphine_Desc_Short">
<English>Used to combat moderate to severe pain experiences</English>
<German>Wird verwendet um moderate bis starke Schmärzen zu lindern.</German>
<German>Wird verwendet um moderate bis starke Schmerzen zu lindern.</German>
<Russian>Для снятия средних и сильных болевых ощущений</Russian>
<Spanish>Usado para combatir los estados dolorosos de moderados a severos</Spanish>
<French>Utilisé pour réduire les douleurs modérées à sévères.</French>
@ -961,16 +963,19 @@
</Key>
<Key ID="STR_ACE_Medical_Adenosine_Display">
<English>Adenosine autoinjector</English>
<German>Adenosin-Autoinjektor</German>
<Spanish>Asenosina auto-inyectable</Spanish>
<Polish>Autostrzykawka z adenozyną</Polish>
</Key>
<Key ID="STR_ACE_Medical_Adenosine_Desc_Short">
<English>Used to counter effects of Epinephrine</English>
<German>Wird verwendet um die Symptome von Epiniphrin zu lindern</German>
<Spanish>Utilizada para contrarrestar los effectos de la Epinefrina</Spanish>
<Polish>Adenozyna. Stosowana do zwalczania efektów działania adrenaliny.</Polish>
</Key>
<Key ID="STR_ACE_Medical_Adenosine_Desc_Use">
<English>A drug used to counter the effects of Epinephrine</English>
<German>Ein Medikament, das die Symptome von Epiniphrin bekämpft.</German>
<Spanish>Medicamento usado para contrarrestar los efectos de la Epinefrina.</Spanish>
<Polish>Organiczny związek chemiczny z grupy nukleozydów. Skuteczna w leczeniu częstoskurczu komorowego. Działa rozszerzająco na naczynia krwionośne.</Polish>
</Key>
@ -1041,7 +1046,7 @@
<French>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.</French>
<Polish>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.</Polish>
<Italian>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.</Italian>
<German>Ein Medikament, das die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen(Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht.</German>
<German>Ein Medikament, das die Bronchien erweitert, die Herzfrequenz erhöht und Symptome von allergischen Reaktionen (Anaphylaxie) bekämpft. Wird bei plötzlichem Herzstillstand verabreicht.</German>
<Portuguese>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.</Portuguese>
<Hungarian>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.</Hungarian>
<Czech>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ě.</Czech>
@ -1232,7 +1237,7 @@
<Spanish>Vendaje básico (QuickClot)</Spanish>
<French>Bandage basique (Hémostatique)</French>
<Polish>Opatrunek QuikClot ACS</Polish>
<German>Verbandpäckchen(Gerinnungsmittel)</German>
<German>Verbandpäckchen (Gerinnungsmittel)</German>
<Hungarian>Általános zárókötszer (QuikClot)</Hungarian>
<Italian>Bendaggio emostatico (QuikClot)</Italian>
<Portuguese>Bandagem básica (Coagulante)</Portuguese>
@ -2128,7 +2133,7 @@
<English>%1 applied a tourniquet</English>
<Spanish>%1 aplicado torniquete</Spanish>
<Russian>%1 наложил жгут</Russian>
<German>%1 hat einen Tourniquet angelegt</German>
<German>%1 hat ein Tourniquet angelegt</German>
<Polish>%1 założył stazę</Polish>
<French>%1 a appliqué un garrot</French>
<Hungarian>%1 felhelyezett egy érszorítót</Hungarian>
@ -2272,6 +2277,7 @@
<Portuguese>Curar hitpoints totalmente enfaixados</Portuguese>
<Czech>Heal fully bandaged hitpoints</Czech>
<Italian>Cura hitpoints completamente bendati</Italian>
<German>Heilt vollständig bandagierte Trefferpunkte</German>
</Key>
<Key ID="STR_ACE_Medical_painIsOnlySuppressed">
<English>Pain is only temporarily suppressed</English>
@ -2670,7 +2676,7 @@
<Czech>Střelné poranění</Czech>
</Key>
<Key ID="STR_ACE_Medical_Wounds_VelocityWound_Minor">
<English>Smal Velocity Wound</English>
<English>Small Velocity Wound</English>
<German>Kleines Ballistisches Trauma</German>
<Italian>Lenta Velocità Ferita</Italian>
<Russian>Малая огнестрельная рана</Russian>
@ -2889,6 +2895,7 @@
<English>Locations boost training</English>
<Czech>Místa pro vylepšení zkušeností</Czech>
<Italian>Località aumentano addestramento</Italian>
<German>Örtliche Trainingssteigerung</German>
<Spanish>Ubicación mejora entrenamiento.</Spanish>
<Polish>Miejsca zwiększają wyszkolenie</Polish>
</Key>
@ -2896,6 +2903,7 @@
<English>Boost medic rating in medical vehicles or near medical facilities [untrained becomes medic, medic becomes doctor]</English>
<Czech>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] </Czech>
<Italian>Aumenta il rating medico in veicoli medici o vicino strutture mediche [non addestrato diventa medico, medico diventa dottore]</Italian>
<German>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]</German>
<Spanish>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)</Spanish>
<Polish>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]</Polish>
</Key>
@ -3069,7 +3077,7 @@
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_remoteControlledAI_Description">
<English>Treat remote controlled units as AI not players?</English>
<German>Behandle ferngesteuerte Einheiten als KI und nicht als Spieler?</German>
<German>Legt fest, ob ferngesteuerte Einheiten als KI anstatt als Spieler behandelt werden sollen.</German>
<Spanish>¿Tratar unidades remotamente controladas como IA?</Spanish>
<Portuguese>Tratar unidades remotamente controladas como IA?</Portuguese>
<Polish>Traktuj jednostki zdalnie sterowane (przez Zeusa) jako AI, nie jako graczy?</Polish>
@ -3144,7 +3152,7 @@
<Russian>Коэффициент, изменяющий уровень боли</Russian>
<Polish>Mnożnik modyfikujący intensywność bólu</Polish>
<Spanish>Coeficiente para modificar la intensidad del dolor</Spanish>
<German>Multiplikator um den Schmerzintensität zu verändern</German>
<German>Multiplikator um die Schmerzintensität zu verändern</German>
<Czech>Koeficient intenzity bolesti</Czech>
<Portuguese>Coeficiente para modificar a instensidade de dor</Portuguese>
<French>Coefficient modifiant l'intensité de la douleur</French>
@ -3189,6 +3197,7 @@
</Key>
<Key ID="STR_ACE_Medical_BasicMedicalSettings_Module_DisplayName">
<English>Basic Medical Settings [ACE]</English>
<German>Standard Sanitätseinstellungen [ACE]</German>
<Polish>Podstawowe ustawienia medyczne</Polish>
<Spanish>Ajustes médicos básicos [ACE]</Spanish>
</Key>
@ -3302,11 +3311,13 @@
</Key>
<Key ID="STR_ACE_Medical_BasicMedicalSettings_medicSetting_basicEpi_DisplayName">
<English>Allow Epinephrine</English>
<German>Erlaube Epiniphrin</German>
<Spanish>Permitir Epinefrina</Spanish>
<Polish>Ograniczenia adrenaliny</Polish>
</Key>
<Key ID="STR_ACE_Medical_BasicMedicalSettings_medicSetting_basicEpi_Description">
<English>Who can use Epinephrine for full heal? (Basic medical only)</English>
<German>Wer darf Epiniphrin zur vollständigen Heilung benutzen? (Standard Sanitätseinstellungen)</German>
<Spanish>Configura quienes pueden usar Epinefrina (Solo sistema médico básico)</Spanish>
<Polish>Kto może skorzystać z adrenaliny w celu pełnego uleczenia? (Tylko podstawowy system medyczny)</Polish>
</Key>
@ -3375,7 +3386,7 @@
<Russian>Удалять аптечки после использования</Russian>
<Polish>Usuń apteczkę po użyciu</Polish>
<Spanish>Eliminar EPA después del uso</Spanish>
<German>Entferne Erste-Hilfe-Set bei Verwendung</German>
<German>Entf. Erste-Hilfe-Set bei Verwendung</German>
<Czech>Odebrat osobní lékárničku po použití</Czech>
<Portuguese>Remover o KPS depois do uso</Portuguese>
<French>Enlever le KPS à l'utilisation</French>
@ -3396,11 +3407,13 @@
</Key>
<Key ID="STR_ACE_Medical_BasicMedicalSettings_useLocation_basicEpi_DisplayName">
<English>Locations Epinephrine</English>
<German>Orte für Epiniphrin</German>
<Spanish>Ubicaciones epinefrina</Spanish>
<Polish>Ograniczenia adrenaliny</Polish>
</Key>
<Key ID="STR_ACE_Medical_BasicMedicalSettings_useLocation_basicEpi_Description">
<English>Where can the Epinephrine be used? (Basic Medical)</English>
<German>Wo kann Epiniphrin verwendet werden? (Standard Sanitätseinstellungen)</German>
<Spanish>Configura donde puede usarse Epinefrina (Solo sistema médico básico)</Spanish>
<Polish>Gdzie można korzystać z adrenaliny? (Podstawowy system medyczny)</Polish>
</Key>
@ -3430,7 +3443,7 @@
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useCondition_PAK_DisplayName">
<English>Condition PAK</English>
<German>Voraussetzungen für das Erste-Hilfe-Set</German>
<German>Bedingungen für d. Erste-Hilfe-Set</German>
<Czech>Podmínka osobní lékárničky</Czech>
<Spanish>Condición EPA</Spanish>
<French>Condition d'utilisation du KPS</French>
@ -3574,7 +3587,7 @@
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useCondition_SurgicalKit_DisplayName">
<English>Condition Surgical Kit (Adv)</English>
<German>Voraussetzungen für den Operationskasten (erweitert)</German>
<German>Beding. für d. Operationskasten (erw.)</German>
<Czech>Podmínka chirurgické soupravy (Pokr.)</Czech>
<Spanish>Condición de equipo quirúrgico (Av)</Spanish>
<French>Conditions d'utilisation du kit de chirurgie</French>
@ -3642,6 +3655,7 @@
</Key>
<Key ID="STR_ACE_Medical_BasicMedicalSettings_Module_Description">
<English>Configure the treatment settings from ACE Basic Medical</English>
<German>Behandlungseinstellungen der Standard ACE-Medizin konfigurieren</German>
<Spanish>Configure las opciones de tratamiento del sistema médico básico de ACE</Spanish>
<Polish>Skonfiguruj ustawienia leczenia podstawowego systemu medycznego ACE</Polish>
</Key>
@ -3998,7 +4012,7 @@
<Russian>[ACE] Ящик с медикаментами (базовая медицина)</Russian>
<Polish>[ACE] Skrzynka z zapasami medycznymi (podstawowa)</Polish>
<Spanish>[ACE] Caja de suministros médicos (Básica)</Spanish>
<German>[ACE] Sanitätskiste (standard)</German>
<German>[ACE] Sanitätskiste (Standard)</German>
<Czech>[ACE] Zdravotnické zásoby (základní)</Czech>
<Portuguese>[ACE] Caixa com suprimentos médicos</Portuguese>
<French>[ACE] Caisse médicale (basique)</French>
@ -4075,7 +4089,7 @@
</Key>
<Key ID="STR_ACE_Medical_noTourniquetOnBodyPart">
<English>There is no tourniquet on this body part!</English>
<German>An diesem Körperteil befindet sich kein Tourniquet</German>
<German>An diesem Körperteil befindet sich kein Tourniquet!</German>
<Polish>Na tej części ciała nie ma stazy!</Polish>
<Spanish>No hay torniquete en esta parte del cuerpo!</Spanish>
<Russian>Нет жгута на этой части тела!</Russian>
@ -4087,28 +4101,29 @@
<English>Medical training</English>
<Polish>Wyszkolenie medyczne</Polish>
<Italian>Addestramento Medico</Italian>
<German>Sanitätsausbildung</German>
<Spanish>Entrenamiento médico</Spanish>
</Key>
<Key ID="STR_ACE_Medical_Attributes_isMedicalVehicle_Description">
<English>Whether or not the object will be a medical vehicle.</English>
<Polish>Czy pojazdy ma być pojazdem medycznym?</Polish>
<Italian>L'oggetto in questione sarà un veicolo medico o meno.</Italian>
<German>Legt fest, ob das Objekt ein Sanitätsfahrzeug ist.</German>
<Spanish>Es un vehículo médico?</Spanish>
</Key>
<Key ID="STR_ACE_Medical_delayUnconCaptive">
<English>Delay Medical Unconscious Captivity</English>
<English>Delay cease fire of AI during medical unconsciousness</English>
<German>Verzögert Ende des KI-Beschusses bei medizinischer Bewustlosigkeit</German>
<Spanish>Demora antes de volverse neutral al caer inconsciente</Spanish>
<Polish>Opóźnij status captive u nieprzytomnych osób</Polish>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_delayUnconCaptive_Description">
<English>Delay Medical Unconscious Captivity</English>
<Spanish>Demora antes de volverse neutral al caer inconsciente</Spanish>
<Polish>Opóźnij status captive u nieprzytomnych osób</Polish>
<English>Delay cease fire of AI while player is unconscious for medical reasons.</English>
<German>Verzögert das Ende des KI-Beschusses auf einen Spieler, wenn dieser aus medizinischen Gründen bewustlos wird.</German>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_delayUnconCaptive_DisplayName">
<English>Delay Medical Unconscious Captivity</English>
<Spanish>Demora antes de volverse neutral al caer inconsciente</Spanish>
<Polish>Opóźnij status captive u nieprzytomnych osób</Polish>
<English>Delay cease fire of AI for unconsciousness</English>
<German>Verzögert Ende des KI-Beschusses bei medizinischer Bewustlosigkeit</German>
</Key>
</Package>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Medical Menu">
<Key ID="STR_ACE_Medical_Menu_OpenMenu">
@ -209,6 +209,7 @@
<Portuguese>Vias aéreas</Portuguese>
<Czech>Dýchací systém</Czech>
<Italian>Gestione Vie Respiratorie</Italian>
<German>Atemwegssicherung</German>
</Key>
<Key ID="STR_ACE_Medical_Menu_ADVANCED_TREATMENT">
<English>Advanced Treatments</English>
@ -596,4 +597,4 @@
<Italian>Tubo Nasofaringeo [NPA]</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -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;

View File

@ -41,7 +41,7 @@
</Key>
<Key ID="STR_ACE_Overheating_showParticleEffectsForEveryone_displayName">
<English>Overheating Particle Effects for everyone</English>
<German>Zeige Partikeleffekt bei allen</German>
<German>Zeige Partikeleffekt bei Überhitzung für jeden</German>
<Polish>Pokaż efekty cząsteczkowe dla wszystkich</Polish>
<Italian>Effetti Particellari Surriscaldamento per tutti</Italian>
<Spanish>Efectos de partículas para todos</Spanish>
@ -69,21 +69,25 @@
</Key>
<Key ID="STR_ACE_Overheating_unJamOnreload_displayName">
<English>Unjam weapon on reload</English>
<German>Behebt Ladehemmung beim Nachladen</German>
<Spanish>Desencasquillar el arma al recargar.</Spanish>
<Polish>Usuń zacięcie przy przeładowaniu</Polish>
</Key>
<Key ID="STR_ACE_Overheating_unJamOnreload_description">
<English>Reloading clears a weapon jam.</English>
<German>Nachladen behebt eine Ladehemmung.</German>
<Spanish>Recargar el arma la desencasquilla.</Spanish>
<Polish>Przeładowywanie usuwa zacięcie</Polish>
</Key>
<Key ID="STR_ACE_Overheating_unJamFailChance_displayName">
<English>Chance of unjam failing</English>
<German>Wahrscheinlichkeit, dass Ladehemmung nicht behoben wird</German>
<Spanish>Probabilidad de falla al desencasquillar.</Spanish>
<Polish>Szansa na porażkę usuw. zacięcia</Polish>
</Key>
<Key ID="STR_ACE_Overheating_unJamFailChance_description">
<English>Probability that an unjam action might fail, requiring to be repeated.</English>
<German>Wahrscheinlichkeit, dass der Versuch eine Ladehemmung zu beheben fehl schlägt und erneut durchgeführt werden muss.</German>
<Spanish>Probabilidad de que el proceso de desencasquille falle, teniendo que repetirlo.</Spanish>
<Polish>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.</Polish>
</Key>
@ -149,6 +153,7 @@
</Key>
<Key ID="STR_ACE_Overheating_WeaponUnjamFailed">
<English>Jam failed to clear</English>
<German>Ladehemmung nicht behoben</German>
<Spanish>Falló el desencasquillado</Spanish>
<Polish>Porażka przy usuwaniu zacięcia</Polish>
</Key>
@ -237,4 +242,4 @@
<Russian>Температура</Russian>
</Key>
</Package>
</Project>
</Project>

View File

@ -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

View File

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

View File

@ -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 {

View File

@ -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),

View File

@ -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);

View File

@ -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;
};

View File

@ -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 {

View File

@ -12,7 +12,7 @@
* Example:
* [fuelTruck, 42] call ace_refuel_fnc_setFuel
*
* Public: No
* Public: Yes
*/
#include "script_component.hpp"

View File

@ -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],

View File

@ -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

View File

@ -3,7 +3,7 @@
<Package name="Refuel">
<Key ID="STR_ACE_Refuel_RefuelSettings_Module_DisplayName">
<English>Refuel Settings</English>
<German>Betankungseinst.</German>
<German>Betankungseinstellungen</German>
<Polish>Ustawienia tankowania</Polish>
<Russian>Настройки дозаправки</Russian>
<Portuguese>Ajustes de reabastecimento</Portuguese>
@ -312,4 +312,4 @@
<Spanish>Se reabastecieron %1 lt </Spanish>
</Key>
</Package>
</Project>
</Project>

View File

@ -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 {

View File

@ -381,6 +381,7 @@
<Spanish>Estabilizador horizontal izquierdo</Spanish>
<Czech>Levý horizontální stabilizátor</Czech>
<Italian>Stabilizzatore Orizzontale Sinistro</Italian>
<German>Linkes Höhenleitwerk</German>
</Key>
<Key ID="STR_ACE_Repair_HitHStabilizerR1">
<English>Right Horizontal Stabilizer</English>
@ -390,6 +391,7 @@
<Spanish>Estabilizador horizontal derecho</Spanish>
<Czech>Pravý horizontální stabilizátor</Czech>
<Italian>Stabilizzatore Orizzontale Destro</Italian>
<German>Rechtes Höhenleitwerk</German>
</Key>
<Key ID="STR_ACE_Repair_HitVStabilizer1">
<English>Vertical Stabilizer</English>
@ -399,6 +401,7 @@
<Portuguese>Estabilizador Vertical</Portuguese>
<Spanish>Estabilizador vertical</Spanish>
<Italian>Stabilizzatore Verticale</Italian>
<German>Seitenleitwerk</German>
</Key>
<Key ID="STR_ACE_Repair_HitFuel">
<English>Fuel Tank</English>
@ -723,6 +726,7 @@
<Czech>ERA</Czech>
<Polish>ERA</Polish>
<Italian>ERA</Italian>
<German>Reaktivpanzerung</German>
<Spanish>ERA</Spanish>
</Key>
<Key ID="STR_ACE_Repair_moduleName">
@ -1226,4 +1230,4 @@
<Italian>Oggetti richiesti per riparare/rimuovere ruote</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Slideshow">
<Key ID="STR_ACE_Slideshow_DisplayName">
@ -106,6 +106,7 @@
<Czech>Názvy interakcí</Czech>
<Spanish>Nombres de interacción</Spanish>
<Italian>Nomi Interazioni</Italian>
<German>Interaktionsnamen</German>
</Key>
<Key ID="STR_ACE_Slideshow_Names_Description">
<English>List of names that will be used for interaction entries, separated by commas, in order of images.</English>
@ -116,6 +117,7 @@
<Russian>Список имен, которые будут использованы при взаимодействии, разделенные запятыми, в порядке следования изображений.</Russian>
<Spanish>Lista de nombres que se utilizarán para las entradas de interacción, separados por comas, en el orden de las imágenes.</Spanish>
<Italian>Lista di nomi che verranno usati per per le interazioni, separati da virgole, in ordine per immagini.</Italian>
<German>Liste aller Namen, die für Interaktionseinträge genutzt werden. Mit Kommata getrennt, in Reihenfolge der Bilder.</German>
</Key>
<Key ID="STR_ACE_Slideshow_Duration_DisplayName">
<English>Slide Duration</English>
@ -127,6 +129,7 @@
<Spanish>Duración de diapositiva</Spanish>
<Czech>Doba trvání snímku</Czech>
<Italian>Durata Diapositiva</Italian>
<German>Länge der Diavorführung pro Bild</German>
</Key>
<Key ID="STR_ACE_Slideshow_Duration_Description">
<English>Duration of each slide. Default: 0 (Automatic Transitions Disabled)</English>
@ -138,6 +141,7 @@
<Spanish>Duración de cada diapositiva. Por defecto: 0 (Transiciones automáticas desactivadas)</Spanish>
<Czech>Doba trvání každého snímku. Výchozí: 0 (Automatické posouvání je zakázáno)</Czech>
<Italian>Durata di ogni diapositiva. Default: 0 (Transizioni Automatiche Disabilitate)</Italian>
<German>Länge der Diavorführung pro Bild. Standard: 0 (Automatischer Wechsel deaktiviert)</German>
</Key>
<Key ID="STR_ACE_Slideshow_Interaction">
<English>Slides</English>
@ -149,6 +153,7 @@
<Spanish>Diapositivas</Spanish>
<Czech>Snímky</Czech>
<Italian>Diapositive</Italian>
<German>Dias</German>
</Key>
</Package>
</Project>

View File

@ -37,7 +37,7 @@
<English>SwitchUnits System</English>
<Polish>System zmiany stron</Polish>
<Spanish>Sistema de cambio de unidad</Spanish>
<German>Einheiten-Switch-System?</German>
<German>Einheiten-Wechsel-System</German>
<Czech>Systém výměny stran</Czech>
<Portuguese>Sistema de troca de unidades</Portuguese>
<French>Système de changement d'unité</French>
@ -201,4 +201,4 @@
<Spanish>El módulo permite a las unidades cambiar de bando durante el juego.</Spanish>
</Key>
</Package>
</Project>
</Project>

View File

@ -242,6 +242,7 @@
<Russian>Добавить запасное колесо</Russian>
<Czech>Přidat rezervní kolo</Czech>
<Italian>Aggiungi Ruota di Scorta</Italian>
<German>Ersatzrad hinzufügen</German>
<Spanish>Agregar rueda de auxilio</Spanish>
</Key>
<Key ID="STR_ACE_Zeus_ModuleAddSpareWheel_Description">
@ -251,6 +252,7 @@
<Russian>Добавляет запасное колесо в транспорт</Russian>
<Czech>Přidá rezervní kolo do vozidla</Czech>
<Italian>Aggiungi una ruota di scorta al veicolo</Italian>
<German>Fügt dem Fahrzeug ein Ersatzrad hinzu</German>
<Spanish>Agrega una rueda de auxilio al vehículo</Spanish>
</Key>
<Key ID="STR_ACE_Zeus_ModuleAddSpareTrack_DisplayName">
@ -260,6 +262,7 @@
<Russian>Дабавить запасную гусеницу</Russian>
<Czech>Přidat náhradní pás</Czech>
<Italian>Aggiungi Cingolo di Scorta</Italian>
<German>Ersatzkette hinzufügen</German>
<Spanish>Agregar oruga de repuesto</Spanish>
</Key>
<Key ID="STR_ACE_Zeus_ModuleAddSpareTrack_Description">
@ -269,6 +272,7 @@
<Russian>Добавляет запасную гусеницу в транспорт</Russian>
<Czech>Přidá náhradní pás do vozidla</Czech>
<Italian>Aggiungi un cingolo di scorta al veicolo</Italian>
<German>Fügt dem Fahrzeug eine Ersatzkette hinzu</German>
<Spanish>Agrega una oruga de repuesto al vehículo</Spanish>
</Key>
<Key ID="STR_ACE_Zeus_OnlyAlive">
@ -322,6 +326,7 @@
<Russian>Юнит должен быть транспортом с грузовым отсеком</Russian>
<Czech>Jednotka musí být vozidlo s úložným prostorem</Czech>
<Italian>L'unità dev'essere un veicolo con spazio di carico</Italian>
<German>Einheit muss ein Fahrzeug mit Ladekapazität sein</German>
<Spanish>La unidad debe ser un vehículo con espacio de carga</Spanish>
</Key>
<Key ID="STR_ACE_Zeus_OnlyEnoughCargoSpace">
@ -331,6 +336,7 @@
<Russian>Юнит должен иметь свободное место в грузовом отсеке</Russian>
<Czech>Jednotka musí mít místo v úložném prostoru</Czech>
<Italian>L'unità deve avere spazio di carico disponibile</Italian>
<German>Einheit muss freie Ladekapazität haben</German>
<Spanish>La unidad debe tener espacio de carga disponible</Spanish>
</Key>
<Key ID="STR_ACE_Zeus_OnlyNonCaptive">
@ -377,6 +383,7 @@
<Spanish>Agregar objetos al director</Spanish>
<Czech>Přidat objekty kurátorovi</Czech>
<Italian>Aggiungi Oggetti al Curatore</Italian>
<German>Fügt Objekte zum Kurator hinzu</German>
</Key>
<Key ID="STR_ACE_Zeus_AddObjectsToCurator_desc">
<English>Adds any spawned object to all curators in the mission</English>
@ -386,6 +393,7 @@
<Spanish>Añadir cualquier objeto creado a todos los directores en la misión</Spanish>
<Czech>Přidá jakékoliv spawnuté objekty všem kurátorům v misi</Czech>
<Italian>Aggiungi ogni oggetto creato a tutti i Curatori in missione</Italian>
<German>Fügt jedes gespawnte Objekt allen Kuratoren der Mission hinzu</German>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,4 +1,3 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));

View File

@ -1,2 +1 @@
PREP(empty);

View File

@ -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"
#include "\z\ace\addons\main\script_macros.hpp"