Merge pull request #1 from acemod/master

Stream merge
This commit is contained in:
PiZZAD0X
2019-08-21 11:33:53 -07:00
committed by GitHub
587 changed files with 11822 additions and 5529 deletions

View File

@ -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>
@ -60,6 +61,7 @@ Clon1998 <ps.patti1998@gmail.com>
Codingboy
Coren <coren4@gmail.com>
Crusty
C0kkie
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
Dimaslg <dimaslg@telecable.es>
diwako

View File

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

View File

@ -47,8 +47,8 @@ if (!hasInterface) exitWith {};
[QEGVAR(medical,pain), { // 0->1.0, 0.5->1.05, 1->1.1
linearConversion [0, 1, (_this getVariable [QEGVAR(medical,pain), 0]), 1, 1.1, true];
}] call FUNC(addDutyFactor);
[QEGVAR(medical,bloodVolume), { // 100->1.0, 90->1.1, 80->1.2
linearConversion [6, 0, (_this getVariable [QEGVAR(medical,bloodVolume), 100]), 1, 2, true];
[QEGVAR(medical,bloodVolume), { // 6->1.0, 5->1.167, 4->1.33
linearConversion [6, 0, (_this getVariable [QEGVAR(medical,bloodVolume), 6]), 1, 2, true];
}] call FUNC(addDutyFactor);
};
if (["ACE_Dragging"] call EFUNC(common,isModLoaded)) then {

View File

@ -10,5 +10,6 @@ PREP_RECOMPILE_END;
GVAR(staminaBarWidth) = 10 * (((safezoneW / safezoneH) min 1.2) / 40);
GVAR(dutyList) = [[], []];
GVAR(setAnimExclusions) = [];
ADDON = true;

View File

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

View File

@ -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,24 +119,29 @@
<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>
<German>Verwacklungsfaktor</German>
<Japanese>手ぶれ因数</Japanese>
<Chinesesimp>抖动因数</Chinesesimp>
<Chinese>抖動因素</Chinese>
<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>
<German>Beeinflusst den Faktor, wie ruhig man eine Waffe halten kann. Ein höherer Wert bedeutet weniger Stabilisierung</German>
<Japanese>武器を持つ手のぶれ度合いを設定します。 値が高ければ高いほど、手ぶれが強くなります。</Japanese>
<Chinesesimp>影响手持武器的晃动程度,数值越高,抖动的越厉害.</Chinesesimp>
<Chinese>影響手持武器晃動程度,數值越高抖動越厲害</Chinese>
<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 +153,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 +165,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 +177,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 +189,7 @@
<Italian>Mostra la barra della stamina.</Italian>
<Chinese>顯示體力條</Chinese>
<Chinesesimp>显示体力条</Chinesesimp>
<Russian>Показывает шкалу усталости.</Russian>
</Key>
</Package>
</Project>

View File

@ -26,3 +26,8 @@ TRACE_1("Fired",_this);
{
_this call _x;
} forEach ((_this select 0) getVariable "cba_xeh_fired");
// Call muzzle fired EH
{
_this call compile getText (_x >> "fired");
} forEach (configProperties [configFile >> "CfgWeapons" >> "Throw" >> (_this select 2) >> "EventHandlers", "isClass _x", true]);

View File

@ -3,6 +3,7 @@
<Package name="ai">
<Key ID="STR_ACE_ai_GarrisonInvalidPosition">
<English>Invalid position provided.</English>
<German>Ungültige Position</German>
<French>Position invalide fourni</French>
<Japanese>位置が無効です。</Japanese>
<Italian>Posizione invalida fornita.</Italian>
@ -10,9 +11,11 @@
<Chinesesimp>提供的位置无效。</Chinesesimp>
<Korean>위치가 잘못되었습니다.</Korean>
<Polish>Podano błędną pozycję.</Polish>
<Russian>Указана неверная позиция</Russian>
</Key>
<Key ID="STR_ACE_ai_GarrisonNoUnits">
<English>No units provided.</English>
<German>Keine Einheit ausgewählt</German>
<French>Aucune unité fourni</French>
<Japanese>ユニットがありません。</Japanese>
<Italian>Nessuna unità fornita.</Italian>
@ -20,9 +23,11 @@
<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>
<German>Es gibt nicht genug Positionen, um alle Einheiten zu platzieren</German>
<French>Il n'y a pas assez de positions pour placer toutes les unités</French>
<Japanese>全ユニットを置くために十分な位置がありません。</Japanese>
<Italian>Non ci sono abbastanza posizioni per piazzare tutte le unità.</Italian>
@ -30,9 +35,11 @@
<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>
<German>Kein Gebäude gefunden</German>
<French>Aucun bâtiment trouvé</French>
<Japanese>建物がありません。</Japanese>
<Italian>Nessun edificio trovato.</Italian>
@ -40,6 +47,7 @@
<Chinesesimp>没找到建筑物。</Chinesesimp>
<Korean>건물이 없습니다.</Korean>
<Polish>Nie znaleziono budynku.</Polish>
<Russian>Здание не найдено</Russian>
</Key>
</Package>
</Project>

BIN
addons/apl/ACE_CSW_Bag.p3d Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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\csw_nsv_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 = "#(argb,8,8,3)color(1,1,1,1,AS)";
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\csw_nsv_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";
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,92 @@
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.545,0.545,0.545,1.0};
specularPower = 100.0;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1
{
texture = "z\ace\addons\apl\data\csw_spg9_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,1.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,2.0,0.0};
dir[] = {0.0,0.0,1.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,1.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,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage5
{
texture = "z\ace\addons\apl\data\csw_spg9_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,1.0};
pos[] = {0.0,0.0,0.0};
};
};
class Stage6
{
texture = "#(ai,32,128,1)fresnel(1.89,1.02)";
uvSource = "tex";
class uvTransform
{
aside[] = {1.0,0.0,0.0};
up[] = {0.0,1.0,0.0};
dir[] = {0.0,0.0,1.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,1.0};
pos[] = {0.0,0.0,0.0};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,32 @@
ambient[]={1.000000,1.000000,1.000000,1.000000};
diffuse[]={1.000000,1.000000,1.000000,1.000000};
forcedDiffuse[]={0.000000,0.000000,0.000000,0.000000};
emmisive[]={0.000000,0.000000,0.000000,1.000000};
specular[]={0.3000000,0.3000000,0.3000000,1.000000};
specularPower=100.000000;
PixelShaderID="NormalMapSpecularDIMap";
VertexShaderID="NormalMap";
class Stage1
{
texture="z\ace\addons\apl\data\csw_tow_merge_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="z\ace\addons\apl\data\csw_tow_merge_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};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,32 @@
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,0.0};
specular[] = {0.3,0.3,0.3,1.0};
specularPower = 256.0;
PixelShaderID = "NormalMapSpecularDIMap";
VertexShaderID = "NormalMap";
class Stage1
{
texture = "z\ace\addons\apl\data\csw_tripod_ags_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 = "z\ace\addons\apl\data\csw_tripod_ags_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};
};
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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

Binary file not shown.

Binary file not shown.

View File

@ -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,33 +745,40 @@
<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>
<German>Öffnet das Ausrüstungsmenü</German>
<French>Affiche la page des équipements</French>
<Chinese>開啟裝備選單</Chinese>
<Chinesesimp>开启装备选单</Chinesesimp>
<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>
<German>Exportiert aktuelles / standard Loadout</German>
<French>Exporte l'équipement actuel ou la liste d'équipements de base</French>
<Chinese>匯出當前/預設的裝備</Chinese>
<Chinesesimp>汇出当前/预设的装备</Chinesesimp>
<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>
<German>Importiert aktuelles / standard Loadout</German>
<French>Importer l'équipement actuel ou la liste d'équipements de base</French>
<Chinese>匯入當前/預設的裝備</Chinese>
<Chinesesimp>汇入当前/预设的装备</Chinesesimp>
<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 +788,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 +812,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 +820,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 +828,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 +836,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,42 +844,51 @@
<Japanese>セカンダリに内蔵</Japanese>
<Polish>Nie wspierane</Polish>
<Italian>Non supportato</Italian>
<Russian>Не поддерживается</Russian>
</Key>
<Key ID="STR_ACE_Arsenal_page">
<English>Page</English>
<German>Seite</German>
<French>Page</French>
<Japanese>ページ</Japanese>
<Chinesesimp>页面</Chinesesimp>
<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>
<German>Aktiviere die Gesichter-, Stimmen- und Abzeichenübersicht</German>
<French>Activer les onglets faces / voix / insignes</French>
<Japanese>顔 / 声 / 記章タブを有効化</Japanese>
<Chinesesimp>启用脸谱/声音/徽章/选项 </Chinesesimp>
<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>
<German>Aktuellen Container leeren</German>
<French>Vider le conteneur selectionné</French>
<Japanese>選択されたコンテナは空です</Japanese>
<Chinesesimp>选择的箱子是空的</Chinesesimp>
<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>
<German>Der Klassenname wurde in die Zwischenablage exportiert</German>
<French>Nom de classe exporté dans le presse papier</French>
<Japanese>クリップボードへクラスネームをエクスポート</Japanese>
<Chinesesimp>将种类复制到剪贴板</Chinesesimp>
<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>
@ -841,9 +924,11 @@
</Key>
<Key ID="STR_ACE_Arsenal_Blacklist">
<English>Blacklist</English>
<German>Blacklist</German>
<Japanese>禁止リスト</Japanese>
<Italian>Lista Nera</Italian>
<Polish>Czarna lista (lista wykluczeń)</Polish>
<Russian>Чёрный список</Russian>
</Key>
<Key ID="STR_ACE_Arsenal_Items">
<English>Items</English>
@ -863,31 +948,41 @@
</Key>
<Key ID="STR_ACE_Arsenal_AttributeExport_Tooltip">
<English>Export current items list as an array for use in scripts</English>
<German>Exportiert aktuelle Gegenstände als Array, um es in Scripten zu verwenden</German>
<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>
<German>Importiert alles aus der Zwischenablage (Sollte im gleichen Format sein, wie beim Exportieren)</German>
<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>
<German>Füge kompatible Gegenstände hinzu</German>
<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>
<German>Es werden automatisch kompatible Aufsätze oder Magazine für alle ausgewählten Waffen hinzugefügt</German>
<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>
<German>Lebenszeit</German>
<French>Durée de vie</French>
<Japanese>有効時間</Japanese>
<Polish>Czas by żyć</Polish>
<Italian>Scadenza (TTL)</Italian>
<Russian>Время действия</Russian>
</Key>
</Package>
</Project>

View File

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

View File

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

View File

@ -2283,47 +2283,57 @@
</Key>
<Key ID="STR_ACE_Ballistics_statBarrelTwist">
<English>Barrel twist</English>
<German>Dralllänge</German>
<Japanese>銃身の転度</Japanese>
<Chinesesimp>膛线缠距</Chinesesimp>
<Chinese>膛線扭度</Chinese>
<Italian>Rigatura della canna</Italian>
<Polish>Gwintowanie lufy</Polish>
<Russian>Нарезы ствола</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_statBarrelLength">
<English>Barrel length</English>
<German>Lauflänge</German>
<French>Longueur du canon</French>
<Japanese>銃身長</Japanese>
<Chinesesimp>身管长度</Chinesesimp>
<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>
<German>Ballistischer Koeffizient</German>
<French>Coefficient ballistique</French>
<Japanese>弾道係数</Japanese>
<Chinesesimp>弹道系数</Chinesesimp>
<Chinese>彈道係數</Chinese>
<Italian>Coefficente balistico</Italian>
<Polish>Współczynnik balistyczny</Polish>
<Russian>Баллистический коэффициент</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_statBulletMass">
<English>Bullet mass</English>
<German>Projektilgewicht</German>
<French>Masse d'une balle</French>
<Japanese>弾丸重量</Japanese>
<Chinesesimp>弹头重量</Chinesesimp>
<Chinese>彈頭重量</Chinese>
<Italian>Massa del proiettile</Italian>
<Polish>Masa pocisku</Polish>
<Russian>Масса пули</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_statMuzzleVelocity">
<English>Muzzle velocity</English>
<German>Mündungsgeschwindigkeit</German>
<French>Vitesse à la bouche</French>
<Japanese>銃口初速</Japanese>
<Chinesesimp>枪口初速</Chinesesimp>
<Chinese>槍口初速</Chinese>
<Italian>Velocità iniziale</Italian>
<Polish>Prędkość wylotowa</Polish>
<Russian>Начальная скорость</Russian>
</Key>
</Package>
</Project>

View File

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

View File

@ -63,6 +63,11 @@ class CfgVehicles {
GVAR(space) = 4;
GVAR(hasCargo) = 1;
};
class Tank_F: Tank {};
class UGV_02_Base_F: Tank_F {
GVAR(space) = 0;
GVAR(hasCargo) = 0;
};
class Car_F;
class Truck_F: Car_F {

View File

@ -11,5 +11,6 @@ PREP_RECOMPILE_END;
GVAR(initializedItemClasses) = [];
GVAR(initializedVehicleClasses) = [];
GVAR(cargoHolderTypes) = ["Car", "Air", "Tank", "Ship", "Cargo_base_F", "Land_PaperBox_closed_F"];
GVAR(disableParadropEffectsClasstypes) = ["Car_F"];
ADDON = true;

View File

@ -69,8 +69,10 @@ _itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vecto
_item attachTo [_parachute, [0,0,1]];
_parachute setVelocity _velocity;
private _light = "Chemlight_yellow" createVehicle [0,0,0];
_light attachTo [_item, [0,0,0]];
if ((GVAR(disableParadropEffectsClasstypes) findIf {_item isKindOf _x}) == -1) then {
private _light = "Chemlight_yellow" createVehicle [0,0,0];
_light attachTo [_item, [0,0,0]];
};
}, [_itemObject], 0.7] call CBA_fnc_waitAndExecute;
@ -83,8 +85,10 @@ _itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vecto
};
if (getPos _item select 2 < 1) then {
private _smoke = "SmokeshellYellow" createVehicle [0,0,0];
_smoke attachTo [_item, [0,0,0]];
if ((GVAR(disableParadropEffectsClasstypes) findIf {_item isKindOf _x}) == -1) then {
private _smoke = "SmokeshellYellow" createVehicle [0,0,0];
_smoke attachTo [_item, [0,0,0]];
};
[_this select 1] call CBA_fnc_removePerFrameHandler;
};

