Merge acemod/master 3.5.0

# Merged Conflicts in addons/rearm/CfgVehicles.hpp
This commit is contained in:
GitHawk 2016-03-02 09:59:22 +01:00
commit 6cce74907f
175 changed files with 2414 additions and 923 deletions

View File

@ -4,9 +4,9 @@
<p align="center">
<a href="https://github.com/acemod/ACE3/releases">
<img src="https://img.shields.io/badge/Version-3.4.2-blue.svg?style=flat-square" alt="ACE3 Version">
<img src="https://img.shields.io/badge/Version-3.5.0-blue.svg?style=flat-square" alt="ACE3 Version">
</a>
<a href="https://github.com/acemod/ACE3/releases/download/v3.4.2/ace3_3.4.2.zip">
<a href="https://github.com/acemod/ACE3/releases/download/v3.5.0/ace3_3.5.0.zip">
<img src="https://img.shields.io/badge/Download-72.6_MB-green.svg?style=flat-square" alt="ACE3 Download">
</a>
<a href="https://github.com/acemod/ACE3/issues">

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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="Advanced_Ballistics">
<Key ID="STR_ACE_Advanced_Ballistics_WindInfoKey">
@ -92,7 +92,7 @@
<German>Für Gruppenmitglieder aktiviert</German>
<Czech>Povoleno pro členy skupiny</Czech>
<Portuguese>Ativada para membros do grupo</Portuguese>
<French>Activer pour les membres groupés</French>
<French>Activer pour les membres du groupe</French>
<Hungarian>Csoporttagoknak engedélyezve</Hungarian>
<Russian>Включена для группы</Russian>
<Italian>Abilita per Membri del Gruppo</Italian>
@ -104,7 +104,7 @@
<German>Aktiviert die erweiterte Ballistik für nicht lokale Gruppenmitglieder</German>
<Czech>Aktivuje pokročilou balistiku pro nelokální členy skupiny</Czech>
<Portuguese>Ativa balística avançada para membros de grupo não locais</Portuguese>
<French>Active la balistique avancée pour les membres groupés non locaux</French>
<French>Active la balistique avancée pour les membres du groupe non locaux</French>
<Hungarian>Engedélyezi a fejlett ballisztikát nem-helyi csoporttagoknak</Hungarian>
<Russian>Включает продвинутую баллистику для нелокальных членов группы</Russian>
<Italian>Abilita Balistica Avanzata per Membri non locali del Gruppo</Italian>
@ -128,7 +128,7 @@
<German>Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen)</German>
<Czech>Aktivuje pokročilou balistiku pro všechny nelokální hráče (aktivace této možnosti způsobuje pokles FPS během velké přestřelky v multiplayeru)</Czech>
<Portuguese>Ativa balística avançada para todos os jogadores não locais (ativando isso pode degradar a performance durante troca de tiros intensas no multiplayer)</Portuguese>
<French>Active la balistique avancé pour tous les joueurs non locaux (activer cette option peut avoir un impact sur les performance en multi durant les grands échanges de tirs)</French>
<French>Active la balistique avancée pour tous les joueurs non locaux (activer cette option peut avoir un impact sur les performance en multi durant les grands échanges de tirs)</French>
<Hungarian>Engedélyezi a fejlett ballisztikát az összes nem-helyi játékosnak (ez a funkció leronthatja a teljesítményt intenzív többjátékos tűzharcok alatt)</Hungarian>
<Russian>Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере)</Russian>
<Italian>Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe degradare le prestazioni durante scontri intensi in multiplayer)</Italian>
@ -140,7 +140,7 @@
<German>Für Gruppenmitglieder immer aktiviert</German>
<Czech>Vždy povoleno pro členy skupiny</Czech>
<Portuguese>Sempre ativada para membros do grupo</Portuguese>
<French>Toujours activer pour les membres groupés</French>
<French>Toujours activer pour les membres du groupe</French>
<Hungarian>Mindig engedélyezve csoporttagoknak</Hungarian>
<Russian>Всегда включена для членов группы</Russian>
<Italian>Sempre abilitato per Membri del Gruppo</Italian>
@ -272,7 +272,7 @@
<German>Legt das Intervall zwischen den Berechnungsschritten fest</German>
<Czech>Určuje interval mezi každým výpočtem</Czech>
<Portuguese>Define o intervalo entre cada cálculo</Portuguese>
<French>Défini un intervalle de calcul entre deux simulations</French>
<French>Définit un intervalle de calcul entre deux simulations</French>
<Hungarian>Meghatározza a számítási lépések közötti időintervallumot</Hungarian>
<Russian>Определяет временной интервал между вычислениями</Russian>
<Italian>Definisce l'intervallo tra ogni step di calcolo</Italian>
@ -296,7 +296,7 @@
<German>Gibt den Radius (in Metern) um den Spieler an, bei dem die erweiterte Ballistik auf Geschosse angewendet wird</German>
<Czech>Určuje oblast kolem hráče (v metrech), kde je pokročilá balistika použita na projektil</Czech>
<Portuguese>Define o raio ao redor do jogador (em metros) onde a balística avançada será aplicada aos projéteis</Portuguese>
<French>Défini le rayon autour du joueur (en mètres) d'application de la balistique avancée</French>
<French>Définit le rayon autour du joueur (en mètres) d'application de la balistique avancée</French>
<Hungarian>Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékek fejlett ballisztikát használnak</Hungarian>
<Russian>Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам</Russian>
<Italian>Definisce il raggio attorno al giocatore (in metri) per cui la Balistica Avanzata è applicata ai proiettili</Italian>
@ -307,7 +307,7 @@
<Polish>Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.</Polish>
<Czech>Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice.</Czech>
<Portuguese>Este módulo permite que você ative cálculos de balística avançada, fazendo a trajetória do projétil levar em consideração coisas como temperatura do ar, pressão atmosférica, umidade, força de Coriolis, a gravidade, o modelo da arma no qual o disparo é realizado e o tipo de munição. Tudo isso acrescenta-se a um balística muito precisa.</Portuguese>
<French>Ce module active la simulation de balistique avancée - ie les projectiles sont influencé par des varibles comme le vent, la température, la pression atmosphérique, l'humidité, la gravité, le type de munition et l'arme avec laquelles ils sont tirés</French>
<French>Ce module active la simulation de balistique avancée - ie les projectiles sont influencés par des varibles comme le vent, la température, la pression atmosphérique, l'humidité, la gravité, le type de munition et l'arme avec laquelle ils sont tirés.</French>
<Hungarian>Ez a modul engedélyezi a fejlett ballisztikai szimulációt - a lövedékek röppályáját befolyásolni fogja a levegő hőmérséklete, légnyomás, páratartalom, gravitáció, a lövedék fajtája, valamint a fegyver, amiből kilőtték a lövedéket.</Hungarian>
<Russian>Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел.</Russian>
<Spanish>Este módulo permite la simulación balística avanzada - es decir, la trayectoria de los proyectiles está influenciada por variables como la temperatura del aire, la presión atmosférica, la humedad, la gravedad, el tipo de municiones y el arma desde el que fue disparada.</Spanish>

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="Aircraft">
<Key ID="STR_ACE_Aircraft_CMFlareLauncher_Burst_Name">
@ -7,7 +7,7 @@
<Spanish>Ráfaga</Spanish>
<Polish>Seria</Polish>
<Czech>Dávka</Czech>
<French>Contre mesure</French>
<French>Contre mesures</French>
<Russian>Очередь</Russian>
<Hungarian>Sorozat</Hungarian>
<Portuguese>Rajada</Portuguese>
@ -29,7 +29,7 @@
<English>Open Cargo Door</English>
<German>Laderampe öffnen</German>
<Spanish>Abrir compuerta de carga</Spanish>
<French>Ourvir la rampe</French>
<French>Ouvrir la rampe</French>
<Polish>Otwórz drzwi ładowni</Polish>
<Czech>Otevřít nákladní prostor</Czech>
<Hungarian>Rakodórámpa nyitása</Hungarian>

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="Attach">
<Key ID="STR_ACE_Attach_AttachDetach">
@ -90,7 +90,7 @@
<German>Leuchtstab befestigt</German>
<Spanish>Barra de luz acoplada</Spanish>
<Polish>Przyczepiono światło chemiczne</Polish>
<French>Chemlight attachée</French>
<French>Cyalume attachée</French>
<Czech>Chemické světlo připnuto</Czech>
<Portuguese>Chemlight Fixada</Portuguese>
<Italian>Chemlight attaccata</Italian>
@ -102,7 +102,7 @@
<German>Leuchtstab entfernt</German>
<Spanish>Barra de luz quitada</Spanish>
<Polish>Odczepiono światło chemiczne</Polish>
<French>Chemlight détachée</French>
<French>Cyalume détachée</French>
<Czech>Chemické světlo odepnuto</Czech>
<Portuguese>Chemlight Separada</Portuguese>
<Italian>Chemlight staccata</Italian>
@ -138,7 +138,7 @@
<German>Das IR-Stroboskop erlaubt es dir deine Position mit einem blinkenden Leuchtfeuer zu signalisieren, welches nur mit Nachtsichtgerät zu erkennen ist.</German>
<Polish>Stroboskop światła podczerwieni umożliwia oznaczenie swojej pozycji pulsacyjnym światłem widocznym tylko przez optykę noktowizyjną i gogle noktowizyjne.</Polish>
<Spanish>El Marcador IR permite señalizar su posisición a través de una baliza visible solo a través de dispositivos de visión nocturna. </Spanish>
<French>La balise IR permet de signaler votre position grace à un clignotement visible par des JVN.</French>
<French>La balise IR permet de signaler votre position grâce à un clignotement visible par des JVN.</French>
<Czech>IR Značkovač je Infračerveně zářící stroboskop umožňující signalizaci vaší pozice díky blikajícímu světlu, které je vidět pouze při užití noktovizoru.</Czech>
<Portuguese>O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna.</Portuguese>
<Italian>La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni.</Italian>
@ -206,4 +206,4 @@
<Russian>%1&lt;br/&gt;отсоединен(-а)</Russian>
</Key>
</Package>
</Project>
</Project>

