mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' of https://github.com/KoffeinFlummi/ACE3 into windWeatherOverhaul
This commit is contained in:
commit
2fa39615f3
@ -891,6 +891,25 @@ class Heli_Attack_01_base_F: Helicopter_Base_F {
|
|||||||
|
|
||||||
class OpticsIn
|
class OpticsIn
|
||||||
{
|
{
|
||||||
|
class WideUnstabalized
|
||||||
|
{
|
||||||
|
opticsDisplayName = "WU";
|
||||||
|
initAngleX = 0;
|
||||||
|
minAngleX = -35;
|
||||||
|
maxAngleX = 10;
|
||||||
|
initAngleY = 0;
|
||||||
|
minAngleY = -100;
|
||||||
|
maxAngleY = 100;
|
||||||
|
initFov = 0.466;
|
||||||
|
minFov = 0.466;
|
||||||
|
maxFov = 0.466;
|
||||||
|
visionMode[] = {"Normal","Ti"};
|
||||||
|
thermalMode[] = {0,1};
|
||||||
|
gunnerOpticsColor[] = {0,0,0,1};
|
||||||
|
directionStabilized = 0;
|
||||||
|
horizontallyStabilized = 1;
|
||||||
|
gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_wide_F";
|
||||||
|
};
|
||||||
class Wide
|
class Wide
|
||||||
{
|
{
|
||||||
opticsDisplayName = "W";
|
opticsDisplayName = "W";
|
||||||
|
@ -95,9 +95,9 @@ if ((missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false])
|
|||||||
GVAR(workingMemory) set [1, _muzzleVelocity];
|
GVAR(workingMemory) set [1, _muzzleVelocity];
|
||||||
GVAR(workingMemory) set [2, _zeroRange];
|
GVAR(workingMemory) set [2, _zeroRange];
|
||||||
|
|
||||||
private ["_elevationCur", "_windageCur", "_elevationScopeStep", "_windageScopeStep"];
|
private ["_elevationCur", "_windageCur", "_clickSize", "_clickNumber", "_clickInterval"];
|
||||||
_elevationCur = parseNumber(ctrlText 402);
|
_elevationCur = GVAR(workingMemory) select 10;
|
||||||
_windageCur = parseNumber(ctrlText 412);
|
_windageCur = GVAR(workingMemory) select 11;
|
||||||
|
|
||||||
switch (GVAR(currentScopeUnit)) do {
|
switch (GVAR(currentScopeUnit)) do {
|
||||||
case 0: {
|
case 0: {
|
||||||
@ -109,11 +109,16 @@ switch (GVAR(currentScopeUnit)) do {
|
|||||||
_windageCur = _windageCur / 1.047;
|
_windageCur = _windageCur / 1.047;
|
||||||
};
|
};
|
||||||
case 3: {
|
case 3: {
|
||||||
_elevationScopeStep = (GVAR(workingMemory) select 7);
|
switch (GVAR(workingMemory) select 7) do {
|
||||||
_windageScopeStep = (GVAR(workingMemory) select 8);
|
case 0: { _clickSize = 1; };
|
||||||
|
case 1: { _clickSize = 1 / 1.047; };
|
||||||
|
case 2: { _clickSize = 3.38; };
|
||||||
|
};
|
||||||
|
_clickNumber = GVAR(workingMemory) select 8;
|
||||||
|
_clickInterval = _clickSize / _clickNumber;
|
||||||
|
|
||||||
_elevationCur = _elevationCur * _elevationScopeStep;
|
_elevationCur = Round(_elevationCur / _clickInterval);
|
||||||
_windageCur = _windageCur * _windageScopeStep;
|
_windageCur = Round(_windageCur / _clickInterval);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@ class CfgWeapons {
|
|||||||
|
|
||||||
class ACE_IR_Strobe_Item: ACE_ItemCore {
|
class ACE_IR_Strobe_Item: ACE_ItemCore {
|
||||||
ACE_attachable = "ACE_IR_Strobe_Effect";
|
ACE_attachable = "ACE_IR_Strobe_Effect";
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
|
||||||
scope = 2;
|
scope = 2;
|
||||||
displayName = "$STR_ACE_IrStrobe_Name";
|
displayName = "$STR_ACE_IrStrobe_Name";
|
||||||
descriptionShort = "$STR_ACE_IrStrobe_Description";
|
descriptionShort = "$STR_ACE_IrStrobe_Description";
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
class CfgWeapons {
|
class CfgWeapons {
|
||||||
class ItemCore;
|
class ItemCore;
|
||||||
class ACE_ItemCore: ItemCore {
|
class ACE_ItemCore: ItemCore {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
type = 4096;//4;
|
type = 4096;//4;
|
||||||
detectRange = -1;
|
detectRange = -1;
|
||||||
simulation = "ItemMineDetector";
|
simulation = "ItemMineDetector";
|
||||||
@ -13,6 +14,7 @@ class CfgWeapons {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class ACE_FakePrimaryWeapon: Rifle_Base_F {
|
class ACE_FakePrimaryWeapon: Rifle_Base_F {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
scope = 2;
|
scope = 2;
|
||||||
scopeCurator = 1;
|
scopeCurator = 1;
|
||||||
|
|
||||||
@ -30,7 +32,6 @@ class CfgWeapons {
|
|||||||
|
|
||||||
class InventoryItem_Base_F;
|
class InventoryItem_Base_F;
|
||||||
class ACE_Banana: ACE_ItemCore {
|
class ACE_Banana: ACE_ItemCore {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
|
||||||
scope = 2;
|
scope = 2;
|
||||||
displayName = "$STR_ACE_Common_bananaDisplayName";
|
displayName = "$STR_ACE_Common_bananaDisplayName";
|
||||||
descriptionShort = "$STR_ACE_Common_bananaDescr";
|
descriptionShort = "$STR_ACE_Common_bananaDescr";
|
||||||
|
@ -50,7 +50,7 @@ class CfgVehicles {
|
|||||||
class Items_base_F;
|
class Items_base_F;
|
||||||
class ACE_DefuseObject: Items_base_F {
|
class ACE_DefuseObject: Items_base_F {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
author = "ACE";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
_generalMacro = "ACE_DefuseObject";
|
_generalMacro = "ACE_DefuseObject";
|
||||||
displayName = "ACE Defuse Helper";
|
displayName = "ACE Defuse Helper";
|
||||||
mapSize = 0.2;
|
mapSize = 0.2;
|
||||||
@ -80,7 +80,7 @@ class CfgVehicles {
|
|||||||
};
|
};
|
||||||
class ACE_Explosives_Place: Items_base_F {
|
class ACE_Explosives_Place: Items_base_F {
|
||||||
XEH_ENABLED;
|
XEH_ENABLED;
|
||||||
author = "ACE";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
_generalMacro = "ACE_Explosives_Place";
|
_generalMacro = "ACE_Explosives_Place";
|
||||||
displayName = "Multi-meter";
|
displayName = "Multi-meter";
|
||||||
mapSize = 0.2;
|
mapSize = 0.2;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
class CfgMagazines {
|
class CfgMagazines {
|
||||||
class HandGrenade;
|
class HandGrenade;
|
||||||
class ACE_HandFlare_Base: HandGrenade {
|
class ACE_HandFlare_Base: HandGrenade {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
value = 2;
|
value = 2;
|
||||||
nameSoundWeapon = "smokeshell";
|
nameSoundWeapon = "smokeshell";
|
||||||
nameSound = "smokeshell";
|
nameSound = "smokeshell";
|
||||||
@ -41,19 +42,23 @@ class CfgMagazines {
|
|||||||
};
|
};
|
||||||
class ACE_M84: HandGrenade {
|
class ACE_M84: HandGrenade {
|
||||||
ammo = "ACE_G_M84";
|
ammo = "ACE_G_M84";
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
displayname = "$STR_ACE_Grenades_M84_Name";
|
displayname = "$STR_ACE_Grenades_M84_Name";
|
||||||
descriptionshort = "$STR_ACE_Grenades_M84_Description";
|
descriptionshort = "$STR_ACE_Grenades_M84_Description";
|
||||||
displayNameShort = "M84";
|
displayNameShort = "M84";
|
||||||
|
mass = 4;
|
||||||
model = PATHTOF(models\ACE_m84.p3d);
|
model = PATHTOF(models\ACE_m84.p3d);
|
||||||
picture = PATHTOF(UI\ACE_m84_x_ca.paa);
|
picture = PATHTOF(UI\ACE_m84_x_ca.paa);
|
||||||
};
|
};
|
||||||
|
|
||||||
class 3Rnd_UGL_FlareGreen_F;
|
class 3Rnd_UGL_FlareGreen_F;
|
||||||
class 6Rnd_GreenSignal_F: 3Rnd_UGL_FlareGreen_F {
|
class 6Rnd_GreenSignal_F: 3Rnd_UGL_FlareGreen_F {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "F_40mm_Green";
|
ammo = "F_40mm_Green";
|
||||||
initSpeed = 120;
|
initSpeed = 120;
|
||||||
};
|
};
|
||||||
class 6Rnd_RedSignal_F: 6Rnd_GreenSignal_F {
|
class 6Rnd_RedSignal_F: 6Rnd_GreenSignal_F {
|
||||||
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
ammo = "F_40mm_Red";
|
ammo = "F_40mm_Red";
|
||||||
initSpeed = 120;
|
initSpeed = 120;
|
||||||
};
|
};
|
||||||
|
@ -80,7 +80,7 @@ _affected = _grenade nearEntities ["CAManBase", 20];
|
|||||||
|
|
||||||
|
|
||||||
//Add ace_medical pain effect:
|
//Add ace_medical pain effect:
|
||||||
if ((isClass (configFile >> "CfgPatches" >> "ACE_Medical")) && {_strength > 0}) then {
|
if ((isClass (configFile >> "CfgPatches" >> "ACE_Medical")) && {_strength > 0.1}) then {
|
||||||
[ACE_player, (_strength / 2)] call EFUNC(medical,adjustPainLevel);
|
[ACE_player, (_strength / 2)] call EFUNC(medical,adjustPainLevel);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ class CfgWeapons {
|
|||||||
class ACE_ItemCore;
|
class ACE_ItemCore;
|
||||||
|
|
||||||
class ACE_wirecutter: ACE_ItemCore {
|
class ACE_wirecutter: ACE_ItemCore {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
|
||||||
displayName = "$STR_ACE_logistics_wirecutter_wirecutterName";
|
displayName = "$STR_ACE_logistics_wirecutter_wirecutterName";
|
||||||
descriptionShort = "$STR_ACE_logistics_wirecutter_wirecutterDescription";
|
descriptionShort = "$STR_ACE_logistics_wirecutter_wirecutterDescription";
|
||||||
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
||||||
|
@ -4,10 +4,12 @@
|
|||||||
<Key ID="TR_ACE_Medical_litterSimulationDetail">
|
<Key ID="TR_ACE_Medical_litterSimulationDetail">
|
||||||
<English>Litter Simulation Detail</English>
|
<English>Litter Simulation Detail</English>
|
||||||
<Polish>Detale zużytych medykamentów</Polish>
|
<Polish>Detale zużytych medykamentów</Polish>
|
||||||
|
<Spanish>Detalle de simulación de basura</Spanish>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="TR_ACE_Medical_litterSimulationDetail_Desc">
|
<Key ID="TR_ACE_Medical_litterSimulationDetail_Desc">
|
||||||
<English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English>
|
<English>Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting.</English>
|
||||||
<Polish>Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta.</Polish>
|
<Polish>Opcja ta ustawia liczbę zużytych medykamentów, jakie pojawiają się lokalnie wokół gracza. Ich zbyt duża ilość może spowodować spadki FPS, dlatego jest to ustawienie tylko po stronie klienta.</Polish>
|
||||||
|
<Spanish>Detalle simulación de basura establece el número de artículos de basura que se generan a nivel local en el cliente. Las cantidades excesivas en áreas locales podrían causar caída de rendimiento, así que esto es un ajuste de cliente únicamente.</Spanish>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Medical_Inject_Atropine">
|
<Key ID="STR_ACE_Medical_Inject_Atropine">
|
||||||
<English>Inject Atropine</English>
|
<English>Inject Atropine</English>
|
||||||
@ -1634,4 +1636,4 @@
|
|||||||
<French>Aberration chromatique</French>
|
<French>Aberration chromatique</French>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
@ -3,7 +3,6 @@ class CfgWeapons {
|
|||||||
class InventoryItem_Base_F;
|
class InventoryItem_Base_F;
|
||||||
|
|
||||||
class ACE_microDAGR: ACE_ItemCore {
|
class ACE_microDAGR: ACE_ItemCore {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
|
||||||
scope = 2;
|
scope = 2;
|
||||||
displayName = "$STR_ACE_microdagr_itemName";
|
displayName = "$STR_ACE_microdagr_itemName";
|
||||||
descriptionShort = "$STR_ACE_microdagr_itemDescription";
|
descriptionShort = "$STR_ACE_microdagr_itemDescription";
|
||||||
|
@ -20,7 +20,7 @@ class CfgVehicles {
|
|||||||
|
|
||||||
class ACE_Comanche_Test : B_Heli_Attack_01_F {
|
class ACE_Comanche_Test : B_Heli_Attack_01_F {
|
||||||
displayName = "ACE_Comanche_Test";
|
displayName = "ACE_Comanche_Test";
|
||||||
author = "ACE Team";
|
author = "$STR_ACE_Common_ACETeam";
|
||||||
class Library {
|
class Library {
|
||||||
libTextDesc = "ACE_Comanche_Test";
|
libTextDesc = "ACE_Comanche_Test";
|
||||||
};
|
};
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
<Key ID="STR_ACE_MissileGuidance_Desc">
|
<Key ID="STR_ACE_MissileGuidance_Desc">
|
||||||
<English>Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types.</English>
|
<English>Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types.</English>
|
||||||
<Polish>Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych.</Polish>
|
<Polish>Zaawansowane namierzanie rakiet, lub ZNR, dostarcza wiele poprawek do systemu namierzania rakiet oraz dodaje nowe tryby strzału. Jest to wymagana opcja dla broni rakietowych.</Polish>
|
||||||
|
<Spanish>Guía de misiles avanzada, o AMG en sus siglas en inglés, ofrece múltiples mejoras en el fijado y disparo de misiles. Es también un framework requerido para armas de tipo misil.</Spanish>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_ACE_Hydra70_DAGR">
|
<Key ID="STR_ACE_Hydra70_DAGR">
|
||||||
<English>Hydra-70 DAGR Missile</English>
|
<English>Hydra-70 DAGR Missile</English>
|
||||||
|
@ -218,6 +218,7 @@
|
|||||||
<English>Option Menu UI Scaling</English>
|
<English>Option Menu UI Scaling</English>
|
||||||
<French>Menu option: taille de l'UI</French>
|
<French>Menu option: taille de l'UI</French>
|
||||||
<Polish>Skalowanie UI menu ustawień</Polish>
|
<Polish>Skalowanie UI menu ustawień</Polish>
|
||||||
|
<Spanish>Opción de escalado del menú UI</Spanish>
|
||||||
</Key>
|
</Key>
|
||||||
</Package>
|
</Package>
|
||||||
</Project>
|
</Project>
|
@ -5,7 +5,6 @@ class CfgWeapons {
|
|||||||
class ACE_SpareBarrel: ACE_ItemCore {
|
class ACE_SpareBarrel: ACE_ItemCore {
|
||||||
displayname = "$STR_ACE_Overheating_SpareBarrelName";
|
displayname = "$STR_ACE_Overheating_SpareBarrelName";
|
||||||
descriptionshort = "$STR_ACE_Overheating_SpareBarrelDescription";
|
descriptionshort = "$STR_ACE_Overheating_SpareBarrelDescription";
|
||||||
//model = "";
|
|
||||||
picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa));
|
picture = QUOTE(PATHTOF(UI\spare_barrel_ca.paa));
|
||||||
scope = 2;
|
scope = 2;
|
||||||
class ItemInfo: InventoryItem_Base_F {
|
class ItemInfo: InventoryItem_Base_F {
|
||||||
|
@ -3,7 +3,6 @@ class CfgWeapons {
|
|||||||
class ACE_ItemCore;
|
class ACE_ItemCore;
|
||||||
|
|
||||||
class ACE_key_master: ACE_ItemCore {
|
class ACE_key_master: ACE_ItemCore {
|
||||||
author = "$STR_ACE_Common_ACETeam";
|
|
||||||
displayName = "Vehicle Key: Master";
|
displayName = "Vehicle Key: Master";
|
||||||
descriptionShort = "$STR_ACE_Vehicle_Item_Master_Description";
|
descriptionShort = "$STR_ACE_Vehicle_Item_Master_Description";
|
||||||
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
||||||
|
27
documentation/framework/carry-drag.md
Normal file
27
documentation/framework/carry-drag.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
layout: wiki
|
||||||
|
title: Carry and Drag System
|
||||||
|
group: framework
|
||||||
|
order: 5
|
||||||
|
parent: wiki
|
||||||
|
---
|
||||||
|
|
||||||
|
# 1. Config Values
|
||||||
|
|
||||||
|
```
|
||||||
|
class CfgVehicles {
|
||||||
|
class MyVehicle {
|
||||||
|
|
||||||
|
|
||||||
|
ace_dragging_canDrag = 1; // can this object be dragged?; 1 yes, 0 no (0 default)
|
||||||
|
ace_dragging_dragPosition[] = {0,1.2,0} // Offset of the model from the body while dragging, comparable to the offset in attachTo (It's the same actually)
|
||||||
|
ace_dragging_dragDirection = 0; // how much degrees is the model rotatated after dragging it (a global setDir after attachTo)
|
||||||
|
|
||||||
|
ace_dragging_canCarry = 1; // can this object be carried?; 1 yes, 0 no (0 default)
|
||||||
|
ace_dragging_carryPosition[] = {0,1.2,0}; // Same as drag, but for carrying objects
|
||||||
|
ace_dragging_carryDirection = 0; // Same as drag, but for carrying objects
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
@ -293,9 +293,9 @@ def print_yellow(msg):
|
|||||||
print(msg)
|
print(msg)
|
||||||
color("reset")
|
color("reset")
|
||||||
|
|
||||||
|
|
||||||
def copy_important_files(source_dir,destination_dir):
|
def copy_important_files(source_dir,destination_dir):
|
||||||
|
|
||||||
originalDir = os.getcwd()
|
originalDir = os.getcwd()
|
||||||
importantFiles = ["mod.cpp",
|
importantFiles = ["mod.cpp",
|
||||||
"README.md",
|
"README.md",
|
||||||
@ -303,10 +303,10 @@ def copy_important_files(source_dir,destination_dir):
|
|||||||
"LICENSE",
|
"LICENSE",
|
||||||
"logo_ace3_ca.paa"
|
"logo_ace3_ca.paa"
|
||||||
]
|
]
|
||||||
|
|
||||||
print_yellow ("source_dir: " + source_dir)
|
print_yellow ("source_dir: " + source_dir)
|
||||||
print_yellow("destination_dir: " + destination_dir)
|
print_yellow("destination_dir: " + destination_dir)
|
||||||
|
|
||||||
#copy importantFiles
|
#copy importantFiles
|
||||||
try:
|
try:
|
||||||
print_blue("\nSearching for important files in " + source_dir)
|
print_blue("\nSearching for important files in " + source_dir)
|
||||||
@ -316,16 +316,16 @@ def copy_important_files(source_dir,destination_dir):
|
|||||||
except:
|
except:
|
||||||
print_error("COPYING IMPORTANT FILES.")
|
print_error("COPYING IMPORTANT FILES.")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
#copy all extension dlls
|
#copy all extension dlls
|
||||||
try:
|
try:
|
||||||
os.chdir(os.path.join(source_dir))
|
os.chdir(os.path.join(source_dir))
|
||||||
print_blue("\nSearching for DLLs in " + os.getcwd())
|
print_blue("\nSearching for DLLs in " + os.getcwd())
|
||||||
filenames = glob.glob("*.dll")
|
filenames = glob.glob("*.dll")
|
||||||
|
|
||||||
if not filenames:
|
if not filenames:
|
||||||
print ("Empty SET")
|
print ("Empty SET")
|
||||||
|
|
||||||
for dll in filenames:
|
for dll in filenames:
|
||||||
print_green("Copying dll => " + os.path.join(source_dir,dll))
|
print_green("Copying dll => " + os.path.join(source_dir,dll))
|
||||||
if os.path.isfile(dll):
|
if os.path.isfile(dll):
|
||||||
@ -339,15 +339,15 @@ def copy_important_files(source_dir,destination_dir):
|
|||||||
def copy_optionals_for_building(mod,pbos):
|
def copy_optionals_for_building(mod,pbos):
|
||||||
src_directories = os.listdir(optionals_root)
|
src_directories = os.listdir(optionals_root)
|
||||||
current_dir = os.getcwd()
|
current_dir = os.getcwd()
|
||||||
|
|
||||||
print("")
|
print_blue("\nChecking Optionals folder...")
|
||||||
try:
|
try:
|
||||||
|
|
||||||
#special server.pbo processing
|
#special server.pbo processing
|
||||||
files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo"))
|
files = glob.glob(os.path.join(release_dir, "@ace","optionals","*.pbo"))
|
||||||
for file in files:
|
for file in files:
|
||||||
file_name = os.path.basename(file)
|
file_name = os.path.basename(file)
|
||||||
print ("Adding the following file: " + file_name)
|
#print ("Adding the following file: " + file_name)
|
||||||
pbos.append(file_name)
|
pbos.append(file_name)
|
||||||
pbo_path = os.path.join(release_dir, "@ace","optionals",file_name)
|
pbo_path = os.path.join(release_dir, "@ace","optionals",file_name)
|
||||||
if (os.path.isfile(pbo_path)):
|
if (os.path.isfile(pbo_path)):
|
||||||
@ -364,31 +364,38 @@ def copy_optionals_for_building(mod,pbos):
|
|||||||
try:
|
try:
|
||||||
for dir_name in src_directories:
|
for dir_name in src_directories:
|
||||||
mod.append(dir_name)
|
mod.append(dir_name)
|
||||||
|
#userconfig requires special handling since it is not a PBO source folder.
|
||||||
|
#CfgConvert fails to build server.pbo if userconfig is not found in P:\
|
||||||
if (dir_name == "userconfig"):
|
if (dir_name == "userconfig"):
|
||||||
|
if (os.path.exists(os.path.join(release_dir, "@ace","optionals",dir_name))):
|
||||||
|
shutil.rmtree(os.path.join(release_dir, "@ace","optionals",dir_name), True)
|
||||||
|
shutil.copytree(os.path.join(optionals_root,dir_name), os.path.join(release_dir, "@ace","optionals",dir_name))
|
||||||
destination = os.path.join(work_drive,dir_name)
|
destination = os.path.join(work_drive,dir_name)
|
||||||
else:
|
else:
|
||||||
destination = os.path.join(module_root,dir_name)
|
destination = os.path.join(module_root,dir_name)
|
||||||
|
|
||||||
print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.")
|
print("Temporarily copying " + os.path.join(optionals_root,dir_name) + " => " + destination + " for building.")
|
||||||
shutil.rmtree(destination, True)
|
if (os.path.exists(destination)):
|
||||||
|
shutil.rmtree(destination, True)
|
||||||
shutil.copytree(os.path.join(optionals_root,dir_name), destination)
|
shutil.copytree(os.path.join(optionals_root,dir_name), destination)
|
||||||
except:
|
except:
|
||||||
print_error("Copy Optionals Failed")
|
print_error("Copy Optionals Failed")
|
||||||
raise
|
raise
|
||||||
finally:
|
finally:
|
||||||
os.chdir(current_dir)
|
os.chdir(current_dir)
|
||||||
|
|
||||||
def cleanup_optionals(mod,pbos):
|
def cleanup_optionals(mod,pbos):
|
||||||
print("")
|
print("")
|
||||||
try:
|
try:
|
||||||
for dir_name in mod:
|
for dir_name in mod:
|
||||||
|
#userconfig requires special handling since it is not a PBO source folder.
|
||||||
if (dir_name == "userconfig"):
|
if (dir_name == "userconfig"):
|
||||||
destination = os.path.join(work_drive,dir_name)
|
destination = os.path.join(work_drive,dir_name)
|
||||||
else:
|
else:
|
||||||
destination = os.path.join(module_root,dir_name)
|
destination = os.path.join(module_root,dir_name)
|
||||||
|
|
||||||
print("Cleaning " + destination)
|
print("Cleaning " + destination)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
file_name = "ace_{}.pbo".format(dir_name)
|
file_name = "ace_{}.pbo".format(dir_name)
|
||||||
src_file_path = os.path.join(release_dir, "@ace","addons",file_name)
|
src_file_path = os.path.join(release_dir, "@ace","addons",file_name)
|
||||||
@ -400,7 +407,7 @@ def cleanup_optionals(mod,pbos):
|
|||||||
print_error(file_name + " already exists")
|
print_error(file_name + " already exists")
|
||||||
continue
|
continue
|
||||||
shutil.rmtree(destination)
|
shutil.rmtree(destination)
|
||||||
|
|
||||||
except:
|
except:
|
||||||
print_error("Cleaning Optionals Failed")
|
print_error("Cleaning Optionals Failed")
|
||||||
raise
|
raise
|
||||||
@ -528,7 +535,7 @@ See the make.cfg file for additional build options.
|
|||||||
global release_dir
|
global release_dir
|
||||||
global module_root_parent
|
global module_root_parent
|
||||||
global optionals_root
|
global optionals_root
|
||||||
|
|
||||||
cfg.read(os.path.join(make_root, "make.cfg"))
|
cfg.read(os.path.join(make_root, "make.cfg"))
|
||||||
|
|
||||||
# Project name (with @ symbol)
|
# Project name (with @ symbol)
|
||||||
@ -562,7 +569,7 @@ See the make.cfg file for additional build options.
|
|||||||
|
|
||||||
# Release/build directory, relative to script dir
|
# Release/build directory, relative to script dir
|
||||||
release_dir = cfg.get(make_target, "release_dir", fallback="release")
|
release_dir = cfg.get(make_target, "release_dir", fallback="release")
|
||||||
|
|
||||||
# Project PBO file prefix (files are renamed to prefix_name.pbo)
|
# Project PBO file prefix (files are renamed to prefix_name.pbo)
|
||||||
pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None)
|
pbo_name_prefix = cfg.get(make_target, "pbo_name_prefix", fallback=None)
|
||||||
|
|
||||||
@ -571,7 +578,7 @@ See the make.cfg file for additional build options.
|
|||||||
module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons"))
|
module_root = cfg.get(make_target, "module_root", fallback=os.path.join(make_root_parent, "addons"))
|
||||||
optionals_root = os.path.join(module_root_parent, "optionals")
|
optionals_root = os.path.join(module_root_parent, "optionals")
|
||||||
print_green ("module_root: " + module_root)
|
print_green ("module_root: " + module_root)
|
||||||
|
|
||||||
if (os.path.isdir(module_root)):
|
if (os.path.isdir(module_root)):
|
||||||
os.chdir(module_root)
|
os.chdir(module_root)
|
||||||
else:
|
else:
|
||||||
@ -583,9 +590,9 @@ See the make.cfg file for additional build options.
|
|||||||
else:
|
else:
|
||||||
print_error ("Directory " + optionals_root + " does not exist.")
|
print_error ("Directory " + optionals_root + " does not exist.")
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
print_green ("release_dir: " + release_dir)
|
print_green ("release_dir: " + release_dir)
|
||||||
|
|
||||||
except:
|
except:
|
||||||
raise
|
raise
|
||||||
print_error("Could not parse make.cfg.")
|
print_error("Could not parse make.cfg.")
|
||||||
@ -633,14 +640,14 @@ See the make.cfg file for additional build options.
|
|||||||
print ("No cache found.")
|
print ("No cache found.")
|
||||||
cache = {}
|
cache = {}
|
||||||
|
|
||||||
#Temporarily copy optionals_root for building. They will be removed later.
|
#Temporarily copy optionals_root for building. They will be removed later.
|
||||||
optionals_modules = []
|
optionals_modules = []
|
||||||
optional_files = []
|
optional_files = []
|
||||||
copy_optionals_for_building(optionals_modules,optional_files)
|
copy_optionals_for_building(optionals_modules,optional_files)
|
||||||
|
|
||||||
# Get list of subdirs in make root.
|
# Get list of subdirs in make root.
|
||||||
dirs = next(os.walk(module_root))[1]
|
dirs = next(os.walk(module_root))[1]
|
||||||
|
|
||||||
# Autodetect what directories to build.
|
# Autodetect what directories to build.
|
||||||
if module_autodetect and not arg_modules:
|
if module_autodetect and not arg_modules:
|
||||||
modules = []
|
modules = []
|
||||||
@ -681,10 +688,11 @@ See the make.cfg file for additional build options.
|
|||||||
|
|
||||||
|
|
||||||
# For each module, prep files and then build.
|
# For each module, prep files and then build.
|
||||||
|
print_blue("\nBuilding...")
|
||||||
for module in modules:
|
for module in modules:
|
||||||
print_green("\nMaking " + module + "-"*max(1, (60-len(module))))
|
print_green("\nMaking " + module + "-"*max(1, (60-len(module))))
|
||||||
missing = False
|
missing = False
|
||||||
|
|
||||||
# Cache check
|
# Cache check
|
||||||
if module in cache:
|
if module in cache:
|
||||||
old_sha = cache[module]
|
old_sha = cache[module]
|
||||||
@ -697,7 +705,7 @@ See the make.cfg file for additional build options.
|
|||||||
|
|
||||||
# Hash the module
|
# Hash the module
|
||||||
new_sha = get_directory_hash(os.path.join(module_root, module))
|
new_sha = get_directory_hash(os.path.join(module_root, module))
|
||||||
|
|
||||||
# Is the pbo file missing?
|
# Is the pbo file missing?
|
||||||
missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module)))
|
missing = not os.path.isfile(os.path.join(release_dir, project, "addons", "ace_{}.pbo".format(module)))
|
||||||
if missing:
|
if missing:
|
||||||
@ -781,7 +789,7 @@ See the make.cfg file for additional build options.
|
|||||||
print_error("CfgConvert -txt return code == " + str(ret) + ". Usually means there is a syntax error within the config.cpp file.")
|
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"))
|
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"))
|
shutil.copyfile(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp"))
|
||||||
|
|
||||||
|
|
||||||
# Include build number
|
# Include build number
|
||||||
try:
|
try:
|
||||||
@ -799,7 +807,7 @@ See the make.cfg file for additional build options.
|
|||||||
f.close()
|
f.close()
|
||||||
else:
|
else:
|
||||||
os.remove(os.path.join(work_drive, prefix, module, "config.cpp"))
|
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"))
|
os.rename(os.path.join(work_drive, prefix, module, "config.backup"), os.path.join(work_drive, prefix, module, "config.cpp"))
|
||||||
except:
|
except:
|
||||||
raise
|
raise
|
||||||
print_error("Failed to include build number")
|
print_error("Failed to include build number")
|
||||||
|
Loading…
Reference in New Issue
Block a user