View File

@ -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,23 @@
<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>
<German>Ladezeitmultiplikator</German>
<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>
<German>Gibt an, wie lange das Laden / Entladen von Gegenständen dauern soll.\nZeit in Sekunden, die mit der Größe des Gegenstandes multipliziert wird.</German>
<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>

View File

@ -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&lt;br/&gt;Prepared</English>
@ -33,6 +35,7 @@
<Italian>%1 &lt;br/&gt; Preparata</Italian>
<Chinese>%1&lt;br/&gt;已使用</Chinese>
<Chinesesimp>%1&lt;br/&gt;已使用</Chinesesimp>
<Russian>%1&lt;br/&gt;Приготовлен</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&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -93,6 +99,7 @@
<Italian>Tipo: Luce - Arancione&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 橘色&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 橘色&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
<Russian>Тип: Свет - Оранжевый&lt;br /&gt;1 штука&lt;br /&gt;В руках</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&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -126,6 +135,7 @@
<Italian>Tipo: Luce - Bianca&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 白色&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 白色&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
<Russian>Тип: Свет - Белый&lt;br /&gt;1 штука&lt;br /&gt;В руках</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)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -159,6 +171,7 @@
<Italian>Tipo: Luce - Rossa Hi (30 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮紅色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 超亮红色 (30分钟)&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
<Russian>Тип: Свет - Ярко-Красный (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</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)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -192,6 +207,7 @@
<Italian>Tipo: Luce - Gialla Hi (30 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮黃色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 超亮黄色 (30分钟)&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
<Russian>Тип: Свет - Ярко-Желтый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</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)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -225,6 +243,7 @@
<Italian>Tipo: Luce - Bianca Hi (30 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮白色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 超亮白色 (30分钟)&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
<Russian>Тип: Свет - Ярко-Белый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</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)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -246,6 +267,7 @@
<Japanese>種類: 照明 - 高輝度 青 (30分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe niebieskie (30 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<Italian>Tipo: Luce - Hi blu (30 minuti)&lt;br/&gt;Rimanenti:1 &lt;br/&gt;Usata in: Mano</Italian>
<Russian>Тип: Свет - Ярко-Синий (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</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)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -267,6 +291,7 @@
<Japanese>種類: 照明 - 高輝度 緑 (30分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe zielone (30 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<Italian>Tipo: Luce - Hi verde (30 minuti)&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Russian>Тип: Свет - Ярко-Зеленый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</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)&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -288,6 +315,7 @@
<Japanese>種類: 照明 - ウルトラ高輝度 オレンジ (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - ultra-jaskrawe pomarańczowe (30 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<Italian>Tipo: Luce - Ultra-Hi (5 minuti)&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Russian>Тип: Свет - Ультраяркий Оранжевый (5 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</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&lt;br /&gt;Rounds: 1&lt;br /&gt;Used in: Hand</English>
@ -321,6 +351,7 @@
<Italian>Tipo: Luce - Infrarossi&lt;br /&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 紅外線&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型: 光 - 红外线&lt;br /&gt;发数: 1&lt;br /&gt;使用于: 手</Chinesesimp>
<Russian>Тип: Свет - Инфракрасный&lt;br /&gt;1 штука&lt;br /&gt;В руках</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>

View File

@ -21,6 +21,9 @@ LOG("Adding ACE_Settings to CBA_settings");
GVAR(cbaSettings_forcedSettings) = [];
GVAR(cbaSettings_missionSettings) = [];
GVAR(settings) = []; // will stay empty - for BWC?
#ifdef DEBUG_MODE_FULL
GVAR(settingsMovedToSQF) = [];
#endif
// Add Event Handlers:
[QGVAR(setSetting), {
@ -66,6 +69,13 @@ GVAR(settings) = []; // will stay empty - for BWC?
false
} count GVAR(runAtSettingsInitialized);
GVAR(runAtSettingsInitialized) = nil; //cleanup
#ifdef DEBUG_MODE_FULL
INFO_1("checking settingsMovedToSQF [%1]",count GVAR(settingsMovedToSQF));
{
if (isNil _x) then { WARNING_1("setting [%1] NOT moved to sqf",_x); };
} forEach GVAR(settingsMovedToSQF);
#endif
}] call CBA_fnc_addEventHandler;
private _start = diag_tickTime;
@ -81,6 +91,10 @@ for "_index" from 0 to (_countOptions - 1) do {
} else {
WARNING_1("Setting [%1] - Already defined from somewhere else??",_varName);
};
#ifdef DEBUG_MODE_FULL
} else {
GVAR(settingsMovedToSQF) pushBack configName _optionEntry;
#endif
};
};

View File

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

View File

@ -16,6 +16,7 @@
*/
params ["_state"];
TRACE_1("disableUserInput",_state);
if (_state) then {
disableSerialization;

View File

@ -13,11 +13,11 @@
* is the unit an EOD <BOOL>
*
* Example:
* isSpecialist = [player] call FUNC(isEOD);
* [player] call ace_common_fnc_isEOD
*
* Public: Yes
*/
params ["_unit"];
_unit getVariable ["ACE_isEOD", _unit getUnitTrait "explosiveSpecialist"] // return
(_unit getVariable ["ACE_isEOD", _unit getUnitTrait "explosiveSpecialist"]) in [1, true]

View File

@ -16,7 +16,8 @@
* Public: Yes
*/
params ["_id", "_disable"];
params [["_id", "#", [""]], ["_disable", false, [false]]];
TRACE_2("setDisableUserInputStatus",_id,_disable);
if (isNil QGVAR(DISABLE_USER_INPUT_COLLECTION)) then {
GVAR(DISABLE_USER_INPUT_COLLECTION) = [];

View File

@ -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>
@ -506,30 +507,36 @@
</Key>
<Key ID="STR_ACE_Common_CheckPBOsAction">
<English>Check PBO Action</English>
<German>PBO Überprüfung</German>
<Italian>Controlla Azioni PBO</Italian>
<Chinese>檢查PBO動作</Chinese>
<Chinesesimp>检查PBO动作</Chinesesimp>
<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>
<German>Alle PBOs überprüfen</German>
<Italian>Controlla Tutti i PBO</Italian>
<Chinese>檢查所有PBO</Chinese>
<Chinesesimp>检查所有PBO</Chinesesimp>
<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>
<German>PBO Whitelist</German>
<Italian>Controlla Whitelist PBO</Italian>
<Chinese>檢查PBO白名單</Chinese>
<Chinesesimp>检查PBO白名单</Chinesesimp>
<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 +1005,13 @@
<Chinese>啟用</Chinese>
<Chinesesimp>启用</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_Always">
<Key ID="STR_ACE_Common_Always">
<English>Always</English>
<German>Immer</German>
<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>
@ -1010,13 +1019,13 @@
<German>Überall</German>
<Czech>Kdekoliv</Czech>
<Portuguese>Qualquer lugar</Portuguese>
<French>PArtout</French>
<French>Partout</French>
<Hungarian>Akárhol</Hungarian>
<Italian>Ovunque</Italian>
<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 +1040,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 +1088,14 @@
<Key ID="STR_ACE_Common_Confirm">
<English>Confirm</English>
<Japanese>確認</Japanese>
<German>Bestätigen</German>
<Russian>Подтвердить</Russian>
</Key>
<Key ID="STR_ACE_Common_Never">
<English>Never</English>
<Japanese>行わない</Japanese>
<German>Nie</German>
<Russian>Никогда</Russian>
</Key>
<Key ID="STR_ACE_Common_VehiclesOnly">
<English>Vehicles only</English>
@ -1260,6 +1273,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,22 +1284,59 @@
<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>
<German>Flagge (Ace - Schwarz)</German>
<Chinesesimp>旗帜(ACE-黑色):</Chinesesimp>
<Chinese>旗幟(ACE-黑色)</Chinese>
<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>
<German>Flagge (Ace - Weiß)</German>
<Chinesesimp>旗帜(ACE-白色):</Chinesesimp>
<Chinese>旗幟(ACE-白色)</Chinese>
<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>

View File

@ -11,14 +11,19 @@
<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>
<German>Schadensberechnung und Geschützturmeffekte</German>
<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>
<German>Ändert die Schadensberechnung für die Durchzündung und die Explosionseffekte des Geschützturmes</German>
<Japanese>誘爆の損傷処理と砲塔の爆発効果を変更します。</Japanese>
<Russian>Изменяет обработку урона для возгорания и эффекта срыва башни</Russian>
</Key>
<Key ID="STR_ACE_CookOff_generic_turret_wreck">
<English>Wreck (Turret)</English>
@ -45,6 +50,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 +62,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 +74,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 +86,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 +98,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 +110,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 +121,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 +132,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
View File

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

38
addons/csw/Cfg3den.hpp Normal file
View File

@ -0,0 +1,38 @@
class ctrlCombo;
class Cfg3DEN {
class Attributes {
class Title;
class Combo: Title {
class Controls {
class Title;
class Value;
};
};
class GVAR(assemblyModeControl): Combo {
class Controls: Controls {
class Title: Title {};
class Value: Value {
class Items {
class Disable {
text = "$STR_DISABLED";
value = 0;
};
class Enable {
text = "$STR_CONFIG_JOYSTICK_ENABLED";
value = 1;
};
class EnableAndEmpty {
text = CSTRING(eden_enableAndEmpty);
value = 2;
};
class Default {
text = "$STR_VEHICLE_DEFAULT";
value = 3;
default = 1;
};
};
};
};
};
};
};

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

View File

@ -0,0 +1,86 @@
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;
rhs_mag_127x108mm_300 = 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;
rhs_12Rnd_m821_HE = 1;
rhs_mag_3vo18_10 = 1;
};
class ACE_1Rnd_82mm_Mo_Smoke {
ACE_1Rnd_82mm_Mo_Smoke = 1;
8Rnd_82mm_Mo_Smoke_white = 1;
rhs_mag_d832du_10 = 1;
};
class ACE_1Rnd_82mm_Mo_Illum {
ACE_1Rnd_82mm_Mo_Illum = 1;
8Rnd_82mm_Mo_Flare_white = 1;
rhs_mag_3vs25m_10 = 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;
};
};

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

245
addons/csw/CfgVehicles.hpp Normal file
View File

@ -0,0 +1,245 @@
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";
EGVAR(dragging,canDrag) = 1;
EGVAR(dragging,dragPosition)[] = {0, 2, 0};
EGVAR(dragging,canCarry) = 1;
EGVAR(dragging,carryPosition)[] = {0, 2, 0};
class ACE_Actions {
class ACE_MainActions {
displayName = CSTRING(genericTripod_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(m3Tripod_displayName);
class ADDON {
disassembleTo = QGVAR(m3CarryTripod);
};
};
class GVAR(m3TripodLow): GVAR(m3Tripod) {
class ADDON {
disassembleTo = QGVAR(m3CarryTripodLow);
};
};
class GVAR(kordTripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_kord.p3d);
displayName = CSTRING(kordTripod_displayName);
class ADDON {
disassembleTo = QGVAR(kordCarryTripod);
};
};
class GVAR(kordTripodLow): GVAR(kordTripod) {
class ADDON {
disassembleTo = QGVAR(kordCarryTripodLow);
};
};
class GVAR(sag30Tripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_ags30.p3d);
displayName = CSTRING(sag30Tripod_displayName);
class ADDON {
disassembleTo = QGVAR(sag30CarryTripod);
};
};
class GVAR(m220Tripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_m220.p3d);
displayName = CSTRING(m220Tripod_displayName);
class ADDON {
disassembleTo = QGVAR(m220CarryTripod);
};
};
class GVAR(spg9Tripod): GVAR(baseTripod) {
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ace_csw_tripod_spg9.p3d);
displayName = CSTRING(spg9_Tripod);
class ADDON {
disassembleTo = QGVAR(spg9CarryTripod);
};
};
class GVAR(mortarBaseplate): GVAR(baseTripod) {
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 {
// ENABLE_CSW_ATTRIBUTE;
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 {
// ENABLE_CSW_ATTRIBUTE;
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 {
// ENABLE_CSW_ATTRIBUTE;
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 {
// ENABLE_CSW_ATTRIBUTE;
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 {
// ENABLE_CSW_ATTRIBUTE;
class ADDON {
enabled = 1;
magazineLocation = "";
disassembleWeapon = QGVAR(staticMortarCarry); // carry weapon [CfgWeapons]
disassembleTurret = QGVAR(mortarBaseplate); // turret [CfgVehicles]
desiredAmmo = 1;
ammoLoadTime = 3;
ammoUnloadTime = 3;
};
};
};

294
addons/csw/CfgWeapons.hpp Normal file
View File

@ -0,0 +1,294 @@
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(m3TripodFolded_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(m3TripodLowFolded_displayName);
};
class GVAR(kordCarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 4;
pickupTime = 4;
deploy = QGVAR(kordTripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 350;
};
displayName = CSTRING(kordTripodFolded_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
class GVAR(kordCarryTripodLow): GVAR(kordCarryTripod) {
class ADDON: ADDON {
deploy = QGVAR(kordTripodLow);
};
displayName = CSTRING(kordTripodFoldedLow_displayName);
};
class GVAR(m220CarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 10;
pickupTime = 6;
deploy = QGVAR(m220Tripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 210;
};
displayName = CSTRING(m220TripodFolded_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
class GVAR(spg9CarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 5;
pickupTime = 3;
deploy = QGVAR(spg9Tripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 260;
};
displayName = CSTRING(spg9_TripodFolded);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
class GVAR(sag30CarryTripod): Launcher_Base_F {
class ADDON {
type = "mount";
deployTime = 4;
pickupTime = 4;
deploy = QGVAR(sag30Tripod);
};
class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 260;
};
displayName = CSTRING(sag30TripodFolded_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\Tripod_Icon.paa);
};
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(mortarBaseplateBag_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(mk6MortarBag_displayName);
author = ECSTRING(common,ACETeam);
scope = 2;
model = QPATHTOEF(apl,ACE_CSW_Bag.p3d);
modes[] = {};
picture = QPATHTOF(UI\StaticHGMG_Icon.paa);
};
// Proxy Weapons
CREATE_CSW_PROXY(HMG_Static);
CREATE_CSW_PROXY(GMG_20mm);
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
View 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)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

34
addons/csw/XEH_PREP.hpp Normal file
View File

@ -0,0 +1,34 @@
TRACE_1("",QUOTE(ADDON));
PREP(aceRearmGetCarryMagazines);
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);

View 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

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

View File

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

24
addons/csw/config.cpp Normal file
View File

@ -0,0 +1,24 @@
#include "script_component.hpp"
#include "script_config_macros_csw.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 "Cfg3den.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"
#include "CfgMagazines.hpp"
#include "CfgMagazineGroups.hpp"

69
addons/csw/data/model.cfg Normal file
View File

@ -0,0 +1,69 @@
class CfgSkeletons {
class Default {
isDiscrete = 1;
skeletonInherit = "";
skeletonBones[] = {};
};
class ACE_CSW_Tripod_Skeleton: Default {};
class ACE_CSW_M3_Tripod_Skeleton: Default {};
class ace_csw_tripod_ags30_Skeleton: Default {};
class ace_csw_tripod_kord_Skeleton: Default {};
class ace_csw_tripod_m122_Skeleton: Default {};
class ace_csw_tripod_m220_Skeleton: Default {};
class ace_csw_tripod_spg9_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_tripod_ags30 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_ags30_Skeleton";
};
class ace_csw_tripod_kord : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_kord_Skeleton";
};
class ace_csw_tripod_m122 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_m122_Skeleton";
};
class ace_csw_tripod_m220 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_m220_Skeleton";
};
class ace_csw_tripod_spg9 : Default {
sectionsInherit = "";
sections[] = {};
skeletonName = "ace_csw_tripod_spg9_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";
};
};

View 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 -------");

View File

@ -0,0 +1,50 @@
#include "script_component.hpp"
/*
* Author: PabstMirror
* Helper function for ace_rearm; Gets magazines that should be loaded by csw
*
* Arguments:
* 0: Vehicle <OBJECT>
* 1: Specific Turret or pass bool to check all turrets <ARRAY><BOOL>(default: true)
*
* Return Value:
* [0: compatible veh mags, 1: carry mags] <ARRAY>
*
* Example:
* [cursorObject, [0]] call ace_csw_fnc_aceRearmGetCarryMagazines
*
* Public: No
*/
params ["_vehicle", ["_targetTurret", true, [[], true]]];
if (!(_vehicle isKindOf "StaticWeapon")) exitWith { [[],[]] }; // limit to statics for now
// Assembly mode: [0=disabled, 1=enabled, 2=enabled&unload, 3=default]
if ((GVAR(ammoHandling) == 0) && {!([false, true, true, GVAR(defaultAssemblyMode)] select (_vehicle getVariable [QGVAR(assemblyMode), 3]))}) exitWith { [[],[]] };
private _turretMagsCSW = [];
private _allCarryMags = [];
{
private _turretPath = _x;
if ((_targetTurret isEqualTo true) || {_turretPath isEqualTo _targetTurret}) then {
{
private _weapon = _x;
{
private _xMag = _x;
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 [_x, _carryMag];
TRACE_2("setting cache",_xMag,_carryMag);
};
if (_carryMag != "") then {
_turretMagsCSW pushBackUnique _xMag;
_allCarryMags pushBackUnique _carryMag;
};
} forEach ([_weapon] call CBA_fnc_compatibleMagazines);
} forEach (_vehicle weaponsTurret _turretPath);
};
} forEach (allTurrets _vehicle);
[_turretMagsCSW, _allCarryMags]

View 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 EFUNC(common,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;

View 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")

View 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))) != ""}