View File

@ -5,7 +5,7 @@
<English>Take Prisoner</English>
<German>Gefangen nehmen</German>
<Spanish>Tomar prisionero</Spanish>
<French>Capturer le prisonnier</French>
<French>Prendre prisonnier</French>
<Polish>Aresztuj</Polish>
<Czech>Zajmout osobu</Czech>
<Italian>Arresta il prigioniero</Italian>
@ -54,7 +54,7 @@
<German>Du musst ihn zuerst gefangen nehmen.</German>
<Spanish>Necesitas hacerle prisionero primero!</Spanish>
<Polish>Najpierw musisz go aresztować!</Polish>
<French>Vous devez d'abord le capturer!</French>
<French>Vous devez d'abord le capturer !</French>
<Czech>Musíš ho nejdříve zajmout!</Czech>
<Italian>Prima devi arrestarlo!</Italian>
<Portuguese>Você deve tomá-lo como prisioneiro primeiro!</Portuguese>
@ -112,7 +112,7 @@
<Key ID="STR_ACE_Captives_FriskMenuHeader">
<English>Inventory of frisked person</English>
<German>Inventar der durchsuchten Person</German>
<French>Inventaire de la fouille</French>
<French>Inventaire de la personne fouillé</French>
<Spanish>Inventario de la persona cacheada</Spanish>
<Hungarian>Motozott személy felszerelése</Hungarian>
<Czech>Inventář prohledávané osoby</Czech>
@ -124,7 +124,7 @@
<Key ID="STR_ACE_Captives_FriskPerson">
<English>Frisk person</English>
<German>Person durchsuchen</German>
<French>Fouiller</French>
<French>Fouiller la personne</French>
<Spanish>Cachear</Spanish>
<Czech>Prohledávaná osoba</Czech>
<Polish>Rewiduj osobę</Polish>
@ -147,7 +147,7 @@
</Key>
<Key ID="STR_ACE_Captives_StopSurrendering">
<English>Stop Surrendering</English>
<French>Annuler la capitulation</French>
<French>Annuler la reddition</French>
<German>Den Kampf erneut aufnehmen</German>
<Spanish>Dejar de rendirse</Spanish>
<Portuguese>Parar de se render</Portuguese>
@ -201,6 +201,7 @@
<Czech>Synchronizovat s jednotkou, která má být v poutech.</Czech>
<Italian>Sincronizza un'unità per metterle le manette.</Italian>
<Spanish>Sincroniza una unidad para hacer que esté esposada.</Spanish>
<French>Synchronisez une unité pour la rendre captive.</French>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_DisplayName">
<English>Captives Settings</English>
@ -209,7 +210,7 @@
<Czech>Nastavení zajatce</Czech>
<German>Gefangenen-Einstellungen</German>
<Portuguese>Ajustes de prisioneiros</Portuguese>
<French>Options de capitulation</French>
<French>Options de reddition</French>
<Hungarian>Fogoly-beállítások</Hungarian>
<Russian>Настройки пленения</Russian>
<Italian>Impostazioni Prigionieri</Italian>
@ -221,7 +222,7 @@
<Czech>Toto kontroluje nastavení kapitulace a pout</Czech>
<German>Einstellungen zur Kapitulation und Kabelbindern</German>
<Portuguese>Controla as configurações de rendição e abraçadeiras</Portuguese>
<French>Contrôle les paramètres de la rédition et des Serflex</French>
<French>Contrôle les paramètres de la reddition et des Serflex</French>
<Hungarian>Szabályozza a kapituláció és bilincselés beállításait</Hungarian>
<Russian>Управляет настройками сдачи в плен и связывания</Russian>
<Italian>Controlla le impostazioni per la resa e le manette</Italian>
@ -233,7 +234,7 @@
<Czech>Může spoutat spolubojovníky</Czech>
<German>Kann Kameraden fesseln</German>
<Portuguese>Pode algemar o próprio lado</Portuguese>
<French>Peut libérer sa propre faction</French>
<French>Peut capturer sa propre faction</French>
<Hungarian>Saját oldal megbilincselhető</Hungarian>
<Russian>Связать союзника</Russian>
<Italian>Puoi ammanettare unità alleate</Italian>
@ -257,7 +258,7 @@
<Czech>Povolit vzdávání</Czech>
<German>Kapitulation erlauben</German>
<Portuguese>Permite rendição</Portuguese>
<French>Permettre la capitulation</French>
<French>Permettre la reddition</French>
<Hungarian>Kapituláció engedélyezése</Hungarian>
<Russian>Сдаться в плен</Russian>
<Italian>Permetti Resa</Italian>
@ -283,7 +284,7 @@
<Spanish>Requiere rendición</Spanish>
<Czech>Vzdávání vyžadováno</Czech>
<Italian>Richiedi Resa</Italian>
<French>Requiert la capitulation</French>
<French>Requiert la reddition</French>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrender_description">
<English>Require Players to surrender before they can be arrested</English>
@ -294,7 +295,7 @@
<Spanish>Requiere que los Jugadores se rindan antes de arrestarlos</Spanish>
<Czech>Vyžaduje, aby se hráč nejdříve vzdal, poté může být spoután</Czech>
<Italian>I giocatori devono arrendersi prima che possano essere arrestati</Italian>
<French>Requiert la capitulation des jouerus avant qu'ils puissent être arrêté</French>
<French>Requiert la capitulation des joueurs avant qu'ils ne puissent être arrêtés</French>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOnly">
<English>Surrendering only</English>
@ -305,7 +306,7 @@
<Spanish>Solo rendición</Spanish>
<Czech>Pouze vzdávání</Czech>
<Italian>Solo Resa</Italian>
<French>Capitulation seulement</French>
<French>Reddition seulement</French>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
<English>Surrendering or No weapon</English>
@ -316,7 +317,7 @@
<Spanish>Rendición o desarme</Spanish>
<Czech>Vzdávání nebo beze zbraně</Czech>
<Italian>Resa o senza armi</Italian>
<French>Surrendering or No weapon</French>
<French>Capitulation ou desarmé</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,3 +1,6 @@
class CBA_Extended_EventHandlers;
class CfgVehicles {
class Logic;
class Module_F: Logic {
@ -192,7 +195,7 @@ class CfgVehicles {
};
class Heli_Transport_02_base_F;
class I_Heli_Transport_02_F : Heli_Transport_02_base_F {
class I_Heli_Transport_02_F: Heli_Transport_02_base_F {
GVAR(space) = 20;
GVAR(hasCargo) = 1;
};
@ -284,14 +287,16 @@ class CfgVehicles {
GVAR(size) = 2;
};
class Scrapyard_base_F;
class Land_PaperBox_closed_F: Scrapyard_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 10;
GVAR(hasCargo) = 1;
GVAR(size) = 11;
GVAR(canLoad) = 1;
XEH_ENABLED;
class ACE_Actions {
class ACE_MainActions {
@ -323,163 +328,253 @@ class CfgVehicles {
};
};
class Cargo10_base_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 14;
GVAR(size) = 15;
XEH_ENABLED;
};
class Land_Cargo20_blue_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_brick_red_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_cyan_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_grey_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_light_blue_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_light_green_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_military_green_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Ruins_F;
class Land_Cargo20_military_ruins_F: Ruins_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_orange_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_red_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_sand_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_vr_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_white_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo20_yellow_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 49;
GVAR(size) = 50;
XEH_ENABLED;
};
class Land_Cargo40_blue_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_brick_red_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_cyan_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_grey_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_light_blue_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_light_green_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_military_green_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_military_ruins_F: Ruins_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_orange_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_red_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_sand_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_vr_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_white_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
class Land_Cargo40_yellow_F: Cargo_base_F {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 99;
GVAR(size) = 100;
XEH_ENABLED;
};
// small
class Land_CargoBox_V1_F: ThingX {
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(space) = 7;
GVAR(hasCargo) = 1;
GVAR(size) = 7;
XEH_ENABLED;
class ACE_Actions {
class ACE_MainActions {

View File

@ -10,6 +10,7 @@
<Czech>Naložit</Czech>
<Spanish>Cargar</Spanish>
<Italian>Carica</Italian>
<French>Charger</French>
</Key>
<Key ID="STR_ACE_Cargo_unloadObject">
<English>Unload</English>
@ -20,6 +21,7 @@
<Czech>Vyložit</Czech>
<Spanish>Descargar</Spanish>
<Italian>Scarica</Italian>
<French>Décharger</French>
</Key>
<Key ID="STR_ACE_Cargo_openMenu">
<English>Cargo</English>
@ -30,6 +32,7 @@
<Czech>Náklad</Czech>
<Spanish>Carga</Spanish>
<Italian>Cargo</Italian>
<French>Cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_cargoMenu">
<English>Cargo Menu</English>
@ -40,6 +43,7 @@
<Czech>Menu nákladu</Czech>
<Spanish>Menu de carga</Spanish>
<Italian>Menù Cargo</Italian>
<French>Menu de cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_labelSpace">
<English>Cargo space left: %1</English>
@ -50,6 +54,7 @@
<Czech>Zbývající prostor: %1</Czech>
<Spanish>Espacio de carga restante: %1</Spanish>
<Italian>Spazio cargo rimanente: %1</Italian>
<French>Espace de cargaison restant : %1</French>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable">
<English>Enable Cargo</English>
@ -60,6 +65,7 @@
<Czech>Povolit náklad</Czech>
<Spanish>Habilitar carga</Spanish>
<Italian>Abilita Cargo</Italian>
<French>Activer la cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_ModuleSettings_enable_Description">
<English>Enable the load in cargo module</English>
@ -70,6 +76,7 @@
<Spanish>Habilitar la carga en el módulo de carga</Spanish>
<Czech>Umožňuje naložit předměty do nákladového prostoru vozidla</Czech>
<Italian>Abilita il modulo di caricamento in cargo</Italian>
<French>Activer le chargement dans le module de cargaison.</French>
</Key>
<Key ID="STR_ACE_Cargo_SettingsModule_DisplayName">
<English>Cargo Settings</English>
@ -80,6 +87,7 @@
<Czech>Nastavení nákladu</Czech>
<Spanish>Ajustes de carga</Spanish>
<Italian>Impostazioni Cargo</Italian>
<French>Réglages de cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_SettingsModule_Description">
<English>Configure the cargo module settings</English>
@ -90,6 +98,7 @@
<Spanish>Configure los ajustes del módulo de carga</Spanish>
<Czech>Konfigurace nákladního modulu</Czech>
<Italian>Configura le impostazioni del modulo cargo</Italian>
<French>Configurer les réglages du module de cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_LoadedItem">
<English>%1&lt;br/&gt;loaded into&lt;br/&gt;%2</English>
@ -124,6 +133,7 @@
<Russian>Погрузка</Russian>
<Italian>Caricando</Italian>
<Spanish>Cargando</Spanish>
<French>Chargement de la cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_UnloadingItem">
<English>Unloading Cargo</English>
@ -134,6 +144,7 @@
<Russian>Выгрузка</Russian>
<Italian>Scaricando</Italian>
<Spanish>Descargando</Spanish>
<French>Déchargement de la cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_LoadingFailed">
<English>%1&lt;br/&gt;could not be loaded</English>
@ -144,6 +155,7 @@
<Russian>%1&lt;br/&gt;не может быть погружен</Russian>
<Italian>%1&lt;br/&gt;non può essere caricato</Italian>
<Spanish>%1&lt;br/&gt;no pudo ser cargado</Spanish>
<French>%1&lt;br /&gt; n'a pas pu être chargé</French>
</Key>
<Key ID="STR_ACE_Cargo_UnloadingFailed">
<English>%1&lt;br/&gt;could not be unloaded</English>
@ -154,6 +166,7 @@
<Russian>%1&lt;br/&gt;не может быть выгружен</Russian>
<Italian>%1&lt;br/&gt;non può essere scaricato</Italian>
<Spanish>%1&lt;br/&gt;no pudo ser descargado</Spanish>
<French>%1&lt;br /&gt; n'a pas pu être déchargé</French>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_displayName">
<English>Make Object Loadable</English>
@ -161,6 +174,7 @@
<Polish>Ustaw jako ładowalny</Polish>
<Italian>Rendi oggetto caricabile</Italian>
<Spanish>Hacer objeto cargable</Spanish>
<French>Rendre l'objet chargeable</French>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_description">
<English>Sets the synced object as loadable by the cargo system.</English>
@ -168,6 +182,7 @@
<Polish>Ustawia zsynchronizowany obiekt jako możliwy do załadowania poprzez system cargo</Polish>
<Italian>Imposta l'oggetto sincronizzato come caricabile dal sistema cargo</Italian>
<Spanish>Sincronizar un objecto para hacerlo cargable.</Spanish>
<French>Rend l'objet synchronisé comme chargeable par le système de cargaison.</French>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_setSize_displayName">
<English>Object's Size</English>
@ -175,6 +190,7 @@
<Polish>Rozmiar obiektu</Polish>
<Italian>Dimensioni dell'oggetto</Italian>
<Spanish>Tamaño del objeto</Spanish>
<French>Taille de l'objet</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -21,7 +21,7 @@ class Extended_PostInit_EventHandlers {
class Extended_DisplayLoad_EventHandlers {
class RscDisplayMission {
ADDON = QUOTE(_this call COMPILE_FILE(XEH_mainDislayLoad));
ADDON = QUOTE(_this call COMPILE_FILE(XEH_missionDisplayLoad));
};
};

View File

@ -1,6 +1,4 @@
#include "script_component.hpp"
GVAR(ScrollWheelFrame) = diag_frameno;
call COMPILE_FILE(init_handleScrollWheel);
call COMPILE_FILE(init_handleModifierKey);

View File

@ -12,11 +12,6 @@
*/
#include "script_component.hpp"
// prevents a bug that causes the MouseZChanged to trigger N-times, where N is the number of times you consecutively pressed "Restart" instead of "Preview" in the editor
if (GVAR(ScrollWheelFrame) == diag_frameno) exitWith {};
GVAR(ScrollWheelFrame) = diag_frameno;
{
[_this select 1] call _x;
false

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

@ -24,5 +24,15 @@ if (isNil {_logic getVariable _moduleVariable}) exitWith {
ACE_LOGWARNING_2("Warning in %1 module: %2 setting is missing. Probably an obsolete version of the module is used in the mission.",typeOf _logic,_moduleVariable);
};
private _value = _logic getVariable _moduleVariable;
if (_value isEqualTo -1) then {
//3den missions will save modules with value = 0 as -1
//If the setting has a "values" array, we should be able to assume that -1 is not a valid number as it would not be a valid index for the array
if (isArray (configFile >> "ACE_Settings" >> _settingName >> "values")) then {
ACE_LOGWARNING_2("Module For Setting [%1] is saved as (-1), switching to (0) - missionVersion [%2]",_settingName,missionVersion);
_value = 0;
};
};
// Set the setting globally and force it
[_settingName, _logic getVariable _moduleVariable, true, true] call FUNC(setSetting);
[_settingName, _value, true, true] call FUNC(setSetting);

View File

@ -512,7 +512,7 @@
<German>Was soll mit Leuten geschehen, die nicht die richtigen PBO-Dateien geladen haben?</German>
<Czech>Co udělat s lidmi, co nemají správné addony?</Czech>
<Portuguese>O que fazer com pessoas que não tem os PBOs corretos?</Portuguese>
<French>Que faire avec les personnes n'ayant pas les bon PBO ?</French>
<French>Que faire avec les personnes n'ayant pas les bons PBO ?</French>
<Hungarian>Mi legyen azokkal a személyekkel, akiknek nincsenek meg a helyes PBO-k?</Hungarian>
<Russian>Что делать с игроками с неправильными аддонами?</Russian>
<Italian>Cosa fare con giocatori che non hanno i PBO corretti?</Italian>
@ -596,7 +596,7 @@
<German>Welche Addons werden dennoch erlaubt?</German>
<Czech>Jaké addony jsou povoleny?</Czech>
<Portuguese>Quais addons são permitidos de qualquer maneira?</Portuguese>
<French>Quels addons sont tolérés</French>
<French>Quels addons sont tolérés ?</French>
<Hungarian>Milyen bővítmények vannak feltétlenül engedélyezve?</Hungarian>
<Russian>Какие аддоны дополнительно разрешены?</Russian>
<Italian>Quali addon sono permessi in ogni caso?</Italian>

View File

@ -1,11 +1,13 @@
class CBA_Extended_EventHandlers;
class CfgVehicles {
class Fence;
class ThingX;
class NonStrategic;
class ACE_ConcertinaWireNoGeo: Fence {
XEH_ENABLED;
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
scope = 1;
displayName = "";
model = PATHTOF(data\ACE_ConcertinaWireNoGeo.p3d);
@ -94,8 +96,13 @@ class CfgVehicles {
};
};
};
class ThingX;
class ACE_ConcertinaWireCoil: ThingX {
XEH_ENABLED;
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
scope = 2;
displayName = $STR_ACE_CONCERTINA_WIRECOIL;
model = PATHTOF(data\ACE_ConcertinaWireCoil.p3d);
@ -137,7 +144,10 @@ class CfgVehicles {
};
};
class NonStrategic;
class Land_Razorwire_F: NonStrategic {
XEH_ENABLED;
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
};
};

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="concertina_wire">
<Key ID="STR_ACE_CONCERTINA_WIRE">
@ -31,7 +31,7 @@
<Russian>Демонтировать колючую проволоку</Russian>
<Polish>Zwiń koncentrinę</Polish>
<Spanish>Desmontar alambre de espino</Spanish>
<French>Descendre le fil barbelé</French>
<French>Démonter le fil barbelé</French>
<Czech>Svinout ostnatý drát</Czech>
<Italian>Smonta la concertina</Italian>
<Hungarian>Dismount Concertina wire</Hungarian>

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="DAGR">
<Key ID="STR_ACE_DAGR_Name">
@ -10,6 +10,7 @@
<Portuguese>DAGR</Portuguese>
<Czech>DAGR</Czech>
<Italian>DAGR</Italian>
<French>DAGR</French>
</Key>
<Key ID="STR_ACE_DAGR_ConfigureDAGR">
<English>Configure DAGR</English>
@ -20,6 +21,7 @@
<Portuguese>Configurar DAGR</Portuguese>
<Czech>Konfigurovat DAGR</Czech>
<Italian>Configura DAGR</Italian>
<French>Configurer le DAGR</French>
</Key>
<Key ID="STR_ACE_DAGR_ToggleDAGR">
<English>Toggle DAGR</English>
@ -30,6 +32,7 @@
<Portuguese>Mostrar DAGR</Portuguese>
<Czech>Přepnout DAGR</Czech>
<Italian>Apri DAGR</Italian>
<French>Activer/Desactiver le DAGR</French>
</Key>
<Key ID="STR_ACE_DAGR_Description">
<English>Defense Advanced GPS Receiver</English>
@ -40,6 +43,7 @@
<Portuguese>Defense Advanced GPS Receiver</Portuguese>
<Czech>Defense Advanced GPS Receiver</Czech>
<Italian>Defense Advanced GPS Receiver</Italian>
<French>Defense Advanced GPS Receiver</French>
</Key>
</Package>
</Project>

View File

@ -1,4 +1,6 @@
class CBA_Extended_EventHandlers;
class CfgVehicles {
// Static weapons
class LandVehicle;
@ -85,7 +87,10 @@ class CfgVehicles {
// Barrier
class RoadCone_F: ThingX {
XEH_ENABLED;
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
GVAR(canCarry) = 1;
GVAR(carryPosition[]) = {0,1,1};
GVAR(carryDirection) = 0;

View File

@ -58,6 +58,7 @@
<Czech>Zvýšit/Snížit</Czech>
<Italian>Alza/Abbassa</Italian>
<Spanish>Subir/Bajar</Spanish>
<French>Lever/Baisser</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,3 +1,6 @@
class CBA_Extended_EventHandlers;
class CfgVehicles {
class Man;
class CAManBase: Man {
@ -37,7 +40,10 @@ class CfgVehicles {
class Items_base_F;
class ACE_DefuseObject: Items_base_F {
XEH_ENABLED;
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
author = "ACE";
_generalMacro = "ACE_DefuseObject";
displayName = "ACE Defuse Helper";
@ -66,7 +72,10 @@ class CfgVehicles {
};
};
class ACE_Explosives_Place: Items_base_F {
XEH_ENABLED;
class EventHandlers {
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
};
author = "ACE";
_generalMacro = "ACE_Explosives_Place";
displayName = "Multi-meter";

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

@ -45,6 +45,7 @@
<Czech>Odpálit VŠE</Czech>
<Polish>Detonuj wszystkie</Polish>
<Italian>Detona Tutti</Italian>
<French>Tout mettre à feu</French>
</Key>
<Key ID="STR_ACE_Explosives_DetonateCode">
<English>Explosive code: %1</English>
@ -90,6 +91,8 @@
<Czech>Blokováno</Czech>
<Polish>Zablokowany</Polish>
<Italian>Bloccato</Italian>
<German>Blockiert</German>
<French>Bloqué</French>
</Key>
<Key ID="STR_ACE_Explosives_CancelAction">
<English>Cancel</English>
@ -312,7 +315,7 @@
<German>"Zünden"-Menü</German>
<Spanish>Menú de detonación</Spanish>
<Polish>Menu detonacji</Polish>
<French>Menu de mise à feux</French>
<French>Menu de mise à feu</French>
<Czech>Menu detonace</Czech>
<Italian>Menù di detonazione</Italian>
<Hungarian>Robbantási menü</Hungarian>
@ -384,7 +387,7 @@
<German>Zeit einstellen</German>
<Spanish>Configurar tiempo</Spanish>
<Polish>Ustaw czas</Polish>
<French>Régler minuteur</French>
<French>Régler le minuteur</French>
<Czech>Nastavit čas</Czech>
<Italian>Modifica il conto alla rovescia</Italian>
<Hungarian>Idő beállítása</Hungarian>
@ -491,7 +494,7 @@
<English>No explosives on trigger.</English>
<German>Keine Sprengladungen auf diesem Auslöser.</German>
<Spanish>Ningún explosivo en el detonador.</Spanish>
<French>Pas d'explosif à mettre à feu.</French>
<French>Pas d'explosif à déclencher.</French>
<Italian>Nessun esplosivo</Italian>
<Czech>Žádná výbušnina k odpálení.</Czech>
<Hungarian>Nincs robbanóanyag a gyújtóeszközhöz kötve.</Hungarian>
@ -514,7 +517,7 @@
<Key ID="STR_ACE_Explosives_DeadManSwitch_description">
<English>Used to remotely trigger explosives when released.</English>
<German>Zündet Sprengladungen wenn losgelassen.</German>
<French>Déclenche la mise à feu d'un explosif lorsqu'il est libéré.</French>
<French>Déclenche la mise à feu d'un explosif lorsqu'il est relaché.</French>
<Czech>Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny</Czech>
<Polish>Używany w celu zdalnej detonacji ładunków, kiedy jego operator zostanie zabity.</Polish>
<Spanish>Utilizado para detonar explosivos remotamente al soltarlo.</Spanish>
@ -554,7 +557,7 @@
<German>Benötigt Sprengstoffexperten?</German>
<Czech>Vyžadovat specialistu?</Czech>
<Portuguese>Requer especialista?</Portuguese>
<French>Requiert un spécialiste?</French>
<French>Requiert un spécialiste ?</French>
<Hungarian>Specialisták igénylése?</Hungarian>
<Russian>Требуется специалист?</Russian>
<Italian>Richiedi specialisti?</Italian>
@ -566,7 +569,7 @@
<German>Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: Nein</German>
<Czech>Vyžadovat specialistu na zneškodnění výbušniny? Výchozí: Ne</Czech>
<Portuguese>Requer especialista em explosivos para desativar explosivos? Padrão: Não</Portuguese>
<French>Le désarmoçage d'explosif requiert un spécialiste? Défaut: non</French>
<French>Le désarmoçage d'explosif requiert un spécialiste ? Défaut : non</French>
<Hungarian>Szükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: Nem</Hungarian>
<Russian>Требуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет</Russian>
<Italian>Richiedi specialisti esplosivi per disabilitare esplosivi? Default: No</Italian>
@ -578,7 +581,7 @@
<German>Bestrafe Nicht-Sprengstoffexperten?</German>
<Czech>Potrestat, pokud není specialista?</Czech>
<Portuguese>Punir não especialistas?</Portuguese>
<French>Punir les non-spécialistes?</French>
<French>Punir les non-spécialistes ?</French>
<Hungarian>Nem-specialisták büntetése?</Hungarian>
<Russian>Штраф не-специалистам?</Russian>
<Italian>Punisci non-specialisti?</Italian>
@ -590,7 +593,7 @@
<German>Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: Ja</German>
<Czech>Zvýšit čas potřebný k dokončení akce pokud není specialista? Výchozí: Ano</Czech>
<Portuguese>Aumentar o tempo necessário para completar ações por não especialistas? Padrão: Sim</Portuguese>
<French>Augmenter le temps nécessaire au désarmoçage pour les non-spécialistes? Défaut: oui</French>
<French>Augmenter le temps nécessaire au désarmoçage pour les non-spécialistes ? Défaut : oui</French>
<Hungarian>Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen</Hungarian>
<Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian>
<Italian>Aumenta il tempo richiesto per completare azioni per non-specialisti? Default: Si</Italian>
@ -602,7 +605,7 @@
<Polish>Eksplozja przy rozbrajaniu?</Polish>
<Czech>Explodovat při zneškodňování?</Czech>
<Spanish>Explotar al desactivar?</Spanish>
<French>Explosion si désamorçage?</French>
<French>Explosion au désamorçage ?</French>
<Hungarian>Robbanás hatástalanításkor?</Hungarian>
<Russian>Взрыв при разминир.?</Russian>
<Italian>Fai esplodere quando disarmato?</Italian>
@ -614,7 +617,7 @@
<Polish>Spraw, aby niektóre ładunki wybuchowe eksplodowały przy próbie ich rozbrojenia? Domyślnie:Tak</Polish>
<Czech>Umožnit u některých výbušnin explozi při pokusu je zneškodnit? Výchozí: Ano</Czech>
<Spanish>¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí</Spanish>
<French>Permet à certains explosifs d'exploser au désamorçage? Défaut: oui</French>
<French>Permet à certains explosifs d'exploser au désamorçage ? Défaut : oui</French>
<Hungarian>Meghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: Igen</Hungarian>
<Russian>Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да</Russian>
<Italian>Abilita alcuni esplosivi per esplosione al disarmo? Default: Si</Italian>
@ -625,7 +628,7 @@
<German>Dieses Modul erlaubt die Einstellungen für Sprengstoffe zu verändern.</German>
<Czech>Tento modul umoňuje přizpůsobit nastavení týkajících se výbušnin.</Czech>
<Portuguese>Este módulo permite personalizar as definições relacionadas a explosivos.</Portuguese>
<French>Ce module ajuste les options relative aux explosifs</French>
<French>Ce module ajuste les paramètres liés aux explosifs.</French>
<Hungarian>Ez a modul a robbanóanyagokhoz kötött beállításokat szabályozza.</Hungarian>
<Russian>Этот модуль управляет настройками, связанными со взрывными устройствами</Russian>
<Spanish>Este módulo ajusta las configuraciones relacionadas con explosivos.</Spanish>
@ -643,6 +646,7 @@
<!-- <Spanish>Mina M6 SLAM</Spanish> -->
<Polish>Mina M6 SLAM (atak od dołu)</Polish>
<Spanish>Mina M6 SLAM (Ataque Inferior)</Spanish>
<French>Mine M6 SLAM (par le bas)</French>
</Key>
<Key ID="STR_ACE_Explosives_Module_SLAMSideAttack_DisplayName">
<English>M6 SLAM Mine (Side Attack)</English>
@ -656,6 +660,7 @@
<!-- <Spanish>Mina M6 SLAM</Spanish> -->
<Polish>Mina M6 SLAM (atak od boku)</Polish>
<Spanish>Mina M6 SLAM (Ataque Lateral)</Spanish>
<French>Mine M6 SLAM (de flanc)</French>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDUrbanBig_Range_DisplayName">
<English>Large IED (Urban, Pressure Plate)</English>
@ -669,6 +674,7 @@
<!-- <Spanish>IED grande (Urbano)</Spanish> -->
<Polish>Duży IED (miejski, płyta naciskowa)</Polish>
<Spanish>IED Grande (Urbano, Placa de presión)</Spanish>
<French>Grand EEI (Urbain, plaque de pression)</French>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDLandBig_Range_DisplayName">
<English>Large IED (Dug-in, Pressure Plate)</English>
@ -682,6 +688,7 @@
<!-- <Spanish>IED grande (Enterrado)</Spanish> -->
<Polish>Duży IED (zakopany, płyta naciskowa)</Polish>
<Spanish>IED Grande (Enterrado, Placa de presión)</Spanish>
<French>Grand EEI (Enterré, plaque de pression)</French>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDUrbanSmall_Range_DisplayName">
<English>Small IED (Urban, Pressure Plate)</English>
@ -695,6 +702,7 @@
<!-- <Spanish>IED pequeño (Urbano)</Spanish> -->
<Polish>Mały IED (miejski, płyta naciskowa)</Polish>
<Spanish>IED Pequeño (Urbano, Placa de presión)</Spanish>
<French>Petit EEI (Urbain, plaque de pression)</French>
</Key>
<Key ID="STR_ACE_Explosives_Module_IEDLandSmall_Range_DisplayName">
<English>Small IED (Dug-in, Pressure Plate)</English>
@ -708,6 +716,7 @@
<!-- <Spanish>IED pequeño (Enterrado)</Spanish> -->
<Polish>Mały IED (zakopany, płyta naciskowa)</Polish>
<Spanish>IED Pequeño (Enterrado, Placa de presión)</Spanish>
<French>Petit EEI (Enterré, plaque de pression)</French>
</Key>
<Key ID="STR_ACE_Explosives_connectInventoryExplosiveToDeadman">
<English>Connect to %1</English>
@ -722,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,19 @@
class CfgMovesBasic {
class DefaultDie;
class ManActions {
ACE_FastRoping = "ACE_FastRoping";
};
};
class CfgMovesMaleSdr: CfgMovesBasic {
class States {
class Crew;
class ACE_FastRoping: Crew {
file = QUOTE(PATHTOF(anim\fastroping.rtm));
interpolateTo[] = {"Unconscious", 1};
disableWeapons = 1;
disableWeaponsLong = 1;
canReload = 0;
};
};
};

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,22 @@
#include "script_component.hpp"
ADDON = false;
PREP(canCutRopes);
PREP(canDeployRopes);
PREP(canFastRope);
PREP(canPrepareFRIES);
PREP(checkVehicleThread);
PREP(cutRopes);
PREP(deployRopes);
PREP(equipFRIES);
PREP(fastRope);
PREP(fastRopeLocalPFH);
PREP(fastRopeServerPFH);
PREP(moduleEquipFRIES);
PREP(onCutCommon);
PREP(onPrepareCommon);
PREP(onRopeBreak);
PREP(prepareFRIES);
ADDON = true;

Binary file not shown.

View File

@ -5,13 +5,13 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author[]= {"Jonpas"};
authorUrl = "https://github.com/jonpas";
requiredAddons[] = {"ace_interaction"};
author[] = {"KoffeinFlummi", "BaerMitUmlaut"};
authorUrl = "";
VERSION_CONFIG;
};
};
#include "ACE_Settings.hpp"
#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,32 @@
/*
* 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 ["_config", "_enabled", "_deploymentStage"];
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
_enabled = getNumber (_config >> QGVAR(enabled));
_deploymentStage = _vehicle getVariable [QGVAR(deploymentStage), 0];
(driver _vehicle != _unit) &&
{getPos _vehicle select 2 > 2} &&
{_enabled == 1 || {_enabled == 2 && {!(isNull (_vehicle getVariable [QGVAR(FRIES), objNull]))}}} &&
{
(_deploymentStage == 0 && {getText (_config >> QGVAR(onPrepare)) == ""}) ||
{_deploymentStage == 2 && {getText (_config >> QGVAR(onPrepare)) != ""}}
}

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,25 @@
/*
* 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 _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,25 @@
/*
* Author: BaerMitUmlaut
* Checks if the given helicopter still exits, and if not, destroys the FRIES.
*
* Arguments:
* 0: The helicopter <OBJECT>
* 1: The helicopter's FRIES <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_vehicle, _fries] call ace_fastroping_fnc_checkVehicleThread
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle", "_fries"];
if (isNull _vehicle) then {
deleteVehicle _fries;
} else {
[FUNC(checkVehicleThread), _this, 5] call EFUNC(common,waitAndExecute);
};

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,40 @@
/*
* 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);
};
}];
[FUNC(checkVehicleThread), [_vehicle, _fries], 5] call EFUNC(common,waitAndExecute);
};
};

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,40 @@
/*
* 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_FastRoping") exitWith {
_unit disableCollisionWith _dummy;
_unit attachTo [_dummy, [0, 0, -1.45]];
[_unit, "ACE_FastRoping", 2] call EFUNC(common,doAnimation);
};
//End of fast rope
if (isNull attachedTo _unit) exitWith {
[_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_FastRoping") 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

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="finger">
<Key ID="STR_ACE_finger_indicatorForSelf_name">
<English>Show pointing indicator to self</English>
<German>Zeigersymbol einem selbst anzeigen</German>
<Russian>Индикатор пальца для показывающего</Russian>
<French>Afficher un indicateur de pointage pour soit même</French>
<French>Afficher un indicateur de pointage pour soi-même</French>
<Polish>Pokaż indykator wskazywania palcem dla siebie</Polish>
<Hungarian>Saját mutatási indikátor megjelenítése</Hungarian>
<Portuguese>Mostrar indicador para si mesmo</Portuguese>
@ -41,7 +41,7 @@
<English>Color of the pointing indicator circle</English>
<German>Farbe des Zeigersymbols</German>
<Russian>Цвет индикатора указания пальцем</Russian>
<French>Couleur de l'indicateur</French>
<French>Couleur de l'indicateur de pointage</French>
<Polish>Kolor okręgu wyświetlanego przy wskazywaniu palcem</Polish>
<Hungarian>Mutatási indikátor körének színe</Hungarian>
<Portuguese>Cor do círculo de indicação</Portuguese>
@ -53,7 +53,7 @@
<English>Action "point a finger at"</English>
<German>Aktion: "Zeige Finger auf"</German>
<Russian>Действие "показать пальцем на"</Russian>
<French>Action 'Pointer le doigt à"</French>
<French>Action 'Pointer du doigt"</French>
<Polish>Akcja "wskaż palcem"</Polish>
<Hungarian>Cselekvés "ujj rámutatása"</Hungarian>
<Portuguese>Ação "Apontar um dedo para"</Portuguese>
@ -76,7 +76,7 @@
<Key ID="STR_ACE_finger_moduleSettings_displayName">
<English>Pointing Settings</English>
<German>Zeigen Einstellungen</German>
<French>Option "Montrer du doigt"</French>
<French>Options "Montrer du doigt"</French>
<Polish>Ustawienia wskazywania palcem</Polish>
<Hungarian>Ujj beállításai</Hungarian>
<Portuguese>Preferências de apontamento</Portuguese>
@ -88,7 +88,7 @@
<Key ID="STR_ACE_finger_enabled_displayName">
<English>Pointing Enabled</English>
<German>Zeigen aktiviert</German>
<French>Activer "Montrer du doigt"</French>
<French>"Montrer du doigt" activé</French>
<Polish>Aktywuj wskazywanie</Polish>
<Hungarian>Mutatás engedélyezése</Hungarian>
<Portuguese>Apontamento ativado</Portuguese>

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="Flashlights">
<Key ID="STR_ACE_Flashlights_MX991_DisplayName">
@ -10,6 +10,7 @@
<Czech>Fulton MX-991</Czech>
<Spanish>Fulton MX-991</Spanish>
<Italian>Fulton MX-991</Italian>
<French>Fulton MX-991</French>
</Key>
<Key ID="STR_ACE_Flashlights_MX991_Description">
<English>Flashlight with red filter. For use on map.</English>
@ -20,6 +21,7 @@
<Czech>Svítilna s červeným filtrem. Pro nahlédnutí do mapy.</Czech>
<Spanish>Linterna con filtro rojo. Para su uso en el mapa.</Spanish>
<Italian>Torcia con filtro rosso. Da usare in mappa.</Italian>
<French>Lampe de poche avec un filtre rouge. Pour éclairer une carte.</French>
</Key>
<Key ID="STR_ACE_Flashlights_XL50_DisplayName">
<English>Maglite XL50</English>
@ -30,6 +32,7 @@
<Czech>Maglite XL50</Czech>
<Spanish>Maglite XL50</Spanish>
<Italian>Maglite XL50</Italian>
<French>Maglite XL50</French>
</Key>
<Key ID="STR_ACE_Flashlights_XL50_Description">
<English>White mini flashlight. For use on map.</English>
@ -40,6 +43,7 @@
<Czech>Bílá mini svítilna. Pro nahlédnutí do mapy.</Czech>
<Spanish>Mini linterna blanca. Para su uso en el mapa.</Spanish>
<Italian>Mini-torcia bianca. Da usare in mappa.</Italian>
<French>Lampe de poche (blanche). Pour éclairer une carte.</French>
</Key>
<Key ID="STR_ACE_Flashlights_KSF1_DisplayName">
<English>KSF-1</English>
@ -50,6 +54,7 @@
<Czech>KSF-1</Czech>
<Spanish>KSF-1</Spanish>
<Italian>KSF-1</Italian>
<French>KSF-1</French>
</Key>
<Key ID="STR_ACE_Flashlights_KSF1_Description">
<English>Flashlight with red filter. For use on map.</English>
@ -60,6 +65,7 @@
<Czech>Svítilna s červeným filtrem. Pro nahlédnutí do mapy.</Czech>
<Spanish>Linterna con filtro rojo. Para su uso en el mapa.</Spanish>
<Italian>Torcia con filtro rosso. Da usare in mappa.</Italian>
<French>Lampe de poche avec un filtre rouge. Pour éclairer une carte.</French>
</Key>
</Package>
</Project>

View File

@ -65,13 +65,17 @@
<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>
<French>Simulation de la réflection des explosions.</French>
</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>
<French>Activer la simulation de la réfléction des explosions ACE.</French>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack">
<English>Maximum Projectiles Tracked</English>
@ -92,7 +96,7 @@
<German>Diese Einstellung steuert die maximale Anzahl an Projektilen, die das Splitter- und Explosionssystem gleichzeitig verfolgen wird. Wenn mehr Projektile abgefeuert werden, werden sie nicht verfolgt werden. Diese Einstellung zu verringern, kann FPS-Einbrüche bei Szenarien mit vielen Projektilen verhindern (&gt;200 Objekte gleichzeitig in der Luft)</German>
<Czech>Toto nastavení kontroluje maximální množství projektilů z fragmentace a úlomků, která jsou sledována v dané době. Pokud je vystřeleno více projektilů, tak nebudou sledovány. Snižte toto nastavení pokud si nepřejete propady FPS v situacích, kde je velké množství projektilů ( &gt;200 nábojů najednou ve vzduchu)</Czech>
<Portuguese>Esta definição controla a quantidade máxima de projéteis que o sistema de fragmentação e estilhaçamento irá acompanhar em qualquer momento. Se mais projéteis são disparados, eles não serão rastreados. Diminua essa configuração se você não quiser que o FPS caia em cenários com alta contagem de projéteis (&gt; 200 projéteis no ar ao mesmo tempo)</Portuguese>
<French>Cette option controle le nombre maximum de projectile et d'éclat résultant de la fragmentation que le système suivra à un moment T. Si plus de projectiles sont générés, ils ne seront pas pris en compte. Baisser cette option si vous ne voulez pas de baisse de FPS en cas d'un nombre important de projectiles (&gt;200 éclats en même temps)</French>
<French>Cette option contrôle le nombre maximum de projectiles et d'éclats résultant de la fragmentation que le système suivra à un moment T. Si plus de projectiles sont générés, ils ne seront pas pris en compte. Baisser cette option si vous ne voulez pas de baisse de FPS en cas d'un nombre important de projectiles (&gt;200 éclats en même temps)</French>
<Hungarian>Ez a beállítás szabályozza a repeszeződés és pattogzás által kilőtt objektumok követett számát. Ha több ez a szám, ezek az objektumok nem lesznek követve. Csökkentsd ezt a beállítást, ha nem akarsz lassulásokat magas-törmelékmennyiségű helyzetekben (200+ repesz a levegőben egyszerre)</Hungarian>
<Russian>Эта настройка контролирует максимальное количество снарядов, которок отслеживает система осколков и обломков в каждый момент времени. Снаряды, выстреленные сверх этого числа, отслеживаться не будут. Уменьшите это значение, если вы не хотите падения FPS при большом количестве снарядов в одной перестрелке (&gt; 200 одновременно летящих снарядов)</Russian>
<Italian>Questo parametro controlla il numero massimo di proiettili che la frammentazione e il sistema di spalling tracciano in ogni momento. Se più proiettili sono sparati, non verranno tracciati. Abbassa questo parametro se non vuoi cali di FPS in scenari con molti proiettili (&gt;200 proiettili in aria contemporaneamente)</Italian>
@ -104,7 +108,7 @@
<Polish>Maks. liczba pocisków na klatkę</Polish>
<Czech>Maximální počet projektilů za jeden snímek</Czech>
<Portuguese>Projéteis máximos por quadro</Portuguese>
<French>Nombre maximal de projectile par image</French>
<French>Nombre maximal de projectiles par image</French>
<Hungarian>Maximum repesz/képkocka</Hungarian>
<Russian>Макс. количество снарядов за кадр</Russian>
<Italian>Numero massimo di proiettili per Frame</Italian>
@ -116,7 +120,7 @@
<Spanish>El número de cálculos de esquirlas que se hará en cualquier cuadro. Esto ayuda a dispersar el impacto en FPS del seguimiento de esquirlas de balas a través de múltiples cuadros, lo que limita aún más su impacto.</Spanish>
<Czech>Počet úlomků v daném snímku. Toto pomáhá rozšířit FPS dopad sledovaného úlomku napříč více snímky, omezuje jeho vliv ještě více.</Czech>
<Portuguese>O número de cálculos por estilhaço rastreado para executar em qualquer quadro. Isso ajuda a distribuir o impacto no FPS do rastreamento de estilhaço em vários quadros, o que limita o seu impacto ainda mais.</Portuguese>
<French>Le nombre d'éclat à calculer dans chaque images. Ceci permet de diffuser l'impact sur les FPS dans de multiples images, le limitant d'autant plus.</French>
<French>Le nombre d'éclats à calculer dans chaque image. Ceci permet de diffuser l'impact sur les FPS dans de multiples images, limitant la perte de FPS.</French>
<Hungarian>A lepattogzási útvonalak számításának darabjai képkockánként. Ez eloszlatja az FPS-megszakadást több képkockára, ezzel csökkentve a súlyosságát.</Hungarian>
<Russian>Число обрабатываемых осколков за кадр. Это позволяет распределить нагрузку по отслеживанию осколков между несколькими кадрами, чтобы предотвратить падение FPS.</Russian>
<Italian>Il numero di calcoli per tracciamento di spalling ad ogni frame. Questo aiuta a distribuire l'impatto del tracciamento dello spalling su più frame, limitando ancora di più l'impatto.</Italian>
@ -146,4 +150,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

@ -19,6 +19,6 @@ class Extended_PostInit_EventHandlers {
class Extended_DisplayLoad_EventHandlers {
class RscDisplayMission {
ADDON = QUOTE(_this call COMPILE_FILE(XEH_mainDislayLoad));
ADDON = QUOTE(_this call COMPILE_FILE(XEH_missionDisplayLoad));
};
};

View File

@ -4,9 +4,6 @@ disableSerialization;
params ["_display"];
// reload mutex, you can't play signal while reloading
GVAR(ReloadMutex) = true;
_display displayAddEventHandler ["KeyDown", {
if ((_this select 1) in actionKeys "ReloadMagazine") then {
if (isNull ACE_player || {!alive ACE_player}) exitWith {false};

View File

@ -2,4 +2,7 @@
if (!hasInterface) exitWith {};
// reload mutex, you can't play signal while reloading
GVAR(ReloadMutex) = true;
#include "key.sqf"

View File

@ -237,6 +237,7 @@
<Polish>Pokaż gesty w menu interakcji</Polish>
<Italian>Mostra Gesti su Menù Interazione</Italian>
<Spanish>Mostrar gestos en el menú de interacción</Spanish>
<French>Afficher les gestes au menu d'interaction.</French>
</Key>
<Key ID="STR_ACE_Gestures_showOnInteractionMenu_description">
<English>Show gestures on the self interaction menu, or just use keybinds, or disable completely</English>
@ -245,6 +246,7 @@
<Polish>Pokaż listę gestów w menu własnej interakcji, użyj tylko skrótów na klawiaturze lub wyłącz całkowicie</Polish>
<Italian>Mostra Gesti nel Menù Interazione Personale, o usa solamente Hotkey, o disabilita completamente</Italian>
<Spanish>Muestror los gestos en el menú de interacción propia, utilizar solo combinación de teclas o desactivarlos completamente</Spanish>
<French>Afficher les gestes dans le menu d'interaction personnel, ou seulement utiliser les touches, ou desactiver complètement.</French>
</Key>
<Key ID="STR_ACE_Gestures_justKeybinds">
<English>Just Keybinds</English>
@ -253,6 +255,7 @@
<Polish>Tylko skróty klaw.</Polish>
<Italian>Solo Hotkey</Italian>
<Spanish>Solo mediante teclas</Spanish>
<French>Seulement les touches</French>
</Key>
<Key ID="STR_ACE_Gestures_keysAndInteractionMenu">
<English>Keybinds + Interaction Menu</English>
@ -261,6 +264,7 @@
<Polish>Skróty klaw. + menu interakcji</Polish>
<Italian>Hotkey + Menù Interazione</Italian>
<Spanish>Teclas y Menú de Interacción</Spanish>
<French>Touches + menu d'interaction</French>
</Key>
</Package>
</Project>
</Project>

View File

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

View File

@ -1,20 +0,0 @@
class ACE_Settings {
class GVAR(Enabled) {
value = 0;
typeName = "BOOL";
displayName = ECSTRING(common,Enabled);
description = CSTRING(EnabledDesc);
};
class GVAR(Delay) {
value = DELAY_DEFAULT;
typeName = "SCALAR";
displayName = CSTRING(Delay);
description = CSTRING(DelayDesc);
};
class GVAR(Log) {
value = 0;
typeName = "BOOL";
displayName = CSTRING(Log);
description = CSTRING(LogDesc);
};
};

View File

@ -1,26 +0,0 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};
class Extended_InitPost_EventHandlers {
class AllVehicles {
class ADDON {
serverInit = QUOTE(_this call FUNC(handleInitPost));
};
};
};

View File

@ -1,37 +0,0 @@
class CfgVehicles {
class ACE_Module;
class GVAR(module): ACE_Module {
author = ECSTRING(common,ACETeam);
category = "ACE_missionModules";
displayName = CSTRING(Module);
function = QFUNC(moduleInit);
scope = 2;
isGlobal = 1; // Global
isTriggerActivated = 0;
isDisposable = 0;
icon = QUOTE(PATHTOF(UI\Icon_Module_Headless_ca.paa));
class Arguments {
class Enabled {
displayName = ECSTRING(common,Enabled);
description = CSTRING(EnabledDesc);
typeName = "BOOL";
defaultValue = 0;
};
class Delay {
displayName = CSTRING(Delay);
description = CSTRING(DelayDesc);
typeName = "NUMBER";
defaultValue = DELAY_DEFAULT;
};
class Log {
displayName = CSTRING(Log);
description = CSTRING(LogDesc);
typeName = "BOOL";
defaultValue = 0;
};
};
class ModuleDescription {
description = CSTRING(ModuleDesc);
};
};
};

View File

@ -1,16 +0,0 @@
ace_headless
============
Adds automatic passing of AI groups to (up to 3) Headless Clients.
- Automatic Headless Client recognition
- Event-based transferring (on unit spawn, Headless Client connect and disconnect)
- Round-robin transferring when more than 1 Headless Client is present
- Mission makers can use the following to prevent a group from transferring to a Headless Client:
`this setVariable ["ace_headless_blacklist", true, true];`
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [Jonpas](http://github.com/jonpas)

View File

@ -1,7 +0,0 @@
PREP(handleConnectHC);
PREP(handleDisconnect);
PREP(handleInitPost);
PREP(moduleInit);
PREP(rebalance);
PREP(transferGroups);

View File

@ -1,16 +0,0 @@
#include "script_component.hpp"
// Exit on player clients that are not hosts
if (hasInterface && !isServer) exitWith {};
["SettingsInitialized", {
if (isServer) then {
// Add disconnect EH if HC transferring enabled
if (GVAR(Enabled)) then {
addMissionEventHandler ["HandleDisconnect", {_this call FUNC(handleDisconnect)}];
};
} else {
// Register HC (this part happens on HC only)
["ACE_HeadlessClientJoined", [player]] call EFUNC(common,globalEvent);
};
}] call EFUNC(common,addEventHandler);

View File

@ -1,13 +0,0 @@
#include "script_component.hpp"
ADDON = false;
#include "XEH_PREP.hpp"
if (isServer) then {
GVAR(headlessClients) = [];
GVAR(inRebalance) = false;
["ACE_HeadlessClientJoined", FUNC(handleConnectHC)] call EFUNC(common,addEventHandler);
};
ADDON = true;

View File

@ -1,3 +0,0 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -1,36 +0,0 @@
/*
* Author: Jonpas
* Registers connected Headless Client for use.
*
* Arguments:
* 0: Headless Client <OBJECT>
*
* Return Value:
* None
*
* Example:
* [headlessClient] call ace_headless_handleConnectHC;
*
* Public: No
*/
#include "script_component.hpp"
params ["_headlessClient"];
// Delay until settings are initialized (for checking if HC trasnferring is enabled)
if (!EGVAR(common,settingsInitFinished)) exitWith {
EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(handleConnectHC), _this];
};
// Exit if HC transferring disabled or HC already registered
if (!GVAR(Enabled) || {_headlessClient in GVAR(headlessClients)}) exitWith {};
// Register for use
GVAR(headlessClients) pushBack _headlessClient;
if (GVAR(Log)) then {
ACE_LOGINFO_1("Registered HC: %1",_headlessClient);
};
// Rebalance
[true] call FUNC(rebalance);

View File

@ -1,34 +0,0 @@
/*
* Author: Jonpas
* Removes Headless Client from use.
*
* Arguments:
* 0: Object <OBJECT>
*
* Return Value:
* Transfer To Server <BOOL>
*
* Example:
* [unit] call ace_headless_handleDisconnect;
*
* Public: No
*/
#include "script_component.hpp"
params ["_object"];
// Exit if not HC
if !(_object in GVAR(headlessClients)) exitWith {};
// Remove HC
GVAR(headlessClients) deleteAt (GVAR(headlessClients) find _object);
if (GVAR(Log)) then {
ACE_LOGINFO_1("Removed HC: %1",_object);
};
// Rebalance
[true] call FUNC(rebalance);
// Prevent transferring of HC to server
false

View File

@ -1,31 +0,0 @@
/*
* Author: Jonpas
* Request a rebalance.
*
* Arguments:
* 0: Object <OBJECT>
*
* Return Value:
* None
*
* Example:
* [object] call ace_headless_handleInitPost;
*
* Public: No
*/
#include "script_component.hpp"
params ["_object"];
TRACE_1("InitPost",_object);
// Delay until settings are initialized (for checking if HC trasnferring is enabled)
if (!EGVAR(common,settingsInitFinished)) exitWith {
EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(handleInitPost), _this];
};
// Exit if HC transferring disabled or object not a unit (including unit inside vehicle) or is player
if (!GVAR(Enabled) || {!(_object in allUnits)} || {isPlayer _object}) exitWith {};
// Rebalance
[false] call FUNC(rebalance);

View File

@ -1,27 +0,0 @@
/*
* Author: Jonpas
* Initializes the Headless module.
*
* Arguments:
* 0: The module logic <LOGIC>
* 1: Units <ARRAY> (Unused)
* 2: Activated <BOOL>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
if (!isServer) exitWith {};
params ["_logic", "", "_activated"];
if (!_activated) exitWith {};
[_logic, QGVAR(Enabled), "Enabled"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(Delay), "Delay"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(Log), "Log"] call EFUNC(common,readSettingFromModule);
ACE_LOGINFO("Headless Module Initialized.");

View File

@ -1,29 +0,0 @@
/*
* Author: Jonpas
* Rebalance AI groups accross HCs.
*
* Arguments:
* 0: Force <BOOL>
*
* Return Value:
* None
*
* Example:
* [false] call ace_headless_rebalance;
*
* Public: No
*/
#include "script_component.hpp"
params ["_force"];
TRACE_3("Rebalance",GVAR(inRebalance),GVAR(headlessClients),_force);
// Exit if waiting for rebalance or no HCs present
if (GVAR(inRebalance) || {GVAR(headlessClients) isEqualTo []}) exitWith {};
// Transfer after rebalance delay
[FUNC(transferGroups), [_force], GVAR(Delay)] call EFUNC(common,waitAndExecute);
// Currently in rebalance flag
GVAR(inRebalance) = true;

View File

@ -1,144 +0,0 @@
/*
* Author: Jonpas
* Transfers AI groups to Headess Client(s).
*
* Arguments:
* 0: Force <BOOL>
*
* Return Value:
* None
*
* Example:
* [false] call ace_headless_fnc_transferGroups;
*
* Public: No
*/
#include "script_component.hpp"
params ["_force"];
GVAR(headlessClients) params [
["_HC1", objNull, [objNull] ],
["_HC2", objNull, [objNull] ],
["_HC3", objNull, [objNull] ]
];
if (GVAR(Log)) then {
ACE_LOGINFO_2("Present HCs: %1 - Full Rebalance: %2",GVAR(headlessClients),_force);
};
// Enable round-robin load balancing if more than one HC is present
private _loadBalance = [false, true] select (count GVAR(headlessClients) > 1);
// Get IDs and determine first HC to start with
private _idHC1 = -1;
private _idHC2 = -1;
private _idHC3 = -1;
private _currentHC = 0;
if (!local _HC1) then {
_idHC1 = owner _HC1;
_currentHC = 1;
};
if (!local _HC2) then {
_idHC2 = owner _HC2;
if (_currentHC == 0) then {
_currentHC = 2;
};
};
if (!local _HC3) then {
_idHC3 = owner _HC3;
if (_currentHC == 0) then {
_currentHC = 3;
};
};
// Prepare statistics
private _numTransferredHC1 = 0;
private _numTransferredHC2 = 0;
private _numTransferredHC3 = 0;
// Transfer AI groups
{
// No transfer if empty group
private _transfer = !(_x isEqualTo []);
if (_transfer) then {
{
// No transfer if already transferred
if (!_force && {(owner _x) in [_idHC1, _idHC2, _idHC3]}) exitWith {
_transfer = false;
};
// No transfer if player in this group
if (isPlayer _x) exitWith {
_transfer = false;
};
// No transfer if any unit in group is blacklisted
if (_x getVariable [QGVAR(blacklist), false]) exitWith {
_transfer = false;
};
// No transfer if vehicle unit is in or crew in that vehicle is blacklisted
if (vehicle _x != _x && {(vehicle _x) getVariable [QGVAR(blacklist), false]}) exitWith {
_transfer = false;
};
} forEach (units _x);
};
// Round robin between HCs if load balance enabled, else pass all to one HC
if (_transfer) then {
switch (_currentHC) do {
case 1: {
private _transferred = _x setGroupOwner _idHC1;
if (_loadBalance) then {
_currentHC = [3, 2] select (!local _HC2);
};
if (_transferred) then {
_numTransferredHC1 = _numTransferredHC1 + 1;
};
};
case 2: {
private _transferred = _x setGroupOwner _idHC2;
if (_loadBalance) then {
_currentHC = [1, 3] select (!local _HC3);
};
if (_transferred) then {
_numTransferredHC2 = _numTransferredHC2 + 1;
};
};
case 3: {
private _transferred = _x setGroupOwner _idHC3;
if (_loadBalance) then {
_currentHC = [2, 1] select (!local _HC1);
};
if (_transferred) then {
_numTransferredHC3 = _numTransferredHC3 + 1;
};
};
default {
TRACE_1("No Valid HC to transfer to",_currentHC);
};
};
};
} forEach allGroups;
if (GVAR(Log)) then {
private _numTransferredTotal = _numTransferredHC1 + _numTransferredHC2 + _numTransferredHC3;
ACE_LOGINFO_4("Groups Transferred: Total: %1 - HC1: %2 - HC2: %3 - HC3: %4",_numTransferredTotal,_numTransferredHC1,_numTransferredHC2,_numTransferredHC3);
};
// Allow rebalance flag
GVAR(inRebalance) = false;

View File

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

View File

@ -1,15 +0,0 @@
#define COMPONENT headless
#include "\z\ace\addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_HEADLESS
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_HEADLESS
#define DEBUG_SETTINGS DEBUG_SETTINGS_HEADLESS
#endif
#include "\z\ace\addons\main\script_macros.hpp"
#define DELAY_DEFAULT 15

View File

@ -1,54 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Headless">
<Key ID="STR_ACE_Headless_Module">
<English>Headless</English>
<German>Headless</German>
<Polish>Headless</Polish>
<Italian>Headless</Italian>
<Spanish>Headless</Spanish>
</Key>
<Key ID="STR_ACE_Headless_ModuleDesc">
<English>This module allows you to setup automatic transferring of AI to Headless Clients. (Default: No)</English>
<German>Dieses Modul erlaubt es dir, die KI automatisch auf einen Headless Client zu transferieren. (Standard: Nein) </German>
<Polish>Moduł ten pozwala ustawić automatyczne przenoszenie AI do Headless Clientów. (Domyślnie: Nie)</Polish>
<Italian>Questo modulo ti consente di impostare il trasferimento automatico di IA all'Headless Client (Default: No)</Italian>
<Spanish>Éste módulo permite activar la transferencia automática de IA al Headless Client. (Por defecto: No)</Spanish>
</Key>
<Key ID="STR_ACE_Headless_EnabledDesc">
<English>Enables transferring of AI to Headless Clients.</English>
<German>Aktiviert den Transfer der KI auf Headless Clients.</German>
<Polish>Aktywuje przenoszenie AI do Headless Clientów</Polish>
<Italian>Abilita trasferimento di IA a Headless Client</Italian>
<Spanish>Habilita la transferencia de IA al Headless Client.</Spanish>
</Key>
<Key ID="STR_ACE_Headless_Delay">
<English>Delay</English>
<German>Verzögerung</German>
<Polish>Opóźnienie</Polish>
<Italian>Ritardo</Italian>
<Spanish>Retardo</Spanish>
</Key>
<Key ID="STR_ACE_Headless_DelayDesc">
<English>Minimal delay between transfers, in seconds. (Default: 15)</English>
<German>Minimale Verzögerung zwischen Transfers in Sekunden. (Standard: 15)</German>
<Polish>Minimalne opóźnienie w sekundach pomiędzy transferami. (Domyślnie: 15)</Polish>
<Italian>Ritardo minimo tra trasferimenti, in secondi. (Default: 15)</Italian>
<Spanish>Retardo mínimo entre transferencias, en segundos (Por defecto: 15)</Spanish>
</Key>
<Key ID="STR_ACE_Headless_Log">
<English>Log</English>
<German>Protokolldatei anlegen</German>
<Polish>Dziennik</Polish>
<Italian>Log</Italian>
<Spanish>Registro</Spanish>
</Key>
<Key ID="STR_ACE_Headless_LogDesc">
<English>Log transfer statistics and Headless Client (dis)connections to RPT. (Default: No)</English>
<German>Zeichnet Transferstatistiken, Verbindungen und Verbindungsabbrüche in einer RPT-Datei auf. (Standard: Nein)</German>
<Polish>Zapisuj statystyki transferów oraz status Headless Clienta do RPT. (Domyślnie: Nie)</Polish>
<Italian>Logga statistiche trasferimenti e (dis)connessioni di Headless Client su RPT. (Default: No)</Italian>
<Spanish>Registrar transferencias y (des)conexiones del Headless Client en el RPT. (Por defecto: No)</Spanish>
</Key>
</Package>
</Project>

View File

@ -20,7 +20,7 @@
<Polish>Stopery do uszu umożliwiają użytkownikowi przebywać w pobliżu głośnej broni bez poniesienia konsekwencji jaką jest utrata słuchu.</Polish>
<Czech>Ochranné špunty umožňují uživateli, aby neutrpěl zranění jeho sluchu v blízkosti hlasitých zbraní.</Czech>
<Russian>Беруши позволяют носителю находиться возле громкого вооружения без потери слуха.</Russian>
<French>Bouchons Anti-Bruits pour la prévention des traumatismes sonores aigus.</French>
<French>Bouchons Anti-Bruits pour la prévention des traumatismes sonores aigüs.</French>
<Hungarian>Erősebb hanghatásoktól védő füldugó, megakadályozza a nagy hanggal járó fegyverzettől való halláskárosodást.</Hungarian>
<Portuguese>Protetor para ouvidos permitem que o usuário esteja próximo a ruídos sem danificar sua audição.</Portuguese>
<Italian>Proteggono l'apparato uditivo, permettendo a chi li indossa di resistere ai suoni particolarmente forti senza alcun danno.</Italian>
@ -114,6 +114,7 @@
<German>Deaktiviert Ohrklingeln wenn der Spieler Hörschäden davonträgt.</German>
<Spanish>Desactiva el efecto de zumbido cuando el jugador recibe daño auditivo.</Spanish>
<Polish>Usuń szum w uszach przy chwilowej utracie słuchu.</Polish>
<French>Enlève les acouphènes quand le joueur prend des dommages auditifs.</French>
</Key>
<Key ID="STR_ACE_Hearing_Module_DisplayName">
<English>Hearing</English>
@ -134,7 +135,7 @@
<German>Aktiviere Taubheit im Gefecht?</German>
<Czech>Povolit ztrátu sluchu?</Czech>
<Portuguese>Ativar surdez em combate?</Portuguese>
<French>Activer la surdité au combat?</French>
<French>Activer la surdité au combat</French>
<Hungarian>Harci süketség engedélyezése?</Hungarian>
<Russian>Оглушение</Russian>
<Italian>Sordità da combattimento</Italian>
@ -148,6 +149,7 @@
<Portuguese>Ativar surdez em combate?</Portuguese>
<Russian>Уменьшает возможность игрока слышать звуки при повреждении органов слуха</Russian>
<Italian>Riduci l'abilità uditiva quando il giocatore riceve danno uditivo</Italian>
<French>Réduire l'audition lorsque le joueur prend des dommages auditifs.</French>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<English>Controls combat deafness and ear ringing. When activated, players can be deafened when a gun is fired in their vicinity or an explosion takes place without hearing protection</English>
@ -170,6 +172,7 @@
<Spanish>Efecto Zeus RC</Spanish>
<Czech>Vliv na Zeus RC</Czech>
<Italian>Effetto Zeus RC</Italian>
<French>Effets Zeus RC</French>
</Key>
<Key ID="STR_ACE_Hearing_enabledForZeusUnits_Description">
<English>Allow zeus remote controlled units to be able to take hearing damage.</English>
@ -180,6 +183,7 @@
<Spanish>Permitir a las unidades por control remoto de zeus que puedan tener daños auditivos.</Spanish>
<Czech>Aktivovat efekt ztráty sluchu pro vzdáleně ovládané jednotky.</Czech>
<Italian>Consenti alle unità controllate in remoto da Zeus di ricevere danni all'udito.</Italian>
<French>Autoriser le Zeus contrôlé à distance de prendre des dommages auditifs.</French>
</Key>
<Key ID="STR_ACE_Hearing_autoAddEarplugsToUnits_DisplayName">
<English>Add earplugs to units</English>
@ -190,6 +194,7 @@
<Czech>Přidat špunty jednotce</Czech>
<Italian>Aggiungi Tappi per Orecchie alle unità</Italian>
<Spanish>Agregar tapones de oida a la unidad</Spanish>
<French>Ajouter des bouchons anti-bruits aux unités.</French>
</Key>
<Key ID="STR_ACE_Hearing_autoAddEarplugsToUnits_Description">
<English>Add the `ACE_EarPlugs` item to all units that have loud weapons. Can disable if using custom loadouts.</English>
@ -200,6 +205,7 @@
<Czech>Přidat `ACE_EarPlugs` všem jednotkám které mají zbraň. Můžete vypnout, pokud používáte vlastní výbavu.</Czech>
<Italian>Aggiungi l'oggetto 'ACE_EarPlugs' a tutte le unità che hanno armi rumorose. Può essere disabilitato se vengono usati loadout personalizzati.</Italian>
<Spanish>Agregar el item `ACE_EarPlugs` a todas las unidades equipadas con armas muy ruidosas. Desactivar si quieren utilizarse equipamientos personalizados.</Spanish>
<French>Ajouter l'item "ACE_EarPlugs" à toutes les unités qui ont des armes lourdes. Peut être desactivé si des équipements personnels sont utilisés.</French>
</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);

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