mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
how do I merge
This commit is contained in:
commit
bd168981e2
@ -30,6 +30,7 @@ ACCtomeek <tomeek99@gmail.com>
|
||||
Adanteh
|
||||
aeroson
|
||||
Aggr094 <bastards4glory@gmail.com>
|
||||
Anthariel <Contact@storm-simulation.com>
|
||||
BlackQwar
|
||||
Brakoviejo
|
||||
Codingboy
|
||||
@ -51,6 +52,7 @@ havena <silveredenis@gmail.com>
|
||||
Hawkins
|
||||
jokoho48
|
||||
Jonpas <jonpas33@gmail.com>
|
||||
Kllrt <kllrtik@gmail.com>
|
||||
Legolasindar "Viper" <legolasindar@gmail.com>
|
||||
licht-im-Norden87 <lichtimnorden87@gmail.com>
|
||||
MarcBook
|
||||
@ -69,3 +71,6 @@ Tourorist <tourorist@gmail.com>
|
||||
Valentin Torikian <valentin.torikian@gmail.com>
|
||||
zGuba
|
||||
Aleksey EpMAK Yermakov <epmak777@gmail.com>
|
||||
ruPaladin <happyworm24@rambler.ru>
|
||||
BlackPixxel
|
||||
Asgar Serran <piechottaf@web.de>
|
||||
|
@ -574,4 +574,198 @@ class CfgWeapons {
|
||||
maxRange = 1200; //1000;
|
||||
};
|
||||
};
|
||||
|
||||
// marksmen marksmen
|
||||
class DMR_03_base_F: Rifle_Long_Base_F {
|
||||
modes[] += {"ACE_Burst_far"};
|
||||
|
||||
class Single: Mode_SemiAuto {
|
||||
minRange = 120; // 2;
|
||||
minRangeProbab = 0.7; // 0.3;
|
||||
midRangeProbab = 0.3; // 0.7;
|
||||
};
|
||||
|
||||
class FullAuto;
|
||||
|
||||
class single_close_optics1: Single {
|
||||
minRange = 120; // 2;
|
||||
minRangeProbab = 0.8; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.8;
|
||||
};
|
||||
|
||||
class single_medium_optics1: single_close_optics1 {
|
||||
minRangeProbab = 0.7; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.7;
|
||||
};
|
||||
|
||||
class single_far_optics1: single_medium_optics1 {
|
||||
minRange = 400; // 300;
|
||||
minRangeProbab = 0.5; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.5;
|
||||
};
|
||||
|
||||
class fullauto_medium: FullAuto {
|
||||
minRange = 20; // 2;
|
||||
maxRange = 150; // 100;
|
||||
burst = "3 + round random 5"; // 3;
|
||||
};
|
||||
|
||||
class ACE_Burst_far: fullauto_medium {
|
||||
aiRateOfFire = 2.0;
|
||||
aiRateOfFireDistance = 500;
|
||||
minRange = 400;
|
||||
minRangeProbab = 0.1;
|
||||
midRange = 500;
|
||||
midRangeProbab = 0.2;
|
||||
maxRange = 600;
|
||||
maxRangeProbab = 0.2;
|
||||
burst = "2 + round random 3";
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_05_base_F: Rifle_Long_Base_F {
|
||||
modes[] += {"ACE_Burst_far"};
|
||||
|
||||
class Single: Mode_SemiAuto {
|
||||
minRange = 120; // 2;
|
||||
minRangeProbab = 0.7; // 0.3;
|
||||
midRangeProbab = 0.3; // 0.7;
|
||||
};
|
||||
|
||||
class FullAuto;
|
||||
|
||||
class single_close_optics1: Single {
|
||||
minRange = 120; // 2;
|
||||
minRangeProbab = 0.8; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.8;
|
||||
};
|
||||
|
||||
class single_medium_optics1: single_close_optics1 {
|
||||
minRangeProbab = 0.7; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.7;
|
||||
};
|
||||
|
||||
class single_far_optics1: single_medium_optics1 {
|
||||
minRange = 400; // 300;
|
||||
minRangeProbab = 0.5; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.5;
|
||||
};
|
||||
|
||||
class fullauto_medium: FullAuto {
|
||||
minRange = 20; // 2;
|
||||
maxRange = 150; // 100;
|
||||
burst = "3 + round random 5"; // 3;
|
||||
};
|
||||
|
||||
class ACE_Burst_far: fullauto_medium {
|
||||
aiRateOfFire = 2.0;
|
||||
aiRateOfFireDistance = 500;
|
||||
minRange = 400;
|
||||
minRangeProbab = 0.1;
|
||||
midRange = 500;
|
||||
midRangeProbab = 0.2;
|
||||
maxRange = 600;
|
||||
maxRangeProbab = 0.2;
|
||||
burst = "2 + round random 3";
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_06_base_F: Rifle_Long_Base_F {
|
||||
modes[] += {"ACE_Burst_far"};
|
||||
|
||||
class Single: Mode_SemiAuto {
|
||||
minRange = 120; // 2;
|
||||
minRangeProbab = 0.7; // 0.3;
|
||||
midRangeProbab = 0.3; // 0.7;
|
||||
};
|
||||
|
||||
class FullAuto;
|
||||
|
||||
class single_close_optics1: Single {
|
||||
minRange = 120; // 2;
|
||||
minRangeProbab = 0.8; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.8;
|
||||
};
|
||||
|
||||
class single_medium_optics1: single_close_optics1 {
|
||||
minRangeProbab = 0.7; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.7;
|
||||
};
|
||||
|
||||
class single_far_optics1: single_medium_optics1 {
|
||||
minRange = 400; // 300;
|
||||
minRangeProbab = 0.5; // 0.05;
|
||||
midRangeProbab = 0.05; // 0.5;
|
||||
};
|
||||
|
||||
class fullauto_medium: FullAuto {
|
||||
minRange = 20; // 2;
|
||||
maxRange = 150; // 100;
|
||||
burst = "3 + round random 5"; // 3;
|
||||
};
|
||||
|
||||
class ACE_Burst_far: fullauto_medium {
|
||||
aiRateOfFire = 2.0;
|
||||
aiRateOfFireDistance = 500;
|
||||
minRange = 400;
|
||||
minRangeProbab = 0.1;
|
||||
midRange = 500;
|
||||
midRangeProbab = 0.2;
|
||||
maxRange = 600;
|
||||
maxRangeProbab = 0.2;
|
||||
burst = "2 + round random 3";
|
||||
};
|
||||
};
|
||||
|
||||
// marksmen medium mg
|
||||
class MMG_01_base_F: Rifle_Long_Base_F {
|
||||
aiDispersionCoefY = 25.0;
|
||||
aiDispersionCoefX = 20.0;
|
||||
modes[] += {"ACE_Burst_far"};
|
||||
|
||||
class manual;
|
||||
class burst;
|
||||
class close;
|
||||
class short;
|
||||
class medium;
|
||||
class ACE_Burst_far: medium {
|
||||
aiRateOfFire = 6.0;
|
||||
aiRateOfFireDistance = 900;
|
||||
minRange = 700;
|
||||
minRangeProbab = 0.1;
|
||||
midRange = 900;
|
||||
midRangeProbab = 0.2;
|
||||
maxRange = 1100;
|
||||
maxRangeProbab = 0.2;
|
||||
burst = "3 + round random 5";
|
||||
};
|
||||
|
||||
class far_optic1;
|
||||
class far_optic2;
|
||||
};
|
||||
|
||||
class MMG_02_base_F: Rifle_Long_Base_F {
|
||||
aiDispersionCoefY = 20.0;
|
||||
aiDispersionCoefX = 15.0;
|
||||
modes[] += {"ACE_Burst_far"};
|
||||
|
||||
class manual;
|
||||
class close;
|
||||
class short;
|
||||
class medium;
|
||||
class ACE_Burst_far: medium {
|
||||
aiRateOfFire = 6.0;
|
||||
aiRateOfFireDistance = 900;
|
||||
minRange = 700;
|
||||
minRangeProbab = 0.1;
|
||||
midRange = 900;
|
||||
midRangeProbab = 0.2;
|
||||
maxRange = 1100;
|
||||
maxRangeProbab = 0.2;
|
||||
burst = "3 + round random 5";
|
||||
};
|
||||
|
||||
class far_optic1;
|
||||
class far_optic2;
|
||||
};
|
||||
};
|
||||
|
@ -40,7 +40,7 @@
|
||||
<English>Close Cargo Door</English>
|
||||
<German>Laderampe schließen</German>
|
||||
<Spanish>Cerrar compuerta de carga</Spanish>
|
||||
<French>Fermer Rampe Cargo</French>
|
||||
<French>Fermer la Rampe du Cargo</French>
|
||||
<Polish>Zamknij drzwi ładowni</Polish>
|
||||
<Czech>Zavřít nákladní prostor</Czech>
|
||||
<Hungarian>Rámpát zárni</Hungarian>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Attach">
|
||||
<Key ID="STR_ACE_Attach_AttachDetach">
|
||||
@ -44,7 +43,7 @@
|
||||
<Spanish>Marcador IR acoplado</Spanish>
|
||||
<Polish>Przyczepiono stroboskop IR</Polish>
|
||||
<French>Strobe IR attaché</French>
|
||||
<Czech>IR Značkovač Připnutý</Czech>
|
||||
<Czech>IR Značkovač připnutý</Czech>
|
||||
<Portuguese>Marcador IV Acoplado</Portuguese>
|
||||
<Italian>Strobo IR attaccata</Italian>
|
||||
<Hungarian>Infravörös jeladó hozzácsatolva</Hungarian>
|
||||
@ -56,7 +55,7 @@
|
||||
<Spanish>Marcador IR quitado</Spanish>
|
||||
<Polish>Odczepiono stroboskop IR</Polish>
|
||||
<French>Strobe IR détaché</French>
|
||||
<Czech>IR Značkovač Odepnutý</Czech>
|
||||
<Czech>IR Značkovač odepnutý</Czech>
|
||||
<Portuguese>Marcador IV Separado</Portuguese>
|
||||
<Italian>Strobo IR staccata</Italian>
|
||||
<Hungarian>Infravörös jeladó lecsatolva</Hungarian>
|
||||
@ -68,7 +67,7 @@
|
||||
<Spanish>Granada IR acoplada</Spanish>
|
||||
<Polish>Przyczepiono granat IR</Polish>
|
||||
<French>Grenade IR attachée</French>
|
||||
<Czech>IR Granát Připnutý</Czech>
|
||||
<Czech>IR Granát připnutý</Czech>
|
||||
<Portuguese>Granada IV Acoplada</Portuguese>
|
||||
<Italian>Granata IR attaccata</Italian>
|
||||
<Hungarian>Infravörös gránát hozzácsatolva</Hungarian>
|
||||
@ -80,7 +79,7 @@
|
||||
<Spanish>Granada IR quitada</Spanish>
|
||||
<Polish>Odczepiono granat IR</Polish>
|
||||
<French>Grenade IR détachée</French>
|
||||
<Czech>IR Granát Odepnutý</Czech>
|
||||
<Czech>IR Granát odepnutý</Czech>
|
||||
<Portuguese>Granada IV Separada</Portuguese>
|
||||
<Italian>Granata IR staccata</Italian>
|
||||
<Hungarian>Infravörös gránát lecsatolva</Hungarian>
|
||||
@ -92,7 +91,7 @@
|
||||
<Spanish>Barra de luz acoplada</Spanish>
|
||||
<Polish>Przyczepiono światło chemiczne</Polish>
|
||||
<French>Chemlight attaché</French>
|
||||
<Czech>Chemické světlo Připnuto</Czech>
|
||||
<Czech>Chemické světlo připnuto</Czech>
|
||||
<Portuguese>Chemlight Acoplada</Portuguese>
|
||||
<Italian>Chemlight attaccata</Italian>
|
||||
<Hungarian>Chemlight hozzácsatolva</Hungarian>
|
||||
@ -104,7 +103,7 @@
|
||||
<Spanish>Barra de luz quitada</Spanish>
|
||||
<Polish>Odczepiono światło chemiczne</Polish>
|
||||
<French>Chemlight détaché</French>
|
||||
<Czech>Chemické světlo Odepnuto</Czech>
|
||||
<Czech>Chemické světlo odepnuto</Czech>
|
||||
<Portuguese>Chemlight Separada</Portuguese>
|
||||
<Italian>Chemlight staccata</Italian>
|
||||
<Hungarian>Chemlight hozzácsatolva</Hungarian>
|
||||
@ -172,10 +171,12 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Attach_Failed">
|
||||
<English>Attach Failed</English>
|
||||
<French>Échec du Attacher</French>
|
||||
<French>Échec de l'attachement</French>
|
||||
<German>Befestigen fehlgeschlagen</German>
|
||||
<Russian>Соединение прервано</Russian>
|
||||
<Spanish>Error al acoplar</Spanish>
|
||||
<Czech>Připnutí selhalo</Czech>
|
||||
<Polish>Przyczepianie nie powiodło się</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -18,6 +18,8 @@
|
||||
|
||||
PARAMS_2(_unit,_newSurrenderState);
|
||||
|
||||
if (currentWeapon _unit != "") exitWith {false};
|
||||
|
||||
private "_returnValue";
|
||||
|
||||
_returnValue = if (_newSurrenderState) then {
|
||||
|
@ -54,7 +54,7 @@ if (_state) then {
|
||||
PARAMS_2(_unit,_newAnimation);
|
||||
if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
|
||||
ERROR("Handcuff animation interrupted");
|
||||
systemChat format ["debug %2: new %1", _newAnimation, time];
|
||||
// systemChat format ["debug %2: new %1", _newAnimation, time];
|
||||
[_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation);
|
||||
};
|
||||
}];
|
||||
|
@ -52,7 +52,7 @@ if (_state) then {
|
||||
PARAMS_2(_unit,_newAnimation);
|
||||
if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then {
|
||||
ERROR("Surrender animation interrupted");
|
||||
systemChat format ["debug %2: new %1", _newAnimation, time];
|
||||
// systemChat format ["debug %2: new %1", _newAnimation, time];
|
||||
[_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation);
|
||||
};
|
||||
}];
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Captives">
|
||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||
@ -132,33 +131,48 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_StartSurrendering">
|
||||
<English>Surrender</English>
|
||||
<French>Se rendre</French>
|
||||
<German>Kapitulieren</German>
|
||||
<Spanish>Rendirse</Spanish>
|
||||
<Russian>Сдаться</Russian>
|
||||
<Czech>Vzdát se</Czech>
|
||||
<Polish>Poddaj się</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_StopSurrendering">
|
||||
<English>Stop Surrendering</English>
|
||||
<French>Arrêt de se rendre</French>
|
||||
<German>Den Kampf erneut aufnehmen</German>
|
||||
<Spanish>Dejar de rendirse</Spanish>
|
||||
<Russian>Остановить сдачу</Russian>
|
||||
<Czech>Přestat se vzdávat</Czech>
|
||||
<Polish>Podejmij walkę ponownie</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_Zeus_OnlyAlive">
|
||||
<English>Only use on alive units</English>
|
||||
<French>Utilisation uniquement sur les unités en vie</French>
|
||||
<German>Nur bei lebenden Einheiten verwendbar</German>
|
||||
<Spanish>Utilizar solo en unidades vivas</Spanish>
|
||||
<Russian>Только для живых юнитов</Russian>
|
||||
<Czech>Použitelné jen na živé jednotky</Czech>
|
||||
<Polish>Używaj tylko na żywych jednostkach</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_Zeus_OnlyInfantry">
|
||||
<English>Only use on dismounted inf</English>
|
||||
<French>Utilisation uniquement sur les infanteries</French>
|
||||
<German>Nur bei abgesessener Infanterie verwendbar</German>
|
||||
<Spanish>Utilizar solo en infanteria desmontada</Spanish>
|
||||
<Russian>Только для спеш. солдат</Russian>
|
||||
<Czech>Použitelné jen na pěsích jednotkách</Czech>
|
||||
<Polish>Używaj tylko na piechocie poza wszelkimi pojazdami</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_Zeus_NothingSelected">
|
||||
<English>Nothing under mouse</English>
|
||||
<French>Rien sous la souris</French>
|
||||
<German>Es wurde nichts ausgewählt</German>
|
||||
<Spanish>Nada bajo el ratón</Spanish>
|
||||
<Russian>Объекты под мышью отсутствуют</Russian>
|
||||
<Czech>Nic není vybráno</Czech>
|
||||
<Polish>Nie ma nic pod kursorem</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -26,6 +26,9 @@ class Extended_InitPost_EventHandlers {
|
||||
class GVAR(forceWalk) {
|
||||
init = QUOTE(if (local (_this select 0)) then {_this call FUNC(applyForceWalkStatus);};);
|
||||
};
|
||||
class GVAR(muteUnit) {
|
||||
init = QUOTE(_this call FUNC(muteUnitHandleInitPost));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -41,4 +44,9 @@ class Extended_Respawn_EventHandlers {
|
||||
respawn = QUOTE(_this call FUNC(resetAllDefaults));
|
||||
};
|
||||
};
|
||||
class CAManBase {
|
||||
class GVAR(muteUnit) {
|
||||
respawn = QUOTE(_this call FUNC(muteUnitHandleRespawn));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -35,6 +35,7 @@ if (hasInterface) then {
|
||||
|
||||
["setDir", {(_this select 0) setDir (_this select 1)}] call FUNC(addEventhandler);
|
||||
["setFuel", {(_this select 0) setFuel (_this select 1)}] call FUNC(addEventhandler);
|
||||
["setSpeaker", {(_this select 0) setSpeaker (_this select 1)}] call FUNC(addEventhandler);
|
||||
|
||||
// hack to get PFH to work in briefing
|
||||
[QGVAR(onBriefingPFH), "onEachFrame", {
|
||||
|
@ -124,6 +124,8 @@ PREP(moduleCheckPBOs);
|
||||
PREP(moduleLSDVehicles);
|
||||
PREP(moveToTempGroup);
|
||||
PREP(muteUnit);
|
||||
PREP(muteUnitHandleInitPost);
|
||||
PREP(muteUnitHandleRespawn);
|
||||
PREP(numberToDigits);
|
||||
PREP(numberToDigitsString);
|
||||
PREP(numberToString);
|
||||
|
@ -4,9 +4,10 @@
|
||||
* or places it in a weaponHolder if no space.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit (OBJECT)
|
||||
* 1: Classname (String)
|
||||
* 2: Container (String, Optional) uniform, vest, backpack
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Classname <STRING>
|
||||
* 2: Container (uniform, vest, backpack) <STRING><OPTIONAL>
|
||||
* 3: Magazine Ammo Count <NUMBER><OPTIONAL>
|
||||
*
|
||||
* Return Value:
|
||||
* Array:
|
||||
@ -19,31 +20,23 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
EXPLODE_2_PVT(_this,_unit,_classname);
|
||||
DEFAULT_PARAM(2,_container,"");
|
||||
DEFAULT_PARAM(3,_ammoCount,-1);
|
||||
|
||||
private "_addedToPlayer";
|
||||
private "_container";
|
||||
private "_canAdd";
|
||||
private "_type";
|
||||
|
||||
_canAdd = false;
|
||||
_addedToPlayer = true;
|
||||
|
||||
if((count _this) > 2) then {
|
||||
_container = _this select 2;
|
||||
} else {
|
||||
_container = nil;
|
||||
};
|
||||
|
||||
_type = [_classname] call EFUNC(common,getItemType);
|
||||
|
||||
if(!isNil "_container") then {
|
||||
switch (_container) do {
|
||||
case "vest": { _canAdd = _unit canAddItemToVest _classname; };
|
||||
case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; };
|
||||
case "uniform": { _canAdd = _unit canAddItemToUniform _classname; };
|
||||
};
|
||||
} else {
|
||||
_container = "";
|
||||
_canAdd = _unit canAdd _classname;
|
||||
default {_canAdd = _unit canAdd _classname;};
|
||||
};
|
||||
|
||||
switch ((_type select 0)) do {
|
||||
@ -64,18 +57,19 @@ switch ((_type select 0)) do {
|
||||
};
|
||||
};
|
||||
case "magazine": {
|
||||
if (_ammoCount == -1) then {_ammoCount = getNumber (configFile >> "CfgMagazines" >> _classname >> "count");};
|
||||
if (_canAdd) then {
|
||||
switch (_container) do {
|
||||
case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, 1]; };
|
||||
case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, 1]; };
|
||||
case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, 1]; };
|
||||
default { _unit addMagazineGlobal _classname; };
|
||||
case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; };
|
||||
case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; };
|
||||
case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; };
|
||||
default {_unit addMagazine [_classname, _ammoCount]; };
|
||||
};
|
||||
} else {
|
||||
_addedToPlayer = false;
|
||||
_pos = _unit modelToWorldVisual [0,1,0.05];
|
||||
_unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"];
|
||||
_unit addMagazineCargoGlobal [_classname, 1];
|
||||
_unit addMagazineCargoGlobal [_classname, _ammoCount];
|
||||
_unit setPosATL _pos;
|
||||
};
|
||||
};
|
||||
|
@ -5,21 +5,34 @@
|
||||
*
|
||||
* Argument:
|
||||
* 0: Unit (Object)
|
||||
* 1: Reason to mute the unit (String)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_speaker"];
|
||||
private ["_unit", "_reason"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_reason = _this select 1;
|
||||
|
||||
if (isNull _unit) exitWith {};
|
||||
|
||||
// add reason to mute to the unit
|
||||
private "_muteUnitReasons";
|
||||
_muteUnitReasons = _unit getVariable [QGVAR(muteUnitReasons), []];
|
||||
|
||||
if !(_reason in _muteUnitReasons) then {
|
||||
_muteUnitReasons pushBack _reason;
|
||||
_unit setVariable [QGVAR(muteUnitReasons), _muteUnitReasons, true];
|
||||
};
|
||||
|
||||
private "_speaker";
|
||||
_speaker = speaker _unit;
|
||||
|
||||
if (_speaker == "ACE_NoVoice") exitWith {};
|
||||
|
||||
[0, "{(_this select 1) setSpeaker 'ACE_NoVoice'}", _unit, "ACE_Speaker"] call FUNC(execPersistentFnc);
|
||||
["setSpeaker", [_unit, "ACE_NoVoice"]] call FUNC(globalEvent);
|
||||
|
||||
_unit setVariable ["ACE_OriginalSpeaker", _speaker, true];
|
||||
|
11
addons/common/functions/fnc_muteUnitHandleInitPost.sqf
Normal file
11
addons/common/functions/fnc_muteUnitHandleInitPost.sqf
Normal file
@ -0,0 +1,11 @@
|
||||
// by commy2
|
||||
#include "script_component.hpp"
|
||||
|
||||
private "_unit";
|
||||
|
||||
_unit = _this select 0;
|
||||
|
||||
// setSpeaker gets overwritten after init on remote units; if unit is muted, setSpeaker again
|
||||
if (count (_unit getVariable [QGVAR(muteUnitReasons), []]) > 0) then {
|
||||
["setSpeaker", [_unit, "ACE_NoVoice"]] call FUNC(localEvent);
|
||||
};
|
12
addons/common/functions/fnc_muteUnitHandleRespawn.sqf
Normal file
12
addons/common/functions/fnc_muteUnitHandleRespawn.sqf
Normal file
@ -0,0 +1,12 @@
|
||||
// by commy2
|
||||
#include "script_component.hpp"
|
||||
|
||||
private "_unit";
|
||||
|
||||
_unit = _this select 0;
|
||||
|
||||
// setVariable is broken on JIP after respawn
|
||||
_unit setVariable [QGVAR(muteUnitReasons), _unit getVariable [QGVAR(muteUnitReasons), []], true];
|
||||
|
||||
// fix mp issues with respawning and the speaker
|
||||
["setSpeaker", [_unit, speaker _unit]] call FUNC(globalEvent);
|
@ -23,6 +23,3 @@ _respawnVariables pushBack "ACE_PersistentFunctions";
|
||||
{
|
||||
_unit setVariable [_x, _unit getVariable _x, true];
|
||||
} forEach _respawnVariables;
|
||||
|
||||
// fix speaker after respawn
|
||||
[_unit, format ["{_this setSpeaker '%1'}", speaker _unit], 2] call FUNC(execRemoteFnc);
|
||||
|
@ -1,23 +1,39 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
*
|
||||
* Unmutes the unit.
|
||||
* Unmutes the unit. Only unmutes if the last reason was removed.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Unit (Object)
|
||||
* 1: Reason to unmute the unit. (String)
|
||||
*
|
||||
* Return value:
|
||||
* Nothing
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_speaker"];
|
||||
private ["_unit", "_reason"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_reason = _this select 1;
|
||||
|
||||
if (isNull _unit) exitWith {};
|
||||
|
||||
// remove reason to mute to the unit
|
||||
private "_muteUnitReasons";
|
||||
_muteUnitReasons = _unit getVariable [QGVAR(muteUnitReasons), []];
|
||||
|
||||
if (_reason in _muteUnitReasons) then {
|
||||
_muteUnitReasons deleteAt (_muteUnitReasons find _reason);
|
||||
_unit setVariable [QGVAR(muteUnitReasons), _muteUnitReasons, true];
|
||||
};
|
||||
|
||||
// don't unmute if there is another mute reason!
|
||||
if (count _muteUnitReasons > 0) exitWith {};
|
||||
|
||||
private "_speaker";
|
||||
_speaker = _unit getVariable ["ACE_OriginalSpeaker", ""];
|
||||
|
||||
if (_speaker == "") exitWith {};
|
||||
|
||||
[0, format ["{(_this select 1) setSpeaker '%1'}", _speaker], _unit, "ACE_Speaker"] call FUNC(execPersistentFnc);
|
||||
["setSpeaker", _unit, [_unit, _speaker]] call FUNC(targetEvent);
|
||||
|
@ -42,8 +42,8 @@
|
||||
<English>ACE Options</English>
|
||||
<German>ACE Optionen</German>
|
||||
<Spanish>Opciones ACE</Spanish>
|
||||
<Polish>Opcje ACE</Polish>
|
||||
<Czech>ACE Nastavení</Czech>
|
||||
<Polish>Ustawienia ACE</Polish>
|
||||
<Czech>Nastavení ACE</Czech>
|
||||
<French>ACE Options</French>
|
||||
<Russian>ACE Настройки</Russian>
|
||||
<Portuguese>Opções do ACE</Portuguese>
|
||||
@ -248,7 +248,7 @@
|
||||
<German>Aktion abgebrochen.</German>
|
||||
<Spanish>Acción cancelada.</Spanish>
|
||||
<Polish>Przerwano czynność</Polish>
|
||||
<Czech>Akce přerušena</Czech>
|
||||
<Czech>Akce přerušena.</Czech>
|
||||
<French>Action annulée.</French>
|
||||
<Russian>Действие отменено.</Russian>
|
||||
<Portuguese>Ação cancelada.</Portuguese>
|
||||
@ -304,6 +304,7 @@
|
||||
<German>Anfrage akzeptieren</German>
|
||||
<Spanish>Aceptar peticiones</Spanish>
|
||||
<Polish>Akceptuj prośby</Polish>
|
||||
<Czech>Přijmout žádost</Czech>
|
||||
<Italian>Accetta Richieste</Italian>
|
||||
<Russian>Подтвердить запросы</Russian>
|
||||
</Key>
|
||||
@ -312,6 +313,7 @@
|
||||
<German>Anfrage ablehnen</German>
|
||||
<Spanish>Rechazar peticiones</Spanish>
|
||||
<Polish>Ignoruj prośby</Polish>
|
||||
<Czech>Zamítnout žádost</Czech>
|
||||
<Italian>Rifiuta Richieste</Italian>
|
||||
<Russian>Отклонить запросы</Russian>
|
||||
</Key>
|
||||
@ -337,6 +339,8 @@
|
||||
<Spanish>Iconos de respuesta</Spanish>
|
||||
<Italian>Icone informative</Italian>
|
||||
<Russian>Иконки состояний</Russian>
|
||||
<Polish>Ikony pomocnicze</Polish>
|
||||
<French>Icônes de Feedback</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingFeedbackIconsDesc">
|
||||
<English>Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed.</English>
|
||||
@ -344,6 +348,8 @@
|
||||
<Spanish>Seleccionar la posición de o desactivar los íconos de respuesta en la pantalla. Estos iconos se mostrarán para proporcionar información adicional sobre el estado de su personaje y las acciones a realizar.</Spanish>
|
||||
<Italian>Seleziona la posizione o disabilita le icone informative sul tuo schermo. Queste saranno mostrate per fornire informazioni aggiuntive sullo stato o sulle azioni del giocatore.</Italian>
|
||||
<Russian>Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях.</Russian>
|
||||
<Polish>Ustaw pozycję lub wyłącz całkowicie ikony pomocnicze na ekranie. Te ikony dostarczają dodatkowych informacji na temat statusu Twojej postaci i wykonywanych przez nią akcji.</Polish>
|
||||
<French>Sélectionner la position de ou désactiver les îcones de feedback sur votre écran. Ces îcones sont là pour vous fournir un feedback du statut votre personnage et les actions à effectuer.</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
|
||||
<English>Progress bar location</English>
|
||||
@ -351,6 +357,8 @@
|
||||
<Spanish>Ubicación de la barra de progreso</Spanish>
|
||||
<Italian>Posizione della barra di avanzamento</Italian>
|
||||
<Russian>Положение прогресс-бара</Russian>
|
||||
<Polish>Lokalizacja paska postępu</Polish>
|
||||
<French>Localisation de la barre de progression</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingProgressbarLocationDesc">
|
||||
<English>Set the desired location of the progress bar on your screen.</English>
|
||||
@ -358,6 +366,8 @@
|
||||
<Spanish>Seleccionar la ubicación deseada de la barra de progreso en tu pantalla</Spanish>
|
||||
<Italian>Modifica la posizione su schermo della barra di avanzamento.</Italian>
|
||||
<Russian>Установите желаемое положение строки состояния на экране.</Russian>
|
||||
<Polish>Ustaw pożądaną lokalizację paska postępu na ekranie</Polish>
|
||||
<French>Définisez l'endroit que vous désirez pour faire appraître la barre de progression.</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorName">
|
||||
<English>Hint Background color</English>
|
||||
@ -365,6 +375,8 @@
|
||||
<Spanish>Color de fondo de las notificaciones</Spanish>
|
||||
<Italian>Sfondo dei Suggerimenti</Italian>
|
||||
<Russian>Цвет фона всплывающих подсказок</Russian>
|
||||
<Polish>Kolor tła powiadomień</Polish>
|
||||
<French>Couleur de fond des astuces</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextColorDesc">
|
||||
<English>The color of the background from the ACE hints.</English>
|
||||
@ -372,6 +384,8 @@
|
||||
<Spanish>El color de fondo de las notificaciones del ACE</Spanish>
|
||||
<Italian>Il colore di sfondo dei suggerimenti dell'ACE.</Italian>
|
||||
<Russian>Цвет фона всплывающий подсказок АСЕ.</Russian>
|
||||
<Polish>Kolor tła dla powiadomień ACE</Polish>
|
||||
<French>Définisez la couleur de fond pour les astuces fournies par ACE.</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorName">
|
||||
<English>Hint text font color</English>
|
||||
@ -379,6 +393,8 @@
|
||||
<Spanish>Color del texto de las notificaciones</Spanish>
|
||||
<Italian>Testo dei Suggerimenti</Italian>
|
||||
<Russian>Цвет шрифта всплывающих подсказок</Russian>
|
||||
<Polish>Kolor tekstu powiadomień</Polish>
|
||||
<French>Couleur du texte des astuces</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingDisplayTextFontColorDesc">
|
||||
<English>The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified.</English>
|
||||
@ -386,20 +402,28 @@
|
||||
<Spanish>El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado.</Spanish>
|
||||
<Italian>Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato.</Italian>
|
||||
<Russian>Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок.</Russian>
|
||||
<Polish>Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru.</Polish>
|
||||
<French>Définisez la couleur du texte des astuces fournies par ACE. La couleur est celle par défaut affichée à travers toutes les astuces de ACE seulement si aucune couleur n'est défnie.</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_bananaDisplayName">
|
||||
<English>Banana</English>
|
||||
<German>Banane</German>
|
||||
<Spanish>Banana</Spanish>
|
||||
<Czech>Banán</Czech>
|
||||
<Italian>Banana</Italian>
|
||||
<Russian>Банан</Russian>
|
||||
<Polish>Banan</Polish>
|
||||
<French>Banane</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_bananaDescr">
|
||||
<English>A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa.</English>
|
||||
<German>Die Banane ist eine essbare Frucht, biologisch betrachtet jedoch eine Beere. Sie wächst an unterschiedlichen, krautartigen Gewächsen aus der Familie der Musa.</German>
|
||||
<Spanish>Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa.</Spanish>
|
||||
<Czech>Banán je protáhlé ovoce a plod banánovníku (epigeická bobule).</Czech>
|
||||
<Italian>Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae.</Italian>
|
||||
<Russian>Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa).</Russian>
|
||||
<Polish>Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków.<br />Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii.<br />Część gatunków dostarcza jadalnych owoców. Słowo banan pochodzi prawdopodobnie od arabskiego słowa banan, co oznacza palec, lub afrykańskiego języka wolof, w którym rośliny te określa się mianem banaana.</Polish>
|
||||
<French>Une banane est un fruit comestible, botaniquement une baie, produite par plusieurs types de grandes plantes herbacées à fleurs dans le genre Musa.</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -8,7 +8,7 @@ class CfgVehicles {
|
||||
distance = 3.5;
|
||||
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canPlayerDisarmUnit));
|
||||
statement = QUOTE([ARR_2(_player,_target)] call FUNC(openDisarmDialog));
|
||||
icon = "\a3\Modules_F_Curator\Data\portraitRespawnInventory_ca.paa";
|
||||
icon = PATHTOF(UI\disarm.paa);
|
||||
exceptions[] = {};
|
||||
};
|
||||
};
|
||||
|
BIN
addons/disarming/UI/disarm.paa
Normal file
BIN
addons/disarming/UI/disarm.paa
Normal file
Binary file not shown.
@ -1,9 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-03-17 -->
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="Disarming">
|
||||
<Key ID="STR_ACE_Disarming_OpenInventory">
|
||||
<English>Open Inventory</English>
|
||||
<Polish>Otwórz ekwipunek</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2014-12-16 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Disposable">
|
||||
<Key ID="STR_ACE_Disposable_UsedTube">
|
||||
@ -7,7 +6,7 @@
|
||||
<German>Benutze Einwegwaffe</German>
|
||||
<French>Tube utilisé</French>
|
||||
<Czech>Použitý odpalovač</Czech>
|
||||
<Polish>Zużyta tuba</Polish>
|
||||
<Polish>Zużyta rura</Polish>
|
||||
<Spanish>Lanzador utilizado</Spanish>
|
||||
<Hungarian>Használt cső</Hungarian>
|
||||
<Russian>Отстрелянная труба</Russian>
|
||||
@ -17,7 +16,7 @@
|
||||
<German>Benutzter Einweg-Raketenwerfer</German>
|
||||
<French>Lance-roquette à usage unique utilisé</French>
|
||||
<Czech>Použitý raketomet</Czech>
|
||||
<Polish>Zużyta tuba granatnika jednorazowego użytku</Polish>
|
||||
<Polish>Zużyta rura granatnika jednorazowego użytku</Polish>
|
||||
<Spanish>Lanzador desechable utilizado</Spanish>
|
||||
<Hungarian>Használt rakétavető</Hungarian>
|
||||
<Russian>Отстрелянная одноразовая пусковая установка</Russian>
|
||||
@ -25,9 +24,9 @@
|
||||
<Key ID="STR_ACE_Disposable_PreloadedMissileDummy">
|
||||
<English>Preloaded Missile Dummy</English>
|
||||
<German>Vorgeladene Racketennachbildung</German>
|
||||
<French>Preloaded Missile Dummy</French>
|
||||
<Czech>Preloaded Missile Dummy</Czech>
|
||||
<Polish>Preloaded Missile Dummy</Polish>
|
||||
<French>Missile préchargé Dummy</French>
|
||||
<Czech>Přednabitá dummy střela</Czech>
|
||||
<Polish>Wstępnie załadowana atrapa pocisku</Polish>
|
||||
<Spanish>Preloaded Missile Dummy</Spanish>
|
||||
<Hungarian>Preloaded Missile Dummy</Hungarian>
|
||||
<Russian>Заряженная ракетная пустышка</Russian>
|
||||
|
@ -29,17 +29,13 @@
|
||||
<English>Item to heavy</English>
|
||||
<German>Gegenstand ist zu schwer</German>
|
||||
<Spanish>Articulo demasiado pesado</Spanish>
|
||||
<!-- <English>Unable to drag item due to weight</English>
|
||||
<Russian>Слишком тяжелый предмет</Russian>
|
||||
<Spanish>No se puede arrastrar el objeto debido a su peso</Spanish>
|
||||
<Polish>Nie można ciągnąć tego przedmiotu z powodu jego wagi</Polish>
|
||||
<Czech>Předmět je příliž těžký!</Czech>
|
||||
<French>Trop lourd pour être tracté</French>
|
||||
<German>Dieser Gegenstand kann nicht gezogen werden, da er zu schwer ist.</German>
|
||||
<Polish>Przedmiot zbyt ciężki</Polish>
|
||||
<French>Objet trop lourd</French>
|
||||
<Portuguese>Não é possível carregar o item devido a seu peso</Portuguese>
|
||||
<Italian>Non è possibile trascinare l'oggetto a causa del suo peso</Italian>
|
||||
<Hungarian>Túl nehéz ahhoz, hogy elhúzd</Hungarian> -->
|
||||
<Hungarian>Túl nehéz ahhoz, hogy elhúzd</Hungarian>
|
||||
<Russian>Слишком тяжело</Russian>
|
||||
<Czech>Moc težké</Czech>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Dragging_Carry">
|
||||
<English>Carry</English>
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="Explosives">
|
||||
<Key ID="STR_ACE_Explosives_Menu">
|
||||
@ -79,9 +80,9 @@
|
||||
<Spanish>+ Modificador, girar</Spanish>
|
||||
<French>+ Modificateur, tourner</French>
|
||||
<Italian>+ Modificatore, rotazione</Italian>
|
||||
<Czech>+ Otočit</Czech>
|
||||
<Czech>+ Modifikátor, otočit</Czech>
|
||||
<Hungarian>+ Változtatás, forgatás</Hungarian>
|
||||
<Polish>+ modyfikator, obracanie</Polish>
|
||||
<Polish>+ Modyfikator, obrót</Polish>
|
||||
<Portuguese>+ Modificador, rotaciona</Portuguese>
|
||||
<Russian>+ Bращать</Russian>
|
||||
</Key>
|
||||
@ -139,7 +140,7 @@
|
||||
<Spanish>Dispositivo de detonación M57</Spanish>
|
||||
<Polish>Zapalnik M57</Polish>
|
||||
<French>M57 Dispositif de mise à feu</French>
|
||||
<Czech>M57 Odpalovací Zařízení</Czech>
|
||||
<Czech>Odpalovací zařízení M57</Czech>
|
||||
<Italian>Detonatore M57</Italian>
|
||||
<Hungarian>M57 Detonátor</Hungarian>
|
||||
<Portuguese>M57 Dispositivo de Detonação</Portuguese>
|
||||
@ -151,7 +152,7 @@
|
||||
<Spanish>Usado para detonar remotamente explosivos</Spanish>
|
||||
<Polish>Używany do zdalnego detonowania ładunków wybuchowych</Polish>
|
||||
<French>Utilisé pour déclencher des explosifs à distance</French>
|
||||
<Czech>Použévané ke vzdálenému odpalování výbušnin</Czech>
|
||||
<Czech>Používané ke vzdálenému odpalování výbušnin</Czech>
|
||||
<Italian>Usato per l'attivazione a distanza degli esplosivi</Italian>
|
||||
<Hungarian>Robbanóanyagok távoli robbantásához</Hungarian>
|
||||
<Portuguese>Usado para acionar explosivos remotamente</Portuguese>
|
||||
@ -163,7 +164,7 @@
|
||||
<Spanish>Dispositivo de detonación MK26</Spanish>
|
||||
<Polish>Zapalnik M26</Polish>
|
||||
<French>M26 Dispositif de mise à feu</French>
|
||||
<Czech>M26 Odpalovací Zařízení</Czech>
|
||||
<Czech>Odpalovací zařízení M26</Czech>
|
||||
<Italian>Detonatore M26</Italian>
|
||||
<Hungarian>M26 Detonátor</Hungarian>
|
||||
<Portuguese>M26 Dispositivo de Detonação</Portuguese>
|
||||
@ -493,6 +494,9 @@
|
||||
<English>Pick up</English>
|
||||
<German>Aufheben</German>
|
||||
<Spanish>Recoger</Spanish>
|
||||
<Czech>Sebrat</Czech>
|
||||
<Polish>Podnieś</Polish>
|
||||
<French>Prendre</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -4,6 +4,8 @@ GVAR(enabled) = false;
|
||||
GVAR(time) = 0;
|
||||
GVAR(position) = [0,0,0];
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
#include "initKeybinds.sqf"
|
||||
|
||||
["infoDisplayChanged", {
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="FCS">
|
||||
<Key ID="STR_ACE_FCS_LaseTarget">
|
||||
@ -9,12 +8,6 @@
|
||||
<Polish>Naświetl cel / Zmierz odległość</Polish>
|
||||
<Czech>Označit cíl / Změřit vzdálenost</Czech>
|
||||
<Spanish>Iluminar objetivo / Medir distancia</Spanish>
|
||||
<!-- Outdated
|
||||
<Russian>Установить зероинг</Russian>
|
||||
<Hungarian>Lézeres célmegjelölés</Hungarian>
|
||||
<Portuguese>Marcar Alvo</Portuguese>
|
||||
<Italian>Designatore Laser</Italian>
|
||||
-->
|
||||
<Russian>Подсветить цель / Замерить расстояние</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_FCS_ZeroedTo">
|
||||
@ -32,7 +25,7 @@
|
||||
<Key ID="STR_ACE_FCS_AdjustRangeUp">
|
||||
<English>Adjust FCS Range (Up)</English>
|
||||
<German>Entfernung des FLS erhöhen</German>
|
||||
<Polish>Zwiększ zasięg FCS</Polish>
|
||||
<Polish>Zwiększ zasięg SKO</Polish>
|
||||
<Spanish>Ajustar distancia del FCS (arriba)</Spanish>
|
||||
<Czech>Nastavit FCS Náměr (nahoru)</Czech>
|
||||
<French>Augmenter la distance du SCT</French>
|
||||
@ -44,7 +37,7 @@
|
||||
<Key ID="STR_ACE_FCS_AdjustRangeDown">
|
||||
<English>Adjust FCS Range (Down)</English>
|
||||
<German>Entfernung des FLS verringern</German>
|
||||
<Polish>Zmniejsz zasięg FCS</Polish>
|
||||
<Polish>Zmniejsz zasięg SKO</Polish>
|
||||
<Spanish>Ajustar distancia del FCS (abajo)</Spanish>
|
||||
<Czech>Nastavit FCS Náměr (dolů)</Czech>
|
||||
<French>Réduire la distance du SCT</French>
|
||||
@ -58,7 +51,7 @@
|
||||
<German>FLS zurücksetzen</German>
|
||||
<Spanish>Reiniciar FCS</Spanish>
|
||||
<French>Réinitialiser le SCT</French>
|
||||
<Polish>Resetuj FCS</Polish>
|
||||
<Polish>Resetuj SKO</Polish>
|
||||
<Czech>Resetovat FCS</Czech>
|
||||
<Hungarian>FCS visszaállítása</Hungarian>
|
||||
<Portuguese>Reiniciar FCS</Portuguese>
|
||||
@ -70,7 +63,7 @@
|
||||
<German>FLS wurde zurückgesetzt.</German>
|
||||
<Spanish>FCS reiniciado</Spanish>
|
||||
<French>SCT réinitialisé.</French>
|
||||
<Polish>FCS został zresetowany.</Polish>
|
||||
<Polish>SKO został zresetowany.</Polish>
|
||||
<Czech>FCS byl resetován.</Czech>
|
||||
<Hungarian>Az FCS visszaállítva</Hungarian>
|
||||
<Portuguese>FCS reiniciado.</Portuguese>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2014-12-15 -->
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="FlashSuppressors">
|
||||
<Key ID="STR_ACE_muzzle_mzls_H">
|
||||
@ -8,8 +8,8 @@
|
||||
<German>Mündungsfeuerdämpfer (6,5 mm)</German>
|
||||
<Italian>Soppressore di fiamma (6.5mm)</Italian>
|
||||
<Portuguese>Supressor de Clarão (6,5mm)</Portuguese>
|
||||
<Polish>Tłumik płomieni (6,5 mm)</Polish>
|
||||
<Czech>Tlumič záblesku (6,5 mm)</Czech>
|
||||
<Polish>Tłumik płomienia (6,5 mm)</Polish>
|
||||
<Czech>Tlumič plamene (6,5 mm)</Czech>
|
||||
<French>Cache-flamme (6,5 mm)</French>
|
||||
<Russian>Пламегаситель (6,5 мм)</Russian>
|
||||
<Spanish>Supresor (6,5 mm)</Spanish>
|
||||
@ -20,8 +20,8 @@
|
||||
<German>Mündungsfeuerdämpfer (7,62 mm)</German>
|
||||
<Italian>Soppressore di fiamma (7.62mm)</Italian>
|
||||
<Portuguese>Supressor de Clarão (7,62mm)</Portuguese>
|
||||
<Polish>Tłumik płomieni (7,62 mm)</Polish>
|
||||
<Czech>Tlumič záblesku (7,62 mm)</Czech>
|
||||
<Polish>Tłumik płomienia (7,62 mm)</Polish>
|
||||
<Czech>Tlumič plamene (7,62 mm)</Czech>
|
||||
<French>Cache-flamme (7,62 mm)</French>
|
||||
<Russian>Пламегаситель (7,62 мм)</Russian>
|
||||
<Spanish>Supresor (7,62 mm)</Spanish>
|
||||
@ -32,8 +32,8 @@
|
||||
<German>Mündungsfeuerdämpfer (5,56 mm)</German>
|
||||
<Italian>Soppressore di fiamma (5.56mm)</Italian>
|
||||
<Portuguese>Supressor de Clarão (5,56mm)</Portuguese>
|
||||
<Polish>Tłumik płomieni (5,56 mm)</Polish>
|
||||
<Czech>Tlumič záblesku (5,56 mm)</Czech>
|
||||
<Polish>Tłumik płomienia (5,56 mm)</Polish>
|
||||
<Czech>Tlumič plamene (5,56 mm)</Czech>
|
||||
<French>Cache-flamme (5,56 mm)</French>
|
||||
<Russian>Пламегаситель (5,56 мм)</Russian>
|
||||
<Spanish>Supresor (5,56 mm)</Spanish>
|
||||
@ -44,8 +44,8 @@
|
||||
<German>Mündungsfeuerdämpfer (.45 ACP)</German>
|
||||
<Italian>Soppressore di fiamma (.45 ACP)</Italian>
|
||||
<Portuguese>Supressor de Clarão (.45 ACP)</Portuguese>
|
||||
<Polish>Tłumik płomieni (.45 ACP)</Polish>
|
||||
<Czech>Tlumič záblesku (.45 ACP)</Czech>
|
||||
<Polish>Tłumik płomienia (.45 ACP)</Polish>
|
||||
<Czech>Tlumič plamene (.45 ACP)</Czech>
|
||||
<French>Cache-flamme (.45 ACP)</French>
|
||||
<Russian>Пламегаситель (.45 ACP)</Russian>
|
||||
<Spanish>Supresor (.45 ACP)</Spanish>
|
||||
@ -56,8 +56,8 @@
|
||||
<German>Mündungsfeuerdämpfer (9 mm)</German>
|
||||
<Italian>Soppressore di fiamma (9 mm)</Italian>
|
||||
<Portuguese>Supressor de Clarão (9mm)</Portuguese>
|
||||
<Polish>Tłumik płomieni (9 mm)</Polish>
|
||||
<Czech>Tlumič záblesku (9 mm)</Czech>
|
||||
<Polish>Tłumik płomienia (9 mm)</Polish>
|
||||
<Czech>Tlumič plamene (9 mm)</Czech>
|
||||
<French>Cache-flamme (9 mm)</French>
|
||||
<Russian>Пламегаситель (9 мм)</Russian>
|
||||
<Spanish>Supresor (9 mm)</Spanish>
|
||||
@ -68,7 +68,7 @@
|
||||
<German>Mündungsfeuerdämpfer (.338)</German>
|
||||
<Italian>Soppressore di fiamma (.338)</Italian>
|
||||
<Portuguese>Supressor de Clarão (.338)</Portuguese>
|
||||
<Polish>Tłumik płomieni (.338)</Polish>
|
||||
<Polish>Tłumik płomienia (.338)</Polish>
|
||||
<Czech>Tlumič záblesku (.338)</Czech>
|
||||
<French>Cache-flamme (.338)</French>
|
||||
<Russian>Пламегаситель (.338)</Russian>
|
||||
@ -80,7 +80,7 @@
|
||||
<German>Mündungsfeuerdämpfer (9,3 mm)</German>
|
||||
<Italian>Soppressore di fiamma (9.3mm)</Italian>
|
||||
<Portuguese>Supressor de Clarão (9,3mm)</Portuguese>
|
||||
<Polish>Tłumik płomieni (9,3 mm)</Polish>
|
||||
<Polish>Tłumik płomienia (9,3 mm)</Polish>
|
||||
<Czech>Tlumič záblesku (9,3 mm)</Czech>
|
||||
<French>Cache-flamme (9,3 mm)</French>
|
||||
<Russian>Пламегаситель (9,3 мм)</Russian>
|
||||
|
@ -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_DN_ACE_FRAG">
|
||||
@ -6,7 +6,7 @@
|
||||
<German>Keine Schrapnelle</German>
|
||||
<Czech>Zakázat fragmentaci granátů</Czech>
|
||||
<Spanish>Desactivar fragmentación</Spanish>
|
||||
<Polish>Wyłącz głowice fragmentacyjne</Polish>
|
||||
<Polish>Wyłącz fragmentację odłamków</Polish>
|
||||
<Russian>Выключить разлёт осколков</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
|
@ -1,12 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Goggles">
|
||||
<Key ID="STR_ACE_Goggles_ShowInThirdPerson">
|
||||
<English>Show Goggle Effects in Third Person</English>
|
||||
<German>Brilleneffekt in dritter Person anzeigen</German>
|
||||
<Spanish>Mostrar efectos de las gafas en tercera persona</Spanish>
|
||||
<Czech>Zobrazit účinky brýlí v třetí osobě</Czech>
|
||||
<Czech>Zobrazit efekt brýlí v třetí osobě</Czech>
|
||||
<French>Effets de lunettes à la 3ème personne</French>
|
||||
<Russian>Отображать эффект очков от третьего лица</Russian>
|
||||
<Hungarian>Szemüveg effekt mutatása külső nézetből</Hungarian>
|
||||
|
@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="Grenades">
|
||||
<Key ID="STR_ACE_Grenades_SwitchGrenadeMode">
|
||||
<English>Switch Grenade Mode</English>
|
||||
<German>Granaten-Modus wechseln</German>
|
||||
<Spanish>Cambiar modo de granada</Spanish>
|
||||
<Polish>Tryb rzutu granatem</Polish>
|
||||
<Polish>Przełącz sposób rzutu granatem</Polish>
|
||||
<Czech>Změnit styl hodu granátu</Czech>
|
||||
<French>Changer type de lancer de grenade</French>
|
||||
<Russian>Сменить режим броска гранаты</Russian>
|
||||
@ -19,7 +19,7 @@
|
||||
<German>Normaler Wurf</German>
|
||||
<Spanish>Lanzamiento normal</Spanish>
|
||||
<Polish>Normalny rzut</Polish>
|
||||
<Czech>Normální</Czech>
|
||||
<Czech>Normální hod</Czech>
|
||||
<French>Lancer Normal</French>
|
||||
<Russian>Нормальный бросок</Russian>
|
||||
<Hungarian>Normál dobás</Hungarian>
|
||||
@ -30,8 +30,8 @@
|
||||
<English>High Throw</English>
|
||||
<German>Hoher Wurf</German>
|
||||
<Spanish>Lanzamiento alto</Spanish>
|
||||
<Polish>Rzut lobem</Polish>
|
||||
<Czech>Vysoko</Czech>
|
||||
<Polish>Wysoki rzut</Polish>
|
||||
<Czech>Vysoký hod</Czech>
|
||||
<French>Lancer Haut</French>
|
||||
<Russian>Высокий бросок</Russian>
|
||||
<Hungarian>Magas dobás</Hungarian>
|
||||
@ -43,7 +43,7 @@
|
||||
<German>Präziser Wurf</German>
|
||||
<Spanish>Lanzamiento preciso</Spanish>
|
||||
<Polish>Precyzyjny rzut</Polish>
|
||||
<Czech>Přesně</Czech>
|
||||
<Czech>Přesný hod</Czech>
|
||||
<French>Lancer Précis</French>
|
||||
<Russian>Точный бросок</Russian>
|
||||
<Hungarian>Pontos dobás</Hungarian>
|
||||
@ -80,7 +80,7 @@
|
||||
<Spanish>Granada aturdidora M84</Spanish>
|
||||
<French>M84 Grenade Incapacitante</French>
|
||||
<Polish>Granat hukowy M84</Polish>
|
||||
<Czech>M84 Omračující granát</Czech>
|
||||
<Czech>Omračující granát M84</Czech>
|
||||
<Russian>M84 светозвуковая граната</Russian>
|
||||
<Hungarian>M84 Villanógránát</Hungarian>
|
||||
<Italian>Granata Stordente M84</Italian>
|
||||
@ -91,7 +91,7 @@
|
||||
<German>Verursacht temporäre Blind- und Taubheit.</German>
|
||||
<Spanish>Produce de manera inmediata ceguera, sordera, tinitus y afecta el oído interior.</Spanish>
|
||||
<French>Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes.</French>
|
||||
<Polish>Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku.</Polish>
|
||||
<Polish>Znany też jako flashbang. Powoduje natychmiastową tymczasową ślepotę, głuchotę, dzwonienie w uszach i inne zaburzenia ucha wewnętrznego.</Polish>
|
||||
<Czech>Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu.</Czech>
|
||||
<Russian>XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий.</Russian>
|
||||
<Hungarian>Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat.</Hungarian>
|
||||
@ -101,7 +101,7 @@
|
||||
<Key ID="STR_ACE_Grenades_M127A1_White_Name">
|
||||
<English>M127A1 Hand Held Signal (White)</English>
|
||||
<German>M127A1 Leuchtmittel (Weiß)</German>
|
||||
<Czech> M127A1 Světlice (Bílá)</Czech>
|
||||
<Czech>Světlice M127A1 (Bílá)</Czech>
|
||||
<Hungarian>M127A1 Jelzőrakéta (Fehér)</Hungarian>
|
||||
<Italian>M127A1 Bengala (Bianco)</Italian>
|
||||
<Polish>Flara ręczna sygnałowa M127A1 (biała)</Polish>
|
||||
@ -113,7 +113,7 @@
|
||||
<Key ID="STR_ACE_Grenades_M127A1_Red_Name">
|
||||
<English>M127A1 Hand Held Signal (Red)</English>
|
||||
<German>M127A1 Leuchtmittel (Rot)</German>
|
||||
<Czech>M127A1 Světlice (Červená)</Czech>
|
||||
<Czech>Světlice M127A1 (Červená)</Czech>
|
||||
<Hungarian>M127A1 Jelzőrakéta (Piros)</Hungarian>
|
||||
<Italian>M127A1 Bengala (Rosso)</Italian>
|
||||
<Polish>Flara ręczna sygnałowa M127A1 (czerwona)</Polish>
|
||||
@ -125,7 +125,7 @@
|
||||
<Key ID="STR_ACE_Grenades_M127A1_Green_Name">
|
||||
<English>M127A1 Hand Held Signal (Green)</English>
|
||||
<German>M127A1 Leuchtmittel (Grün)</German>
|
||||
<Czech>M127A1 Světlice (Zelená)</Czech>
|
||||
<Czech>Světlice M127A1 (Zelená)</Czech>
|
||||
<Hungarian>M127A1 Jelzőrakéta (Zöld)</Hungarian>
|
||||
<Italian>M127A1 Bengala (Verde)</Italian>
|
||||
<Polish>Flara ręczna sygnałowa M127A1 (zielona)</Polish>
|
||||
@ -137,7 +137,7 @@
|
||||
<Key ID="STR_ACE_Grenades_M127A1_Yellow_Name">
|
||||
<English>M127A1 Hand Held Signal (Yellow)</English>
|
||||
<German>M127A1 Leuchtmittel (Gelb)</German>
|
||||
<Czech>M127A1 Světlice (Žlutá)</Czech>
|
||||
<Czech>Světlice M127A1 (Žlutá)</Czech>
|
||||
<Hungarian>M127A1 Jelzőrakéta (Sárga)</Hungarian>
|
||||
<Italian>M127A1 Bengala (Giallo)</Italian>
|
||||
<Polish>Flara ręczna sygnałowa M127A1 (żółta)</Polish>
|
||||
@ -185,7 +185,7 @@
|
||||
<Key ID="STR_ACE_Grenades_M127A1_Yellow_Description">
|
||||
<English>Yellow Hand Flare</English>
|
||||
<German>Gelbe Leuchtkugel, wird wie eine Granate geworfen.</German>
|
||||
<Czech>Světlice Žlutá</Czech>
|
||||
<Czech>Světlice (Žlutá)</Czech>
|
||||
<Hungarian>Jelzőrakéta (Sárga)</Hungarian>
|
||||
<Italian>Bengala (Giallo)</Italian>
|
||||
<Polish>Flara ręczna (żółta)</Polish>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Hearing">
|
||||
<Key ID="STR_ACE_Hearing_EarPlugs_Name">
|
||||
@ -30,7 +29,7 @@
|
||||
<English>Earplugs in</English>
|
||||
<German>Ohrenstöpsel drinnen</German>
|
||||
<Spanish>Poner tapones</Spanish>
|
||||
<Polish>Załóż stopery</Polish>
|
||||
<Polish>Włóż stopery</Polish>
|
||||
<Czech>Dát špunty do uší</Czech>
|
||||
<Russian>Беруши надеты</Russian>
|
||||
<French>Bouchons mis</French>
|
||||
@ -42,7 +41,7 @@
|
||||
<English>Earplugs out</English>
|
||||
<German>Ohrenstöpsel raus</German>
|
||||
<Spanish>Quitar tapones</Spanish>
|
||||
<Polish>Zdejmij stopery</Polish>
|
||||
<Polish>Wyjmij stopery</Polish>
|
||||
<Czech>Vyndat špunty z uší</Czech>
|
||||
<Russian>Беруши сняты</Russian>
|
||||
<French>Bouchons enlevés</French>
|
||||
@ -54,7 +53,7 @@
|
||||
<English>Earplugs in</English>
|
||||
<German>Ohrenstöpsel drinnen</German>
|
||||
<Spanish>Tapones puestos</Spanish>
|
||||
<Polish>Stopery założone</Polish>
|
||||
<Polish>Stopery włożone</Polish>
|
||||
<Czech>Špunty v uších</Czech>
|
||||
<Russian>Беруши надеты</Russian>
|
||||
<French>Bouchons mis</French>
|
||||
@ -66,7 +65,7 @@
|
||||
<English>Earplugs out</English>
|
||||
<German>Ohrenstöpsel raus</German>
|
||||
<Spanish>Tapones quitados</Spanish>
|
||||
<Polish>Stopery zdjęte</Polish>
|
||||
<Polish>Stopery wyjęte</Polish>
|
||||
<Czech>Špunty venku z uší</Czech>
|
||||
<Russian>Беруши сняты</Russian>
|
||||
<French>Bouchons enlevés</French>
|
||||
@ -100,9 +99,12 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hearing_DisableEarRinging">
|
||||
<English>Disable ear ringing</English>
|
||||
<German>Deaktiviere Ohrfiepen</German>
|
||||
<French>Désactiver les tintements d'oreille</French>
|
||||
<Spanish>Desactivar zumbido de oídos</Spanish>
|
||||
<Russian>Отключить эффект баротравмы</Russian>
|
||||
<German>Knalltrauma deaktivieren</German>
|
||||
<Czech>Vypnout pískání v uších</Czech>
|
||||
<Polish>Wyłącz dzwonienie w uszach</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -6,30 +6,45 @@
|
||||
<German>Immer den Cursor für Selbst-Interaktionen anzeigen.</German>
|
||||
<Spanish>Mostrar siempre el cursor para la interacción propia</Spanish>
|
||||
<Russian>Всегда показывать курсор для взаимодействия с собой</Russian>
|
||||
<Czech>Zobrazit kurzor v menu pro vlastní interakci</Czech>
|
||||
<Polish>Zawsze wyświetlaj kursor dla własnej interakcji</Polish>
|
||||
<French>Toujours afficher le curseur pour les interactions sur soi-même</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_InteractKey">
|
||||
<English>Interact Key</English>
|
||||
<German>Fremdinteraktionsmenü-Taste</German>
|
||||
<Spanish>Tecla de interacción</Spanish>
|
||||
<Russian>Клавиша взаимодействия</Russian>
|
||||
<Czech>Klávesa pro interakci</Czech>
|
||||
<Polish>Klawisz interakcji</Polish>
|
||||
<French>Touche d'interaction</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_SelfInteractKey">
|
||||
<English>Self Interaction Key</English>
|
||||
<German>Eigeninteraktionsmenü-Taste</German>
|
||||
<Spanish>Tecla de interacción propia</Spanish>
|
||||
<Russian>Клавиша взаимодействия (с собой)</Russian>
|
||||
<Czech>Klávesa pro vlastní interakci</Czech>
|
||||
<Polish>Klawisz własnej interakcji</Polish>
|
||||
<French>Touche d'Interaction sur soi-même</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_SelfActionsRoot">
|
||||
<English>Self Actions</English>
|
||||
<German>Selbst-Aktionen</German>
|
||||
<Spanish>Acciones propias</Spanish>
|
||||
<Russian>Действия с собой</Russian>
|
||||
<Czech>Vlastní akce</Czech>
|
||||
<Polish>Własne akcje</Polish>
|
||||
<French>Actions sur soi-même</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interact_Menu_VehicleActionsRoot">
|
||||
<English>Vehicle Actions</English>
|
||||
<German>Fahrzeug-Aktionen</German>
|
||||
<Spanish>Acciones de vehículo</Spanish>
|
||||
<Russian>Действия на транспорте</Russian>
|
||||
<Czech>Interakce s vozidly</Czech>
|
||||
<Polish>Akcje pojazdu</Polish>
|
||||
<French>Actions sur les véhicules</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -6,22 +6,6 @@ class Extended_PreInit_EventHandlers {
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) );
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_GetIn_EventHandlers {
|
||||
class All {
|
||||
class ADDONnu {
|
||||
clientGetIn = QUOTE( if (_this select 2 == ACE_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1});
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_GetOut_EventHandlers {
|
||||
class All {
|
||||
class ADDONnu {
|
||||
clientGetOut = QUOTE( if (_this select 2 == ACE_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1});
|
||||
};
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
||||
|
@ -260,12 +260,11 @@ class CfgVehicles {
|
||||
icon = PATHTOF(UI\team\team_white_ca.paa);
|
||||
hotkey = "N";
|
||||
};
|
||||
|
||||
class ACE_BecomeLeader {
|
||||
displayName = "$STR_ACE_Interaction_BecomeLeader";
|
||||
condition = QUOTE(count (units group _player) > 1 && {leader group _player != _player});
|
||||
condition = QUOTE(_this call FUNC(canBecomeLeader));
|
||||
exceptions[] = {"isNotInside"};
|
||||
statement = QUOTE(_newGroup = createGroup side group _player; (units group _player) joinSilent _newGroup; _newGroup selectLeader _player;);
|
||||
statement = QUOTE(_this call FUNC(doBecomeLeader));
|
||||
showDisabled = 1;
|
||||
priority = 1.0;
|
||||
icon = PATHTOF(UI\team\team_white_ca.paa);
|
||||
|
@ -4,6 +4,12 @@
|
||||
|
||||
ACE_Modifier = 0;
|
||||
|
||||
//SelectLeader Event Handler for BecomeLeader action:
|
||||
[QGVAR(selectLeader), {
|
||||
PARAMS_2(_group,_leader);
|
||||
_group selectLeader _leader;
|
||||
}] call EFUNC(common,addEventHandler);
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
GVAR(isOpeningDoor) = false;
|
@ -6,8 +6,10 @@ PREP(addPassengerActions);
|
||||
PREP(addPassengersActions);
|
||||
PREP(addSelectableItem);
|
||||
PREP(applyButtons);
|
||||
PREP(canBecomeLeader);
|
||||
PREP(canInteractWithCivilian);
|
||||
PREP(canTapShoulder);
|
||||
PREP(doBecomeLeader);
|
||||
PREP(getDoor);
|
||||
PREP(getDoorAnimations);
|
||||
PREP(getDown);
|
||||
|
21
addons/interaction/functions/fnc_canBecomeLeader.sqf
Normal file
21
addons/interaction/functions/fnc_canBecomeLeader.sqf
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Test if can Become Leader of group
|
||||
*
|
||||
* Arguments:
|
||||
* 0: target <OBJECT>
|
||||
* 1: player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [player, player] call ace_interaction_fnc_canBecomeLeader
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_target,_player);
|
||||
|
||||
(count (units group _player) > 1) && {leader group _player != _player}
|
21
addons/interaction/functions/fnc_doBecomeLeader.sqf
Normal file
21
addons/interaction/functions/fnc_doBecomeLeader.sqf
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Become Leader of group
|
||||
*
|
||||
* Arguments:
|
||||
* 0: target <OBJECT>
|
||||
* 1: player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player, player] call ace_interaction_fnc_doBecomeLeader
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
PARAMS_2(_target,_player);
|
||||
|
||||
[QGVAR(selectLeader), (units group _player), [(group _player), _player]] call EFUNC(common,targetEvent);
|
@ -5,41 +5,65 @@
|
||||
<English>Interactions</English>
|
||||
<German>Interaktionen</German>
|
||||
<Spanish>Interacciones</Spanish>
|
||||
<Czech>Interakce</Czech>
|
||||
<Polish>Interakcje</Polish>
|
||||
<French>Interactions</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Torso">
|
||||
<English>Torso</English>
|
||||
<German>Torso</German>
|
||||
<Spanish>Torso</Spanish>
|
||||
<Czech>Trup</Czech>
|
||||
<Polish>Tors</Polish>
|
||||
<French>Torse</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Head">
|
||||
<English>Head</English>
|
||||
<German>Kopf</German>
|
||||
<Spanish>Cabeza</Spanish>
|
||||
<Czech>Hlava</Czech>
|
||||
<Polish>Głowa</Polish>
|
||||
<French>Tête</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_ArmLeft">
|
||||
<English>Left Arm</English>
|
||||
<German>Linker Arm</German>
|
||||
<Spanish>Brazo izquierdo</Spanish>
|
||||
<Czech>Levá paže</Czech>
|
||||
<Polish>Lewe ramię</Polish>
|
||||
<French>Bras Gauche</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_ArmRight">
|
||||
<English>Right Arm</English>
|
||||
<German>Rechter Arm</German>
|
||||
<Spanish>Brazo derecho</Spanish>
|
||||
<Czech>Pravá paže</Czech>
|
||||
<Polish>Prawe ramię</Polish>
|
||||
<French>Bras Droit</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_LegLeft">
|
||||
<English>Left Leg</English>
|
||||
<German>Linkes Bein</German>
|
||||
<Spanish>Pierna izquierda</Spanish>
|
||||
<Czech>Levá noha</Czech>
|
||||
<Polish>Lewa noga</Polish>
|
||||
<French>Jambe Gauche</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_LegRight">
|
||||
<English>Right Leg</English>
|
||||
<German>Rechtes Bein</German>
|
||||
<Spanish>Pierna derecha</Spanish>
|
||||
<Czech>Pravá hona</Czech>
|
||||
<Polish>Prawa noga</Polish>
|
||||
<French>Jambe Droite</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Weapon">
|
||||
<English>Weapon</English>
|
||||
<German>Waffe</German>
|
||||
<Spanish>Arma</Spanish>
|
||||
<Czech>Zbraň</Czech>
|
||||
<Polish>Broń</Polish>
|
||||
<French>Arme</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_InteractionMenu">
|
||||
<English>Interaction Menu</English>
|
||||
@ -57,7 +81,7 @@
|
||||
<English>Interaction Menu (Self)</English>
|
||||
<German>Interaktionsmenü (Selbst)</German>
|
||||
<Spanish>Menú de interacción (Propia)</Spanish>
|
||||
<Polish>Menu interakcji (na siebie)</Polish>
|
||||
<Polish>Menu interakcji (własne)</Polish>
|
||||
<Czech>Menu interakce (vlastní)</Czech>
|
||||
<French>Menu d'interaction (Perso)</French>
|
||||
<Russian>Меню взаимодействия (с собой)</Russian>
|
||||
@ -142,7 +166,7 @@
|
||||
<German>Gruppe verlassen</German>
|
||||
<Spanish>Dejar grupo</Spanish>
|
||||
<Polish>Opuść grupę</Polish>
|
||||
<Czech>Odejít ze skupiny</Czech>
|
||||
<Czech>Opustit skupinu</Czech>
|
||||
<French>Quitter Groupe</French>
|
||||
<Russian>Выйти из группы</Russian>
|
||||
<Hungarian>Csoport elhagyása</Hungarian>
|
||||
@ -202,7 +226,7 @@
|
||||
<German>Gesten</German>
|
||||
<Spanish>Gestos</Spanish>
|
||||
<Polish>Gesty</Polish>
|
||||
<Czech>Gesta</Czech>
|
||||
<Czech>Posunky</Czech>
|
||||
<French>Signaux</French>
|
||||
<Russian>Жесты</Russian>
|
||||
<Hungarian>Kézjelek</Hungarian>
|
||||
@ -384,7 +408,7 @@
|
||||
<French>On te tape sur l'épaule</French>
|
||||
<Polish>Zostałeś klepnięty po ramieniu</Polish>
|
||||
<Hungarian>Vállonveregettek</Hungarian>
|
||||
<Czech>Někdo tě poklepal na rameno</Czech>
|
||||
<Czech>Někdo tě poklepal na PRAVÉ rameno</Czech>
|
||||
<Russian>Вас похлопали по плечу</Russian>
|
||||
<Portuguese>Você foi tocado no ombro</Portuguese>
|
||||
<Italian>Ti è stato dato un colpetto sulla spalla</Italian>
|
||||
@ -396,7 +420,7 @@
|
||||
<French>On te tape sur l'épaule.</French>
|
||||
<Polish>Zostałeś klepnięty po ramieniu</Polish>
|
||||
<Hungarian>Vállonveregettek</Hungarian>
|
||||
<Czech>Někdo tě poklepal na rameno.</Czech>
|
||||
<Czech>Někdo tě poklepal na LEVÉ rameno</Czech>
|
||||
<Russian>Вас похлопали по плечу</Russian>
|
||||
<Portuguese>Você foi tocado no ombro.</Portuguese>
|
||||
<Italian>Ti è stato dato un colpetto sulla spalla</Italian>
|
||||
@ -515,7 +539,7 @@
|
||||
<Spanish>Unirse al<br/>equipo rojo</Spanish>
|
||||
<French>Rejoindre<br/>Rouge</French>
|
||||
<Polish>Dołącz do drużyny<br/>czerwonej</Polish>
|
||||
<Czech>Připojit do<br/>Červeného Týmu</Czech>
|
||||
<Czech>Připojit do<br/>Červeného týmu</Czech>
|
||||
<Russian>Присоединиться<br/>к красной группе</Russian>
|
||||
<Portuguese>Unir-se à<br/>Equipe Vermelha</Portuguese>
|
||||
<Italian>Entra nella<br/>Squadra Rossa</Italian>
|
||||
@ -527,7 +551,7 @@
|
||||
<Spanish>Unirse al<br/>equipo verde</Spanish>
|
||||
<French>Rejoindre<br/>Verte</French>
|
||||
<Polish>Dołącz do<br/>drużyny zielonej</Polish>
|
||||
<Czech>Připojit do<br/>Zeleného Týmu</Czech>
|
||||
<Czech>Připojit do<br/>Zeleného týmu</Czech>
|
||||
<Russian>Присоединиться<br/>к зеленой группе</Russian>
|
||||
<Portuguese>Unir-se à<br/>Equipe Verde</Portuguese>
|
||||
<Italian>Entra nella<br/>Squadra Verde</Italian>
|
||||
@ -539,7 +563,7 @@
|
||||
<Spanish>Unirse al<br/>equipo azul</Spanish>
|
||||
<French>Rejoindre<br/>Bleue</French>
|
||||
<Polish>Dołącz do<br/>drużyny niebieskiej</Polish>
|
||||
<Czech>Připojit do<br/>Modrého Týmu</Czech>
|
||||
<Czech>Připojit do<br/>Modrého týmu</Czech>
|
||||
<Russian>Присоединиться<br/>к синей группе</Russian>
|
||||
<Portuguese>Unir-se à<br/>Equipe Azul</Portuguese>
|
||||
<Italian>Entra nella<br/>Squadra Blu</Italian>
|
||||
@ -551,7 +575,7 @@
|
||||
<Spanish>Unirse al<br/>equipo amarillo</Spanish>
|
||||
<French>Rejoindre<br/>Jaune</French>
|
||||
<Polish>Dołącz do<br/>drużyny żółtej</Polish>
|
||||
<Czech>Připojit do<br/>Žlutého Týmu</Czech>
|
||||
<Czech>Připojit do<br/>Žlutého týmu</Czech>
|
||||
<Russian>Присоединиться<br/>к желтой группе</Russian>
|
||||
<Portuguese>Unir-se à<br/>Equipe Amarela</Portuguese>
|
||||
<Italian>Entra nella<br/>Squadra Gialla</Italian>
|
||||
@ -563,7 +587,7 @@
|
||||
<Spanish>Te has unido al equipo %1</Spanish>
|
||||
<French>Tu as rejoint l'équipe %1</French>
|
||||
<Polish>Dołączyłeś do drużyny %1</Polish>
|
||||
<Czech>Připojil ses do Týmu %1</Czech>
|
||||
<Czech>Připojil ses do %1 týmu</Czech>
|
||||
<Russian>Вы присоединились к группе %1</Russian>
|
||||
<Portuguese>Você uniu-se à Equipe %1</Portuguese>
|
||||
<Italian>Sei entrato nella Squadra %1</Italian>
|
||||
@ -662,6 +686,7 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_Interact">
|
||||
<English>Interact</English>
|
||||
<French>Interagir</French>
|
||||
<German>Interagiere</German>
|
||||
<Czech>Interakce</Czech>
|
||||
<Russian>Взаимодействовать</Russian>
|
||||
@ -673,6 +698,9 @@
|
||||
<German>Fahrzeuginsassen</German>
|
||||
<Spanish>Pasajeros</Spanish>
|
||||
<Russian>Пассажиры</Russian>
|
||||
<Czech>Pasažéři</Czech>
|
||||
<Polish>Pasażerowie</Polish>
|
||||
<French>Passagers</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -6,12 +6,18 @@
|
||||
<German>Erhöhe die angezeigte Inventargröße</German>
|
||||
<Spanish>Hacer la pantalla de inventario mas grande</Spanish>
|
||||
<Russian>Сделать окно инвентаря больше</Russian>
|
||||
<Czech>Zvětšit zobrazení inventáře</Czech>
|
||||
<Polish>Powiększ UI ekwipunku</Polish>
|
||||
<French>Augmente la taille d'affichage de l'inventaire</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Inventory_SettingDescription">
|
||||
<English>Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed.</English>
|
||||
<German>Im Regelfall wird die Inventargröße durch die Größe der Nutzeroberfläche bestimmt. Diese Einstellung erlaubt es das Inventar unter Ausschluss der Schriftgröße zu vergrößern. Dadurch können mehr Gegenstände angezeigt werden.</German>
|
||||
<Spanish>Normalmente la pantalla de inventario se escala por el tamaño de la interfaz de usuario. Esto permite ampliar el tamaño de la interfaz de usuario de inventario, pero no aumenta el tamaño de fuente, permitiendo mostrar más filas.</Spanish>
|
||||
<Russian>Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк.</Russian>
|
||||
<Czech>Normálně se velikost invetáře škáluje s velikostí UI. Toto nastavení dovoluje škálování velikost inventáře ale nežvětšuje velikost fontu. To dovoluje zobrazení více řad v inventáři.</Czech>
|
||||
<Polish>Ekwipunek skalowany jest poprzez rozmiar UI. Ta opcja pozwala powiększyć rozmiar UI ekwipunku, lecz nie zwiększa rozmiaru fontu pozwalając na wyświetlanie większej ilości wierszy.</Polish>
|
||||
<French>Normalement, l'inventaire est automatiquement mesuré par la taille de l'interface de l'utilisateur. Cette option vous permet d'augmenter la taille d'affichage de l'inventaire, cependant, cette option n'augmente pas la police d'écriture et le nombre de place.</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -6,6 +6,7 @@ class CfgWeapons {
|
||||
|
||||
class launch_Titan_base : Launcher_Base_F {
|
||||
weaponInfoType = "ACE_RscOptics_javelin";
|
||||
modelOptics = PATHTOF(data\reticle_titan.p3d);
|
||||
|
||||
lockingTargetSound[] = {"",0,1};
|
||||
lockedTargetSound[] = {"",0,1};
|
||||
|
@ -14,7 +14,7 @@ class RscInGameUI {
|
||||
idd = 300;
|
||||
controls[] = { "ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"};
|
||||
onLoad = QUOTE(_this call FUNC(onOpticLoad));
|
||||
onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];";
|
||||
onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];uiNameSpace setVariable ['ACE_RscOptics_javelin_PFH',nil];";
|
||||
|
||||
class CA_Distance: RscOpticsValue {
|
||||
idc = 151;
|
||||
@ -45,13 +45,6 @@ class RscInGameUI {
|
||||
height = 0.001;
|
||||
};
|
||||
class Controls {
|
||||
class JavelinLocking : RscMapControl {
|
||||
onDraw = QUOTE(_this call FUNC(onOpticDraw));
|
||||
idc = -1;
|
||||
w = 0;
|
||||
h = 0;
|
||||
};
|
||||
|
||||
class ACE_javelin_Day_mode_off: RscPicture {
|
||||
idc = 1001;
|
||||
x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX";
|
||||
|
@ -1,3 +1,5 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
#include "initKeybinds.sqf"
|
BIN
addons/javelin/data/reticle_titan.p3d
Normal file
BIN
addons/javelin/data/reticle_titan.p3d
Normal file
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
//TRACE_1("enter", _this);
|
||||
TRACE_1("enter", _this);
|
||||
|
||||
#define __TRACKINTERVAL 0 // how frequent the check should be.
|
||||
#define __LOCKONTIME 3.0 // Lock on won't occur sooner
|
||||
@ -10,7 +10,19 @@
|
||||
#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5
|
||||
#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5
|
||||
|
||||
private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"];
|
||||
private["_isJavelin", "_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"];
|
||||
|
||||
if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom))
|
||||
|| { (vehicle ACE_player) != ACE_player }
|
||||
) exitWith {
|
||||
__JavelinIGUITargeting ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow false;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil];
|
||||
};
|
||||
|
||||
// Reset arguments if we havnt rendered in over a second
|
||||
_args = uiNamespace getVariable[QGVAR(arguments), [] ];
|
||||
@ -21,6 +33,8 @@ if( (count _args) > 0) then {
|
||||
};
|
||||
};
|
||||
|
||||
TRACE_1("Running", "Running");
|
||||
|
||||
// Pull the arguments
|
||||
_currentTarget = _args select 1;
|
||||
_runTime = _args select 2;
|
||||
@ -38,9 +52,6 @@ if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} &&
|
||||
// Refresh the firemode
|
||||
[] call FUNC(showFireMode);
|
||||
|
||||
// Only start locking on holding tab
|
||||
if(!GVAR(isLockKeyDown)) exitWith { false };
|
||||
|
||||
_range = parseNumber (ctrlText __JavelinIGUIRangefinder);
|
||||
if (_range > 50 && {_range < 2500}) then {
|
||||
_pos = positionCameraToWorld [0,0,_range];
|
||||
@ -73,8 +84,10 @@ if (isNull _newTarget) then {
|
||||
|
||||
__JavelinIGUISeek ctrlSetTextColor __ColorGray;
|
||||
__JavelinIGUINFOV ctrlSetTextColor __ColorGreen;
|
||||
__JavelinIGUITargeting ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow false;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
__JavelinIGUITargetingConstraints ctrlShow false;
|
||||
|
||||
ACE_player setVariable ["ace_missileguidance_target",nil, false];
|
||||
|
||||
@ -82,8 +95,9 @@ if (isNull _newTarget) then {
|
||||
//if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];};
|
||||
} else {
|
||||
if (_newTarget distance ACE_player < 2500
|
||||
// && {(call CBA_fnc_getFoV) select 1 > 7}
|
||||
// && { (currentVisionMode ACE_player == 2)}
|
||||
&& {(call CBA_fnc_getFoV) select 1 > 9}
|
||||
&& { (currentVisionMode ACE_player == 2)}
|
||||
&& GVAR(isLockKeyDown)
|
||||
) then {
|
||||
// Lock on after 3 seconds
|
||||
if(_currentTarget != _newTarget) then {
|
||||
@ -98,8 +112,9 @@ if (isNull _newTarget) then {
|
||||
|
||||
__JavelinIGUISeek ctrlSetTextColor __ColorGreen;
|
||||
__JavelinIGUINFOV ctrlSetTextColor __ColorNull;
|
||||
|
||||
__JavelinIGUITargeting ctrlShow true;
|
||||
__JavelinIGUITargetingConstrains ctrlShow true;
|
||||
__JavelinIGUITargetingConstrains ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow true;
|
||||
__JavelinIGUITargetingLines ctrlShow true;
|
||||
|
||||
@ -187,10 +202,11 @@ if (isNull _newTarget) then {
|
||||
} else {
|
||||
// Something is wrong with our seek
|
||||
_currentTarget = objNull;
|
||||
ACE_player setVariable["ace_missileguidance_target", nil, false];
|
||||
|
||||
__JavelinIGUISeek ctrlSetTextColor __ColorGray;
|
||||
__JavelinIGUINFOV ctrlSetTextColor __ColorGray;
|
||||
__JavelinIGUITargetingConstrains ctrlShow false;
|
||||
__JavelinIGUITargeting ctrlShow false;
|
||||
__JavelinIGUITargetingGate ctrlShow false;
|
||||
__JavelinIGUITargetingLines ctrlShow false;
|
||||
|
||||
|
@ -25,3 +25,9 @@ uiNameSpace setVariable [QGVAR(arguments),
|
||||
0 // Sound timer
|
||||
]
|
||||
];
|
||||
|
||||
_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil];
|
||||
if(isNil "_pfh_handle") then {
|
||||
_pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler;
|
||||
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle];
|
||||
};
|
@ -27,4 +27,4 @@
|
||||
[ACE_player] call FUNC(cycleFireMode);
|
||||
false
|
||||
},
|
||||
[15, [false, true, false]], false] call cba_fnc_addKeybind; //Shift+Tab Key
|
||||
[15, [false, true, false]], false] call cba_fnc_addKeybind; //Ctrl+Tab Key
|
@ -1,15 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="WEP_JAVELIN">
|
||||
<Key ID="STR_ACE_WEP_JAVELIN_LockTarget">
|
||||
<Key ID="STR_ACE_JAVELIN_LockTarget">
|
||||
<English>Lock Target (Hold)</English>
|
||||
<German>Ziel aufschalten</German>
|
||||
<Russian>Захватить цель (удерживать)</Russian>
|
||||
<Czech>Zamknout cíl(držet)</Czech>
|
||||
<Polish>Namierz cel (przytrzymaj)</Polish>
|
||||
<French>Vérouiller la Cible (Maintenir)</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_WEP_JAVELIN_CycleFireMode">
|
||||
<Key ID="STR_ACE_JAVELIN_CycleFireMode">
|
||||
<English>Cycle Fire Mode</English>
|
||||
<German>Wechsle Feuermodus</German>
|
||||
<Russian>Переключение режимов огня</Russian>
|
||||
<Czech>Cyklování režimů palby</Czech>
|
||||
<Polish>Przełącz tryb ognia</Polish>
|
||||
<French>Mode de Tir (Cycle)</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Wind">
|
||||
<Key ID="STR_ACE_Wind_ApproximateTemp">
|
||||
@ -30,7 +29,7 @@
|
||||
<Spanish>Anemómetro balístico</Spanish>
|
||||
<French>Applied Ballistics Meter</French>
|
||||
<Polish>Urządzenie do monitorowania pogody</Polish>
|
||||
<Czech>Zařízení pro měření vítru</Czech>
|
||||
<Czech>Zařízení pro měření větru</Czech>
|
||||
<Italian>Monitoraggio Balistico Attivo</Italian>
|
||||
<Hungarian>Applied Ballistics Meter</Hungarian>
|
||||
<Portuguese>Medidor Balístico Ativo</Portuguese>
|
||||
|
@ -2,8 +2,32 @@ class CfgVehicles {
|
||||
class All;
|
||||
|
||||
class LaserTarget: All {
|
||||
// @TODO: Changing the model and simulation hides it, but THEN IT DOESNT SPAWN WTF!?
|
||||
model = "\A3\Weapons_F\empty.p3d";
|
||||
simulation = "nvmarker";
|
||||
nvTarget = 1;
|
||||
//simulation = "laserTarget";
|
||||
//threat[] = {0,0,0};
|
||||
class EventHandlers {
|
||||
init = QUOTE(_this call FUNC(laser_init));
|
||||
};
|
||||
|
||||
diffuse[] = {0,0,0};
|
||||
ambient[] = {0,0,0};
|
||||
brightness = 0;
|
||||
name = "pozicni blik";
|
||||
drawLight = 0;
|
||||
drawLightSize = 0;
|
||||
drawLightCenterSize = 0;
|
||||
activeLight = 0;
|
||||
blinking = 0;
|
||||
dayLight = 0;
|
||||
onlyInNvg = 0;
|
||||
useFlare = 0;
|
||||
};
|
||||
|
||||
// Visual laserTarget override
|
||||
class ACE_LaserTarget_Visual : LaserTarget {
|
||||
//model = "\A3\Weapons_f\laserTgt.p3d";
|
||||
};
|
||||
};
|
8
addons/laser/CfgWeapons.hpp
Normal file
8
addons/laser/CfgWeapons.hpp
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
class CfgWeapons {
|
||||
class Binocular;
|
||||
|
||||
class Laserdesignator : Binocular {
|
||||
visionMode[] = {"Normal","NVG"};
|
||||
};
|
||||
};
|
1
addons/laser/RscInGameUI.hpp
Normal file
1
addons/laser/RscInGameUI.hpp
Normal file
@ -0,0 +1 @@
|
||||
// TODO: RscOptics_LaserDesignator for laser code designation
|
@ -1,3 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
NO_DEDICATED;
|
||||
|
||||
["laser_laserOn", {_this call DFUNC(handleLaserOn)}] call EFUNC(common,addEventHandler);
|
||||
["laser_laserOff", {_this call DFUNC(handleLaserOff)}] call EFUNC(common,addEventHandler);
|
||||
|
@ -6,15 +6,28 @@ PREP(shootRay);
|
||||
PREP(shootCone);
|
||||
PREP(checkLos);
|
||||
|
||||
PREP(findLaserDesignator);
|
||||
PREP(findStrongestRay);
|
||||
|
||||
PREP(translateToModelSpace);
|
||||
PREP(translateToWeaponSpace);
|
||||
|
||||
PREP(laser_init);
|
||||
PREP(seekerFindLaserSpot);
|
||||
PREP(laserOn);
|
||||
PREP(laserOff);
|
||||
PREP(handleLaserOn);
|
||||
PREP(handleLaserOff);
|
||||
|
||||
PREP(drawVisibleLaserTargets);
|
||||
|
||||
PREP(laser_init);
|
||||
PREP(vanillaLaserSeekerHandler);
|
||||
PREP(laserTargetPFH);
|
||||
|
||||
ACE_LASERS = [];
|
||||
GVAR(VanillaLasers) = [];
|
||||
|
||||
// Laser default variables
|
||||
ACE_DEFAULT_LASER_CODE = 1001;
|
||||
ACE_DEFAULT_LASER_WAVELENGTH = 1550;
|
||||
ACE_DEFAULT_LASER_BEAMSPREAD = 1;
|
||||
|
||||
GVAR(laserEmitters) = HASH_CREATE;
|
@ -12,3 +12,4 @@ class CfgPatches {
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
1
addons/laser/functions/fnc_drawVisibleLaserTargets.sqf
Normal file
1
addons/laser/functions/fnc_drawVisibleLaserTargets.sqf
Normal file
@ -0,0 +1 @@
|
||||
// @TODO: This is to draw the actual LaserTarget positions to utilize for laser shooting.
|
@ -1,74 +0,0 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_seeker", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov",
|
||||
"_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"];
|
||||
|
||||
_seeker = _this select 0;
|
||||
_laserCode = _this select 1;
|
||||
_fov = if (count _this > 2) then {_this select 2} else {75};
|
||||
_vector = if (count _this > 3) then {_this select 3} else {vectorDir _seeker};
|
||||
_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]};
|
||||
|
||||
_headingPitch = _vector call CBA_fnc_vect2polar;
|
||||
_currentTarget = nil;
|
||||
_found = false;
|
||||
|
||||
_getPosASL = {visiblePositionASL (_this select 0)};
|
||||
|
||||
LOG("Searching lasers");
|
||||
if(!(isNil "ACE_LASERS")) then {
|
||||
_potentialTargets = [];
|
||||
TRACE_1("", ACE_LASERS);
|
||||
|
||||
{
|
||||
if(!(isNull _x)) then {
|
||||
_sensorPos = ATLtoASL(_seeker modelToWorldVisual _offset);
|
||||
_vectorTo = [_sensorPos, ([_x] call _getPosASL)] call BIS_fnc_vectorFromXToY;
|
||||
_polarTo = _vectorTo call CBA_fnc_vect2polar;
|
||||
_dir = _polarTo select 1;
|
||||
_dir = _dir - (_headingPitch select 1);
|
||||
|
||||
TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir);
|
||||
|
||||
if (_dir < 0) then {_dir = _dir + 360};
|
||||
if (_dir > 360) then {_dir = _dir - 360};
|
||||
_vertOk = false;
|
||||
_horzOk = false;
|
||||
if(_dir < _fov || {_dir > (360-_fov)}) then {
|
||||
_horzOk = true;
|
||||
};
|
||||
if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then {
|
||||
_vertOk = true;
|
||||
};
|
||||
|
||||
TRACE_2("Results", _vertOk, _horzOk);
|
||||
|
||||
if(_vertOk && {_horzOk}) then {
|
||||
// Does the laser currently have our current code, if we have one?
|
||||
_targetCode = _x getVariable ["ACE_LASER_CODE", ACE_DEFAULT_LASER_CODE];
|
||||
TRACE_1("Target in sight, checking code", _targetCode, _laserCode);
|
||||
if(_targetCode == _laserCode) then {
|
||||
_potentialTargets set[(count _potentialTargets), _x];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
} forEach ACE_LASERS;
|
||||
|
||||
TRACE_1("", _potentialTargets);
|
||||
|
||||
_closestDistance = 100000;
|
||||
{
|
||||
_pos1 = (getPosASL _seeker);
|
||||
_pos2 = ([_x] call _getPosASL);
|
||||
_disCheck = _pos1 distance _pos2;
|
||||
// shouldn't this bail out when a valid target is found instead of iterating over all potential targets ?
|
||||
if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _seeker] call FUNC(checkLos)}) then {
|
||||
_found = true;
|
||||
_currentTarget = _x;
|
||||
_closestDistance = _disCheck;
|
||||
};
|
||||
} forEach _potentialTargets;
|
||||
};
|
||||
[_found, _currentTarget]
|
8
addons/laser/functions/fnc_handleLaserOff.sqf
Normal file
8
addons/laser/functions/fnc_handleLaserOff.sqf
Normal file
@ -0,0 +1,8 @@
|
||||
//fnc_handleLaserOff.sqf
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_uuid"];
|
||||
_uuid = _this select 0;
|
||||
if(HASH_HASKEY(GVAR(laserEmitters), _uuid)) then {
|
||||
HASH_REM(GVAR(laserEmitters), _uuid);
|
||||
};
|
7
addons/laser/functions/fnc_handleLaserOn.sqf
Normal file
7
addons/laser/functions/fnc_handleLaserOn.sqf
Normal file
@ -0,0 +1,7 @@
|
||||
//fnc_handleLaserOn.sqf
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_uuid", "_args"];
|
||||
_uuid = _this select 0;
|
||||
_args = _this select 1;
|
||||
HASH_SET(GVAR(laserEmitters), _uuid, _args);
|
16
addons/laser/functions/fnc_laserOff.sqf
Normal file
16
addons/laser/functions/fnc_laserOff.sqf
Normal file
@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
* Turn a laser designator off.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: UUID (from laserOn) <string>
|
||||
*
|
||||
* Return value:
|
||||
* None
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_uuid"];
|
||||
_uuid = _this select 0;
|
||||
["laser_laserOff", [_uuid]] call EFUNC(common,globalEvent);
|
23
addons/laser/functions/fnc_laserOn.sqf
Normal file
23
addons/laser/functions/fnc_laserOn.sqf
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
* Turn a laser designator on.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Emitter <object>
|
||||
* 1: Owner <object>
|
||||
* 2: Method, can be code, which emitter and owner are passed to, a string function name, an array with a position memory point and weapon name, or an array with a position memory point, a vector begining memory point, and vector ending memory point.
|
||||
* 3: Wavelength (1550nm is common eye safe) <number>
|
||||
* 4: Laser code <number>
|
||||
* 5: Beam divergence (in mils off beam center).
|
||||
*
|
||||
* Return value:
|
||||
* String, UUID for sending to laserOff function.
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_uuid", "_args"];
|
||||
_uuid = format["%1%2%3", floor diag_tickTime, floor random 1000, floor random 10000];
|
||||
_args = [_uuid, _this];
|
||||
["laser_laserOn", _args] call EFUNC(common,globalEvent);
|
||||
_uuid;
|
@ -1,20 +1,25 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
TRACE_1("enter", _this);
|
||||
|
||||
private["_args", "_laserTarget"];
|
||||
//TRACE_1("enter", _this);
|
||||
_args = _this select 0;
|
||||
_laserTarget = _args select 0;
|
||||
_shooter = _args select 1;
|
||||
_uuid = _args select 2;
|
||||
|
||||
if(isNull _laserTarget || !alive player) exitWith {
|
||||
if(isNull _laserTarget || !alive _shooter) exitWith {
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
REM(ACE_LASERS, _laserTarget);
|
||||
};
|
||||
REM(GVAR(VanillaLasers), _laserTarget);
|
||||
|
||||
_end = diag_tickTime;
|
||||
// Remove laseron
|
||||
[_uuid] call FUNC(laserOff);
|
||||
};
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
// Iconize the location of the actual laserTarget
|
||||
_pos = [_laserTarget] call FUNC(getPosASL);
|
||||
_pos = getPosASL _laserTarget;
|
||||
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"];
|
||||
|
||||
{
|
||||
|
@ -1,25 +1,32 @@
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
PARAMS_1(_laserTarget);
|
||||
|
||||
TRACE_1("enter", _this);
|
||||
|
||||
PARAMS_1(_laserTarget);
|
||||
|
||||
// Add the target to the global targets array
|
||||
// Everyone tracks them
|
||||
|
||||
// Add the laser localized to the laser array, and give it the default localized code
|
||||
PUSH(ACE_LASERS, _laserTarget);
|
||||
PUSH(GVAR(VanillaLasers), _laserTarget);
|
||||
|
||||
// Check the vehicle, otherwise use the default
|
||||
_laserTarget setVariable ["ACE_LASER_CODE", ACE_DEFAULT_LASER_CODE, false];
|
||||
_laserTarget setVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE, false];
|
||||
_laserTarget setVariable [QGVAR(beamSpread), ACE_DEFAULT_LASER_BEAMSPREAD, false];
|
||||
_laserTarget setVariable [QGVAR(waveLength), ACE_DEFAULT_LASER_WAVELENGTH, false];
|
||||
|
||||
// Clean the lasers of any null objects while we are here
|
||||
REM(ACE_LASERS, objNull);
|
||||
REM(GVAR(VanillaLasers), objNull);
|
||||
|
||||
if(!(local _laserTarget)) exitWith { };
|
||||
|
||||
// The target is local, so its on this client
|
||||
if(!isDedicated) then {
|
||||
_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", ACE_player, true];
|
||||
// @TODO: Get ownership variables and set them on the vehicle
|
||||
|
||||
[FUNC(laserTargetPFH), 0, [_laserTarget, ACE_player]] call cba_fnc_addPerFrameHandler;
|
||||
_uuid = [(vehicle ACE_player), ACE_player, QFUNC(vanillaLaserSeekerHandler), ACE_DEFAULT_LASER_WAVELENGTH, ACE_DEFAULT_LASER_CODE, ACE_DEFAULT_LASER_BEAMSPREAD] call FUNC(laserOn);
|
||||
_laserTarget setVariable [QGVAR(uuid), _uuid, false];
|
||||
[FUNC(laserTargetPFH), 0, [_laserTarget, ACE_player, _uuid]] call cba_fnc_addPerFrameHandler;
|
||||
} else {
|
||||
// server side ownership of laser
|
||||
//_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false];
|
||||
_laserTarget setVariable [QGVAR(owner), nil, true];
|
||||
};
|
||||
|
@ -32,7 +32,5 @@ if (_d != 0) then {
|
||||
};
|
||||
|
||||
/* Inverse of step 1 */
|
||||
_q1 set[0, (_q2 select 0) + (_p1 select 0)];
|
||||
_q1 set[1, (_q2 select 1) + (_p1 select 1)];
|
||||
_q1 set[2, (_q2 select 2) + (_p1 select 2)];
|
||||
_q1 = _q2 vectorAdd _p1;
|
||||
_q1;
|
@ -5,19 +5,12 @@ _p = _this select 0;
|
||||
_p1 = _this select 1;
|
||||
_p2 = _this select 2;
|
||||
|
||||
_q1 = [];
|
||||
_q2 = [];
|
||||
_u = [];
|
||||
|
||||
/* Step 1 */
|
||||
_q1 set[0, (_p select 0) - (_p1 select 0)];
|
||||
_q1 set[1, (_p select 1) - (_p1 select 1)];
|
||||
_q1 set[2, (_p select 2) - (_p1 select 2)];
|
||||
|
||||
_u set[0, (_p2 select 0) - (_p1 select 0)];
|
||||
_u set[1, (_p2 select 1) - (_p1 select 1)];
|
||||
_u set[2, (_p2 select 2) - (_p1 select 2)];
|
||||
_u = _u call BIS_fnc_unitVector;
|
||||
_q1 = _p vectorDiff _p1;
|
||||
_u = _p2 vectorDiff _p1;
|
||||
_u = vectorNormalized _u;
|
||||
_d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2));
|
||||
|
||||
/* Step 2 */
|
||||
|
143
addons/laser/functions/fnc_seekerFindLaserSpot.sqf
Normal file
143
addons/laser/functions/fnc_seekerFindLaserSpot.sqf
Normal file
@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Author: Nou
|
||||
* Turn a laser designator on.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Position of seeker (ASL) <position>
|
||||
* 1: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. <array>
|
||||
* 2: Seeker laser code. <number>
|
||||
*
|
||||
* Return value:
|
||||
* Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found.
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_excludes", "_bucketIndex", "_finalPos", "_owner", "_obj", "_x", "_method",
|
||||
"_emitterWavelength", "_laserCode", "_divergence", "_laser", "_laserPos", "_laserDir", "_res", "_bucketPos", "_bucketList", "_c", "_forEachIndex", "_index",
|
||||
"_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"];
|
||||
|
||||
_pos = _this select 0;
|
||||
_seekerWavelengths = _this select 1;
|
||||
_seekerCode = _this select 2;
|
||||
|
||||
_spots = [];
|
||||
_buckets = [];
|
||||
_excludes = [];
|
||||
_bucketIndex = 0;
|
||||
_finalPos = nil;
|
||||
_finalOwner = nil;
|
||||
|
||||
{
|
||||
_obj = _x select 0;
|
||||
_owner = _x select 1;
|
||||
_method = _x select 2;
|
||||
_emitterWavelength = _x select 3;
|
||||
_laserCode = _x select 4;
|
||||
_divergence = _x select 5;
|
||||
if(alive _obj && {_emitterWavelength >= (_seekerWavelengths select 0)} && {_emitterWavelength <= (_seekerWavelengths select 1)} && {_laserCode == _seekerCode}) then {
|
||||
_laser = [];
|
||||
if(IS_CODE(_method)) then {
|
||||
_laser = _x call _method;
|
||||
} else {
|
||||
if(IS_STRING(_method)) then {
|
||||
_laser = _x call (missionNamespace getVariable [_method, {}]);
|
||||
} else {
|
||||
if(IS_ARRAY(_method)) then {
|
||||
if(count _method == 2) then {
|
||||
_laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), _obj weaponDirection (_method select 1)];
|
||||
} else {
|
||||
if(count _method == 3) then {
|
||||
_laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), (ATLtoASL (_obj modelToWorldVisual (_method select 1))) vectorFromTo (ATLtoASL (_obj modelToWorldVisual (_method select 2)))];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
_laserPos = _laser select 0;
|
||||
_laserDir = _laser select 1;
|
||||
_res = [_laserPos, _laserDir, _divergence] call FUNC(shootCone);
|
||||
{
|
||||
_spots pushBack [_x select 0, _owner];
|
||||
} forEach (_res select 2);
|
||||
};
|
||||
} forEach (GVAR(laserEmitters) select 1);
|
||||
|
||||
if((count _spots) > 0) then {
|
||||
_bucketPos = nil;
|
||||
_bucketList = nil;
|
||||
_c = 0;
|
||||
while { count(_spots) != count(_excludes) && _c < (count _spots) } do {
|
||||
scopeName "mainSearch";
|
||||
{
|
||||
if(!(_forEachIndex in _excludes)) then {
|
||||
_index = _buckets pushBack [_x, [_x]];
|
||||
_excludes pushBack _forEachIndex;
|
||||
_bucketPos = _x select 0;
|
||||
_bucketList = (_buckets select _index) select 1;
|
||||
breakTo "mainSearch";
|
||||
};
|
||||
} forEach _spots;
|
||||
{
|
||||
if(!(_forEachIndex in _excludes)) then {
|
||||
_testPos = (_x select 0);
|
||||
if(_testPos vectorDistanceSqr _bucketPos <= 100) then {
|
||||
_bucketList pushBack _x;
|
||||
_excludes pushBack _forEachIndex;
|
||||
};
|
||||
};
|
||||
} forEach _spots;
|
||||
_c = _c + 1;
|
||||
};
|
||||
_finalBuckets = [];
|
||||
_largest = -1;
|
||||
_largestIndex = 0;
|
||||
{
|
||||
_index = _finalBuckets pushBack [];
|
||||
_bucketList = _finalBuckets select _index;
|
||||
{
|
||||
_testPos = (_x select 0);
|
||||
if(!terrainIntersectASL [_pos, _testPos] && {!lineIntersects [_pos, _testPos]}) then {
|
||||
_bucketList pushBack _x;
|
||||
};
|
||||
} forEach (_x select 1);
|
||||
if((count _bucketList) > _largest) then {
|
||||
_largest = (count _bucketList);
|
||||
_largestIndex = _index;
|
||||
};
|
||||
} forEach _buckets;
|
||||
|
||||
_finalBucket = _finalBuckets select _largestIndex;
|
||||
_owners = HASH_CREATE;
|
||||
|
||||
if(count _finalBucket > 0) then {
|
||||
_avgX = 0;
|
||||
_avgY = 0;
|
||||
_avgZ = 0;
|
||||
{
|
||||
player sideChat format["x: %1", _x];
|
||||
_avgX = _avgX + ((_x select 0) select 0);
|
||||
_avgY = _avgY + ((_x select 0) select 1);
|
||||
_avgZ = _avgZ + ((_x select 0) select 2);
|
||||
_owner = _x select 1;
|
||||
if(HASH_HASKEY(_owners, _owner)) then {
|
||||
_count = HASH_GET(_owners, _owner);
|
||||
HASH_SET(_owners, _owner, _count+1);
|
||||
} else {
|
||||
HASH_SET(_owners, _owner, 1);
|
||||
};
|
||||
} forEach _finalBucket;
|
||||
_count = count _finalBucket;
|
||||
_finalPos = [_avgX/_count, _avgY/_count, _avgZ/_count];
|
||||
_maxOwner = -1;
|
||||
_maxOwnerIndex = 0;
|
||||
{
|
||||
if((_owners select 1) select _forEachIndex > _maxOwner) then {
|
||||
_maxOwner = (_owners select 1) select _forEachIndex;
|
||||
_maxOwnerIndex = _forEachIndex;
|
||||
};
|
||||
} forEach (_owners select 0);
|
||||
_finalOwner = (_owners select 0) select _maxOwnerIndex;
|
||||
};
|
||||
};
|
||||
[_finalPos, _owner];
|
@ -1,8 +1,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
//#define DEBUG_MODE_FULL
|
||||
private ["_divergence","_pos","_vec","_longestReturn","_shortestReturn","_resultPositions","_p1","_p2","_p","_v","_cp","_vecRotateMap","_result",
|
||||
"_resultPos","_distance","_count","_pos2","_radOffset","_offset","_offsetPos","_offsetVector"];
|
||||
_divergence = 0.3;
|
||||
_pos = _this select 0;
|
||||
_vec = _this select 1;
|
||||
if(count _this > 2) then {
|
||||
_divergence = _this select 2;
|
||||
};
|
||||
_count = 3;
|
||||
if(count _this > 3) then {
|
||||
_count = _this select 3;
|
||||
};
|
||||
_longestReturn = -1000000000;
|
||||
_shortestReturn = 1000000000;
|
||||
_resultPositions = [];
|
||||
@ -10,7 +19,7 @@ _p1 = [0,0,0];
|
||||
_p2 = +_vec;
|
||||
_p = (_vec call CBA_fnc_vect2polar);
|
||||
_v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect;
|
||||
_cp = [_vec, _v] call BIS_fnc_crossProduct;
|
||||
_cp = _vec vectorCrossProduct _v;
|
||||
|
||||
_vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap);
|
||||
|
||||
@ -24,28 +33,21 @@ if(!isNil "_resultPos") then {
|
||||
if(_distance > _longestReturn) then {
|
||||
_longestReturn = _distance;
|
||||
};
|
||||
_resultPositions set[(count _resultPositions), _result];
|
||||
_resultPositions pushBack _result;
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
// DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]];
|
||||
#endif
|
||||
};
|
||||
_count = 8;
|
||||
|
||||
_pos2 = [
|
||||
(_pos select 0)+((_vec select 0)*1000),
|
||||
(_pos select 1)+((_vec select 1)*1000),
|
||||
(_pos select 2)+((_vec select 2)*1000)
|
||||
];
|
||||
|
||||
_pos2 = _pos vectorAdd (_vec vectorMultiply 1000);
|
||||
{
|
||||
for "_i" from 0 to ceil(_count*_x) do {
|
||||
_radOffset = random 360;
|
||||
_offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine);
|
||||
_offsetPos = [
|
||||
(_pos2 select 0)+((_offset select 0)*(_divergence*_x)),
|
||||
(_pos2 select 1)+((_offset select 1)*(_divergence*_x)),
|
||||
(_pos2 select 2)+((_offset select 2)*(_divergence*_x))
|
||||
];
|
||||
_offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY;
|
||||
_offsetPos = _pos2 vectorAdd (_offset vectorMultiply (_divergence*_x));
|
||||
_offsetVector = _pos vectorFromTo _offsetPos;
|
||||
_result = [_pos, _offsetVector] call FUNC(shootRay);
|
||||
_resultPos = _result select 0;
|
||||
if(!isNil "_resultPos") then {
|
||||
@ -56,9 +58,10 @@ _pos2 = [
|
||||
if(_distance > _longestReturn) then {
|
||||
_longestReturn = _distance;
|
||||
};
|
||||
_resultPositions set[(count _resultPositions), _result];
|
||||
_resultPositions pushBack _result;
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
// DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]];
|
||||
drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]];
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
@ -11,13 +11,8 @@ _lastPos = +_pos;
|
||||
{
|
||||
scopeName "mainSearch";
|
||||
for "_i" from 1 to 10 do {
|
||||
_nextPos = [
|
||||
(_lastPos select 0)+((_vec select 0)*_x),
|
||||
(_lastPos select 1)+((_vec select 1)*_x),
|
||||
(_lastPos select 2)+((_vec select 2)*_x)
|
||||
];
|
||||
|
||||
if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then {
|
||||
_nextPos = _lastPos vectorAdd (_vec vectorMultiply _x);
|
||||
if(terrainIntersectASL [_lastPos, _nextPos] || {lineIntersects [_lastPos, _nextPos]}) then {
|
||||
_resultPos = _lastPos;
|
||||
breakTo "mainSearch";
|
||||
} else {
|
||||
@ -25,6 +20,5 @@ _lastPos = +_pos;
|
||||
_lastPos = _nextPos;
|
||||
};
|
||||
};
|
||||
|
||||
} forEach _fidelity;
|
||||
[_resultPos, _distance];
|
26
addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf
Normal file
26
addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Author: jaynus
|
||||
* Handler function for laser network code.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Emitter
|
||||
* 1: Owner
|
||||
*
|
||||
* Return value:
|
||||
* [position, direction]
|
||||
*/
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"];
|
||||
|
||||
_emmiter = _this select 0;
|
||||
_owner = _this select 1;
|
||||
|
||||
// Not in a vehicle....
|
||||
// @TODO: handle lasering from turrets
|
||||
if( (vehicle _emmiter) == _emmiter && alive _emmiter && (currentWeapon _emmiter) == "LaserDesignator") exitWith {
|
||||
[(eyePos _emmiter), (eyeDirection _emmiter)]
|
||||
};
|
||||
|
||||
[-1,-1]
|
@ -1,32 +0,0 @@
|
||||
class RscPicture;
|
||||
class RscText;
|
||||
class RscControlsGroupNoScrollbars;
|
||||
/* This disables air radar. We need to make this a seperate HUD addon
|
||||
class RscInGameUI
|
||||
{
|
||||
class RscUnitInfo
|
||||
{
|
||||
class CA_Radar: RscControlsGroupNoScrollbars
|
||||
{
|
||||
class controls
|
||||
{
|
||||
class CA_RadarBackground: RscPicture {
|
||||
colorText[] = {0,0,0,0};
|
||||
text = "";
|
||||
};
|
||||
class CA_RadarIcon: RscPicture {
|
||||
colorText[] = {0,0,0,0};
|
||||
};
|
||||
class CA_Heading: RscText {
|
||||
colorText[] = {0,0,0,0};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class CfgInGameUI
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
*/
|
@ -8,12 +8,6 @@ class CfgVehicles {
|
||||
class Turrets {
|
||||
class MainTurret;
|
||||
};
|
||||
|
||||
// TODO: move these to a different HUD addon
|
||||
// commanderCanSee = 2+32;
|
||||
// gunnerCanSee = 2+32;
|
||||
// driverCanSee = 2+32;
|
||||
|
||||
};
|
||||
|
||||
class Helicopter_Base_F: Helicopter {};
|
||||
|
@ -5,7 +5,8 @@ PREP(laserHudDesignateOn);
|
||||
PREP(laserHudDesignateOff);
|
||||
PREP(unitTurretHasDesignator);
|
||||
|
||||
GVAR(laser) = nil;
|
||||
PREP(findLaserSource);
|
||||
|
||||
GVAR(active) = false;
|
||||
|
||||
FUNC(getPosASL) = {visiblePositionASL (_this select 0)};
|
||||
|
@ -10,8 +10,6 @@ class CfgPatches {
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgUI.hpp"
|
||||
|
||||
#include "CfgEventhandlers.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
|
30
addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf
Normal file
30
addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Author: jaynus
|
||||
* Handler function for laser network code.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Emitter
|
||||
* 1: Owner
|
||||
*
|
||||
* Return value:
|
||||
* [position, direction]
|
||||
*/
|
||||
//findLaserSource.sqf
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"];
|
||||
|
||||
_emmiter = _this select 0;
|
||||
_owner = _this select 1;
|
||||
|
||||
_gunnerInfo = [_emmiter, (currentWeapon _emmiter)] call CBA_fnc_getFirer;
|
||||
_turretInfo = [_emmiter, _gunnerInfo select 1] call EFUNC(common,getTurretDirection);
|
||||
_povPos = _turretInfo select 0;
|
||||
_povDir = _turretInfo select 1;
|
||||
|
||||
if(!isNil "_povPos" && !isNil "_povDir") exitWith {
|
||||
[_povPos, _povDir]
|
||||
};
|
||||
|
||||
[-1,-1]
|
@ -1,28 +1,25 @@
|
||||
/*
|
||||
* Author: jaynus
|
||||
* Turns off passed laser self designation.
|
||||
*
|
||||
* Argument:
|
||||
* 0: Shooter, player shooting the laser
|
||||
* 1: LaserUUID, the UUID of the laser returned by EFUNC(laser,laserOn)
|
||||
* 2: Local laser target, unused.
|
||||
*
|
||||
* Return value:
|
||||
* true
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if( (count _this) > 2) then {
|
||||
EXPLODE_3_PVT(_this,_vehicle,_shooter,_laserTarget);
|
||||
// We got the optional vehicle list, clear the parameters
|
||||
_vehicle setVariable[QGVAR(currentTarget), [], true];
|
||||
EXPLODE_3_PVT(_this,_shooter,_laserUuid, _localLaserTarget);
|
||||
|
||||
[_laserUuid] call EFUNC(laser,laserOff);
|
||||
// @TODO: Nou gets to field all tickets about missing lasers.
|
||||
//deleteVehicle _localLaserTarget;
|
||||
};
|
||||
|
||||
if(isNil QGVAR(laser)) exitWith {
|
||||
false
|
||||
};
|
||||
if(!local GVAR(laser)) then {
|
||||
false
|
||||
};
|
||||
|
||||
_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil];
|
||||
if(!isNil "_handle") then {
|
||||
[_handle] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
REM(ACE_LASERS, GVAR(laser));
|
||||
deleteVehicle GVAR(laser);
|
||||
GVAR(laser) = nil;
|
||||
GVAR(active) = false;
|
||||
|
||||
|
||||
|
||||
true
|
@ -1,3 +1,13 @@
|
||||
/*
|
||||
* Author: jaynus
|
||||
* Turns on laser self designation from this vehicle based on the turret.
|
||||
* There are no arguments, because it is all strictly based on the users vehicle.
|
||||
*
|
||||
* Argument:
|
||||
*
|
||||
* Return value:
|
||||
* N/A
|
||||
*/
|
||||
//#define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
@ -6,102 +16,74 @@ TRACE_1("enter", _this);
|
||||
#define FCS_UPDATE_DELAY 1
|
||||
|
||||
FUNC(laserHudDesignatePFH) = {
|
||||
private["_strongestResultPos", "_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"];
|
||||
private["_strongestResultPos", "_args", "_localLaserTarget", "_laserResultPosition", "_laserResult", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turretInfo", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"];
|
||||
_args = _this select 0;
|
||||
_laserTarget = _args select 0;
|
||||
_shooter = _args select 1;
|
||||
|
||||
TRACE_1("", _args, (_laserTarget getVariable["ACE_LASER_CODE"]));
|
||||
_shooter = _args select 0;
|
||||
_localLaserTarget = _args select 2;
|
||||
_vehicle = vehicle _shooter;
|
||||
TRACE_1("", _args);
|
||||
|
||||
if((vehicle ACE_player) != _shooter || !alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(active) ) exitWith {
|
||||
[_vehicle, _shooter, _laserTarget] call FUNC(laserHudDesignateOff);
|
||||
if((vehicle _shooter) == _shooter || {!alive _shooter} || {isNull _vehicle} || {!GVAR(active)} ) exitWith {
|
||||
_args call FUNC(laserHudDesignateOff);
|
||||
};
|
||||
if(!([_shooter] call FUNC(unitTurretHasDesignator)) ) exitWith {
|
||||
[_vehicle, _shooter, _laserTarget] call FUNC(laserHudDesignateOff);
|
||||
_args call FUNC(laserHudDesignateOff);
|
||||
};
|
||||
|
||||
if( (count _args) < 3) then {
|
||||
_args set[2, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
if( (count _args) < 4) then {
|
||||
_args set[3, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
};
|
||||
_forceUpdateTime = _args select 2;
|
||||
_forceUpdateTime = _args select 3;
|
||||
|
||||
_vehicle = vehicle _shooter;
|
||||
_weapon = currentWeapon _vehicle;
|
||||
// @TODO: We don't have anything here we need to do the calculations for right now
|
||||
/*
|
||||
|
||||
// Retrieve the gunner and turret memory point information
|
||||
_gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer;
|
||||
_gunnerInfo = [_vehicle, (currentWeapon _vehicle)] call CBA_fnc_getFirer;
|
||||
_turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection);
|
||||
_povPos = _turretInfo select 0;
|
||||
_povDir = _turretInfo select 1;
|
||||
|
||||
_targetInfo = _vehicle getVariable[QGVAR(currentTarget), [] ];
|
||||
if( (count _targetInfo) > 0) then {
|
||||
if(_laserTarget != (_targetInfo select 0) ) then {
|
||||
_targetInfo = []
|
||||
_laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE];
|
||||
_waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH];
|
||||
|
||||
|
||||
_laserResult = [_povPos, [_waveLength,_waveLength], _laserCode] call EFUNC(laser,seekerFindLaserSpot);
|
||||
_laserResultPosition = _laserResult select 0;
|
||||
TRACE_1("Search", _laserResult);
|
||||
|
||||
if((count _laserResult) > 0) then {
|
||||
// @TODO: Nou gets to field all tickets about missing lasers.
|
||||
//_localLaserTarget setPosASL _laserResultPosition;
|
||||
};
|
||||
};
|
||||
if( (count _targetInfo) < 1) then {
|
||||
_targetInfo = [_laserTarget, 1001]; // TODO: set laser code
|
||||
_vehicle setVariable[QGVAR(currentTarget), _targetInfo, true];
|
||||
_laserTarget setVariable[QGVAR(owner), _vehicle, true];
|
||||
};
|
||||
|
||||
|
||||
_result = [_povPos, _povDir] call EFUNC(laser,shootCone);
|
||||
if((count _result) > 0) then {
|
||||
_resultPositions = _result select 2;
|
||||
|
||||
if((count _resultPositions) > 0) then {
|
||||
_strongestResultPos = [_resultPositions, _povPos] call EFUNC(laser,findStrongestRay);
|
||||
|
||||
// If the laser has moved less than a half meter, then dont move it.
|
||||
// Just regular use of lasers will commonly make them move this much,
|
||||
// but not across multiple close frames.
|
||||
// This loses accuracy a little, but saves position updates per frame.
|
||||
TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _strongestResultPos, ((getPosASL _laserTarget) distance _pos));
|
||||
*/
|
||||
|
||||
if(diag_tickTime > _forceUpdateTime) then {
|
||||
TRACE_1("FCS Update", "");
|
||||
["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent;
|
||||
};
|
||||
|
||||
//if( (_laserTarget distance _strongestResultPos) > 0.1) then {
|
||||
TRACE_1("LaserPos Update", "");
|
||||
_laserTarget setPosATL (ASLToATL _strongestResultPos);
|
||||
//};
|
||||
|
||||
if(diag_tickTime > _forceUpdateTime) then {
|
||||
_args set[2, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
};
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"];
|
||||
|
||||
{
|
||||
private["_position"];
|
||||
_position = _x select 0;
|
||||
drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ];
|
||||
} forEach _resultPositions;
|
||||
#endif
|
||||
};
|
||||
_args set[3, diag_tickTime + FCS_UPDATE_DELAY];
|
||||
};
|
||||
|
||||
_this set[0, _args];
|
||||
};
|
||||
|
||||
private ["_laserTarget", "_handle", "_vehicle"];
|
||||
|
||||
if(isNil QGVAR(laser)) then {
|
||||
_laserTarget = "LaserTargetW" createVehicle (getpos ACE_player);
|
||||
private ["_laserTarget", "_handle", "_vehicle", "_laserUuid", "_waveLength", "_beamSpread", "_laserCode"];
|
||||
|
||||
if(!GVAR(active)) then {
|
||||
GVAR(active) = true;
|
||||
|
||||
_handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, ACE_player]] call cba_fnc_addPerFrameHandler;
|
||||
_laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false];
|
||||
TRACE_1("Activating laser", "");
|
||||
|
||||
// Clear the vehicle parameters
|
||||
_vehicle setVariable[QGVAR(currentTarget), [], true];
|
||||
// Get the self-designation variables, or use defaults
|
||||
_laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE];
|
||||
_waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH];
|
||||
_beamSpread = (vehicle ACE_player) getVariable[QGVAR(currentBeamSpread), ACE_DEFAULT_LASER_BEAMSPREAD];
|
||||
|
||||
GVAR(laser) = _laserTarget;
|
||||
_laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), _waveLength, _laserCode, _beamSpread] call EFUNC(laser,laserOn);
|
||||
|
||||
// @TODO: Create the local target for the players side
|
||||
// @TODO: Nou gets to field all tickets about missing lasers.
|
||||
//_localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player);
|
||||
|
||||
_handle = [FUNC(laserHudDesignatePFH), 0.1, [ACE_player, _laserUuid, nil]] call cba_fnc_addPerFrameHandler;
|
||||
} else {
|
||||
[] call FUNC(laserHudDesignateOff);
|
||||
[] call FUNC(laserHudDesignateOn);
|
||||
|
@ -6,12 +6,18 @@
|
||||
<German>Lasermarkierer<br/>an</German>
|
||||
<Spanish>Laser<br/>Designador encendido</Spanish>
|
||||
<Russian>ЛЦУ<br/>ВКЛ</Russian>
|
||||
<Czech>Laserový<br/>značkovač zapnut</Czech>
|
||||
<Polish>Desygnator<br/>laserowy wł.</Polish>
|
||||
<French>Désignateur<br/>Laser Allumé</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Laser_SelfDesignate_DesignatorOff">
|
||||
<English>Laser<br/>Designator Off</English>
|
||||
<German>Lasermarkierer<br/>aus</German>
|
||||
<Spanish>Laser<br/>Designador apagado</Spanish>
|
||||
<Russian>ЛЦУ<br/>ВЫКЛ</Russian>
|
||||
<Czech>Laserový<br/>značkovat vypnut</Czech>
|
||||
<Polish>Desygnator<br/>laserowy wył.</Polish>
|
||||
<French>Désignateur<br/>Laser Éteint</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -1,29 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Laserpointer">
|
||||
<Key ID="STR_ACE_Laserpointer_red">
|
||||
<English>Laser Pointer (red)</English>
|
||||
<French>Pointeur laser (rouge)</French>
|
||||
<German>Laserpointer (rot)</German>
|
||||
<Russian>Лазерный прицел (красный)</Russian>
|
||||
<Czech>Laserové ukazovátko (červené)</Czech>
|
||||
<Polish>Wskaźnik laserowy (czerwony)</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Laserpointer_green">
|
||||
<English>Laser Pointer (green)</English>
|
||||
<French>Pointeur laser (vert)</French>
|
||||
<German>Laserpointer (grün)</German>
|
||||
<Russian>Лазерный прицел (зелёный)</Russian>
|
||||
<Czech>Laserové ukazovátko (zelené)</Czech>
|
||||
<Polish>Wskaźnik laserowy (zielony)</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Laserpointer_Description">
|
||||
<English>Emits visible light. </English>
|
||||
<French>Diffuse un rayon lumineux visible.</French>
|
||||
<German>Strahlt sichtbares Licht aus. </German>
|
||||
<Russian>Испускает узкий пучок видимого света.</Russian>
|
||||
<Czech>Vyzařuje viditelné světlo.</Czech>
|
||||
<Polish>Wydziela widzialne światło.</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Laserpointer_useLaser">
|
||||
<English><t color='#9cf953'>Use: </t>Turn Laser ON/OFF</English>
|
||||
<Czech><t color='#9cf953'>Použití: </t>Zapnout/vypnout laser</Czech>
|
||||
<French><t color='#9cf953'>Utiliser : </t>laser on/off</French>
|
||||
<French><t color='#9cf953'>Utiliser : </t>laser allumé/éteint</French>
|
||||
<German><t color='#9cf953'>Benutzen: </t>Laser EIN/AUS</German>
|
||||
<Italian><t color='#9cf953'>Uso: </t>Laser ON/OFF</Italian>
|
||||
<Polish><t color='#9cf953'>Użyj: </t>wł./wył. lasera</Polish>
|
||||
<Polish><t color='#9cf953'>Użyj: </t>wł./wył. laser</Polish>
|
||||
<Portuguese><t color='#9cf953'>Uso: </t>Ativar/Desativar laser</Portuguese>
|
||||
<Russian><t color='#9cf953'>Использовать: </t>вкл/выкл лазер</Russian>
|
||||
<Spanish><t color='#9cf953'>Usar: </t>encender/apagar láser</Spanish>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="logistics_uavbattery">
|
||||
<Key ID="STR_ACE_logistics_uavbattery_Full">
|
||||
@ -21,7 +21,7 @@
|
||||
<French>Pas de batterie UAV</French>
|
||||
<Polish>Potrzebujesz baterii UAV</Polish>
|
||||
<Hungarian>Szükséged van egy UAV akkumulátorra</Hungarian>
|
||||
<Czech>Potřebuješ UAV-Baterii</Czech>
|
||||
<Czech>Potřebuješ UAV baterii</Czech>
|
||||
<Portuguese>Você precisa de uma Bateria para VANT</Portuguese>
|
||||
<Italian>Hai bisogno di una Batteria UAV</Italian>
|
||||
<Russian>Требуется аккумулятор для БПЛА</Russian>
|
||||
@ -45,7 +45,7 @@
|
||||
<French>Batterie UAV</French>
|
||||
<Polish>Bateria UAV</Polish>
|
||||
<Hungarian>UAV akkumulátor</Hungarian>
|
||||
<Czech>UAV-Baterie</Czech>
|
||||
<Czech>UAV baterie</Czech>
|
||||
<Portuguese>Bateria para VANT</Portuguese>
|
||||
<Italian>Batteria UAV</Italian>
|
||||
<Russian>Аккумулятор БПЛА</Russian>
|
||||
@ -55,7 +55,7 @@
|
||||
<German>Verwendet zum Aufladen von tragbaren UAV's</German>
|
||||
<Spanish>Usada para reabastecer el VANT</Spanish>
|
||||
<French>Utilisée pour recharger l'UAV</French>
|
||||
<Polish>Używana do naładowania UAV</Polish>
|
||||
<Polish>Używana do naładowania baterii przenośnego UAV</Polish>
|
||||
<Hungarian>Hordozható UAV-ok működéséhez való akkumulátor</Hungarian>
|
||||
<Czech>Používané k dobíjení UAV</Czech>
|
||||
<Portuguese>Usada para reabastecer VANT</Portuguese>
|
||||
|
@ -1,17 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="Wirecutter">
|
||||
<Key ID="STR_ACE_logistics_wirecutter_wirecutterName">
|
||||
<English>Wirecutter</English>
|
||||
<French>Coupe clôture</French>
|
||||
<German>Drahtschneider</German>
|
||||
<Spanish>Cortador de cables</Spanish>
|
||||
<Russian>Клещи-кусачки</Russian>
|
||||
<Czech>Štípací kleště</Czech>
|
||||
<Polish>Nożyce do cięcia drutu</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_wirecutter_wirecutterDescription">
|
||||
<English>Wirecutter</English>
|
||||
<German>Schneidet Draht.</German>
|
||||
<Spanish>Cortador de cables</Spanish>
|
||||
<Russian>Позволяют быстро перекусывать сеточные конструкции.</Russian>
|
||||
<Czech>Štípačky</Czech>
|
||||
<Polish>Służą do cięcia drutu i płotów</Polish>
|
||||
<French>Coupe clôture</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_logistics_wirecutter_CutFence">
|
||||
<English>Cut Fence</English>
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="MagazineRepack">
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackMagazines">
|
||||
@ -19,7 +20,7 @@
|
||||
<Spanish>Menú de selección de cargador</Spanish>
|
||||
<French>Sélectionner menu des chargeurs</French>
|
||||
<Polish>Menu wyboru magazynków</Polish>
|
||||
<Czech>Zvolit Menu Zásobníků</Czech>
|
||||
<Czech>Zvolit Menu zásobníků</Czech>
|
||||
<Italian>Seleziona Menù di Ricarica</Italian>
|
||||
<Portuguese>Menu de Seleção de Carregador</Portuguese>
|
||||
<Hungarian>Fegyvertár menü kiválasztás</Hungarian>
|
||||
@ -31,7 +32,7 @@
|
||||
<Spanish>Seleccionar cargador</Spanish>
|
||||
<French>Sélectionner chargeur</French>
|
||||
<Polish>Wybierz magazynek</Polish>
|
||||
<Czech>Zvolit Zásobník</Czech>
|
||||
<Czech>Zvolit zásobník</Czech>
|
||||
<Italian>Seleziona Caricatore</Italian>
|
||||
<Portuguese>Selecionar Carregador</Portuguese>
|
||||
<Hungarian>Tár kiválasztása</Hungarian>
|
||||
@ -43,7 +44,7 @@
|
||||
<Spanish>Reorganizando cargadores ...</Spanish>
|
||||
<French>Réorganisation des chargeurs ...</French>
|
||||
<Polish>Przepakowywanie magazynków ...</Polish>
|
||||
<Czech>Páskuji Zásobníky ...</Czech>
|
||||
<Czech>Páskuji zásobníky ...</Czech>
|
||||
<Italian>Sto ricaricando le munizioni ...</Italian>
|
||||
<Portuguese>Reorganizando Carregadores ...</Portuguese>
|
||||
<Hungarian>Újratárazás ...</Hungarian>
|
||||
@ -55,7 +56,7 @@
|
||||
<Spanish>Cargadores reorganizados</Spanish>
|
||||
<French>Chargeurs réorganisés</French>
|
||||
<Polish>Magazynki przepakowane</Polish>
|
||||
<Czech>Přepáskované Zásobníky</Czech>
|
||||
<Czech>Přepáskované zásobníky</Czech>
|
||||
<Italian>Caricatore ricaricato</Italian>
|
||||
<Portuguese>Carregadores Reorganizados</Portuguese>
|
||||
<Hungarian>Újratárazott tárak</Hungarian>
|
||||
@ -66,7 +67,7 @@
|
||||
<German>%1 volle(s) Magazin(e) und %2 übrig gebliebene Patrone(n)</German>
|
||||
<Spanish>%1 cargador(es) completo(s) y %2 bala(s) extra(s)</Spanish>
|
||||
<French>%1 chargeur(s) plein(s) et %2 cartouche(s) en rab</French>
|
||||
<Polish>%1 pełnych magazynków i %2 dodatkowych naboi</Polish>
|
||||
<Polish>Pełnych magazynków: %1.<br /> Dodatkowych naboi: %2.</Polish>
|
||||
<Czech>%1 plný zásobník(y) a %2 munice navíc</Czech>
|
||||
<Italian>%1 caricatore/i pieno e %2 munizioni extra</Italian>
|
||||
<Portuguese>%1 carregador(es) cheio(s) e %2 disparo(s) a mais</Portuguese>
|
||||
@ -75,21 +76,30 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackComplete">
|
||||
<English>Repacking Finished</English>
|
||||
<French>Réorganisation terminé</French>
|
||||
<German>Wiederverpacken Fertig</German>
|
||||
<Spanish>Reembalaje finalizado</Spanish>
|
||||
<Russian>Перепаковка завершена</Russian>
|
||||
<Czech>Páskování dokončeno</Czech>
|
||||
<Polish>Przepakowywanie zakończone</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackInterrupted">
|
||||
<English>Repacking Interrupted</English>
|
||||
<French>Réorganisation Interrompue</French>
|
||||
<German>Umpacken Unterbrochen</German>
|
||||
<Spanish>Reembalaje interrumpido</Spanish>
|
||||
<Russian>Перепаковка прервана</Russian>
|
||||
<Czech>Páskování přerušeno</Czech>
|
||||
<Polish>Przepakowywanie przerwane</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_MagazineRepack_RepackedMagazinesCount">
|
||||
<English>%1 Full and %2 Partial</English>
|
||||
<French>%1 Complet et %2 Partiellement</French>
|
||||
<German>%1 Vollständigen und %2 Teilweisen</German>
|
||||
<Spanish>%1 Total y %2 Parcial</Spanish>
|
||||
<Russian>%1 полных и %2 неполных</Russian>
|
||||
<Czech>%1 plný a %2 částečně</Czech>
|
||||
<Polish>Pełnych: %1.<br />Częściowo pełnych: %2.</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -107,4 +107,71 @@ class CfgAmmo {
|
||||
//typicalspeed = 792;
|
||||
//airfriction = -0.0008577;
|
||||
};
|
||||
|
||||
|
||||
/* .338 Lapua Magnum */
|
||||
|
||||
// IR Dim
|
||||
class B_338_Ball;
|
||||
class ACE_B_338_Ball_Tracer_Dim: B_338_Ball {
|
||||
nvgOnly = 1;
|
||||
};
|
||||
|
||||
//AP
|
||||
class ACE_B_338_Ball_AP: B_338_Ball {
|
||||
caliber = 3.6;
|
||||
hit = 18.9;
|
||||
};
|
||||
|
||||
//SD
|
||||
class ACE_B_338_Ball_SD: B_338_Ball {
|
||||
airFriction = -0.00036;
|
||||
hit = 15.75;
|
||||
supersonicCrackFar[] = {};
|
||||
supersonicCrackNear[] = {};
|
||||
typicalSpeed = 320;
|
||||
audibleFire = 1.2;
|
||||
visibleFire = 4.0;
|
||||
};
|
||||
|
||||
|
||||
/* .338 Norma Magnum */
|
||||
|
||||
//IR Dim
|
||||
class B_338_NM_Ball;
|
||||
class ACE_B_338_NM_Ball_Tracer_Dim: B_338_NM_Ball {
|
||||
nvgOnly = 1;
|
||||
};
|
||||
|
||||
//AP
|
||||
class ACE_B_338_NM_Ball_AP: B_338_NM_Ball {
|
||||
caliber = 3.2;
|
||||
hit = 16.8;
|
||||
};
|
||||
|
||||
|
||||
/* 9.3x64mm */
|
||||
|
||||
//IR Dim
|
||||
class B_93x64_Ball;
|
||||
class ACE_B_93x64_Ball_Tracer_Dim: B_93x64_Ball {
|
||||
nvgOnly = 1;
|
||||
};
|
||||
|
||||
//AP
|
||||
class ACE_B_93x64_Ball_AP: B_93x64_Ball {
|
||||
caliber = 4.0;
|
||||
hit = 21;
|
||||
};
|
||||
|
||||
//SD
|
||||
class ACE_B_93x64_Ball_SD: B_93x64_Ball {
|
||||
airFriction = -0.00042;
|
||||
hit = 17.5;
|
||||
supersonicCrackFar[] = {};
|
||||
supersonicCrackNear[] = {};
|
||||
typicalSpeed = 320;
|
||||
audibleFire = 1.2;
|
||||
visibleFire = 4.0;
|
||||
};
|
||||
};
|
||||
|
@ -136,4 +136,131 @@ class CfgMagazines {
|
||||
displayNameShort = "$STR_ACE_20Rnd_762x51_mag_APNameShort";
|
||||
descriptionShort = "$STR_ACE_20Rnd_762x51_mag_APDescription";
|
||||
};
|
||||
|
||||
|
||||
/* 338 Lapua Magnum */
|
||||
class 10Rnd_338_Mag;
|
||||
class ACE_10Rnd_338_Mag_Tracer: 10Rnd_338_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "$STR_ACE_10Rnd_338_Mag_TracerName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_338_Mag_TracerNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_338_Mag_TracerDescription";
|
||||
tracersEvery = 1;
|
||||
};
|
||||
|
||||
class ACE_10Rnd_338_Mag_Tracer_Dim: ACE_10Rnd_338_Mag_Tracer {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_B_338_Ball_Tracer_Dim";
|
||||
displayName = "$STR_ACE_10Rnd_388_Mag_Tracer_DimName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_338_Mag_Tracer_DimNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_338_Mag_Tracer_DimDescription";
|
||||
};
|
||||
|
||||
class ACE_10Rnd_338_Mag_AP: 10Rnd_338_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo ="ACE_B_338_Ball_AP";
|
||||
displayName = "$STR_ACE_10Rnd_338_Mag_APName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_338_Mag_APNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_338_Mag_APDescription";
|
||||
};
|
||||
|
||||
class ACE_10Rnd_338_Mag_SD: 10Rnd_338_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_B_338_Ball_SD";
|
||||
displayName = "$STR_ACE_10Rnd_338_Mag_SDName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_338_Mag_SDNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_338_Mag_SDDescription";
|
||||
initSpeed = 320;
|
||||
};
|
||||
|
||||
|
||||
/* .333 Norma Magnum */
|
||||
|
||||
class 130Rnd_338_Mag;
|
||||
class ACE_130Rnd_338_Mag_Tracer: 130Rnd_338_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "$STR_ACE_130Rnd_338_Mag_TracerName";
|
||||
displayNameShort = "$STR_ACE_130Rnd_338_Mag_TracerNameShort";
|
||||
descriptionShort = "$STR_ACE_130Rnd_338_Mag_TracerDescription";
|
||||
tracersEvery = 1;
|
||||
};
|
||||
|
||||
class ACE_130Rnd_338_Mag_Tracer_Dim: ACE_130Rnd_338_Mag_Tracer {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_B_338_NM_Ball_Tracer_Dim";
|
||||
displayName = "$STR_ACE_130Rnd_338_Mag_Tracer_DimName";
|
||||
displayNameShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort";
|
||||
descriptionShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimDescription";
|
||||
};
|
||||
|
||||
class ACE_130Rnd_338_Mag_AP: 130Rnd_338_Mag {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
ammo = "ACE_B_338_NM_Ball_AP";
|
||||
displayName = "$STR_ACE_130Rnd_338_Mag_APName";
|
||||
displayNameShort = "$STR_ACE_130Rnd_338_Mag_APNameShort";
|
||||
descriptionShort = "$STR_ACE_130Rnd_338_Mag_APDescription";
|
||||
};
|
||||
|
||||
|
||||
/* 9.3x64mm */
|
||||
//10Rnd Mags
|
||||
|
||||
class 10Rnd_93x64_DMR_05_Mag;
|
||||
class ACE_10Rnd_93x64_DMR_05_Mag_Tracer: 10Rnd_93x64_DMR_05_Mag {
|
||||
author = "$STR_ACE_Common_ACEETeam";
|
||||
displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerDescription";
|
||||
tracersEvery = 1;
|
||||
};
|
||||
|
||||
class ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim: ACE_10Rnd_93x64_DMR_05_Mag_Tracer {
|
||||
author = "$STR_ACE_Common_ACEETeam";
|
||||
ammo ="ACE_B_93x64_Ball_Tracer_Dim";
|
||||
displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription";
|
||||
};
|
||||
|
||||
class ACE_10Rnd_93x64_DMR_05_Mag_AP: 10Rnd_93x64_DMR_05_Mag {
|
||||
author = "$STR_ACE_Common_ACEETeam";
|
||||
ammo = "ACE_B_93x64_Ball_AP";
|
||||
displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription";
|
||||
};
|
||||
|
||||
class ACE_10Rnd_93x64_DMR_05_Mag_SD: 10Rnd_93x64_DMR_05_Mag {
|
||||
author = "$STR_ACE_Common_ACEETeam";
|
||||
ammo = "ACE_B_93x64_Ball_SD";
|
||||
displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDName";
|
||||
displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDNameShort";
|
||||
descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDDescription";
|
||||
initSpeed = 320;
|
||||
};
|
||||
//150Rnd Belt
|
||||
class 150Rnd_93x64_Mag;
|
||||
class ACE_150Rnd_93x64_Mag_Tracer: 150Rnd_93x64_Mag {
|
||||
author = "$STR_ACE_Common_ACEETeam";
|
||||
displayName = "$STR_ACE_150Rnd_93x64_Mag_TracerName";
|
||||
displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_TracerNameShort";
|
||||
descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_TracerDescription";
|
||||
tracersEvery = 1;
|
||||
};
|
||||
|
||||
class ACE_150Rnd_93x64_Mag_Tracer_Dim: ACE_150Rnd_93x64_Mag_Tracer {
|
||||
author = "$STR_ACE_Common_ACEETeam";
|
||||
ammo ="ACE_B_93x64_Ball_Tracer_Dim";
|
||||
displayName = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimName";
|
||||
displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort";
|
||||
descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimDescription";
|
||||
};
|
||||
|
||||
class ACE_150Rnd_93x64_Mag_AP: 150Rnd_93x64_Mag {
|
||||
author = "$STR_ACE_Common_ACEETeam";
|
||||
ammo = "ACE_B_93x64_Ball_AP";
|
||||
displayName = "$STR_ACE_150Rnd_93x64_Mag_APName";
|
||||
displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_APNameShort";
|
||||
descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_APDescription";
|
||||
};
|
||||
};
|
||||
|
@ -153,6 +153,20 @@ class CfgVehicles {
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,2);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,2);
|
||||
MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_AP,2);*/
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_Tracer,2);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_Tracer_Dim,2);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_AP,2);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_SD,2);
|
||||
MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_Tracer,2);
|
||||
MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_Tracer_Dim,2);
|
||||
MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_AP,2);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_Tracer,2);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim,2);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_AP,2);
|
||||
MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_SD,2);
|
||||
MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_Tracer,2);
|
||||
MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_Tracer_Dim,2);
|
||||
MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_AP,2);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -30,7 +30,7 @@ class CfgWeapons {
|
||||
|
||||
|
||||
/* Katiba */
|
||||
|
||||
class Rifle_Long_Base_F;
|
||||
class arifle_katiba_Base_F: Rifle_Base_F {
|
||||
magazines[] += {
|
||||
"ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim",
|
||||
@ -39,6 +39,40 @@ class CfgWeapons {
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_02_base_F: Rifle_Long_Base_F {
|
||||
magazines[] += {
|
||||
"ACE_10Rnd_338_Mag_Tracer",
|
||||
"ACE_10Rnd_338_Mag_Tracer_Dim",
|
||||
"ACE_10Rnd_338_Mag_AP",
|
||||
"ACE_10Rnd_338_Mag_SD"
|
||||
};
|
||||
};
|
||||
|
||||
class MMG_02_base_F: Rifle_Long_Base_F {
|
||||
magazines[] += {
|
||||
"ACE_130Rnd_338_Mag_Tracer",
|
||||
"ACE_130Rnd_338_Mag_Tracer_Dim",
|
||||
"ACE_130Rnd_338_Mag_AP"
|
||||
};
|
||||
};
|
||||
|
||||
class DMR_05_base_F: Rifle_Long_Base_F {
|
||||
magazines[] += {
|
||||
"ACE_10Rnd_93x64_DMR_05_Mag_Tracer",
|
||||
"ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim",
|
||||
"ACE_10Rnd_93x64_DMR_05_Mag_AP",
|
||||
"ACE_10Rnd_93x64_DMR_05_Mag_SD"
|
||||
};
|
||||
};
|
||||
|
||||
class MMG_01_base_F: Rifle_Long_Base_F {
|
||||
magazines[] += {
|
||||
"ACE_150Rnd_93x64_Mag_Tracer",
|
||||
"ACE_150Rnd_93x64_Mag_Tracer_Dim",
|
||||
"ACE_150Rnd_93x64_Mag_AP"
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/* Assault Rifles */
|
||||
|
||||
|
@ -18,6 +18,16 @@ ACE_B_762x51_Ball_SD
|
||||
ACE_B_762x51_Ball_AP
|
||||
ACE_B_762x51_M118LR
|
||||
|
||||
ACE_B_338_Ball_Tracer_Dim
|
||||
ACE_B_338_Ball_AP
|
||||
ACE_B_338_Ball_SD
|
||||
|
||||
ACE_B_338_NM_Ball_Tracer_Dim
|
||||
ACE_B_338_NM_Ball_AP
|
||||
|
||||
ACE_B_93x64_Ball_Tracer_Dim
|
||||
ACE_B_93x64_Ball_AP
|
||||
ACE_B_93x64_Ball_SD
|
||||
|
||||
// CFGMagazines
|
||||
|
||||
@ -37,3 +47,21 @@ ACE_20Rnd_762x51_Mag_Tracer
|
||||
ACE_20Rnd_762x51_Mag_Tracer_Dim
|
||||
ACE_20Rnd_762x51_Mag_SD
|
||||
ACE_20Rnd_762x51_Mag_AP
|
||||
|
||||
ACE_10Rnd_338_Mag_Tracer
|
||||
ACE_10Rnd_338_Mag_Tracer_Dim
|
||||
ACE_10Rnd_338_Mag_AP
|
||||
ACE_10Rnd_338_Mag_SD
|
||||
|
||||
ACE_130Rnd_338_Mag_Tracer
|
||||
ACE_130Rnd_338_Mag_Tracer_Dim
|
||||
ACE_130Rnd_338_Mag_AP
|
||||
|
||||
ACE_10Rnd_93x64_DMR_05_Mag_Tracer
|
||||
ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim
|
||||
ACE_10Rnd_93x64_DMR_05_Mag_AP
|
||||
ACE_10Rnd_93x64_DMR_05_Mag_SD
|
||||
|
||||
ACE_150Rnd_93x64_Mag_Tracer
|
||||
ACE_150Rnd_93x64_Mag_Tracer_Dim
|
||||
ACE_150Rnd_93x64_Mag_AP
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="Magazines">
|
||||
<!-- MX -->
|
||||
@ -486,5 +486,219 @@
|
||||
<Russian>Калибр: 7.62x51mm M118LR<br />Патронов: 20<br />Тип: M14</Russian>
|
||||
<Italian>Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14</Italian>
|
||||
</Key>
|
||||
<!-- .338 Lapua Magnum -->
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_TracerName">
|
||||
<English>.338 LM 10Rnd Tracer Mag</English>
|
||||
<German>.338 LM 10-Schuss-Magazin Leuchtspur</German>
|
||||
<Polish>Magazynek .338 LM 10rd Smugacz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_TracerNameShort">
|
||||
<English>.338 LM Tracer</English>
|
||||
<German>.338 LM Leuchtspur</German>
|
||||
<Polish>.338 LM Smugacz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_TracerDescription">
|
||||
<English>Caliber: .338 Lapua Magnum Tracer<br />Rounds: 10<br />Used in: MAR-10</English>
|
||||
<German>Kaliber: .338 Lapua Magnum Leuchtspur<br />Schuss: 10<br />Verwendet für: MAR-10</German>
|
||||
<Polish>Kaliber: .338 Lapua Magnum Smugacz<br />Pociski: 10<br />Używane w: MAR-10</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_388_Mag_Tracer_DimName">
|
||||
<English>.338 LM 10Rnd IR-DIM Mag</English>
|
||||
<German>.338 LM 10-Schuss-Magazin Leuchtspur IR-DIM</German>
|
||||
<Polish>Magazynek .338 LM 10rd IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_Tracer_DimNameShort">
|
||||
<English>.338 LM IR-DIM</English>
|
||||
<German>.338 LM IR-DIM</German>
|
||||
<Polish>.338 LM IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_Tracer_DimDescription">
|
||||
<English>Caliber: .338 Lapua Magnum Tracer IR-DIM<br />Rounds: 10<br />Used in: MAR-10</English>
|
||||
<German>Kaliber: .338 Lapua Magnum Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: MAR-10</German>
|
||||
<Polish>Kaliber: .338 Lapua Magnum Smugacz IR-DIM<br />Pociski: 10<br />Używane w: MAR-10</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_APName">
|
||||
<English>.338 LM 10Rnd AP Mag</English>
|
||||
<German>.338 LM 10-Schuss-Magazin Hartkern</German>
|
||||
<Polish>Magazynek .338 LM 10rd AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_APNameShort">
|
||||
<English>.338 LM AP</English>
|
||||
<German>.338 LM AP</German>
|
||||
<Polish>.338 LM AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_APDescription">
|
||||
<English>Caliber: .338 Lapua Magnum AP<br />Rounds: 10<br />Used in: MAR-10</English>
|
||||
<German>Kaliber: .338 Lapua Magnum Hartkern<br />Schuss: 10<br />Verwendet für: MAR-10</German>
|
||||
<Polish>Kaliber: .338 Lapua Magnum AP<br />Pociski: 10<br />Używany w: MAR-10</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_SDName">
|
||||
<English>.338 LM 10Rnd SD Mag</English>
|
||||
<German>.338 LM 10-Schuss-Magazin Unterschall</German>
|
||||
<Polish>Magazynek .338 LM 10rd SD</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_SDNameShort">
|
||||
<English>.338 LM SD</English>
|
||||
<German>.338 LM SD</German>
|
||||
<Polish>.338 LM SD</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_338_Mag_SDDescription">
|
||||
<English>Caliber: .338 Lapua Magnum SD<br />Rounds: 10<br />Used in: MAR-10</English>
|
||||
<German>Kaliber: .338 Lapua Magnum Unterschall<br />Schuss: 10<br />Verwendet für: MAR-10</German>
|
||||
<Polish>Kaliber: .338 Lapua Magnum SD<br />Pociski: 10<br />Używany w: MAR-10</Polish>
|
||||
</Key>
|
||||
<!-- .338 Norma Magnum -->
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_TracerName">
|
||||
<English>.338 NM 130Rnd Tracer Belt</English>
|
||||
<German>.338 NM 130-Schuss-Gurt Leuchtspur</German>
|
||||
<Polish>Taśma .338 NM 130rd Smugacz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_TracerNameShort">
|
||||
<English>.338 NM Tracer</English>
|
||||
<German>.338 NM Leuchtspur</German>
|
||||
<Polish>.338 NM Tracer</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_TracerDescription">
|
||||
<English>Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG</English>
|
||||
<German>Kaliber: .338 Norma Magnum Leuchtspur<br />Schuss: 130<br />Verwendet für: SPMG</German>
|
||||
<Polish>Kaliber: .338 Norma Magnum Smugacz<br />Pociski: 130<br />Używany w: SPMG</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimName">
|
||||
<English>.338 NM 130Rnd IR-DIM Belt</English>
|
||||
<German>.338 NM 130-Schuss-Gurt Leuchtspur IR-DIM</German>
|
||||
<Polish>Taśma .338 NM 130rd IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort">
|
||||
<English>.338 NM IR-DIM</English>
|
||||
<German>.338 LM IR-DIM</German>
|
||||
<Polish>.338 NM IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_Tracer_DimDescription">
|
||||
<English>Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG</English>
|
||||
<German>Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG</German>
|
||||
<Polish>Kaliber: .338 Norma Magnum Smugacz IR-DIM<br />Pociski: 130<br />Używany w: SPMG</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_APName">
|
||||
<English>.338 NM 130Rnd AP Belt</English>
|
||||
<German>.338 NM 130-Schuss-Gurt Hartkern</German>
|
||||
<Polish>Taśma .338 NM 130rd AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_APNameShort">
|
||||
<English>.338 NM AP</English>
|
||||
<German>.338 NM AP</German>
|
||||
<Polish>.338 NM AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_130Rnd_338_Mag_APDescription">
|
||||
<English>Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG</English>
|
||||
<German>Kaliber: .338 Norma Magnum Hartkern<br />Schuss: 130<br />Verwendet für: SPMG</German>
|
||||
<Polish>Kaliber: .338 Norma Magnum AP<br />Pociski: 130<br />Używane w: SPMG</Polish>
|
||||
</Key>
|
||||
<!-- 9.3x64mm 10Rnd -->
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName">
|
||||
<English>9.3mm 10Rnd Tracer Mag</English>
|
||||
<German>9,3mm 10-Schuss-Magazin Leuchtspur</German>
|
||||
<Polish>Magazynek 9.3mm 10rd Smugacz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort">
|
||||
<English>9.3mm Tracer</English>
|
||||
<German>9,3mm Leuchtspur</German>
|
||||
<Polish>9,3mm Smugacz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerDescription">
|
||||
<English>Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus</English>
|
||||
<German>Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 10<br />Verwendet für: Cyrus</German>
|
||||
<Polish>Kaliber: 9,3 x 64 mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName">
|
||||
<English>9.3mm 10Rnd Tracer IR-DIM Mag</English>
|
||||
<German>9,3mm 10-Schuss-Magazin Leuchtspur IR-DIM</German>
|
||||
<Polish>Magazynek 9,3mm 10rd Smugacz IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort">
|
||||
<English>9.3mm IR-DIM</English>
|
||||
<German>9,3mm IR-DIM</German>
|
||||
<Polish>9,3mm IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription">
|
||||
<English>Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus</English>
|
||||
<German>Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: Cyrus</German>
|
||||
<Polish>Kaliber: 9,3 x 64 mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APName">
|
||||
<English>9.3mm 10Rnd AP Mag</English>
|
||||
<German>9,3mm 10-Schuss-Magazin Hartkern</German>
|
||||
<Polish>Magazynek 9,3mm 10rd AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort">
|
||||
<English>9.3mm AP</English>
|
||||
<German>9,3mm AP</German>
|
||||
<Polish>9,3mm AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription">
|
||||
<English>Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus</English>
|
||||
<German>Kaliber: 9,3x64mm Hartkern<br />Schuss: 10<br />Verwendet für: Cyrus</German>
|
||||
<Polish>Kaliber: 9,3 x 64 mm AP<br />Pociski: 10<br />Używany w: Cyrus</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_SDName">
|
||||
<English>9.3mm 10Rnd SD Mag</English>
|
||||
<German>9,3mm 10-Schuss-Magazin Unterschall</German>
|
||||
<Polish>Magazynek 9,3mm 10rd SD</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_SDNameShort">
|
||||
<English>9.3mm SD</English>
|
||||
<German>9,3mm SD</German>
|
||||
<Polish>9,3mm SD</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_10Rnd_93x64_DMR_05_Mag_SDDescription">
|
||||
<English>Caliber: 9.3x64mm SD<br />Rounds: 10<br />Used in: Cyrus</English>
|
||||
<German>Kaliber: 9,3x64mm Unterschall<br />Schuss: 10<br />Verwendet für: Cyrus</German>
|
||||
<Polish>Kaliber: 9,3 x 64 mm SD<br />Pociski: 10<br />Używany w: Cyrus</Polish>
|
||||
</Key>
|
||||
<!-- 9.3x64mm 150Rnd Belt-->
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerName">
|
||||
<English>9.3mm 150Rnd Tracer Belt</English>
|
||||
<German>9,3mm 150-Schuss-Gurt Leuchtspur</German>
|
||||
<Polish>Taśma 9,3mm 150rd Smugacz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerNameShort">
|
||||
<English>9.3mm Tracer</English>
|
||||
<German>9,3mm Leuchtspur</German>
|
||||
<Polish>9,3mm Smugacz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_TracerDescription">
|
||||
<English>Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid</English>
|
||||
<German>Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 150<br />Verwendet für: Navid</German>
|
||||
<Polish>Kaliber: 9,3 x 64 mm Smugacz<br />Pociski: 150<br />Używane w: Navid</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimName">
|
||||
<English>9.3mm 150Rnd Tracer IR-DIM Belt</English>
|
||||
<German>9,3mm 150-Schuss-Gurt Leuchtspur IR-DIM</German>
|
||||
<Polish>Taśma 9,3mm 150rd Smugacz IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort">
|
||||
<English>9.3mm IR-DIM</English>
|
||||
<German>9,3mm IR-DIM</German>
|
||||
<Polish>9,3mm IR-DIM</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_Tracer_DimDescription">
|
||||
<English>Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid</English>
|
||||
<German>Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 150<br />Verwendet für: Navid</German>
|
||||
<Polish>Kaliber: 9,3 x 64 mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_APName">
|
||||
<English>9.3mm 150Rnd AP Belt</English>
|
||||
<German>9,3mm 150-Schuss-Gurt Hartkern</German>
|
||||
<Polish>Taśma 9,3mm 150rd AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_APNameShort">
|
||||
<English>9.3mm AP</English>
|
||||
<German>9,3mm AP</German>
|
||||
<Polish>9,3mm AP</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_150Rnd_93x64_Mag_APDescription">
|
||||
<English>Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid</English>
|
||||
<German>Kaliber: 9,3x64mm Hartkern<br />Schuss: 150<br />Verwendet für: Navid</German>
|
||||
<Polish>Kaliber: 9,3 x 64 mm AP<br />Pociski: 150<br />Używane w: Navid</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler - 2015-04-10 -->
|
||||
<Project name="ACE">
|
||||
<Package name="Map">
|
||||
<Key ID="STR_ACE_MapTools_Name">
|
||||
@ -8,7 +7,7 @@
|
||||
<French>Outils de navigation</French>
|
||||
<Polish>Narzędzia nawigacyjne</Polish>
|
||||
<German>Kartenwerkzeug</German>
|
||||
<Czech>Pomůcky k Mapě</Czech>
|
||||
<Czech>Pomůcky k mapě</Czech>
|
||||
<Italian>Strumenti Cartografici</Italian>
|
||||
<Portuguese>Ferramentas de Mapa</Portuguese>
|
||||
<Hungarian>Térképészeti eszközök</Hungarian>
|
||||
@ -32,7 +31,7 @@
|
||||
<French>Outils de navigation</French>
|
||||
<Polish>Narzędzia nawigacyjne</Polish>
|
||||
<German>Kartenwerkzeug</German>
|
||||
<Czech>Pomůcky k Mapě</Czech>
|
||||
<Czech>Pomůcky k mapě</Czech>
|
||||
<Italian>Strumenti Cartografici</Italian>
|
||||
<Portuguese>Ferramentas de Mapa</Portuguese>
|
||||
<Hungarian>Térképészeti eszközök</Hungarian>
|
||||
|
@ -102,4 +102,7 @@ GVAR(IVBags) = [];
|
||||
|
||||
call FUNC(parseConfigForInjuries);
|
||||
|
||||
GVAR(HITPOINTS) = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
GVAR(SELECTIONS) = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
|
||||
|
||||
ADDON = true;
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_hitPoints", "_typeOfDamage"];
|
||||
private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage"];
|
||||
_unit = _this select 0;
|
||||
_selection = _this select 1;
|
||||
_damage = _this select 2;
|
||||
@ -32,8 +32,7 @@ if (typeName _projectile == "OBJECT") then {
|
||||
};
|
||||
|
||||
// If the damage is being weird, we just tell it to fuck off.
|
||||
_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
|
||||
if !(_selection in (_hitSelections + [""])) exitWith {0};
|
||||
if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0};
|
||||
|
||||
_damageReturn = _damage;
|
||||
if (GVAR(level) < 2) then {
|
||||
@ -46,8 +45,7 @@ if (GVAR(level) >= 2) then {
|
||||
// lets use basic for the time being..
|
||||
_damageReturn = _this call FUNC(handleDamage_basic);
|
||||
};
|
||||
|
||||
[_unit, _selection, _damage, _source, _projectile] call FUNC(handleDamage_caching);
|
||||
_newDamage = _this call FUNC(handleDamage_caching);
|
||||
|
||||
if (_damageReturn > 0.9) then {
|
||||
|
||||
@ -59,12 +57,6 @@ if (GVAR(level) >= 2) then {
|
||||
_minLethalDamage = GVAR(minLethalDamages) select _typeIndex;
|
||||
};
|
||||
|
||||
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
_newDamage = _damage - (damage _unit);
|
||||
if (_selection in _hitSelections) then {
|
||||
_newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selection)));
|
||||
};
|
||||
|
||||
if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} && {_selection in ["", "head", "body"]}) then {
|
||||
if ([_unit] call FUNC(setDead)) then {
|
||||
_damageReturn = 1;
|
||||
|
@ -25,21 +25,21 @@ _selectionName = _this select 1;
|
||||
_amountOfDamage = _this select 2;
|
||||
_sourceOfDamage = _this select 3;
|
||||
_typeOfProjectile = _this select 4;
|
||||
_newDamage = _this select 5;
|
||||
|
||||
// Most likely taking exessive fire damage. Lets exit.
|
||||
if (isNull _sourceOfDamage && (_selectionName == "head" || isBurning _unit) && _typeOfProjectile == "" && vehicle _unit == _unit) exitwith {
|
||||
if (isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) exitwith {
|
||||
0
|
||||
};
|
||||
|
||||
_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
|
||||
_part = [_selectionName] call FUNC(selectionNameToNumber);
|
||||
|
||||
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
// Sorting out the damage
|
||||
_damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]];
|
||||
_newDamage = _amountOfDamage - (_unit getHitPointDamage (_hitPoints select _part));
|
||||
_damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage];
|
||||
_unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
|
||||
|
||||
[_unit] call FUNC(handleDamage_advancedSetDamage);
|
||||
|
||||
[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_wounds);
|
||||
|
@ -16,9 +16,7 @@
|
||||
private ["_unit", "_bodyStatus", "_headDamage", "_torsoDamage", "_handsDamage", "_legsDamage"];
|
||||
_unit = _this select 0;
|
||||
|
||||
if (!local _unit) exitwith {
|
||||
// execute only local
|
||||
};
|
||||
if (!local _unit) exitwith {};
|
||||
|
||||
_bodyStatus = _unit getvariable [QGVAR(bodyPartStatus),[0,0,0,0,0,0]];
|
||||
// ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]
|
||||
|
@ -42,15 +42,25 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then {
|
||||
_unit setVariable [QGVAR(damages), []];
|
||||
_unit setVariable [QGVAR(structDamage), 0];
|
||||
_unit setVariable [QGVAR(preventDeath), false];
|
||||
// Assign orphan structural damage to torso
|
||||
[{
|
||||
private ["_unit", "_damagesum"];
|
||||
_unit = _this select 0;
|
||||
_damagesum = (_unit getHitPointDamage "HitHead") +
|
||||
(_unit getHitPointDamage "HitBody") +
|
||||
(_unit getHitPointDamage "HitLeftArm") +
|
||||
(_unit getHitPointDamage "HitRightArm") +
|
||||
(_unit getHitPointDamage "HitLeftLeg") +
|
||||
(_unit getHitPointDamage "HitRightLeg");
|
||||
if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then {
|
||||
_unit setHitPointDamage ["HitBody", damage _unit];
|
||||
};
|
||||
}, [_unit], 2, 0.1] call EFUNC(common,waitAndExecute);
|
||||
};
|
||||
|
||||
|
||||
_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
|
||||
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
|
||||
_newDamage = _damage - (damage _unit);
|
||||
if (_selectionName in _hitSelections) then {
|
||||
_newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName)));
|
||||
if (_selectionName in GVAR(SELECTIONS)) then {
|
||||
_newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)));
|
||||
};
|
||||
|
||||
_damage = _damage - _newDamage;
|
||||
@ -61,7 +71,7 @@ if (((velocity _unit) select 2 < -5) and (vehicle _unit == _unit)) then {
|
||||
_unit setVariable [QGVAR(isFalling), true];
|
||||
};
|
||||
if (_unit getVariable [QGVAR(isFalling), false] and !(_selectionName in ["", "leg_l", "leg_r"])) exitWith {
|
||||
(_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))) max 0.01;
|
||||
(_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))) max 0.01;
|
||||
};
|
||||
if (_unit getVariable [QGVAR(isFalling), false]) then {
|
||||
_newDamage = _newDamage * 0.7;
|
||||
@ -85,12 +95,12 @@ if (_selectionName != "" and !(_unit getVariable QGVAR(isFalling))) then {
|
||||
// Make entry unfindable
|
||||
_cache_projectiles set [_index, objNull];
|
||||
_cache_projectiles pushBack _projectile;
|
||||
_cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName));
|
||||
_cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName));
|
||||
_cache_damages pushBack _newDamage;
|
||||
};
|
||||
} else {
|
||||
_cache_projectiles pushBack _projectile;
|
||||
_cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName));
|
||||
_cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName));
|
||||
_cache_damages pushBack _newDamage;
|
||||
};
|
||||
_unit setVariable [QGVAR(projectiles), _cache_projectiles];
|
||||
@ -109,30 +119,12 @@ if (_selectionName == "") then {
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// Assign orphan structural damage to torso
|
||||
[{
|
||||
private ["_unit", "_damagesum"];
|
||||
_unit = _this select 0;
|
||||
_damagesum = (_unit getHitPointDamage "HitHead") +
|
||||
(_unit getHitPointDamage "HitBody") +
|
||||
(_unit getHitPointDamage "HitLeftArm") +
|
||||
(_unit getHitPointDamage "HitRightArm") +
|
||||
(_unit getHitPointDamage "HitLeftLeg") +
|
||||
(_unit getHitPointDamage "HitRightLeg");
|
||||
if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then {
|
||||
_unit setHitPointDamage ["HitBody", damage _unit];
|
||||
};
|
||||
}, [_unit], 2, 0.1] call EFUNC(common,waitAndExecute);
|
||||
|
||||
|
||||
if (_selectionName == "") then {
|
||||
_damage = _damage + (_unit getVariable QGVAR(structDamage));
|
||||
} else {
|
||||
_damage = _damage + _newDamage;
|
||||
};
|
||||
|
||||
|
||||
// Leg Damage
|
||||
_legdamage = (_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg");
|
||||
if (_selectionName == "leg_l") then {
|
||||
@ -143,9 +135,9 @@ if (_selectionName == "leg_r") then {
|
||||
};
|
||||
|
||||
if (_legdamage >= LEGDAMAGETRESHOLD1) then {
|
||||
if (_unit getHitPointDamage "HitLegs" != 1) then {_unit setHitPointDamage ["HitLegs", 1]};
|
||||
_unit setHitPointDamage ["HitLegs", 1];
|
||||
} else {
|
||||
if (_unit getHitPointDamage "HitLegs" != 0) then {_unit setHitPointDamage ["HitLegs", 0]};
|
||||
_unit setHitPointDamage ["HitLegs", 0];
|
||||
};
|
||||
// @todo: force prone for completely fucked up legs.
|
||||
|
||||
@ -160,9 +152,9 @@ if (_selectionName == "hand_r") then {
|
||||
};
|
||||
|
||||
if (_armdamage >= ARMDAMAGETRESHOLD1) then {
|
||||
if (_unit getHitPointDamage "HitHands" != 1) then {_unit setHitPointDamage ["HitHands", 1]};
|
||||
_unit setHitPointDamage ["HitHands", 1];
|
||||
} else {
|
||||
if (_unit getHitPointDamage "HitHands" != 0) then {_unit setHitPointDamage ["HitHands", 0]};
|
||||
_unit setHitPointDamage ["HitHands", 0];
|
||||
};
|
||||
// @todo: Drop weapon for full damage.
|
||||
|
||||
@ -174,7 +166,6 @@ if (_selectionName == "") then {
|
||||
_unit setVariable [QGVAR(pain), _pain min 1, true];
|
||||
};
|
||||
|
||||
|
||||
// Unconsciousness
|
||||
if (_selectionName == "" and
|
||||
_damage >= UNCONSCIOUSNESSTRESHOLD and
|
||||
|
@ -25,8 +25,8 @@ _damage = _this select 2;
|
||||
_source = _this select 3;
|
||||
_projectile = _this select 4;
|
||||
|
||||
_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
|
||||
_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
||||
_hitSelections = GVAR(SELECTIONS);
|
||||
_hitPoints = GVAR(HITPOINTS);
|
||||
|
||||
// Calculate change in damage.
|
||||
_newDamage = _damage - (damage _unit);
|
||||
@ -34,18 +34,10 @@ if (_selectionName in _hitSelections) then {
|
||||
_newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName)));
|
||||
};
|
||||
|
||||
|
||||
// we want to move damage to another selection; have to do it ourselves.
|
||||
// this is only the case for limbs, so this will not impact the killed EH.
|
||||
if (_selectionName != (_this select 1)) then {
|
||||
_unit setHitPointDamage [_hitPoints select (_hitSelections find _selectionName), _damage + _newDamage];
|
||||
_newDamage = 0;
|
||||
};
|
||||
// ??????
|
||||
_damage = _damage + _newDamage;
|
||||
//_damage = _damage + _newDamage;
|
||||
|
||||
// Check for vehicle crash
|
||||
if (vehicle _unit != _unit && !(vehicle _unit isKindOf "StaticWeapon") && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then {
|
||||
if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then {
|
||||
if (missionNamespace getvariable [QGVAR(allowVehicleCrashDamage), true]) then {
|
||||
_selectionName = _hitSelections select (floor(random(count _hitSelections)));
|
||||
_projectile = "vehiclecrash";
|
||||
@ -54,10 +46,11 @@ if (vehicle _unit != _unit && !(vehicle _unit isKindOf "StaticWeapon") && {isNul
|
||||
|
||||
// From AGM medical:
|
||||
// Exclude falling damage to everything other than legs; reduce structural damage.
|
||||
if (((velocity _unit) select 2 < -5) && (vehicle _unit == _unit)) then {
|
||||
if (((velocity _unit) select 2 < -5) && {(vehicle _unit == _unit)}) then {
|
||||
_unit setVariable [QGVAR(isFalling), True];
|
||||
};
|
||||
if (_unit getVariable [QGVAR(isFalling), false] && !(_selectionName in ["", "leg_l", "leg_r"])) exitWith {};
|
||||
|
||||
if (_unit getVariable [QGVAR(isFalling), false] && {!(_selectionName in ["", "leg_l", "leg_r"])}) exitWith {};
|
||||
if (_unit getVariable [QGVAR(isFalling), false]) then {
|
||||
_newDamage = _newDamage * 0.7;
|
||||
};
|
||||
@ -69,21 +62,16 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t
|
||||
|
||||
// handle the cached damages 3 frames later
|
||||
[{
|
||||
private ["_args","_unit","_frameNo"];
|
||||
private ["_args", "_params"];
|
||||
_args = _this select 0;
|
||||
_unit = _args select 0;
|
||||
_frameNo = _args select 1;
|
||||
|
||||
if (diag_frameno > _frameNo + 2) then {
|
||||
_cache_projectiles = _unit getVariable [QGVAR(cachedProjectiles), []];
|
||||
_cache_hitpoints = _unit getVariable [QGVAR(cachedHitPoints), []];
|
||||
_cache_damages = _unit getVariable [QGVAR(cachedDamages), []];
|
||||
_cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
if (diag_frameno > (_args select 1) + 2) then {
|
||||
_cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
_cache_damages = (_args select 0) getVariable QGVAR(cachedDamages);
|
||||
{
|
||||
if (typeName _x == typeName "") then {
|
||||
(_cache_params select _foreachIndex) call FUNC(handleDamage_advanced);
|
||||
};
|
||||
}foreach _cache_projectiles;
|
||||
_params = _x + [_cache_damages select _foreachIndex];
|
||||
_params call FUNC(handleDamage_advanced);
|
||||
}foreach _cache_params;
|
||||
[(_this select 1)] call cba_fnc_removePerFrameHandler;
|
||||
};
|
||||
}, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler;
|
||||
@ -94,52 +82,54 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t
|
||||
_unit setVariable [QGVAR(cachedHandleDamageParams), []];
|
||||
};
|
||||
|
||||
// Make sure there's only one damaged selection per projectile per frame.
|
||||
_cache_projectiles = _unit getVariable QGVAR(cachedProjectiles);
|
||||
_cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints);
|
||||
_cache_damages = _unit getVariable QGVAR(cachedDamages);
|
||||
_cache_params = _unit getVariable QGVAR(cachedHandleDamageParams);
|
||||
|
||||
// Caching of the damage events
|
||||
if (_selectionName != "") then {
|
||||
|
||||
// Check if the current projectile has already been handled once
|
||||
if (_projectile in _cache_projectiles) then {
|
||||
_cache_projectiles = _unit getVariable QGVAR(cachedProjectiles);
|
||||
private ["_index","_otherDamage"];
|
||||
// if it has been handled, find the index in the cache
|
||||
_index = _cache_projectiles find _projectile;
|
||||
|
||||
// Check if the current projectile has already been handled once
|
||||
if (_index >= 0) exitwith {
|
||||
_cache_damages = _unit getVariable QGVAR(cachedDamages);
|
||||
// Find the previous damage this projectile has done
|
||||
_otherDamage = (_cache_damages select _index);
|
||||
|
||||
// Take the highest damage of the two
|
||||
if (_otherDamage > _newDamage) then {
|
||||
_newDamage = 0;
|
||||
} else {
|
||||
if (_newDamage > _otherDamage) then {
|
||||
_cache_params = _unit getVariable QGVAR(cachedHandleDamageParams);
|
||||
_cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints);
|
||||
|
||||
private ["_hitPoint", "_restore"];
|
||||
// Restore the damage before the previous damage was processed
|
||||
_hitPoint = _cache_hitpoints select _index;
|
||||
_restore = ((_unit getHitPointDamage _hitPoint) - _otherDamage) max 0;
|
||||
_unit setHitPointDamage [_hitPoint, _restore];
|
||||
|
||||
// Make entry unfindable and add the new damage cache
|
||||
_cache_projectiles set [_index, objNull];
|
||||
_cache_projectiles pushBack _projectile;
|
||||
_cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName));
|
||||
_cache_damages pushBack _newDamage;
|
||||
_cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile];
|
||||
_cache_hitpoints set [_index, (_hitPoints select (_hitSelections find _selectionName))];
|
||||
_cache_damages set [_index, _newDamage];
|
||||
_cache_params set[_index, _this];
|
||||
|
||||
_unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles];
|
||||
_unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints];
|
||||
_unit setVariable [QGVAR(cachedDamages), _cache_damages];
|
||||
_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params];
|
||||
};
|
||||
} else {
|
||||
};
|
||||
|
||||
_cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints);
|
||||
_cache_damages = _unit getVariable QGVAR(cachedDamages);
|
||||
_cache_params = _unit getVariable QGVAR(cachedHandleDamageParams);
|
||||
|
||||
// This is an unhandled projectile
|
||||
_cache_projectiles pushBack _projectile;
|
||||
_cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName));
|
||||
_cache_damages pushBack _newDamage;
|
||||
_cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile];
|
||||
};
|
||||
};
|
||||
_cache_params pushBack _this;
|
||||
|
||||
// Store the new cached values
|
||||
_unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles];
|
||||
_unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints];
|
||||
_unit setVariable [QGVAR(cachedDamages), _cache_damages];
|
||||
_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params];
|
||||
};
|
||||
|
||||
_newDamage;
|
||||
|
@ -52,10 +52,10 @@ _allPossibleInjuries = [];
|
||||
|
||||
// Check if the damage is higher as the min damage for the specific injury
|
||||
if (_damage >= _minDamage && {_damage <= _maxDamage || _maxDamage < 0}) then {
|
||||
_classType = _x select 0;
|
||||
//_classType = _x select 0;
|
||||
_selections = _x select 1;
|
||||
_bloodLoss = _x select 2;
|
||||
_pain = _x select 3;
|
||||
//_bloodLoss = _x select 2;
|
||||
//_pain = _x select 3;
|
||||
|
||||
// Check if the injury can be applied to the given selection name
|
||||
if ("All" in _selections || _selectionName in _selections) then {
|
||||
@ -73,9 +73,7 @@ _allPossibleInjuries = [];
|
||||
}foreach _allInjuriesForDamageType;
|
||||
|
||||
// No possible wounds available for this damage type or damage amount.
|
||||
if (_highestPossibleSpot < 0) exitwith {
|
||||
|
||||
};
|
||||
if (_highestPossibleSpot < 0) exitwith {};
|
||||
|
||||
// Administration for open wounds and ids
|
||||
_openWounds = _unit getvariable[QGVAR(openWounds), []];
|
||||
@ -125,7 +123,7 @@ _woundsCreated = [];
|
||||
_painToAdd = _painToAdd + (_toAddInjury select 3);
|
||||
};
|
||||
};
|
||||
}foreach (_injuryTypeInfo select 0);
|
||||
}foreach (_injuryTypeInfo select 0); // foreach damage thresholds
|
||||
|
||||
_unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC];
|
||||
|
||||
|
@ -52,7 +52,7 @@ if (animationState _unit in ["ladderriflestatic","laddercivilstatic"]) then {
|
||||
};
|
||||
if (vehicle _unit == _unit) then {
|
||||
if (primaryWeapon _unit == "") then {
|
||||
_unit addWeapon "ACE_fakeWeapon";
|
||||
_unit addWeapon "ACE_FakePrimaryWeapon";
|
||||
};
|
||||
_unit selectWeapon (primaryWeapon _unit);
|
||||
_unit switchMove "";
|
||||
@ -67,7 +67,8 @@ _unit setUnitPos "DOWN";
|
||||
[_unit, true] call EFUNC(common,disableAI);
|
||||
|
||||
// So the AI does not get stuck, we are moving the unit to a temp group on its own.
|
||||
[_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide);
|
||||
//Unconscious units shouldn't be put in another group #527:
|
||||
// [_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide);
|
||||
|
||||
[_unit, QGVAR(unconscious), true] call EFUNC(common,setCaptivityStatus);
|
||||
[_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation);
|
||||
@ -114,7 +115,8 @@ _startingTime = time;
|
||||
[_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus);
|
||||
|
||||
// Swhich the unit back to its original group
|
||||
[_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide);
|
||||
//Unconscious units shouldn't be put in another group #527:
|
||||
// [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide);
|
||||
|
||||
[_unit, false] call EFUNC(common,disableAI);
|
||||
_unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Updates the display (several times a second) called from the pfeh
|
||||
*
|
||||
@ -53,7 +53,7 @@ case (APP_MODE_INFODISPLAY): {
|
||||
_compassAngleText = if (GVAR(settingUseMils)) then {
|
||||
[(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber;
|
||||
} else {
|
||||
([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
};
|
||||
(_display displayCtrl IDC_MODEDISPLAY_HEADINGNUM) ctrlSetText _compassAngleText;
|
||||
|
||||
@ -92,7 +92,7 @@ case (APP_MODE_INFODISPLAY): {
|
||||
_bearingText = if (GVAR(settingUseMils)) then {
|
||||
[(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber;
|
||||
} else {
|
||||
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
};
|
||||
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
|
||||
_rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)];
|
||||
@ -112,7 +112,7 @@ case (APP_MODE_COMPASS): {
|
||||
_compassAngleText = if (GVAR(settingUseMils)) then {
|
||||
[(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber;
|
||||
} else {
|
||||
([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°M" //degree symbol is in UTF-8
|
||||
([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
};
|
||||
(_display displayCtrl IDC_MODECOMPASS_HEADING) ctrlSetText _compassAngleText;
|
||||
|
||||
@ -149,7 +149,7 @@ case (APP_MODE_COMPASS): {
|
||||
_bearingText = if (GVAR(settingUseMils)) then {
|
||||
[(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber;
|
||||
} else {
|
||||
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°M" //degree symbol is in UTF-8
|
||||
([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8
|
||||
};
|
||||
_2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000;
|
||||
_rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)];
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Edited with tabler. -->
|
||||
<Project name="ACE">
|
||||
<Package name="microdagr">
|
||||
<Key ID="STR_ACE_microdagr_itemName">
|
||||
@ -6,35 +7,49 @@
|
||||
<German>MicroDAGR GPS</German>
|
||||
<Spanish>GPS MicroDAGR</Spanish>
|
||||
<Russian>MicroDAGR GPS</Russian>
|
||||
<Czech>MicroDAGR GPS</Czech>
|
||||
<Polish>MicroDAGR GPS</Polish>
|
||||
<French>GPS MicroDAGR</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_itemDescription">
|
||||
<English>MicroDAGR advanced GPS receiver</English>
|
||||
<German>MicroDAGR - Fortgeschrittener GPS-Empfänger</German>
|
||||
<German>MicroDAGR verbesserter GPS Empfänger</German>
|
||||
<Spanish>Receptor avanzado GPS MicroDAGR</Spanish>
|
||||
<Russian>Многофункциональный GPS-приёмник.</Russian>
|
||||
<Polish>Zaawansowany odbiornik GPS MicroDAGR</Polish>
|
||||
<French>MicroDAGR un GPS avancé</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_settingUseMils">
|
||||
<English>Angular Unit:</English>
|
||||
<Spanish>Unidad angular:</Spanish>
|
||||
<Russian>Угловые единицы:</Russian>
|
||||
<Polish>Jednostka kątowa:</Polish>
|
||||
<French>Unité angulaire:</French>
|
||||
<German>Winkeleinheit:</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_settingMils">
|
||||
<English>Mils</English>
|
||||
<German>Mils</German>
|
||||
<Spanish>Mils</Spanish>
|
||||
<Russian>Тысячные</Russian>
|
||||
<Polish>Tysiączne</Polish>
|
||||
<French>Mils</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_settingShowWP">
|
||||
<English>Show Waypoints On Map:</English>
|
||||
<German>Zeige Wegpunkte auf Karte</German>
|
||||
<Spanish>Mostrar puntos de ruta en el mapa:</Spanish>
|
||||
<Russian>Показывать маршрутные точки на карте:</Russian>
|
||||
<Polish>Pokaż PT na mapie:</Polish>
|
||||
<French>Afficher les points de passage sur la carte :</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_settingDegrees">
|
||||
<English>Degrees</English>
|
||||
<German>Grad</German>
|
||||
<Spanish>Grados</Spanish>
|
||||
<Russian>Градусы</Russian>
|
||||
<Polish>Stopnie</Polish>
|
||||
<French>Degrés</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_settingOn">
|
||||
<English>On</English>
|
||||
@ -62,72 +77,101 @@
|
||||
<English>Enter Grid Cords:</English>
|
||||
<Spanish>Introducir coordenadas de cuadrícula:</Spanish>
|
||||
<Russian>Введите координаты:</Russian>
|
||||
<Polish>Wprowadź współrzędne:</Polish>
|
||||
<French>Entrer Grid Cords :</French>
|
||||
<German>Koordinaten eingeben:</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_wpEnterName">
|
||||
<English>Name of [%1]</English>
|
||||
<German>Name von [%1]</German>
|
||||
<Spanish>Nombre de [%1]</Spanish>
|
||||
<Russian>Название [%1]</Russian>
|
||||
<Polish>Nazwa [%1]</Polish>
|
||||
<French>Nom de [%1]</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_controlMGRS">
|
||||
<English>MGRS-New</English>
|
||||
<German>MGRS-NEU</German>
|
||||
<Spanish>Nuevo-MGRS</Spanish>
|
||||
<Russian>MGRS-Новая</Russian>
|
||||
<Polish>MGRS-Nowy</Polish>
|
||||
<French>Nouveau MGRS</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_controlWGD">
|
||||
<English>WGD</English>
|
||||
<German>WGD</German>
|
||||
<Spanish>WGD</Spanish>
|
||||
<Russian>WGD</Russian>
|
||||
<Polish>WGD</Polish>
|
||||
<French>WGD</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_controlRange">
|
||||
<English>Range:</English>
|
||||
<Spanish>Distancia</Spanish>
|
||||
<Spanish>Distancia:</Spanish>
|
||||
<German>Reichweite:</German>
|
||||
<Russian>Дистанция:</Russian>
|
||||
<Polish>Dystans:</Polish>
|
||||
<French>Distance :</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_compasDirection">
|
||||
<English>Compass Direction</English>
|
||||
<German>Kompass Richtung</German>
|
||||
<Spanish>Dirección de la brújula</Spanish>
|
||||
<Russian>Азимут</Russian>
|
||||
<Polish>Azymut</Polish>
|
||||
<French>Direction de la boussole</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_menuMark">
|
||||
<English>Mark</English>
|
||||
<German>Markiere</German>
|
||||
<German>Markieren</German>
|
||||
<Spanish>Marca</Spanish>
|
||||
<Russian>Отметка</Russian>
|
||||
<Polish>Oznacz</Polish>
|
||||
<French>Marqueur</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_menuWaypoints">
|
||||
<English>Waypoints</English>
|
||||
<Spanish>Puntos de ruta</Spanish>
|
||||
<German>Wegpunkte</German>
|
||||
<Russian>Машрутные точки</Russian>
|
||||
<Czech>Waypointy</Czech>
|
||||
<Polish>Punkty trasy</Polish>
|
||||
<French>Point de passage</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_menuConnectTo">
|
||||
<English>Connect To</English>
|
||||
<Spanish>Conectar a</Spanish>
|
||||
<Russian>Соединиться с </Russian>
|
||||
<German>Verbinde zu</German>
|
||||
<Czech>Připojit k</Czech>
|
||||
<Polish>Podłącz do</Polish>
|
||||
<French>Connexion à</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_menuSettings">
|
||||
<English>Settings</English>
|
||||
<French>Paramètres</French>
|
||||
<German>Einstellungen</German>
|
||||
<Spanish>Configuración</Spanish>
|
||||
<Russian>Настройки</Russian>
|
||||
<Czech>Nastavení</Czech>
|
||||
<Polish>Ustawienia</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_waypointsSet">
|
||||
<English>SetWP</English>
|
||||
<German>SetzeWP</German>
|
||||
<German>WP setzen</German>
|
||||
<Spanish>Establecer PR</Spanish>
|
||||
<Russian>Установить МТ</Russian>
|
||||
<Czech>Nastavit WP</Czech>
|
||||
<Polish>UstawPT</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_waypointsAdd">
|
||||
<English>Add</English>
|
||||
<German>Hinzufügen</German>
|
||||
<Spanish>Añadir</Spanish>
|
||||
<Russian>Добавить</Russian>
|
||||
<Czech>Přidat</Czech>
|
||||
<Polish>Dodaj</Polish>
|
||||
<French>Ajouter</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_waypointsDelete">
|
||||
<English>Delete</English>
|
||||
@ -142,27 +186,38 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_toggleUnit">
|
||||
<English>Toggle MicroDAGR Display Mode</English>
|
||||
<German>Wechsle MircoDAGR Bildschirmmodus</German>
|
||||
<German>MicoDAGR Anzeigemodus wählen</German>
|
||||
<Spanish>Conmutar modo de pantalla del MicroDAGR</Spanish>
|
||||
<Russian>Сменить режим показа MicroDAGR</Russian>
|
||||
<Polish>Przełącz tryb wyświetlania MicroDAGR</Polish>
|
||||
<French>Basculer sur l'affichage du MicroDAGR</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_show">
|
||||
<English>Show MicoDAGR</English>
|
||||
<German>Zeige MicroDAGR</German>
|
||||
<Spanish>Mostrar MicroDAGR</Spanish>
|
||||
<Russian>Показать MicroDAGR</Russian>
|
||||
<Czech>Ukázat MicroDAGR GPS</Czech>
|
||||
<Polish>Pokaż MicroDAGR</Polish>
|
||||
<French>Afficher le MicroDAGR</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_configure">
|
||||
<English>Configure MicroDAGR</English>
|
||||
<German>Stelle MicroDAGR ein</German>
|
||||
<German>Konfiguriere MicroDAGR</German>
|
||||
<Spanish>Configurar MicroDAGR</Spanish>
|
||||
<Russian>Настроить MicroDAGR</Russian>
|
||||
<Czech>Konfigurovat MicroDAGR GPS</Czech>
|
||||
<Polish>Konfiguruj MicroDAGR</Polish>
|
||||
<French>Configurer le MicroDAGR</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_microdagr_closeUnit">
|
||||
<English>Close MicroDAGR</English>
|
||||
<German>Schließe MicroDAGR</German>
|
||||
<Spanish>Cerrar MicroDAGR</Spanish>
|
||||
<Russian>Закрыть MicroDAGR</Russian>
|
||||
<Czech>Zavřít MicroDAGR GPS</Czech>
|
||||
<Polish>Zamknij MicroDAGR</Polish>
|
||||
<French>Fermer le MicroDAGR</French>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -1,17 +1,27 @@
|
||||
class CfgVehicles {
|
||||
class Heli_Attack_01_base_F;
|
||||
|
||||
class B_Heli_Attack_01_F : Heli_Attack_01_base_F {
|
||||
class AllVehicles;
|
||||
class Air: AllVehicles {
|
||||
class Turrets;
|
||||
};
|
||||
|
||||
class Helicopter: Air {
|
||||
class Turrets {
|
||||
class MainTurret;
|
||||
};
|
||||
};
|
||||
class Helicopter_Base_F: Helicopter {};
|
||||
class Heli_Attack_01_base_F: Helicopter_Base_F {};
|
||||
class B_Heli_Attack_01_F : Heli_Attack_01_base_F {
|
||||
class Turrets: Turrets {
|
||||
class MainTurret;
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_Comanche_Test : B_Heli_Attack_01_F {
|
||||
displayName = "ACE_Comanche_Test";
|
||||
author = "ACE Team";
|
||||
class Library
|
||||
{
|
||||
class Library {
|
||||
libTextDesc = "ACE_Comanche_Test";
|
||||
};
|
||||
class Turrets: Turrets {
|
||||
@ -21,4 +31,3 @@ class CfgVehicles {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user