mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'cswSuperBranch' into artilleryTables
Conflicts: addons/mk6mortar/config.cpp
This commit is contained in:
commit
3072e2ef3d
@ -51,6 +51,7 @@ Bla1337
|
||||
BlackPixxel <blackpixxel96@gmail.com>
|
||||
BlackQwar
|
||||
Brakoviejo
|
||||
Brandon (TCVM) <brandondanyluk366@gmail.com>
|
||||
Brisse <brisse@outlook.com>
|
||||
Brostrom.A | Evul <andreas.brostrom.ce@gmail.com>
|
||||
BullHorn <bullhorn7@gmail.com>
|
||||
|
@ -91,6 +91,7 @@
|
||||
<Chinesesimp>启用枪口初速变化</Chinesesimp>
|
||||
<French>Activer les variations de la vitesse initiale</French>
|
||||
<Polish>Aktywuj wariację prędkości wylotowej</Polish>
|
||||
<Russian>Вкл. вариацию начальной скорости</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_muzzleVelocityVariationEnabled_Description">
|
||||
<English>Simulates slight variations in muzzle velocity between each shot</English>
|
||||
@ -102,6 +103,7 @@
|
||||
<Chinesesimp>模拟每发子弹的枪口初速都略有不同</Chinesesimp>
|
||||
<French>Simule les légères variations</French>
|
||||
<Polish>Symuluje lekkie zmiany w prędkości wylotowej między każdym strzałem</Polish>
|
||||
<Russian>Имитирует небольшие изменения начальной скорости при каждом выстреле</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
|
||||
<English>Enable Ammo Temperature Simulation</English>
|
||||
|
@ -10,5 +10,6 @@ PREP_RECOMPILE_END;
|
||||
|
||||
GVAR(staminaBarWidth) = 10 * (((safezoneW / safezoneH) min 1.2) / 40);
|
||||
GVAR(dutyList) = [[], []];
|
||||
GVAR(setAnimExclusions) = [];
|
||||
|
||||
ADDON = true;
|
||||
|
@ -58,8 +58,9 @@ if (GVAR(ppeBlackoutLast) == 1) then {
|
||||
|
||||
// - Physical effects ---------------------------------------------------------
|
||||
if (GVAR(isSwimming)) exitWith {
|
||||
_unit setAnimSpeedCoef linearConversion [0.7, 0.9, _fatigue, 1, 0.5, true];
|
||||
|
||||
if (GVAR(setAnimExclusions) isEqualTo []) then {
|
||||
_unit setAnimSpeedCoef linearConversion [0.7, 0.9, _fatigue, 1, 0.5, true];
|
||||
};
|
||||
if ((isSprintAllowed _unit) && {_fatigue > 0.7}) then {
|
||||
[_unit, "blockSprint", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);
|
||||
} else {
|
||||
@ -69,7 +70,10 @@ if (GVAR(isSwimming)) exitWith {
|
||||
};
|
||||
};
|
||||
if ((getAnimSpeedCoef _unit) != 1) then {
|
||||
_unit setAnimSpeedCoef 1;
|
||||
if (GVAR(setAnimExclusions) isEqualTo []) then {
|
||||
TRACE_1("reset",getAnimSpeedCoef _unit);
|
||||
_unit setAnimSpeedCoef 1;
|
||||
};
|
||||
};
|
||||
|
||||
if (_overexhausted) then {
|
||||
|
@ -11,6 +11,7 @@
|
||||
<Korean>ACE 고급 피로도</Korean>
|
||||
<French>ACE Fatigue Avancée</French>
|
||||
<Polish>ACE Zaawansowane Zmęczenie</Polish>
|
||||
<Russian>ACE Продвинутая усталость</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor">
|
||||
<English>Performance Factor</English>
|
||||
@ -22,6 +23,7 @@
|
||||
<Italian>Fattore Prestazione</Italian>
|
||||
<Chinese>體力值</Chinese>
|
||||
<Chinesesimp>体力值</Chinesesimp>
|
||||
<Russian>Фактор производительности</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_Description">
|
||||
<English>Influences the overall performance of all players with no custom factor. Higher means better.</English>
|
||||
@ -33,6 +35,7 @@
|
||||
<Italian>Influenza qualsiasi prestazione di tutti i giocatori smuniti di un fattore personalizzato. Maggiore significa migliore.</Italian>
|
||||
<Chinese>影響所有玩家的體力表現,值越高代表體力越好</Chinese>
|
||||
<Chinesesimp>影响所有玩家的体力表现,值越高代表体力越好</Chinesesimp>
|
||||
<Russian>Влияет на общую производительность игроков, у которых не задано персональное значение.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_EdenDescription">
|
||||
<English>Influences the overall performance of this unit. Higher means better.</English>
|
||||
@ -44,6 +47,7 @@
|
||||
<Italian>Influenza qualsiasi prestazione di questa unità. Maggiore significa migliore.</Italian>
|
||||
<Chinese>影響這個單位的體力表現,值越高代表體力越好</Chinese>
|
||||
<Chinesesimp>影响这个单位的体力表现,值越高代表体力越好</Chinesesimp>
|
||||
<Russian>Влияет на общую производительность юнита.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor">
|
||||
<English>Recovery Factor</English>
|
||||
@ -55,6 +59,7 @@
|
||||
<Italian>Fattore Recupero</Italian>
|
||||
<Chinese>回復值</Chinese>
|
||||
<Chinesesimp>回复值</Chinesesimp>
|
||||
<Russian>Фактор восстановления</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor_Description">
|
||||
<English>Changes how fast the player recovers when resting. Higher is faster.</English>
|
||||
@ -66,6 +71,7 @@
|
||||
<Italian>Determina in quanto tempo il giocatore recupera quando rilassato. Maggiore significa migliore.</Italian>
|
||||
<Chinese>決定玩家休息多久就能回復體力,值越高恢復越快</Chinese>
|
||||
<Chinesesimp>决定玩家休息多久就能回复体力,值越高恢复越快</Chinesesimp>
|
||||
<Russian>Изменяет скорость восстановления игрока во время отдыха. Чем выше, тем быстрее.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor">
|
||||
<English>Load Factor</English>
|
||||
@ -77,6 +83,7 @@
|
||||
<Italian>Fattore Caricamento</Italian>
|
||||
<Chinese>負重量</Chinese>
|
||||
<Chinesesimp>负重量</Chinesesimp>
|
||||
<Russian>Фактор нагрузки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor_Description">
|
||||
<English>Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence.</English>
|
||||
@ -88,6 +95,7 @@
|
||||
<Italian>Incrementa o decrementa quanto il peso influenza le prestazioni dei giocatori. Zero significa che il peso dell'equipaggiamento non ha alcuna influenza nelle prestazioni.</Italian>
|
||||
<Chinese>增加或降低玩家所能承受的負重量. 如設定值為0, 代表裝備的重量將不會影響到玩家的體力表現</Chinese>
|
||||
<Chinesesimp>增加或降低玩家所能承受的负重量. 如设定值为0, 代表装备的重量将不会影响到玩家的体力表现</Chinesesimp>
|
||||
<Russian>Увеличивает или уменьшает вес, влияющий на производительность игроков. Ноль означает, что вес снаряжения не влияет на производительность</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor">
|
||||
<English>Terrain Gradient Factor</English>
|
||||
@ -99,6 +107,7 @@
|
||||
<Italian>Fattore Pendenza Terreno</Italian>
|
||||
<Chinese>地形陡峭影響值</Chinese>
|
||||
<Chinesesimp>地形陡峭影响值</Chinesesimp>
|
||||
<Russian>Фактор местности</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor_Description">
|
||||
<English>Sets how much steep terrain increases stamina loss. Higher means higher stamina loss.</English>
|
||||
@ -110,6 +119,7 @@
|
||||
<Italian>Stabilisce quanto la pendenza del terreno incrementa la perdita della stamina. Maggiore significa più stamina persa.</Italian>
|
||||
<Chinese>設定陡峭的地形將會影響多少體力的流失,值越高代表體力流失越快</Chinese>
|
||||
<Chinesesimp>设定陡峭的地形将会影响多少体力的流,失值越高代表体力流失越快</Chinesesimp>
|
||||
<Russian>Устанавливает, насколько крутая местность увеличивает потерю выносливости. Чем выше, тем быстрее теряется выносливость.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor">
|
||||
<English>Sway factor</English>
|
||||
@ -119,6 +129,7 @@
|
||||
<French>Facteur de stabilisation</French>
|
||||
<Italian>Fattore di oscillazione</Italian>
|
||||
<Polish>Czynnik kołysania</Polish>
|
||||
<Russian>Фактор колебания прицела</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor_Description">
|
||||
<English>Influences the amount of weapon sway. Higher means more sway.</English>
|
||||
@ -128,6 +139,7 @@
|
||||
<French>Influence les mouvements de l'arme, une valeur plus élevée signifie plus de mouvements</French>
|
||||
<Italian>Influenza l'ammontare di oscillazione dell'arma. Maggiore significa più oscillazione.</Italian>
|
||||
<Polish>Wpływa na poziom kołysania broni. Większa ilość znaczy większe kołysanie.</Polish>
|
||||
<Russian>Влияет на колебания прицела оружия. Чем выше - тем больше.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_Enabled">
|
||||
<English>Enabled</English>
|
||||
@ -139,6 +151,7 @@
|
||||
<Italian>Abilitato</Italian>
|
||||
<Chinese>啟用</Chinese>
|
||||
<Chinesesimp>启用</Chinesesimp>
|
||||
<Russian>Включена</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_Enabled_Description">
|
||||
<English>Enables/disables Advanced Fatigue.</English>
|
||||
@ -150,6 +163,7 @@
|
||||
<Italian>Abilita/disabilita la Fatica Avanzata.</Italian>
|
||||
<Chinese>啟用/關閉進階體力.</Chinese>
|
||||
<Chinesesimp>启用/关闭进阶体力.</Chinesesimp>
|
||||
<Russian>Включает / Отключает Продвинутую усталость</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar">
|
||||
<English>Show stamina bar</English>
|
||||
@ -161,6 +175,7 @@
|
||||
<Italian>Mostra barra stamina</Italian>
|
||||
<Chinese>顯示體力條</Chinese>
|
||||
<Chinesesimp>显示体力条</Chinesesimp>
|
||||
<Russian>Показать шкалу усталости</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar_Description">
|
||||
<English>Shows the stamina bar.</English>
|
||||
@ -172,6 +187,7 @@
|
||||
<Italian>Mostra la barra della stamina.</Italian>
|
||||
<Chinese>顯示體力條</Chinese>
|
||||
<Chinesesimp>显示体力条</Chinesesimp>
|
||||
<Russian>Показывает шкалу усталости.</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -10,6 +10,7 @@
|
||||
<Chinesesimp>提供的位置无效。</Chinesesimp>
|
||||
<Korean>위치가 잘못되었습니다.</Korean>
|
||||
<Polish>Podano błędną pozycję.</Polish>
|
||||
<Russian>Указана неверная позиция</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ai_GarrisonNoUnits">
|
||||
<English>No units provided.</English>
|
||||
@ -20,6 +21,7 @@
|
||||
<Chinesesimp>找不到可用的单位。</Chinesesimp>
|
||||
<Korean>병력이 없습니다.</Korean>
|
||||
<Polish>Nie podano żadnych jednostek.</Polish>
|
||||
<Russian>Не указаны юниты</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ai_GarrisonNotEnoughPos">
|
||||
<English>There aren't enough positions to place all units.</English>
|
||||
@ -30,6 +32,7 @@
|
||||
<Chinesesimp>没有足够的位置能摆放所有单位。</Chinesesimp>
|
||||
<Korean>모든 병력을 배치 할 공간이 없습니다.</Korean>
|
||||
<Polish>Nie ma wystarczającej ilości pozycji, aby umieścić wszystkie jednostki.</Polish>
|
||||
<Russian>Недостаточно позиций для размещения всех юнитов</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_ai_GarrisonNoBuilding">
|
||||
<English>No building found.</English>
|
||||
@ -40,6 +43,7 @@
|
||||
<Chinesesimp>没找到建筑物。</Chinesesimp>
|
||||
<Korean>건물이 없습니다.</Korean>
|
||||
<Polish>Nie znaleziono budynku.</Polish>
|
||||
<Russian>Здание не найдено</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
BIN
addons/apl/ACE_CSW_Bag.p3d
Normal file
BIN
addons/apl/ACE_CSW_Bag.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ACE_CSW_m3_tripod.p3d
Normal file
BIN
addons/apl/ACE_CSW_m3_tripod.p3d
Normal file
Binary file not shown.
BIN
addons/apl/ACE_CSW_mortarBaseplate.p3d
Normal file
BIN
addons/apl/ACE_CSW_mortarBaseplate.p3d
Normal file
Binary file not shown.
98
addons/apl/data/m3tripod.rvmat
Normal file
98
addons/apl/data/m3tripod.rvmat
Normal file
@ -0,0 +1,98 @@
|
||||
#define _ARMA_
|
||||
|
||||
ambient[] = {1,1,1,1.0};
|
||||
diffuse[] = {1,1,1,1.0};
|
||||
forcedDiffuse[] = {0.0,0.0,0.0,0.0};
|
||||
emmisive[] = {0.0,0.0,0.0,1.0};
|
||||
specular[] = {1,1,1,1.0};
|
||||
specularPower = 40.0;
|
||||
PixelShaderID = "super";
|
||||
VertexShaderID = "super";
|
||||
class Stage1
|
||||
{
|
||||
texture = "z\ace\addons\apl\data\m3tripod_nohq.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage2
|
||||
{
|
||||
texture = "a3\weapons_f\Data\DetailMaps\metal_detail_dt.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {8.0,0.0,0.0};
|
||||
up[] = {0.0,8.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage3
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage4
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage5
|
||||
{
|
||||
texture = "z\ace\addons\apl\data\m3tripod_SMDI.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage6
|
||||
{
|
||||
texture = "#(ai,32,128,1)fresnel(3.38,5.33)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage7
|
||||
{
|
||||
texture = "a3\data_f\env_land_co.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class StageTI
|
||||
{
|
||||
texture = "a3\data_f\default_vehicle_ti_ca.paa";
|
||||
};
|
BIN
addons/apl/data/m3tripod_co.paa
Normal file
BIN
addons/apl/data/m3tripod_co.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/m3tripod_nohq.paa
Normal file
BIN
addons/apl/data/m3tripod_nohq.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/m3tripod_smdi.paa
Normal file
BIN
addons/apl/data/m3tripod_smdi.paa
Normal file
Binary file not shown.
95
addons/apl/data/mortarBaseplate.rvmat
Normal file
95
addons/apl/data/mortarBaseplate.rvmat
Normal file
@ -0,0 +1,95 @@
|
||||
ambient[]={1,1,1,1.000000};
|
||||
diffuse[]={1,1,1,1.000000};
|
||||
forcedDiffuse[]={0.000000,0.000000,0.000000,0.000000};
|
||||
emmisive[]={0.000000,0.000000,0.000000,1.000000};
|
||||
specular[]={1,1,1,1.000000};
|
||||
specularPower=40.000000;
|
||||
PixelShaderID="super";
|
||||
VertexShaderID="super";
|
||||
class Stage1
|
||||
{
|
||||
texture="z\ace\addons\apl\data\mortarBaseplate_nohq.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1.000000,0.000000,0.000000};
|
||||
up[]={0.000000,1.000000,0.000000};
|
||||
dir[]={0.000000,0.000000,0.000000};
|
||||
pos[]={0.000000,0.000000,0.000000};
|
||||
};
|
||||
};
|
||||
class Stage2
|
||||
{
|
||||
texture="a3\weapons_f\Data\DetailMaps\metal_detail_dt.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={8.0000,0.000000,0.000000};
|
||||
up[]={0.000000,8.0000,0.000000};
|
||||
dir[]={0.000000,0.000000,0.000000};
|
||||
pos[]={0.000000,0.000000,0.000000};
|
||||
};
|
||||
};
|
||||
class Stage3
|
||||
{
|
||||
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1.000000,0.000000,0.000000};
|
||||
up[]={0.000000,1.000000,0.000000};
|
||||
dir[]={0.000000,0.000000,0.000000};
|
||||
pos[]={0.000000,0.000000,0.000000};
|
||||
};
|
||||
};
|
||||
class Stage4
|
||||
{
|
||||
texture="z\ace\addons\apl\data\mortarBaseplate_as.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1.000000,0.000000,0.000000};
|
||||
up[]={0.000000,1.000000,0.000000};
|
||||
dir[]={0.000000,0.000000,0.000000};
|
||||
pos[]={0.000000,0.000000,0.000000};
|
||||
};
|
||||
};
|
||||
class Stage5
|
||||
{
|
||||
texture="z\ace\addons\apl\data\mortarBaseplate_smdi.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1.000000,0.000000,0.000000};
|
||||
up[]={0.000000,1.000000,0.000000};
|
||||
dir[]={0.000000,0.000000,0.000000};
|
||||
pos[]={0.000000,0.000000,0.000000};
|
||||
};
|
||||
};
|
||||
class Stage6
|
||||
{
|
||||
texture = "#(ai,32,128,1)fresnel(3.38,5.33)";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1.000000,0.000000,0.000000};
|
||||
up[]={0.000000,1.000000,0.000000};
|
||||
dir[]={0.000000,0.000000,0.000000};
|
||||
pos[]={0.000000,0.000000,0.000000};
|
||||
};
|
||||
};
|
||||
class Stage7
|
||||
{
|
||||
texture="a3\data_f\env_land_co.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[]={1.000000,0.000000,0.000000};
|
||||
up[]={0.000000,1.000000,0.000000};
|
||||
dir[]={0.000000,0.000000,0.000000};
|
||||
pos[]={0.000000,0.000000,0.000000};
|
||||
};
|
||||
};
|
||||
class StageTI {
|
||||
texture = "a3\data_f\default_vehicle_ti_ca.paa";
|
||||
};
|
BIN
addons/apl/data/mortarBaseplate_as.paa
Normal file
BIN
addons/apl/data/mortarBaseplate_as.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/mortarBaseplate_co.paa
Normal file
BIN
addons/apl/data/mortarBaseplate_co.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/mortarBaseplate_nohq.paa
Normal file
BIN
addons/apl/data/mortarBaseplate_nohq.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/mortarBaseplate_smdi.paa
Normal file
BIN
addons/apl/data/mortarBaseplate_smdi.paa
Normal file
Binary file not shown.
98
addons/apl/data/static.rvmat
Normal file
98
addons/apl/data/static.rvmat
Normal file
@ -0,0 +1,98 @@
|
||||
#define _ARMA_
|
||||
|
||||
class StageTI
|
||||
{
|
||||
texture = "a3\weapons_f\ammoboxes\bags\data\backpacks_ti_ca.paa";
|
||||
};
|
||||
ambient[] = {1.0,1.0,1.0,1.0};
|
||||
diffuse[] = {1.0,1.0,1.0,1.0};
|
||||
forcedDiffuse[] = {0.0,0.0,0.0,0.0};
|
||||
emmisive[] = {0.0,0.0,0.0,1.0};
|
||||
specular[] = {0.0,0.0,0.0,1.0};
|
||||
specularPower = 0.0;
|
||||
PixelShaderID = "Super";
|
||||
VertexShaderID = "Super";
|
||||
class Stage1
|
||||
{
|
||||
texture = "z\ace\addons\apl\data\static_nohq.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage2
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage3
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage4
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(1,1,1,1,AS)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage5
|
||||
{
|
||||
texture = "#(argb,8,8,3)color(0,0,1,1,SMDI)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage6
|
||||
{
|
||||
texture = "#(ai,32,128,1)fresnel(1.58,0.71)";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
||||
class Stage7
|
||||
{
|
||||
texture = "a3\data\env2_co.paa";
|
||||
uvSource = "tex";
|
||||
class uvTransform
|
||||
{
|
||||
aside[] = {1.0,0.0,0.0};
|
||||
up[] = {0.0,1.0,0.0};
|
||||
dir[] = {0.0,0.0,0.0};
|
||||
pos[] = {0.0,0.0,0.0};
|
||||
};
|
||||
};
|
BIN
addons/apl/data/static_co.paa
Normal file
BIN
addons/apl/data/static_co.paa
Normal file
Binary file not shown.
BIN
addons/apl/data/static_nohq.paa
Normal file
BIN
addons/apl/data/static_nohq.paa
Normal file
Binary file not shown.
@ -11,6 +11,7 @@
|
||||
<Korean>숨김</Korean>
|
||||
<Chinese>隱藏</Chinese>
|
||||
<Chinesesimp>隐藏</Chinesesimp>
|
||||
<Russian>Спрятать</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonHideTooltip">
|
||||
<English>Hide interface</English>
|
||||
@ -22,6 +23,7 @@
|
||||
<Korean>인터페이스 숨기기</Korean>
|
||||
<Chinese>隱藏介面</Chinese>
|
||||
<Chinesesimp>隐藏介面</Chinesesimp>
|
||||
<Russian>Скрыть интерфейс</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadoutsText">
|
||||
<English>Loadouts</English>
|
||||
@ -33,6 +35,7 @@
|
||||
<Korean>로드아웃</Korean>
|
||||
<Chinese>裝備</Chinese>
|
||||
<Chinesesimp>装备</Chinesesimp>
|
||||
<Russian>Комплекты</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonExportText">
|
||||
<English>Export</English>
|
||||
@ -44,6 +47,7 @@
|
||||
<Korean>내보내기</Korean>
|
||||
<Chinese>匯出</Chinese>
|
||||
<Chinesesimp>汇出</Chinesesimp>
|
||||
<Russian>Экспорт</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonImportText">
|
||||
<English>Import</English>
|
||||
@ -55,6 +59,7 @@
|
||||
<Korean>가져오기</Korean>
|
||||
<Chinese>匯入</Chinese>
|
||||
<Chinesesimp>汇入</Chinesesimp>
|
||||
<Russian>Импорт</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCloseText">
|
||||
<English>Close</English>
|
||||
@ -66,6 +71,7 @@
|
||||
<Korean>닫기</Korean>
|
||||
<Chinese>關閉</Chinese>
|
||||
<Chinesesimp>关闭</Chinesesimp>
|
||||
<Russian>Закрыть</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_noVirtualItems">
|
||||
<English>No virtual item available</English>
|
||||
@ -77,6 +83,7 @@
|
||||
<Korean>가상장비 사용 불가</Korean>
|
||||
<Chinese>沒有可用的虛擬物品</Chinese>
|
||||
<Chinesesimp>没有可用的虚拟物品</Chinesesimp>
|
||||
<Russian>Виртуальный предмет недоступен</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveText">
|
||||
<English>Save</English>
|
||||
@ -88,6 +95,7 @@
|
||||
<Korean>저장</Korean>
|
||||
<Chinese>保存</Chinese>
|
||||
<Chinesesimp>保存</Chinesesimp>
|
||||
<Russian>Сохранить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip">
|
||||
<English>Save the current loadout</English>
|
||||
@ -99,11 +107,13 @@
|
||||
<Korean>현재 로드아웃 저장</Korean>
|
||||
<Chinese>保存當前的裝備</Chinese>
|
||||
<Chinesesimp>保存当前的装备</Chinesesimp>
|
||||
<Russian>Сохранить текущий комплект экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip_shiftClick">
|
||||
<English>[Shift+Click to save to mission defaults]</English>
|
||||
<Japanese>[Shift + クリック] でミッション標準として保存します</Japanese>
|
||||
<Polish>Shift + Klik aby zapisac jako domyślne dla misji </Polish>
|
||||
<Russian>[Shift+Клик, чтобы сохранить в настройках по умолчанию]</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameText">
|
||||
<English>Rename</English>
|
||||
@ -115,6 +125,7 @@
|
||||
<Korean>이름바꾸기</Korean>
|
||||
<Chinese>重新命名</Chinese>
|
||||
<Chinesesimp>重新命名</Chinesesimp>
|
||||
<Russian>Переименовать</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameTooltip">
|
||||
<English>Rename the selected loadout</English>
|
||||
@ -126,6 +137,7 @@
|
||||
<Korean>선택한 로드아웃의 이름 바꾸기</Korean>
|
||||
<Chinese>重新命名當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>重新命名当前选择的装备</Chinesesimp>
|
||||
<Russian>Переименовать выбранный комплект экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadText">
|
||||
<English>Load</English>
|
||||
@ -137,6 +149,7 @@
|
||||
<Korean>불러오기</Korean>
|
||||
<Chinese>載入</Chinese>
|
||||
<Chinesesimp>载入</Chinesesimp>
|
||||
<Russian>Загрузить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadTooltip">
|
||||
<English>Load the selected loadout</English>
|
||||
@ -148,6 +161,7 @@
|
||||
<Korean>선택한 로드아웃 불러오기</Korean>
|
||||
<Chinese>載入當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>载入当前选择的装备</Chinesesimp>
|
||||
<Russian>Загрузить выбранный комплект экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteText">
|
||||
<English>Delete</English>
|
||||
@ -159,6 +173,7 @@
|
||||
<Korean>삭제</Korean>
|
||||
<Chinese>刪除</Chinese>
|
||||
<Chinesesimp>删除</Chinesesimp>
|
||||
<Russian>Удалить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteTooltip">
|
||||
<English>Delete the selected loadout</English>
|
||||
@ -170,6 +185,7 @@
|
||||
<Korean>선택한 로드아웃 삭제하기</Korean>
|
||||
<Chinese>刪除當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>删除当前选择的装备</Chinesesimp>
|
||||
<Russian>Удалить выбранный комплект экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsText">
|
||||
<English>My loadouts</English>
|
||||
@ -181,6 +197,7 @@
|
||||
<Korean>내 로드아웃</Korean>
|
||||
<Chinese>我的裝備</Chinese>
|
||||
<Chinesesimp>我的装备</Chinesesimp>
|
||||
<Russian>Мои комплекты</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsTooltip">
|
||||
<English>Loadouts saved in your profile</English>
|
||||
@ -192,6 +209,7 @@
|
||||
<Korean>프로필에 저장된 로드아웃</Korean>
|
||||
<Chinese>裝備已保存到你的設定檔中</Chinese>
|
||||
<Chinesesimp>装备已保存到你的设定档中</Chinesesimp>
|
||||
<Russian>Комплекты экипировки, сохраненные в вашем профиле</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsText">
|
||||
<English>Default loadouts</English>
|
||||
@ -203,6 +221,7 @@
|
||||
<Korean>기본 로드아웃</Korean>
|
||||
<Chinese>預設裝備</Chinese>
|
||||
<Chinesesimp>预设装备</Chinesesimp>
|
||||
<Russian>По умолчанию</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsTooltip">
|
||||
<English>Loadouts made available by the mission maker</English>
|
||||
@ -214,6 +233,7 @@
|
||||
<Korean>미션메이커가 허용한 로드아웃</Korean>
|
||||
<Chinese>任務作者提供的預設裝備</Chinese>
|
||||
<Chinesesimp>任务作者提供的预设装备</Chinesesimp>
|
||||
<Russian>Комплекты экипировки, предоставляемые создателем миссии</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsText">
|
||||
<English>Public loadouts</English>
|
||||
@ -225,6 +245,7 @@
|
||||
<Korean>공용 로드아웃</Korean>
|
||||
<Chinese>公用裝備</Chinese>
|
||||
<Chinesesimp>公用装备</Chinesesimp>
|
||||
<Russian>Публичные комплекты</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsTooltip">
|
||||
<English>Loadouts shared by you and other players</English>
|
||||
@ -236,6 +257,7 @@
|
||||
<Korean>플레이어들이 공유하는 로드아웃</Korean>
|
||||
<Chinese>由你與其他玩家分享的裝備配置</Chinese>
|
||||
<Chinesesimp>由你与其他玩家分享的装备配置</Chinesesimp>
|
||||
<Russian>Комплекты экипировки, опубликованные вами и другими игроками</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByWeightText">
|
||||
<English>Sort by weight</English>
|
||||
@ -247,6 +269,7 @@
|
||||
<Korean>무게로 정렬</Korean>
|
||||
<Chinese>以重量排序</Chinese>
|
||||
<Chinesesimp>以重量排序</Chinesesimp>
|
||||
<Russian>Сортировка по весу</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByAmountText">
|
||||
<English>Sort by amount</English>
|
||||
@ -258,6 +281,7 @@
|
||||
<Korean>갯수로 정렬</Korean>
|
||||
<Chinese>以數量排序</Chinese>
|
||||
<Chinesesimp>以数量排序</Chinesesimp>
|
||||
<Russian>Сортировка по количеству</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonShareTooltip">
|
||||
<English>Share or stop sharing the selected loadout</English>
|
||||
@ -269,6 +293,7 @@
|
||||
<Korean>선택한 로드아웃 공유 혹은 공유중지</Korean>
|
||||
<Chinese>開始/停止分享當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>开始/停止分享当前选择的装备</Chinesesimp>
|
||||
<Russian>Открыть или закрыть общий доступ к комплекту экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePrivateText">
|
||||
<English>Private</English>
|
||||
@ -280,6 +305,7 @@
|
||||
<Korean>개인</Korean>
|
||||
<Chinese>私用</Chinese>
|
||||
<Chinesesimp>私用</Chinesesimp>
|
||||
<Russian>Приватный</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePublicText">
|
||||
<English>Public</English>
|
||||
@ -291,6 +317,7 @@
|
||||
<Korean>공용</Korean>
|
||||
<Chinese>公用</Chinese>
|
||||
<Chinesesimp>公用</Chinesesimp>
|
||||
<Russian>Публичный</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefaultError">
|
||||
<English>The default loadouts list is empty!</English>
|
||||
@ -302,6 +329,7 @@
|
||||
<Korean>기본 로드아웃 목록이 비어있습니다!</Korean>
|
||||
<Chinese>沒有預設的裝備清單!</Chinese>
|
||||
<Chinesesimp>没有预设的装备清单!</Chinesesimp>
|
||||
<Russian>Список комплекта экипировки пуст!</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefault">
|
||||
<English>Default loadouts list exported to clipboard</English>
|
||||
@ -313,6 +341,7 @@
|
||||
<Korean>클립보드에 기본 로드아웃 목록 내보내기</Korean>
|
||||
<Chinese>預設的裝備清單已匯出到剪貼簿中</Chinese>
|
||||
<Chinesesimp>预设的装备清单已汇出到剪贴簿中</Chinesesimp>
|
||||
<Russian>Список комплекта экипировки по умолчанию экспортирован в буфер</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportCurrent">
|
||||
<English>Current loadout exported to clipboard</English>
|
||||
@ -324,6 +353,7 @@
|
||||
<Korean>현재 로드아웃을 클립보드로 내보냈습니다.</Korean>
|
||||
<Chinese>當前的裝備已匯出到剪貼簿中</Chinese>
|
||||
<Chinesesimp>当前的装备已汇出到剪贴簿中</Chinesesimp>
|
||||
<Russian>Текущий список комплекта экипировки экспортирован в буфер</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importFormatError">
|
||||
<English>Wrong format provided</English>
|
||||
@ -335,6 +365,7 @@
|
||||
<Korean>잘못된 형식 입력됨</Korean>
|
||||
<Chinese>提供的格式錯誤</Chinese>
|
||||
<Chinesesimp>提供的格式错误</Chinesesimp>
|
||||
<Russian>Неверный формат импорта</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedDefault">
|
||||
<English>Default loadouts list imported from clipboard</English>
|
||||
@ -346,6 +377,7 @@
|
||||
<Korean>클립보드에서 기본 로드아웃 가져오기</Korean>
|
||||
<Chinese>預設的裝備清單已從剪貼簿中匯入</Chinese>
|
||||
<Chinesesimp>预设的装备清单已从剪贴簿中汇入</Chinesesimp>
|
||||
<Russian>Список комплекта экипировки по умолчанию импортирован из буфера</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedCurrent">
|
||||
<English>Loadout imported from clipboard</English>
|
||||
@ -357,6 +389,7 @@
|
||||
<Korean>클립보드에서 로드아웃을 가져왔습니다.</Korean>
|
||||
<Chinese>裝備已從剪貼簿中匯入</Chinese>
|
||||
<Chinesesimp>装备已从剪贴簿中汇入</Chinesesimp>
|
||||
<Russian>Список комплекта экипировки импортирован из буфера</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutDeleted">
|
||||
<English>The following loadout was deleted:</English>
|
||||
@ -368,6 +401,7 @@
|
||||
<Korean>다음 로드아웃이 삭제됨 :</Korean>
|
||||
<Chinese>以下的裝備已被刪除:</Chinese>
|
||||
<Chinesesimp>以下的装备已被删除:</Chinesesimp>
|
||||
<Russian>Удален комплект экипировки:</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutUnshared">
|
||||
<English>The following loadout is not public anymore:</English>
|
||||
@ -379,6 +413,7 @@
|
||||
<Korean>다음 로드아웃이 더이상 공용이 아님:</Korean>
|
||||
<Chinese>以下的裝備已不再被分享:</Chinese>
|
||||
<Chinesesimp>以下的装备已不再被分享:</Chinesesimp>
|
||||
<Russian>Этот комплект экипировки больше не публичный:</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveEmptyNameBox">
|
||||
<English>The name field is empty!</English>
|
||||
@ -390,6 +425,7 @@
|
||||
<Korean>이름칸이 비었습니다!</Korean>
|
||||
<Chinese>名稱欄位為空!</Chinese>
|
||||
<Chinesesimp>名称栏位为空!</Chinesesimp>
|
||||
<Russian>Поле имени пустое!</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveAuthorError">
|
||||
<English>You are the author of this loadout</English>
|
||||
@ -401,6 +437,7 @@
|
||||
<Korean>이 로드아웃의 제작자입니다.</Korean>
|
||||
<Chinese>你是這個裝備的作者</Chinese>
|
||||
<Chinesesimp>你是这个装备的作者</Chinesesimp>
|
||||
<Russian>Вы автор этого комплекта экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveSharedError">
|
||||
<English>A loadout of yours with the same name is public</English>
|
||||
@ -412,6 +449,7 @@
|
||||
<Korean>같은 이름의 로드아웃이 공용에 있습니다.</Korean>
|
||||
<Chinese>已有相同名稱的裝備在公用分享區</Chinese>
|
||||
<Chinesesimp>已有相同名称的装备在公用分享区</Chinesesimp>
|
||||
<Russian>Ваш комплект экипировки с таким же именем является публичным</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutSaved">
|
||||
<English>The following loadout was saved:</English>
|
||||
@ -423,6 +461,7 @@
|
||||
<Korean>다음 로드아웃이 저장됨:</Korean>
|
||||
<Chinese>以下的裝備已被保存:</Chinese>
|
||||
<Chinesesimp>以下的装备已被保存:</Chinesesimp>
|
||||
<Russian>Сохранен комплект экипировки:</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutLoaded">
|
||||
<English>The following loadout was loaded:</English>
|
||||
@ -434,6 +473,7 @@
|
||||
<Korean>다음 로드아웃을 불러옴:</Korean>
|
||||
<Chinese>以下的裝備已被載入:</Chinese>
|
||||
<Chinesesimp>以下的装备已被载入:</Chinesesimp>
|
||||
<Russian>Загружен комплект экипировки:</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_renameExistError">
|
||||
<English>A loadout with the same name already exist!</English>
|
||||
@ -445,6 +485,7 @@
|
||||
<Korean>같은 이름의 로드아웃이 이미 존재합니다!</Korean>
|
||||
<Chinese>已有相同名稱的裝備!</Chinese>
|
||||
<Chinesesimp>已有相同名称的装备!</Chinesesimp>
|
||||
<Russian>Комплект с таким именем уже существует!</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutRenamed">
|
||||
<English>was renamed to</English>
|
||||
@ -456,6 +497,7 @@
|
||||
<Korean>이름이 다음과 같이 변경됨:</Korean>
|
||||
<Chinese>已被改名為</Chinese>
|
||||
<Chinesesimp>已被改名为</Chinesesimp>
|
||||
<Russian>был переименован в</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_invertCameraSetting">
|
||||
<English>Invert camera controls</English>
|
||||
@ -467,6 +509,7 @@
|
||||
<Korean>카메라 조종 반전</Korean>
|
||||
<Chinese>反轉攝影機控制</Chinese>
|
||||
<Chinesesimp>反转摄影机控制</Chinesesimp>
|
||||
<Russian>Инвертировать управление камерой</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsSetting">
|
||||
<English>Enable mod icons</English>
|
||||
@ -478,6 +521,7 @@
|
||||
<Korean>모드 아이콘 허가</Korean>
|
||||
<Chinese>啟用模組圖示</Chinese>
|
||||
<Chinesesimp>启用模组图示</Chinesesimp>
|
||||
<Russian>Включить иконки модов</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightSetting">
|
||||
<English>Panel font height</English>
|
||||
@ -489,6 +533,7 @@
|
||||
<Korean>패널 폰트 높이</Korean>
|
||||
<Chinese>面板字體高度</Chinese>
|
||||
<Chinesesimp>面板字体高度</Chinesesimp>
|
||||
<Russian>Размер шрифта панели</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowDefaultLoadoutsSetting">
|
||||
<English>Allow default loadouts</English>
|
||||
@ -500,6 +545,7 @@
|
||||
<Korean>기본 로드아웃 허용</Korean>
|
||||
<Chinese>允許預設裝備</Chinese>
|
||||
<Chinesesimp>允许预设装备</Chinesesimp>
|
||||
<Russian>Разрешить комплекты по умолчанию</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowSharingSetting">
|
||||
<English>Allow loadout sharing</English>
|
||||
@ -511,6 +557,7 @@
|
||||
<Korean>로드아웃 공유 허용</Korean>
|
||||
<Chinese>允許分享裝備</Chinese>
|
||||
<Chinesesimp>允许分享装备</Chinesesimp>
|
||||
<Russian>Разрешить публикацию комплектов</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTSetting">
|
||||
<English>Log missing / unavailable items</English>
|
||||
@ -522,6 +569,7 @@
|
||||
<Korean>누락 된 항목 / 사용 할 수 없는 항목 기록</Korean>
|
||||
<Chinese>記錄遺失/無法使用的項目</Chinese>
|
||||
<Chinesesimp>记录遗失/无法使用的项目</Chinesesimp>
|
||||
<Russian>Вести журнал недоступных предметов</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMagTooltip">
|
||||
<English>Primary magazine</English>
|
||||
@ -533,6 +581,7 @@
|
||||
<German>Primärmagazin</German>
|
||||
<Chinese>主要武器彈匣</Chinese>
|
||||
<Chinesesimp>主要武器弹匣</Chinesesimp>
|
||||
<Russian>Основной магазин</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMag2Tooltip">
|
||||
<English>Secondary magazine</English>
|
||||
@ -544,6 +593,7 @@
|
||||
<German>Sekundärmagazin</German>
|
||||
<Chinese>次要武器彈匣</Chinese>
|
||||
<Chinesesimp>次要武器弹匣</Chinesesimp>
|
||||
<Russian>Вторичный магазин</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_settingCategory">
|
||||
<English>ACE Arsenal</English>
|
||||
@ -555,6 +605,7 @@
|
||||
<Korean>ACE 아스날</Korean>
|
||||
<Chinese>ACE虛擬軍火庫</Chinese>
|
||||
<Chinesesimp>ACE虚拟军火库</Chinesesimp>
|
||||
<Russian>ACE Арсенал</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_defaultLoadoutsTooltip">
|
||||
<English>Allow the use of the default loadouts tab</English>
|
||||
@ -566,6 +617,7 @@
|
||||
<German>Erlaube die Nutzung des Standardausrüstungsreiters</German>
|
||||
<Chinese>允許使用預設的裝備</Chinese>
|
||||
<Chinesesimp>允许使用预设的装备</Chinesesimp>
|
||||
<Russian>Разрешить использование вкладки комплектов экипировки по умолчанию</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsTooltip">
|
||||
<English>Show / hide mod icons for the left panel</English>
|
||||
@ -577,6 +629,7 @@
|
||||
<German>Zeigt/Versteckt Mod-Symbole in der linken Leiste</German>
|
||||
<Chinese>在左面板中顯示/隱藏模組圖示</Chinese>
|
||||
<Chinesesimp>在左面板中显示/隐藏模组图示</Chinesesimp>
|
||||
<Russian>Показать / скрыть значки модов в левой панели</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightTooltip">
|
||||
<English>Change the font height for text in the left / right panels</English>
|
||||
@ -588,6 +641,7 @@
|
||||
<German>Ändert die Schriftgröße für die linke/rechte Leiste</German>
|
||||
<Chinese>變更左/右面板中的字體高度</Chinese>
|
||||
<Chinesesimp>变更左/右面板中的字体高度</Chinesesimp>
|
||||
<Russian>Изменить размер шрифта для текста в левой / правой панелях</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTTooltip">
|
||||
<English>Log missing / unavailable items in the RPT</English>
|
||||
@ -599,6 +653,7 @@
|
||||
<German>Fehlende Gegenstände werden in der RPT aufgezeichnet</German>
|
||||
<Chinese>記錄遺失/無法使用的項目到RPT檔案中</Chinese>
|
||||
<Chinesesimp>记录遗失/无法使用的项目到RPT档案中</Chinesesimp>
|
||||
<Russian>Вести журнал отсутствующих / недоступных предметов в RPT</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_CantOpenDisplay">
|
||||
<English>Unable to open ACE arsenal</English>
|
||||
@ -610,6 +665,7 @@
|
||||
<Chinese>無法開啟ACE虛擬軍火庫</Chinese>
|
||||
<Chinesesimp>无法开启ACE虚拟军火库</Chinesesimp>
|
||||
<Polish>Nie można otworzyć arsenału ACE</Polish>
|
||||
<Russian>Невозможно открыть ACE Арсенал</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_portLoadoutsText">
|
||||
<English>Import BI VA loadouts to ACE Arsenal</English>
|
||||
@ -621,6 +677,7 @@
|
||||
<Chinesesimp>汇入BI原厂虚拟军火库的装备到ACE虚拟军火库中</Chinesesimp>
|
||||
<Italian>Importa l'arsenale virtuale BI nell'arsenale ACE</Italian>
|
||||
<Polish>Importuj zestawy wyposażenia z wirtualnego arsenału BI do arsenału ACE</Polish>
|
||||
<Russian>Импорт комплектов из Арсенала BI в Арсенал ACE</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_portLoadoutsPlayerError">
|
||||
<English>No player unit available! Place a unit and mark it as "Player".</English>
|
||||
@ -632,6 +689,7 @@
|
||||
<Chinesesimp>没有可用的玩家单位!请摆放一个单位并设定成"玩家"。</Chinesesimp>
|
||||
<Italian>Non ci sono giocatori! Poisziona una unità e impostala come "Giocatore".</Italian>
|
||||
<Polish>Brak dostępnych jednostek gracza! Postaw jednostkę i oznacz ją jako "Gracz".</Polish>
|
||||
<Russian>Нет доступных игроков! Разместите юнит и отметьте его как «Игрок»</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_portLoadoutsLoadoutError">
|
||||
<English>No loadouts to import.</English>
|
||||
@ -643,6 +701,7 @@
|
||||
<Chinesesimp>没有装备被汇入。</Chinesesimp>
|
||||
<Italian>Non ci sono equipaggiamenti da importare.</Italian>
|
||||
<Polish>Brak zestawów wyposażenia do zaimportowania.</Polish>
|
||||
<Russian>Нет комплектов для импорта</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mission">
|
||||
<English>ACE Arsenal</English>
|
||||
@ -653,6 +712,7 @@
|
||||
<Chinesesimp>ACE虚拟军火库</Chinesesimp>
|
||||
<Italian>Arsenale ACE</Italian>
|
||||
<Polish>Arsenał ACE</Polish>
|
||||
<Russian>ACE Арсенал</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_ReturnToArsenal">
|
||||
<English>Return to ACE Arsenal.</English>
|
||||
@ -663,6 +723,7 @@
|
||||
<Chinesesimp>返回到ACE虚拟军火库。</Chinesesimp>
|
||||
<Italian>Torna all'arsenale ACE</Italian>
|
||||
<Polish>Wróć do arsenału ACE.</Polish>
|
||||
<Russian>Вернуться в ACE Арсенал</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mission_tooltip">
|
||||
<English>Use ACE Arsenal to try out different weapons and equipment.</English>
|
||||
@ -673,6 +734,7 @@
|
||||
<Chinesesimp>使用ACE虚拟军火库来尝试不同的武器与装备。</Chinesesimp>
|
||||
<Italian>Usa l'arsenale ACE per provare armi ed equipaggiamenti vari.</Italian>
|
||||
<Polish>Skorzystaj z arsenału ACE by wypróbować broń i ekwipunek.</Polish>
|
||||
<Russian>Используйте ACE Arsenal, чтобы опробовать различное оружие и снаряжение.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mission_overview">
|
||||
<English>Try weapons and equipment and create your own loadouts.</English>
|
||||
@ -683,6 +745,7 @@
|
||||
<Chinesesimp>尝试不同的武器与装备来组合你个人的装备配置。</Chinesesimp>
|
||||
<Italian>Prova armi ed equipaggiamenti e creai i tuoi equipaggiamenti personalizzati.</Italian>
|
||||
<Polish>Wypróbuj broń i ekwipunek i stwórz swoje własne zestawy wyposażenia.</Polish>
|
||||
<Russian>Опробуйте оружие и снаряжение, создавайте собственные комплекты экипировки.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadoutsTooltip">
|
||||
<English>Open the loadouts screen</English>
|
||||
@ -692,6 +755,7 @@
|
||||
<Japanese>装備画面を開く</Japanese>
|
||||
<Italian>Apri la pagina degli equipaggiamenti</Italian>
|
||||
<Polish>Otwórz ekran zestawów</Polish>
|
||||
<Russian>Открыть окно комплектов экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonExportTooltip">
|
||||
<English>Export current / default loadouts</English>
|
||||
@ -701,6 +765,7 @@
|
||||
<Japanese>現在/標準装備をエクスポートします</Japanese>
|
||||
<Italian>Esporta l'equipaggiamento attuale oppure la lista degli equipaggiamenti di base</Italian>
|
||||
<Polish>Eksportuj obecne / domyślne zestawy wyposażenia </Polish>
|
||||
<Russian>Экспорт комплектов экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonImportTooltip">
|
||||
<English>Import current / default loadouts</English>
|
||||
@ -710,6 +775,7 @@
|
||||
<Japanese>現在/標準装備をインポートします</Japanese>
|
||||
<Italian>Importa l'equipaggiamento attuale oppure la lista degli equipaggiamenti di base</Italian>
|
||||
<Polish>Importuj obecne / domyślne zestawy wyposażenia</Polish>
|
||||
<Russian>Импорт комплектов экипировки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statPotassium">
|
||||
<English>Potassium levels</English>
|
||||
@ -719,6 +785,7 @@
|
||||
<Chinese>鉀水平</Chinese>
|
||||
<Italian>Ilvello di potassio</Italian>
|
||||
<Polish>Poziomy potasu</Polish>
|
||||
<Russian>Уровень Калия</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statMagnification">
|
||||
<English>Magnification</English>
|
||||
@ -742,6 +809,7 @@
|
||||
<Japanese>暗視装置への対応有無</Japanese>
|
||||
<Polish>Wsparcie noktowizyjne</Polish>
|
||||
<Italian>Supporto visore notturno</Italian>
|
||||
<Russian>Поддержка ночного видения</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statVisionMode_supPrim">
|
||||
<English>Primary supported</English>
|
||||
@ -749,6 +817,7 @@
|
||||
<Japanese>プライマリが対応</Japanese>
|
||||
<Polish>Wspierane przez broń główną</Polish>
|
||||
<Italian>Primario supportato</Italian>
|
||||
<Russian>Поддерживается осн. прицелом</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statVisionMode_supSec">
|
||||
<English>Secondary supported</English>
|
||||
@ -756,6 +825,7 @@
|
||||
<Japanese>セカンダリが対応</Japanese>
|
||||
<Polish>Wspierane przez broń drugorzędną</Polish>
|
||||
<Italian>Secondario supportato</Italian>
|
||||
<Russian>Поддерживается доп. прицелом</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statVisionMode_IntPrim">
|
||||
<English>Primary integrated</English>
|
||||
@ -763,6 +833,7 @@
|
||||
<Japanese>プライマリに内蔵</Japanese>
|
||||
<Polish>Zintegrowane z bronią główną</Polish>
|
||||
<Italian>Primario integrato</Italian>
|
||||
<Russian>Интегрирован в осн. прицел</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statVisionMode_NoSup">
|
||||
<English>Not Supported</English>
|
||||
@ -770,6 +841,7 @@
|
||||
<Japanese>セカンダリに内蔵</Japanese>
|
||||
<Polish>Nie wspierane</Polish>
|
||||
<Italian>Non supportato</Italian>
|
||||
<Russian>Не поддерживается</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_page">
|
||||
<English>Page</English>
|
||||
@ -779,6 +851,7 @@
|
||||
<Chinese>頁面</Chinese>
|
||||
<Italian>Pagina</Italian>
|
||||
<Polish>Strona</Polish>
|
||||
<Russian>Стр.</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_enableIdentityTabsSettings">
|
||||
<English>Enable the faces / voices / insignias tabs</English>
|
||||
@ -788,6 +861,7 @@
|
||||
<Chinese>啟用臉譜/聲音/徽章選項</Chinese>
|
||||
<Italian>Abilita volti, voci e insegne</Italian>
|
||||
<Polish>Aktywuj zakładki twarz / głos / insygnia</Polish>
|
||||
<Russian>Включить вкладки Лиц / Голосов / Знаков различия</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonClearContainerTooltip">
|
||||
<English>Empty the selected container</English>
|
||||
@ -797,6 +871,7 @@
|
||||
<Chinese>清空選擇的箱子</Chinese>
|
||||
<Italian>Svuota il contenitore selezionato</Italian>
|
||||
<Polish>Opróżnij wybrany pojemnik</Polish>
|
||||
<Russian>Очистить контейнер</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportedClassnameText">
|
||||
<English>Exported class name to clipboard</English>
|
||||
@ -806,6 +881,7 @@
|
||||
<Chinese>輸出 class name 到剪貼簿上</Chinese>
|
||||
<Italian>Copiato il nome della classe negli appunti</Italian>
|
||||
<Polish>Wyeksportowano nazwę klasy do schowka</Polish>
|
||||
<Russian>Имя класса, экспортированного в буфер</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mode">
|
||||
<English>Mode</English>
|
||||
@ -844,6 +920,7 @@
|
||||
<Japanese>禁止リスト</Japanese>
|
||||
<Italian>Lista Nera</Italian>
|
||||
<Polish>Czarna lista (lista wykluczeń)</Polish>
|
||||
<Russian>Чёрный список</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Items">
|
||||
<English>Items</English>
|
||||
@ -866,21 +943,25 @@
|
||||
<Japanese>スクリプト用に現在のアイテム リストをアレイでエクスポートします</Japanese>
|
||||
<Italian>Esporta l'attuale lista di elementi come un array, per essere usati negli script</Italian>
|
||||
<Polish>Eksportuj obecną listę przedmiotów jako tablicę do wykorzystania w skryptach</Polish>
|
||||
<Russian>Экспорт текущего списка предметов в виде массива для использования в скриптах</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_AttributeImport_Tooltip">
|
||||
<English>Import items list array from clipboard (should be the same format as export)</English>
|
||||
<Polish>Zaimportuj listę przedmiotów ze schowka (lista musi być w tym samym formacie jak przy exporcie)</Polish>
|
||||
<Japanese>クリップボードからアイテムリストをアレイでインポートします (エクスポートと同じフォーマットである必要があります)</Japanese>
|
||||
<Russian>Импорт массива списка предметов из буфера (должен иметь тот же формат, что при экспорте)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_AttributeAddCompatible_DisplayName">
|
||||
<English>Add Compatible Items</English>
|
||||
<Polish>Dodaj kompatybilne przedmioty</Polish>
|
||||
<Japanese>対応アイテムを追加</Japanese>
|
||||
<Russian>Добавить совместимые предметы</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_AttributeAddCompatible_Tooltip">
|
||||
<English>Will automatically add compatible attachments or magazines (based on selected category) for all weapons in current items list</English>
|
||||
<Polish>Automatycznie doda kompatybilne dodatki oraz magazynki (odpowiednio do każdej kategorii) dla wszystkich broni na liście</Polish>
|
||||
<Japanese>現在のアイテム リスト内にある全武器に対応するアタッチメントと弾倉 (選択したカテゴリに基づき) を自動的に追加します</Japanese>
|
||||
<Russian>Добавляет совместимые приспособления или магазины (в зависимости от выбранной категории) для всего оружия в текущем списке предметов</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statTTL">
|
||||
<English>Time to live</English>
|
||||
@ -888,6 +969,7 @@
|
||||
<Japanese>有効時間</Japanese>
|
||||
<Polish>Czas by żyć</Polish>
|
||||
<Italian>Scadenza (TTL)</Italian>
|
||||
<Russian>Время действия</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -604,15 +604,17 @@ class CfgAmmo {
|
||||
ACE_barrelLengths[]={304.8, 406.4, 609.6};
|
||||
};
|
||||
class B_570x28_Ball: BulletBase {
|
||||
ACE_caliber = 5.7;
|
||||
ACE_caliber = 5.7; // https://bobp.cip-bobp.org/uploads/tdcc/tab-i/tabical-en-page7.pdf
|
||||
ACE_bulletLength = 21.6; // http://blog.thejustnation.org/2011/04/5-7x28mm-ammo-review/
|
||||
ACE_bulletMass = 2; // based on the SS190
|
||||
ACE_ballisticCoefficients[] = {0.177}; //http://m.delphiforums.com/autogun/messages/5267/7
|
||||
ACE_ammoTempMuzzleVelocityShifts[] = {-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619};
|
||||
ACE_ballisticCoefficients[] = {0.084}; // https://www.thefirearmblog.com/blog/2016/10/24/modern-personal-defense-weapon-calibers-4-6x30mm-hk/
|
||||
ACE_velocityBoundaries[] = {};
|
||||
ACE_standardAtmosphere = "ASM"; // 50/50 chance to get it right
|
||||
ACE_standardAtmosphere = "ICAO";
|
||||
ACE_dragModel = 7;
|
||||
ACE_muzzleVelocities[] = {716,776};
|
||||
ACE_barrelLengths[] = {264,407};
|
||||
ACE_muzzleVelocities[] = {716, 776}; // at 21°C, 715-775 m/s at 15°C according with the 50Rnd_570x28_SMG_03 initSpeed
|
||||
ACE_barrelLengths[] = {264, 407};
|
||||
airFriction = -0.002619; // default BI value -0.001412
|
||||
};
|
||||
class B_19mm_HE: BulletBase {
|
||||
tracerScale = 1;
|
||||
|
@ -75,6 +75,7 @@ class CfgWeapons {
|
||||
ACE_barrelTwist = 228.6; // 1:9 inch twist
|
||||
ACE_barrelLength = 407;
|
||||
ACE_twistDirection = 1;
|
||||
initSpeed = -1.083916; // 775 m/s according with the ACE_muzzleVelocities at 15°C, default BI value -1.1 (786 m/s)
|
||||
modes[] = {"Single"};
|
||||
};
|
||||
class SMG_03C_BASE: SMG_03_TR_BASE {
|
||||
|
@ -2288,6 +2288,7 @@
|
||||
<Chinese>膛線扭度</Chinese>
|
||||
<Italian>Rigatura della canna</Italian>
|
||||
<Polish>Gwintowanie lufy</Polish>
|
||||
<Russian>Нарезы ствола</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statBarrelLength">
|
||||
<English>Barrel length</English>
|
||||
@ -2297,6 +2298,7 @@
|
||||
<Chinese>槍管長度</Chinese>
|
||||
<Italian>Lunghezza della canna</Italian>
|
||||
<Polish>Długość lufy</Polish>
|
||||
<Russian>Длина ствола</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statBallisticCoef">
|
||||
<English>Ballistic coefficient</English>
|
||||
@ -2306,6 +2308,7 @@
|
||||
<Chinese>彈道係數</Chinese>
|
||||
<Italian>Coefficente balistico</Italian>
|
||||
<Polish>Współczynnik balistyczny</Polish>
|
||||
<Russian>Баллистический коэффициент</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statBulletMass">
|
||||
<English>Bullet mass</English>
|
||||
@ -2315,6 +2318,7 @@
|
||||
<Chinese>彈頭重量</Chinese>
|
||||
<Italian>Massa del proiettile</Italian>
|
||||
<Polish>Masa pocisku</Polish>
|
||||
<Russian>Масса пули</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statMuzzleVelocity">
|
||||
<English>Muzzle velocity</English>
|
||||
@ -2324,6 +2328,7 @@
|
||||
<Chinese>槍口初速</Chinese>
|
||||
<Italian>Velocità iniziale</Italian>
|
||||
<Polish>Prędkość wylotowa</Polish>
|
||||
<Russian>Начальная скорость</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -10,6 +10,7 @@
|
||||
<Japanese>捕虜</Japanese>
|
||||
<Korean>포로설정</Korean>
|
||||
<Polish>Jeńcy</Polish>
|
||||
<Russian>Пленные</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_SetCaptive">
|
||||
<English>Take Prisoner</English>
|
||||
@ -21,7 +22,7 @@
|
||||
<Italian>Arresta il prigioniero</Italian>
|
||||
<Portuguese>Tomar Prisioneiro</Portuguese>
|
||||
<Hungarian>Foglyul ejtés</Hungarian>
|
||||
<Russian>Взять в плен</Russian>
|
||||
<Russian>Арестовать</Russian>
|
||||
<Japanese>捕虜にする</Japanese>
|
||||
<Korean>포박하기</Korean>
|
||||
<Chinese>逮捕俘虜</Chinese>
|
||||
@ -37,7 +38,7 @@
|
||||
<Italian>Libera il prigioniero</Italian>
|
||||
<Portuguese>Libertar Prisioneiro</Portuguese>
|
||||
<Hungarian>Fogoly szabadon engedése</Hungarian>
|
||||
<Russian>Освободить пленника</Russian>
|
||||
<Russian>Освободить пленного</Russian>
|
||||
<Japanese>捕虜を解放する</Japanese>
|
||||
<Korean>풀어주기</Korean>
|
||||
<Chinese>釋放俘虜</Chinese>
|
||||
@ -53,7 +54,7 @@
|
||||
<Italian>Scorta il Prigioniero</Italian>
|
||||
<Portuguese>Escoltar Prisioneiro</Portuguese>
|
||||
<Hungarian>Fogoly kísérése</Hungarian>
|
||||
<Russian>Конвоировать пленника</Russian>
|
||||
<Russian>Конвоировать пленного</Russian>
|
||||
<Japanese>捕虜を移動させる</Japanese>
|
||||
<Korean>포로 호송하기</Korean>
|
||||
<Chinese>護送俘虜</Chinese>
|
||||
@ -85,7 +86,7 @@
|
||||
<Italian>Prima devi arrestarlo!</Italian>
|
||||
<Portuguese>Você deve tomá-lo como prisioneiro primeiro!</Portuguese>
|
||||
<Hungarian>Először foglyul kell ejtened őt!</Hungarian>
|
||||
<Russian>Вы должны сначала взять его в плен!</Russian>
|
||||
<Russian>Вы должны сначала арестовать его!</Russian>
|
||||
<Japanese>捕虜を取っている必要があります!</Japanese>
|
||||
<Korean>먼저 포로로 만들어야합니다!</Korean>
|
||||
<Chinese>你必須先逮捕他!</Chinese>
|
||||
@ -149,7 +150,7 @@
|
||||
<Portuguese>A algema plástica permite que você contenha prisioneiros.</Portuguese>
|
||||
<Italian>Fascetta per arrestare i prigionieri</Italian>
|
||||
<Hungarian>Gyorskötöző, emberek foglyulejtéséhez használható.</Hungarian>
|
||||
<Russian>Кабельные стяжки позволяют связывать пленников.</Russian>
|
||||
<Russian>Кабельные стяжки используются для связывания рук при аресте</Russian>
|
||||
<Japanese>ケーブル タイは捕虜を制圧できます。</Japanese>
|
||||
<Korean>케이블 타이는 포로를 구류시킬때 씁니다.</Korean>
|
||||
<Chinese>束線帶可以綁住俘虜</Chinese>
|
||||
@ -179,7 +180,7 @@
|
||||
<Portuguese>Parar de se render</Portuguese>
|
||||
<Czech>Přestat se vzdávat</Czech>
|
||||
<Polish>Podejmij walkę ponownie</Polish>
|
||||
<Russian>Прекратить сдачу в плен</Russian>
|
||||
<Russian>Прекратить сдаваться</Russian>
|
||||
<Hungarian>Megadás abbahagyása</Hungarian>
|
||||
<Italian>Smetti di arrenderti</Italian>
|
||||
<Japanese>投降をやめる</Japanese>
|
||||
@ -212,7 +213,7 @@
|
||||
<Portuguese>Sincroniza uma unidade para fazer com que ela se renda.</Portuguese>
|
||||
<French>Synchronise une unité pour la rendre captive.</French>
|
||||
<Hungarian>Egység szinkronizálása, hogy kapituláljon.</Hungarian>
|
||||
<Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться в плен.</Russian>
|
||||
<Russian>Синхронизируйте с юнитами, чтобы заставить их сдаться.</Russian>
|
||||
<Italian>Sincronizza una unità per farla arrendere.</Italian>
|
||||
<Japanese>同期されたユニットを投降させます。</Japanese>
|
||||
<Korean>투항시키기 위해 동기화합니다.</Korean>
|
||||
@ -224,7 +225,7 @@
|
||||
<German>Einheit in Handschellen legen</German>
|
||||
<Polish>Skuj jednostkę</Polish>
|
||||
<Portuguese>Fazer unidade algemada</Portuguese>
|
||||
<Russian>Связать юнита</Russian>
|
||||
<Russian>Связать юниту руки</Russian>
|
||||
<Czech>Spoutat jednotku</Czech>
|
||||
<Italian>Metti manette all'unità</Italian>
|
||||
<Spanish>Hacer que la unidad esté esposada</Spanish>
|
||||
@ -239,7 +240,7 @@
|
||||
<German>Synchronisiere eine Einheit, um sie in Handschellen zu legen.</German>
|
||||
<Polish>Zsynchronizuj z jednostką, aby została skuta.</Polish>
|
||||
<Portuguese>Sincronizar uma unidade para deixá-la algemada.</Portuguese>
|
||||
<Russian>Синхронизируйте с юнитами, чтобы сделать их связанными.</Russian>
|
||||
<Russian>Синхронизируйте с юнитами, чтобы связать им руки.</Russian>
|
||||
<Czech>Synchronizovat s jednotkou, která má být v poutech.</Czech>
|
||||
<Italian>Sincronizza un'unità per metterle le manette.</Italian>
|
||||
<Spanish>Sincroniza una unidad para hacer que esté esposada.</Spanish>
|
||||
@ -274,7 +275,7 @@
|
||||
<Portuguese>Controla as configurações de rendição e abraçadeiras</Portuguese>
|
||||
<French>Contrôle les paramètres de la reddition et des Serflex</French>
|
||||
<Hungarian>Szabályozza a kapituláció és bilincselés beállításait</Hungarian>
|
||||
<Russian>Управляет настройками сдачи в плен и связывания</Russian>
|
||||
<Russian>Управляет настройками ареста и сдачи в плен</Russian>
|
||||
<Italian>Controlla le impostazioni per la resa e le manette</Italian>
|
||||
<Japanese>投降したユニットや拘束されたユニットの扱いを設定します。</Japanese>
|
||||
<Korean>투항과 케이블 타이에 관련한 설정</Korean>
|
||||
@ -290,7 +291,7 @@
|
||||
<Portuguese>Pode algemar o próprio lado</Portuguese>
|
||||
<French>Peut capturer sa propre faction</French>
|
||||
<Hungarian>Saját oldal megbilincselhető</Hungarian>
|
||||
<Russian>Связать союзника</Russian>
|
||||
<Russian>Можно связывать руки союзникам</Russian>
|
||||
<Italian>Puoi ammanettare unità alleate</Italian>
|
||||
<Japanese>拘束ユニットを自陣営へ</Japanese>
|
||||
<Korean>자기편을 포박 할 수 있습니다.</Korean>
|
||||
@ -306,7 +307,7 @@
|
||||
<Portuguese>Os jogadores podem algemar unidades do seu lado</Portuguese>
|
||||
<French>Les joueurs peuvent utiliser les Serflex sur leur propre camp</French>
|
||||
<Hungarian>A játékosok megkötözhetik-e a saját oldalukon lévő egységeket</Hungarian>
|
||||
<Russian>Разрешить игрокам связывать юнитов своей стороны</Russian>
|
||||
<Russian>Разрешить игрокам арестовывать юнитов своей стороны</Russian>
|
||||
<Italian>I giocatori possono ammanettare unità alleate</Italian>
|
||||
<Japanese>プレイヤーが拘束したユニットの陣営を自陣営に変更させます。</Japanese>
|
||||
<Korean>자기편에게 케이블타이를 사용할 수 있게합니다</Korean>
|
||||
@ -322,7 +323,7 @@
|
||||
<Portuguese>Permite rendição</Portuguese>
|
||||
<French>Permettre la reddition</French>
|
||||
<Hungarian>Kapituláció engedélyezése</Hungarian>
|
||||
<Russian>Сдаться в плен</Russian>
|
||||
<Russian>Разрешить сдаваться</Russian>
|
||||
<Italian>Permetti Resa</Italian>
|
||||
<Japanese>投降を許可</Japanese>
|
||||
<Korean>투항 활성화</Korean>
|
||||
@ -338,7 +339,7 @@
|
||||
<Portuguese>Jogadores podem se render depois de guardar sua arma</Portuguese>
|
||||
<French>Les joueurs peuvent se rendre après avoir rangé leur arme</French>
|
||||
<Hungarian>A játékosok megadhatják magukat a fegyverük elrakása után</Hungarian>
|
||||
<Russian>Игроки могут сдаться в плен после того, как уберут оружие</Russian>
|
||||
<Russian>Игроки могут сдаваться после того, как уберут оружие</Russian>
|
||||
<Italian>I giocatori possono arrendersi dopo aver messo via le proprie armi</Italian>
|
||||
<Japanese>プレイヤーは武器を収めたあと投降できるようにします。</Japanese>
|
||||
<Korean>비무장한 플레이어가 투항할 수 있게 합니다</Korean>
|
||||
@ -350,7 +351,7 @@
|
||||
<German>Benötigt Kapitulation</German>
|
||||
<Polish>Wymagaj kapitulacji</Polish>
|
||||
<Portuguese>Requer rendição</Portuguese>
|
||||
<Russian>Требовать пленения</Russian>
|
||||
<Russian>Требовать сдаться для ареста</Russian>
|
||||
<Spanish>Requiere rendición</Spanish>
|
||||
<Czech>Vzdávání vyžadováno</Czech>
|
||||
<Italian>Richiedi Resa</Italian>
|
||||
@ -365,7 +366,7 @@
|
||||
<German>Spieler müssen sich erst ergeben, bevor sie gefangen genommen werden können</German>
|
||||
<Polish>Wymagaj od graczy kapitulacji zanim będzie można ich zaaresztować</Polish>
|
||||
<Portuguese>Requer que jogadores se rendam antes de poderem ser presos</Portuguese>
|
||||
<Russian>Требуется, чтобы игрок сдался в плен прежде, чем его можно будет связать</Russian>
|
||||
<Russian>Требовать для ареста, чтобы игроки вначале сдавались</Russian>
|
||||
<Spanish>Requiere que los Jugadores se rindan antes de arrestarlos</Spanish>
|
||||
<Czech>Vyžaduje, aby se hráč nejdříve vzdal, poté může být spoután</Czech>
|
||||
<Italian>I giocatori devono arrendersi prima che possano essere arrestati</Italian>
|
||||
@ -380,7 +381,7 @@
|
||||
<German>Nur Ergeben</German>
|
||||
<Polish>Tylko kapitulacja</Polish>
|
||||
<Portuguese>Somente rendição </Portuguese>
|
||||
<Russian>Только сдавшийся в плен</Russian>
|
||||
<Russian>Только сдавшийся</Russian>
|
||||
<Spanish>Solo rendición</Spanish>
|
||||
<Czech>Pouze vzdávání</Czech>
|
||||
<Italian>Solo Resa</Italian>
|
||||
@ -414,6 +415,7 @@
|
||||
<Chinesesimp>设置在游标下的单位成俘虏状态。</Chinesesimp>
|
||||
<Korean>커서의 병력을 포박합니다.</Korean>
|
||||
<Polish>Ustawia jednostkę pod kursorem jako jeniec.</Polish>
|
||||
<Russian>Арестовывает указанный курсором юнит</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrenderAi_name">
|
||||
<English>Require AI surrendering</English>
|
||||
@ -424,6 +426,7 @@
|
||||
<Chinesesimp>需要AI先行投降</Chinesesimp>
|
||||
<Korean>AI 항복 필요</Korean>
|
||||
<Polish>Wymaga poddania się przez SI</Polish>
|
||||
<Russian>Требовать ИИ сдаться для ареста</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Captives_ModuleSettings_requireSurrenderAi_description">
|
||||
<English>Require AI to surrender before they can be arrested</English>
|
||||
@ -434,6 +437,7 @@
|
||||
<Chinesesimp>在逮捕AI之前该AI必须先进入投降状态。</Chinesesimp>
|
||||
<Korean>포박하기 전에 먼저 AI가 투항해야만 합니다.</Korean>
|
||||
<Polish>Wymaga poddania się przez SI zanim aresztowanie będzie możliwe</Polish>
|
||||
<Russian>Требовать для ареста, чтобы ИИ вначале сдавались</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -237,6 +237,7 @@
|
||||
<Chinesesimp>货物空间</Chinesesimp>
|
||||
<Polish>Przestrzeń ładunkowa</Polish>
|
||||
<Korean>화물 공간</Korean>
|
||||
<Russian>Грузовое пространство</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_space_edenDesc">
|
||||
<English>The cargo space available in this vehicle/container</English>
|
||||
@ -247,6 +248,7 @@
|
||||
<Chinesesimp>设定此载具/集装箱可装载多少货物</Chinesesimp>
|
||||
<Polish>Dostępna przestrzeń ładunkowa w tym pojeździe/kontenerze</Polish>
|
||||
<Korean>이 차량/컨테이너에서 사용가능한 화물 공간</Korean>
|
||||
<Russian>Грузовое пространство, доступное в этом транспортном средстве / контейнере</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_size_edenName">
|
||||
<English>Cargo Size</English>
|
||||
@ -257,6 +259,7 @@
|
||||
<Chinesesimp>货物的大小</Chinesesimp>
|
||||
<Polish>Wielkość ładunku</Polish>
|
||||
<Korean>화물 크기</Korean>
|
||||
<Russian>Размер груза</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_size_edenDesc">
|
||||
<English>The cargo space required to hold this object (-1 for unloadable)</English>
|
||||
@ -267,6 +270,7 @@
|
||||
<Chinesesimp>此货物会占掉多少空间(设定-1的话此货物就不能被装载)</Chinesesimp>
|
||||
<Polish>Wymagana przestrzeń ładunkowa dla tego obiektu (-1 dla niemożliwych do załadowania)</Polish>
|
||||
<Korean>이 화물을 적재하는데 필요한 공간 (-1=무조건 적재가능)</Korean>
|
||||
<Russian>Грузовое пространство, необходимое для размещения этого объекта (-1 для незагружаемого)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_paradropButton">
|
||||
<English>Airdrop</English>
|
||||
@ -278,6 +282,7 @@
|
||||
<Italian>Lancio Aereo</Italian>
|
||||
<Chinese>空投</Chinese>
|
||||
<Chinesesimp>空投</Chinesesimp>
|
||||
<Russian>Десантирование груза</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_unlevelFlightWarning">
|
||||
<English>Unlevel Flight</English>
|
||||
@ -289,6 +294,7 @@
|
||||
<Italian>Volo non Livellato</Italian>
|
||||
<Chinese>此架飛機並無保持水平飛行</Chinese>
|
||||
<Chinesesimp>此架飞机并无保持水平飞行</Chinesesimp>
|
||||
<Russian>Неподходящее положение</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_paradropTimeCoefficent">
|
||||
<English>Paradrop Time Coefficient</English>
|
||||
@ -300,6 +306,7 @@
|
||||
<Chinesesimp>空投时间系数</Chinesesimp>
|
||||
<Polish>Współczynnik czasu zrzutu</Polish>
|
||||
<Korean>공중 투하 시간 계수</Korean>
|
||||
<Russian>Коэффициент времени десантирования</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_paradropTimeCoefficent_description">
|
||||
<English>Modifier for how long it takes to paradrop a cargo item.</English>
|
||||
@ -311,18 +318,21 @@
|
||||
<Chinesesimp>设定空投所需消耗的时间.</Chinesesimp>
|
||||
<Polish>Modyfikator wskazujący jak dużo czasu potrzeba by zrzucić przedmiot na spadochronie.</Polish>
|
||||
<Korean>화물을 공중 투하 하는데 얼마나 걸리는 시간 설정</Korean>
|
||||
<Russian>Модификатор времени, необходимого для десантирования груза</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_loadTimeCoefficient">
|
||||
<English>Load Time Coefficient</English>
|
||||
<Japanese>積載時間の係数</Japanese>
|
||||
<Polish>Współczynnik czasu załadowania</Polish>
|
||||
<Italian>Coefficente Tempo Caricamento</Italian>
|
||||
<Russian>Коэффициент времени погрузки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Cargo_loadTimeCoefficient_description">
|
||||
<English>Modifies how long it takes to load/unload items.\nTime, in seconds, is the size of the item multiplied by this value.</English>
|
||||
<Japanese>アイテムの積み下ろし作業にかかる時間を編集できます。\nアイテムの大きさにこの値が乗法され、時間 (秒) を変更できます。</Japanese>
|
||||
<Polish>Modyfikuje, jak długo zajmuje załadowywanie/wyładowywanie przedmiotów. \nCzasem, w sekundach, jest wielkość przedmiotu razy jego wartość.</Polish>
|
||||
<Italian>Modifica quanto tempo ci impiega a caricare o scaricare gli oggetti.\n Tempo, in secondi, è la dimensione dell'oggetto moltiplicata per questo valore</Italian>
|
||||
<Russian>Изменяет время для загрузки/выгрузки предметов. \n Время (сек) - это размер предмета, умноженный на это значение.</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -11,6 +11,7 @@
|
||||
<Italian>Luce chimica</Italian>
|
||||
<Chinese>螢光棒</Chinese>
|
||||
<Chinesesimp>萤光棒</Chinesesimp>
|
||||
<Russian>Химсвет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Action_Prepare">
|
||||
<English>Prepare %1</English>
|
||||
@ -22,6 +23,7 @@
|
||||
<Italian>Prepara %1</Italian>
|
||||
<Chinese>使用%1</Chinese>
|
||||
<Chinesesimp>使用%1</Chinesesimp>
|
||||
<Russian>Приготовить %1</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Action_Prepare_Done">
|
||||
<English>%1<br/>Prepared</English>
|
||||
@ -33,6 +35,7 @@
|
||||
<Italian>%1 <br/> Preparata</Italian>
|
||||
<Chinese>%1<br/>已使用</Chinese>
|
||||
<Chinesesimp>%1<br/>已使用</Chinesesimp>
|
||||
<Russian>%1<br/>Приготовлен</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Inventory_Full">
|
||||
<English>No inventory space</English>
|
||||
@ -60,6 +63,7 @@
|
||||
<Italian>[ACE] Luci chimiche</Italian>
|
||||
<Chinese>[ACE] 螢光棒</Chinese>
|
||||
<Chinesesimp>[ACE] 萤光棒</Chinesesimp>
|
||||
<Russian>[ACE] Химсвет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Orange_DisplayName">
|
||||
<English>Chemlight (Orange)</English>
|
||||
@ -71,6 +75,7 @@
|
||||
<Italian>Luce chimica (Arancione)</Italian>
|
||||
<Chinese>螢光棒 (橘色)</Chinese>
|
||||
<Chinesesimp>萤光棒 (橘色)</Chinesesimp>
|
||||
<Russian>Химсвет (Оранжевый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Orange_DisplayNameShort">
|
||||
<English>Orange Light</English>
|
||||
@ -82,6 +87,7 @@
|
||||
<Italian>Luce Arancione</Italian>
|
||||
<Chinese>橘色光</Chinese>
|
||||
<Chinesesimp>橘色光</Chinesesimp>
|
||||
<Russian>Оранжевый свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Orange_DescriptionShort">
|
||||
<English>Type: Light - Orange<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -93,6 +99,7 @@
|
||||
<Italian>Tipo: Luce - Arancione<br/>Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
<Chinese>類型: 光 - 橘色<br />發數: 1<br />使用於: 手</Chinese>
|
||||
<Chinesesimp>类型: 光 - 橘色<br />发数: 1<br />使用于: 手</Chinesesimp>
|
||||
<Russian>Тип: Свет - Оранжевый<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_White_DisplayName">
|
||||
<English>Chemlight (White)</English>
|
||||
@ -104,6 +111,7 @@
|
||||
<Italian>Luce chimica (Bianca)</Italian>
|
||||
<Chinese>螢光棒 (白色)</Chinese>
|
||||
<Chinesesimp>萤光棒 (白色)</Chinesesimp>
|
||||
<Russian>Химсвет (Белый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_White_DisplayNameShort">
|
||||
<English>White Light</English>
|
||||
@ -115,6 +123,7 @@
|
||||
<Italian>Luce Bianca</Italian>
|
||||
<Chinese>白色光</Chinese>
|
||||
<Chinesesimp>白色光</Chinesesimp>
|
||||
<Russian>Белый свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_White_DescriptionShort">
|
||||
<English>Type: Light - White<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -126,6 +135,7 @@
|
||||
<Italian>Tipo: Luce - Bianca<br/>Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
<Chinese>類型: 光 - 白色<br />發數: 1<br />使用於: 手</Chinese>
|
||||
<Chinesesimp>类型: 光 - 白色<br />发数: 1<br />使用于: 手</Chinesesimp>
|
||||
<Russian>Тип: Свет - Белый<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiRed_DisplayName">
|
||||
<English>Chemlight (Hi Red)</English>
|
||||
@ -137,6 +147,7 @@
|
||||
<Italian>Luce chimica (Hi Rossa)</Italian>
|
||||
<Chinese>螢光棒 (超亮紅色)</Chinese>
|
||||
<Chinesesimp>萤光棒 (超亮红色)</Chinesesimp>
|
||||
<Russian>Химсвет (Ярко-Красный)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiRed_DisplayNameShort">
|
||||
<English>Red Hi Light</English>
|
||||
@ -148,6 +159,7 @@
|
||||
<Italian>Luce Hi Rossa</Italian>
|
||||
<Chinese>超亮紅色光</Chinese>
|
||||
<Chinesesimp>超亮红色光</Chinesesimp>
|
||||
<Russian>Яркий Красный свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiRed_DescriptionShort">
|
||||
<English>Type: Light - Red Hi (30 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -159,6 +171,7 @@
|
||||
<Italian>Tipo: Luce - Rossa Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
<Chinese>類型: 光 - 超亮紅色 (30分鐘)<br />發數: 1<br />使用於: 手</Chinese>
|
||||
<Chinesesimp>类型: 光 - 超亮红色 (30分钟)<br />发数: 1<br />使用于: 手</Chinesesimp>
|
||||
<Russian>Тип: Свет - Ярко-Красный (30 минут)<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayName">
|
||||
<English>Chemlight (Hi Yellow)</English>
|
||||
@ -170,6 +183,7 @@
|
||||
<Italian>Luce chimica (Hi Gialla)</Italian>
|
||||
<Chinese>螢光棒 (超亮黃色)</Chinese>
|
||||
<Chinesesimp>萤光棒 (超亮黄色)</Chinesesimp>
|
||||
<Russian>Химсвет (Ярко-Желтый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiYellow_DisplayNameShort">
|
||||
<English>Yellow Hi Light</English>
|
||||
@ -181,6 +195,7 @@
|
||||
<Italian>Luce Hi Gialla</Italian>
|
||||
<Chinese>超亮黃色光</Chinese>
|
||||
<Chinesesimp>超亮黄色光</Chinesesimp>
|
||||
<Russian>Яркий Желтый свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiYellow_DescriptionShort">
|
||||
<English>Type: Light - Yellow Hi (30 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -192,6 +207,7 @@
|
||||
<Italian>Tipo: Luce - Gialla Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
<Chinese>類型: 光 - 超亮黃色 (30分鐘)<br />發數: 1<br />使用於: 手</Chinese>
|
||||
<Chinesesimp>类型: 光 - 超亮黄色 (30分钟)<br />发数: 1<br />使用于: 手</Chinesesimp>
|
||||
<Russian>Тип: Свет - Ярко-Желтый (30 минут)<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayName">
|
||||
<English>Chemlight (Hi White)</English>
|
||||
@ -203,6 +219,7 @@
|
||||
<Italian>Luce chimica (Hi Bianca)</Italian>
|
||||
<Chinese>螢光棒 (超亮白色)</Chinese>
|
||||
<Chinesesimp>萤光棒 (超亮白色)</Chinesesimp>
|
||||
<Russian>Химсвет (Ярко-Белый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiWhite_DisplayNameShort">
|
||||
<English>White Hi Light</English>
|
||||
@ -214,6 +231,7 @@
|
||||
<Italian>Luce Hi Bianca</Italian>
|
||||
<Chinese>超亮白色光</Chinese>
|
||||
<Chinesesimp>超亮白色光</Chinesesimp>
|
||||
<Russian>Яркий Белый свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiWhite_DescriptionShort">
|
||||
<English>Type: Light - White Hi (30 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -225,6 +243,7 @@
|
||||
<Italian>Tipo: Luce - Bianca Hi (30 minuti)<br />Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
<Chinese>類型: 光 - 超亮白色 (30分鐘)<br />發數: 1<br />使用於: 手</Chinese>
|
||||
<Chinesesimp>类型: 光 - 超亮白色 (30分钟)<br />发数: 1<br />使用于: 手</Chinesesimp>
|
||||
<Russian>Тип: Свет - Ярко-Белый (30 минут)<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiBlue_DisplayName">
|
||||
<English>Chemlight (Hi Blue)</English>
|
||||
@ -232,6 +251,7 @@
|
||||
<Japanese>ケミライト (高輝度 青)</Japanese>
|
||||
<Polish>Świetlik (jaskrawy niebieski)</Polish>
|
||||
<Italian>Luce chimica (Hi Blu)</Italian>
|
||||
<Russian>Химсвет (Ярко-Синий)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiBlue_DisplayNameShort">
|
||||
<English>Blue Hi Light</English>
|
||||
@ -239,6 +259,7 @@
|
||||
<Japanese>高輝度の青色</Japanese>
|
||||
<Polish>Jaskrawe niebieskie światło</Polish>
|
||||
<Italian>Luce Hi Blu</Italian>
|
||||
<Russian>Яркий Синий свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiBlue_DescriptionShort">
|
||||
<English>Type: Light - Blue Hi (30 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -246,6 +267,7 @@
|
||||
<Japanese>種類: 照明 - 高輝度 青 (30分間)<br />装填数: 1<br />次で使用: 携帯</Japanese>
|
||||
<Polish>Typ: Światło - jaskrawe niebieskie (30 minut)<br/>Pociski: 1<br/>Używany w: ręce</Polish>
|
||||
<Italian>Tipo: Luce - Hi blu (30 minuti)<br/>Rimanenti:1 <br/>Usata in: Mano</Italian>
|
||||
<Russian>Тип: Свет - Ярко-Синий (30 минут)<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiGreen_DisplayName">
|
||||
<English>Chemlight (Hi Green)</English>
|
||||
@ -253,6 +275,7 @@
|
||||
<Japanese>ケミライト (高輝度 緑)</Japanese>
|
||||
<Polish>Świetlik (jaskrawy zielony)</Polish>
|
||||
<Italian>Luce chimica (Hi Verde)</Italian>
|
||||
<Russian>Химсвет (Ярко-Зеленый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiGreen_DisplayNameShort">
|
||||
<English>Green Hi Light</English>
|
||||
@ -260,6 +283,7 @@
|
||||
<Japanese>高輝度の青色</Japanese>
|
||||
<Polish>Jaskrawe zielone światło</Polish>
|
||||
<Italian>Luce Hi Verde</Italian>
|
||||
<Russian>Яркий Зеленый свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_HiGreen_DescriptionShort">
|
||||
<English>Type: Light - Green Hi (30 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -267,6 +291,7 @@
|
||||
<Japanese>種類: 照明 - 高輝度 緑 (30分間)<br />装填数: 1<br />次で使用: 携帯</Japanese>
|
||||
<Polish>Typ: Światło - jaskrawe zielone (30 minut)<br/>Pociski: 1<br/>Używany w: ręce</Polish>
|
||||
<Italian>Tipo: Luce - Hi verde (30 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
<Russian>Тип: Свет - Ярко-Зеленый (30 минут)<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_UltraHiOrange_DisplayName">
|
||||
<English>Chemlight (Ultra-Hi Orange)</English>
|
||||
@ -274,6 +299,7 @@
|
||||
<Japanese>ケミライト (高輝度 オレンジ)</Japanese>
|
||||
<Polish>Świetlik (ultra-jaskrawy pomarańczowy)</Polish>
|
||||
<Italian>Luce chimica (Ultra-Hi Arancione)</Italian>
|
||||
<Russian>Химсвет (Ультраяркий Оранжевый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_UltraHiOrange_DisplayNameShort">
|
||||
<English>Orange Ultra-Hi Light</English>
|
||||
@ -281,6 +307,7 @@
|
||||
<Japanese>ウルトラ高輝度のオレンジ色</Japanese>
|
||||
<Polish>Ultra-jaskrawe pomarańczowe światło</Polish>
|
||||
<Italian>Luce Ultra-Hi Arancione</Italian>
|
||||
<Russian>Ультраяркий Оранжевый свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_UltraHiOrange_DescriptionShort">
|
||||
<English>Type: Light - Orange Ultra-Hi (5 minute)<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -288,6 +315,7 @@
|
||||
<Japanese>種類: 照明 - ウルトラ高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯</Japanese>
|
||||
<Polish>Typ: Światło - ultra-jaskrawe pomarańczowe (30 minut)<br/>Pociski: 1<br/>Używany w: ręce</Polish>
|
||||
<Italian>Tipo: Luce - Ultra-Hi (5 minuti)<br/>Rimanenti: 1<br/>Usata in: Mano</Italian>
|
||||
<Russian>Тип: Свет - Ультраяркий Оранжевый (5 минут)<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_IR_DisplayName">
|
||||
<English>Chemlight (IR)</English>
|
||||
@ -299,6 +327,7 @@
|
||||
<Italian>Luce chimica (IR)</Italian>
|
||||
<Chinese>螢光棒 (紅外線)</Chinese>
|
||||
<Chinesesimp>萤光棒 (红外线)</Chinesesimp>
|
||||
<Russian>Химсвет (Инфракрасный)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_IR_DisplayNameShort">
|
||||
<English>IR Light</English>
|
||||
@ -310,6 +339,7 @@
|
||||
<Italian>Luce IR</Italian>
|
||||
<Chinese>紅外線光</Chinese>
|
||||
<Chinesesimp>红外线光</Chinesesimp>
|
||||
<Russian>Инфракрасный свет</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_IR_DescriptionShort">
|
||||
<English>Type: Light - Infrared<br />Rounds: 1<br />Used in: Hand</English>
|
||||
@ -321,6 +351,7 @@
|
||||
<Italian>Tipo: Luce - Infrarossi<br />Usata in: Mano</Italian>
|
||||
<Chinese>類型: 光 - 紅外線<br />發數: 1<br />使用於: 手</Chinese>
|
||||
<Chinesesimp>类型: 光 - 红外线<br />发数: 1<br />使用于: 手</Chinesesimp>
|
||||
<Russian>Тип: Свет - Инфракрасный<br />1 штука<br />В руках</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Empty_DisplayName">
|
||||
<English>Chemlight Shield (Empty)</English>
|
||||
@ -332,6 +363,7 @@
|
||||
<Italian>Scudo Luce chimica (Vuoto)</Italian>
|
||||
<Chinese>螢光棒保護殼 (空)</Chinese>
|
||||
<Chinesesimp>萤光棒保护壳 (空)</Chinesesimp>
|
||||
<Russian>Контейнер для Химсвета (Пуст)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Empty_DescriptionShort">
|
||||
<English>Shield for chemlights. Combine with chemlight to prepare reading light.</English>
|
||||
@ -343,6 +375,7 @@
|
||||
<Italian>Scudo per luci chimiche. Combina con una luce chimica per una luce da lettura.</Italian>
|
||||
<Chinese>螢光棒的保護殼. 與螢光棒結合後可充當閱讀燈</Chinese>
|
||||
<Chinesesimp>萤光棒的保护壳. 与萤光棒结合后可充当阅读灯.</Chinesesimp>
|
||||
<Russian>Защитный контейнер для Химсвета. Объедините с Химсветом, чтобы подготовить Свет для чтения</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Green_DisplayName">
|
||||
<English>Chemlight Shield (Green)</English>
|
||||
@ -354,6 +387,7 @@
|
||||
<Italian>Scudo Luce Chimica (Verde)</Italian>
|
||||
<Chinese>螢光棒保護殼 (綠色)</Chinese>
|
||||
<Chinesesimp>萤光棒保护壳 (绿色)</Chinesesimp>
|
||||
<Russian>Контейнер для Химсвета (Зел)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Green_DescriptionShort">
|
||||
<English>Green reading light.</English>
|
||||
@ -365,6 +399,7 @@
|
||||
<Italian>Luce da lettura Verde.</Italian>
|
||||
<Chinese>綠色閱讀燈</Chinese>
|
||||
<Chinesesimp>绿色阅读灯。</Chinesesimp>
|
||||
<Russian>Ночник из Химсвета (Зеленый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Red_DisplayName">
|
||||
<English>Chemlight Shield (Red)</English>
|
||||
@ -376,6 +411,7 @@
|
||||
<Italian>Scudo Luce Chimica (Rossa)</Italian>
|
||||
<Chinese>螢光棒保護殼 (紅色)</Chinese>
|
||||
<Chinesesimp>萤光棒保护壳 (红色)</Chinesesimp>
|
||||
<Russian>Контейнер для Химсвета (Красн)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Red_DescriptionShort">
|
||||
<English>Red reading light.</English>
|
||||
@ -387,6 +423,7 @@
|
||||
<Italian>Luce da lettura Rossa.</Italian>
|
||||
<Chinese>紅色閱讀燈</Chinese>
|
||||
<Chinesesimp>红色阅读灯。</Chinesesimp>
|
||||
<Russian>Ночник из Химсвета (Красный)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Blue_DisplayName">
|
||||
<English>Chemlight Shield (Blue)</English>
|
||||
@ -398,6 +435,7 @@
|
||||
<Italian>Scudo Luce Chimica (Blu)</Italian>
|
||||
<Chinese>螢光棒保護殼 (藍色)</Chinese>
|
||||
<Chinesesimp>萤光棒保护壳 (蓝色)</Chinesesimp>
|
||||
<Russian>Контейнер для Химсвета (Син)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Blue_DescriptionShort">
|
||||
<English>Blue reading light.</English>
|
||||
@ -409,6 +447,7 @@
|
||||
<Italian>Luce da lettura Blu.</Italian>
|
||||
<Chinese>藍色閱讀燈</Chinese>
|
||||
<Chinesesimp>蓝色阅读灯。</Chinesesimp>
|
||||
<Russian>Ночник из Химсвета (Синий)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DisplayName">
|
||||
<English>Chemlight Shield (Yellow)</English>
|
||||
@ -420,6 +459,7 @@
|
||||
<Italian>Scudo Luce Chimica (Gialla)</Italian>
|
||||
<Chinese>螢光棒保護殼 (黃色)</Chinese>
|
||||
<Chinesesimp>萤光棒保护壳 (黄色)</Chinesesimp>
|
||||
<Russian>Контейнер для Химсвета (Желт)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DescriptionShort">
|
||||
<English>Yellow reading light.</English>
|
||||
@ -431,6 +471,7 @@
|
||||
<Italian>Luce da lettura Gialla.</Italian>
|
||||
<Chinese>黃色閱讀燈</Chinese>
|
||||
<Chinesesimp>黄色阅读灯。</Chinesesimp>
|
||||
<Russian>Ночник из Химсвета (Желтый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Orange_DisplayName">
|
||||
<English>Chemlight Shield (Orange)</English>
|
||||
@ -442,6 +483,7 @@
|
||||
<Italian>Scudo Luce Chimica (Arancione)</Italian>
|
||||
<Chinese>螢光棒保護殼 (橘色)</Chinese>
|
||||
<Chinesesimp>萤光棒保护壳 (橘色)</Chinesesimp>
|
||||
<Russian>Контейнер для Химсвета (Оранж)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_Orange_DescriptionShort">
|
||||
<English>Orange reading light.</English>
|
||||
@ -453,6 +495,7 @@
|
||||
<Italian>Luce da lettura Arancione.</Italian>
|
||||
<Chinese>橘色閱讀燈</Chinese>
|
||||
<Chinesesimp>橘色阅读灯。</Chinesesimp>
|
||||
<Russian>Ночник из Химсвета (Оранжевый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_White_DisplayName">
|
||||
<English>Chemlight Shield (White)</English>
|
||||
@ -464,6 +507,7 @@
|
||||
<Italian>Scudo Luce Chimica (Bianca)</Italian>
|
||||
<Chinese>螢光棒保護殼 (白色)</Chinese>
|
||||
<Chinesesimp>萤光棒保护壳 (白色)</Chinesesimp>
|
||||
<Russian>Контейнер для Химсвета (Белый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Chemlights_Shield_White_DescriptionShort">
|
||||
<English>White reading light.</English>
|
||||
@ -475,6 +519,7 @@
|
||||
<Italian>Luce da lettura Bianca.</Italian>
|
||||
<Chinese>白色閱讀燈</Chinese>
|
||||
<Chinesesimp>白色阅读灯。</Chinesesimp>
|
||||
<Russian>Ночник из Химсвета (Белый)</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -30,7 +30,7 @@ _target setVariable [QGVAR(owner), _unit, true];
|
||||
|
||||
// lock target object
|
||||
if (_lockTarget) then {
|
||||
private _canBeDisassembled = !([] isEqualTo getArray (_target call CBA_fnc_getObjectConfig >> "assembleInfo" >> "dissasembleTo"));
|
||||
private _canBeDisassembled = !([] isEqualTo getArray (_target call CBA_fnc_getObjectConfig >> "assembleInfo" >> "dissasembleTo")) && { !([false, true] select (_target getVariable [QEGVAR(csw,assemblyMode), 0])) };
|
||||
if (!isNull _unit) then {
|
||||
[QGVAR(lockVehicle), _target, _target] call CBA_fnc_targetEvent;
|
||||
if (_canBeDisassembled) then {
|
||||
|
@ -10,6 +10,7 @@
|
||||
<Chinesesimp>通用</Chinesesimp>
|
||||
<Korean>일반</Korean>
|
||||
<Polish>Ogólny</Polish>
|
||||
<Russian>Общий</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_ACETeam">
|
||||
<English>ACE-Team</English>
|
||||
@ -27,7 +28,7 @@
|
||||
<Chinese>ACE-製作團隊</Chinese>
|
||||
<Chinesesimp>ACE-制作团队</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Advanced">
|
||||
<Key ID="STR_ACE_Common_Advanced">
|
||||
<English>Advanced</English>
|
||||
<Russian>Усложненный</Russian>
|
||||
<Polish>Zaawansowany</Polish>
|
||||
@ -410,7 +411,7 @@
|
||||
<Chinese>未知的</Chinese>
|
||||
<Chinesesimp>未知的</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Normal">
|
||||
<Key ID="STR_ACE_Common_Normal">
|
||||
<English>Normal</English>
|
||||
<German>Normal</German>
|
||||
<Italian>Normale</Italian>
|
||||
@ -512,6 +513,7 @@
|
||||
<Japanese>PBO 検査の挙動</Japanese>
|
||||
<Korean>PBO 검사</Korean>
|
||||
<Polish>Sprawdź akcję PBO</Polish>
|
||||
<Russian>Действие при проверке PBO</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBOsCheckAll">
|
||||
<English>Check PBO All</English>
|
||||
@ -521,6 +523,7 @@
|
||||
<Japanese>PBO 全てを検査</Japanese>
|
||||
<Korean>모든 PBO 검사</Korean>
|
||||
<Polish>Sprawdź wszystkie PBO</Polish>
|
||||
<Russian>Проверять все PBO</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_CheckPBOsWhitelist">
|
||||
<English>Check PBO Whitelist</English>
|
||||
@ -530,6 +533,7 @@
|
||||
<Japanese>許可リスト内の PBO を検査</Japanese>
|
||||
<Korean>검사 제외 PBO</Korean>
|
||||
<Polish>Sprawdź białą listę PBO</Polish>
|
||||
<Russian>Белый список для проверки PBO</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
|
||||
<English>Feedback icons</English>
|
||||
@ -998,11 +1002,12 @@
|
||||
<Chinese>啟用</Chinese>
|
||||
<Chinesesimp>启用</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Always">
|
||||
<Key ID="STR_ACE_Common_Always">
|
||||
<English>Always</English>
|
||||
<Japanese>常に</Japanese>
|
||||
<Russian>Всегда</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Anywhere">
|
||||
<Key ID="STR_ACE_Common_Anywhere">
|
||||
<English>Anywhere</English>
|
||||
<Russian>Где угодно</Russian>
|
||||
<Polish>Wszędzie</Polish>
|
||||
@ -1016,7 +1021,7 @@
|
||||
<Japanese>どこでも</Japanese>
|
||||
<Korean>어디서나</Korean>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Basic">
|
||||
<Key ID="STR_ACE_Common_Basic">
|
||||
<English>Basic</English>
|
||||
<Russian>Базовый</Russian>
|
||||
<Polish>Podstawowy</Polish>
|
||||
@ -1031,7 +1036,7 @@
|
||||
<Korean>기본</Korean>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Vehicle">
|
||||
<English>Medical vehicles</English>
|
||||
<English>Medical Vehicles</English>
|
||||
<Russian>В медицинском транспорте</Russian>
|
||||
<Polish>Pojazdy medyczne</Polish>
|
||||
<Spanish>Vehiculos médicos</Spanish>
|
||||
@ -1079,10 +1084,12 @@
|
||||
<Key ID="STR_ACE_Common_Confirm">
|
||||
<English>Confirm</English>
|
||||
<Japanese>確認</Japanese>
|
||||
<Russian>Подтвердить</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Never">
|
||||
<English>Never</English>
|
||||
<Japanese>行わない</Japanese>
|
||||
<Russian>Никогда</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_VehiclesOnly">
|
||||
<English>Vehicles only</English>
|
||||
@ -1260,6 +1267,7 @@
|
||||
<Japanese>音楽の音量低下を許可</Japanese>
|
||||
<Italian>Permesso di abbassare la musica</Italian>
|
||||
<Polish>Zezwól na przyciszanie muzyki</Polish>
|
||||
<Russian>Разрешить приглушение музыки</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_AllowFadeMusicTooltip">
|
||||
<English>Allow ACE scripts to turn down the music.</English>
|
||||
@ -1270,6 +1278,7 @@
|
||||
<Japanese>ACE スプリントへ音量低下を許可します。</Japanese>
|
||||
<Italian>Permetti agli script di ACEdi abbassare la musica.</Italian>
|
||||
<Polish>Zezwól skrypty ACE na przyciszanie muzyki.</Polish>
|
||||
<Russian>Позволить скриптам ACE приглушать музыку</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_FlagBlack">
|
||||
<English>Flag (ACE - Black)</English>
|
||||
@ -1278,6 +1287,7 @@
|
||||
<Italian>Bandiera (ACE - Nera)</Italian>
|
||||
<Japanese>旗 (ACE - 黒)</Japanese>
|
||||
<Polish>Flaga (ACE - Czarna)</Polish>
|
||||
<Russian>Флаг (ACE - Черный)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_FlagWhite">
|
||||
<English>Flag (ACE - White)</English>
|
||||
@ -1286,6 +1296,39 @@
|
||||
<Italian>Bandiera (ACE - Bianca)</Italian>
|
||||
<Japanese>旗 (ACE - 白)</Japanese>
|
||||
<Polish>Flaga (ACE - Biała)</Polish>
|
||||
<Russian>Флаг (ACE - Белый)</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_playerOnly">
|
||||
<English>Players only</English>
|
||||
<Russian>Игроков</Russian>
|
||||
<Polish>Tylko dla graczy</Polish>
|
||||
<Spanish>Solo jugadores</Spanish>
|
||||
<German>Nur Spieler</German>
|
||||
<Czech>Pouze hráči</Czech>
|
||||
<Portuguese>Somente jogadores</Portuguese>
|
||||
<French>Joueur uniquement</French>
|
||||
<Hungarian>Csak játékosok</Hungarian>
|
||||
<Italian>Solo giocatori</Italian>
|
||||
<Japanese>プレイヤーのみ</Japanese>
|
||||
<Korean>플레이어만</Korean>
|
||||
<Chinesesimp>只限玩家</Chinesesimp>
|
||||
<Chinese>只限玩家</Chinese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_playersAndAI">
|
||||
<English>Players and AI</English>
|
||||
<Russian>Игроков и ботов</Russian>
|
||||
<Polish>Gracze oraz AI</Polish>
|
||||
<Spanish>Jugadores e IA</Spanish>
|
||||
<German>Spieler und KI</German>
|
||||
<Czech>Hráči a AI</Czech>
|
||||
<Portuguese>Jogadores e IA</Portuguese>
|
||||
<French>Joueurs et IA</French>
|
||||
<Hungarian>Játékosok és AI</Hungarian>
|
||||
<Italian>Giocatori ed IA</Italian>
|
||||
<Japanese>プレイヤーと AI</Japanese>
|
||||
<Korean>플레이어 및 인공지능</Korean>
|
||||
<Chinesesimp>玩家与AI</Chinesesimp>
|
||||
<Chinese>玩家與AI</Chinese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -11,14 +11,17 @@
|
||||
<German>ACE Durchzündung</German>
|
||||
<French>ACE Cook off</French>
|
||||
<Polish>ACE Samozapłon</Polish>
|
||||
<Russian>ACE Возгорание</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_enable_hd_name">
|
||||
<English>Damage handling and turret effects</English>
|
||||
<Japanese>損傷処理と砲塔の効果</Japanese>
|
||||
<Russian>Обработка урона и эффектов срыва башни</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_enable_hd_tooltip">
|
||||
<English>Changes damage handling for cook off and turret explosion effects</English>
|
||||
<Japanese>誘爆の損傷処理と砲塔の爆発効果を変更します。</Japanese>
|
||||
<Russian>Изменяет обработку урона для возгорания и эффекта срыва башни</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_generic_turret_wreck">
|
||||
<English>Wreck (Turret)</English>
|
||||
@ -45,6 +48,7 @@
|
||||
<Italian>Abilita esplosione cassa munizioni</Italian>
|
||||
<Chinese>開啟彈藥箱殉爆效果</Chinese>
|
||||
<Chinesesimp>开启弹药箱殉爆效果</Chinesesimp>
|
||||
<Russian>Разрешить возгорание ящиков с боеприпасами</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_enableBoxCookoff_tooltip">
|
||||
<English>Enables cooking off of ammo boxes.</English>
|
||||
@ -56,6 +60,7 @@
|
||||
<Italian>Abilita l'esplosione della cassa di munizioni. </Italian>
|
||||
<Chinese>開啟彈藥箱殉爆效果</Chinese>
|
||||
<Chinesesimp>开启弹药箱殉爆效果</Chinesesimp>
|
||||
<Russian>Активирует возгорание ящиков с боеприпасами</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_enableAmmoCookoff_name">
|
||||
<English>Enable Ammunition cook off</English>
|
||||
@ -67,6 +72,7 @@
|
||||
<Italian>Abilita Esplosione munizioni</Italian>
|
||||
<Chinese>開啟彈藥殉爆效果</Chinese>
|
||||
<Chinesesimp>开启弹药殉爆效果</Chinesesimp>
|
||||
<Russian>Разрешить детонацию боекомплекта</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_enableAmmoCookoff_tooltip">
|
||||
<English>Enables Ammunition cook off. Fires ammunition projectiles while vehicle is on fire and has ammunition.</English>
|
||||
@ -78,6 +84,7 @@
|
||||
<Chinese>開啟彈藥殉爆效果。當一台載有彈藥的載具起火時, 將會有殉爆的效果</Chinese>
|
||||
<Chinesesimp>开启弹药殉爆效果。当一台载有弹药的载具起火时, 将会有殉爆的效果。</Chinesesimp>
|
||||
<Korean>쿡오프 현상을 활성화 합니다. 이것은 탄약에 불이 붙어있는 동안 주변에 발사체를 발사합니다.</Korean>
|
||||
<Russian>Активирует возгорание и детонацию боекомплекта в горящей технике</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_ammoCookoffDuration_name">
|
||||
<English>Ammunition cook off duration</English>
|
||||
@ -89,6 +96,7 @@
|
||||
<Chinese>彈藥殉爆效果持續時間</Chinese>
|
||||
<Chinesesimp>弹药殉爆效果持续时间</Chinesesimp>
|
||||
<Korean>쿡오프 지속 시간</Korean>
|
||||
<Russian>Длительность возгорания боеприпасов</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_ammoCookoffDuration_tooltip">
|
||||
<English>Multiplier for how long cook off lasts [Setting to 0 will disable ammo cookoff]</English>
|
||||
@ -100,6 +108,7 @@
|
||||
<Chinese>設定彈藥殉爆效果會持續多久時間 [輸入0來關閉殉爆效果]</Chinese>
|
||||
<Chinesesimp>设定弹药殉爆效果会持续多久时间 [输入0来关闭殉爆效果]</Chinesesimp>
|
||||
<Korean>쿡오프 지속 시간의 배수 [0 이면 비활성]</Korean>
|
||||
<Russian>Множитель длительности возгорания [0 - отключает возгорание боеприпасов]</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_probabilityCoef_name">
|
||||
<English>Cook-off probability coefficient</English>
|
||||
@ -110,6 +119,7 @@
|
||||
<Chinesesimp>殉爆发生机率系数</Chinesesimp>
|
||||
<French>Coefficient de probabilité du cook off</French>
|
||||
<Polish>Współczynnik prawdopodobieństwa samozapłonu</Polish>
|
||||
<Russian>Коэффициент вероятности возгорания</Russian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_probabilityCoef_tooltip">
|
||||
<English>Multiplier for cook-off probability. Higher value results in higher cook-off probability</English>
|
||||
@ -120,6 +130,7 @@
|
||||
<Chinesesimp>调整殉爆发生机率系数。值越高代表越容易发生殉爆。</Chinesesimp>
|
||||
<French>Multiplicateur pour la probabilité du cook off. Plus la valeur est élevée, plus la probabilité de cook off est haute.</French>
|
||||
<Polish>Mnożnik prawdopodobieństwa samozapłonu. Większa wartość oznacza większe prawdopodobieństwo samozapłonu</Polish>
|
||||
<Russian>Множитель коэффициента вероятности возгорания. Чем выше значение, тем выше вероятность.</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
1
addons/csw/$PBOPREFIX$
Normal file
1
addons/csw/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\csw
|
15
addons/csw/CfgEventHandlers.hpp
Normal file
15
addons/csw/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,15 @@
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE( call COMPILE_FILE(XEH_postInit) );
|
||||
};
|
||||
};
|
81
addons/csw/CfgMagazineGroups.hpp
Normal file
81
addons/csw/CfgMagazineGroups.hpp
Normal file
@ -0,0 +1,81 @@
|
||||
class GVAR(groups) {
|
||||
// A3 .50 BMG (12.7x99mm)
|
||||
class GVAR(100Rnd_127x99_mag) {
|
||||
500Rnd_127x99_mag = 1;
|
||||
200Rnd_127x99_mag = 1;
|
||||
100Rnd_127x99_mag = 1;
|
||||
rhs_mag_100rnd_127x99_mag = 1;
|
||||
rhs_mag_200rnd_127x99_mag = 1;
|
||||
CUP_100Rnd_127x99_M = 1;
|
||||
};
|
||||
class GVAR(100Rnd_127x99_mag_red) {
|
||||
500Rnd_127x99_mag_Tracer_Red = 1;
|
||||
200Rnd_127x99_mag_Tracer_Red = 1;
|
||||
100Rnd_127x99_mag_Tracer_Red = 1;
|
||||
rhs_mag_100rnd_127x99_mag_Tracer_Red = 1;
|
||||
rhs_mag_200rnd_127x99_mag_Tracer_Red = 1;
|
||||
CUP_100Rnd_TE4_Red_Tracer_127x99_M = 1;
|
||||
};
|
||||
class GVAR(100Rnd_127x99_mag_green) {
|
||||
500Rnd_127x99_mag_Tracer_Green = 1;
|
||||
200Rnd_127x99_mag_Tracer_Green = 1;
|
||||
100Rnd_127x99_mag_Tracer_Green = 1;
|
||||
rhs_mag_100rnd_127x99_mag_Tracer_Green = 1;
|
||||
CUP_100Rnd_TE4_Green_Tracer_127x99_M = 1;
|
||||
};
|
||||
class GVAR(100Rnd_127x99_mag_yellow) {
|
||||
500Rnd_127x99_mag_Tracer_Yellow = 1;
|
||||
200Rnd_127x99_mag_Tracer_Yellow = 1;
|
||||
100Rnd_127x99_mag_Tracer_Yellow = 1;
|
||||
rhs_mag_100rnd_127x99_mag_Tracer_Yellow = 1;
|
||||
CUP_100Rnd_TE4_Yellow_Tracer_127x99_M = 1;
|
||||
};
|
||||
|
||||
// Soviet HMG (12.7x108mm)
|
||||
class GVAR(50Rnd_127x108_mag) {
|
||||
rhs_mag_127x108mm_50 = 1;
|
||||
rhs_mag_127x108mm_100 = 1;
|
||||
rhs_mag_127x108mm_150 = 1;
|
||||
CUP_150Rnd_127x108_KORD_M = 1;
|
||||
CUP_50Rnd_127x108_KORD_M = 1;
|
||||
CUP_50Rnd_TE3_LRT5_127x107_DSHKM_M = 1; // not sure why cup uses 107 for the DSHKM?
|
||||
CUP_150Rnd_TE3_LRT5_127x107_DSHKM_M = 1;
|
||||
};
|
||||
|
||||
// A3 20mm GMG
|
||||
class GVAR(20Rnd_20mm_G_belt) {
|
||||
40Rnd_20mm_G_belt = 1;
|
||||
200Rnd_20mm_G_belt = 1;
|
||||
};
|
||||
|
||||
// A3 82mm mortar shells (Allows the normal mk6 to be reloaded from the mk6 ammo handling mags)
|
||||
class ACE_1Rnd_82mm_Mo_HE {
|
||||
ACE_1Rnd_82mm_Mo_HE = 1;
|
||||
8Rnd_82mm_Mo_shells = 1;
|
||||
};
|
||||
class ACE_1Rnd_82mm_Mo_Smoke {
|
||||
ACE_1Rnd_82mm_Mo_Smoke = 1;
|
||||
8Rnd_82mm_Mo_Smoke_white = 1;
|
||||
};
|
||||
class ACE_1Rnd_82mm_Mo_Illum {
|
||||
ACE_1Rnd_82mm_Mo_Illum = 1;
|
||||
8Rnd_82mm_Mo_Flare_white = 1;
|
||||
};
|
||||
class ACE_1Rnd_82mm_Mo_HE_Guided {
|
||||
ACE_1Rnd_82mm_Mo_HE_Guided = 1;
|
||||
8Rnd_82mm_Mo_guided = 1;
|
||||
};
|
||||
class ACE_1Rnd_82mm_Mo_HE_LaserGuided {
|
||||
ACE_1Rnd_82mm_Mo_HE_LaserGuided = 1;
|
||||
8Rnd_82mm_Mo_LG = 1;
|
||||
};
|
||||
|
||||
// A3 Titans (Spike) - just use handheld magazines
|
||||
class Titan_AT {
|
||||
1Rnd_GAT_missiles = 1;
|
||||
};
|
||||
class Titan_AA {
|
||||
1Rnd_GAA_missiles = 1;
|
||||
};
|
||||
};
|
||||
|
65
addons/csw/CfgMagazines.hpp
Normal file
65
addons/csw/CfgMagazines.hpp
Normal file
@ -0,0 +1,65 @@
|
||||
class CfgMagazines {
|
||||
class 100Rnd_127x99_mag;
|
||||
class GVAR(100Rnd_127x99_mag): 100Rnd_127x99_mag {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayName = CSTRING(127x99_displayName);
|
||||
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
|
||||
picture = QPATHTOF(UI\ammoBox_50bmg_ca.paa);
|
||||
type = 256;
|
||||
mass = 96;
|
||||
ACE_isBelt = 1;
|
||||
};
|
||||
class 100Rnd_127x99_mag_Tracer_Red;
|
||||
class GVAR(100Rnd_127x99_mag_red): 100Rnd_127x99_mag_Tracer_Red {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayName = CSTRING(127x99_red_displayName);
|
||||
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
|
||||
picture = QPATHTOF(UI\ammoBox_50bmg_ca.paa);
|
||||
type = 256;
|
||||
mass = 96;
|
||||
ACE_isBelt = 1;
|
||||
};
|
||||
class 100Rnd_127x99_mag_Tracer_Green;
|
||||
class GVAR(100Rnd_127x99_mag_green): 100Rnd_127x99_mag_Tracer_Green {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayName = CSTRING(127x99_green_displayName);
|
||||
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
|
||||
picture = QPATHTOF(UI\ammoBox_50bmg_ca.paa);
|
||||
type = 256;
|
||||
mass = 96;
|
||||
ACE_isBelt = 1;
|
||||
};
|
||||
class 100Rnd_127x99_mag_Tracer_Yellow;
|
||||
class GVAR(100Rnd_127x99_mag_yellow): 100Rnd_127x99_mag_Tracer_Yellow {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayName = CSTRING(127x99_yellow_displayName);
|
||||
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
|
||||
picture = QPATHTOF(UI\ammoBox_50bmg_ca.paa);
|
||||
type = 256;
|
||||
mass = 96;
|
||||
ACE_isBelt = 1;
|
||||
};
|
||||
|
||||
class 50Rnd_127x108_Ball;
|
||||
class GVAR(50Rnd_127x108_mag): 50Rnd_127x108_Ball {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayName = CSTRING(127x108_displayName);
|
||||
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
|
||||
picture = QPATHTOF(UI\ammoBox_50bmg_ca.paa);
|
||||
type = 256;
|
||||
mass = 50;
|
||||
ACE_isBelt = 1;
|
||||
};
|
||||
|
||||
class 40Rnd_20mm_G_belt;
|
||||
class GVAR(20Rnd_20mm_G_belt): 40Rnd_20mm_G_belt {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayName = CSTRING(GMGBelt_displayName);
|
||||
model = "\A3\Structures_F_EPB\Items\Military\Ammobox_rounds_F.p3d";
|
||||
picture = QPATHTOF(UI\ammoBox_50bmg_ca.paa);
|
||||
type = 256;
|
||||
count = 20;
|
||||
mass = 96;
|
||||
ACE_isBelt = 1;
|
||||
};
|
||||
};
|
217
addons/csw/CfgVehicles.hpp
Normal file
217
addons/csw/CfgVehicles.hpp
Normal file
@ -0,0 +1,217 @@
|
||||
#define ENABLE_CSW_ATTRIBUTE class Attributes { \
|
||||
class GVAR(enableCSW) { \
|
||||
property = QGVAR(enableCSW); \
|
||||
control = "Checkbox"; \
|
||||
displayName = CSTRING(eden_enableCSW); \
|
||||
tooltip = CSTRING(eden_enableCSW_tooltip); \
|
||||
expression = QUOTE(_this setVariable[ARR_3(QQGVAR(enableCSW), _value, true)];); \
|
||||
typeName = "BOOL"; \
|
||||
condition = "objectVehicle"; \
|
||||
defaultValue = true; \
|
||||
}; \
|
||||
}
|
||||
|
||||
|
||||
class CfgVehicles {
|
||||
class Man;
|
||||
class CAManBase: Man {
|
||||
class ACE_SelfActions {
|
||||
class GVAR(deploy) {
|
||||
displayName = CSTRING(PlaceTripod_displayName);
|
||||
condition = QUOTE(call FUNC(assemble_canDeployTripod));
|
||||
statement = QUOTE(call FUNC(assemble_deployTripod));
|
||||
exceptions[] = {};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// Tripods:
|
||||
class ThingX;
|
||||
class GVAR(baseTripod): ThingX {
|
||||
side = 3;
|
||||
typicalCargo[] = {};
|
||||
armor = 500000;
|
||||
mapSize = 0.4;
|
||||
nameSound = "Bunker";
|
||||
accuracy = 1000;
|
||||
destrType = "DestructDefault";
|
||||
|
||||
ace_dragging_canDrag = 1;
|
||||
ace_dragging_dragPosition[] = {0, 2, 0};
|
||||
ace_dragging_canCarry = 1;
|
||||
ace_dragging_carryPosition[] = {0, 2, 0};
|
||||
|
||||
class ACE_Actions {
|
||||
class ACE_MainActions {
|
||||
displayName = CSTRING(Tripod_displayName);
|
||||
selection = "";
|
||||
distance = 2.5;
|
||||
condition = "true";
|
||||
class GVAR(pickUp) {
|
||||
displayName = CSTRING(Pickup_displayName);
|
||||
condition = QUOTE(call FUNC(assemble_canPickupTripod));
|
||||
statement = QUOTE(call FUNC(assemble_pickupTripod));
|
||||
};
|
||||
class GVAR(mountWeapon) {
|
||||
displayName = CSTRING(MountWeapon_displayName);
|
||||
condition = QUOTE(call FUNC(assemble_canDeployWeapon));
|
||||
statement = QUOTE(call FUNC(assemble_deployWeapon));
|
||||
modifierFunction = QUOTE(call FUNC(assemble_deployWeaponModifier));
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class GVAR(m3Tripod): GVAR(baseTripod) {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_m3_tripod.p3d);
|
||||
displayName = CSTRING(Tripod_displayName);
|
||||
class ADDON {
|
||||
disassembleTo = QGVAR(m3CarryTripod);
|
||||
};
|
||||
};
|
||||
class GVAR(m3TripodLow): GVAR(m3Tripod) {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_m3_tripod.p3d);
|
||||
displayName = CSTRING(Tripod_displayName);
|
||||
class ADDON {
|
||||
disassembleTo = QGVAR(m3CarryTripodLow);
|
||||
};
|
||||
};
|
||||
class GVAR(mortarBaseplate): GVAR(m3Tripod) {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_mortarBaseplate.p3d);
|
||||
displayName = CSTRING(mortarBaseplate_displayName);
|
||||
class ADDON {
|
||||
disassembleTo = QGVAR(carryMortarBaseplate);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// Static Weapons:
|
||||
class LandVehicle;
|
||||
class StaticWeapon: LandVehicle {
|
||||
class ACE_Actions {
|
||||
class ACE_MainActions {
|
||||
class GVAR(getIn) {
|
||||
displayName = CSTRING(GetIn_displayName);
|
||||
condition = QUOTE(call FUNC(canGetIn));
|
||||
statement = QUOTE(call FUNC(getIn));
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class StaticMGWeapon: StaticWeapon {};
|
||||
|
||||
class HMG_01_base_F: StaticMGWeapon {
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
proxyWeapon = QGVAR(HMG_Static);
|
||||
magazineLocation = "_target selectionPosition 'magazine'";
|
||||
disassembleWeapon = QGVAR(staticHMGCarry); // carry weapon [CfgWeapons]
|
||||
disassembleTurret = QGVAR(m3TripodLow); // turret [CfgVehicles]
|
||||
desiredAmmo = 100;
|
||||
ammoLoadTime = 7;
|
||||
ammoUnloadTime = 5;
|
||||
};
|
||||
};
|
||||
|
||||
class HMG_01_high_base_F: HMG_01_base_F {
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
proxyWeapon = QGVAR(HMG_Static);
|
||||
magazineLocation = "_target selectionPosition 'magazine'";
|
||||
disassembleWeapon = QGVAR(staticHMGCarry); // carry weapon [CfgWeapons]
|
||||
disassembleTurret = QGVAR(m3Tripod); // turret [CfgVehicles]
|
||||
desiredAmmo = 100;
|
||||
ammoLoadTime = 7;
|
||||
ammoUnloadTime = 5;
|
||||
};
|
||||
};
|
||||
|
||||
class HMG_01_A_base_F: HMG_01_base_F {
|
||||
class ADDON {
|
||||
enabled = 0;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class GMG_TriPod;
|
||||
class GMG_01_base_F: GMG_TriPod {
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
proxyWeapon = QGVAR(GMG_20mm); // Weapon Proxy (Shorter Reload Time) [CfgWeapons]
|
||||
magazineLocation = "_target selectionPosition 'magazine'";
|
||||
disassembleWeapon = QGVAR(staticGMGCarry); // carry weapon [CfgWeapons]
|
||||
disassembleTurret = QGVAR(m3TripodLow); // turret [CfgVehicles]
|
||||
desiredAmmo = 40;
|
||||
ammoLoadTime = 7;
|
||||
ammoUnloadTime = 5;
|
||||
};
|
||||
};
|
||||
|
||||
class GMG_01_high_base_F: GMG_01_base_F {
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
proxyWeapon = QGVAR(GMG_20mm); // Weapon Proxy (Shorter Reload Time) [CfgWeapons]
|
||||
magazineLocation = "_target selectionPosition 'magazine'";
|
||||
disassembleWeapon = QGVAR(staticGMGCarry); // carry weapon [CfgWeapons]
|
||||
disassembleTurret = QGVAR(m3Tripod); // turret [CfgVehicles]
|
||||
desiredAmmo = 40;
|
||||
ammoLoadTime = 7;
|
||||
ammoUnloadTime = 5;
|
||||
};
|
||||
};
|
||||
|
||||
class GMG_01_A_base_F: GMG_01_base_F {
|
||||
class ADDON {
|
||||
enabled = 0;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class AT_01_base_F: StaticMGWeapon {
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
proxyWeapon = QGVAR(Titan_AT_Static);
|
||||
magazineLocation = "_target selectionPosition 'magazine'";
|
||||
disassembleWeapon = QGVAR(staticATCarry); // carry weapon [CfgWeapons]
|
||||
disassembleTurret = QGVAR(m3Tripod); // turret [CfgVehicles]
|
||||
desiredAmmo = 40;
|
||||
ammoLoadTime = 15; // 4 rounds per minute
|
||||
ammoUnloadTime = 10;
|
||||
};
|
||||
};
|
||||
|
||||
class AA_01_base_F: StaticMGWeapon {
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
proxyWeapon = QGVAR(Titan_AA_Static); // Weapon Proxy (Shorter Reload Time) [CfgWeapons]
|
||||
magazineLocation = "_target selectionPosition 'magazine'";
|
||||
disassembleWeapon = QGVAR(staticAACarry); // carry weapon [CfgWeapons]
|
||||
disassembleTurret = QGVAR(m3Tripod); // turret [CfgVehicles]
|
||||
desiredAmmo = 40;
|
||||
ammoLoadTime = 15; // 4 rounds per minute
|
||||
ammoUnloadTime = 10;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class StaticMortar: StaticWeapon {};
|
||||
class Mortar_01_base_F: StaticMortar {
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
magazineLocation = "";
|
||||
disassembleWeapon = QGVAR(staticMortarCarry); // carry weapon [CfgWeapons]
|
||||
disassembleTurret = QGVAR(mortarBaseplate); // turret [CfgVehicles]
|
||||
desiredAmmo = 1;
|
||||
ammoLoadTime = 3;
|
||||
ammoUnloadTime = 3;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
221
addons/csw/CfgWeapons.hpp
Normal file
221
addons/csw/CfgWeapons.hpp
Normal file
@ -0,0 +1,221 @@
|
||||
class CfgWeapons {
|
||||
class Launcher;
|
||||
class Launcher_Base_F: Launcher {
|
||||
class WeaponSlotsInfo;
|
||||
};
|
||||
|
||||
|
||||
// Tripods:
|
||||
class GVAR(m3CarryTripod): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "mount";
|
||||
deployTime = 4;
|
||||
pickupTime = 4;
|
||||
deploy = QGVAR(m3Tripod);
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 440;
|
||||
};
|
||||
displayName = CSTRING(TripodFolded_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\Tripod_Icon.paa);
|
||||
};
|
||||
class GVAR(m3CarryTripodLow): GVAR(m3CarryTripod) {
|
||||
class ADDON: ADDON {
|
||||
deploy = QGVAR(m3TripodLow);
|
||||
};
|
||||
displayName = CSTRING(TripodLowFolded_displayName);
|
||||
};
|
||||
class GVAR(carryMortarBaseplate): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "mount";
|
||||
deployTime = 2;
|
||||
pickupTime = 2;
|
||||
deploy = QGVAR(mortarBaseplate);
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 290; // M3A1 baseblate weight
|
||||
};
|
||||
displayName = CSTRING(mortarBaseplate_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\Tripod_Icon.paa); // todo
|
||||
};
|
||||
|
||||
|
||||
// Weapons:
|
||||
class GVAR(staticATCarry): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "weapon";
|
||||
deployTime = 15;
|
||||
pickupTime = 20;
|
||||
class assembleTo {
|
||||
GVAR(m3Tripod) = "B_static_AT_F";
|
||||
};
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 320; // 9M113 Konkurs Weight
|
||||
};
|
||||
displayName = CSTRING(StaticATBag_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\StaticAT_Icon.paa);
|
||||
};
|
||||
|
||||
class GVAR(staticAACarry): GVAR(staticATCarry) {
|
||||
class ADDON {
|
||||
type = "weapon";
|
||||
deployTime = 15;
|
||||
pickupTime = 20;
|
||||
class assembleTo {
|
||||
GVAR(m3Tripod) = "B_static_AA_F";
|
||||
};
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 320;
|
||||
};
|
||||
displayName = CSTRING(StaticAABag_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\StaticAT_Icon.paa);
|
||||
};
|
||||
|
||||
class GVAR(staticHMGCarry): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "weapon";
|
||||
deployTime = 7;
|
||||
pickupTime = 10;
|
||||
class assembleTo {
|
||||
GVAR(m3Tripod) = "B_HMG_01_high_F";
|
||||
GVAR(m3TripodLow) = "B_HMG_01_F";
|
||||
};
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 840;
|
||||
};
|
||||
displayName = CSTRING(StaticHMGBag_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\StaticHGMG_Icon.paa);
|
||||
};
|
||||
|
||||
class GVAR(staticGMGCarry): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "weapon";
|
||||
deployTime = 5;
|
||||
pickupTime = 6;
|
||||
class assembleTo {
|
||||
GVAR(m3Tripod) = "B_GMG_01_high_F";
|
||||
GVAR(m3TripodLow) = "B_GMG_01_F";
|
||||
};
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 780;
|
||||
};
|
||||
displayName = CSTRING(StaticGMGBag_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\StaticHGMG_Icon.paa);
|
||||
};
|
||||
|
||||
|
||||
class GVAR(staticMortarCarry): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "weapon";
|
||||
deployTime = 20;
|
||||
pickupTime = 25;
|
||||
class assembleTo {
|
||||
GVAR(mortarBaseplate) = "B_Mortar_01_F";
|
||||
};
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 620; // M252 Mortar Weight
|
||||
};
|
||||
displayName = CSTRING(StaticMortarBag_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\StaticHGMG_Icon.paa);
|
||||
};
|
||||
|
||||
// Proxy Weapons
|
||||
|
||||
class HMG_static;
|
||||
class GVAR(HMG_Static): HMG_Static {
|
||||
magazineReloadTime = 0.5;
|
||||
};
|
||||
|
||||
class GMG_20mm;
|
||||
class GVAR(GMG_20mm): GMG_20mm {
|
||||
magazineReloadTime = 0.5;
|
||||
};
|
||||
|
||||
class missiles_titan_static;
|
||||
class EGVAR(javelin,Titan_Static): missiles_titan_static {}; // if ace_javelin does not exist, this will just inherit from the base weapon
|
||||
class GVAR(Titan_AT_Static): EGVAR(javelin,Titan_Static) {
|
||||
EGVAR(javelin,enabled) = 1; // needs to be explicitly enabled
|
||||
magazineReloadTime = 0.5;
|
||||
};
|
||||
class GVAR(Titan_AA_Static) : missiles_titan_static {
|
||||
magazineReloadTime = 0.5;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
class GVAR(staticAutoHMGCarry): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "weapon";
|
||||
deployTime = 4;
|
||||
pickupTime = 4;
|
||||
class assembleTo {
|
||||
GVAR(m3Tripod) = GVAR(staticAutoHMGWeapon);
|
||||
};
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 840;
|
||||
};
|
||||
|
||||
displayName = CSTRING(StaticAutoHMGBag_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\StaticHGMG_Icon.paa);
|
||||
};
|
||||
|
||||
|
||||
class GVAR(staticAutoGMGCarry): Launcher_Base_F {
|
||||
class GVAR(options) {
|
||||
assembleTo = QGVAR(staticAutoGMGWeapon);
|
||||
baseTripod = QGVAR(m3Tripod);
|
||||
type = "weapon";
|
||||
};
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 780;
|
||||
};
|
||||
|
||||
displayName = CSTRING(StaticAutoGMGBag_displayName);
|
||||
author = ECSTRING(common,ACETeam);
|
||||
scope = 2;
|
||||
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
|
||||
modes[] = {};
|
||||
picture = QPATHTOF(UI\StaticHGMG_Icon.paa);
|
||||
};
|
||||
|
||||
*/
|
||||
};
|
||||
|
12
addons/csw/README.md
Normal file
12
addons/csw/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
ace_csw
|
||||
===============
|
||||
|
||||
Crew Served Weapons - Static weapons that are served by multiple people
|
||||
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [TCVM](https://github.com/TheCandianVendingMachine)
|
||||
|
BIN
addons/csw/UI/StaticAT_Icon.paa
Normal file
BIN
addons/csw/UI/StaticAT_Icon.paa
Normal file
Binary file not shown.
BIN
addons/csw/UI/StaticHGMG_Icon.paa
Normal file
BIN
addons/csw/UI/StaticHGMG_Icon.paa
Normal file
Binary file not shown.
BIN
addons/csw/UI/Tripod_Icon.paa
Normal file
BIN
addons/csw/UI/Tripod_Icon.paa
Normal file
Binary file not shown.
BIN
addons/csw/UI/ammoBox_50bmg_ca.paa
Normal file
BIN
addons/csw/UI/ammoBox_50bmg_ca.paa
Normal file
Binary file not shown.
32
addons/csw/XEH_PREP.hpp
Normal file
32
addons/csw/XEH_PREP.hpp
Normal file
@ -0,0 +1,32 @@
|
||||
TRACE_1("",QUOTE(ADDON));
|
||||
|
||||
PREP(ai_handleFired);
|
||||
|
||||
PREP(assemble_canDeployTripod);
|
||||
PREP(assemble_canDeployWeapon);
|
||||
PREP(assemble_canPickupTripod);
|
||||
PREP(assemble_canPickupWeapon);
|
||||
PREP(assemble_deployTripod);
|
||||
PREP(assemble_deployWeapon);
|
||||
PREP(assemble_deployWeaponModifier);
|
||||
PREP(assemble_pickupTripod);
|
||||
PREP(assemble_pickupWeapon);
|
||||
|
||||
PREP(canGetIn);
|
||||
PREP(getIn);
|
||||
|
||||
PREP(proxyWeapon);
|
||||
|
||||
PREP(reload_actionsLoad);
|
||||
PREP(reload_actionsUnload);
|
||||
PREP(reload_canLoadMagazine);
|
||||
PREP(reload_canUnloadMagazine);
|
||||
PREP(reload_getLoadableMagazines);
|
||||
PREP(reload_getVehicleMagazine);
|
||||
PREP(reload_handleAddTurretMag);
|
||||
PREP(reload_handleRemoveTurretMag);
|
||||
PREP(reload_handleReturnAmmo);
|
||||
PREP(reload_loadMagazine);
|
||||
|
||||
PREP(staticWeaponInit);
|
||||
PREP(staticWeaponInit_unloadExtraMags);
|
26
addons/csw/XEH_postInit.sqf
Normal file
26
addons/csw/XEH_postInit.sqf
Normal file
@ -0,0 +1,26 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
GVAR(vehicleMagCache) = call CBA_fnc_createNamespace;
|
||||
|
||||
["ace_settingsInitialized", {
|
||||
TRACE_3("settingsInit",GVAR(defaultAssemblyMode),GVAR(handleExtraMagazines),GVAR(ammoHandling));
|
||||
["StaticWeapon", "init", LINKFUNC(staticWeaponInit), true, [], true] call CBA_fnc_addClassEventHandler;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
|
||||
// Event handlers:
|
||||
[QGVAR(disableVanillaAssembly), {
|
||||
params ["_staticWeapon"];
|
||||
TRACE_1("disableVanillaAssembly eh",_staticWeapon);
|
||||
_staticWeapon enableWeaponDisassembly false;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(addTurretMag), LINKFUNC(reload_handleAddTurretMag)] call CBA_fnc_addEventHandler;
|
||||
[QGVAR(removeTurretMag), LINKFUNC(reload_handleRemoveTurretMag)] call CBA_fnc_addEventHandler;
|
||||
[QGVAR(returnAmmo), LINKFUNC(reload_handleReturnAmmo)] call CBA_fnc_addEventHandler;
|
||||
|
||||
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
call compile preprocessFileLineNumbers QPATHTOF(dev\checkStaticWeapons.sqf);
|
||||
#endif
|
14
addons/csw/XEH_preInit.sqf
Normal file
14
addons/csw/XEH_preInit.sqf
Normal file
@ -0,0 +1,14 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP_RECOMPILE_START;
|
||||
#include "XEH_PREP.hpp"
|
||||
PREP_RECOMPILE_END;
|
||||
|
||||
#include "initSettings.sqf"
|
||||
|
||||
GVAR(initializedStaticTypes) = [];
|
||||
|
||||
ADDON = true;
|
||||
|
3
addons/csw/XEH_preStart.sqf
Normal file
3
addons/csw/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
22
addons/csw/config.cpp
Normal file
22
addons/csw/config.cpp
Normal file
@ -0,0 +1,22 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
name = COMPONENT_NAME;
|
||||
units[] = {};
|
||||
weapons[] = {"ace_csw_carryTripod", "ace_csw_staticATWeapon"};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_interaction"};
|
||||
author = ECSTRING(common,ACETeam);
|
||||
authors[] = {"TCVM"};
|
||||
url = ECSTRING(main,URL);
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgMagazines.hpp"
|
||||
#include "CfgMagazineGroups.hpp"
|
||||
|
53
addons/csw/cswDesign.txt
Normal file
53
addons/csw/cswDesign.txt
Normal file
@ -0,0 +1,53 @@
|
||||
Settings:
|
||||
|
||||
defaultBehaviour:
|
||||
Normal - Untouched [full mags, normal backpack disassemble]
|
||||
Advanced - [Realistic mags, side unloading]
|
||||
handleExtraMagazines
|
||||
Extra magazines on ground
|
||||
Ignore extra magazines
|
||||
|
||||
Vehicle:
|
||||
3den attribute controls if [useSetting, normal or advanced]
|
||||
|
||||
configs:
|
||||
|
||||
CfgWeapons:
|
||||
class GVAR(m3CarryTripod): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "mount";
|
||||
deployTime = 3;
|
||||
pickupTime = 3;
|
||||
deploy = QGVAR(m3Tripod);
|
||||
};
|
||||
|
||||
class GVAR(staticATCarry): Launcher_Base_F {
|
||||
class ADDON {
|
||||
type = "weapon";
|
||||
deployTime = 8;
|
||||
pickupTime = 15;
|
||||
class assembleTo {
|
||||
tripodCfgVehicle = staticCfgVehicle;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
CfgVehicles:
|
||||
class GVAR(m3Tripod): // Tripod Example
|
||||
class ADDON {
|
||||
disassembleTo = QGVAR(m3CarryTripod);
|
||||
|
||||
|
||||
class Mortar_01_base_F: // Static Weapon Example
|
||||
class ADDON {
|
||||
enabled = 1;
|
||||
magazineLocation = "";
|
||||
disassembleWeapon = ""; // secondary weapon classname
|
||||
disassembleTurret = ""; // CfgVehicle
|
||||
desiredAmmo = 100; //
|
||||
ammoLoadTime = 5;
|
||||
ammoUnloadTime = 5;
|
||||
|
||||
|
51
addons/csw/data/model.cfg
Normal file
51
addons/csw/data/model.cfg
Normal file
@ -0,0 +1,51 @@
|
||||
class CfgSkeletons {
|
||||
class Default {
|
||||
isDiscrete = 1;
|
||||
skeletonInherit = "";
|
||||
skeletonBones[] = {};
|
||||
};
|
||||
class ACE_CSW_Tripod_Skeleton: Default {};
|
||||
class ACE_CSW_M3_Tripod_Skeleton: Default {};
|
||||
// class ACE_CSW_FoldedTripod_Skeleton: Default {};
|
||||
// class ACE_CSW_ammoBox_Skeleton: Default {};
|
||||
class ACE_CSW_WeaponBag_Skeleton: Default {};
|
||||
class ACE_CSW_mortarBaseplate_Skeleton: Default {};
|
||||
};
|
||||
class CfgModels {
|
||||
class Default {
|
||||
sectionsInherit = "";
|
||||
sections[] = {};
|
||||
skeletonName = "";
|
||||
};
|
||||
class ACE_CSW_Tripod : Default {
|
||||
sectionsInherit = "";
|
||||
sections[] = {};
|
||||
skeletonName = "ACE_CSW_Tripod_Skeleton";
|
||||
};
|
||||
class ACE_CSW_M3_Tripod : Default {
|
||||
sectionsInherit = "";
|
||||
sections[] = {};
|
||||
skeletonName = "ACE_CSW_M3_Tripod_Skeleton";
|
||||
};
|
||||
/* class ACE_CSW_FoldedTripod: Default {
|
||||
sectionsInherit = "";
|
||||
sections[] = {};
|
||||
skeletonName = "ACE_CSW_FoldedTripod_Skeleton";
|
||||
};
|
||||
class ACE_CSW_ammoBox: Default {
|
||||
sectionsInherit = "";
|
||||
sections[] = {};
|
||||
skeletonName = "ACE_CSW_ammoBox_Skeleton";
|
||||
}; */
|
||||
class ACE_CSW_Bag: Default {
|
||||
sectionsInherit = "";
|
||||
sections[] = {};
|
||||
skeletonName = "ACE_CSW_WeaponBag_Skeleton";
|
||||
};
|
||||
class ACE_CSW_mortarBaseplate: Default {
|
||||
sectionsInherit = "";
|
||||
sections[] = {};
|
||||
skeletonName = "ACE_CSW_mortarBaseplate_Skeleton";
|
||||
};
|
||||
};
|
||||
|
76
addons/csw/dev/checkStaticWeapons.sqf
Normal file
76
addons/csw/dev/checkStaticWeapons.sqf
Normal file
@ -0,0 +1,76 @@
|
||||
#define DEBUG_MODE_FULL
|
||||
#include "\z\ace\addons\csw\script_component.hpp"
|
||||
|
||||
// Dev only function to search for weapons used by static weapons
|
||||
// and check if their magazinese are compatible
|
||||
INFO("Checking static weapons");
|
||||
|
||||
private _staticWeaponConfigs = configProperties [configFile >> "CfgVehicles", "(isClass _x) && {(configName _x) isKindOf 'StaticWeapon'}", true];
|
||||
private _staticPublic = _staticWeaponConfigs select {(getNumber (_x >> "scope")) == 2};
|
||||
INFO_2("Static Weapons [%1] - CSW Enabled [%2]",count _staticPublic, {(getNumber (_x >> "ace_csw" >> "enabled")) == 1} count _staticPublic);
|
||||
|
||||
INFO("------ Checking static weapons inheritance ------");
|
||||
private _explicitBases = [];
|
||||
private _inherited = [];
|
||||
{
|
||||
private _config = _x;
|
||||
private _configEnabled = (getNumber (_config >> "ace_csw" >> "enabled")) == 1;
|
||||
if (_configEnabled) then {
|
||||
private _configExplicit = (count configProperties [_config, "configName _x == 'ace_csw'", false]) == 1;
|
||||
if (_configExplicit) then {
|
||||
_explicitBases pushBack (configName _config);
|
||||
_inherited pushBack [];
|
||||
} else {
|
||||
if ((getNumber (_config >> "scope")) < 2) exitWith {};
|
||||
private _parent = inheritsFrom _config;
|
||||
while {isClass _parent} do {
|
||||
private _className = configName _parent;
|
||||
private _index = _explicitBases findIf {_className == _x};
|
||||
if (_index > -1) exitWith {
|
||||
(_inherited select _index) pushBack (configName _config);
|
||||
};
|
||||
_parent = inheritsFrom _parent;
|
||||
};
|
||||
};
|
||||
};
|
||||
} forEach _staticWeaponConfigs;
|
||||
{
|
||||
INFO_2("%1 inherited by %2",_x,_inherited select _forEachIndex);
|
||||
} forEach _explicitBases;
|
||||
|
||||
|
||||
|
||||
|
||||
INFO("------ Logging static magazines with no carry version -------");
|
||||
private _hash = [] call CBA_fnc_hashCreate;
|
||||
// private _logAll = true; // logs all possible weapon magazines (even if not used in a static weapon)
|
||||
private _logAll = false;
|
||||
{
|
||||
private _vehicleType = configName _x;
|
||||
private _turretConfig = [_vehicleType, [0]] call CBA_fnc_getTurret;
|
||||
private _weapons = getArray (_turretConfig >> "weapons");
|
||||
private _loadedMags = getArray (_turretConfig >> "magazines");
|
||||
{
|
||||
private _weapMags = getArray (configFile >> "CfgWeapons" >> _x >> "magazines");
|
||||
{
|
||||
private _xMag = _x;
|
||||
private _groups = "getNumber (_x >> _xMag) == 1" configClasses (configFile >> QGVAR(groups));
|
||||
private _carryMag = configName (_groups param [0, configNull]);
|
||||
if ((_carryMag == "") && {_logAll || {_xMag in _loadedMags}}) then {
|
||||
private _vehs = [_hash, _xMag] call CBA_fnc_hashGet;
|
||||
if (isNil "_vehs") then {_vehs = [];};
|
||||
if (_xMag in _loadedMags) then {
|
||||
_vehs pushBack _vehicleType;
|
||||
};
|
||||
[_hash, _xMag, _vehs] call CBA_fnc_hashSet;
|
||||
};
|
||||
} forEach _weapMags;
|
||||
} forEach _weapons;
|
||||
} forEach _staticWeaponConfigs;
|
||||
|
||||
[_hash, {
|
||||
//IGNORE_PRIVATE_WARNING ["_key", "_value"];
|
||||
INFO_2("[%1] has no carry varient - Used in %2",_key,_value);
|
||||
}] call CBA_fnc_hashEachPair;
|
||||
|
||||
INFO("------ End -------");
|
96
addons/csw/functions/fnc_ai_handleFired.sqf
Normal file
96
addons/csw/functions/fnc_ai_handleFired.sqf
Normal file
@ -0,0 +1,96 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Initializes weapon to disable weapon disassembling
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Weapon <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [weapon] call ace_csw_fnc_ai_handleFired
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_staticWeapon", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_gunner"];
|
||||
TRACE_8("firedEH:",_staticWeapon, _weapon, _muzzle, _mode, _ammo, _magazine, _projectile, _gunner);
|
||||
|
||||
if ((!local _gunner) || {[_gunner] call EFUNC(common,isPlayer)}) exitWith {};
|
||||
if (someAmmo _staticWeapon) exitWith {};
|
||||
|
||||
TRACE_2("need ammo",someAmmo _staticWeapon,magazinesAllTurrets _staticWeapon);
|
||||
|
||||
private _turretPath = [_gunner] call EFUNC(common,getTurretIndex);
|
||||
private _reloadSource = objNull;
|
||||
private _reloadMag = "";
|
||||
private _reloadNeededAmmo = -1;
|
||||
|
||||
// Find if there is anything we can reload with
|
||||
{
|
||||
scopeName "findSource";
|
||||
private _xSource = _x;
|
||||
|
||||
private _cswMagazines = [];
|
||||
{
|
||||
if (isClass (configFile >> QGVAR(groups) >> _x)) then { _cswMagazines pushBackUnique _x; };
|
||||
} forEach (if (_xSource isKindOf "CaManBase") then {magazines _x} else {magazineCargo _x});
|
||||
TRACE_2("",_xSource,_cswMagazines);
|
||||
|
||||
private _compatibleMags = [_magazine] + ([_weapon] call CBA_fnc_compatibleMagazines); // Check current mag first
|
||||
|
||||
{
|
||||
private _xWeaponMag = _x;
|
||||
{
|
||||
if ((getNumber (configFile >> QGVAR(groups) >> _x >> _xWeaponMag)) == 1) then {
|
||||
private _loadInfo = [_staticWeapon, _turretPath, _reloadMag, objNull] call FUNC(reload_canLoadMagazine);
|
||||
if (_loadInfo select 0) then {
|
||||
_reloadMag = _x;
|
||||
_reloadSource = _xSource;
|
||||
_reloadNeededAmmo = _loadInfo select 2;
|
||||
TRACE_3("found mag",_reloadMag,_reloadSource,_x);
|
||||
breakOut "findSource";
|
||||
};
|
||||
};
|
||||
} forEach _cswMagazines;
|
||||
} forEach _compatibleMags;
|
||||
} forEach ([_gunner] + (_staticWeapon nearEntities [["groundWeaponHolder", "ReammoBox_F"], 10]));
|
||||
if (_reloadMag == "") exitWith {TRACE_1("could not find mag",_reloadMag);};
|
||||
|
||||
// Figure out what we can add from the magazines we have
|
||||
private _bestAmmoToSend = -1;
|
||||
{
|
||||
_x params ["_xMag", "_xAmmo"];
|
||||
TRACE_2("",_xMag,_xAmmo);
|
||||
if (_xMag == _reloadMag) then {
|
||||
if ((_bestAmmoToSend == -1) || {(_xAmmo > _bestAmmoToSend) && {_xAmmo <= _reloadNeededAmmo}}) then {
|
||||
_bestAmmoToSend = _xAmmo;
|
||||
};
|
||||
};
|
||||
} forEach (if (_reloadSource isKindOf "CaManBase") then {magazinesAmmo _reloadSource} else {magazinesAmmoCargo _reloadSource});
|
||||
TRACE_4("",_reloadSource,_reloadMag,_reloadNeededAmmo,_bestAmmoToSend);
|
||||
if (_bestAmmoToSend == -1) exitWith {ERROR("No ammo");};
|
||||
|
||||
// Remove the mag from the source
|
||||
if (_reloadSource isKindOf "CaManBase") then {
|
||||
[_reloadSource, _reloadMag, _bestAmmoToSend] call ace_common_fnc_removeSpecificMagazine;
|
||||
} else {
|
||||
[_reloadSource, _reloadMag, 1, _bestAmmoToSend] call CBA_fnc_removeMagazineCargo;
|
||||
};
|
||||
|
||||
private _timeToLoad = 1;
|
||||
if (!isNull(configFile >> "CfgVehicles" >> (typeOf _staticWeapon) >> QUOTE(ADDON) >> "ammoLoadTime")) then {
|
||||
_timeToLoad = getNumber(configFile >> "CfgVehicles" >> (typeOf _staticWeapon) >> QUOTE(ADDON) >> "ammoLoadTime");
|
||||
};
|
||||
|
||||
TRACE_1("Reloading in progress",_timeToLoad);
|
||||
[{
|
||||
params ["_staticWeapon", "_turretPath", "_gunner", "_reloadMag", "_bestAmmoToSend"];
|
||||
if ((!alive _staticWeapon) || {!alive _gunner} || {(_staticWeapon distance _gunner) > 10}) exitWith {TRACE_1("invalid state",_this);};
|
||||
|
||||
// Reload the static weapon
|
||||
TRACE_5("calling addTurretMag event",_staticWeapon, _turretPath, _gunner, _reloadMag, _bestAmmoToSend);
|
||||
[QGVAR(addTurretMag), _this] call CBA_fnc_globalEvent;
|
||||
}, [_staticWeapon, _turretPath, _gunner, _reloadMag, _bestAmmoToSend], _timeToLoad] call CBA_fnc_waitAndExecute;
|
21
addons/csw/functions/fnc_assemble_canDeployTripod.sqf
Normal file
21
addons/csw/functions/fnc_assemble_canDeployTripod.sqf
Normal file
@ -0,0 +1,21 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Checks if the player can deploy the tripod.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can deploy <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [player] call ace_csw_fnc_canDeployTripod
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_player"];
|
||||
|
||||
(getText(configFile >> "CfgWeapons" >> (secondaryWeapon _player) >> QUOTE(ADDON) >> "type") == "mount")
|
||||
|
25
addons/csw/functions/fnc_assemble_canDeployWeapon.sqf
Normal file
25
addons/csw/functions/fnc_assemble_canDeployWeapon.sqf
Normal file
@ -0,0 +1,25 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Checks if you can deploy a weapon on the tripod
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target Tripod <OBJECT>
|
||||
* 0: Player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Wether or not you can deploy the weapon <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, player] call ace_csw_fnc_assemble_canDeployWeapon
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_target", "_player", "", "_carryWeaponClassname"];
|
||||
if (isNil "_carryWeaponClassname") then { _carryWeaponClassname = secondaryWeapon _player };
|
||||
|
||||
// If the current launcher has a config-value that defines the tripod, it is a CSW
|
||||
(alive _target) &&
|
||||
{(getText(configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "assembleTo" >> (typeOf _target))) != ""}
|
||||
|
22
addons/csw/functions/fnc_assemble_canPickupTripod.sqf
Normal file
22
addons/csw/functions/fnc_assemble_canPickupTripod.sqf
Normal file
@ -0,0 +1,22 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Checks if the player can pick-up the tripod.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Tripod <OBJECT>
|
||||
* 1: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can pickup <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [tripod, player] call ace_csw_fnc_assemble_canPickupTripod
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_tripod", "_player"];
|
||||
|
||||
((secondaryWeapon _player) isEqualTo "") && {alive _tripod}
|
||||
|
25
addons/csw/functions/fnc_assemble_canPickupWeapon.sqf
Normal file
25
addons/csw/functions/fnc_assemble_canPickupWeapon.sqf
Normal file
@ -0,0 +1,25 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* If the CSW is mounted or in use this will not allow you to dismount the weapon
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can Dismount <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject] call ace_csw_fnc_assemble_canPickupWeapon
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_staticWeapon"];
|
||||
|
||||
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
|
||||
private _crewed = (crew _staticWeapon) isEqualTo [];
|
||||
private _deadCrew = !(alive (gunner _staticWeapon)); // need to eject body???
|
||||
|
||||
_assemblyMode && {(!_crewed) || _deadCrew}
|
||||
|
66
addons/csw/functions/fnc_assemble_deployTripod.sqf
Normal file
66
addons/csw/functions/fnc_assemble_deployTripod.sqf
Normal file
@ -0,0 +1,66 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Deploys the tripod
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player] call ace_csw_fnc_assemble_deployTripod
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
[{
|
||||
params ["_player"];
|
||||
TRACE_1("assemble_deployTripod",_player);
|
||||
|
||||
// Remove the tripod from the launcher slot
|
||||
private _secondaryWeaponClassname = secondaryWeapon _player;
|
||||
_player removeWeaponGlobal (secondaryWeapon _player);
|
||||
|
||||
private _onFinish = {
|
||||
params ["_args"];
|
||||
_args params ["_player", "_secondaryWeaponClassname"];
|
||||
TRACE_2("deployTripod finish",_player,_secondaryWeaponClassname);
|
||||
|
||||
private _tripodClassname = getText(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deploy");
|
||||
|
||||
// Create a tripod
|
||||
private _cswTripod = createVehicle [_tripodClassname, [0, 0, 0], [], 0, "NONE"];
|
||||
|
||||
private _posATL = _player getRelPos [2, 0];
|
||||
_posATL set [2, ((getPosATL _player) select 2) + 0.5];
|
||||
|
||||
_cswTripod setDir (direction _player);
|
||||
_cswTripod setPosATL _posATL;
|
||||
_cswTripod setVectorUp (surfaceNormal _posATL);
|
||||
|
||||
[_player, "PutDown"] call EFUNC(common,doGesture);
|
||||
|
||||
// drag after deploying
|
||||
if ((missionNamespace getVariable [QGVAR(dragAfterDeploying), false]) && {["ACE_dragging"] call EFUNC(common,isModLoaded)}) then {
|
||||
if ([_player, _cswTripod] call EFUNC(dragging,canCarry)) then {
|
||||
TRACE_1("starting carry",_cswTripod);
|
||||
[_player, _cswTripod] call EFUNC(dragging,startCarry);
|
||||
} else {
|
||||
TRACE_1("cannot carry",_cswTripod);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
private _onFailure = {
|
||||
params ["_args"];
|
||||
_args params ["_player", "_secondaryWeaponClassname"];
|
||||
TRACE_2("deployTripod failure",_player,_secondaryWeaponClassname);
|
||||
|
||||
_player addWeaponGlobal _secondaryWeaponClassname;
|
||||
};
|
||||
|
||||
private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
|
||||
[TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar);
|
||||
}, _this] call CBA_fnc_execNextFrame;
|
74
addons/csw/functions/fnc_assemble_deployWeapon.sqf
Normal file
74
addons/csw/functions/fnc_assemble_deployWeapon.sqf
Normal file
@ -0,0 +1,74 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Deploys the current CSW
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player] call ace_csw_fnc_assemble_deployWeapon
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
[{
|
||||
params ["_tripod", "_player", "", "_carryWeaponClassname"];
|
||||
if (isNil "_carryWeaponClassname") then { _carryWeaponClassname = secondaryWeapon _player };
|
||||
TRACE_3("assemble_deployWeapon_carryWeaponClassname",_tripod,_player,_carryWeaponClassname);
|
||||
|
||||
private _tripodClassname = typeOf _tripod;
|
||||
_player removeWeaponGlobal _carryWeaponClassname;
|
||||
|
||||
private _assembledClassname = getText(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname);
|
||||
private _deployTime = getNumber(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
|
||||
if (!isClass (configFile >> "CfgVehicles" >> _assembledClassname)) exitWith {ERROR_1("bad static classname [%1]",_assembledClassname);};
|
||||
|
||||
TRACE_4("",_carryWeaponClassname,_tripodClassname,_assembledClassname,_deployTime);
|
||||
|
||||
private _onFinish = {
|
||||
params ["_args"];
|
||||
_args params ["_tripod", "_player", "_assembledClassname"];
|
||||
TRACE_3("deployWeapon finish",_tripod,_player,_assembledClassname);
|
||||
|
||||
private _tripodPos = getPosATL _tripod;
|
||||
private _tripodDir = getDir _tripod;
|
||||
deleteVehicle _tripod;
|
||||
|
||||
_tripodPos set [2, (_tripodPos select 2) + 0.1];
|
||||
// Delay a frame so tripod has a chance to be deleted
|
||||
[{
|
||||
params ["_assembledClassname", "_tripodDir", "_tripodPos"];
|
||||
private _csw = createVehicle [_assembledClassname, [0, 0, 0], [], 0, "NONE"];
|
||||
_csw setVariable [QGVAR(assemblyMode), 1, true]; // Explicitly set advanced assembly mode and broadcast
|
||||
_csw setVariable [QGVAR(emptyWeapon), true, false]; // unload gun, shouldn't need broadcast for this as it will be local to us
|
||||
if (!GVAR(defaultAssemblyMode)) then {
|
||||
TRACE_1("global disableVanillaAssembly event",_csw); // handles it being assembled when setting is disabled
|
||||
[QGVAR(disableVanillaAssembly), [_csw]] call CBA_fnc_globalEvent;
|
||||
};
|
||||
_csw setDir _tripodDir;
|
||||
_csw setPosATL _tripodPos;
|
||||
_csw setVectorUp (surfaceNormal _tripodPos);
|
||||
}, [_assembledClassname, _tripodDir, _tripodPos]] call CBA_fnc_execNextFrame;
|
||||
};
|
||||
|
||||
private _onFailure = {
|
||||
params ["_args"];
|
||||
_args params ["", "_player", "", "_carryWeaponClassname"];
|
||||
TRACE_2("deployWeapon failure",_player,_carryWeaponClassname);
|
||||
|
||||
_player addWeaponGlobal _carryWeaponClassname;
|
||||
};
|
||||
|
||||
private _codeCheck = {
|
||||
params ["_args"];
|
||||
_args params ["_tripod"];
|
||||
!isNull _tripod;
|
||||
};
|
||||
|
||||
[TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, localize LSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar);
|
||||
}, _this] call CBA_fnc_execNextFrame;
|
||||
|
28
addons/csw/functions/fnc_assemble_deployWeaponModifier.sqf
Normal file
28
addons/csw/functions/fnc_assemble_deployWeaponModifier.sqf
Normal file
@ -0,0 +1,28 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Modifies interaction for deploying weapon
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target <OBJECT>
|
||||
* 1: Player <OBJECT>
|
||||
* 2: Args <ANY>
|
||||
* 3: Action Data <ARRAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, player, [], []] call ace_csw_fnc_assemble_deployWeaponModifier
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_target", "_player", "", "_actionData"];
|
||||
|
||||
private _carryWeaponClassname = secondaryWeapon _player;
|
||||
private _assembleTo = (getText(configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "assembleTo" >> (typeOf _target)));
|
||||
private _icon = getText (configFile >> "CfgVehicles" >> _assembleTo >> "picture");
|
||||
TRACE_2("",_assembleTo,_icon);
|
||||
|
||||
_actionData set [2, _icon];
|
47
addons/csw/functions/fnc_assemble_pickupTripod.sqf
Normal file
47
addons/csw/functions/fnc_assemble_pickupTripod.sqf
Normal file
@ -0,0 +1,47 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Picks up the tripod and adds it to the player launcher slot
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Tripod <OBJECT>
|
||||
* 1: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [tripod, player] call ace_csw_fnc_assemble_pickupTripod
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
[{
|
||||
params ["_tripod", "_player"];
|
||||
TRACE_2("assemble_pickupTripod",_tripod,_player);
|
||||
|
||||
private _tripodClassname = getText(configFile >> "CfgVehicles" >> (typeof _tripod) >> QUOTE(ADDON) >> "disassembleTo");
|
||||
private _pickupTime = getNumber(configFile >> "CfgWeapons" >> _tripodClassname >> QUOTE(ADDON) >> "pickupTime");
|
||||
|
||||
private _onFinish = {
|
||||
params ["_args"];
|
||||
_args params ["_tripod", "_player", "_tripodClassname"];
|
||||
TRACE_3("assemble_pickupTripod finish",_tripod,_player,_tripodClassname);
|
||||
|
||||
deleteVehicle _tripod;
|
||||
_player addWeaponGlobal _tripodClassname;
|
||||
[_player, "PutDown"] call EFUNC(common,doGesture);
|
||||
};
|
||||
|
||||
private _condition = {
|
||||
params ["_args"];
|
||||
_args params ["_tripod", "_player"];
|
||||
|
||||
!(isNull _tripod) && { (secondaryWeapon _player) isEqualTo "" }
|
||||
|
||||
};
|
||||
|
||||
TRACE_3("",_pickupTime,typeOf _tripod,_tripodClassname);
|
||||
[TIME_PROGRESSBAR(_pickupTime), [_tripod, _player, _tripodClassname], _onFinish, {}, localize LSTRING(PickupTripod_progressBar), _condition] call EFUNC(common,progressBar);
|
||||
}, _this] call CBA_fnc_execNextFrame;
|
||||
|
91
addons/csw/functions/fnc_assemble_pickupWeapon.sqf
Normal file
91
addons/csw/functions/fnc_assemble_pickupWeapon.sqf
Normal file
@ -0,0 +1,91 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Dismounts the weapon from the tripod and drops its backpack beside
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [weapon] call ace_csw_fnc_assemble_pickupWeapon
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
[{
|
||||
params ["_staticWeapon", "_player"];
|
||||
TRACE_2("assemble_pickupWeapon",_staticWeapon,_player);
|
||||
|
||||
private _onDisassembleFunc = getText(configFile >> "CfgVehicles" >> (typeOf _staticWeapon) >> QUOTE(ADDON) >> "disassembleFunc");
|
||||
private _carryWeaponClassname = getText(configFile >> "CfgVehicles" >> (typeOf _staticWeapon) >> QUOTE(ADDON) >> "disassembleWeapon");
|
||||
private _turretClassname = getText(configFile >> "CfgVehicles" >> (typeOf _staticWeapon) >> QUOTE(ADDON) >> "disassembleTurret");
|
||||
private _pickupTime = getNumber(configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime");
|
||||
TRACE_4("",typeOf _staticWeapon,_carryWeaponClassname,_turretClassname,_pickupTime);
|
||||
if (!isClass (configFile >> "CfgWeapons" >> _carryWeaponClassname)) exitWith {ERROR_1("bad weapon classname [%1]",_carryWeaponClassname);};
|
||||
if (!isClass (configFile >> "CfgVehicles" >> _turretClassname)) exitWith {ERROR_1("bad turret classname [%1]",_turretClassname);};
|
||||
|
||||
private _onFinish = {
|
||||
params ["_args"];
|
||||
_args params ["_staticWeapon", "_player", "_carryWeaponClassname", "_turretClassname", "_onDisassembleFunc"];
|
||||
TRACE_4("disassemble finish",_staticWeapon,_player,_carryWeaponClassname,_turretClassname);
|
||||
|
||||
private _weaponPos = getPosATL _staticWeapon;
|
||||
_weaponPos set [2, (_weaponPos select 2) + 0.1];
|
||||
private _weaponDir = getDir _staticWeapon;
|
||||
|
||||
LOG("remove ammo");
|
||||
{
|
||||
_x params ["_xMag", "", "_xAmmo"];
|
||||
|
||||
private _carryMag = GVAR(vehicleMagCache) getVariable _xMag;
|
||||
if (isNil "_carryMag") then {
|
||||
private _groups = "getNumber (_x >> _xMag) == 1" configClasses (configFile >> QGVAR(groups));
|
||||
_carryMag = configName (_groups param [0, configNull]);
|
||||
GVAR(vehicleMagCache) setVariable [_xMag, _carryMag];
|
||||
TRACE_2("setting cache",_xMag,_carryMag);
|
||||
};
|
||||
if ((_xAmmo > 0) && {_carryMag != ""}) then {
|
||||
TRACE_2("Removing ammo",_xMag,_carryMag);
|
||||
[_player, _carryMag, _xAmmo] call FUNC(reload_handleReturnAmmo);
|
||||
};
|
||||
} forEach (magazinesAllTurrets _staticWeapon);
|
||||
|
||||
private _cswTripod = createVehicle [_turretClassname, [0, 0, 0], [], 0, "NONE"];
|
||||
[_cswTripod, _staticWeapon] call (missionNamespace getVariable _onDisassembleFunc);
|
||||
|
||||
LOG("delete weapon");
|
||||
deleteVehicle _staticWeapon;
|
||||
|
||||
// Delay a frame so weapon has a chance to be deleted
|
||||
[{
|
||||
params ["_player", "_cswTripod", "_weaponDir", "_weaponPos", "_carryWeaponClassname"];
|
||||
_cswTripod setDir _weaponDir;
|
||||
_cswTripod setPosATL _weaponPos;
|
||||
_cswTripod setVelocity [0, 0, -0.05];
|
||||
_cswTripod setVectorUp (surfaceNormal _weaponPos);
|
||||
|
||||
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
|
||||
_player addWeapon _carryWeaponClassname;
|
||||
};
|
||||
private _weaponRelPos = _cswTripod getRelPos RELATIVE_DIRECTION(90);
|
||||
private _weaponHolder = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
|
||||
_weaponHolder setDir random [0, 180, 360];
|
||||
_weaponHolder setPosATL [_weaponRelPos select 0, _weaponRelPos select 1, _weaponPos select 2];
|
||||
_weaponHolder addWeaponCargoGlobal [_carryWeaponClassname, 1];
|
||||
}, [_player, _cswTripod, _weaponDir, _weaponPos, _carryWeaponClassname]] call CBA_fnc_execNextFrame;
|
||||
|
||||
LOG("end");
|
||||
};
|
||||
|
||||
private _condition = {
|
||||
params ["_args"];
|
||||
_args params ["_staticWeapon"];
|
||||
((crew _staticWeapon) isEqualTo []) && (alive _staticWeapon)
|
||||
};
|
||||
|
||||
[TIME_PROGRESSBAR(_pickupTime), [_staticWeapon, _player, _carryWeaponClassname, _turretClassname, _onDisassembleFunc], _onFinish, {}, localize LSTRING(DisassembleCSW_progressBar), _condition] call EFUNC(common,progressBar);
|
||||
}, _this] call CBA_fnc_execNextFrame;
|
||||
|
28
addons/csw/functions/fnc_canGetIn.sqf
Normal file
28
addons/csw/functions/fnc_canGetIn.sqf
Normal file
@ -0,0 +1,28 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Checks if the player can get in the weapon
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject] call ace_csw_fnc_canGetIn
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
// hide this action if quick mount is enabled
|
||||
if ((missionNamespace getVariable [QEGVAR(quickmount,enabled), false]) && {(missionNamespace getVariable [QEGVAR(quickmount,enableMenu), -1]) in [1, 3]}) exitWith {
|
||||
false
|
||||
};
|
||||
|
||||
params ["_staticWeapon"];
|
||||
|
||||
alive _staticWeapon
|
||||
&& {!(alive (gunner _staticWeapon))}
|
||||
&& {(locked _staticWeapon) < 2}
|
||||
&& {0.3 < ((vectorUp _staticWeapon) select 2)}
|
24
addons/csw/functions/fnc_getIn.sqf
Normal file
24
addons/csw/functions/fnc_getIn.sqf
Normal file
@ -0,0 +1,24 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* An action for the player to get in the CSW
|
||||
* Due to the fact that the default static weapons "Get In" memory point is at the front of
|
||||
* the gun and can't be acssesed from the back, I am implementing this to get around that issue.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
* 1: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, player] call ace_csw_fnc_getIn
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_staticWeapon", "_player"];
|
||||
TRACE_2("getIn",_staticWeapon,_player);
|
||||
|
||||
_player moveInTurret [_staticWeapon, [0]];
|
41
addons/csw/functions/fnc_proxyWeapon.sqf
Normal file
41
addons/csw/functions/fnc_proxyWeapon.sqf
Normal file
@ -0,0 +1,41 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: Brandon (TCVM), PabstMirror
|
||||
* Handles the use of proxy weapons to fix engine-reload times
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Weapon <OBJECT>
|
||||
* 1: Turret <ARRAY>
|
||||
* 2: Proxy weapon needed <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [weapon, [0], true] call ace_csw_fnc_proxyWeapon
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_staticWeapon", "_turret", "_needed"];
|
||||
|
||||
if (_staticWeapon getVariable [format [QGVAR(proxyHandled_%1), _turret], false]) exitWith { TRACE_1("proxy weapon already handled",_staticWeapon); };
|
||||
|
||||
private _typeOf = typeOf _staticWeapon;
|
||||
private _proxyWeapon = getText(configFile >> "CfgVehicles" >> _typeOf >> "ace_csw" >> "proxyWeapon");
|
||||
TRACE_5("proxyWeapon",_staticWeapon,_turret,_needed,_typeOf,_proxyWeapon);
|
||||
|
||||
if (_proxyWeapon == "") exitWith { TRACE_1("proxyWeapon not defined",_proxyWeapon); };
|
||||
|
||||
private _currentWeapon = (_staticWeapon weaponsTurret [0]) param [0, "#none"];
|
||||
if ((missionNamespace getVariable [_proxyWeapon, objNull]) isEqualType {}) then { // check if string is a function
|
||||
TRACE_1("Calling proxyWeapon function",_proxyWeapon);
|
||||
_proxyWeapon = [_staticWeapon, _turret, _currentWeapon, _needed] call (missionNamespace getVariable _proxyWeapon);
|
||||
_needed = _proxyWeapon != "";
|
||||
};
|
||||
if (!_needed) exitWith { TRACE_2("not needed",_needed,_proxyWeapon); };
|
||||
|
||||
TRACE_2("swapping to proxy weapon",_currentWeapon,_proxyWeapon);
|
||||
_staticWeapon removeWeaponTurret [_currentWeapon, _turret];
|
||||
_staticWeapon addWeaponTurret [_proxyWeapon, _turret];
|
||||
_staticWeapon setVariable [format [QGVAR(proxyHandled_%1), _turret], true, true];
|
56
addons/csw/functions/fnc_reload_actionsLoad.sqf
Normal file
56
addons/csw/functions/fnc_reload_actionsLoad.sqf
Normal file
@ -0,0 +1,56 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Gets sub actions for what the player can load into the static weapon
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
* 1: Player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Actions <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, player] call ace_csw_fnc_reload_actionsLoad
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_player"];
|
||||
|
||||
private _actions = [];
|
||||
private _loadableMagazines = [_vehicle, _player] call FUNC(reload_getLoadableMagazines);
|
||||
|
||||
private _statement = {
|
||||
params ["_target", "_player", "_params"];
|
||||
_params params ["_carryMag", "_turretPath"];
|
||||
|
||||
[_target, _turretPath, _carryMag, _player] call FUNC(reload_loadMagazine);
|
||||
};
|
||||
|
||||
private _condition = {
|
||||
params ["_target", "_player", "_params"];
|
||||
_params params ["_carryMag", "_turretPath"];
|
||||
|
||||
([_target, _turretPath, _carryMag, _player] call FUNC(reload_canLoadMagazine)) select 0
|
||||
};
|
||||
|
||||
{
|
||||
_x params ["_carryMag", "_turretPath", "_loadInfo"];
|
||||
_loadInfo params ["", "", "", "_isBeltLinking"];
|
||||
|
||||
private _displayName = getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName");
|
||||
private _picture = getText (configFile >> "CfgMagazines" >> _carryMag >> "picture");
|
||||
private _text = if (_isBeltLinking) then {
|
||||
format [localize LSTRING(actionLink), _displayName];
|
||||
} else {
|
||||
format [localize LSTRING(loadX), _displayName];
|
||||
};
|
||||
|
||||
private _action = [format ["load_%1", _forEachIndex], _text, _picture, _statement, _condition, {}, _x] call EFUNC(interact_menu,createAction);
|
||||
_actions pushBack [_action, [], _vehicle];
|
||||
} forEach _loadableMagazines;
|
||||
|
||||
TRACE_1("loadActions",count _actions);
|
||||
_actions
|
||||
|
81
addons/csw/functions/fnc_reload_actionsUnload.sqf
Normal file
81
addons/csw/functions/fnc_reload_actionsUnload.sqf
Normal file
@ -0,0 +1,81 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Gets sub actions for what the player can load into the static weapon
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target <OBJECT>
|
||||
* 1: Player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Actions <ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, player] call ace_csw_fnc_reload_actionsUnload
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_player"];
|
||||
|
||||
private _statement = {
|
||||
params ["_target", "_player", "_params"];
|
||||
_params params ["_vehMag", "_turretPath", "_carryMag"];
|
||||
TRACE_5("starting unload",_target,_turretPath,_player,_carryMag,_vehMag);
|
||||
|
||||
private _timeToUnload = 1;
|
||||
if (!isNull(configFile >> "CfgVehicles" >> (typeOf _target) >> QUOTE(ADDON) >> "ammoUnloadTime")) then {
|
||||
_timeToUnload = getNumber(configFile >> "CfgVehicles" >> (typeOf _target) >> QUOTE(ADDON) >> "ammoUnloadTime");
|
||||
};
|
||||
|
||||
[
|
||||
TIME_PROGRESSBAR(_timeToUnload),
|
||||
[_target, _turretPath, _player, _carryMag, _vehMag],
|
||||
{
|
||||
(_this select 0) params ["_target", "_turretPath", "", "_carryMag", "_vehMag"];
|
||||
TRACE_5("unload progressBar finish",_target,_turretPath,_carryMag,_vehMag,_player);
|
||||
[QGVAR(removeTurretMag), [_target, _turretPath, _carryMag, _vehMag, _player]] call CBA_fnc_globalEvent;
|
||||
},
|
||||
{TRACE_1("unload progressBar fail",_this);},
|
||||
format [localize LSTRING(unloadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")],
|
||||
{(_this select 0) call FUNC(reload_canUnloadMagazine)},
|
||||
["isNotInside"]
|
||||
] call EFUNC(common,progressBar);
|
||||
};
|
||||
|
||||
private _condition = {
|
||||
params ["_target", "_player", "_params"];
|
||||
_params params ["_vehMag", "_turretPath", "_carryMag"];
|
||||
[_target, _turretPath, _player, _carryMag, _vehMag] call FUNC(reload_canUnloadMagazine)
|
||||
};
|
||||
|
||||
private _actions = [];
|
||||
private _handeledMagTypes = [];
|
||||
|
||||
// Go through magazines on static weapon and check if any are unloadable
|
||||
{
|
||||
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
||||
|
||||
if ((_xAmmo > 0) && {!(_xMag in _handeledMagTypes)}) then {
|
||||
_handeledMagTypes pushBack _xMag;
|
||||
private _carryMag = GVAR(vehicleMagCache) getVariable _xMag;
|
||||
|
||||
if (isNil "_carryMag") then {
|
||||
private _groups = "getNumber (_x >> _xMag) == 1" configClasses (configFile >> QGVAR(groups));
|
||||
_carryMag = configName (_groups param [0, configNull]);
|
||||
GVAR(vehicleMagCache) setVariable [_xMag, _carryMag];
|
||||
TRACE_2("setting cache",_xMag,_carryMag);
|
||||
};
|
||||
if (_carryMag == "") exitWith {};
|
||||
|
||||
private _displayName = getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName");
|
||||
private _text = format [LLSTRING(unloadX), _displayName];
|
||||
private _picture = getText (configFile >> "CfgMagazines" >> _carryMag >> "picture");
|
||||
private _action = [format ["unload_%1", _forEachIndex], _text, _picture, _statement, _condition, {}, [_xMag, _xTurret, _carryMag]] call EFUNC(interact_menu,createAction);
|
||||
_actions pushBack [_action, [], _vehicle];
|
||||
};
|
||||
} forEach (magazinesAllTurrets _vehicle);
|
||||
|
||||
TRACE_1("unloadActions",count _actions);
|
||||
_actions
|
||||
|
59
addons/csw/functions/fnc_reload_canLoadMagazine.sqf
Normal file
59
addons/csw/functions/fnc_reload_canLoadMagazine.sqf
Normal file
@ -0,0 +1,59 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror & TCVM
|
||||
* Tests if unit can load a magazine into a static weapon.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
* 1: Turret Path <ARRAY>
|
||||
* 2: Carryable Magazine <STRING>
|
||||
* 3: Player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* [CanLoad<BOOL>, LoadedMag<STRING>, AmmoNeeded<NUMBER>, IsBeltLinking<BOOL>]<ARRAY>
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, [0], "ACE_csw_100Rnd_127x99_mag_red", player] call ace_csw_fnc_reload_canLoadMagazine
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_turret", "_carryMag", ["_unit", objNull]];
|
||||
// TRACE_4("reload_canLoadMagazine",_vehicle,_turret,_carryMag,_unit);
|
||||
|
||||
// Handle disassembled or deleted
|
||||
if (!alive _vehicle) exitWith { [false, "", -1, false] };
|
||||
// Verify unit has carry magazine
|
||||
if ((!isNull _unit) && {((_vehicle distance _unit) > 5) || {((magazines _unit) findIf {_x == _carryMag}) == -1}}) exitWith { [false, "", -2, false] };
|
||||
|
||||
private _desiredAmmo = getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> QUOTE(ADDON) >> "desiredAmmo");
|
||||
if (_desiredAmmo == 0) then { _desiredAmmo = 100; };
|
||||
private _ammoNeeded = _desiredAmmo min getNumber (configFile >> "CfgMagazines" >> _carryMag >> "count"); // assume it needs full carry mag
|
||||
private _loadedMag = "";
|
||||
private _isBeltLinking = false;
|
||||
|
||||
scopeName "main";
|
||||
{
|
||||
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
||||
if (_xTurret isEqualTo _turret) then {
|
||||
if (_loadedMag != "") exitWith { [false, _loadedMag, -3, false] breakOut "main"; }; // Exit if static has multiple mags
|
||||
_loadedMag = _xMag;
|
||||
if (_xAmmo > 0) then {
|
||||
// There is a magazine with ammo loaded in the turret (are there any multi-muzzle static weapons??), see if we can add to this mag
|
||||
if (getNumber (configFile >> QGVAR(groups) >> _carryMag >> _xMag) != 1) exitWith {
|
||||
[false, _loadedMag, -4, false] breakOut "main"; // Carry mag cannot be added to existing vehicle mag (e.g. red to green tracers)
|
||||
};
|
||||
if (getNumber (configFile >> "CfgMagazines" >> _carryMag >> "ACE_isBelt") == 0) exitWith {
|
||||
[false, _loadedMag, -5, false] breakOut "main"; // Non-linkable mag loaded, can't add any more
|
||||
};
|
||||
private _maxMagazineAmmo = _desiredAmmo min getNumber (configFile >> "CfgMagazines" >> _xMag >> "count");
|
||||
if (_xAmmo >= _maxMagazineAmmo) exitWith {
|
||||
[false, _loadedMag, -6, false] breakOut "main"; // Already at capicity
|
||||
};
|
||||
_ammoNeeded = _maxMagazineAmmo - _xAmmo;
|
||||
_isBeltLinking = true;
|
||||
};
|
||||
};
|
||||
} forEach (magazinesAllTurrets _vehicle);
|
||||
|
||||
[true, _loadedMag, _ammoNeeded, _isBeltLinking]
|
33
addons/csw/functions/fnc_reload_canUnloadMagazine.sqf
Normal file
33
addons/csw/functions/fnc_reload_canUnloadMagazine.sqf
Normal file
@ -0,0 +1,33 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Tests if unit can unload a magazine from a static weapon.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
* 1: Turret Path <ARRAY>
|
||||
* 2: Player <OBJECT>
|
||||
* 3: Carryable Magazine <STRING>
|
||||
* 4: Vehicle Magazine <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [cursorTarget, [0], player, "ACE_csw_100Rnd_127x99_mag_red", "200Rnd_127x99_mag_Tracer_Red"] call ace_csw_fnc_reload_canUnloadMagazine
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_turretPath", "_unit", "_carryMag", "_vehMag"];
|
||||
|
||||
// handle disassembled or deleted
|
||||
if ((!alive _vehicle) || {(_vehicle distance _unit) > 5}) exitWith {false};
|
||||
|
||||
private _return = false;
|
||||
{
|
||||
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
||||
if ((_xMag == _vehMag) && {_xTurret isEqualTo _turretPath} && {_xAmmo > 0}) exitWith { _return = true };
|
||||
} forEach (magazinesAllTurrets _vehicle);
|
||||
|
||||
_return
|
52
addons/csw/functions/fnc_reload_getLoadableMagazines.sqf
Normal file
52
addons/csw/functions/fnc_reload_getLoadableMagazines.sqf
Normal file
@ -0,0 +1,52 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Gets magazines that the player is carrying that can be loaded into the static weapon
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Vehicle <OBJECT>
|
||||
* 1: Player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Mags <ARRAY>
|
||||
* [Carry Magazine <STRING>, Turret Path <ARRAY>, Ammo Needed <NUMBER>]
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, player] call ace_csw_fnc_reload_getLoadableMagazines
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_player"];
|
||||
|
||||
private _carriedMagazines = [];
|
||||
|
||||
{
|
||||
if (isClass (configFile >> QGVAR(groups) >> _x)) then {
|
||||
_carriedMagazines pushBackUnique _x;
|
||||
};
|
||||
} forEach (magazines _player);
|
||||
|
||||
if (_carriedMagazines isEqualTo []) exitWith { [] }; // fast exit if no carry mags
|
||||
|
||||
private _loadInfo = [];
|
||||
private _return = [];
|
||||
// Go through turrets and find weapons that we could reload
|
||||
{
|
||||
private _turretPath = _x;
|
||||
{
|
||||
private _weapon = _x;
|
||||
{
|
||||
private _carryMag = _x;
|
||||
private _carryGroup = configFile >> QGVAR(groups) >> _carryMag;
|
||||
{
|
||||
if (((getNumber (_carryGroup >> _x)) == 1) && {_loadInfo = [_vehicle, _turretPath, _carryMag, _player] call FUNC(reload_canLoadMagazine); _loadInfo select 0}) exitWith {
|
||||
_return pushBack [_carryMag, _turretPath, _loadInfo];
|
||||
};
|
||||
} forEach (getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines"));
|
||||
} forEach _carriedMagazines;
|
||||
} forEach (_vehicle weaponsTurret _turretPath);
|
||||
} forEach (allTurrets _vehicle);
|
||||
// Note: these nested forEach's looks terrible, but most only have one element
|
||||
|
||||
_return
|
45
addons/csw/functions/fnc_reload_getVehicleMagazine.sqf
Normal file
45
addons/csw/functions/fnc_reload_getVehicleMagazine.sqf
Normal file
@ -0,0 +1,45 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Finds the best vehicle magazines to create from a carryable magazine for a given weapon.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Weapon <STRING>
|
||||
* 1: Magazine that is carryable <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* Vehicle Magazine <STRING>
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject, [0], "ace_csw_100Rnd_127x99_mag"] call ace_csw_fnc_reload_getVehicleMagazine
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_turret", "_carryMag"];
|
||||
TRACE_3("reload_getVehicleMagazine",_vehicle,_turret,_carryMag);
|
||||
|
||||
private _carryGroupCfg = configFile >> QGVAR(groups) >> _carryMag;
|
||||
private _desiredAmmo = getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> QUOTE(ADDON) >> "desiredAmmo");
|
||||
if (_desiredAmmo == 0) then { _desiredAmmo = 100; };
|
||||
|
||||
private _bestMag = "#";
|
||||
private _bestMagCount = -1;
|
||||
|
||||
{
|
||||
private _weapon = _x;
|
||||
{
|
||||
if ((getNumber (_carryGroupCfg >> _x)) == 1) then {
|
||||
private _xAmmo = getNumber (configFile >> "CfgMagazines" >> _x >> "ammo");
|
||||
if (((_xAmmo >= _bestMagCount) && {_bestMagCount < _desiredAmmo}) || {(_xAmmo >= _desiredAmmo) && {_xAmmo < _bestMagCount}}) then {
|
||||
_bestMag = _x;
|
||||
_bestMagCount = _xAmmo;
|
||||
};
|
||||
};
|
||||
} forEach (getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines"));
|
||||
} forEach (_vehicle weaponsTurret _turret);
|
||||
TRACE_3("best fit",_desiredAmmo,_bestMag,_bestMagCount);
|
||||
|
||||
if (_bestMag == "#") then { ERROR_1("veh mag not found for %1",_carryMag); };
|
||||
|
||||
_bestMag
|
66
addons/csw/functions/fnc_reload_handleAddTurretMag.sqf
Normal file
66
addons/csw/functions/fnc_reload_handleAddTurretMag.sqf
Normal file
@ -0,0 +1,66 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM, PabstMirror
|
||||
* Handles adding ammo to a turret
|
||||
* Called from a global event but only runs where turret is local
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
* 1: Turret Path <ARRAY>
|
||||
* 2: Unit doing action <OBJECT>
|
||||
* 3: Vehicle Magazine <STRING>
|
||||
* 4: Ammo in magazine <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [cursorTarget, [0], player, "200Rnd_127x99_mag_Tracer_Red", 70] call ace_csw_fnc_reload_handleAddTurretMag
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_turret", "_unit", "_carryMag" ,"_ammoRecieved"];
|
||||
TRACE_5("reload_handleAddTurretMag",_vehicle,_turret,_unit,_carryMag,_ammoRecieved);
|
||||
|
||||
TRACE_2("",local _vehicle, _vehicle turretLocal _turret);
|
||||
if (!(_vehicle turretLocal _turret)) exitWith {};
|
||||
|
||||
([_vehicle, _turret, _carryMag] call FUNC(reload_canLoadMagazine)) params ["_canAdd", "_loadedMag", "_neededAmmo", "_isBeltLinking"];
|
||||
TRACE_4("canLoad",_canAdd,_loadedMag,_neededAmmo,_isBeltLinking);
|
||||
|
||||
private _ammoRemaining = _ammoRecieved;
|
||||
if (_canAdd) then {
|
||||
private _ammoUsed = _neededAmmo min _ammoRecieved;
|
||||
_ammoRemaining = _ammoRemaining - _ammoUsed;
|
||||
|
||||
if (_isBeltLinking) then {
|
||||
private _currentAmmo = _vehicle magazineTurretAmmo [_loadedMag, _turret];
|
||||
_currentAmmo = _currentAmmo + _ammoUsed;
|
||||
TRACE_2("Setting mag ammo",_loadedMag,_currentAmmo);
|
||||
// _vehicle setMagazineTurretAmmo [_loadedMag, _currentAmmo, _turret];
|
||||
|
||||
// setMagazineTurretAmmo is broken on split locality, use setAmmo for now (this may not work for multi turret vehicles)
|
||||
private _weapon = (_vehicle weaponsTurret _turret) param [0, ""];
|
||||
TRACE_3("setAmmo",_vehicle,_weapon, _currentAmmo);
|
||||
_vehicle setAmmo [_weapon, _currentAmmo];
|
||||
private _currentAmmo = _vehicle magazineTurretAmmo [_loadedMag, _turret];
|
||||
if ((_weapon == "") || {_currentAmmo != _currentAmmo}) then { ERROR_1("failed to setAmmo - %1", _this); };
|
||||
|
||||
} else {
|
||||
if (_loadedMag != "") then {
|
||||
TRACE_1("Removing emtpy mag",_loadedMag);
|
||||
_vehicle removeMagazinesTurret [_loadedMag, _turret];
|
||||
};
|
||||
[_vehicle, _turret, true] call FUNC(proxyWeapon); // Check if we need to add proxy weapon now
|
||||
private _newMag = [_vehicle, _turret, _carryMag] call FUNC(reload_getVehicleMagazine);
|
||||
TRACE_2("Adding new mag",_newMag,_ammoUsed);
|
||||
_vehicle addMagazineTurret [_newMag, _turret, _ammoUsed];
|
||||
};
|
||||
};
|
||||
|
||||
if (_ammoRemaining > 0) then {
|
||||
TRACE_3("Returning ammo",_unit,_carryMag,_ammoRemaining);
|
||||
[QGVAR(returnAmmo), [_unit, _carryMag, _ammoRemaining], _unit] call CBA_fnc_targetEvent;
|
||||
};
|
||||
|
79
addons/csw/functions/fnc_reload_handleRemoveTurretMag.sqf
Normal file
79
addons/csw/functions/fnc_reload_handleRemoveTurretMag.sqf
Normal file
@ -0,0 +1,79 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM
|
||||
* Handles removing ammo from a turret
|
||||
* Called from a global event but only runs where turret is local
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Static Weapon <OBJECT>
|
||||
* 1: Turret Path <ARRAY>
|
||||
* 2: Magainze Unit Can Carry <STRING>
|
||||
* 3: Magazine To Remove From Static <STRING>
|
||||
* 4: Unit to unload to <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [cursorTarget, [0], "ACE_csw_100Rnd_127x99_mag_red", "500Rnd_127x99_mag_Tracer_Green", player] call ace_csw_fnc_reload_handleRemoveTurretMag
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_turretPath", "_carryMag", "_vehMag", "_unit"];
|
||||
TRACE_6("removeTurretMag EH",_vehicle,_turretPath,_carryMag,_vehMag,_unit);
|
||||
|
||||
TRACE_3("",local _vehicle, _vehicle turretLocal _turretPath,local _unit);
|
||||
if (!(_vehicle turretLocal _turretPath)) exitWith {};
|
||||
|
||||
private _magsInWeapon = []; // Check how much ammo it has now:
|
||||
{
|
||||
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
||||
if ((_xMag == _vehMag) && {_xTurret isEqualTo _turretPath}) then {
|
||||
_magsInWeapon pushBack _xAmmo;
|
||||
};
|
||||
} forEach (magazinesAllTurrets _vehicle);
|
||||
TRACE_1("",_magsInWeapon);
|
||||
|
||||
// Remove any empty mags from start:
|
||||
private _ammoInFirstMag = 0;
|
||||
while {(!(_magsInWeapon isEqualTo [])) && {_ammoInFirstMag = _magsInWeapon deleteAt 0; (_ammoInFirstMag == 0)}} do {
|
||||
TRACE_1("Removing empty mag",_ammoInFirstMag);
|
||||
_vehicle removeMagazineTurret [_vehMag, _turretPath];
|
||||
};
|
||||
TRACE_2("",_magsInWeapon,_ammoInFirstMag);
|
||||
if ((_magsInWeapon isEqualTo []) && {_ammoInFirstMag == 0}) exitWith {};
|
||||
|
||||
private _maxAmmo = getNumber (configFile >> "CfgMagazines" >> _carryMag >> "count");
|
||||
private _ammoRemoved = _ammoInFirstMag min _maxAmmo;
|
||||
private _ammoLeft = _ammoInFirstMag - _ammoRemoved;
|
||||
|
||||
if ((_magsInWeapon isEqualTo []) && {_ammoInFirstMag > _ammoRemoved}) then {
|
||||
// Only one mag in gun, and we're just taking out a partial ammount (unlinking)
|
||||
TRACE_2("Setting mag ammo",_ammoRemoved,_ammoLeft);
|
||||
// _vehicle setMagazineTurretAmmo [_vehMag, _ammoLeft, _turretPath];
|
||||
|
||||
// setMagazineTurretAmmo is broken on split locality, use setAmmo for now
|
||||
private _weapon = (_vehicle weaponsTurret _turretPath) param [0, ""];
|
||||
TRACE_3("setAmmo",_vehicle,_weapon, _ammoLeft);
|
||||
_vehicle setAmmo [_weapon, _ammoLeft];
|
||||
private _currentAmmo = _vehicle magazineTurretAmmo [_vehMag, _turretPath];
|
||||
if ((_weapon == "") || {_currentAmmo != _ammoLeft}) then { ERROR_1("failed to setAmmo - %1", _this); };
|
||||
|
||||
|
||||
} else {
|
||||
// Because of command limitations, we need to remove mags to change their ammo
|
||||
// This will cause the gun to need to be reloaded if more than one is loaded (only a problem for non-assembly mode guns)
|
||||
TRACE_2("Removing magazine",_ammoRemoved,_ammoLeft);
|
||||
_vehicle removeMagazinesTurret [_vehMag, _turretPath];
|
||||
if (_ammoLeft > 0) then {
|
||||
_magsInWeapon pushBack _ammoLeft;
|
||||
TRACE_1("Re-adding partial",_ammoLeft);
|
||||
};
|
||||
{
|
||||
if (_x > 0) then { _vehicle addMagazineTurret [_vehMag, _turretPath, _x]; };
|
||||
} forEach _magsInWeapon;
|
||||
};
|
||||
|
||||
TRACE_3("Returning ammo",_unit,_carryMag,_ammoRemoved);
|
||||
[QGVAR(returnAmmo), [_unit, _carryMag, _ammoRemoved], _unit] call CBA_fnc_targetEvent;
|
70
addons/csw/functions/fnc_reload_handleReturnAmmo.sqf
Normal file
70
addons/csw/functions/fnc_reload_handleReturnAmmo.sqf
Normal file
@ -0,0 +1,70 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: TCVM and PabstMirror
|
||||
* Handles returned ammo (either from unloading or leftovers from linking)
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Man or Vehicle <OBJECT>
|
||||
* 1: Carry Magazine <STRING>
|
||||
* 2: Ammo in magazine <NUMBER>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player, "ace_csw_100Rnd_127x99_mag", 70] call ace_csw_fnc_reload_handleReturnAmmo
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_unloadTo", "_carryMag", "_ammo"];
|
||||
TRACE_3("reload_handleReturnAmmo",_unloadTo,_carryMag,_ammo);
|
||||
|
||||
private _carryMaxAmmo = getNumber (configFile >> "CfgMagazines" >> _carryMag >> "count");
|
||||
private _fullMagazines = floor (_ammo / _carryMaxAmmo);
|
||||
private _bulletsRemaining = _ammo % _carryMaxAmmo;
|
||||
|
||||
if (_unloadTo isKindOf "CaManBase") then {
|
||||
while {(_fullMagazines > 0) && {_unloadTo canAdd _carryMag}} do {
|
||||
_unloadTo addMagazine [_carryMag, _carryMaxAmmo];
|
||||
_fullMagazines = _fullMagazines - 1;
|
||||
};
|
||||
if ((_bulletsRemaining > 0) && {_unloadTo canAdd _carryMag}) then {
|
||||
_unloadTo addMagazine [_carryMag, _bulletsRemaining];
|
||||
_bulletsRemaining = 0;
|
||||
};
|
||||
};
|
||||
|
||||
if ((_fullMagazines == 0) && {_bulletsRemaining == 0}) exitWith {};
|
||||
|
||||
// Try to use existing container
|
||||
private _container = _unloadTo getVariable [QGVAR(container), objNull];
|
||||
if ((_container distance _unloadTo) > 4) then { _container = objNull; };
|
||||
if (isNull _container) then {
|
||||
_container = (nearestObjects [_unloadTo, ["groundWeaponHolder"], 4]) param [0, objNull];
|
||||
};
|
||||
|
||||
|
||||
if (isNull _container) then {
|
||||
// Create ground weapon holder container
|
||||
private _weaponRelPos = _unloadTo getRelPos RELATIVE_DIRECTION(270);
|
||||
_weaponRelPos set [2, ((getPosATL _unloadTo) select 2) + 0.05];
|
||||
_container = createVehicle ["groundWeaponHolder", [0, 0, 0], [], 0, "NONE"];
|
||||
// ToDo: Unload to ammo box??
|
||||
_unloadTo setVariable [QGVAR(container), container, true];
|
||||
_container setDir random [0, 180, 360];
|
||||
_container setPosATL _weaponRelPos;
|
||||
if ((_weaponRelPos select 2) < 0.5) then {
|
||||
_container setVectorUp (surfaceNormal _weaponRelPos);
|
||||
};
|
||||
TRACE_2("Creating NEW Container",_container,_weaponRelPos);
|
||||
};
|
||||
|
||||
TRACE_3("adding to container",_container,_fullMagazines,_bulletsRemaining);
|
||||
|
||||
if (_fullMagazines > 0) then {
|
||||
_container addMagazineAmmoCargo [_carryMag, _fullMagazines, _carryMaxAmmo];
|
||||
};
|
||||
if (_bulletsRemaining > 0) then {
|
||||
_container addMagazineAmmoCargo [_carryMag, 1, _bulletsRemaining];
|
||||
};
|
66
addons/csw/functions/fnc_reload_loadMagazine.sqf
Normal file
66
addons/csw/functions/fnc_reload_loadMagazine.sqf
Normal file
@ -0,0 +1,66 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Loads a magazine into a static weapon from a magazine carried by the player.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Vehicle <OBJECT>
|
||||
* 1: Turret <ARRAY>
|
||||
* 2: Unit Carried Magazine <STRING>
|
||||
* 3: Player <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [cursorTarget, [0], "ACE_csw_100Rnd_127x99_mag_red", player] call ace_csw_fnc_reload_loadMagazine
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_vehicle", "_turret", "_carryMag", "_unit"];
|
||||
TRACE_4("loadMagazine",_vehicle,_turret,_carryMag,_unit);
|
||||
|
||||
private _timeToLoad = 1;
|
||||
if (!isNull(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> QUOTE(ADDON) >> "ammoLoadTime")) then {
|
||||
_timeToLoad = getNumber(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> QUOTE(ADDON) >> "ammoLoadTime");
|
||||
};
|
||||
|
||||
private _displayName = format [localize LSTRING(loadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")];
|
||||
|
||||
private _onFinish = {
|
||||
(_this select 0) params ["_vehicle", "_turret", "_carryMag", "_unit"];
|
||||
TRACE_4("load progressBar finish",_vehicle,_turret,_carryMag,_unit);
|
||||
|
||||
([_vehicle, _turret, _carryMag, _unit] call FUNC(reload_canLoadMagazine)) params ["", "", "_neededAmmo", ""];
|
||||
if (_neededAmmo <= 0) exitWith { ERROR_1("Can't load ammo - %1",_this); };
|
||||
|
||||
// Figure out what we can add from the magazines we have
|
||||
private _bestAmmoToSend = -1;
|
||||
{
|
||||
_x params ["_xMag", "_xAmmo"];
|
||||
if (_xMag == _carryMag) then {
|
||||
if ((_bestAmmoToSend == -1) || {(_xAmmo > _bestAmmoToSend) && {_xAmmo <= _neededAmmo}}) then {
|
||||
_bestAmmoToSend = _xAmmo;
|
||||
};
|
||||
};
|
||||
} forEach (magazinesAmmo _unit);
|
||||
|
||||
if (_bestAmmoToSend == -1) exitWith {ERROR_2("No ammo [%1 - %2]?",_xMag,_bestAmmoToSend);};
|
||||
[_unit, _carryMag, _bestAmmoToSend] call EFUNC(common,removeSpecificMagazine);
|
||||
if (_bestAmmoToSend == 0) exitWith {};
|
||||
|
||||
TRACE_5("calling addTurretMag event",_vehicle,_turret,_unit,_carryMag,_bestAmmoToSend);
|
||||
[QGVAR(addTurretMag), [_vehicle, _turret, _unit, _carryMag, _bestAmmoToSend]] call CBA_fnc_globalEvent;
|
||||
};
|
||||
|
||||
|
||||
[
|
||||
TIME_PROGRESSBAR(_timeToLoad),
|
||||
[_vehicle, _turret, _carryMag, _unit],
|
||||
_onFinish,
|
||||
{TRACE_1("load progressBar fail",_this);},
|
||||
_displayName,
|
||||
{((_this select 0) call FUNC(reload_canLoadMagazine)) select 0},
|
||||
["isNotInside"]
|
||||
] call EFUNC(common,progressBar);
|
92
addons/csw/functions/fnc_staticWeaponInit.sqf
Normal file
92
addons/csw/functions/fnc_staticWeaponInit.sqf
Normal file
@ -0,0 +1,92 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: Brandon (TCVM)
|
||||
* Initializes weapon to disable weapon disassembling
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Weapon <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [weapon] call ace_csw_fnc_staticWeaponInit
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_staticWeapon"];
|
||||
private _typeOf = typeOf _staticWeapon;
|
||||
private _configEnabled = (getNumber (configFile >> "CfgVehicles" >> _typeOf >> "ace_csw" >> "enabled")) == 1;
|
||||
private _assemblyConfig = _configEnabled && {(getText (configFile >> "CfgVehicles" >> _typeOf >> "ace_csw" >> "disassembleWeapon")) != ""};
|
||||
TRACE_4("staticWeaponInit",_staticWeapon,_typeOf,_configEnabled,_assemblyConfig);
|
||||
|
||||
if (_configEnabled && {GVAR(ammoHandling) == 2}) then {
|
||||
TRACE_1("adding AI fired handler",_staticWeapon);
|
||||
_staticWeapon addEventHandler ["Fired", LINKFUNC(ai_handleFired)];
|
||||
};
|
||||
|
||||
TRACE_2("",local _staticWeapon,_staticWeapon turretLocal [0]);
|
||||
if (_configEnabled && {_staticWeapon turretLocal [0]}) then { // if turret is local to us, then handle mags/weapon
|
||||
[{
|
||||
params ["_staticWeapon"];
|
||||
if (!alive _staticWeapon) exitWith { TRACE_1("dead/deleted",_staticWeapon); };
|
||||
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
|
||||
TRACE_2("turretLocal",_staticWeapon,_assemblyMode);
|
||||
[_staticWeapon, [0], _assemblyMode] call FUNC(proxyWeapon);
|
||||
[_staticWeapon, _assemblyMode] call FUNC(staticWeaponInit_unloadExtraMags);
|
||||
}, [_staticWeapon]] call CBA_fnc_execNextFrame; // need to wait a frame to allow setting object vars during assembly
|
||||
};
|
||||
|
||||
if (_assemblyConfig) then {
|
||||
[{
|
||||
params ["_staticWeapon"];
|
||||
if (!alive _staticWeapon) exitWith { TRACE_1("dead/deleted",_staticWeapon); };
|
||||
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
|
||||
TRACE_2("assemblyConfig present",_staticWeapon,_assemblyMode);
|
||||
if (_assemblyMode) then { // Disable vanilla assembly if assemblyMode eanbled
|
||||
[QGVAR(disableVanillaAssembly), [_staticWeapon]] call CBA_fnc_localEvent;
|
||||
};
|
||||
}, [_staticWeapon]] call CBA_fnc_execNextFrame; // need to wait a frame to allow setting object vars during assembly
|
||||
};
|
||||
|
||||
// Add interactions for players
|
||||
if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then {
|
||||
GVAR(initializedStaticTypes) pushBack _typeOf;
|
||||
TRACE_1("Adding Actions",_typeOf);
|
||||
|
||||
if (_assemblyConfig) then {
|
||||
private _disassembleAction = [QGVAR(disassemble), localize LSTRING(DisassembleCSW_displayName), "", {call FUNC(assemble_pickupWeapon)}, {call FUNC(assemble_canPickupWeapon)}] call EFUNC(interact_menu,createAction);
|
||||
[_typeOf, 0, ["ACE_MainActions"], _disassembleAction] call EFUNC(interact_menu,addActionToClass);
|
||||
};
|
||||
|
||||
|
||||
private _ammoActionPath = [];
|
||||
private _magazineLocation = getText (configFile >> "CfgVehicles" >> _typeOf >> QUOTE(ADDON) >> "magazineLocation");
|
||||
private _condition = { //IGNORE_PRIVATE_WARNING ["_target", "_player"];
|
||||
// If magazine handling is enabled or weapon assembly/disassembly is enabled we enable ammo handling
|
||||
if ((GVAR(ammoHandling) == 0) && {!([false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]))}) exitWith { false };
|
||||
[_player, _target, ["isNotSwimming", "isNotSitting"]] call EFUNC(common,canInteractWith)
|
||||
};
|
||||
private _childenCode = {
|
||||
BEGIN_COUNTER(getActions); // can remove for final release
|
||||
private _ret = (call FUNC(reload_actionsLoad)) + (call FUNC(reload_actionsUnload));
|
||||
END_COUNTER(getActions);
|
||||
_ret
|
||||
};
|
||||
if (_configEnabled && {_magazineLocation != ""}) then {
|
||||
private _positionCode = compile _magazineLocation;
|
||||
private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode, [], _positionCode, 4] call EFUNC(interact_menu,createAction);
|
||||
_ammoActionPath = [_typeOf, 0, [], _ammoAction] call EFUNC(interact_menu,addActionToClass);
|
||||
} else {
|
||||
private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode] call EFUNC(interact_menu,createAction);
|
||||
_ammoActionPath = [_typeOf, 0, ["ACE_MainActions"], _ammoAction] call EFUNC(interact_menu,addActionToClass);
|
||||
};
|
||||
|
||||
if (["ACE_reload"] call EFUNC(common,isModLoaded)) then {
|
||||
// move reload's check ammo action to the ammo handling point (remove and re-add)
|
||||
[_typeOf, 0, ["ACE_MainActions", QEGVAR(reload,CheckAmmo)]] call EFUNC(interact_menu,removeActionFromClass);
|
||||
private _checkAmmoAction = [QGVAR(checkAmmo), localize ELSTRING(reload,checkAmmo), "", EFUNC(reload,checkAmmo), EFUNC(reload,canCheckAmmo)] call EFUNC(interact_menu,createAction);
|
||||
[_typeOf, 0, _ammoActionPath, _checkAmmoAction] call EFUNC(interact_menu,addActionToClass);
|
||||
};
|
||||
};
|
@ -0,0 +1,88 @@
|
||||
#include "script_component.hpp"
|
||||
/*
|
||||
* Author: Brandon (TCVM), PabstMirror
|
||||
* Dumps ammo to container
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Weapon <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [weapon] call ace_csw_fnc_staticWeaponInit_unloadExtraMags
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
params ["_staticWeapon"];
|
||||
TRACE_1("staticWeaponInit_unloadExtraMags",_staticWeapon);
|
||||
if (!alive _staticWeapon) exitWith {TRACE_1("dead/deleted",alive _staticWeapon);};
|
||||
|
||||
private _assemblyMode = [false, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 2]);
|
||||
private _emptyWeapon = _staticWeapon getVariable [QGVAR(emptyWeapon), false];
|
||||
TRACE_2("",_assemblyMode,_emptyWeapon);
|
||||
|
||||
if (!_assemblyMode) exitWith {};
|
||||
|
||||
private _desiredAmmo = getNumber (configFile >> "CfgVehicles" >> (typeOf _staticWeapon) >> QUOTE(ADDON) >> "desiredAmmo");
|
||||
private _storeExtraMagazines = GVAR(handleExtraMagazines);
|
||||
if (_emptyWeapon) then {
|
||||
_desiredAmmo = 0;
|
||||
_storeExtraMagazines = false;
|
||||
};
|
||||
TRACE_2("settings",_desiredAmmo,_storeExtraMagazines);
|
||||
|
||||
private _magsToRemove = [];
|
||||
private _loadedMagazineInfo = [];
|
||||
private _containerMagazineClassnames = [];
|
||||
private _containerMagazineCount = [];
|
||||
|
||||
{
|
||||
_x params ["_xMag", "_xTurret", "_xAmmo"];
|
||||
|
||||
private _carryMag = GVAR(vehicleMagCache) getVariable _xMag;
|
||||
if (isNil "_carryMag") then {
|
||||
private _groups = "getNumber (_x >> _xMag) == 1" configClasses (configFile >> QGVAR(groups));
|
||||
_carryMag = configName (_groups param [0, configNull]);
|
||||
GVAR(vehicleMagCache) setVariable [_xMag, _carryMag];
|
||||
TRACE_2("setting cache",_xMag,_carryMag);
|
||||
};
|
||||
if (_carryMag != "") then {
|
||||
if ((_desiredAmmo > 0) && {_loadedMagazineInfo isEqualTo []}) then {
|
||||
private _loadedMagAmmo = _desiredAmmo min _xAmmo;
|
||||
_loadedMagazineInfo = [_xMag, _xTurret, _loadedMagAmmo];
|
||||
_xAmmo = _xAmmo - _loadedMagAmmo;
|
||||
TRACE_1("",_loadedMagAmmo);
|
||||
};
|
||||
if (_xAmmo > 0) then {
|
||||
_magsToRemove pushBackUnique [_xMag, _xTurret];
|
||||
private _index = _containerMagazineClassnames find _carryMag;
|
||||
if (_index < 0) then {
|
||||
_index = _containerMagazineClassnames pushBack _carryMag;
|
||||
_containerMagazineCount pushBack 0;
|
||||
};
|
||||
_containerMagazineCount set [_index, (_containerMagazineCount select _index) + _xAmmo];
|
||||
};
|
||||
} else {
|
||||
if ((_xMag select [0,4]) != "fake") then { WARNING_1("Unable to unload [%1] - No matching carry mag",_xMag); };
|
||||
};
|
||||
} forEach (magazinesAllTurrets _staticWeapon);
|
||||
|
||||
|
||||
TRACE_1("Remove all loaded magazines",_magsToRemove);
|
||||
{
|
||||
_staticWeapon removeMagazinesTurret _x;
|
||||
if ((_loadedMagazineInfo select [0,2]) isEqualTo _x) then {
|
||||
TRACE_1("Re-add the starting mag",_loadedMagazineInfo);
|
||||
_staticWeapon addMagazineTurret _loadedMagazineInfo;
|
||||
};
|
||||
} forEach _magsToRemove;
|
||||
|
||||
|
||||
if (_storeExtraMagazines) then {
|
||||
TRACE_1("saving extra mags to container",_containerMagazineCount);
|
||||
{
|
||||
[_staticWeapon, _x, _containerMagazineCount select _forEachIndex] call FUNC(reload_handleReturnAmmo);
|
||||
} forEach _containerMagazineClassnames;
|
||||
};
|
1
addons/csw/functions/script_component.hpp
Normal file
1
addons/csw/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\csw\script_component.hpp"
|
43
addons/csw/initSettings.sqf
Normal file
43
addons/csw/initSettings.sqf
Normal file
@ -0,0 +1,43 @@
|
||||
// CBA Settings [ADDON: ace_csw]:
|
||||
|
||||
private _categoryArray = [format ["ACE %1", localize LSTRING(DisplayName)]];
|
||||
|
||||
[
|
||||
QGVAR(defaultAssemblyMode), "CHECKBOX",
|
||||
[LSTRING(defaultAssemblyMode_displayName), LSTRING(defaultAssemblyMode_description)],
|
||||
_categoryArray,
|
||||
false, // default value
|
||||
true, // isGlobal
|
||||
{[QGVAR(defaultAssemblyMode), _this] call EFUNC(common,cbaSettings_settingChanged)},
|
||||
true // Needs mission restart
|
||||
] call CBA_settings_fnc_init;
|
||||
|
||||
[
|
||||
QGVAR(handleExtraMagazines), "CHECKBOX",
|
||||
[LSTRING(handleExtraMagazines_displayName), LSTRING(handleExtraMagazines_description)],
|
||||
_categoryArray,
|
||||
true, // default value
|
||||
true, // isGlobal
|
||||
{[QGVAR(handleExtraMagazines), _this] call EFUNC(common,cbaSettings_settingChanged)},
|
||||
true // Needs mission restart
|
||||
] call CBA_settings_fnc_init;
|
||||
|
||||
[
|
||||
QGVAR(ammoHandling), "LIST",
|
||||
[LSTRING(ammoHandling_displayName), LSTRING(ammoHandling_description)],
|
||||
_categoryArray,
|
||||
[[0, 1, 2], [LELSTRING(common,Disabled), LELSTRING(common,playerOnly), LELSTRING(common,playersAndAI)], 2], // [_values, _valueTitles, _defaultIndex]
|
||||
true, // isGlobal
|
||||
{[QGVAR(ammoHandling), _this] call EFUNC(common,cbaSettings_settingChanged)},
|
||||
true // Needs mission restart
|
||||
] call CBA_settings_fnc_init;
|
||||
|
||||
[
|
||||
QGVAR(progressBarTimeCoefficent), "SLIDER",
|
||||
[LSTRING(progressBarTimeCoefficent_displayName), LSTRING(progressBarTimeCoefficent_description)],
|
||||
_categoryArray,
|
||||
[0,2,1,2], // [min, max, default value, trailing decimals (-1 for whole numbers only)]
|
||||
true, // isGlobal
|
||||
{[QGVAR(progressBarTimeCoefficent), _this] call EFUNC(common,cbaSettings_settingChanged)},
|
||||
false // Needs mission restart
|
||||
] call CBA_settings_fnc_init;
|
28
addons/csw/script_component.hpp
Normal file
28
addons/csw/script_component.hpp
Normal file
@ -0,0 +1,28 @@
|
||||
#define COMPONENT csw
|
||||
#define COMPONENT_BEAUTIFIED Crew-Served Weapons
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#define FAST_PROGRESSBARS
|
||||
#define DEBUG_MODE_FULL
|
||||
#define DISABLE_COMPILE_CACHE
|
||||
#define ENABLE_PERFORMANCE_COUNTERS
|
||||
|
||||
#ifdef DEBUG_ENABLED_CSW
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_CSW
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_CSW
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
||||
|
||||
|
||||
#define DISTANCE_FROM_GUN 1.5
|
||||
#define RELATIVE_DIRECTION(direction) [DISTANCE_FROM_GUN, direction]
|
||||
|
||||
#ifdef FAST_PROGRESSBARS
|
||||
#define TIME_PROGRESSBAR(X) ((X) * 0.075)
|
||||
#else
|
||||
#define TIME_PROGRESSBAR(X) ((X) * GVAR(progressBarTimeCoefficent))
|
||||
#endif
|
220
addons/csw/stringtable.xml
Normal file
220
addons/csw/stringtable.xml
Normal file
@ -0,0 +1,220 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="CSW">
|
||||
<Key ID="STR_ACE_CSW_displayName">
|
||||
<English>Crew Served Weapons</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_Tripod_displayName">
|
||||
<English>CSW Tripod</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_PlaceTripod_displayName">
|
||||
<English>Place Tripod</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_DisassembleCSW_displayName">
|
||||
<English>Disassemble</English>
|
||||
<Czech>Rozložit</Czech>
|
||||
<French>Démonter</French>
|
||||
<German>%1 demontieren</German>
|
||||
<Italian>Disassemblare</Italian>
|
||||
<Polish>Złóż</Polish>
|
||||
<Portuguese>Desmontar</Portuguese>
|
||||
<Russian>Разобрать</Russian>
|
||||
<Spanish>Desmonta</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_GetIn_displayName">
|
||||
<English>Get In</English>
|
||||
<Czech>Nastup</Czech>
|
||||
<French>Embarquer</French>
|
||||
<German>Einsteigen</German>
|
||||
<Italian>A bordo</Italian>
|
||||
<Polish>Wsiadać</Polish>
|
||||
<Portuguese>Entrar</Portuguese>
|
||||
<Russian>Войти</Russian>
|
||||
<Spanish>Entrar</Spanish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_loadX">
|
||||
<English>Load %1</English>
|
||||
<German>Lade %1</German>
|
||||
<Spanish>Load %1</Spanish>
|
||||
<Czech>Nabít %1</Czech>
|
||||
<French>Load %1</French>
|
||||
<Polish>Załaduj %1</Polish>
|
||||
<Italian>Load %1</Italian>
|
||||
<Russian>Загрузить %1</Russian>
|
||||
<Hungarian>Load %1</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_unloadX">
|
||||
<English>Unload %1</English>
|
||||
<German>Entlade %1</German>
|
||||
<Spanish>Unload %1</Spanish>
|
||||
<Czech>Vytáhnout zásobník z %1</Czech>
|
||||
<French>Unload %1</French>
|
||||
<Polish>Rozładuj %1</Polish>
|
||||
<Italian>Unload %1</Italian>
|
||||
<Russian>Разгрузить %1</Russian>
|
||||
<Hungarian>Unload %1</Hungarian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_actionLink">
|
||||
<English>Link %1</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_defaultAssemblyMode_displayName">
|
||||
<English>Advanced assembly</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_defaultAssemblyMode_description">
|
||||
<English>Use ace for Assemble/Disassemble of supported static weapons. Loaded ammo is reduced to a single magazine.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_handleExtraMagazines_displayName">
|
||||
<English>Save extra ammo</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_handleExtraMagazines_description">
|
||||
<English>Store extra magazines next to static weapon</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_ammoHandling_displayName">
|
||||
<English>Ammo handling</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_ammoHandling_description">
|
||||
<English>Allow loading and unloading magazines</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_aiReloading_displayName">
|
||||
<English>AI Reloading</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_aiReloading_description">
|
||||
<English>AI will attempt to reload static weapons with available ammo</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_progressBarTimeCoefficent_displayName">
|
||||
<English>Interaction Time Coefficent</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_progressBarTimeCoefficent_description">
|
||||
<English>Scales time required to assemble and reload static weapons</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_Pickup_displayName">
|
||||
<English>Pickup Tripod</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_Move_displayName">
|
||||
<English>Move Tripod</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_MountWeapon_displayName">
|
||||
<English>Mount Weapon</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_DisassembleCSW_progressBar">
|
||||
<English>Disassembling Gun...</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_AssembleCSW_progressBar">
|
||||
<English>Assembling Gun...</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_LoadingAmmo_progressBar">
|
||||
<English>Loading Ammo...</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_UnloadingAmmo_progressBar">
|
||||
<English>Unloading Ammo...</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_PickupTripod_progressBar">
|
||||
<English>Picking Up Tripod...</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_PlaceTripod_progressBar">
|
||||
<English>Placing Tripod...</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_eden_enableCSW">
|
||||
<English>Enable CSW</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_eden_enableCSW_tooltip">
|
||||
<English>Enables Crew Served ability on this weapon</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_genericDescription">
|
||||
<English>Used to reload crew served weapons</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_TripodFolded_displayName">
|
||||
<English>[CSW] Deployable Tripod</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_TripodLowFolded_displayName">
|
||||
<English>[CSW] Deployable Tripod (Low)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_mortarBaseplate_displayName">
|
||||
<English>[CSW] Mk6 Mortar Baseplate</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticMortarBag_displayName">
|
||||
<English>[CSW] Mk6 Mortar Tube</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticATWeapon_displayName">
|
||||
<English>[CSW] Mini-Spike Launcher (AT)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticAAWeapon_displayName">
|
||||
<English>[CSW] Mini-Spike Launcher (AA)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticHMGWeapon_displayName">
|
||||
<English>[CSW] XM312</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticAutoHMGWeapon_displayName">
|
||||
<English>[CSW] XM312A</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticHMGTallWeapon_displayName">
|
||||
<English>[CSW] XM312 (High)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticGMGWeapon_displayName">
|
||||
<English>[CSW] XM307</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticAutoGMGWeapon_displayName">
|
||||
<English>[CSW] XM307A</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticGMGTallWeapon_displayName">
|
||||
<English>[CSW] XM307 (High)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticATBag_displayName">
|
||||
<English>[CSW] Static Mini-Spike Launcher (AT)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticAABag_displayName">
|
||||
<English>[CSW] Static Mini-Spike Launcher (AA)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticHMGBag_displayName">
|
||||
<English>[CSW] Static XM312 Gun</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticAutoHMGBag_displayName">
|
||||
<English>[CSW] Static XM312 Gun (Autonomous)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticHMGTallBag_displayName">
|
||||
<English>[CSW] Static XM312 Gun (High)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticGMGBag_displayName">
|
||||
<English>[CSW] Static XM307 Gun</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticAutoGMGBag_displayName">
|
||||
<English>[CSW] Static XM307 Gun (Autonomous)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_StaticGMGTallBag_displayName">
|
||||
<English>[CSW] Static XM307 Gun (High)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_HMGStatic_displayName">
|
||||
<English>[CSW] HMG Static</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_GMGStatic_displayName">
|
||||
<English>[CSW] GMG Static</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_ATStatic_displayName">
|
||||
<English>[CSW] AT Static</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_AAStatic_displayName">
|
||||
<English>[CSW] AA Static</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_127x108_displayName">
|
||||
<English>[CSW] 12.7x108mm HMG Belt</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_127x99_displayName">
|
||||
<English>[CSW] 12.7x99mm HMG Belt</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_127x99_red_displayName">
|
||||
<English>[CSW] 12.7x99mm Tracer HMG Belt (Red)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_127x99_green_displayName">
|
||||
<English>[CSW] 12.7x99mm Tracer HMG Belt (Green)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_127x99_yellow_displayName">
|
||||
<English>[CSW] 12.7x99mm Tracer HMG Belt (Yellow)</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_GMGBelt_displayName">
|
||||
<English>[CSW] 20mm Grenade GMG Belt</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CSW_mag_127x108">
|
||||
<English>[CSW] 12.7 x 108 mm Ammo Belt</English>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
@ -85,6 +85,7 @@
|
||||
<Japanese>確認中のドッグタグを画面上で表示します</Japanese>
|
||||
<Italian>Display su schermo per il controllo delle piastrine</Italian>
|
||||
<Polish>Wyświetlacz ekranowy dla sprawdzania nieśmiertelników</Polish>
|
||||
<Russian>Экран для проверки жетонов</Russian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
1
addons/dragon/$PBOPREFIX$
Normal file
1
addons/dragon/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\dragon
|
11
addons/dragon/ACE_GuidanceConfig.hpp
Normal file
11
addons/dragon/ACE_GuidanceConfig.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
class EGVAR(missileguidance,AttackProfiles) {
|
||||
class DRAGON {
|
||||
name = CSTRING(dragonName);
|
||||
visualName = CSTRING(dragonName);
|
||||
description = CSTRING(dragonName);
|
||||
|
||||
onFired = QFUNC(onFired);
|
||||
functionName = QFUNC(attackProfile_DRAGON);
|
||||
};
|
||||
};
|
||||
|
147
addons/dragon/CfgAmmo.hpp
Normal file
147
addons/dragon/CfgAmmo.hpp
Normal file
@ -0,0 +1,147 @@
|
||||
class CfgAmmo {
|
||||
class ammo_Penetrator_Base;
|
||||
class M_Scalpel_AT;
|
||||
class Rocket_03_AP_F;
|
||||
|
||||
class GVAR(penetrator_super): ammo_Penetrator_Base {
|
||||
caliber = 60;
|
||||
warheadName = "HEAT";
|
||||
hit = 460;
|
||||
fuseDistance = 75;
|
||||
};
|
||||
|
||||
class GVAR(dragonBase): Rocket_03_AP_F {
|
||||
EGVAR(frag,skip) = 1;
|
||||
scope = 1;
|
||||
aiAmmoUsageFlags = "128+512";
|
||||
model = QPATHTOF(models\dragon.p3d);
|
||||
maxSpeed = 200;
|
||||
thrust = 300;
|
||||
initTime = 0.151;
|
||||
thrustTime = 0;
|
||||
sideAirFriction = 0.05;
|
||||
effectsMissile = "missile2";
|
||||
effectFlare = "";
|
||||
airFriction = 0.5;
|
||||
fuseDistance = 75;
|
||||
whistleDist = 2;
|
||||
|
||||
hit = 100;
|
||||
indirectHit = 9;
|
||||
indirectHitRange = 1;
|
||||
explosive = 0.8;
|
||||
timeToLive = 60;
|
||||
cost = 500;
|
||||
simulationStep = 0.005;
|
||||
maxControlRange = 1500;
|
||||
|
||||
class ace_missileguidance {
|
||||
minDeflection = 0;
|
||||
maxDeflection = 0;
|
||||
incDeflection = 0;
|
||||
|
||||
canVanillaLock = 0;
|
||||
|
||||
// Guidance type for munitions
|
||||
defaultSeekerType = "SACLOS";
|
||||
seekerTypes[] = { "SACLOS" };
|
||||
|
||||
defaultSeekerLockMode = "LOAL";
|
||||
seekerLockModes[] = { "LOAL", "LOBL" };
|
||||
|
||||
seekLastTargetPos = 0;
|
||||
seekerAngle = 30;
|
||||
seekerAccuracy = 1;
|
||||
|
||||
seekerMinRange = 65;
|
||||
seekerMaxRange = 1000;
|
||||
|
||||
correctionDistance = 30;
|
||||
missileLeadDistance = 0;
|
||||
offsetFromCrosshair[] = { 0, 0, 0 };
|
||||
|
||||
serviceInterval = 0.33; // how many seconds between pops
|
||||
serviceCharges = 32; // how many charges are in this missile
|
||||
serviceChargeAcceleration = 6.5;
|
||||
dragonSpeed = 100; // meters per second
|
||||
|
||||
defaultAttackProfile = "DRAGON";
|
||||
attackProfiles[] = {"DRAGON"};
|
||||
};
|
||||
};
|
||||
|
||||
class GVAR(super) : GVAR(dragonBase) {
|
||||
submunitionAmmo = QGVAR(penetrator_super);
|
||||
submunitionDirectionType = "SubmunitionModelDirection";
|
||||
submunitionInitSpeed = 1000;
|
||||
submunitionParentSpeedCoef = 0;
|
||||
submunitionInitialOffset[] = { 0, 0, -0.2 };
|
||||
|
||||
class ace_missileguidance {
|
||||
enabled = 1;
|
||||
|
||||
// Guidance type for munitions
|
||||
defaultSeekerType = "SACLOS";
|
||||
seekerTypes[] = { "SACLOS" };
|
||||
|
||||
defaultSeekerLockMode = "LOAL";
|
||||
seekerLockModes[] = { "LOAL", "LOBL" };
|
||||
|
||||
seekLastTargetPos = 0;
|
||||
seekerAngle = 30;
|
||||
seekerAccuracy = 1;
|
||||
|
||||
seekerMinRange = 30;
|
||||
seekerMaxRange = 1500;
|
||||
|
||||
correctionDistance = 30;
|
||||
missileLeadDistance = 0;
|
||||
|
||||
serviceInterval = 0.33; // how many seconds between pops
|
||||
serviceCharges = 60; // how many charges are in this missile
|
||||
serviceChargeAcceleration = 6.5;
|
||||
dragonSpeed = 100; // meters per second
|
||||
|
||||
defaultAttackProfile = "DRAGON";
|
||||
attackProfiles[] = {"DRAGON"};
|
||||
};
|
||||
};
|
||||
|
||||
class ShellBase;
|
||||
class GVAR(serviceCharge) : ShellBase {
|
||||
hit = 1;
|
||||
indirectHit = 2;
|
||||
indirectHitRange = 1;
|
||||
typicalSpeed = 100;
|
||||
explosive = 1;
|
||||
cost = 300;
|
||||
model = "\A3\Weapons_F\empty.p3d";
|
||||
airFriction = 0;
|
||||
timeToLive = 1;
|
||||
explosionTime = 0.001;
|
||||
soundFly[] = {"",1,1};
|
||||
soundEngine[] = {"",1,4};
|
||||
CraterEffects = "";
|
||||
explosionEffects = QGVAR(serviceExplosion);
|
||||
hitarmor[] = {"soundDefault1", 1};
|
||||
hitbuilding[] = {"soundDefault1", 1};
|
||||
hitconcrete[] = {"soundDefault1", 1};
|
||||
hitdefault[] = {"soundDefault1", 1};
|
||||
hitfoliage[] = {"soundDefault1", 1};
|
||||
hitglass[] = {"soundDefault1", 1};
|
||||
hitglassarmored[] = {"soundDefault1", 1};
|
||||
hitgroundhard[] = {"soundDefault1", 1};
|
||||
hitgroundsoft[] = {"soundDefault1", 1};
|
||||
hitiron[] = {"soundDefault1", 1};
|
||||
hitman[] = {"soundDefault1", 1};
|
||||
hitmetal[] = {"soundDefault1", 1};
|
||||
hitmetalplate[] = {"soundDefault1", 1};
|
||||
hitplastic[] = {"soundDefault1", 1};
|
||||
hitrubber[] = {"soundDefault1", 1};
|
||||
hitwood[] = {"soundDefault1", 1};
|
||||
sounddefault1[] = {QPATHTOF(sounds\service_charge.wss), 56.2341, 1, 1800};
|
||||
soundHit[] = {QPATHTOF(sounds\service_charge.wss),56.23413,1,1800};
|
||||
multiSoundHit[] = {"soundDefault1", 1};
|
||||
};
|
||||
};
|
||||
|
17
addons/dragon/CfgEventHandlers.hpp
Normal file
17
addons/dragon/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,17 @@
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
16
addons/dragon/CfgMagazines.hpp
Normal file
16
addons/dragon/CfgMagazines.hpp
Normal file
@ -0,0 +1,16 @@
|
||||
class CfgMagazines {
|
||||
class 1Rnd_GAA_missiles;
|
||||
class GVAR(super) : 1Rnd_GAA_missiles {
|
||||
sound[] = {};
|
||||
soundFly[] = {};
|
||||
soundHit[] = {};
|
||||
model = QPATHTOF(models\dragon.p3d);
|
||||
ammo = QGVAR(super);
|
||||
initSpeed = 120;
|
||||
scope = 1;
|
||||
displayName = CSTRING(dragonName);
|
||||
displayNameShort = CSTRING(dragonName);
|
||||
descriptionShort = CSTRING(dragonDescription);
|
||||
};
|
||||
};
|
||||
|
149
addons/dragon/CfgVehicles.hpp
Normal file
149
addons/dragon/CfgVehicles.hpp
Normal file
@ -0,0 +1,149 @@
|
||||
class CfgVehicles {
|
||||
class LandVehicle;
|
||||
class StaticWeapon: LandVehicle {
|
||||
class Turrets;
|
||||
class MainTurret;
|
||||
class ACE_Actions {
|
||||
class ACE_MainActions {};
|
||||
};
|
||||
};
|
||||
|
||||
class StaticATWeapon: StaticWeapon {};
|
||||
|
||||
class GVAR(staticBase): StaticATWeapon {
|
||||
scope = 1;
|
||||
author = ECSTRING(common,ACETeam);
|
||||
displayname = CSTRING(dragonName);
|
||||
side = 1;
|
||||
faction = "BLU_F";
|
||||
crew = "B_soldier_f";
|
||||
model = QPATHTOF(models\ace_m47_static.p3d);
|
||||
picture = "\A3\Static_F_Gamma\data\UI\gear_StaticTurret_AT_CA.paa";
|
||||
UiPicture = "\A3\Static_F_Gamma\data\UI\gear_StaticTurret_AT_CA.paa";
|
||||
icon = "\A3\Static_F_Gamma\data\UI\map_StaticTurret_AT_CA.paa";
|
||||
threat[] = {0.7,1.0,0.1};
|
||||
cost = 150000;
|
||||
class Damage {
|
||||
tex[] = {};
|
||||
mat[] = {
|
||||
"a3\static_f_gamma\data\staticturret_01.rvmat",
|
||||
"a3\static_f_gamma\data\staticturret_01_damage.rvmat",
|
||||
"a3\static_f_gamma\data\staticturret_01_destruct.rvmat",
|
||||
"a3\static_f_gamma\data\staticturret_02.rvmat",
|
||||
"a3\static_f_gamma\data\staticturret_02_damage.rvmat",
|
||||
"a3\static_f_gamma\data\staticturret_02_destruct.rvmat",
|
||||
"a3\weapons_f_beta\launchers\titan\data\titan_launcher.rvmat",
|
||||
"a3\weapons_f_beta\launchers\titan\data\titan_launcher_damage.rvmat",
|
||||
"a3\weapons_f_beta\launchers\titan\data\titan_launcher_destruct.rvmat",
|
||||
"a3\weapons_f_beta\launchers\titan\data\titan_mtube.rvmat",
|
||||
"a3\weapons_f_beta\launchers\titan\data\titan_mtube_damage.rvmat",
|
||||
"a3\weapons_f_beta\launchers\titan\data\titan_mtube_destruct.rvmat"
|
||||
};
|
||||
};
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
optics = 1;
|
||||
turretInfoType = "RscWeaponEmpty";
|
||||
gunnerOpticsModel = QPATHTOF(models\optics_m47.p3d);
|
||||
minElev = -30;
|
||||
maxElev = 20;
|
||||
weapons[] = { QGVAR(dummyStatic) };
|
||||
magazines[] = { QGVAR(super) };
|
||||
|
||||
gunnerAction = "gunner_static_low01";
|
||||
gunnergetInAction = "";
|
||||
gunnergetOutAction = "";
|
||||
|
||||
discreteDistance[] = {};
|
||||
discreteDistanceInitIndex = 0;
|
||||
|
||||
displayName = CSTRING(dragonName);
|
||||
|
||||
class ViewOptics {
|
||||
initAngleX = 0;
|
||||
minAngleX = -30;
|
||||
maxAngleX = 30;
|
||||
initAngleY = 5;
|
||||
minAngleY = -100;
|
||||
maxAngleY = 100;
|
||||
initFov = 0.055;
|
||||
minFov = 0.055; // 6 degree FOV
|
||||
maxFov = 0.055;
|
||||
visionMode[] = {"Normal"};
|
||||
thermalMode[] = {0};
|
||||
};
|
||||
gunnerRightHandAnimName = "OtocHlaven_shake";
|
||||
gunnerLeftHandAnimName = "OtocHlaven_shake";
|
||||
gunBeg = "spice rakety";
|
||||
gunEnd = "konec rakety";
|
||||
memoryPointGunnerOptics = "look";
|
||||
};
|
||||
};
|
||||
class AnimationSources {
|
||||
class rest_rotate {
|
||||
source="user";
|
||||
animPeriod=0.00001;
|
||||
initPhase=-0.35;
|
||||
maxValue="3.60";
|
||||
minValue="-3.60";
|
||||
};
|
||||
class optic_hide {
|
||||
source="user";
|
||||
animPeriod=0.0001;
|
||||
initPhase=1;
|
||||
maxValue="1";
|
||||
minValue="0";
|
||||
};
|
||||
class missile_hide {
|
||||
source="user";
|
||||
animPeriod=0.0001;
|
||||
initPhase=0;
|
||||
maxValue="1";
|
||||
minValue="0";
|
||||
};
|
||||
};
|
||||
soundGetOut[] = {"A3\sounds_f\dummysound",0.001,1,5};
|
||||
soundGetIn[] = {"A3\sounds_f\dummysound",0.00031622776,1,5};
|
||||
armorStructural = 10.0;
|
||||
|
||||
class ACE_CSW {
|
||||
disassembleTo = QGVAR(super);
|
||||
};
|
||||
|
||||
class ACE_Actions: ACE_Actions {
|
||||
class ACE_MainActions: ACE_MainActions {
|
||||
displayName = CSTRING(dragonName);
|
||||
class GVAR(pickUp) {
|
||||
displayName = ECSTRING(csw,Pickup_displayName);
|
||||
condition = QUOTE(call FUNC(canPickupTripod));
|
||||
statement = QUOTE(call EFUNC(csw,assemble_pickupTripod));
|
||||
};
|
||||
class GVAR(attachSight) {
|
||||
displayName = CSTRING(attachSight);
|
||||
condition = QUOTE(call FUNC(sightCanAttach));
|
||||
statement = QUOTE(call FUNC(sightAttach));
|
||||
};
|
||||
class GVAR(detachSight) {
|
||||
displayName = CSTRING(detachSight);
|
||||
condition = QUOTE(call FUNC(sightCanDetach));
|
||||
statement = QUOTE(call FUNC(sightDetach));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
class GVAR(staticAssembled): GVAR(staticBase) {
|
||||
scope = 2;
|
||||
class AnimationSources: AnimationSources {
|
||||
class optic_hide: optic_hide {
|
||||
initPhase = 0;
|
||||
};
|
||||
};
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
weapons[] = { QGVAR(superStatic) };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
90
addons/dragon/CfgWeapons.hpp
Normal file
90
addons/dragon/CfgWeapons.hpp
Normal file
@ -0,0 +1,90 @@
|
||||
class CfgWeapons {
|
||||
class launch_Titan_base;
|
||||
class Launcher_Base_F;
|
||||
class missiles_titan;
|
||||
class Binocular;
|
||||
class Default;
|
||||
class missiles_titan_static: missiles_titan {
|
||||
class WeaponSlotsInfo;
|
||||
};
|
||||
class launch_Titan_F: launch_Titan_base {
|
||||
class WeaponSlotsInfo;
|
||||
};
|
||||
|
||||
class GVAR(super): launch_Titan_F {
|
||||
model = QPATHTOF(models\ace_m47_magazine.p3d);
|
||||
picture = QPATHTOF(data\m47_dragon_item_ca.paa);
|
||||
magazines[] = {};
|
||||
displayName = CSTRING(dragonName);
|
||||
descriptionShort = CSTRING(dragonDescription);
|
||||
scope = 2;
|
||||
|
||||
class ACE_CSW {
|
||||
type = "mount";
|
||||
deployTime = 2;
|
||||
pickupTime = 2;
|
||||
deploy = QGVAR(staticBase);
|
||||
};
|
||||
|
||||
class WeaponSlotsInfo: WeaponSlotsInfo {
|
||||
mass = 253;
|
||||
};
|
||||
modes[] = {};
|
||||
};
|
||||
|
||||
class GVAR(superStatic): missiles_titan_static {
|
||||
EGVAR(overpressure,angle) = 90;
|
||||
EGVAR(overpressure,range) = 30;
|
||||
EGVAR(overpressure,damage) = 0.85;
|
||||
|
||||
initSpeed = 120;
|
||||
|
||||
displayName = CSTRING(dragonName);
|
||||
descriptionShort = CSTRING(dragonDescription);
|
||||
magazines[] = { QGVAR(super) };
|
||||
};
|
||||
|
||||
// need a weapon in order to rotate turret
|
||||
class GVAR(dummyStatic): Default {
|
||||
cursor = "";
|
||||
cursorAim = "";
|
||||
scope = 1;
|
||||
displayName = CSTRING(dragonName);
|
||||
reloadTime = 0;
|
||||
canLock = 0;
|
||||
optics = 0;
|
||||
enableAttack = 0;
|
||||
};
|
||||
|
||||
class GVAR(sight): Binocular {
|
||||
displayName = CSTRING(sightName);
|
||||
model = QPATHTOF(models\ace_m47_optic.p3d);
|
||||
picture = QPATHTOF(data\m47_daysight_item_ca.paa);
|
||||
optics = 1;
|
||||
weaponInfoType = "RscWeaponEmpty";
|
||||
modelOptics = QPATHTOF(models\optics_m47);
|
||||
reloadaction = "";
|
||||
showSwitchAction = 1;
|
||||
useAsBinocular = 1;
|
||||
uipicture = "";
|
||||
descriptionShort = CSTRING(sightDescription);
|
||||
ace_disposable = 0;
|
||||
magazines[] = {};
|
||||
type = 4096;
|
||||
opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"};
|
||||
opticsZoomMin = 0.055;
|
||||
opticsZoomMax = 0.055;
|
||||
scope = 2;
|
||||
class ACE_CSW {
|
||||
type = "weapon";
|
||||
deployTime = 2;
|
||||
pickupTime = 1;
|
||||
class assembleTo {
|
||||
GVAR(super_noSight) = QGVAR(super_sight);
|
||||
};
|
||||
};
|
||||
class WeaponSlotsInfo {
|
||||
mass = 68;
|
||||
};
|
||||
};
|
||||
};
|
12
addons/dragon/README.md
Normal file
12
addons/dragon/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
ace_dragon
|
||||
===================
|
||||
|
||||
Adds M47 Dragon Missile.
|
||||
|
||||
|
||||
## Maintainers
|
||||
|
||||
The people responsible for merging changes to this component or answering potential questions.
|
||||
|
||||
- [Brandon-TCVM](https://github.com/TheCandianVendingMachine)
|
||||
|
7
addons/dragon/XEH_PREP.hpp
Normal file
7
addons/dragon/XEH_PREP.hpp
Normal file
@ -0,0 +1,7 @@
|
||||
PREP(attackProfile_DRAGON);
|
||||
PREP(canPickupTripod);
|
||||
PREP(onFired);
|
||||
PREP(sightAttach);
|
||||
PREP(sightCanAttach);
|
||||
PREP(sightCanDetach);
|
||||
PREP(sightDetach);
|
37
addons/dragon/XEH_postInit.sqf
Normal file
37
addons/dragon/XEH_postInit.sqf
Normal file
@ -0,0 +1,37 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
[QGVAR(detachSight), LINKFUNC(sightDetach)] call CBA_fnc_addEventHandler;
|
||||
[QGVAR(attachSight), LINKFUNC(sightAttach)] call CBA_fnc_addEventHandler;
|
||||
|
||||
["vehicle", {
|
||||
params ["","_vehicle"];
|
||||
TRACE_2("vehicle change",_vehicle,typeOf _vehicle);
|
||||
if (!(_vehicle isKindOf QGVAR(staticBase))) exitWith {};
|
||||
|
||||
_vehicle animate ["rest_rotate", 0];
|
||||
|
||||
if (isNil QGVAR(pfID)) then {GVAR(pfID) = -1};
|
||||
[GVAR(pfID)] call CBA_fnc_removePerFrameHandler;
|
||||
|
||||
private _lastView = cameraView;
|
||||
if (!(_lastView in ["INTERNAL", "EXTERNAL"])) then { _lastView == "INTERNAL"; };
|
||||
|
||||
GVAR(pfID) = [{
|
||||
params ["_args"];
|
||||
(_this select 0) params ["_vehicle", "_lastView"];
|
||||
|
||||
if ((!alive _vehicle) || {!alive ACE_player} || {(vehicle ACE_player) != _vehicle}) exitWith {
|
||||
TRACE_1("exiting PFEH",GVAR(pfID));
|
||||
[GVAR(pfID)] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
if (cameraView in ["INTERNAL", "EXTERNAL"]) then {
|
||||
_args set [1, cameraView];
|
||||
} else {
|
||||
if ((cameraOn == _vehicle) && {!(_vehicle getVariable [QGVAR(sightAttached), ((typeOf _vehicle) == QGVAR(staticAssembled))])}) then {
|
||||
_vehicle switchCamera _lastView;
|
||||
};
|
||||
};
|
||||
}, 0, [_vehicle, _lastView]] call CBA_fnc_addPerFrameHandler;
|
||||
TRACE_1("started PFEH",GVAR(pfID));
|
||||
}, true] call CBA_fnc_addPlayerEventHandler;
|
10
addons/dragon/XEH_preInit.sqf
Normal file
10
addons/dragon/XEH_preInit.sqf
Normal file
@ -0,0 +1,10 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP_RECOMPILE_START;
|
||||
#include "XEH_PREP.hpp"
|
||||
PREP_RECOMPILE_END;
|
||||
|
||||
ADDON = true;
|
||||
|
4
addons/dragon/XEH_preStart.sqf
Normal file
4
addons/dragon/XEH_preStart.sqf
Normal file
@ -0,0 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
||||
|
BIN
addons/dragon/anim/M47.rtm
Normal file
BIN
addons/dragon/anim/M47.rtm
Normal file
Binary file not shown.
119
addons/dragon/anim/model.cfg
Normal file
119
addons/dragon/anim/model.cfg
Normal file
@ -0,0 +1,119 @@
|
||||
class cfgSkeletons {
|
||||
class OFP2_ManSkeleton {
|
||||
isDiscrete = 0;
|
||||
skeletonInherit = "";
|
||||
skeletonBones[] = {
|
||||
"Pelvis","",
|
||||
"Spine","Pelvis",
|
||||
"Spine1","Spine",
|
||||
"Spine2","Spine1",
|
||||
"Spine3","Spine2",
|
||||
"camera","Pelvis",// case has changed for arma3
|
||||
"weapon","Spine1",
|
||||
"launcher","Spine1",
|
||||
"Neck","Spine3",
|
||||
"Neck1","Neck",
|
||||
"Head","Neck1", //Head skeleton in hierarchy
|
||||
//Left upper side
|
||||
"LeftShoulder","Spine3",
|
||||
"LeftArm","LeftShoulder",
|
||||
"LeftArmRoll","LeftArm",
|
||||
"LeftForeArm","LeftArmRoll",
|
||||
"LeftForeArmRoll","LeftForeArm",
|
||||
"LeftHand","LeftForeArmRoll",
|
||||
"LeftHandRing","LeftHand",
|
||||
"LeftHandRing1","LeftHandRing",
|
||||
"LeftHandRing2","LeftHandRing1",
|
||||
"LeftHandRing3","LeftHandRing2",
|
||||
"LeftHandPinky1","LeftHandRing",
|
||||
"LeftHandPinky2","LeftHandPinky1",
|
||||
"LeftHandPinky3","LeftHandPinky2",
|
||||
"LeftHandMiddle1","LeftHand",
|
||||
"LeftHandMiddle2","LeftHandMiddle1",
|
||||
"LeftHandMiddle3","LeftHandMiddle2",
|
||||
"LeftHandIndex1","LeftHand",
|
||||
"LeftHandIndex2","LeftHandIndex1",
|
||||
"LeftHandIndex3","LeftHandIndex2",
|
||||
"LeftHandThumb1","LeftHand",
|
||||
"LeftHandThumb2","LeftHandThumb1",
|
||||
"LeftHandThumb3","LeftHandThumb2",
|
||||
//Right upper side
|
||||
"RightShoulder","Spine3",
|
||||
"RightArm","RightShoulder",
|
||||
"RightArmRoll","RightArm",
|
||||
"RightForeArm","RightArmRoll",
|
||||
"RightForeArmRoll","RightForeArm",
|
||||
"RightHand","RightForeArmRoll",
|
||||
"RightHandRing","RightHand",
|
||||
"RightHandRing1","RightHandRing",
|
||||
"RightHandRing2","RightHandRing1",
|
||||
"RightHandRing3","RightHandRing2",
|
||||
"RightHandPinky1","RightHandRing",
|
||||
"RightHandPinky2","RightHandPinky1",
|
||||
"RightHandPinky3","RightHandPinky2",
|
||||
"RightHandMiddle1","RightHand",
|
||||
"RightHandMiddle2","RightHandMiddle1",
|
||||
"RightHandMiddle3","RightHandMiddle2",
|
||||
"RightHandIndex1","RightHand",
|
||||
"RightHandIndex2","RightHandIndex1",
|
||||
"RightHandIndex3","RightHandIndex2",
|
||||
"RightHandThumb1","RightHand",
|
||||
"RightHandThumb2","RightHandThumb1",
|
||||
"RightHandThumb3","RightHandThumb2",
|
||||
//Left lower side
|
||||
"LeftUpLeg","Pelvis",
|
||||
"LeftUpLegRoll","LeftUpLeg",
|
||||
"LeftLeg","LeftUpLegRoll",
|
||||
"LeftLegRoll","LeftLeg",
|
||||
"LeftFoot","LeftLegRoll",
|
||||
"LeftToeBase","LeftFoot",
|
||||
//Right lower side
|
||||
"RightUpLeg","Pelvis",
|
||||
"RightUpLegRoll","RightUpLeg",
|
||||
"RightLeg","RightUpLegRoll",
|
||||
"RightLegRoll","RightLeg",
|
||||
"RightFoot","RightLegRoll",
|
||||
"RightToeBase","RightFoot",
|
||||
//New facial features arma3 only
|
||||
"Face_Hub","Head",
|
||||
"Face_Jawbone","Face_Hub",
|
||||
"Face_Jowl","Face_Jawbone",
|
||||
"Face_chopRight","Face_Jawbone",
|
||||
"Face_chopLeft","Face_Jawbone",
|
||||
"Face_LipLowerMiddle","Face_Jawbone",
|
||||
"Face_LipLowerLeft","Face_Jawbone",
|
||||
"Face_LipLowerRight","Face_Jawbone",
|
||||
"Face_Chin","Face_Jawbone",
|
||||
"Face_Tongue","Face_Jawbone",
|
||||
"Face_CornerRight","Face_Hub",
|
||||
"Face_CheekSideRight","Face_CornerRight",
|
||||
"Face_CornerLeft","Face_Hub",
|
||||
"Face_CheekSideLeft","Face_CornerLeft",
|
||||
"Face_CheekFrontRight","Face_Hub",
|
||||
"Face_CheekFrontLeft","Face_Hub",
|
||||
"Face_CheekUpperRight","Face_Hub",
|
||||
"Face_CheekUpperLeft","Face_Hub",
|
||||
"Face_LipUpperMiddle","Face_Hub",
|
||||
"Face_LipUpperRight","Face_Hub",
|
||||
"Face_LipUpperLeft","Face_Hub",
|
||||
"Face_NostrilRight","Face_Hub",
|
||||
"Face_NostrilLeft","Face_Hub",
|
||||
"Face_Forehead","Face_Hub",
|
||||
"Face_BrowFrontRight","Face_Forehead",
|
||||
"Face_BrowFrontLeft","Face_Forehead",
|
||||
"Face_BrowMiddle","Face_Forehead",
|
||||
"Face_BrowSideRight","Face_Forehead",
|
||||
"Face_BrowSideLeft","Face_Forehead",
|
||||
"Face_Eyelids","Face_Hub",
|
||||
"Face_EyelidUpperRight","Face_Hub",
|
||||
"Face_EyelidUpperLeft","Face_Hub",
|
||||
"Face_EyelidLowerRight","Face_Hub",
|
||||
"Face_EyelidLowerLeft","Face_Hub",
|
||||
"EyeLeft","Face_Hub",
|
||||
"EyeRight","Face_Hub"
|
||||
};// end of skeleton array
|
||||
// location of pivot points (local axes) for hierarchical animation
|
||||
pivotsModel="A3\anims_f\data\skeleton\SkeletonPivots.p3d";
|
||||
};
|
||||
};
|
||||
|
42
addons/dragon/config.cpp
Normal file
42
addons/dragon/config.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
name = COMPONENT_NAME;
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common","ace_missileguidance","ace_hot","ace_csw"};
|
||||
author = ECSTRING(common,ACETeam);
|
||||
authors[] = {"Brandon (TCVM)"};
|
||||
url = ECSTRING(main,URL);
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
#include "ACE_GuidanceConfig.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgMagazines.hpp"
|
||||
#include "CfgAmmo.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
|
||||
class GVAR(serviceExplosion) {
|
||||
class Light1 {
|
||||
simulation = "light";
|
||||
type = "GrenadeExploLight";
|
||||
position[] = {0,0,0};
|
||||
intensity = 0.005;
|
||||
interval = 1;
|
||||
lifeTime = 0.5;
|
||||
};
|
||||
class GrenadeSmoke1 {
|
||||
simulation = "particles";
|
||||
type = "ImpactSmoke2";
|
||||
position[] = {0,0,0};
|
||||
intensity = 0.15;
|
||||
interval = 0.1;
|
||||
lifeTime = 0.5;
|
||||
};
|
||||
};
|
||||
|
81
addons/dragon/data/M47.rvmat
Normal file
81
addons/dragon/data/M47.rvmat
Normal file
@ -0,0 +1,81 @@
|
||||
class StageTI {
|
||||
texture="z\ace\addons\dragon\data\m47_ti_ca.paa";
|
||||
};
|
||||
ambient[]={0.958,0.984,1,1};
|
||||
diffuse[]={0.958,0.984,1,1};
|
||||
forcedDiffuse[]={0,0,0,0};
|
||||
emmisive[]={0,0,0,1};
|
||||
specular[]={0.153,0.169,0.111,1};
|
||||
specularPower=90;
|
||||
PixelShaderID="Super";
|
||||
VertexShaderID="Super";
|
||||
class Stage1 {
|
||||
texture="z\ace\addons\dragon\data\m47_nohq.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage2 {
|
||||
texture="a3\weapons_f\Data\DetailMaps\Metal_rough_DT.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage3 {
|
||||
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage4 {
|
||||
texture="z\ace\addons\dragon\data\m47_as.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage5 {
|
||||
texture="z\ace\addons\dragon\data\m47_smdi.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage6 {
|
||||
texture="#(ai,32,128,1)fresnel(4.01,2.86)";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage7 {
|
||||
texture="a3\data_f\env_land_co.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
81
addons/dragon/data/M47mis.rvmat
Normal file
81
addons/dragon/data/M47mis.rvmat
Normal file
@ -0,0 +1,81 @@
|
||||
class StageTI {
|
||||
texture="z\ace\addons\dragon\data\m47_ti_ca.paa";
|
||||
};
|
||||
ambient[]={0.989,1,0.958,1};
|
||||
diffuse[]={0.989,1,0.958,1};
|
||||
forcedDiffuse[]={0,0,0,0};
|
||||
emmisive[]={0,0,0,1};
|
||||
specular[]={0.159,0.212,0.196,1};
|
||||
specularPower=90;
|
||||
PixelShaderID="Super";
|
||||
VertexShaderID="Super";
|
||||
class Stage1 {
|
||||
texture="z\ace\addons\dragon\data\m47mis_nohq.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage2 {
|
||||
texture="a3\weapons_f\Data\DetailMaps\Metal_rough_DT.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage3 {
|
||||
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage4 {
|
||||
texture="#(argb,8,8,3)color(1,1,1,1,AS)";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage5 {
|
||||
texture="z\ace\addons\dragon\data\m47mis_smdi.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage6 {
|
||||
texture="#(ai,32,128,1)fresnel(4.01,2.86)";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
||||
class Stage7 {
|
||||
texture="a3\data_f\env_land_co.paa";
|
||||
uvSource="tex";
|
||||
class uvTransform {
|
||||
aside[]={1,0,0};
|
||||
up[]={0,1,0};
|
||||
dir[]={0,0,1};
|
||||
pos[]={0,0,0};
|
||||
};
|
||||
};
|
BIN
addons/dragon/data/dragon_text.paa
Normal file
BIN
addons/dragon/data/dragon_text.paa
Normal file
Binary file not shown.
BIN
addons/dragon/data/m47_as.paa
Normal file
BIN
addons/dragon/data/m47_as.paa
Normal file
Binary file not shown.
BIN
addons/dragon/data/m47_co.paa
Normal file
BIN
addons/dragon/data/m47_co.paa
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user