View 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}

View File

@ -0,0 +1,26 @@
#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"];
// Assembly mode: [0=disabled, 1=enabled, 2=enabled&unload, 3=default]
private _assemblyMode = [false, true, true, GVAR(defaultAssemblyMode)] select (_staticWeapon getVariable [QGVAR(assemblyMode), 3]);
private _notCrewed = (crew _staticWeapon) isEqualTo [];
private _deadCrew = !(alive (gunner _staticWeapon)); // need to eject body???
_assemblyMode && {_notCrewed || _deadCrew}

View File

@ -0,0 +1,72 @@
#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"];
// Because the tripod can be a "full weapon" we disable any data that will allow it to be loaded
_cswTripod setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set enabled&unload assembly mode and broadcast
if (!GVAR(defaultAssemblyMode)) then {
TRACE_1("global disableVanillaAssembly event",_cswTripod); // handles it being assembled when setting is disabled
[QGVAR(disableVanillaAssembly), [_cswTripod]] call CBA_fnc_globalEvent;
};
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;

View File

@ -0,0 +1,77 @@
#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"];
// Assembly mode: [0=disabled, 1=enabled, 2=enabled&unload, 3=default]
_csw setVariable [QGVAR(assemblyMode), 2, true]; // Explicitly set advanced assembly mode + unload, and broadcast
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;
if ((_tripodPos select 2) < 0.5) then {
_csw setVectorUp (surfaceNormal _tripodPos);
};
TRACE_2("csw placed",_csw,_assembledClassname);
}, [_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;

View 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];

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

