Merge branch 'master' of github.com:KoffeinFlummi/ACE3 into fix3317

Conflicts:
	addons/medical/CfgEden.hpp
	addons/repair/CfgEden.hpp
This commit is contained in:
esteldunedain 2016-02-27 08:48:57 -03:00
commit db4974eae2
165 changed files with 2525 additions and 614 deletions

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">
@ -307,11 +307,11 @@
<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é 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>
<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>
<Italian>Questo modulo abilita la simulazione della Balistica Avanzata - cioè la traiettoria dei proiettili è influenzata da variabili come la temperatura dell'aria, pressione atmosferica, umidità, gravità, il tipo di munizione e l'arma da cui è sparata</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="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>Contremesure</French>
<Russian>Очередь</Russian>
<Hungarian>Sorozat</Hungarian>
<Portuguese>Rajada</Portuguese>
@ -50,4 +50,4 @@
<Portuguese>Fechar porta de carga</Portuguese>
</Key>
</Package>
</Project>
</Project>

View File

@ -8,7 +8,7 @@ class Cfg3DEN {
control = "Checkbox";
displayName = CSTRING(ModuleHandcuffed_DisplayName);
tooltip = CSTRING(ModuleHandcuffed_Description);
expression = QUOTE([ARR_2(_this,_value)]call FUNC(setHandcuffed));
expression = QUOTE(if (_value) then {[ARR_3(objNull,[_this],true)] call FUNC(moduleHandcuffed)});
typeName = "BOOL";
condition = "objectBrain";
defaultValue = false;
@ -18,7 +18,7 @@ class Cfg3DEN {
control = "Checkbox";
displayName = CSTRING(ModuleSurrender_DisplayName);
tooltip = CSTRING(ModuleSurrender_Description);
expression = QUOTE([ARR_2(_this,_value)]call FUNC(setSurrendered));
expression = QUOTE(if (_value) then {[ARR_3(objNull,[_this],true)] call FUNC(moduleSurrender)});
typeName = "BOOL";
condition = "objectBrain";
defaultValue = false;

View File

@ -1,6 +1,7 @@
/*
* Author: PabstMirror
* Module Function to make a unit handcuffed (can be called from editor)
* Also used for threeden attribute expression with dummy Logic Object
*
* Arguments:
* 0: The Module Logic <OBJECT>
@ -11,7 +12,7 @@
* Nothing
*
* Example:
* Called from module
* [objNull, [player], true] call ace_captives_fnc_moduleHandcuffed
*
* Public: No
*/
@ -28,8 +29,11 @@ if (!isServer) exitWith {};
[{
params ["_units"];
{
TRACE_2("event",_x,local _x);
["SetHandcuffed", [_x], [_x, true]] call EFUNC(common,targetEvent);
} forEach _units;
}, [_units], 0.05] call EFUNC(common,waitAndExecute);
deleteVehicle _logic;
if (!isNull _logic) then {
deleteVehicle _logic;
};

View File

@ -1,6 +1,7 @@
/*
* Author: PabstMirror
* Module Function to make a unit surrender (can be called from editor)
* Also used for threeden attribute expression with dummy Logic Object
*
* Arguments:
* 0: The Module Logic <OBJECT>
@ -11,7 +12,7 @@
* Nothing
*
* Example:
* Called from module
* [objNull, [player], true] call ace_captives_fnc_moduleSurrender
*
* Public: No
*/
@ -28,8 +29,11 @@ if (!isServer) exitWith {};
[{
params ["_units"];
{
TRACE_2("event",_x,local _x);
["SetSurrendered", [_x], [_x, true]] call EFUNC(common,targetEvent);
} forEach _units;
}, [_units], 0.05] call EFUNC(common,waitAndExecute);
deleteVehicle _logic;
if (!isNull _logic) then {
deleteVehicle _logic;
};

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="Captives">
<Key ID="STR_ACE_Captives_SetCaptive">
<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>
@ -170,16 +170,16 @@
<Italian>Fai arrendere l'unità</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
<Polish>Zsynchronizuj z jednostką, aby skapitulowała.&lt;br /&gt;Źródło: ace_captives</Polish>
<Spanish>Sincroniza una unidad para hacer que se rinda.&lt;br /&gt;Fuente: ace_captives</Spanish>
<German>Einheit synchronisieren, um sie kapitulieren zu lassen.&lt;br /&gt;Quelle: ace_captives</German>
<Czech>Synchronizuj s jednotkou, která se má vzdát.&lt;br /&gt;Zdroj: ace_captives</Czech>
<Portuguese>Sincroniza uma unidade para fazer com que ela se renda. &lt;br/&gt;Fonte: ace_captives</Portuguese>
<French>Synchronise une unité pour la rendre captive. &lt;br/&gt;Source: ace_captives</French>
<Hungarian>Egység szinkronizálása, hogy kapituláljon.&lt;br /&gt;Forrás: ace_captives</Hungarian>
<Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться в плен.&lt;br /&gt;Источник: ace_captives</Russian>
<Italian>Sincronizza una unità per farla arrendere.&lt;br/&gt;Fonte: ace_captives</Italian>
<English>Sync a unit to make them surrender.</English>
<Polish>Zsynchronizuj z jednostką, aby skapitulowała.</Polish>
<Spanish>Sincroniza una unidad para hacer que se rinda.</Spanish>
<German>Einheit synchronisieren, um sie kapitulieren zu lassen.</German>
<Czech>Synchronizuj s jednotkou, která se má vzdát.</Czech>
<Portuguese>Sincroniza uma unidade para fazer com que ela se renda.</Portuguese>
<French>Synchronise une unité pour la rendre captive.</French>
<Hungarian>Egység szinkronizálása, hogy kapituláljon.</Hungarian>
<Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться в плен.</Russian>
<Italian>Sincronizza una unità per farla arrendere.</Italian>
</Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_DisplayName">
<English>Make Unit Handcuffed</English>
@ -189,15 +189,19 @@
<Russian>Связать юнита</Russian>
<Czech>Spoutat jednotku</Czech>
<Italian>Metti manette all'unità</Italian>
<Spanish>Hacer que la unidad esté esposada</Spanish>
<French>Rend une unité captive</French>
</Key>
<Key ID="STR_ACE_Captives_ModuleHandcuffed_Description">
<English>Sync a unit to make them handcuffed.&lt;br /&gt;Source: ace_captives</English>
<German>Synchronisiere eine Einheit um sie in Handschellen zu legen.&lt;br /&gt;Quelle: ace_captives</German>
<Polish>Zsynchronizuj z jednostką, aby została skuta.&lt;br /&gt;Źródło: ace_captives</Polish>
<Portuguese>Sincronizar uma unidade para deixá-la algemada.&lt;br/&gt;Source: ace_captives</Portuguese>
<Russian>Синхронизируйте с юнитами, чтобы сделать их связанными.&lt;br /&gt;Источник: ace_captives</Russian>
<Czech>Synchronizovat s jednotkou, která má být v poutech.&lt;br /&gt;Zdroj: ace_captives</Czech>
<Italian>Sincronizza un'unità per metterle le manette.&lt;br/&gt;Fonte: ace_captives</Italian>
<English>Sync a unit to make them handcuffed.</English>
<German>Synchronisiere eine Einheit um sie in Handschellen zu legen.</German>
<Polish>Zsynchronizuj z jednostką, aby została skuta.</Polish>
<Portuguese>Sincronizar uma unidade para deixá-la algemada.</Portuguese>
<Russian>Синхронизируйте с юнитами, чтобы сделать их связанными.</Russian>
<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>Synchronise une unité pour la rendre captive.</French>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_DisplayName">
<English>Captives Settings</English>
@ -206,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>
@ -218,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>
@ -230,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 menotter sa propre faction</French>
<Hungarian>Saját oldal megbilincselhető</Hungarian>
<Russian>Связать союзника</Russian>
<Italian>Puoi ammanettare unità alleate</Italian>
@ -254,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>
@ -280,6 +284,7 @@
<Spanish>Requiere rendición</Spanish>
<Czech>Vzdávání vyžadováno</Czech>
<Italian>Richiedi Resa</Italian>
<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>
@ -290,6 +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 reddition des joueurs avant qu'ils ne puissent être arrêtés</French>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOnly">
<English>Surrendering only</English>
@ -300,6 +306,7 @@
<Spanish>Solo rendición</Spanish>
<Czech>Pouze vzdávání</Czech>
<Italian>Solo Resa</Italian>
<French>Reddition seulement</French>
</Key>
<Key ID="STR_ACE_Captives_SurrenderOrNoWeapon">
<English>Surrendering or No weapon</English>
@ -310,6 +317,7 @@
<Spanish>Rendición o desarme</Spanish>
<Czech>Vzdávání nebo beze zbraně</Czech>
<Italian>Resa o senza armi</Italian>
<French>Reddition ou désarmement</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -3,7 +3,7 @@
["AddCargoByClass", {_this call FUNC(addCargoItem)}] call EFUNC(common,addEventHandler);
["LoadCargo", {
(_this select 0) params ["_item","_vehicle"];
params ["_item", "_vehicle"];
TRACE_2("LoadCargo EH",_item,_vehicle);
private _loaded = [_item, _vehicle] call FUNC(loadItem);
@ -22,9 +22,9 @@
}] call EFUNC(common,addEventHandler);
["UnloadCargo", {
(_this select 0) params ["_item","_vehicle", ["_unloader", objNull]];
params ["_item", "_vehicle", ["_unloader", objNull]];
TRACE_3("UnloadCargo EH",_item,_vehicle,_unloader);
private _unloaded = [_item, _vehicle, _unloader] call FUNC(unloadItem); //returns true if sucessful
private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
@ -43,3 +43,10 @@
// TOOO maybe drag/carry the unloaded item?
}] call EFUNC(common,addEventHandler);
["ServerUnloadCargo", {
params ["_item", "_emptyPosAGL"];
_item hideObjectGlobal false;
_item setPosASL (AGLtoASL _emptyPosAGL);
}] call EFUNC(common,addEventHandler);

View File

@ -37,7 +37,13 @@ private _return = false;
if ([_object, _vehicle] call FUNC(canLoadItemIn)) then {
private _size = [_object] call FUNC(getSizeItem);
[5 * _size, [_object,_vehicle], "LoadCargo", {}, localize LSTRING(LoadingItem)] call EFUNC(common,progressBar);
[
5 * _size,
[_object,_vehicle],
{["LoadCargo", _this select 0] call EFUNC(common,localEvent)},
{},
localize LSTRING(LoadingItem)
] call EFUNC(common,progressBar);
_return = true;
} else {
private _displayName = getText (configFile >> "CfgVehicles" >> typeOf _object >> "displayName");

View File

@ -34,7 +34,15 @@ private _item = _loaded select _selected; //This can be an object or a classname
if ([_item, GVAR(interactionVehicle), ACE_player] call FUNC(canUnloadItem)) then {
private _size = [_item] call FUNC(getSizeItem);
[5 * _size, [_item, GVAR(interactionVehicle), ACE_player], "UnloadCargo", {}, localize LSTRING(UnloadingItem), {true}, ["isNotSwimming"]] call EFUNC(common,progressBar);
[
5 * _size,
[_item, GVAR(interactionVehicle), ACE_player],
{["UnloadCargo", _this select 0] call EFUNC(common,localEvent)},
{},
localize LSTRING(UnloadingItem),
{true},
["isNotSwimming"]
] call EFUNC(common,progressBar);
} else {
private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
private _displayName = getText (configFile >> "CfgVehicles" >> _itemClass >> "displayName");

View File

@ -50,8 +50,9 @@ _vehicle setVariable [QGVAR(space), (_space + _itemSize), true];
if (_item isEqualType objNull) then {
detach _item;
_item setPosASL (AGLtoASL _emptyPosAGL);
["hideObjectGlobal", [_item, false]] call EFUNC(common,serverEvent);
// hideObjectGlobal must be executed before setPos to ensure light objects are rendered correctly
// do both on server to ensure they are executed in the correct order
["ServerUnloadCargo", [_item, _emptyPosAGL]] call EFUNC(common,serverEvent);
} else {
private _newItem = createVehicle [_item, _emptyPosAGL, [], 0, ""];
_newItem setPosASL (AGLtoASL _emptyPosAGL);

View File

@ -33,7 +33,7 @@ class GVAR(menu) {
w = "13 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_LEFT + ST_SHADOW;
font = "PuristaMedium";
font = "RobotoCondensed";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
colorText[] = {0.95, 0.95, 0.95, 0.75};
colorBackground[] = {"(profilenamespace getVariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getVariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getVariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
@ -67,7 +67,7 @@ class GVAR(menu) {
colorSelectBackground[] = {0.3, 0.3, 0.3, 1.0};
colorSelectBackground2[] = {0.3, 0.3, 0.3, 1.0};
};
class btnUnload: ACE_gui_buttonBase {
class btnCancel: ACE_gui_buttonBase {
text = "Cancel";
idc = 11;
x = "13.1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
@ -93,7 +93,7 @@ class GVAR(menu) {
periodOver = 1;
action = QUOTE(closeDialog 0);
};
class btnCancel: btnUnload {
class btnUnload: btnCancel {
text = CSTRING(unloadObject);
idc = 12;
x = "20.9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";

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="Cargo">
<Key ID="STR_ACE_Cargo_loadObject">
@ -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 mise en 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>Active</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>Options 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>Configure les options du module de cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_LoadedItem">
<English>%1&lt;br/&gt;loaded into&lt;br/&gt;%2</English>
@ -123,6 +132,8 @@
<Czech>Nakládám</Czech>
<Russian>Погрузка</Russian>
<Italian>Caricando</Italian>
<Spanish>Cargando</Spanish>
<French>Chargement cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_UnloadingItem">
<English>Unloading Cargo</English>
@ -132,6 +143,8 @@
<Czech>Vykládám</Czech>
<Russian>Выгрузка</Russian>
<Italian>Scaricando</Italian>
<Spanish>Descargando</Spanish>
<French>Déchargement cargaison</French>
</Key>
<Key ID="STR_ACE_Cargo_LoadingFailed">
<English>%1&lt;br/&gt;could not be loaded</English>
@ -141,6 +154,8 @@
<Czech>%1&lt;br/&gt;nemůže být naloženo</Czech>
<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;ne peut être chargé</French>
</Key>
<Key ID="STR_ACE_Cargo_UnloadingFailed">
<English>%1&lt;br/&gt;could not be unloaded</English>
@ -150,24 +165,32 @@
<Czech>%1&lt;br/&gt;nemůže být vyloženo</Czech>
<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;ne peut être déchargé</French>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_displayName">
<English>Make Object Loadable</English>
<German>Füge Objekt zum Frachtsystem hinzu</German>
<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>
<German>Das synchronisierte Objekt wird dem Frachtsystem hinzugefügt und ist be- und entladbar.</German>
<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é chargeable par le système de cargaison.</French>
</Key>
<Key ID="STR_ACE_Cargo_makeLoadable_setSize_displayName">
<English>Object's Size</English>
<German>Objektgröße</German>
<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

@ -5,7 +5,7 @@ class CfgLocationTypes {
class ACE_HashLocation {
color[] = {0,0,0,0};
drawStyle = "bananas";
font = "PuristaMedium";
font = "RobotoCondensed";
importance = 5;
name = "HashLocation";
shadow = 0;

View File

@ -25,7 +25,7 @@ class RscTitles {
y = safeZoneY + 0.2 * safezoneH;
w = 0.2 * safeZoneW;
h = 0.1 * SafeZoneH;
font = "PuristaMedium";
font = "RobotoCondensed";
};
};
};

View File

@ -225,7 +225,6 @@ PREP(binocularMagazine);
PREP(removeBinocularMagazine);
// ACE_Debug
PREP(exportConfig);
PREP(getChildren);
PREP(getDisplayConfigName);
PREP(monitor);
@ -234,13 +233,10 @@ PREP(showUser);
PREP(dumpPerformanceCounters);
PREP(dumpArray);
// ACE_CuratorFix
PREP(addCuratorUnloadEventhandler);
PREP(fixCrateContent);
PREP(globalEvent);
PREP(_handleNetEvent);
PREP(addEventHandler);
PREP(objectEvent);
PREP(targetEvent);
PREP(serverEvent);
PREP(localEvent);

View File

@ -149,6 +149,9 @@ if (isServer) then {
["setSpeaker", {(_this select 0) setSpeaker (_this select 1)}] call FUNC(addEventhandler);
["selectLeader", {(_this select 0) selectLeader (_this select 1)}] call FUNC(addEventHandler);
["setVelocity", {(_this select 0) setVelocity (_this select 1)}] call FUNC(addEventHandler);
["playMove", {(_this select 0) playMove (_this select 1)}] call FUNC(addEventHandler);
["playMoveNow", {(_this select 0) playMoveNow (_this select 1)}] call FUNC(addEventHandler);
["switchMove", {(_this select 0) switchMove (_this select 1)}] call FUNC(addEventHandler);
if (isServer) then {
["hideObjectGlobal", {(_this select 0) hideObjectGlobal (_this select 1)}] call FUNC(addEventHandler);

View File

@ -80,7 +80,7 @@
// Listbox styles
#define LB_TEXTURES 0x10
#define LB_MULTI 0x20
#define FontCSE "PuristaMedium"
#define FONT_ACE "RobotoCondensed"
class ACE_gui_backgroundBase {
type = CT_STATIC;
@ -88,7 +88,7 @@ class ACE_gui_backgroundBase {
style = ST_PICTURE;
colorBackground[] = {0,0,0,0};
colorText[] = {1, 1, 1, 1};
font = FontCSE;
font = FONT_ACE;
text = "";
sizeEx = 0.032;
};
@ -125,7 +125,7 @@ class ACE_gui_editBase
text = "";
size = 0.2;
style = "0x00 + 0x40";
font = "PuristaMedium";
font = "RobotoCondensed";
shadow = 2;
sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
colorDisabled[] =
@ -189,19 +189,19 @@ class ACE_gui_buttonBase {
animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
period = 0.5;
font = FontCSE;
font = FONT_ACE;
soundClick[] = {"\A3\ui_f\data\sound\RscButton\soundClick",0.09,1};
soundPush[] = {"\A3\ui_f\data\sound\RscButton\soundPush",0.0,0};
soundEnter[] = {"\A3\ui_f\data\sound\RscButton\soundEnter",0.07,1};
soundEscape[] = {"\A3\ui_f\data\sound\RscButton\soundEscape",0.09,1};
class Attributes {
font = FontCSE;
font = FONT_ACE;
color = "#E5E5E5";
align = "center";
shadow = "true";
};
class AttributesImage {
font = FontCSE;
font = FONT_ACE;
color = "#E5E5E5";
align = "left";
shadow = "true";
@ -229,7 +229,7 @@ class ACE_gui_staticBase {
w = 0.183825;
h = 0.104575;
style = ST_LEFT;
font = FontCSE;
font = FONT_ACE;
sizeEx = 0.03921;
colorText[] = {0.95, 0.95, 0.95, 1.0};
colorBackground[] = {0, 0, 0, 0};
@ -240,7 +240,7 @@ class RscListBox;
class ACE_gui_listBoxBase : RscListBox{
type = CT_LISTBOX;
style = ST_MULTI;
font = FontCSE;
font = FONT_ACE;
sizeEx = 0.03921;
color[] = {1, 1, 1, 1};
colorText[] = {0.543, 0.5742, 0.4102, 1.0};
@ -295,7 +295,7 @@ class ACE_gui_listNBox {
style =ST_MULTI;
w = 0.4;
h = 0.4;
font = FontCSE;
font = FONT_ACE;
sizeEx = 0.031;
autoScrollSpeed = -1;
@ -375,7 +375,7 @@ class ACE_gui_comboBoxBase: RscCombo {
arrowEmpty = "";
arrowFull = "";
wholeHeight = 0.45;
font = FontCSE;
font = FONT_ACE;
sizeEx = 0.031;
soundSelect[] = {"\A3\ui_f\data\sound\RscCombo\soundSelect",0.1,1};
soundExpand[] = {"\A3\ui_f\data\sound\RscCombo\soundExpand",0.1,1};
@ -463,22 +463,22 @@ class ACE_gui_mapBase {
colorGrid[] = {0.1,0.1,0.1,0.6};
colorGridMap[] = {0.1,0.1,0.1,0.6};
colorText[] = {1, 1, 1, 0.85};
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = 0.0270000;
stickX[] = {0.20, {"Gamma", 1.00, 1.50} };
stickY[] = {0.20, {"Gamma", 1.00, 1.50} };
onMouseButtonClick = "";
onMouseButtonDblClick = "";
fontLabel = "PuristaMedium";
fontLabel = "RobotoCondensed";
sizeExLabel = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
fontGrid = "TahomaB";
sizeExGrid = 0.02;
fontUnits = "TahomaB";
sizeExUnits = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
fontNames = "PuristaMedium";
fontNames = "RobotoCondensed";
sizeExNames = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8) * 2";
fontInfo = "PuristaMedium";
fontInfo = "RobotoCondensed";
sizeExInfo = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
fontLevel = "TahomaB";
sizeExLevel = 0.02;
@ -493,7 +493,7 @@ onMouseButtonDblClick = "";
y = "SafeZoneY + safezoneH - 4.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
w = "10 * ( ((safezoneW / safezoneH) min 1.2) / 40)";
h = "3.5 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)";
colorBackground[] = {1,1,1,0.5};
color[] = {0,0,0,1};
@ -787,4 +787,4 @@ onMouseButtonDblClick = "";
};
};
#endif
#endif

View File

@ -1,22 +0,0 @@
/*
* Author: commy2
*
* Arguments:
* Display where the Unload event was added <DISPLAY>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
disableSerialization;
private _dlg = ctrlParent _this;
_dlg displayAddEventHandler ["unload", {
if (_this select 1 == 1) then {
[missionnamespace getVariable ["BIS_fnc_initCuratorAttributes_target", objNull]] call FUNC(fixCrateContent);
};
}];

View File

@ -1,6 +1,5 @@
/*
* Author: commy2
*
* Execute an animation. This is used to not break things like the unconsciousness animation.
*
* Arguments:
@ -10,15 +9,20 @@
* 0 = PlayMove
* 1 = PlayMoveNow
* 2 = SwitchMove (no transitional animation, doesn't overwrite priority 1)
* 3: Force overwritting unconscious (default: false) <BOOL>
*
* Return Value:
* None
*
* Example:
* [player, "AmovPercMstpSnonWnonDnon_exerciseKata", 1] call ace_common_fnc_doAnimation
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_unit", "_animation", ["_priority", 0], ["_force", false]];
TRACE_4("params",_unit,_animation,_priority,_force);
// don't overwrite more important animations
if (_unit getVariable ["ACE_isUnconscious", false] && {(_animation != "Unconscious")} && {!_force}) exitWith {};
@ -33,36 +37,38 @@ if (_animation == "") then {
//if (_animation == animationState _unit) exitWith {};
TRACE_2("",local _unit,vehicle _unit);
switch (_priority) do {
case 0: {
if (_unit == vehicle _unit) then {
[_unit, format ["{_this playMove '%1'}", _animation], _unit] call FUNC(execRemoteFnc);
["playMove", _unit, [_unit, _animation]] call FUNC(objectEvent);
} else {
// Execute on all machines. PlayMove and PlayMoveNow are bugged: They have no global effects when executed on remote machines inside vehicles.
[_unit, format ["{_this playMove '%1'}", _animation]] call FUNC(execRemoteFnc);
["playMove", [_unit, _animation]] call FUNC(globalEvent);
};
};
case 1: {
if (_unit == vehicle _unit) then {
[_unit, format ["{_this playMoveNow '%1'}", _animation], _unit] call FUNC(execRemoteFnc);
["playMoveNow", _unit, [_unit, _animation]] call FUNC(objectEvent);
} else {
// Execute on all machines. PlayMove and PlayMoveNow are bugged: They have no global effects when executed on remote machines inside vehicles.
[_unit, format ["{_this playMoveNow '%1'}", _animation]] call FUNC(execRemoteFnc);
// Execute on all machines. PlayMove and PlayMoveNow are bugged: They have no global effects when executed on remote machines inside vehicles.
["playMoveNow", [_unit, _animation]] call FUNC(globalEvent);
};
};
case 2: {
// try playMoveNow first
if (_unit == vehicle _unit) then {
[_unit, format ["{_this playMoveNow '%1'}", _animation], _unit] call FUNC(execRemoteFnc);
["playMoveNow", _unit, [_unit, _animation]] call FUNC(objectEvent);
} else {
// Execute on all machines. PlayMove and PlayMoveNow are bugged: They have no global effects when executed on remote machines inside vehicles.
[_unit, format ["{_this playMoveNow '%1'}", _animation]] call FUNC(execRemoteFnc);
// Execute on all machines. PlayMove and PlayMoveNow are bugged: They have no global effects when executed on remote machines inside vehicles.
["playMoveNow", [_unit, _animation]] call FUNC(globalEvent);
};
// if animation doesn't respond, do switchMove
if (animationState _unit != _animation) then {
TRACE_1("did not respond to playMoveNow",animationState _unit);
// Execute on all machines. SwitchMove has local effects.
[_unit, format ["{_this switchMove '%1'}", _animation]] call FUNC(execRemoteFnc);
["switchMove", [_unit, _animation]] call FUNC(globalEvent);
};
};
default {};

View File

@ -1,71 +0,0 @@
/*
* Author: commy2
* Export Config Entrys to RPT logs
*
* Arguments:
* Config Path <CONFIG>
*
* Return Value:
* None
*
* Example:
* [configFile >> "CfgAmmo"] call ace_common_fnc_exportConfig;
*
* Public: No
*/
#include "script_component.hpp"
private _fnc_logEntries = {
params ["_c", "_d"];
private _p = inheritsFrom _c;
private _t = format [["class %1: %2 {", "class %1 {"] select (configName _p == ""), configName _c, configName _p];
for "_a" from 1 to _d do {
_t = " " + _t;
};
diag_log text _t;
private _e = [];
for "_i" from 0 to (count _c - 1) do {
private _e1 = _c select _i;
private _e2 = switch (true) do {
case (isNumber _e1): {getNumber _e1};
case (isText _e1): {getText _e1};
case (isArray _e1): {getArray _e1};
case (isClass _e1): {[_e1, _d + 1] call _fnc_logEntries; false};
};
if (!(_e2 isEqualType false)) then {
if (_e2 isEqualType []) then {
_e2 = toArray str _e2;
{
if (_x == toArray "[" select 0) then {
_e2 set [_forEachIndex, toArray "{" select 0];
};
if (_x == toArray "]" select 0) then {
_e2 set [_forEachIndex, toArray "}" select 0];
};
} forEach _e2;
_e2 = toString _e2;
_t = format ["%1[] = %2;", configName _e1, _e2];
} else {
_t = format ["%1 = %2;", configName _e1, str _e2];
};
for "_a" from 0 to _d do {
_t = " " + _t;
};
diag_log text _t;
};
};
_t = "};";
for "_a" from 1 to _d do {
_t = " " + _t;
};
diag_log text _t;
diag_log text "";
};
[_this, 0] call _fnc_logEntries;

View File

@ -1,43 +0,0 @@
/*
* Author: commy2
* Fixes zeus placed crates containing buged mine detectors and ace items.
*
* Arguments:
* 0: Crate <OBJECT>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_crate"];
// get all weapons inside the crate
private _weapons = weaponCargo _crate;
private _items = [];
// if the "weapon" is supposed to be an item, move those from the weapon array to the item array
{
if (getText (configFile >> "CfgWeapons" >> _x >> "simulation") == "ItemMineDetector") then {
_weapons set [_forEachIndex, ""];
_items pushBack _x;
};
} forEach _weapons;
_weapons = _weapons - [""];
// exit now if everything is fine
if (count _items == 0) exitWith {};
// otherwise clear weapon cargo and re-add items and weapons
clearWeaponCargoGlobal _crate;
{
_crate addWeaponCargoGlobal [_x, 1];
} forEach _weapons;
{
_crate addItemCargoGlobal [_x, 1];
} forEach _items;

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

@ -0,0 +1,34 @@
/*
* Author: PabstMirror
* Execute an event where object is local.
* If local there is no network traffic/delay (Unlike targetEvent)
*
* Arguments:
* 0: Event name (STRING)
* 1: Event target <OBJECT>
* 2: Event args <ANY>
*
* Return Value:
* None
*
* Example:
* ["doThing", vehicle player, []] call ace_common_fnc_objectEvent
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_eventName", "_eventTarget", "_eventArgs"];
#ifdef DEBUG_EVENTS
ACE_LOGINFO_2("* Object Event: %1 - %2",_eventName,_eventTarget);
ACE_LOGINFO_1(" args=%1",_eventArgs);
#endif
if (local _eventTarget) then {
[_eventName, _eventArgs] call FUNC(localEvent);
} else {
_this call FUNC(targetEvent);
};
nil

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="Common">
<Key ID="STR_ACE_Common_ACETeam">
@ -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 PBOs</French>
<French>Que faire avec les personnes n'ayant pas les bon 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>
@ -664,7 +664,7 @@
<Key ID="STR_ACE_Common_Disabled">
<English>Disabled</English>
<Czech>Zakázáno</Czech>
<French>Non</French>
<French>Désactiver</French>
<German>Deaktiviert</German>
<Italian>Disattivato</Italian>
<Polish>Wyłączone</Polish>
@ -675,7 +675,7 @@
<Key ID="STR_ACE_Common_Enabled">
<English>Enabled</English>
<Czech>Povoleno</Czech>
<French>Oui</French>
<French>Activer</French>
<German>Aktiviert</German>
<Italian>Attivato</Italian>
<Polish>Włączone</Polish>
@ -716,6 +716,7 @@
<Czech>Pouze vozidla</Czech>
<Spanish>Solo vehículos</Spanish>
<Italian>Solo veicoli</Italian>
<French>Vehicules seulement</French>
</Key>
<Key ID="STR_ACE_Common_DoNotForce">
<English>Do Not Force</English>
@ -726,6 +727,7 @@
<Portuguese>Não forçar</Portuguese>
<Russian>Не обязывать</Russian>
<Italian>Non forzare</Italian>
<French>Ne pas forcer</French>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryEquipment">
<English>ACE3 Equipment</English>
@ -736,6 +738,7 @@
<Czech>ACE3 Vybavení</Czech>
<Spanish>ACE3 Equipo</Spanish>
<Italian>Equipaggiamento ACE3</Italian>
<French>Equipement ACE3</French>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryCommon">
<English>ACE3 Common</English>
@ -746,6 +749,7 @@
<Spanish>ACE3 Común</Spanish>
<Czech>ACE3 Obecné</Czech>
<Italian>Comune ACE3</Italian>
<French>Commun ACE3</French>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryWeapons">
<English>ACE3 Weapons</English>
@ -756,6 +760,7 @@
<Czech>ACE3 Zbraně</Czech>
<Spanish>ACE3 Armas</Spanish>
<Italian>Armi ACE3</Italian>
<French>Armes ACE3</French>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryMovement">
<English>ACE3 Movement</English>
@ -766,6 +771,7 @@
<Spanish>ACE3 Movimiento</Spanish>
<Czech>ACE3 Pohyb</Czech>
<Italian>Movimento ACE3</Italian>
<French>Mouvement ACE3</French>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryScopeAdjustment">
<English>ACE3 Scope Adjustment</English>
@ -776,6 +782,7 @@
<Czech>ACE3 Nastavení optiky</Czech>
<Spanish>ACE3 Ajuste de miras</Spanish>
<Italian>Regolazione Ottiche ACE3</Italian>
<French>Ajustement de la lunette ACE3</French>
</Key>
<Key ID="STR_ACE_Common_ACEKeybindCategoryVehicles">
<English>ACE3 Vehicles</English>
@ -786,12 +793,15 @@
<Czech>ACE3 Vozidla</Czech>
<Spanish>ACE3 Vehículos</Spanish>
<Italian>Veicoli ACE3</Italian>
<French>Vehicules ACE3</French>
</Key>
<Key ID="STR_ACE_Common_NoRoomToUnload">
<English>No Room to unload</English>
<German>Kein Platz zum Entladen</German>
<Polish>Brak miejsca na rozładunek</Polish>
<Italian>Non c'è spazio per scaricare</Italian>
<Spanish>No hay espacio para descargar.</Spanish>
<French>Pas de place pour décharger</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="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

@ -71,7 +71,7 @@
// Listbox styles
#define LB_TEXTURES 0x10
#define LB_MULTI 0x20
#define FontM "PuristaMedium"
#define FontM "RobotoCondensed"
class RscText;
@ -79,7 +79,7 @@ class DAGR_Button {
idc = -1;
type = CT_BUTTON;
style = ST_LEFT;
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = 0.02;
colorText[] = { 0, 1, 0, 1 };
colorFocused[] = { 0, 0, 0, 0 }; // border color for focused state
@ -116,7 +116,7 @@ class DAGR_Menu_Pic {
text = "";
colorBackground[] = {};
colorText[] = {};
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = 0.04;
waitForLoad = 0;
};
@ -131,7 +131,7 @@ class DAGR_Menu_Text {
h = 0.15;
colorBackground[] = { 0, 0, 0, 0 };
colorText[] = { 0.239, 0.216, 0.153, 1 };
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = 0.03;
waitForLoad = 0;
text = "";

View File

@ -10,7 +10,7 @@ class RscTitles {
text = "";
colorBackground[] = { 0, 0, 0, 0 };
colorText[] = { 0.239, 0.216, 0.153, 1 };
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = 0.04;
waitForLoad = 0;
};
@ -25,7 +25,7 @@ class RscTitles {
text = "";
colorBackground[] = {};
colorText[] = {};
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = 0.02;
waitForLoad = 0;
};

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>Afficher 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>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Dragging">
<Key ID="STR_ACE_Dragging_Drag">
@ -57,6 +57,8 @@
<Russian>Поднять/Опустить</Russian>
<Czech>Zvýšit/Snížit</Czech>
<Italian>Alza/Abbassa</Italian>
<Spanish>Subir/Bajar</Spanish>
<French>Lever/abaisser</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Explosives">
<Key ID="STR_ACE_Explosives_Menu">
@ -45,6 +45,7 @@
<Czech>Odpálit VŠE</Czech>
<Polish>Detonuj wszystkie</Polish>
<Italian>Detona Tutti</Italian>
<French>Mise à feu (tous)</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>
@ -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>
@ -642,6 +645,8 @@
<!-- <Russian>ПТ-мина M6 SLAM</Russian> -->
<!-- <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>
@ -654,6 +659,8 @@
<!-- <Russian>ПТ-мина M6 SLAM</Russian> -->
<!-- <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>
@ -666,6 +673,8 @@
<!-- <Russian>Большое СВУ (городское)</Russian> -->
<!-- <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>
@ -678,6 +687,8 @@
<!-- <Russian>Большое СВУ (зарытое)</Russian> -->
<!-- <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>
@ -690,6 +701,8 @@
<!-- <Russian>Малое СВУ (городское)</Russian> -->
<!-- <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>
@ -702,6 +715,8 @@
<!-- <Russian>Малое СВУ (зарытое)</Russian> -->
<!-- <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>

View File

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

View File

@ -0,0 +1,11 @@
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_postInit));
};
};

View File

@ -0,0 +1,39 @@
class CfgMovesBasic {
class DefaultDie;
class ManActions {
ACE_FastRoping = "ACE_FastRoping";
};
};
class CfgMovesMaleSdr: CfgMovesBasic {
class States {
class Crew;
class ACE_freefallLoop: Crew {
file = PATHTOF(anim\freefallLoop.rtm);
interpolateTo[] = {"Unconscious", 1};
disableWeapons = 1;
disableWeaponsLong = 1;
canReload = 0;
looped = 1;
speed = 0.204082;
};
class ACE_freefallStart: Crew {
file = PATHTOF(anim\freefallStart.rtm);
interpolateTo[] = {"Unconscious", 1};
disableWeapons = 1;
disableWeaponsLong = 1;
canReload = 0;
looped = 0;
speed = 0.61224502;
};
class ACE_slidingLoop: Crew {
file = PATHTOF(anim\slidingLoop.rtm);
interpolateTo[] = {"Unconscious", 1};
disableWeapons = 1;
disableWeaponsLong = 1;
canReload = 0;
looped = 1;
speed = 0.441176;
};
};
};

View File

@ -0,0 +1,207 @@
#define EQUIP_FRIES_ATTRIBUTE class Attributes { \
class GVAR(equipFRIES) { \
property = QGVAR(equipFRIES); \
control = "Checkbox"; \
displayName = CSTRING(Eden_equipFRIES); \
tooltip = CSTRING(Eden_equipFRIES_Tooltip); \
expression = [_this] call FUNC(equipFRIES); \
typeName = "BOOL"; \
condition = "objectVehicle"; \
defaultValue = false; \
}; \
}
class CfgVehicles {
class Building;
class NonStrategic: Building {
class AnimationSources;
};
class ACE_friesBase: NonStrategic {
destrType = "";
};
class ACE_friesAnchorBar: ACE_friesBase {
author = "jokoho48";
scope = 1;
model = PATHTOF(data\friesAnchorBar.p3d);
animated = 1;
class AnimationSources: AnimationSources {
class extendHookRight {
source = "user";
initPhase = 0;
animPeriod = 1.5;
};
class extendHookLeft {
source = "user";
initPhase = 0;
animPeriod = 1.5;
};
};
};
class ACE_friesGantry: ACE_friesBase {
author = "jokoho48";
scope = 1;
model = PATHTOF(data\friesGantry.p3d);
animated = 1;
class AnimationSources: AnimationSources {
class adjustWidth {
source = "user";
initPhase = 0.211;
animPeriod = 0;
};
class rotateGantryLeft {
source = "user";
initPhase = 0;
animPeriod = 0;
};
class rotateGantryRight {
source = "user";
initPhase = 0;
animPeriod = 0;
};
};
};
class ACE_friesGantryReverse: ACE_friesGantry {
class AnimationSources: AnimationSources {
class adjustWidth {
source = "user";
initPhase = 0.213;
animPeriod = 0;
};
class rotateGantryLeft {
source = "user";
initPhase = 0.5;
animPeriod = 0;
};
class rotateGantryRight {
source = "user";
initPhase = 0.5;
animPeriod = 0;
};
};
};
class Logic;
class Module_F: Logic {
class ModuleDescription;
};
class ACE_Module: Module_F {};
class ACE_moduleEquipFRIES: ACE_Module {
scope = 2;
displayName = CSTRING(Module_FRIES_DisplayName);
icon = QUOTE(PATHTOF(UI\Icon_Module_FRIES_ca.paa));
category = "ACE";
function = QUOTE(FUNC(moduleEquipFRIES));
functionPriority = 10;
isGlobal = 0;
isTriggerActivated = 0;
isDisposable = 0;
author = "BaerMitUmlaut";
class ModuleDescription: ModuleDescription {
description = CSTRING(Module_FRIES_Description);
sync[] = {"AnyVehicle"};
};
};
class Air;
class Helicopter: Air {
class ACE_SelfActions {
class ACE_prepareFRIES {
displayName = CSTRING(Interaction_prepareFRIES);
condition = [vehicle _player] call FUNC(canPrepareFRIES);
statement = [vehicle _player] call FUNC(prepareFRIES);
showDisabled = 0;
priority = 1;
};
class ACE_deployRopes {
displayName = CSTRING(Interaction_deployRopes);
condition = [_player, vehicle _player] call FUNC(canDeployRopes);
statement = [QGVAR(deployRopes), [vehicle _player]] call EFUNC(common,serverEvent);
showDisabled = 0;
priority = 1;
};
class ACE_cutRopes {
displayName = CSTRING(Interaction_cutRopes);
condition = [vehicle _player] call FUNC(canCutRopes);
statement = [vehicle _player] call FUNC(cutRopes);
showDisabled = 0;
priority = 1;
};
class ACE_fastRope {
displayName = CSTRING(Interaction_fastRope);
condition = [_player, vehicle _player] call FUNC(canFastRope);
statement = [_player, vehicle _player] call FUNC(fastRope);
showDisabled = 0;
priority = 1;
};
};
};
class Helicopter_Base_H;
class Helicopter_Base_F;
class GVAR(helper): Helicopter_Base_F {
author = "KoffeinFlummi";
scope = 1;
model = PATHTOF(data\helper.p3d);
class ACE_Actions {
class ACE_MainActions {
condition = "false";
};
};
class Turrets {};
};
class Heli_Light_02_base_F: Helicopter_Base_H {
GVAR(enabled) = 1;
GVAR(ropeOrigins[]) = {{1.41, 1.38, 0}, {-1.41, 1.38, 0}};
GVAR(onPrepare) = QFUNC(onPrepareCommon);
GVAR(onCut) = QFUNC(onCutCommon);
};
class Heli_Attack_02_base_F: Helicopter_Base_F {
GVAR(enabled) = 1;
GVAR(ropeOrigins[]) = {{1.25, 1.5, -0.6}, {-1.1, 1.5, -0.6}};
GVAR(onPrepare) = QFUNC(onPrepareCommon);
GVAR(onCut) = QFUNC(onCutCommon);
};
class Heli_Transport_01_base_F: Helicopter_Base_H {
GVAR(enabled) = 2;
GVAR(ropeOrigins[]) = {"ropeOriginRight", "ropeOriginLeft"};
GVAR(friesType) = "ACE_friesAnchorBar";
GVAR(friesAttachmentPoint[]) = {0.065, 2.2, -0.15};
GVAR(onPrepare) = QFUNC(onPrepareCommon);
GVAR(onCut) = QFUNC(onCutCommon);
EQUIP_FRIES_ATTRIBUTE;
};
class Heli_Transport_02_base_F: Helicopter_Base_H {
GVAR(enabled) = 1;
GVAR(ropeOrigins[]) = {{0.94, -4.82, -1.16}, {-0.94, -4.82, -1.16}};
};
class Heli_Transport_03_base_F: Helicopter_Base_H {
GVAR(enabled) = 1;
GVAR(ropeOrigins[]) = {{0.75, -5.29, -0.11}, {-0.87, -5.29, -0.11}};
};
class Heli_light_03_base_F: Helicopter_Base_F {
GVAR(enabled) = 2;
GVAR(ropeOrigins[]) = {"ropeOriginRight", "ropeOriginLeft"};
GVAR(friesType) = "ACE_friesGantryReverse";
GVAR(friesAttachmentPoint[]) = {1.04, 2.5, -0.34};
EQUIP_FRIES_ATTRIBUTE;
};
class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {
GVAR(enabled) = 2;
GVAR(ropeOrigins[]) = {"ropeOriginRight", "ropeOriginLeft"};
GVAR(friesType) = "ACE_friesGantry";
GVAR(friesAttachmentPoint[]) = {-1.07, 3.26, -0.5};
EQUIP_FRIES_ATTRIBUTE;
};
class Heli_Transport_04_base_F;
class O_Heli_Transport_04_bench_F: Heli_Transport_04_base_F {
GVAR(enabled) = 1;
GVAR(ropeOrigins[]) = {{1.03, 1.6, -0.23}, {1.03, -1.36, -0.23}, {-1.23, 1.6, -0.23}, {-1.23, -1.36, -0.23}};
};
class O_Heli_Transport_04_covered_F: Heli_Transport_04_base_F {
GVAR(enabled) = 1;
GVAR(ropeOrigins[]) = {{0.83, -4.7, -0.03}, {-1.02, -4.7, -0.03}};
};
};

Binary file not shown.

View File

@ -0,0 +1,14 @@
#include "script_component.hpp"
[QGVAR(deployRopes), {
_this call FUNC(deployRopes);
}] call EFUNC(common,addEventHandler);
[QGVAR(startFastRope), {
[FUNC(fastRopeServerPFH), 0, _this] call CBA_fnc_addPerFrameHandler;
}] call EFUNC(common,addEventHandler);
[QGVAR(ropeDetach), {
params ["_object", "_rope"];
_object ropeDetach _rope;
}] call EFUNC(common,addEventHandler);

View File

@ -0,0 +1,21 @@
#include "script_component.hpp"
ADDON = false;
PREP(canCutRopes);
PREP(canDeployRopes);
PREP(canFastRope);
PREP(canPrepareFRIES);
PREP(cutRopes);
PREP(deployRopes);
PREP(equipFRIES);
PREP(fastRope);
PREP(fastRopeLocalPFH);
PREP(fastRopeServerPFH);
PREP(moduleEquipFRIES);
PREP(onCutCommon);
PREP(onPrepareCommon);
PREP(onRopeBreak);
PREP(prepareFRIES);
ADDON = true;

View File

@ -0,0 +1,110 @@
ARMA PUBLIC LICENSE
https://www.bistudio.com/community/licenses/arma-public-license
Brief summary of this Licence
PLEASE, NOTE THAT THIS SUMMARY HAS NO LEGAL EFFECT AND IS ONLY OF AN INFORMATORY NATURE DESIGNED FOR YOU TO GET THE BASIC INFORMATION ABOUT THE CONTENT OF THIS LICENCE. THE ONLY LEGALLY BINDING PROVISIONS ARE THOSE IN THE ORIGINAL AND FULL TEXT OF THIS LICENCE.
With this licence you are free to adapt (i.e. modify, rework or update) and share (i.e. copy, distribute or transmit) the material under the following conditions:
Attribution - You must attribute the material in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the material).
Noncommercial - You may not use this material for any commercial purposes.
Arma Only - You may not convert or adapt this material to be used in other games than Arma.
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Arma Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
Section 1 - Definitions
Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
ArmaOnly means primarily intended for or directed towards the use in any of existing and future Arma games, including but not limited to Arma: Cold War Assault, Arma, Arma 2 and Arma 3 and its official sequels and expansion packs.
Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
Licensor means the individual(s) or entity(ies) granting rights under this Public License.
NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
Section 2 Scope
License grant
Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
reproduce and Share the Licensed Material, in whole or in part, for NonCommercial and ArmaOnly purposes only; and
produce, reproduce, and Share Adapted Material for NonCommercial and ArmaOnly purposes only.
Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
Term. The term of this Public License is specified in Section 6(a).
Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
Downstream recipients.
Offer from the Licensor Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(a)(i).
Other rights
Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
Patent and trademark rights are not licensed under this Public License.
To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial and ArmaOnly purposes.
Section 3 License Conditions
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
Attribution
If You Share the Licensed Material (including in modified form), You must:
retain the following if it is supplied by the Licensor with the Licensed Material:
identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
a copyright notice;
a notice that refers to this Public License;
a notice that refers to the disclaimer of warranties;
a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(a) to the extent reasonably practicable.
If You Share Adapted Material You produce, the Adapters License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
Section 4 Sui Generis Database Rights
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial and ArmaOnly purposes only;
if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
Section 5 Disclaimer of Warranties and Limitation of Liability
Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
Section 6 Term and Termination
This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 Other Terms and Conditions
The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
Section 8 Interpretation
For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
Bohemia Interactive Notices
Bohemia Interactive a.s. is not a party to this License, and makes no warranty whatsoever in connection with the Licensed Material. Bohemia Interactive a.s. will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, Bohemia Interactive a.s. may elect to apply the Public License to material it publishes and in those instances it becomes the "Licensor".
Except for the limited purpose of indicating to the public that the Licensed Material is shared under this Public License, Bohemia Interactive a.s. does not authorize the use by either party of the trademarks "Arma", "Bohemia Interactive" or any related trademark or logo of Arma or Bohemia Interactive without the prior written consent of Bohemia Interactive a.s.

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@ -0,0 +1,17 @@
#include "script_component.hpp"
class CfgPatches {
class ADDON {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction"};
author[] = {"KoffeinFlummi", "BaerMitUmlaut"};
authorUrl = "";
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "CfgMoves.hpp"
#include "CfgVehicles.hpp"

Binary file not shown.

View File

@ -0,0 +1,66 @@
ambient[] = {1,1,1,1};
diffuse[] = {1,1,1,1};
forcedDiffuse[] = {0,0,0,0};
emmisive[] = {0,0,0,0};
specular[] = {0.071,0.071,0.071,1};
specularPower = 110;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1 {
texture = "z\ace\addons\fastroping\data\friesAnchorBar_nohq.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage2 {
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource = "tex";
class uvTransform {
aside[] = {10,0,0};
up[] = {0,10,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage3 {
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage4 {
texture = "z\ace\addons\fastroping\data\friesAnchorBar_as.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,1};
};
};
class Stage5 {
texture = "z\ace\addons\fastroping\data\friesAnchorBar_smdi.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,1};
};
};
class Stage6 {
texture = "#(ai,64,64,1)fresnel(4.5,1.1)";
uvSource = "none";
};
class Stage7 {
texture = "a3\data_f\env_land_ca.paa";
uvSource = "none";
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,66 @@
ambient[] = {1,1,1,1};
diffuse[] = {1,1,1,1};
forcedDiffuse[] = {0,0,0,0};
emmisive[] = {0,0,0,0};
specular[] = {0.071,0.071,0.071,1};
specularPower = 110;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1 {
texture = "z\ace\addons\fastroping\data\friesGantry_nohq.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage2 {
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource = "tex";
class uvTransform {
aside[] = {10,0,0};
up[] = {0,10,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage3 {
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,0};
pos[] = {0,0,0};
};
};
class Stage4 {
texture = "z\ace\addons\fastroping\data\friesGantry_as.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,1};
};
};
class Stage5 {
texture = "z\ace\addons\fastroping\data\friesGantry_smdi.paa";
uvSource = "tex";
class uvTransform {
aside[] = {1,0,0};
up[] = {0,1,0};
dir[] = {0,0,1};
pos[] = {0,0,1};
};
};
class Stage6 {
texture = "#(ai,64,64,1)fresnel(4.5,1.1)";
uvSource = "none";
};
class Stage7 {
texture = "a3\data_f\env_land_ca.paa";
uvSource = "none";
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,95 @@
class CfgSkeletons {
class Default {
isDiscrete = 1;
skeletonInherit = "";
skeletonBones[] = {};
};
class ace_friesAnchorBar_skeleton: Default {
isDiscrete = 1;
skeletonInherit = "Default";
skeletonBones[] = {
"barRight", "",
"barLeft", ""
};
};
class ace_friesGantry_skeleton: Default {
isDiscrete = 1;
skeletonInherit = "Default";
skeletonBones[] = {
"gantryRight", "",
"gantryLeft", ""
};
};
};
class CfgModels {
class Default {
sectionsInherit = "";
sections[] = {""};
skeletonName = "";
};
class friesAnchorBar: Default {
skeletonName = "ace_friesAnchorBar_skeleton";
sectionsInherit = "";
sections[] = {"ropeOriginRight", "ropeOriginLeft"};
class animations {
class extendHookRight {
type = "translation";
source = "";
selection = "barRight";
axis = "slideAxis";
animPeriod = 0;
minValue = 0;
maxValue = 1;
minPhase = 0;
maxPhase = 1;
offset0 = 0;
offset1 = 0.45;
};
class extendHookLeft: extendHookRight {
selection = "barLeft";
offset1 = -0.45;
};
};
};
class friesGantry: Default {
skeletonName = "ace_friesGantry_skeleton";
sectionsInherit = "";
sections[] = {"ropeOriginRight", "ropeOriginLeft"};
class animations {
class adjustWidth {
type = "translation";
source = "";
selection = "gantryRight";
axis = "axisWidth";
animPeriod = 0;
minValue = 0;
maxValue = 1;
offset0 = 0;
offset1 = 10;
};
class rotateGantryLeft {
type = "rotation";
source = "";
selection = "gantryLeft";
axis = "axisRotation";
animPeriod = 0;
minValue = 0;
maxValue = 1;
angle0 = "rad 0";
angle1 = "rad 360";
};
class rotateGantryRight {
type = "rotation";
source = "";
selection = "gantryRight";
axis = "axisRotation";
animPeriod = 0;
minValue = 0;
maxValue = 1;
angle0 = "rad 0";
angle1 = "rad 360";
};
};
};
};

View File

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

View File

@ -0,0 +1,30 @@
/*
* Author: BaerMitUmlaut
* Checks if the unit can deploy ropes from the helicopter.
*
* Arguments:
* 0: Unit occupying the helicopter <OBJECT>
* 1: The helicopter itself <OBJECT>
*
* Return Value:
* Able to deploy ropes <BOOL>
*
* Example:
* [_player, _vehicle] call ace_fastroping_fnc_canDeployRopes
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit", "_vehicle"];
private ["_deployedRopes", "_config"];
_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
((driver _vehicle != _unit) &&
{
((_vehicle getVariable [QGVAR(deploymentStage), 0]) == 2) ||
{!(isText (_config >> QGVAR(onPrepare))) && {(_vehicle getVariable [QGVAR(deploymentStage), 0]) == 0}}
} &&
{getPos _vehicle select 2 > 2})

View File

@ -0,0 +1,26 @@
/*
* Author: BaerMitUmlaut
* Checks if the unit can fast rope from the helicopter.
*
* Arguments:
* 0: Unit occupying the helicopter <OBJECT>
* 1: The helicopter itself <OBJECT>
*
* Return Value:
* Able to fast ropes <BOOL>
*
* Example:
* [_player, _vehicle] call ace_fastroping_fnc_canDeployRopes
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit", "_vehicle"];
private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
((driver _vehicle != _unit) &&
{!(_deployedRopes isEqualTo [])} &&
{{!(_x select 5)} count (_deployedRopes) > 0} &&
{getPos _vehicle select 2 > 2})

View File

@ -0,0 +1,27 @@
/*
* Author: BaerMitUmlaut
* Checks if the unit can prepare the helicopters FRIES.
*
* Arguments:
* 0: The helicopter itself <OBJECT>
*
* Return Value:
* Able to prepare FRIES <BOOL>
*
* Example:
* [_vehicle] call ace_fastroping_fnc_canPrepareFRIES
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private ["_deployedRopes", "_config"];
_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
(isNumber (_config >> QGVAR(enabled)) &&
{(getNumber (_config >> QGVAR(enabled)) == 1) || {!(isNull (_vehicle getVariable [QGVAR(FRIES), objNull]))}} &&
{(_vehicle getVariable [QGVAR(deploymentStage), 0]) == 0} &&
{isText (_config >> QGVAR(onPrepare))})

View File

@ -0,0 +1,50 @@
/*
* Author: BaerMitUmlaut
* Cut deployed ropes.
*
* Arguments:
* 0: A helicopter with deployed ropes <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_vehicle] call ace_fastroping_fnc_cutRopes
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private ["_deployedRopes", "_config", "_waitTime"];
_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
{
_x params ["", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"];
//Make player fall if rope is occupied
if (_occupied) then {
private _attachedObjects = attachedObjects _dummy;
//Rope is considered occupied when it's broken as well, so check if array is empty
//Note: ropes are not considered attached objects by Arma
if !(_attachedObjects isEqualTo []) then {
detach ((attachedObjects _dummy) select 0);
};
};
[QGVAR(ropeDetach), [_hook, _ropeTop]] call EFUNC(common,serverEvent);
[{{deleteVehicle _x} count _this}, [_ropeTop, _ropeBottom, _dummy, _hook], 60] call EFUNC(common,waitAndExecute);
} count _deployedRopes;
_vehicle setVariable [QGVAR(deployedRopes), [], true];
_vehicle setVariable [QGVAR(deploymentStage), 1, true];
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
_waitTime = 0;
if (isText (_config >> QGVAR(onCut))) then {
_waitTime = [_vehicle] call (missionNamespace getVariable (getText (_config >> QGVAR(onCut))));
};
[{
_this setVariable [QGVAR(deploymentStage), 0, true];
}, _vehicle, _waitTime] call EFUNC(common,waitAndExecute);

View File

@ -0,0 +1,56 @@
/*
* Author: BaerMitUmlaut
* Deploy ropes from the helicopter.
*
* Arguments:
* 0: The helicopter itself <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_vehicle] call ace_fastroping_fnc_deployRopes
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private ["_config", "_ropeOrigins", "_ropeOrigin", "_deployedRopes", "_hookAttachment", "_origin", "_dummy", "_hook", "_ropeTop", "_ropeBottom"];
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
_ropeOrigins = getArray (_config >> QGVAR(ropeOrigins));
_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
_hookAttachment = _vehicle getVariable [QGVAR(FRIES), _vehicle];
{
_ropeOrigin = _x;
_hook = QGVAR(helper) createVehicle [0, 0, 0];
_hook allowDamage false;
if (typeName _ropeOrigin == "ARRAY") then {
_hook attachTo [_hookAttachment, _ropeOrigin];
} else {
_hook attachTo [_hookAttachment, [0, 0, 0], _ropeOrigin];
};
_origin = getPosATL _hook;
_dummy = createVehicle [QGVAR(helper), _origin vectorAdd [0, 0, -1], [], 0, "CAN_COLLIDE"];
_dummy allowDamage false;
_dummy disableCollisionWith _vehicle;
_ropeTop = ropeCreate [_dummy, [0, 0, 0], _hook, [0, 0, 0], 0.5];
_ropeBottom = ropeCreate [_dummy, [0, 0, 0], 1];
ropeUnwind [_ropeBottom, 30, 34.5, false];
_ropeTop addEventHandler ["RopeBreak", {[_this, "top"] call FUNC(onRopeBreak)}];
_ropeBottom addEventHandler ["RopeBreak", {[_this, "bottom"] call FUNC(onRopeBreak)}];
//deployedRopes format: attachment point, top part of the rope, bottom part of the rope, attachTo helper object, occupied
_deployedRopes pushBack [_ropeOrigin, _ropeTop, _ropeBottom, _dummy, _hook, false];
false
} count _ropeOrigins;
_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
_vehicle setVariable [QGVAR(deploymentStage), 3, true];

View File

@ -0,0 +1,39 @@
/*
* Author: BaerMitUmlaut
* Equips the given helicopter with a FRIES.
*
* Arguments:
* 0: The helicopter <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_vehicle] call ace_fastroping_fnc_equipFRIES
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private ["_config", "_fries"];
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
if !(isNumber (_config >> QGVAR(enabled))) then {
["%1 has not been configured for ACE_Fastroping.", getText (_config >> "DisplayName")] call BIS_fnc_error;
} else {
if (getNumber (_config >> QGVAR(enabled)) == 2) then {
_fries = (getText (_config >> QGVAR(friesType))) createVehicle [0, 0, 0];
_fries attachTo [_vehicle, (getArray (_config >> QGVAR(friesAttachmentPoint)))];
_vehicle setVariable [QGVAR(FRIES), _fries, true];
_vehicle addEventHandler ["Killed", {
params ["_vehicle"];
deleteVehicle (_vehicle getVariable [QGVAR(FRIES), objNull]);
_vehicle setVariable [QGVAR(FRIES), nil, true];
if !((_vehicle getVariable [QGVAR(deployedRopes), []] isEqualTo [])) then {
[_vehicle] call FUNC(cutRopes);
};
}];
};
};

View File

@ -0,0 +1,40 @@
/*
* Author: BaerMitUmlaut
* Lets the unit fast rope.
*
* Arguments:
* 0: Unit occupying the helicopter <OBJECT>
* 1: The helicopter itself <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_player, _vehicle] call ace_fastroping_fnc_fastRope
*
* Public: No
*/
#include "script_component.hpp"
params ["_unit", "_vehicle"];
private ["_deployedRopes", "_usableRope", "_usableRopeIndex"];
//Select unoccupied rope
_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
_usableRope = _deployedRopes select 0;
_usableRopeIndex = 0;
{
if !(_x select 6) exitWith {
_usableRope = _x;
_usableRopeIndex = _forEachIndex;
};
} forEach _deployedRopes;
_usableRope set [5, true];
_deployedRopes set [_usableRopeIndex, _usableRope];
_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
//Start server PFH asap
[QGVAR(startFastRope), [_unit, _vehicle, _usableRope, _usableRopeIndex]] call EFUNC(common,serverEvent);
moveOut _unit;
[FUNC(fastRopeLocalPFH), 0, [_unit, _vehicle, _usableRope, _usableRopeIndex]] call CBA_fnc_addPerFrameHandler;

View File

@ -0,0 +1,50 @@
/*
* Author: BaerMitUmlaut
* Local PerFrameHandler during fast roping.
*
* Arguments:
* 0: PFH arguments <ARRAY>
* 1: PFH handle <OBJECT>
*
* Return Value:
* None
*
* Example:
* [[_unit, _vehicle, _rope, _ropeIndex], 0] call ace_fastroping_fnc_fastRopeLocalPFH
*
* Public: No
*/
#include "script_component.hpp"
params ["_arguments", "_pfhHandle"];
_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex"];
_rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"];
private ["_vectorUp", "_vectorDir", "_origin"];
//Wait until the unit is actually outside of the helicopter
if (vehicle _unit != _unit) exitWith {};
//Start fast roping
if (animationState _unit != "ACE_slidingLoop") exitWith {
_unit disableCollisionWith _dummy;
_unit attachTo [_dummy, [0, 0, -0.5]];
[_unit, "ACE_slidingLoop", 2] call EFUNC(common,doAnimation);
};
//End of fast rope
if (isNull attachedTo _unit) exitWith {
if ((getPos _unit) select 2 > 1) then {
[_unit, "ACE_freeFallStart", 2] call EFUNC(common,doAnimation);
[_unit, "ACE_freeFallLoop", 1] call EFUNC(common,doAnimation);
[{
isTouchingGround _this
}, {
[_this, "", 2] call EFUNC(common,doAnimation);
}, _unit] call EFUNC(common,waitUntilAndExecute);
} else {
[_unit, "", 2] call EFUNC(common,doAnimation);
};
_unit setVectorUp [0, 0, 1];
[_pfhHandle] call CBA_fnc_removePerFrameHandler;
};

View File

@ -0,0 +1,75 @@
/*
* Author: BaerMitUmlaut
* Server PerFrameHandler during fast roping.
*
* Arguments:
* 0: PFH arguments <ARRAY>
* 1: PFH handle <OBJECT>
*
* Return Value:
* None
*
* Example:
* [[_unit, _vehicle, _rope, _ropeIndex], 0] call ace_fastroping_fnc_fastRopeServerPFH
*
* Public: No
*/
#include "script_component.hpp"
params ["_arguments", "_pfhHandle"];
_arguments params ["_unit", "_vehicle", "_rope", "_ropeIndex"];
_rope params ["_attachmentPoint", "_ropeTop", "_ropeBottom", "_dummy", "_hook", "_occupied"];
private ["_vectorUp", "_vectorDir", "_origin"];
//Wait until the unit is actually outside of the helicopter
if (vehicle _unit != _unit) exitWith {};
//Start fast roping
if (animationState _unit != "ACE_slidingLoop") exitWith {
//Fix for twitchyness
_dummy setMass 80;
_dummy setCenterOfMass [0, 0, -2];
_origin = getPosASL _hook;
_dummy setPosASL (_origin vectorAdd [0, 0, -2]);
_dummy setVectorUp [0, 0, 1];
ropeUnwind [_ropeTop, 6, 34.5];
ropeUnwind [_ropeBottom, 6, 0.5];
};
//Check if rope broke and unit is falling
if (isNull attachedTo _unit) exitWith {
[_pfhHandle] call CBA_fnc_removePerFrameHandler;
};
//Setting the velocity manually to reduce twitching
_dummy setVelocity [0,0,-6];
//Check if fast rope is finished
if (((getPos _unit select 2) < 0.2) || {ropeLength _ropeTop == 34.5} || {vectorMagnitude (velocity _vehicle) > 5} || {!(alive _unit)} || {captive _unit}) exitWith {
detach _unit;
//Reset rope
deleteVehicle _ropeTop;
deleteVehicle _ropeBottom;
_origin = getPosASL _hook;
_dummy setPosASL (_origin vectorAdd [0, 0, -1]);
//Restore original mass and center of mass
_dummy setMass 40;
_dummy setCenterOfMass [0.000143227,0.00105986,-0.246147];
_ropeTop = ropeCreate [_dummy, [0, 0, 0], _hook, [0, 0, 0], 0.5];
_ropeBottom = ropeCreate [_dummy, [0, 0, 0], 34.5];
_ropeTop addEventHandler ["RopeBreak", {[_this, "top"] call FUNC(onRopeBreak)}];
_ropeBottom addEventHandler ["RopeBreak", {[_this, "bottom"] call FUNC(onRopeBreak)}];
//Update deployedRopes array
_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
_deployedRopes set [_ropeIndex, [_attachmentPoint, _ropeTop, _ropeBottom, _dummy, _hook, false]];
_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
[_pfhHandle] call CBA_fnc_removePerFrameHandler;
};

View File

@ -0,0 +1,27 @@
/*
* Author: BaerMitUmlaut
* Equips synched helicopters with a FRIES.
*
* Arguments:
* 0: Module <LOGIC>
*
* Return Value:
* None
*
* Example:
* [_module] call ace_fastroping_fnc_moduleEquipFRIES
*
* Public: No
*/
#include "script_component.hpp"
params ["_module"];
private _synchedUnits = synchronizedObjects _module;
{
if (_x isKindOf "CAManBase") then {
_x = vehicle _x;
};
[_x] call FUNC(equipFRIES);
false
} count _synchedUnits;

View File

@ -0,0 +1,39 @@
/*
* Author: BaerMitUmlaut
* Function for opening doors and extending the hook for most vanilla helos.
*
* Arguments:
* 0: Helicopter <OBJECT>
*
* Return Value:
* Amount of time to wait before cutting ropes <NUMBER>
*
* Example:
* [_vehicle] call ace_fastroping_fnc_onCutRopesCommon
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private _fries = _vehicle getVariable [QGVAR(FRIES), objNull];
if !(isNull _fries) then {
_fries animate ["extendHookRight", 0];
_fries animate ["extendHookLeft", 0];
[{
_this animateDoor ["door_R", 0];
_this animateDoor ["door_L", 0];
_vehicle animate ["dvere1_posunZ", 0];
_vehicle animate ["dvere2_posunZ", 0];
}, _vehicle, 2] call EFUNC(common,waitAndExecute);
4
} else {
_vehicle animateDoor ["door_R", 0];
_vehicle animateDoor ["door_L", 0];
_vehicle animate ["dvere1_posunZ", 0];
_vehicle animate ["dvere2_posunZ", 0];
2
};

View File

@ -0,0 +1,37 @@
/*
* Author: BaerMitUmlaut
* Function for closing doors and retracting the hook for most vanilla helos.
*
* Arguments:
* 0: Helicopter <OBJECT>
*
* Return Value:
* Amount of time to wait before deploying ropes <NUMBER>
*
* Example:
* [_vehicle] call ace_fastroping_fnc_onDeployRopesCommon
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private ["_fries", "_waitTime"];
_waitTime = 2;
_vehicle animateDoor ["door_R", 1];
_vehicle animateDoor ["door_L", 1];
_vehicle animate ["dvere1_posunZ", 1];
_vehicle animate ["dvere2_posunZ", 1];
_fries = _vehicle getVariable [QGVAR(FRIES), objNull];
if !(isNull _fries) then {
[{
_this animate ["extendHookRight", 1];
_this animate ["extendHookLeft", 1];
}, _fries, 2] call EFUNC(common,waitAndExecute);
_waitTime = 4;
};
_waitTime

View File

@ -0,0 +1,52 @@
/*
* Author: BaerMitUmlaut
* Handles ropes breaking when deployed.
*
* Arguments:
* 0: RopeBreak EH arguments <ARRAY>
* 1: Part of rope ("top" or "bottom") <STRING>
*
* Return Value:
* None
*
* Public: No
*/
#include "script_component.hpp"
params ["_ehArgs", "_part"];
_ehArgs params ["_rope", "_helper1", "_helper2"];
private ["_vehicle", "_deployedRopes", "_brokenRope", "_unit"];
if (_part == "bottom") then {
_helper2 = (ropeAttachedObjects _helper1) select 0;
};
_vehicle = attachedTo _helper2;
if (isNil "_vehicle") exitWith {}; //Exit when vehicle got destroyed
if (_vehicle isKindOf "ACE_friesBase") then {
_vehicle = attachedTo _vehicle;
};
_deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
_brokenRope = [];
{
if ((_x select 1 == _rope) || {(_x select 2 == _rope)}) exitWith {
_brokenRope = _x;
};
} forEach _deployedRopes;
_brokenRope set [5, true];
_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
_unit = {
if (_x isKindOf "CAManBase") exitWith {_x};
} forEach (attachedObjects (_brokenRope select 3));
if !(isNil "_unit") then {
if (_part == "top") then {
detach _unit;
} else {
//TODO: ???
//Rope might break at the very bottom
//-> letting the unit fall is not always ideal
};
};

View File

@ -0,0 +1,32 @@
/*
* Author: BaerMitUmlaut
* Prepares the helicopters FRIES.
*
* Arguments:
* 0: A helicopter with deployed ropes <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_vehicle] call ace_fastroping_fnc_prepareFRIES
*
* Public: No
*/
#include "script_component.hpp"
params ["_vehicle"];
private ["_config", "_waitTime"];
//Stage indicator: 0 - travel mode; 1 - preparing FRIES; 2 - FRIES ready; 3 - ropes deployed
_vehicle setVariable [QGVAR(deploymentStage), 1, true];
_config = configFile >> "CfgVehicles" >> typeOf _vehicle;
_waitTime = 0;
if (isText (_config >> QGVAR(onPrepare))) then {
_waitTime = [_vehicle] call (missionNamespace getVariable (getText (_config >> QGVAR(onPrepare))));
};
[{
_this setVariable [QGVAR(deploymentStage), 2, true];
}, _vehicle, _waitTime] call EFUNC(common,waitAndExecute);

View File

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

View File

@ -0,0 +1,12 @@
#define COMPONENT fastroping
#include "\z\ace\addons\main\script_mod.hpp"
#ifdef DEBUG_ENABLED_FASTROPING
#define DEBUG_MODE_FULL
#endif
#ifdef DEBUG_SETTINGS_FASTROPING
#define DEBUG_SETTINGS DEBUG_SETTINGS_FASTROPING
#endif
#include "\z\ace\addons\main\script_macros.hpp"

View File

@ -0,0 +1,45 @@
<?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>
</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>
</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>
</Key>
<Key ID="STR_ACE_Fastroping_Interaction_deployRopes">
<English>Deploy ropes</English>
<German>Seile auswerfen</German>
<Polish>Wypuść liny</Polish>
</Key>
<Key ID="STR_ACE_Fastroping_Interaction_fastRope">
<English>Fast rope</English>
<German>Abseilen</German>
<Polish>Zjedź na linie</Polish>
</Key>
<Key ID="STR_ACE_Fastroping_Interaction_cutRopes">
<English>Cut ropes</English>
<German>Seile abwerfen</German>
<Polish>Odetnij liny</Polish>
</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>
</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>
</Key>
</Package>
</Project>

View File

@ -12,6 +12,7 @@ class CfgVehicles {
class Arguments {
class enabled {
displayName = CSTRING(enabled_DisplayName);
description = CSTRING(enabled_DisplayName);
typeName = "BOOL";
defaultValue = 1;
};

View File

@ -41,7 +41,7 @@ _iconSize = BASE_SIZE * _fovCorrection;
_drawColor set [3, ((_drawColor select 3) * (_timeLeftToShow / 0.5))];
};
drawIcon3D [QUOTE(PATHTOF(UI\fp_icon2.paa)), _drawColor, _pos, _iconSize, _iconSize, 0, _name, 1, 0.03, "PuristaMedium"];
drawIcon3D [QUOTE(PATHTOF(UI\fp_icon2.paa)), _drawColor, _pos, _iconSize, _iconSize, 0, _name, 1, 0.03, "RobotoCondensed"];
};
} count (GVAR(fingersHash) select 0);

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="finger">
<Key ID="STR_ACE_finger_indicatorForSelf_name">
@ -39,10 +39,9 @@
</Key>
<Key ID="STR_ACE_finger_indicatorColor_description">
<English>Color of the pointing indicator circle</English>
<German>Farbe des Zeigersymbols (Kreis)</German>
<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>
@ -54,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 le doigt vers"</French>
<Polish>Akcja "wskaż palcem"</Polish>
<Hungarian>Cselekvés "ujj rámutatása"</Hungarian>
<Portuguese>Ação "Apontar um dedo para"</Portuguese>
@ -123,4 +122,4 @@
<Italian>Distanza massima tra giocatori per mostrare l'indicatore di puntamento [default: 4 metri]</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="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 torche avec un filtre rouge. Pour utilisation sur 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>Mini lampe torche. Pour utilisation sur 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 torche avec un filtre rouge. Pour utilisation sur carte.</French>
</Key>
</Package>
</Project>
</Project>

View File

@ -28,5 +28,5 @@ private ["_color", "_index", "_lastPos", "_lastSpd", "_max", "_positions", "_sta
_lastPos = _pos2;
_lastSpd = _data1 select 1;
};
// drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "PuristaMedium"];
// drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format["%1m/s", _lastSpd], 1, 0.05, "RobotoCondensed"];
} forEach GVAR(traces);

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="Frag">
<Key ID="STR_ACE_Frag_Module_DisplayName">
@ -65,11 +65,15 @@
<English>Explosion Reflections Simulation</English>
<Polish>Symulacja odbicia eksplozji</Polish>
<Italian>Simulazione Riflessi Esplosioni</Italian>
<German>Druckwellensimulation</German>
<Spanish>Activar simulación de reflexiones</Spanish>
</Key>
<Key ID="STR_ACE_Frag_EnableReflections_Desc">
<English>Enable the ACE Explosion Reflection Simulation</English>
<Polish>Włącz symulację odbicia eksplozji ACE</Polish>
<Italian>Abilita la Simulazione Riflessi Esplosioni di ACE</Italian>
<German>Aktiviere die ACE-Druckwellensimulation</German>
<Spanish>Activa la simulación de reflexiones para las explosiones.</Spanish>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack">
<English>Maximum Projectiles Tracked</English>

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="Gestures">
<Key ID="STR_ACE_Gestures_Name">
@ -119,6 +119,7 @@
<Portuguese>Parar</Portuguese>
<Czech>Stop</Czech>
<Italian>Stop</Italian>
<Spanish>Detenerse</Spanish>
</Key>
<!-- COVER -->
<Key ID="STR_ACE_Gestures_cover">
@ -143,6 +144,7 @@
<Portuguese>Reagrupar</Portuguese>
<Czech>Přeskupit</Czech>
<Italian>Raggruppare</Italian>
<Spanish>Reunirse</Spanish>
</Key>
<!-- FORWARD -->
<Key ID="STR_ACE_Gestures_forward">
@ -154,6 +156,7 @@
<Portuguese>Mover em frente</Portuguese>
<Czech>Kupředu</Czech>
<Italian>Muovere avanti</Italian>
<Spanish>Avanzar</Spanish>
</Key>
<!-- ENGAGE -->
<Key ID="STR_ACE_Gestures_engage">
@ -165,6 +168,7 @@
<Portuguese>Engajar</Portuguese>
<Czech>Útok</Czech>
<Italian>Ingaggiare</Italian>
<Spanish>Atacar</Spanish>
</Key>
<!-- POINT -->
<Key ID="STR_ACE_Gestures_point">
@ -176,6 +180,7 @@
<Portuguese>Ponta</Portuguese>
<Czech>Ukázat</Czech>
<Italian>Puntare</Italian>
<Spanish>Señalar</Spanish>
</Key>
<!-- HOLD -->
<Key ID="STR_ACE_Gestures_hold">
@ -187,6 +192,7 @@
<Portuguese>Esperar</Portuguese>
<Czech>Čekej</Czech>
<Italian>Mantenere</Italian>
<Spanish>Esperar</Spanish>
</Key>
<!-- WARNING -->
<Key ID="STR_ACE_Gestures_warning">
@ -198,6 +204,7 @@
<Portuguese>Aviso</Portuguese>
<Czech>Pozor</Czech>
<Italian>Attenzione</Italian>
<Spanish>Atención</Spanish>
</Key>
<Key ID="STR_ACE_Gestures_Hi">
<English>Hi</English>
@ -229,6 +236,8 @@
<Czech>Zobrazit posunky v interakčním menu</Czech>
<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 signaux dans le 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>
@ -236,6 +245,8 @@
<Czech>Zobrazit posunky pro vlastní interakční menu, nebo prostě použít klávesové zkratky, nebo to zakázat úplně</Czech>
<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>Affiche les signaux dans le menu d'interaction personnel, ou seulement par raccourcis, ou encore les désactiver complètement</French>
</Key>
<Key ID="STR_ACE_Gestures_justKeybinds">
<English>Just Keybinds</English>
@ -243,6 +254,8 @@
<Czech>Pouze klávesové zkratky</Czech>
<Polish>Tylko skróty klaw.</Polish>
<Italian>Solo Hotkey</Italian>
<Spanish>Solo mediante teclas</Spanish>
<French>Juste par raccourcis</French>
</Key>
<Key ID="STR_ACE_Gestures_keysAndInteractionMenu">
<English>Keybinds + Interaction Menu</English>
@ -250,6 +263,8 @@
<Czech>Klávesové zkratky + interakční menu</Czech>
<Polish>Skróty klaw. + menu interakcji</Polish>
<Italian>Hotkey + Menù Interazione</Italian>
<Spanish>Teclas y Menú de Interacción</Spanish>
<French>Raccourcis et menu d'interaction</French>
</Key>
</Package>
</Project>

View File

@ -7,20 +7,20 @@
////////////////
class RscPicture {
access = 0;
idc = -1;
type = CT_STATIC;
style = ST_PICTURE;
colorBackground[] = {0,0,0,0};
colorText[] = {1,1,1,1};
font = "puristaMedium";
sizeEx = 0;
lineSpacing = 0;
fixedWidth = 0;
shadow = 0;
text = "";
x = safezoneX;
y = safezoneY;
w = safezoneW;
h = safezoneH;
access = 0;
idc = -1;
type = CT_STATIC;
style = ST_PICTURE;
colorBackground[] = {0,0,0,0};
colorText[] = {1,1,1,1};
font = "RobotoCondensed";
sizeEx = 0;
lineSpacing = 0;
fixedWidth = 0;
shadow = 0;
text = "";
x = safezoneX;
y = safezoneY;
w = safezoneW;
h = safezoneH;
};

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="Headless">
<Key ID="STR_ACE_Headless_Module">
@ -6,42 +6,56 @@
<German>Headless</German>
<Polish>Headless</Polish>
<Italian>Headless</Italian>
<Spanish>Headless</Spanish>
<French>Headless</French>
</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>
<French>Ce module permet de configurer le trasnfert automatique des IA vers les Headless Client. (Défaut : Non)</French>
</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>
<French>Autorise le transfert d'IA vers les Headless Clients.</French>
</Key>
<Key ID="STR_ACE_Headless_Delay">
<English>Delay</English>
<German>Verzögerung</German>
<Polish>Opóźnienie</Polish>
<Italian>Ritardo</Italian>
<Spanish>Retardo</Spanish>
<French>Délai</French>
</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>
<French>Délai minimum entre les transferts, en secondes. (Défaut : 15)</French>
</Key>
<Key ID="STR_ACE_Headless_Log">
<English>Log</English>
<German>Protokolldatei anlegen</German>
<Polish>Dziennik</Polish>
<Italian>Log</Italian>
<Spanish>Registro</Spanish>
<French>Journal</French>
</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>
<French>Enregistre les statistiques de transfert et les (dé)connections du Headless Client vers le RPT. (Défaut : Non)</French>
</Key>
</Package>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Hearing">
<Key ID="STR_ACE_Hearing_EarPlugs_Name">
@ -112,6 +112,9 @@
<Key ID="STR_ACE_Hearing_DisableEarRinging_Description">
<English>Remove tinnitus effect when the player takes hearing damage</English>
<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 l'effet de bourdonnement lorsque le joueur subis des traumatismes sonores</French>
</Key>
<Key ID="STR_ACE_Hearing_Module_DisplayName">
<English>Hearing</English>
@ -132,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>
@ -146,6 +149,7 @@
<Portuguese>Ativar surdez em combate?</Portuguese>
<Russian>Уменьшает возможность игрока слышать звуки при повреждении органов слуха</Russian>
<Italian>Riduci l'abilità uditiva quando il giocatore riceve danno uditivo</Italian>
<French>Reduit les capacités auditives lorsque le joueur subit des traumatismes sonores</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>
@ -187,6 +191,7 @@
<Portuguese>Adiciona protetores de ouvido as unidades</Portuguese>
<Czech>Přidat špunty jednotce</Czech>
<Italian>Aggiungi Tappi per Orecchie alle unità</Italian>
<Spanish>Agregar tapones de oida a la unidad</Spanish>
</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>
@ -196,6 +201,7 @@
<Portuguese>Adicionar o item `ACE_EarPlugs` a todas as unidades que tenham armas barulhentas. Pode ser desabilitado com carregamentos customizados.</Portuguese>
<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>
</Key>
</Package>
</Project>
</Project>

View File

@ -50,7 +50,7 @@
#define ST_TILE_PICTURE 144
#define ST_WITH_RECT 160
#define ST_LINE 176
#define FontM "PuristaMedium"
#define FontM "RobotoCondensed"
#define __XA SafeZoneXAbs
#define __X SafeZoneX
#define __Y SafeZoneY
@ -146,7 +146,7 @@ class ace_huntir_cam_dialog {
style = 48;
colorText[ ]={ 1,1,1,1 };
colorBackground[ ]={ 0.4,0.4,0.4,1 };
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = 0.021;
lineSpacing = 1;
x = __X;

View File

@ -15,7 +15,7 @@ class RscTitles {
idc = 64432;
style = 0;
x = 0.497;y = 0.297;w = 0.2;h = 0.2;
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = __FONTHEIGHT;
colorText[] = {1, 1, 1, 1};
colorBackground[]={0,0,0,0};
@ -38,4 +38,4 @@ class RscTitles {
};
};
};
};
};

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="Interact_Menu">
<Key ID="STR_ACE_Interact_Menu_AlwaysUseCursorSelfInteraction">
@ -319,6 +319,7 @@
<Portuguese>Velocidade da animação de interação</Portuguese>
<Czech>Rychlost animace interakce</Czech>
<Italian>Velocità Animazioni Interazioni</Italian>
<Spanish>Velocidad de animación del menú de interacción</Spanish>
</Key>
<Key ID="STR_ACE_Interact_Menu_menuAnimationSpeed_Description">
<English>Makes menu animations faster and decreases the time needed to hover to show sub actions</English>
@ -328,6 +329,7 @@
<Portuguese>Faz com que as animações do menu de interação sejam mais rápidas, dimiuindo a necessidade de esperar para mostrar as ações</Portuguese>
<Czech>Zrychlí animaci menu a sníží tak čas potřebný pro plné zobrazení podmenu</Czech>
<Italian>Rende le animazioni Menù più veloci e diminuisce il tempo richiesto per mostrare sotto-azioni</Italian>
<Spanish>Hace la animación del menú más rápida, reduciendo el tiempo necesario para abrir sub-acciones.</Spanish>
</Key>
</Package>
</Project>
</Project>

View File

@ -11,7 +11,7 @@ class ACE_Interaction_Button_Base {
access = 0;
type = 1;
text = "";
font = "PuristaMedium";
font = "RobotoCondensed";
sizeEx = "0.8 / 40 / (getResolution select 5)";
shadow = 2;

View File

@ -4,7 +4,6 @@ PREP(addPassengerActions);
PREP(addPassengersActions);
PREP(getWeaponPos);
PREP(moduleInteraction);
PREP(removeTag);
// scroll wheel hint
PREP(showMouseHint);

View File

@ -1,36 +0,0 @@
/*
* Author: commy2
* Removes tag
*
* Arguments:
* None
*
* Return value:
* None
*
* Example:
* call ace_interaction_fnc_removeTag
*
* Public: No
*/
#include "script_component.hpp"
0 spawn {
private ["_index", "_name"];
waitUntil {player getVariable ["ACE_Name", ""] != ""};
_name = player getVariable ["ACE_Name", ""];
_name = toArray _name;
_index = _name find (toArray "]" select 0);
if (_index != -1) then {
for "_index" from 0 to _index do {
_name set [_index, -1];
};
_name = _name - [-1];
_name = toString _name;
player setVariable ["ACE_Name", _name, true];
};
};

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="Interaction">
<Key ID="STR_ACE_Interaction_MainAction">
@ -353,6 +353,8 @@
<English>Get Out</English>
<Polish>Wyjdź</Polish>
<Italian>Esci</Italian>
<German>Aussteigen!</German>
<Spanish>Sal del vehículo!</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_TeamManagement">
<English>Team Management</English>
@ -652,6 +654,7 @@
<Portuguese>Abrir</Portuguese>
<Russian>Открыть</Russian>
<Italian>Apri</Italian>
<German>Öffnen</German>
</Key>
<Key ID="STR_ACE_Interaction_Module_DisplayName">
<English>Interaction System</English>
@ -705,11 +708,13 @@
<English>Turn on</English>
<German>Aktivieren</German>
<Polish>Włącz</Polish>
<Spanish>Encender</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_TurnOff">
<English>Turn off</English>
<German>Deaktivieren</German>
<Polish>Wyłącz</Polish>
<Spanish>Apagar</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_PassMagazine">
<English>Pass magazine</English>
@ -719,6 +724,7 @@
<Portuguese>Passar carregador</Portuguese>
<Czech>Podat zásobník</Czech>
<Italian>Passa caricatore</Italian>
<Spanish>Pasar cargador</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_PassMagazinePrimary">
<English>Primary magazine</English>
@ -728,6 +734,7 @@
<Portuguese>Carregador primário</Portuguese>
<Czech>Zásobník do primární zbraně</Czech>
<Italian>Caricatore Primario</Italian>
<Spanish>Cargador primario</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_PassMagazineHandgun">
<English>Pistol magazine</English>
@ -737,6 +744,7 @@
<Portuguese>Carregador da pistola</Portuguese>
<Czech>Zásobník do pistole</Czech>
<Italian>Caricatore Pistola</Italian>
<Spanish>Cargador de pistola</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_PassMagazineHint">
<English>%1 passed you a %2 magazine.</English>
@ -746,6 +754,7 @@
<Portuguese>%1 passou a você um carregador %2.</Portuguese>
<Czech>%1 ti podal %2 zásobník.</Czech>
<Italian>%1 ti ha passato un caricatore %2 .</Italian>
<Spanish>%1 te pasó un cargador %2.</Spanish>
</Key>
<Key ID="STR_ACE_Interaction_PassMagazineSetting">
<English>Show "pass magazine" interaction</English>
@ -755,6 +764,7 @@
<Portuguese>Mostrar a interação "Passar carregador"</Portuguese>
<Czech>Zobrazit "interakci "podat zásobník"</Czech>
<Italian>Mostra interazione "passa caricatore"</Italian>
<Spanish>Mostrar "Pasar cargador" en el menú de interacción</Spanish>
</Key>
</Package>
</Project>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Inventory">
<Key ID="STR_ACE_Inventory_SettingName">
@ -31,6 +31,7 @@
<Czech>Batohy</Czech>
<Polish>Plecaki</Polish>
<Italian>Zaini</Italian>
<Spanish>Mochilas</Spanish>
</Key>
<Key ID="STR_ACE_Inventory_Headgear">
<English>Headgear</English>
@ -38,6 +39,7 @@
<Czech>Pokrývka hlavy</Czech>
<Polish>Hełmy</Polish>
<Italian>Copricapi</Italian>
<Spanish>Cascos</Spanish>
</Key>
<Key ID="STR_ACE_Inventory_Glasses">
<English>Glasses</English>
@ -45,6 +47,7 @@
<Czech>Brýle</Czech>
<Polish>Gogle</Polish>
<Italian>Occhiali</Italian>
<Spanish>Gafas</Spanish>
</Key>
<Key ID="STR_ACE_Inventory_Uniforms">
<English>Uniforms</English>
@ -52,6 +55,7 @@
<Czech>Uniformy</Czech>
<Polish>Uniformy</Polish>
<Italian>Uniformi</Italian>
<Spanish>Uniformes</Spanish>
</Key>
<Key ID="STR_ACE_Inventory_Vests">
<English>Vests</English>
@ -59,6 +63,7 @@
<Czech>Vesty</Czech>
<Polish>Kamizelki</Polish>
<Italian>Vests</Italian>
<Spanish>Chalecos</Spanish>
</Key>
<Key ID="STR_ACE_Inventory_Grenades">
<English>Grenades</English>
@ -66,6 +71,7 @@
<Czech>Granáty</Czech>
<Polish>Granaty</Polish>
<Italian>Granate</Italian>
<Spanish>Granadas</Spanish>
</Key>
<Key ID="STR_ACE_Inventory_Medical">
<English>Medical</English>
@ -73,6 +79,7 @@
<Czech>Lékařské vybavení</Czech>
<Polish>Medyczne</Polish>
<Italian>Medico</Italian>
<Spanish>Médico</Spanish>
</Key>
</Package>
</Project>

View File

@ -6,6 +6,8 @@ class CfgPatches {
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {
// Vanilla
"3den",
"a3_air_f",
"a3_air_f_beta",
"a3_air_f_beta_heli_attack_01",
@ -49,6 +51,7 @@ class CfgPatches {
"a3_anims_f_config_sdr",
"a3_anims_f_epa",
"a3_anims_f_epc",
"a3_anims_f_exp_a",
"a3_anims_f_heli",
"a3_anims_f_kart",
"a3_anims_f_mark_deployment",
@ -106,6 +109,9 @@ class CfgPatches {
"a3_data_f_curator_misc",
"a3_data_f_curator_respawn",
"a3_data_f_curator_virtual",
"a3_data_f_exp_a",
"a3_data_f_exp_a_virtual",
"a3_data_f_exp_b",
"a3_data_f_heli",
"a3_data_f_hook",
"a3_data_f_kart",
@ -119,6 +125,7 @@ class CfgPatches {
"a3_functions_f_curator",
"a3_functions_f_epa",
"a3_functions_f_epc",
"a3_functions_f_exp_a",
"a3_functions_f_heli",
"a3_functions_f_mark",
"a3_functions_f_mp_mark",
@ -129,6 +136,7 @@ class CfgPatches {
"a3_language_f_epa",
"a3_language_f_epb",
"a3_language_f_epc",
"a3_language_f_exp_a",
"a3_language_f_gamma",
"a3_language_f_heli",
"a3_language_f_kart",
@ -154,6 +162,7 @@ class CfgPatches {
"a3_missions_f_epa",
"a3_missions_f_epb",
"a3_missions_f_epc",
"a3_missions_f_exp_a",
"a3_missions_f_gamma",
"a3_missions_f_heli",
"a3_missions_f_kart",
@ -186,6 +195,7 @@ class CfgPatches {
"a3_modules_f_epb",
"a3_modules_f_epb_misc",
"a3_modules_f_events",
"a3_modules_f_exp_a",
"a3_modules_f_groupmodifiers",
"a3_modules_f_hc",
"a3_modules_f_heli",
@ -215,6 +225,9 @@ class CfgPatches {
"a3_music_f_heli",
"a3_music_f_mark",
"a3_plants_f_bush",
"a3_props_f_exp_a",
"a3_props_f_exp_a_military",
"a3_props_f_exp_a_military_equipment",
"a3_roads_f",
"a3_rocks_f",
"a3_signs_f",
@ -253,6 +266,8 @@ class CfgPatches {
"a3_sounds_f_bootcamp",
"a3_sounds_f_epb",
"a3_sounds_f_epc",
"a3_sounds_f_exp_a",
"a3_sounds_f_mark",
"a3_static_f",
"a3_static_f_beta_mortar_01",
"a3_static_f_gamma",
@ -337,6 +352,9 @@ class CfgPatches {
"a3_structures_f_epc_items_documents",
"a3_structures_f_epc_items_electronics",
"a3_structures_f_epc_walls",
"a3_structures_f_exp_a",
"a3_structures_f_exp_a_vr_blocks",
"a3_structures_f_exp_a_vr_helpers",
"a3_structures_f_furniture",
"a3_structures_f_heli_civ_accessories",
"a3_structures_f_heli_civ_constructions",
@ -446,6 +464,7 @@ class CfgPatches {
"a3_ui_f",
"a3_ui_f_bootcamp",
"a3_ui_f_curator",
"a3_ui_f_exp_a",
"a3_ui_f_heli",
"a3_ui_f_kart",
"a3_ui_f_mark",
@ -541,7 +560,12 @@ class CfgPatches {
"a3_weapons_f_vests",
"a3data",
"map_vr",
"extended_eventhandlers", "cba_ui", "cba_xeh", "cba_xeh_a3", "cba_jr"
// CBA
"extended_eventhandlers",
"cba_ui",
"cba_xeh",
"cba_xeh_a3",
"cba_jr"
};
author[] = {ECSTRING(common,ACETeam)};
authorUrl = "http://ace3mod.com/";
@ -564,10 +588,3 @@ class CfgMods {
#include "CfgModuleCategories.hpp"
#include "CfgVehicleClasses.hpp"
// @todo delete this after CBA update, defines undefined global variable
class Extended_PreStart_EventHandlers {
class ADDON {
init = "with uiNamespace do {SLX_XEH_COMPILE_NEW = CBA_fnc_compileFunction};";
};
};

View File

@ -84,7 +84,7 @@
#ifdef DISABLE_COMPILE_CACHE
#define PREP(fncName) DFUNC(fncName) = compile preprocessFileLineNumbers QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf))
#else
#define PREP(fncName) [QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)), QFUNC(fncName)] call SLX_XEH_COMPILE_NEW
#define PREP(fncName) [QUOTE(PATHTOF(functions\DOUBLES(fnc,fncName).sqf)), QFUNC(fncName)] call CBA_fnc_compileFunction
#endif
#define PREP_MODULE(folder) [] call compile preprocessFileLineNumbers QUOTE(PATHTOF(folder\__PREP__.sqf))

View File

@ -12,4 +12,4 @@
#define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD
// MINIMAL required version for the Mod. Components can specify others..
#define REQUIRED_VERSION 1.54
#define REQUIRED_VERSION 1.56

View File

@ -1,53 +1,69 @@
class ACE_Settings {
class GVAR(BFT_Interval) {
category = CSTRING(Module_DisplayName);
value = 1.0;
typeName = "SCALAR";
displayName = CSTRING(BFT_Interval_DisplayName);
description = CSTRING(BFT_Interval_Description);
};
class GVAR(BFT_Enabled) {
category = CSTRING(Module_DisplayName);
value = 0;
typeName = "BOOL";
displayName = CSTRING(BFT_Enabled_DisplayName);
description = CSTRING(BFT_Enabled_Description);
};
class GVAR(BFT_HideAiGroups) {
category = CSTRING(Module_DisplayName);
value = 0;
typeName = "BOOL";
displayName = CSTRING(BFT_HideAiGroups_DisplayName);
description = CSTRING(BFT_HideAiGroups_Description);
};
class GVAR(BFT_ShowPlayerNames) {
category = CSTRING(Module_DisplayName);
value = 0;
typeName = "BOOL";
displayName = CSTRING(BFT_ShowPlayerNames_DisplayName);
description = CSTRING(BFT_ShowPlayerNames_Description);
};
class GVAR(mapIllumination) {
category = CSTRING(Module_DisplayName);
value = 1;
typeName = "BOOL";
displayName = CSTRING(MapIllumination_DisplayName);
description = CSTRING(MapIllumination_Description);
};
class GVAR(mapGlow) {
category = CSTRING(Module_DisplayName);
value = 1;
typeName = "BOOL";
displayName = CSTRING(MapGlow_DisplayName);
description = CSTRING(MapGlow_Description);
};
class GVAR(mapShake) {
category = CSTRING(Module_DisplayName);
value = 1;
typeName = "BOOL";
displayName = CSTRING(MapShake_DisplayName);
description = CSTRING(MapShake_Description);
};
class GVAR(mapLimitZoom) {
category = CSTRING(Module_DisplayName);
value = 0;
typeName = "BOOL";
displayName = CSTRING(MapLimitZoom_DisplayName);
description = CSTRING(MapLimitZoom_Description);
};
class GVAR(mapShowCursorCoordinates) {
category = CSTRING(Module_DisplayName);
value = 0;
typeName = "BOOL";
displayName = CSTRING(MapShowCursorCoordinates_DisplayName);
description = CSTRING(MapShowCursorCoordinates_Description);
};
class GVAR(DefaultChannel) {
category = CSTRING(Module_DisplayName);
value = -1;
typeName = "SCALAR";
displayName = CSTRING(DefaultChannel_DisplayName);

View File

@ -104,9 +104,15 @@ class CfgVehicles {
typeName = "BOOL";
defaultValue = 0;
};
class ShowPlayerNames {
displayName = CSTRING(BFT_ShowPlayerNames_DisplayName);
description = CSTRING(BFT_ShowPlayerNames_Description);
typeName = "BOOL";
defaultValue = 0;
};
};
class ModuleDescription {
description = CSTRING(BFT_Module_Description);
};
};
};
};

View File

@ -29,7 +29,7 @@ class Tree {
class Legend {
x = SafeZoneX+SafeZoneW-.340;
y = SafeZoneY+SafeZoneH-.152;
font = "PuristaMedium";
font = "RobotoCondensed";
w = .340;
h = .152;
sizeEx = 0.039210;

View File

@ -18,5 +18,6 @@ params ["_logic"];
[_logic, QGVAR(BFT_Enabled), "Enabled"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(BFT_Interval), "Interval"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(BFT_HideAiGroups), "HideAiGroups"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(BFT_ShowPlayerNames), "ShowPlayerNames"] call EFUNC(common,readSettingFromModule);
ACE_LOGINFO_3("Blue Force Tracking Module Initialized:", GVAR(BFT_Enabled), GVAR(BFT_Interval), GVAR(BFT_HideAiGroups));

View File

@ -2,7 +2,7 @@
#include "script_component.hpp"
// BEGIN_COUNTER(blueForceTrackingUpdate);
private ["_groupsToDrawMarkers", "_playerSide", "_anyPlayers", "_colour", "_marker"];
private ["_groupsToDrawMarkers", "_playersToDrawMarkers", "_playerSide", "_anyPlayers", "_colour", "_marker"];
// Delete last set of markers (always)
{
@ -26,6 +26,28 @@ if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then {
};
};
if (GVAR(BFT_ShowPlayerNames)) then {
_playersToDrawMarkers = allPlayers select {side _x == _playerSide};
{
private _markerType = [_x] call EFUNC(common,getMarkerType);
private _colour = format ["Color%1", side _x];
private _marker = createMarkerLocal [format ["ACE_BFT_%1", _forEachIndex], [(getPos leader _x) select 0, (getPos leader _x) select 1]];
_marker setMarkerTypeLocal _markerType;
_marker setMarkerColorLocal _colour;
_marker setMarkerTextLocal (name _x);
GVAR(BFT_markers) pushBack _marker;
} forEach _playersToDrawMarkers;
_groupsToDrawMarkers = _groupsToDrawMarkers select {
{
!(_x call EFUNC(common,isPlayer));
} count units _x > 0;
};
};
{
private _markerType = [_x] call EFUNC(common,getMarkerType);
private _colour = format ["Color%1", side _x];
@ -33,7 +55,7 @@ if (GVAR(BFT_Enabled) and {(!isNil "ACE_player") and {alive ACE_player}}) then {
private _marker = createMarkerLocal [format ["ACE_BFT_%1", _forEachIndex], [(getPos leader _x) select 0, (getPos leader _x) select 1]];
_marker setMarkerTypeLocal _markerType;
_marker setMarkerColorLocal _colour;
_marker setMarkerTextLocal (groupID _x);
_marker setMarkerTextLocal (groupId _x);
GVAR(BFT_markers) pushBack _marker;
} forEach _groupsToDrawMarkers;

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