diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp
index 41462354d8..8aa5d3173e 100644
--- a/addons/aircraft/CfgAmmo.hpp
+++ b/addons/aircraft/CfgAmmo.hpp
@@ -2,7 +2,7 @@
class CfgAmmo {
class BulletBase;
class B_20mm : BulletBase {
- hit = 80;
+ hit = 80;
indirectHit = 12;
indirectHitRange = 2; //2;
caliber = 1.4;
@@ -13,7 +13,7 @@ class CfgAmmo {
tracerEndTime = 3.5;
CraterEffects = "ExploAmmoCrater";
- explosionEffects = "ExploAmmoExplosion";
+ explosionEffects = "ExploAmmoExplosion";
model = "\A3\Weapons_f\Data\bullettracer\tracer_red";
};
class ACE_20mm_HE : B_20mm {};
@@ -23,7 +23,7 @@ class CfgAmmo {
indirectHitRange = 0.3; //2;
explosive = 0;
CraterEffects = "";
- explosionEffects = "";
+ explosionEffects = "";
};
// adjust minigun caliber and deflection to other ammo
diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp
index 7276b3e402..22f2da3833 100644
--- a/addons/aircraft/Heli_Attack_01_base_F.hpp
+++ b/addons/aircraft/Heli_Attack_01_base_F.hpp
@@ -907,7 +907,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
thermalMode[] = {0,1};
gunnerOpticsColor[] = {0,0,0,1};
directionStabilized = 1;
- horizontallyStabilized = 1;
+ horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F";
};
class Medium: Wide
@@ -918,7 +918,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
maxFov = 0.093;
gunnerOpticsColor[] = {0,0,0,1};
directionStabilized = 1;
- horizontallyStabilized = 1;
+ horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_medium_F";
};
class Narrow: Wide
@@ -929,7 +929,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
maxFov = 0.029;
gunnerOpticsColor[] = {0,0,0,1};
directionStabilized = 1;
- horizontallyStabilized = 1;
+ horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F";
};
@@ -941,7 +941,7 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
maxFov = 0.01;
gunnerOpticsColor[] = {0,0,0,1};
directionStabilized = 1;
- horizontallyStabilized = 1;
+ horizontallyStabilized = 1;
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F";
};
diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml
index 5683eaf0d3..f609aabd93 100644
--- a/addons/captives/stringtable.xml
+++ b/addons/captives/stringtable.xml
@@ -95,7 +95,7 @@
Algema Plástica
Fascietta
Gyorskötöző
- Пластиковые наручники
+ Кабельная стяжка
Cable ties that allow you to restrain prisoners.
@@ -107,7 +107,7 @@
A algema plástica permite que você contenha prisioneiros.
Fascietta che ti consente di arrestare i prigionieri.
Gyorskötöző, emberek foglyulejtéséhez használható.
- Пластиковые наручники позволяют связывать пленников.
+ Кабельные стяжки позволяют связывать пленников.
Show player names
@@ -30,7 +31,7 @@
Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen)
Noms uniquement sous le curseur (si noms affichés)
Zobrazit jméno hráče jenom na kurzor (vyžaduje jména hráčů)
- Mostra i nomi solo se puntati (richiede i nomi dei giocatori abilitati)
+ Mostra i nomi solo se puntati (richiede mostra nomi abilitato)
Mostrar nome de jogador somente no cursor (requer nome de jogadores)
Játékosok nevének mutatása csak a kurzoron (a nevek mutatása szükséges)
Показать имена игроков только под курсором (требует имен игроков)
@@ -44,6 +45,7 @@
Pokaż imiona graczy tylko po przytrzymaniu klawisza (wymagana opcja Pokaż imiona graczy)
Játékosnevek mutatása csak gombnyomásra (a nevek mutatása szükséges)
Показать имена игроков только по нажатию клавиши (требует имен игроков)
+ Mostra i nomi solo se si preme il tasto (richiede mostra nomi abilitato)
Show player ranks (requires player names)
@@ -52,7 +54,7 @@
Mostrar rango de los jugadores (requiere Mostrar nombres de jugadores)
Grade des joueurs (si noms affichés)
Zobrazit hodnosti hráčů (vyžaduje jména hráčů)
- Mostra i gradi (richiede i nomi dei giocatori abilitati)
+ Mostra i gradi (richiede mostra nomi abilitato)
Mostrar patente de jogadores (requer nome de jogadores)
Játékosok rendfokozatának mutatása (a nevek mutatása szükséges)
Показать звания игроков (требует имен игроков)
@@ -66,6 +68,7 @@
Zobrazit info o posádce vozidla
Показать экипаж
Jármű-legénység adatainak mutatása
+ Mostra le informazioni sull'equipaggio del veicolo
Show name tags for AI units
@@ -76,6 +79,7 @@
Wyświetl imiona jednostek AI
Afficher les noms des IA
Névcímkék mutatása MI-egységeknél
+ Mostra le tag nomi per le unità AI
Show SoundWaves (requires player names)
@@ -86,6 +90,7 @@
Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy)
Afficher "qui parle" (si noms affichés)
"Hanghullámok" mutatása (a nevek mutatása szükséges)
+ Mostra barra movimento audio (richiede mostra nomi abilitato)
Default Nametag Color (Non Group Members)
@@ -96,6 +101,7 @@
Couleur d'affichage par défaut (si dans aucun groupe)
Standardní barva jmenovek (pro nečleny jednotky)
Alap névcímke-szín (csoporton kívüli személyek)
+ Colore nametag di default (membri non del gruppo)
diff --git a/addons/optics/CfgWeapons.hpp b/addons/optics/CfgWeapons.hpp
index 7749db0bc4..6d61ff98a2 100644
--- a/addons/optics/CfgWeapons.hpp
+++ b/addons/optics/CfgWeapons.hpp
@@ -5,20 +5,20 @@ class CfgWeapons {
class Default;
class Binocular: Default {
- forceOptics = 0; // Allow using compass with Binocular
- opticsZoomMin = 0.056889; // 5.25x power
- opticsZoomMax = 0.056889; // 9 px/mil
- modelOptics = "\z\ace\addons\optics\models\NWD_M22_5x"; // 7 horizontal field of view
- visionMode[] = {"Normal"}; // Can't use nvgs with binoculars any more than you can with scopes
- // Fix AI using Binocs on short range - #18737
+ forceOptics = 0; // Allow using compass with Binocular
+ opticsZoomMin = 0.056889; // 5.25x power
+ opticsZoomMax = 0.056889; // 9 px/mil
+ modelOptics = "\z\ace\addons\optics\models\NWD_M22_5x"; // 7 horizontal field of view
+ visionMode[] = {"Normal"}; // Can't use nvgs with binoculars any more than you can with scopes
+ // Fix AI using Binocs on short range - #18737
// minRange = 300; // 300 = uses Rangefinder often (runs a few meters, stops, uses RF, repeats)
minRange = 500; //500 = seem almost never use it..?
- minRangeProbab = 0.001;
+ minRangeProbab = 0.001;
midRange = 1000;
midRangeProbab = 0.01;
maxRange = 5000;
maxRangeProbab = 0.01;
- };
+ };
// zooming reticle scopes
class optic_DMS: ItemCore {
diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml
index c4ac2b1593..f9bd537e3f 100644
--- a/addons/optionsmenu/stringtable.xml
+++ b/addons/optionsmenu/stringtable.xml
@@ -22,6 +22,7 @@
Napraw animację
Corriger animation
Animációk kijavítása
+ Fixa l'animazione
diff --git a/addons/parachute/XEH_postInit.sqf b/addons/parachute/XEH_postInit.sqf
index ead4b33943..19e6d413a2 100644
--- a/addons/parachute/XEH_postInit.sqf
+++ b/addons/parachute/XEH_postInit.sqf
@@ -14,12 +14,13 @@
* Public: No
*/
#include "script_component.hpp"
+
if (!hasInterface) exitWith {};
["ACE3", QGVAR(showAltimeter), localize "STR_ACE_Parachute_showAltimeter",
{
// Conditions: canInteract
- if !([ACE_player, objNull, ["isNotEscorting"]] call EFUNC(common,canInteractWith)) exitWith {false};
+ if !([ACE_player, objNull, ["isNotEscorting", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
if (!('ACE_Altimeter' in assignedItems ace_player)) exitWith {false};
if (!(missionNamespace getVariable [QGVAR(AltimeterActive), false])) then {
[ace_player] call FUNC(showAltimeter);
@@ -40,5 +41,4 @@ GVAR(PFH) = false;
}] call EFUNC(common,addEventHandler);
// don't show speed and height when in expert mode
-["Parachute", {if (!cadetMode) then {_dlg = _this select 0; {(_dlg displayCtrl _x) ctrlShow false} forEach [121, 122, 1004, 1005, 1006, 1014];};}] call EFUNC(common,addInfoDisplayEventHandler); //@todo addEventHandler infoDisplayChanged with select 1 == "Parachute"
-["Soldier", {if (!cadetMode) then {_dlg = _this select 0; {_ctrl = (_dlg displayCtrl _x); _ctrl ctrlSetPosition [0,0,0,0]; _ctrl ctrlCommit 0;} forEach [380, 382]};}] call EFUNC(common,addInfoDisplayEventHandler); //@todo addEventHandler infoDisplayChanged with select 1 == "Soldier"
+["infoDisplayChanged", {_this call FUNC(handleInfoDisplayChanged)}] call EFUNC(common,addEventHandler);
diff --git a/addons/parachute/XEH_preInit.sqf b/addons/parachute/XEH_preInit.sqf
index 91c24606c6..f446d955b8 100644
--- a/addons/parachute/XEH_preInit.sqf
+++ b/addons/parachute/XEH_preInit.sqf
@@ -18,6 +18,7 @@
ADDON = false;
PREP(doLanding);
+PREP(handleInfoDisplayChanged);
PREP(hideAltimeter);
PREP(onEachFrame);
PREP(showAltimeter);
diff --git a/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf
new file mode 100644
index 0000000000..9b076256dd
--- /dev/null
+++ b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf
@@ -0,0 +1,41 @@
+/*
+ * Author: commy2
+ * Hides the height and velocity display while freefalling or parachuting on higher difficulties.
+ *
+ * Arguments:
+ * Stuff from infoDisplayChanged eventhandler.
+ *
+ * Return Value:
+ * None
+ *
+ * Public: No
+ */
+#include "script_component.hpp"
+
+private ["_dialog", "_type"];
+
+_dialog = _this select 0;
+_type = _this select 1;
+
+// don't do anything in noob mode
+if (cadetMode) exitWith {};
+
+switch (_type) do {
+ case ("Parachute"): {
+ {
+ (_dialog displayCtrl _x) ctrlShow false;
+ } forEach [121, 122, 1004, 1005, 1006, 1014];
+ };
+
+ case ("Soldier"): {
+ {
+ private "_control";
+ _control = (_dialog displayCtrl _x);
+
+ // these reset ctrlShow every frame by the engine. Set height/width to 0 as work around.
+ _control ctrlSetPosition [0,0,0,0];
+ _control ctrlCommit 0;
+ } forEach [380, 382];
+ };
+};
+nil // switch might return true if no case was found. Just to make sure the return value matches
diff --git a/addons/parachute/functions/fnc_showAltimeter.sqf b/addons/parachute/functions/fnc_showAltimeter.sqf
index a8200fb2ca..45816cc883 100644
--- a/addons/parachute/functions/fnc_showAltimeter.sqf
+++ b/addons/parachute/functions/fnc_showAltimeter.sqf
@@ -14,19 +14,24 @@
* Public: Yes
*/
#include "script_component.hpp"
+
private ["_unit"];
+
_unit = _this select 0;
-(["ACE_Altimeter"] call BIS_fnc_rscLayer) cutRsc ["ACE_Altimeter", "PLAIN",0,true];
+
+(["ACE_Altimeter"] call BIS_fnc_rscLayer) cutRsc ["ACE_Altimeter", "PLAIN", 0, true];
if (isNull (uiNamespace getVariable ["ACE_Altimeter", displayNull])) exitWith {};
GVAR(AltimeterActive) = true;
+
[{
- if (!GVAR(AltimeterActive)) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);};
+ if (!GVAR(AltimeterActive)) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler)};
disableSerialization;
EXPLODE_4_PVT(_this select 0,_display,_unit,_oldHeight,_prevTime);
- if !("ACE_Altimeter" in assignedItems _unit) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler);call FUNC(hideAltimeter);};
+ if !("ACE_Altimeter" in assignedItems _unit) exitWith {[_this select 1] call CALLSTACK(cba_fnc_removePerFrameEventHandler); call FUNC(hideAltimeter)};
+
+ private ["_height", "_hour", "_minute", "_descentRate","_HeightText", "_DecendRate", "_TimeText", "_curTime", "_timeDiff"];
- private ["_height", "_hour", "_minute", "_descentRate","_HeightText", "_DecendRate", "_TimeText", "_curTime"];
_HeightText = _display displayCtrl 1100;
_DecendRate = _display displayCtrl 1000;
_TimeText = _display displayCtrl 1001;
@@ -35,7 +40,8 @@ GVAR(AltimeterActive) = true;
_height = (getPosASL _unit) select 2;
_curTime = time;
- _descentRate = floor ((_oldHeight - _height) / (_curTime - _prevTime));
+ _timeDiff = _curTime - _prevTime;
+ _descentRate = if(_timeDiff > 0) then {floor((_oldHeight - _height) / _timeDiff)} else {0};
_TimeText ctrlSetText (format ["%1:%2",[_hour, 2] call EFUNC(common,numberToDigitsString),[_minute, 2] call EFUNC(common,numberToDigitsString)]);
_HeightText ctrlSetText (format ["%1", floor(_height)]);
diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml
index 52ccaefe77..a1de714331 100644
--- a/addons/parachute/stringtable.xml
+++ b/addons/parachute/stringtable.xml
@@ -11,6 +11,7 @@
Altímetro
Magasságmérő
Высотомер
+ Altimetro
Altimeter Watch
@@ -21,6 +22,7 @@
Reloj altímetro
Magasságmérős karóra
Часы с высотомером
+ Controlla l'altimetro
Used to show height, descent rate and the time.
@@ -31,6 +33,7 @@
Utilizado para mostrar altura, tasa de descenso y hora.
Mutatja a magasságot, a zuhanási sebességet, és az időt.
Используется для определения высоты, скорости снижения и времени.
+ Usato per mostrare l'altitudine, la velocità di discesa e l'ora.
Non-Steerable Parachute
@@ -41,6 +44,7 @@
Neříditelný padák
Irányíthatatlan ejtőernyő
Неуправляемый парашют
+ Paracadute non manovrabile
-
\ No newline at end of file
+
diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml
index 7c401fec05..51956670b7 100644
--- a/addons/reload/stringtable.xml
+++ b/addons/reload/stringtable.xml
@@ -10,6 +10,7 @@
Sprawdź stan amunicji przy przeładowaniu broni
Vérification des munitions au rechargement
Lőszer ellenőrzése a fegyver újratöltésekor
+ Controlla le munizioni ricaricando
Check the ammo in your new magazine on magazine reload.
@@ -20,6 +21,7 @@
Pokaż stan amunicji w nowym magazynku przy przeładowaniu broni
Vérification du nombre de munition au rechargement
A lőszer ellenőrzése az új tárad behelyezésekor újratöltés közben.
+ Controlla le munizioni rimanenti nel caricatore in fase di cambio caricatore.
Check Ammo
@@ -54,6 +56,7 @@
Podłącz taśmę
Gurt anhängen
Töltényheveder összekötése
+ Attacca la tracolla
Linking belt...
@@ -64,6 +67,7 @@
Podłączanie taśmy...
Gurt anhängen ...
Töltényheveder összekötése folyamatban...
+ Attacco la tracolla...
diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml
index ff5637eaf6..7716050334 100644
--- a/addons/reloadlaunchers/stringtable.xml
+++ b/addons/reloadlaunchers/stringtable.xml
@@ -11,6 +11,7 @@
Załaduj wyrzutnię
Charger lanceur
Kilövö betöltése
+ Carica lanciamissili
Loading launcher ...
@@ -21,6 +22,7 @@
Nabíjím odpalovač ...
Ładowanie wyrzutni ...
Kilövő betöltés alatt ...
+ Carico il lanciamissili ...
Launcher loaded
@@ -31,6 +33,7 @@
Odpalovač nabit
Wyrzutnia załadowana
Kilövő betöltve
+ Lanciamissili caricato
Load %1
@@ -41,6 +44,7 @@
Nabít %1
Załadowano %1
%1 betöltése
+ Caricato %1
diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml
index 409a149f83..65e21c0107 100644
--- a/addons/respawn/stringtable.xml
+++ b/addons/respawn/stringtable.xml
@@ -10,6 +10,7 @@
Rozmieszczenie za 5 sekund ...
Respawn za 5 sekund...
Kihelyezés 5 másodperc múlva ...
+ Dispiegamento in 5 secondi ...
Rallypoint deployed
@@ -20,6 +21,7 @@
Punkt zbiórki rozmieszczony
Rallypoint umístěn
Gyülekezőpont elhelyezve
+ Rallypoint dispiegato
Teleported to Base
@@ -30,6 +32,7 @@
Przeteleportowano do bazy
Odteleportován na základnu
Bázisra teleportálva
+ Teleportato alla base
Teleported to Rallypoint
@@ -40,36 +43,43 @@
Przeteleportowano do punktu zbiórki
Odteleportován na rallypoint
Gyülekezőpontra teleportálva
+ Teleportato al rallypoint
Rallypoint West (Base)
Sammelpunkt West (Basis)
Punto de reunión Oeste (Base)
+ Точка сбора Синих (База)
Rallypoint East (Base)
Sammelpunkt Ost (Basis)
Punto de reunión Este (Base)
+ Точка сбора Красных (База)
Rallypoint Independent (Base)
Sammelpunkt Widerstand (Basis)
Punto de reunión Independiente (Base)
+ Точка сбора Независимых (База
Rallypoint West
Sammelpunkt West
Punto de reunión Oeste
+ Точка сбора Синих
Rallypoint East
Sammelpunkt Ost
Punto de reunión Este
+ Точка сбора Красных
Rallypoint Independent
Sammelpunkt Widerstand
Punto de reunión Independiente
+ Точка сбора Независимых
\ No newline at end of file
diff --git a/addons/safemode/stringtable.xml b/addons/safemode/stringtable.xml
index 40691bd7da..521651999a 100644
--- a/addons/safemode/stringtable.xml
+++ b/addons/safemode/stringtable.xml
@@ -10,6 +10,7 @@
Biztonságos mód
Предохранитель
Sécurité
+ Sicura inserita
Take off Safety
@@ -20,6 +21,7 @@
Biztonsági kapcsoló eltolása
Снять с предохранителя
Enlever sécurité
+ Togli la sicura
Put on Safety
@@ -30,6 +32,7 @@
Biztonsági kapcsoló helyretolása
Поставить на предохранитель
Sécurité mise
+ Inserisci la sicura
Took off Safety
@@ -40,6 +43,7 @@
Biztonságos mód megszüntetve
Снят с предохранителя
Sécurité enlevée
+ Togli la sicura
diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml
index 4a06a779b5..dd5abdef55 100644
--- a/addons/scopes/stringtable.xml
+++ b/addons/scopes/stringtable.xml
@@ -6,54 +6,63 @@
Zerowanie powoli w górę
Малая корректировка ВВЕРХ
Ajuste menor arriba
+ Regola leggermente alzata in alto
Minor adjustment down
Zerowanie powoli w dół
Малая корректировка ВНИЗ
Ajuste menor abajo
+ Regola leggermente alzata in basso
Minor adjustment right
Zerowanie powoli w prawo
Малая корректировка ВПРАВО
Ajuste menor derecha
+ Regola leggermente il tiro a destra
Minor adjustment left
Zerowanie powoli w lewo
Малая корректировка ВЛЕВО
Ajuste menor izquierda
+ Regola leggermete il tiro a sinistra
Major adjustment up
Zerowanie w górę
Большая корректировка ВВЕРХ
Ajuste mayor arriba
+ Regola l'alzata in alto
Major adjustment down
Zerowanie w dół
Большая корректировка ВНИЗ
Ajuste mayor abajo
+ Regola l'alzata in basso
Major adjustment right
Zerowanie w prawo
Большая корректировка ВПРАВО
Ajuste mayor derecha
+ Regola il tiro a destra
Major adjustment left
Zerowanie w lewo
Большая корректировка ВЛЕВО
Ajuste mayor izquierda
+ Regola il tiro a sinistra
Set zero adjustment
Zresetuj wyzerowanie
Сбросить корректировку
Establecer ajuste a cero
+ Resetta i valori del tiro
diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml
index c95da37337..58b0b46d6d 100644
--- a/addons/switchunits/stringtable.xml
+++ b/addons/switchunits/stringtable.xml
@@ -10,6 +10,7 @@
Cambiado de unidad
Unité changée
Egység átváltva
+ Cambia unità
This unit is too close to the enemy.
@@ -20,6 +21,7 @@
Esta unidad está demasiado cerca del enemigo.
Cette unité est trop proche des ennemis
Ez az egység túl közel van az ellenséghez.
+ Questa unità è troppo vicina al nemico.
diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml
index a327352f9b..e62f9fdc5f 100644
--- a/addons/vehiclelock/stringtable.xml
+++ b/addons/vehiclelock/stringtable.xml
@@ -10,6 +10,7 @@
Odemknout vozidlo
Jármű nyitása
Открыть машину
+ Apri il veicolo
Lock Vehicle
@@ -20,6 +21,7 @@
Zamknout vozidlo
Jármű zárása
Закрыть машину
+ Chiudi il veicolo
Lockpick Vehicle
@@ -30,6 +32,7 @@
Vypáčit vozidlo
Jármű feltörése
Взломать замок
+ Scassina veicolo
Picking Lock....
@@ -40,6 +43,7 @@
Páčim vozidlo...
Zár feltörése...
Взламываем замок...
+ Scassino il veicolo....
A custom key that will open a specific vehicle.
@@ -50,6 +54,7 @@
Vlastní klíč, který otevře konkrétní vozidlo.
Egy egyedi kulcs, ami egy meghatározott járművet nyit ki.
Ключ от конкретной машины.
+ Una chiave personalizzata che apre determinati veicoli.
A Master Key will open any lock, no matter what!
@@ -60,6 +65,7 @@
Hlavní klíč otevře libovolný zámek, bez vyjímek!
Egy főkulcs, ami minden zárat kinyit, helyzettől függetlenül!
Универсальный ключ, открывающий любой замок.
+ Una chiave principale che apre qualsiasi serratura!
A lockpick set that can pick the locks of most vehicles.
@@ -70,6 +76,7 @@
Sada paklíčů, která dokáže odemknout zámky u většiny vozidel.
Egy tolvajkulcs-készlet, mely a legtöbb jármű zárjait fel tudja törni.
Набор отмычек, которым можно взломать почти любую машину.
+ Un grimardello per forzare la maggior parte dei veicoli
A key that should open most WEST vehicles.
@@ -79,7 +86,8 @@
Klucz, który powinien otworzyć większość pojazdów ZACHODU.
Klíč který by měl otevřít většinou Západních vozidel.
Egy kulcs, ami a NYUGAT egységeinek legtöbb járművét ki tudja nyitni.
- Ключ для открытия большинства машин Запада.
+ Ключ для открытия большинства машин Красных.
+ Una chiave che apre la maggior parte dei veicoli WEST
A key that should open most EAST vehicle.
@@ -89,7 +97,8 @@
Klucz, który powinien otworzyć większość pojazdów WSCHODU.
Egy kulcs, ami a KELET egységeinek legtöbb járművét ki tudja nyitni.
Klíč který by měl otevřít vetšinu Východních vozidel.
- Ключ для открытия большинства машин Востока.
+ Ключ для открытия большинства машин Синих.
+ Una chaive che apr ela maggior parte dei veicoli EAST
A key that should open most INDEP vehicle.
@@ -100,6 +109,7 @@
Egy kulcs, ami a FÜGGETLEN egységek legtöbb járművét ki tudja nyitni.
Klíč který by měl otevřít většinu Nezávislých vozidel.
Ключ для открытия большинства машин Независимых.
+ Una chaive che apr ela maggior parte dei veicoli INDEP
A key that should open most CIV vehicle.
@@ -110,6 +120,7 @@
Klíč který by měl otevřít většinu Civilních vozidel.
Egy kulcs, ami a CIVIL járművek többségét ki tudja nyitni.
Ключ для открытия большинства машин Гражданских.
+ Una chaive che apr ela maggior parte dei veicoli CIV
diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml
index d534ecd29b..08bb510f6c 100644
--- a/addons/weaponselect/stringtable.xml
+++ b/addons/weaponselect/stringtable.xml
@@ -10,6 +10,7 @@
Wyświetl tekst przy rzucie granatem
Afficher texte lors d'un lancé de grenade
Szöveg mutatása gránát eldobásakor
+ Mostra indicazioni nel lancio granate
Display a hint or text on grenade throw.
@@ -20,6 +21,7 @@
Wyświetla powiadomienie lub tekst przy rzucie granatem.
Afficher texte/info au lancé de grenade
Jelez egy súgót vagy szöveget a gránát eldobásakor.
+ Mostra un suggerimento quando si lanciano granate
Select Pistol
@@ -55,7 +57,7 @@
Sélectionner Lanceur
Rakétavető Kiválasztása
Selecionar Lançador
- Seleziona il Lanciatore
+ Seleziona il Lanciamissili
Select Grenade Launcher
@@ -162,6 +164,7 @@
Gránát: %1
Граната %1
Grenade %1
+ Granata %1
Ready Grenade
@@ -172,6 +175,7 @@
Gránát előkészítése
Подготовить гранату
Grenade prête
+ Granata pronta
Select Frag Grenade
@@ -194,7 +198,7 @@
Nem-robbanó Gránát Kiválasztása
Zvolit Ne-Výbušný Granát
Selecionar Granada
- Seleziona Altre Granate
+ Seleziona granate non a frammentazione
Выбрать гранату
@@ -218,6 +222,7 @@
Žádné granáty
Nincs több gránát
Гранат не осталось
+ Granate esaurite
No frags left
@@ -229,7 +234,7 @@
Už nejsou granáty
Não há granadas de fragmentação restantes
Nessuna granata a frammentazione rimanente
- Осколочныких гранат нет
+ Осколочных гранат нет
No misc. grenades left
@@ -264,6 +269,7 @@
Wystrzel granat dymny
Füstvető eltüzelése
Запустить дымовую завесу
+ Lancia fumogeno
-
+
\ No newline at end of file
diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf
index 75e1277fee..9276e710da 100644
--- a/addons/weather/XEH_postInit.sqf
+++ b/addons/weather/XEH_postInit.sqf
@@ -39,6 +39,7 @@ _fnc_updateWind = {
// Update Rain
_fnc_updateRain = {
+ private ["_oldStrength","_rainStrength","_transitionTime","_periodPosition","_periodPercent"];
if(GVAR(enableRain)) then {
if(!isNil "ACE_RAIN_PARAMS" && {!isNil QGVAR(rain_period_start_time)}) then {
_oldStrength = ACE_RAIN_PARAMS select 0;
@@ -56,6 +57,7 @@ _fnc_updateRain = {
// Update Temperature
_fnc_updateTemperature = {
+ private ["_time","_month","_hourlyCoef","_avgTemperature","_pS1","_pS2"];
_time = daytime;
_month = date select 1;
diff --git a/addons/weather/functions/fnc_displayWindInfo.sqf b/addons/weather/functions/fnc_displayWindInfo.sqf
index 61d556a27c..d84cddd106 100644
--- a/addons/weather/functions/fnc_displayWindInfo.sqf
+++ b/addons/weather/functions/fnc_displayWindInfo.sqf
@@ -1,6 +1,5 @@
/*
* Author: Ruthberg
- *
* Displays a wind info (colored arrow) in the top left corner of the screen
*
* Argument:
@@ -29,13 +28,13 @@ GVAR(WindInfo) = true;
[{
private ["_windSpeed", "_windDir", "_playerDir", "_windIndex", "_windColor", "_newWindSpeed", "_windSource", "_height"];
-
+
if !(GVAR(WindInfo) && !(underwater ACE_player) && vehicle ACE_player == ACE_player) exitWith {
GVAR(WindInfo) = false;
0 cutText ["", "PLAIN"];
[_this select 1] call cba_fnc_removePerFrameHandler;
};
-
+
_windIndex = 12;
_windColor = [1, 1, 1, 1];
@@ -46,7 +45,7 @@ GVAR(WindInfo) = true;
} else {
vectorMagnitude ACE_wind;
};
-
+
if (_windSpeed > 0.2) then {
_playerDir = getDir ACE_player;
_windDir = (ACE_wind select 0) atan2 (ACE_wind select 1);
diff --git a/addons/weather/functions/fnc_getMapData.sqf b/addons/weather/functions/fnc_getMapData.sqf
index 86a05fb225..fecf9f34f7 100644
--- a/addons/weather/functions/fnc_getMapData.sqf
+++ b/addons/weather/functions/fnc_getMapData.sqf
@@ -1,6 +1,5 @@
/*
* Author: Ruthberg, esteldunedain
- *
* Get the weather data for the current map
*
* Argument:
diff --git a/addons/weather/functions/fnc_getWind.sqf b/addons/weather/functions/fnc_getWind.sqf
index e25d53309d..b0fbf5e8fa 100644
--- a/addons/weather/functions/fnc_getWind.sqf
+++ b/addons/weather/functions/fnc_getWind.sqf
@@ -1,4 +1,15 @@
+/*
+ * Author: ACE2 Team
+ * Calculate current wind locally from the data broadcasted by the server
+ *
+ * Argument:
+ * None
+ *
+ * Return value:
+ * Wind
+ */
#include "script_component.hpp"
+private ["_dir","_dirInc","_dirRange","_period","_periodPercent","_periodPosition","_return","_spd","_spdInc","_spdRange"];
_return = [0,0,0];
if(!isNil "ACE_WIND_PARAMS") then {
diff --git a/addons/weather/functions/fnc_serverController.sqf b/addons/weather/functions/fnc_serverController.sqf
index 7646475e81..e29836fc18 100644
--- a/addons/weather/functions/fnc_serverController.sqf
+++ b/addons/weather/functions/fnc_serverController.sqf
@@ -1,4 +1,15 @@
+/*
+ * Author: ACE2 Team, esteldunedain
+ * Calculate the wind and rain evolution on the server. Broadcast the current and next values to the clients
+ *
+ * Argument:
+ * None
+ *
+ * Return value:
+ * None
+ */
#include "script_component.hpp"
+private ["_gustCount","_gustDir","_gustSpeed","_gustTime","_gusts","_i","_lastRain","_maxInterval","_rainOverCast","_startDir","_startSpeed","_time","_timeTillGust","_transitionTime"];
// Rain simulation
if(GVAR(rain_period_count) > GVAR(rain_next_period)) then {
diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml
index 060d9b6f51..2278bf350d 100644
--- a/addons/weather/stringtable.xml
+++ b/addons/weather/stringtable.xml
@@ -7,6 +7,7 @@
Показать информацию о погоде
Afficher information du vent
Mostrar información del viento
+ Mostra informazioni sul vento
diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml
index 897a3c556b..8e2e00d96e 100644
--- a/addons/winddeflection/stringtable.xml
+++ b/addons/winddeflection/stringtable.xml
@@ -11,6 +11,7 @@
Vent
Windinformationen
Szélinformáció
+ Informazioni sul vento
Direction: %1
@@ -21,6 +22,7 @@
Direction %1
Windrichtung: %1
Irány: %1
+ Direzione: %1
Speed: %1 m/s
@@ -31,6 +33,7 @@
Vitesse %1 m/s
Geschwindigkeit: %1m/s
Sebesség: %1 m/s
+ Velocità: %1 m/s
Weather Information
@@ -41,6 +44,7 @@
Météo
Wetterinformationen
Időjárás-Információ
+ Meteo
Humidity: %1%
@@ -51,6 +55,7 @@
Humidité: %1%
Luftfeuchtigkeit: %1
Páratartalom: %1%
+ Umidità: %1%
diff --git a/tools/make.py b/tools/make.py
index bd27f893f5..29cf3f1956 100644
--- a/tools/make.py
+++ b/tools/make.py
@@ -200,7 +200,10 @@ def find_depbo_tools(regKey):
reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
try:
- k = winreg.OpenKey(reg, r"Software\Mikero\pboProject")
+ try:
+ k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\pboProject")
+ except FileNotFoundError:
+ k = winreg.OpenKey(reg, r"Software\Mikero\pboProject")
try:
pboproject_path = winreg.QueryValueEx(k, "exe")[0]
winreg.CloseKey(k)
@@ -208,7 +211,10 @@ def find_depbo_tools(regKey):
except:
print_error("ERROR: Could not find pboProject.")
- k = winreg.OpenKey(reg, r"Software\Mikero\rapify")
+ try:
+ k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\rapify")
+ except FileNotFoundError:
+ k = winreg.OpenKey(reg, r"Software\Mikero\rapify")
try:
rapify_path = winreg.QueryValueEx(k, "exe")[0]
winreg.CloseKey(k)
@@ -216,7 +222,10 @@ def find_depbo_tools(regKey):
except:
print_error("Could not find rapify.")
- k = winreg.OpenKey(reg, r"Software\Mikero\MakePbo")
+ try:
+ k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\MakePbo")
+ except FileNotFoundError:
+ k = winreg.OpenKey(reg, r"Software\Mikero\MakePbo")
try:
makepbo_path = winreg.QueryValueEx(k, "exe")[0]
winreg.CloseKey(k)
diff --git a/tools/make64.py b/tools/make64.py
deleted file mode 100644
index b6635f884e..0000000000
--- a/tools/make64.py
+++ /dev/null
@@ -1,837 +0,0 @@
-#!/usr/bin/env python
-# vim: set fileencoding=utf-8 :
-
-# make.py
-# An Arma 3 addon build system
-
-###############################################################################
-
-# The MIT License (MIT)
-
-# Copyright (c) 2013-2014 Ryan Schultz
-
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-###############################################################################
-
-__version__ = "0.3dev"
-
-import sys
-
-if sys.version_info[0] == 2:
- print("Python 3 is required.")
- sys.exit(1)
-
-import os
-import os.path
-import shutil
-import platform
-import glob
-import subprocess
-import hashlib
-import configparser
-import json
-import traceback
-import time
-import re
-
-if sys.platform == "win32":
- import winreg
-
-###############################################################################
-# http://akiscode.com/articles/sha-1directoryhash.shtml
-# Copyright (c) 2009 Stephen Akiki
-# MIT License (Means you can do whatever you want with this)
-# See http://www.opensource.org/licenses/mit-license.php
-# Error Codes:
-# -1 -> Directory does not exist
-# -2 -> General error (see stack traceback)
-def get_directory_hash(directory):
- directory_hash = hashlib.sha1()
- if not os.path.exists (directory):
- return -1
-
- try:
- for root, dirs, files in os.walk(directory):
- for names in files:
- path = os.path.join(root, names)
- try:
- f = open(path, 'rb')
- except:
- # You can't open the file for some reason
- f.close()
- continue
-
- while 1:
- # Read file in as little chunks
- buf = f.read(4096)
- if not buf: break
- new = hashlib.sha1(buf)
- directory_hash.update(new.digest())
- f.close()
-
- except:
- # Print the stack traceback
- traceback.print_exc()
- return -2
-
- return directory_hash.hexdigest()
-
-# Copyright (c) André Burgaud
-# http://www.burgaud.com/bring-colors-to-the-windows-console-with-python/
-if sys.platform == "win32":
- from ctypes import windll, Structure, c_short, c_ushort, byref
-
- SHORT = c_short
- WORD = c_ushort
-
- class COORD(Structure):
- """struct in wincon.h."""
- _fields_ = [
- ("X", SHORT),
- ("Y", SHORT)]
-
- class SMALL_RECT(Structure):
- """struct in wincon.h."""
- _fields_ = [
- ("Left", SHORT),
- ("Top", SHORT),
- ("Right", SHORT),
- ("Bottom", SHORT)]
-
- class CONSOLE_SCREEN_BUFFER_INFO(Structure):
- """struct in wincon.h."""
- _fields_ = [
- ("dwSize", COORD),
- ("dwCursorPosition", COORD),
- ("wAttributes", WORD),
- ("srWindow", SMALL_RECT),
- ("dwMaximumWindowSize", COORD)]
-
- # winbase.h
- STD_INPUT_HANDLE = -10
- STD_OUTPUT_HANDLE = -11
- STD_ERROR_HANDLE = -12
-
- # wincon.h
- FOREGROUND_BLACK = 0x0000
- FOREGROUND_BLUE = 0x0001
- FOREGROUND_GREEN = 0x0002
- FOREGROUND_CYAN = 0x0003
- FOREGROUND_RED = 0x0004
- FOREGROUND_MAGENTA = 0x0005
- FOREGROUND_YELLOW = 0x0006
- FOREGROUND_GREY = 0x0007
- FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified.
-
- BACKGROUND_BLACK = 0x0000
- BACKGROUND_BLUE = 0x0010
- BACKGROUND_GREEN = 0x0020
- BACKGROUND_CYAN = 0x0030
- BACKGROUND_RED = 0x0040
- BACKGROUND_MAGENTA = 0x0050
- BACKGROUND_YELLOW = 0x0060
- BACKGROUND_GREY = 0x0070
- BACKGROUND_INTENSITY = 0x0080 # background color is intensified.
-
- stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
- SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
- GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo
-
- def get_text_attr():
- """Returns the character attributes (colors) of the console screen
- buffer."""
- csbi = CONSOLE_SCREEN_BUFFER_INFO()
- GetConsoleScreenBufferInfo(stdout_handle, byref(csbi))
- return csbi.wAttributes
-
- def set_text_attr(color):
- """Sets the character attributes (colors) of the console screen
- buffer. Color is a combination of foreground and background color,
- foreground and background intensity."""
- SetConsoleTextAttribute(stdout_handle, color)
-###############################################################################
-
-def find_bi_tools(work_drive):
- """Find BI tools."""
-
- reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
- try:
- k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools")
- arma3tools_path = winreg.QueryValueEx(k, "path")[0]
- winreg.CloseKey(k)
- except:
- raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.")
-
- addonbuilder_path = os.path.join(arma3tools_path, "AddonBuilder", "AddonBuilder.exe")
- dssignfile_path = os.path.join(arma3tools_path, "DSSignFile", "DSSignFile.exe")
- dscreatekey_path = os.path.join(arma3tools_path, "DSSignFile", "DSCreateKey.exe")
- cfgconvert_path = os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe")
-
- if os.path.isfile(addonbuilder_path) and os.path.isfile(dssignfile_path) and os.path.isfile(dscreatekey_path) and os.path.isfile(cfgconvert_path):
- return [addonbuilder_path, dssignfile_path, dscreatekey_path, cfgconvert_path]
- else:
- raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.")
-
-def find_depbo_tools(regKey):
- """Use registry entries to find DePBO-based tools."""
- stop = False
-
- if regKey == "HKCU":
- reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
- stop = True
- else:
- reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
-
- try:
- k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\pboProject")
- try:
- pboproject_path = winreg.QueryValueEx(k, "exe")[0]
- winreg.CloseKey(k)
- print("Found pboproject.")
- except:
- print_error("ERROR: Could not find pboProject.")
-
- k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\rapify")
- try:
- rapify_path = winreg.QueryValueEx(k, "exe")[0]
- winreg.CloseKey(k)
- print("Found rapify.")
- except:
- print_error("Could not find rapify.")
-
- k = winreg.OpenKey(reg, r"Software\Wow6432Node\Mikero\MakePbo")
- try:
- makepbo_path = winreg.QueryValueEx(k, "exe")[0]
- winreg.CloseKey(k)
- print("Found makepbo.")
- except:
- print_error("Could not find makepbo.")
- except:
- if stop == True:
- raise Exception("BadDePBO", "DePBO tools not installed correctly")
- return -1
-
-
- #Strip any quotations from the path due to a MikeRo tool bug which leaves a trailing space in some of its registry paths.
- return [pboproject_path.strip('"'),rapify_path.strip('"'),makepbo_path.strip('"')]
-
-def color(color):
- """Set the color. Works on Win32 and normal terminals."""
- if sys.platform == "win32":
- if color == "green":
- set_text_attr(FOREGROUND_GREEN | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY)
- elif color == "red":
- set_text_attr(FOREGROUND_RED | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY)
- elif color == "blue":
- set_text_attr(FOREGROUND_BLUE | get_text_attr() & 0x0070 | FOREGROUND_INTENSITY)
- elif color == "reset":
- set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070)
- elif color == "grey":
- set_text_attr(FOREGROUND_GREY | get_text_attr() & 0x0070)
- else :
- if color == "green":
- sys.stdout.write('\033[92m')
- elif color == "red":
- sys.stdout.write('\033[91m')
- elif color == "blue":
- sys.stdout.write('\033[94m')
- elif color == "reset":
- sys.stdout.write('\033[0m')
-
-def print_error(msg):
- color("red")
- print ("ERROR: " + msg)
- color("reset")
-
-def print_green(msg):
- color("green")
- print(msg)
- color("reset")
-
-def print_blue(msg):
- color("blue")
- print(msg)
- color("reset")
-
-def print_yellow(msg):
- color("yellow")
- print(msg)
- color("reset")
-
-###############################################################################
-
-def main(argv):
- """Build an Arma addon suite in a directory from rules in a make.cfg file."""
- print_blue(("\nmake.py for Arma, v" + __version__))
-
- if sys.platform != "win32":
- print_error("Non-Windows platform (Cygwin?). Please re-run from cmd.")
- sys.exit(1)
-
- reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
- try:
- k = winreg.OpenKey(reg, r"Software\bohemia interactive\arma 3 tools")
- arma3tools_path = winreg.QueryValueEx(k, "path")[0]
- winreg.CloseKey(k)
- except:
- raise Exception("BadTools","Arma 3 Tools are not installed correctly or the P: drive needs to be created.")
-
- # Default behaviors
- test = False # Copy to Arma 3 directory?
- arg_modules = False # Only build modules on command line?
- make_release = False # Make zip file from the release?
- release_version = 0 # Version of release
- use_pboproject = True # Default to pboProject build tool
- make_target = "DEFAULT" # Which section in make.cfg to use for the build
- new_key = False # Make a new key and use it to sign?
- quiet = False # Suppress output from build tool?
-
- # Parse arguments
- if "help" in argv or "-h" in argv or "--help" in argv:
- print ("""
-make.py [help] [test] [force] [key ] [target ] [release ]
- [module name] [module name] [...]
-
-test -- Copy result to Arma 3.
-release -- Make archive with .
-force -- Ignore cache and build all.
-target -- Use rules in make.cfg under heading [] rather than
- default [Make]
-key -- Use key in working directory with to sign. If it does not
- exist, create key.
-quiet -- Suppress command line output from build tool.
-
-If module names are specified, only those modules will be built.
-
-Examples:
- make.py force test
- Build all modules (ignoring cache) and copy the mod folder to the Arma 3
- directory.
- make.py mymodule_gun
- Only build the module named 'mymodule_gun'.
- make.py force key MyNewKey release 1.0
- Build all modules (ignoring cache), sign them with NewKey, and pack them
- into a zip file for release with version 1.0.
-
-
-If a file called $NOBIN$ is found in the module directory, that module will not be binarized.
-
-See the make.cfg file for additional build options.
-""")
- sys.exit(0)
-
- if "force" in argv:
- argv.remove("force")
- force_build = True
- else:
- force_build = False
-
- if "test" in argv:
- test = True
- argv.remove("test")
-
- if "release" in argv:
- make_release = True
- release_version = argv[argv.index("release") + 1]
- argv.remove(release_version)
- argv.remove("release")
-
- if "target" in argv:
- make_target = argv[argv.index("target") + 1]
- argv.remove("target")
- argv.remove(make_target)
- force_build = True
-
- if "key" in argv:
- new_key = True
- key_name = argv[argv.index("key") + 1]
- argv.remove("key")
- argv.remove(key_name)
-
- if "quiet" in argv:
- quiet = True
- argv.remove("quiet")
-
- # Get the directory the make script is in.
- make_root = os.path.dirname(os.path.realpath(__file__))
- make_root_parent = os.path.abspath(os.path.join(os.getcwd(), os.pardir))
- os.chdir(make_root)
-
- # Get latest commit ID
- try:
- gitpath = os.path.join(os.path.dirname(make_root), ".git")
- assert os.path.exists(gitpath)
-
- commit_id = subprocess.check_output(["git", "rev-parse", "HEAD"])
- commit_id = str(commit_id, "utf-8")[:8]
- except:
- print_error("FAILED TO DETERMINE COMMIT ID.")
- commit_id = "NOGIT"
-
- cfg = configparser.ConfigParser();
- try:
- cfg.read(os.path.join(make_root, "make.cfg"))
-
- # Project name (with @ symbol)
- project = cfg.get(make_target, "project", fallback="@"+os.path.basename(os.getcwd()))
-
- # Private key path
- key = cfg.get(make_target, "key", fallback=None)
-
- # Project prefix (folder path)
- prefix = cfg.get(make_target, "prefix", fallback="")
-
- # Should we autodetect modules on a complete build?
- module_autodetect = cfg.getboolean(make_target, "module_autodetect", fallback=True)
-
- # Manual list of modules to build for a complete build
- modules = cfg.get(make_target, "modules", fallback=None)
- # Parse it out
- if modules:
- modules = [x.strip() for x in modules.split(',')]
- else:
- modules = []
-
- # List of directories to ignore when detecting
- ignore = [x.strip() for x in cfg.get(make_target, "ignore", fallback="release").split(',')]
-
- # BI Tools work drive on Windows
- work_drive = cfg.get(make_target, "work_drive", fallback="P:\\")
-
- # Which build tool should we use?
- build_tool = cfg.get(make_target, "build_tool", fallback="addonbuilder").lower()
-
- # Release/build directory, relative to script dir
- release_dir = cfg.get(make_target, "release_dir", fallback="release")
-
- # Project PBO file prefix (files are renamed to prefix_name.pbo)
- pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None)
-
- # Project module Root
- module_root_parent = os.path.abspath(os.path.join(os.path.join(work_drive, prefix), os.pardir))
- module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons"))
- print_green ("module_root: " + module_root)
- if (os.path.isdir(module_root)):
- os.chdir(module_root)
- else:
- print_error ("Directory " + module_root + " does not exist.")
- sys.exit()
-
- except:
- raise
- print_error("Could not parse make.cfg.")
- sys.exit(1)
-
-
-
- # See if we have been given specific modules to build from command line.
- if len(argv) > 1 and not make_release:
- arg_modules = True
- modules = argv[1:]
-
- # Find the tools we need.
- try:
- tools = find_bi_tools(work_drive)
- addonbuilder = tools[0]
- dssignfile = tools[1]
- dscreatekey = tools[2]
- cfgconvert = tools[3]
-
- except:
- print_error("Arma 3 Tools are not installed correctly or the P: drive has not been created.")
- sys.exit(1)
-
- if build_tool == "pboproject":
- try:
- depbo_tools = find_depbo_tools("HKLM")
- if depbo_tools == -1:
- depbo_tools = find_depbo_tools("HKCU")
- pboproject = depbo_tools[0]
- rapifyTool = depbo_tools[1]
- makepboTool = depbo_tools[2]
- except:
- raise
- print_error("Could not find dePBO tools. Download the needed tools from: https://dev.withsix.com/projects/mikero-pbodll/files")
- sys.exit(1)
-
- # Try to open and deserialize build cache file.
- try:
- cache = {}
- with open(os.path.join(make_root, "make.cache"), 'r') as f:
- cache_raw = f.read()
-
- cache = json.loads(cache_raw)
-
- except:
- print ("No cache found.")
- cache = {}
-
- # Get list of subdirs in make root.
- dirs = next(os.walk(module_root))[1]
-
- # Autodetect what directories to build.
- if module_autodetect and not arg_modules:
- modules = []
- for path in dirs:
- # Any dir that has a config.cpp in its root is an addon to build.
- config_path = os.path.join(path, 'config.cpp')
- if os.path.isfile(config_path) and not path in ignore:
- modules.append(path)
-
- # Make the key specified from command line if necessary.
- if new_key:
- if not os.path.isfile(os.path.join(module_root, key_name + ".biprivatekey")):
- print_green("\nRequested key does not exist.")
- ret = subprocess.call([dscreatekey, key_name]) # Created in make_root
- if ret == 0:
- print_blue("Created: " + os.path.join(module_root, key_name + ".biprivatekey"))
- else:
- print_error("Failed to create key!")
-
- try:
- print_blue("Copying public key to release directory.")
-
- try:
- os.makedirs(os.path.join(module_root, release_dir, "Keys"))
- except:
- pass
-
- shutil.copyfile(os.path.join(module_root, key_name + ".bikey"), os.path.join(module_root, release_dir, "Keys", key_name + ".bikey"))
-
- except:
- raise
- print_error("Could not copy key to release directory.")
-
- else:
- print_green("\nNOTE: Using key " + os.path.join(module_root, key_name + ".biprivatekey"))
-
- key = os.path.join(module_root, key_name + ".biprivatekey")
-
-
- # For each module, prep files and then build.
- for module in modules:
- print_green("\nMaking " + module + "-"*max(1, (60-len(module))))
-
- # Cache check
- if module in cache:
- old_sha = cache[module]
- else:
- old_sha = ""
-
- #We always build ACE_common so we can properly show the correct version stamp in the RPT file.
- if module == "common":
- old_sha = ""
-
- # Hash the module
- new_sha = get_directory_hash(os.path.join(module_root, module))
-
- # Check if it needs rebuilt
- # print ("Hash:", new_sha)
- if old_sha == new_sha:
- if not force_build:
- print("Module has not changed.")
- # Skip everything else
- continue
-
- # Only do this if the project isn't stored directly on the work drive.
- # Split the path at the drive name and see if they are on the same drive (usually P:)
- if os.path.splitdrive(module_root)[0] != os.path.splitdrive(work_drive)[0]:
- try:
- # Remove old work drive version (ignore errors)
- shutil.rmtree(os.path.join(work_drive, prefix, module), True)
-
- # Copy module to the work drive
- shutil.copytree(module, os.path.join(work_drive, prefix, module))
-
- except:
- raise
- print_error("ERROR: Could not copy module to work drive. Does the module exist?")
- input("Press Enter to continue...")
- print("Resuming build...")
- continue
- #else:
- #print("WARNING: Module is stored on work drive (" + work_drive + ").")
-
- try:
- # Remove the old pbo, key, and log
- old = os.path.join(module_root, release_dir, project, "Addons", module) + "*"
- files = glob.glob(old)
- for f in files:
- os.remove(f)
-
- if pbo_name_prefix:
- old = os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module) + "*"
- files = glob.glob(old)
- for f in files:
- os.remove(f)
- except:
- raise
- print_error("ERROR: Could not copy module to work drive. Does the module exist?")
- input("Press Enter to continue...")
- print("Resuming build...")
- continue
-
- # Build the module into a pbo
- print_blue("Building: " + os.path.join(work_drive, prefix, module))
- print_blue("Destination: " + os.path.join(module_root, release_dir, project, "Addons"))
-
- # Make destination folder (if needed)
- try:
- os.makedirs(os.path.join(module_root, release_dir, project, "Addons"))
- except:
- pass
-
- # Run build tool
- build_successful = False
- if build_tool == "pboproject":
- try:
- #PABST: Convert config (run the macro'd config.cpp through CfgConvert twice to produce a de-macro'd cpp that pboProject can read without fucking up:
- shutil.copyfile(os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.backup"))
-
- os.chdir("P:\\")
-
- cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-bin", "-dst", os.path.join(work_drive, prefix, module, "config.bin"), os.path.join(work_drive, prefix, module, "config.cpp")]
- ret = subprocess.call(cmd)
- if ret != 0:
- print_error("CfgConvert -bin return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.")
- os.remove(os.path.join(work_drive, prefix, module, "config.cpp"))
- shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp"))
-
- cmd = [os.path.join(arma3tools_path, "CfgConvert", "CfgConvert.exe"), "-txt", "-dst", os.path.join(work_drive, prefix, module, "config.cpp"), os.path.join(work_drive, prefix, module, "config.bin")]
- ret = subprocess.call(cmd)
- if ret != 0:
- print_error("CfgConvert -txt return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.")
- os.remove(os.path.join(work_drive, prefix, module, "config.cpp"))
- shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp"))
-
-
- # Include build number
- try:
- configpath = os.path.join(work_drive, prefix, module, "config.cpp")
- f = open(configpath, "r")
- configtext = f.read()
- f.close()
-
- if configtext:
- patchestext = re.search(r"class CfgPatches\n\{(.*?)\n\}", configtext, re.DOTALL).group(1)
- patchestext = re.sub(r'version(.*?)="(.*?)"', r'version\1="\2-{}"'.format(commit_id), patchestext)
- configtext = re.sub(r"class CfgPatches\n\{(.*?)\n\}", "class CfgPatches\n{"+patchestext+"\n}", configtext, flags=re.DOTALL)
- f = open(configpath, "w")
- f.write(configtext)
- f.close()
- else:
- os.remove(os.path.join(work_drive, prefix, module, "config.cpp"))
- os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp"))
- except:
- raise
- print_error("Failed to include build number")
- continue
-
- if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")):
- print_green("$NOBIN$ Found. Proceeding with non-binarizing!")
- cmd = [makepboTool, "-P","-A","-L","-N","-G", os.path.join(work_drive, prefix, module),os.path.join(module_root, release_dir, project,"Addons")]
-
- else:
- cmd = [pboproject, "-P", os.path.join(work_drive, prefix, module), "+Engine=Arma3", "-S","+Noisy", "+X", "+Clean", "+Mod="+os.path.join(module_root, release_dir, project), "-Key"]
-
- color("grey")
- if quiet:
- devnull = open(os.devnull, 'w')
- ret = subprocess.call(cmd, stdout=devnull)
- devnull.close()
- else:
- ret = subprocess.call(cmd)
- color("reset")
-
- if ret == 0:
- print_green("pboProject return code == " + str(ret))
- # Prettyprefix rename the PBO if requested.
- if pbo_name_prefix:
- try:
- os.rename(os.path.join(module_root, release_dir, project, "Addons", module+".pbo"), os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo"))
- except:
- raise
- print_error("Could not rename built PBO with prefix.")
- # Sign result
- if key:
- print("Signing with " + key + ".")
- if pbo_name_prefix:
- ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")])
- else:
- ret = subprocess.call([dssignfile, key, os.path.join(module_root, release_dir, project, "Addons", module + ".pbo")])
-
- if ret == 0:
- build_successful = True
- else:
- build_successful = True
-
- if not build_successful:
- print_error("pboProject return code == " + str(ret))
- print_error("Module not successfully built/signed.")
- print ("Resuming build...")
- continue
-
- #PABST: cleanup config BS (you could comment this out to see the "de-macroed" cpp
- #print_green("\Pabst (restoring): " + os.path.join(work_drive, prefix, module, "config.cpp"))
- os.remove(os.path.join(work_drive, prefix, module, "config.cpp"))
- os.remove(os.path.join(work_drive, prefix, module, "config.bin"))
- os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp"))
-
- # Back to the root
- os.chdir(module_root)
-
- except:
- raise
- print_error("Could not run Addon Builder.")
- input("Press Enter to continue...")
- print ("Resuming build...")
- continue
-
- elif build_tool== "addonbuilder":
- # Detect $NOBIN$ and do not binarize if found.
- if os.path.isfile(os.path.join(work_drive, prefix, module, "$NOBIN$")):
- do_binarize = False
- print("$NOBIN$ file found in module, packing only.")
- else:
- do_binarize = True
- try:
- # Call AddonBuilder
- os.chdir("P:\\")
-
- cmd = [addonbuilder, os.path.join(work_drive, prefix, module), os.path.join(make_root, release_dir, project, "Addons"), "-clear", "-project="+work_drive]
- if not do_binarize:
- cmd.append("-packonly")
-
- if quiet:
- previousDirectory = os.getcwd()
- os.chdir(arma3tools_path)
- devnull = open(os.devnull, 'w')
- ret = subprocess.call(cmd, stdout=devnull)
- devnull.close()
- os.chdir(previousDirectory)
- else:
- previousDirectory = os.getcwd()
- os.chdir(arma3tools_path)
- print_error("Current directory - " + os.getcwd())
- ret = subprocess.call(cmd)
- os.chdir(previousDirectory)
- print_error("Current directory - " + os.getcwd())
- color("reset")
- print_green("completed")
- # Prettyprefix rename the PBO if requested.
- if pbo_name_prefix:
- try:
- os.rename(os.path.join(make_root, release_dir, project, "Addons", module+".pbo"), os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix+module+".pbo"))
- except:
- raise
- print_error("Could not rename built PBO with prefix.")
-
- if ret == 0:
- # Sign result
- if key:
- print("Signing with " + key + ".")
- if pbo_name_prefix:
- ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", pbo_name_prefix + module + ".pbo")])
- else:
- ret = subprocess.call([dssignfile, key, os.path.join(make_root, release_dir, project, "Addons", module + ".pbo")])
-
- if ret == 0:
- build_successful = True
- else:
- build_successful = True
-
- if not build_successful:
- print_error("Module not successfully built.")
-
- # Back to the root
- os.chdir(make_root)
-
- except:
- raise
- print_error("Could not run Addon Builder.")
- input("Press Enter to continue...")
- print ("Resuming build...")
- continue
-
- else:
- print_error("Unknown build_tool " + build_tool + "!")
-
- # Update the hash for a successfully built module
- if build_successful:
- cache[module] = new_sha
-
- # Done building all modules!
-
- # Write out the cache state
- cache_out = json.dumps(cache)
- with open(os.path.join(make_root, "make.cache"), 'w') as f:
- f.write(cache_out)
-
- # Delete the pboproject temp files if building a release.
- if make_release and build_tool == "pboproject":
- try:
- shutil.rmtree(os.path.join(module_root, release_dir, project, "temp"), True)
- except:
- print_error("ERROR: Could not delete pboProject temp files.")
-
- print_green("\nDone.")
-
- # Make release
- if make_release:
- print_blue("\nMaking release: " + project + "-" + release_version + ".zip")
-
- try:
- # Delete all log files
- for root, dirs, files in os.walk(os.path.join(module_root, release_dir, project, "Addons")):
- for currentFile in files:
- if currentFile.lower().endswith("log"):
- os.remove(os.path.join(root, currentFile))
-
- # Create a zip with the contents of release/ in it
- shutil.make_archive(project + "-" + release_version, "zip", os.path.join(module_root, release_dir))
- except:
- raise
- print_error("Could not make release.")
-
- # Copy to Arma 3 folder for testing
- if test:
- print_blue("\nCopying to Arma 3.")
-
- if sys.platform == "win32":
- reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
- try:
- k = winreg.OpenKey(reg, r"SOFTWARE\Wow6432Node\Bohemia Interactive\Arma 3")
- a3_path = winreg.EnumValue(k, 1)[1]
- winreg.CloseKey(k)
- except:
- print_error("Could not find Arma 3's directory in the registry.")
- else:
- a3_path = cygwin_a3path
-
- if os.path.exists(a3_path):
- try:
- shutil.rmtree(os.path.join(a3_path, project), True)
- shutil.copytree(os.path.join(module_root, release_dir, project), os.path.join(a3_path, project))
- except:
- print_error("Could not copy files. Is Arma 3 running?")
-
-if __name__ == "__main__":
- main(sys.argv)
-input("Press Enter to continue...")