View File

@ -0,0 +1,96 @@
#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);};
// Turret classname can equal nothing if the deploy bag is the "whole" weapon. e.g Kornet, Metis, other ATGMs
if (!(_turretClassname isEqualTo "") && {!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);
if !(_turretClassname isEqualTo "") then {
private _cswTripod = createVehicle [_turretClassname, [0, 0, 0], [], 0, "NONE"];
// Delay a frame so weapon has a chance to be deleted
[{
params ["_cswTripod", "_weaponDir", "_weaponPos"];
_cswTripod setDir _weaponDir;
_cswTripod setPosATL _weaponPos;
_cswTripod setVelocity [0, 0, -0.05];
_cswTripod setVectorUp (surfaceNormal _weaponPos);
}, [_cswTripod, _weaponDir, _weaponPos]] call CBA_fnc_execNextFrame;
[_cswTripod, _staticWeapon] call (missionNamespace getVariable _onDisassembleFunc);
};
[{
params ["_player", "_weaponPos", "_carryWeaponClassname"];
if ((alive _player) && {(secondaryWeapon _player) == ""}) exitWith {
_player addWeapon _carryWeaponClassname;
};
private _weaponRelPos = _weaponPos getPos 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, _weaponPos, _carryWeaponClassname]] call CBA_fnc_execNextFrame;
LOG("delete weapon");
deleteVehicle _staticWeapon;
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;

View 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)}

View 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]];

View File

@ -0,0 +1,44 @@
#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>
* 2: Weapon should be emptied <BOOL>
*
* Return Value:
* None
*
* Example:
* [weapon, [0], true, false] call ace_csw_fnc_proxyWeapon
*
* Public: No
*/
params ["_staticWeapon", "_turret", "_needed", "_emptyWeapon"];
TRACE_4("proxyWeapon",_staticWeapon,_turret,_needed,_emptyWeapon);
if (_staticWeapon getVariable [format [QGVAR(proxyHandled_%1), _turret], false]) exitWith { TRACE_1("already handled",typeOf _staticWeapon); };
private _typeOf = typeOf _staticWeapon;
private _proxyWeapon = getText(configFile >> "CfgVehicles" >> _typeOf >> "ace_csw" >> "proxyWeapon");
TRACE_2("",_typeOf,_proxyWeapon);
if (_proxyWeapon == "") exitWith {};
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);
// This function may replace magazines or do other things to the static weapon
_proxyWeapon = [_staticWeapon, _turret, _currentWeapon, _needed, _emptyWeapon] 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];

View 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

View 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

View 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]

View 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

View 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 ([_weapon] call CBA_fnc_compatibleMagazines);
} forEach _carriedMagazines;
} forEach (_vehicle weaponsTurret _turretPath);
} forEach (allTurrets _vehicle);
// Note: these nested forEach's looks terrible, but most only have one element
_return

View 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

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