Merge branch 'master' into pr/9758

This commit is contained in:
johnb432 2024-04-03 00:30:38 +02:00
commit cea3f6e199
32 changed files with 184 additions and 174 deletions

View File

@ -22,11 +22,11 @@ private _type = typeOf _vehicle;
private _config = configOf _vehicle; private _config = configOf _vehicle;
// If vehicle had space given to it via eden/public, then override config hasCargo setting // If vehicle had space given to it via eden/public, then override config hasCargo setting
private _hasCargoPublic = _item getVariable QGVAR(hasCargo); private _hasCargoPublic = _vehicle getVariable QGVAR(hasCargo);
private _hasCargoPublicDefined = !isNil "_canLoadPublic"; private _hasCargoPublicDefined = !isNil "_canLoadPublic";
if (_hasCargoPublicDefined && {!(_hasCargoPublic isEqualType false)}) then { if (_hasCargoPublicDefined && {!(_hasCargoPublic isEqualType false)}) then {
WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_item,_type,QGVAR(hasCargo),_hasCargoPublic); WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_vehicle,_type,QGVAR(hasCargo),_hasCargoPublic);
}; };
private _hasCargoConfig = getNumber (_config >> QGVAR(hasCargo)) == 1; private _hasCargoConfig = getNumber (_config >> QGVAR(hasCargo)) == 1;

View File

@ -40,6 +40,8 @@ if (isNil "_modelPath") then {
case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" }; case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" };
case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" }; case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" };
case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" }; case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" };
case "CUP_FxCartridge_545": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge545.p3d" };
case "CUP_FxCartridge_939": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge939.p3d" };
case "": { "" }; case "": { "" };
default { "A3\Weapons_f\ammo\cartridge.p3d" }; default { "A3\Weapons_f\ammo\cartridge.p3d" };
}; };

View File

@ -1,7 +1,7 @@
#include "..\script_component.hpp" #include "..\script_component.hpp"
/* /*
* Author: Garth 'L-H' de Wet * Author: Garth 'L-H' de Wet
* Adds an item, weapon, or magazine to the unit's inventory or places it in a weaponHolder if no space. * Adds an item, weapon, or magazine to the unit's inventory or places it in a weapon holder if no space.
* *
* Arguments: * Arguments:
* 0: Unit <OBJECT> * 0: Unit <OBJECT>
@ -11,10 +11,10 @@
* *
* Return Value: * Return Value:
* 0: Added to player <BOOL> * 0: Added to player <BOOL>
* 1: weaponholder <OBJECT> * 1: Weapon holder item was placed in <OBJECT>
* *
* Example: * Example:
* [bob, "classname", "", 5] call ace_common_fnc_addToInventory * [player, "30Rnd_65x39_caseless_mag", "", 5] call ace_common_fnc_addToInventory
* *
* Public: Yes * Public: Yes
*/ */
@ -26,6 +26,7 @@ private _type = _classname call FUNC(getItemType);
private _canAdd = false; private _canAdd = false;
private _canFitWeaponSlot = false; private _canFitWeaponSlot = false;
private _addedToUnit = false; private _addedToUnit = false;
private _weaponHolder = _unit;
switch (_container) do { switch (_container) do {
case "vest": { case "vest": {
@ -94,11 +95,13 @@ switch (_type select 0) do {
} else { } else {
_addedToUnit = false; _addedToUnit = false;
private _pos = _unit modelToWorldVisual [0,1,0.05]; _weaponHolder = nearestObject [_unit, "WeaponHolder"];
_unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then {
_unit addWeaponCargoGlobal [_classname, 1]; _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"];
_unit setPosATL _pos; };
_weaponHolder addWeaponCargoGlobal [_classname, 1];
}; };
}; };
@ -127,11 +130,13 @@ switch (_type select 0) do {
} else { } else {
_addedToUnit = false; _addedToUnit = false;
private _pos = _unit modelToWorldVisual [0,1,0.05]; _weaponHolder = nearestObject [_unit, "WeaponHolder"];
_unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then {
_unit addMagazineAmmoCargo [_classname, 1, _ammoCount]; _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"];
_unit setPosATL _pos; };
_weaponHolder addMagazineAmmoCargo [_classname, 1, _ammoCount];
}; };
}; };
@ -156,11 +161,13 @@ switch (_type select 0) do {
} else { } else {
_addedToUnit = false; _addedToUnit = false;
private _pos = _unit modelToWorldVisual [0,1,0.05]; _weaponHolder = nearestObject [_unit, "WeaponHolder"];
_unit = createVehicle ["WeaponHolder_Single_F", _pos, [], 0, "NONE"]; if (isNull _weaponHolder || {_unit distance _weaponHolder > 2}) then {
_unit addItemCargoGlobal [_classname, 1]; _weaponHolder = createVehicle ["GroundWeaponHolder", _unit, [], 0, "CAN_COLLIDE"];
_unit setPosATL _pos; };
_weaponHolder addItemCargoGlobal [_classname, 1];
}; };
}; };
@ -170,4 +177,4 @@ switch (_type select 0) do {
}; };
}; };
[_addedToUnit, _unit] [_addedToUnit, _weaponHolder]

View File

@ -15,7 +15,7 @@ class CfgWeapons {
deployTime = 20; deployTime = 20;
pickupTime = 25; pickupTime = 25;
class assembleTo { class assembleTo {
ace_csw_mortarBaseplate = "CUP_O_2b14_82mm_RU"; ace_csw_mortarBaseplate = "CUP_I_2b14_82mm_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -31,7 +31,7 @@ class CfgWeapons {
picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa";
class ace_csw: ace_csw { class ace_csw: ace_csw {
class assembleTo { class assembleTo {
ace_csw_mortarBaseplate = "CUP_B_M252_US"; ace_csw_mortarBaseplate = "CUP_I_M252_AAF";
}; };
}; };
}; };
@ -42,7 +42,7 @@ class CfgWeapons {
picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa"; picture = "\CUP\Weapons\CUP_Weapons_StaticWeapons\M252\data\ui\icomap_mortar_m251_ca.paa";
class ace_csw: ace_csw { class ace_csw: ace_csw {
class assembleTo { class assembleTo {
ace_csw_mortarBaseplate = "CUP_B_L16A2_BAF_MPT"; ace_csw_mortarBaseplate = "CUP_I_L16A2_AAF";
}; };
}; };
}; };
@ -58,8 +58,8 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_m3Tripod = "CUP_B_M2StaticMG_US"; ace_csw_m3Tripod = "CUP_I_M2StaticMG_AAF";
ace_csw_m3TripodLow = "CUP_B_M2StaticMG_MiniTripod_US"; ace_csw_m3TripodLow = "CUP_I_M2StaticMG_MiniTripod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -81,8 +81,8 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_kordTripod = "CUP_O_DSHKM_ChDKZ"; ace_csw_kordTripod = "CUP_I_DSHKM_AAF";
ace_csw_kordTripodLow = "CUP_O_DSHkM_MiniTriPod_ChDKZ"; ace_csw_kordTripodLow = "CUP_I_DSHKM_MiniTriPod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -104,8 +104,8 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_kordTripod = "CUP_O_KORD_high_RU"; ace_csw_kordTripod = "CUP_I_KORD_high_AAF";
ace_csw_kordTripodLow = "CUP_O_KORD_RU"; ace_csw_kordTripodLow = "CUP_I_KORD_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -127,7 +127,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_sag30Tripod = "CUP_O_AGS_RU"; ace_csw_sag30Tripod = "CUP_I_AGS_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -149,7 +149,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_m3TripodLow = "CUP_B_MK19_TriPod_US"; ace_csw_m3TripodLow = "CUP_I_MK19_TriPod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -168,7 +168,7 @@ class CfgWeapons {
type = "mount"; type = "mount";
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
deploy = "CUP_O_Metis_RU"; deploy = "CUP_I_Metis_AAF";
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
mass = 300; mass = 300;
@ -186,7 +186,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_m220Tripod = "CUP_B_TOW_TriPod_US"; ace_csw_m220Tripod = "CUP_I_TOW_TriPod_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -200,7 +200,7 @@ class CfgWeapons {
class CUP_TOW2_carry: CUP_TOW_carry { class CUP_TOW2_carry: CUP_TOW_carry {
class ace_csw: ace_csw { class ace_csw: ace_csw {
class assembleTo { class assembleTo {
ace_csw_m220Tripod = "CUP_B_TOW2_TriPod_US"; ace_csw_m220Tripod = "CUP_I_TOW2_TriPod_AAF";
}; };
}; };
}; };
@ -216,7 +216,7 @@ class CfgWeapons {
deployTime = 4; deployTime = 4;
pickupTime = 4; pickupTime = 4;
class assembleTo { class assembleTo {
ace_csw_spg9Tripod = "CUP_B_SPG9_CDF"; ace_csw_spg9Tripod = "CUP_I_SPG9_AAF";
}; };
}; };
class WeaponSlotsInfo: WeaponSlotsInfo { class WeaponSlotsInfo: WeaponSlotsInfo {
@ -287,4 +287,3 @@ class CfgWeapons {
magazineReloadTime = 0.5; magazineReloadTime = 0.5;
}; };
}; };

View File

@ -5,7 +5,6 @@ class CfgVehicles {
class StaticGrenadeLauncher; class StaticGrenadeLauncher;
class rhs_SPG9_base: AT_01_base_F { class rhs_SPG9_base: AT_01_base_F {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_SPG9); proxyWeapon = QGVAR(rhs_weap_SPG9);
@ -26,7 +25,6 @@ class CfgVehicles {
}; };
class rhs_Kornet_Base: AT_01_base_F { class rhs_Kornet_Base: AT_01_base_F {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_9K133_launcher); proxyWeapon = QGVAR(rhs_weap_9K133_launcher);
@ -40,7 +38,6 @@ class CfgVehicles {
}; };
class rhs_Metis_Base: AT_01_base_F { class rhs_Metis_Base: AT_01_base_F {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_9K115_2_launcher); proxyWeapon = QGVAR(rhs_weap_9K115_2_launcher);
@ -54,7 +51,6 @@ class CfgVehicles {
}; };
class rhs_2b14_82mm_Base: StaticMortar { class rhs_2b14_82mm_Base: StaticMortar {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
magazineLocation = ""; magazineLocation = "";
@ -99,7 +95,6 @@ class CfgVehicles {
}; };
class RHS_AGS30_TriPod_base: StaticGrenadeLauncher { class RHS_AGS30_TriPod_base: StaticGrenadeLauncher {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_AGS30); proxyWeapon = QGVAR(rhs_weap_AGS30);

View File

@ -1,7 +1,6 @@
class CfgVehicles { class CfgVehicles {
class StaticMGWeapon; class StaticMGWeapon;
class rhs_DSHKM_base: StaticMGWeapon { class rhs_DSHKM_base: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ACE_CSW { class ACE_CSW {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(rhs_weap_DSHKM); proxyWeapon = QGVAR(rhs_weap_DSHKM);

View File

@ -1,43 +0,0 @@
class ctrlCombo;
class Cfg3DEN {
class Attributes {
class Default;
class Title: Default {
class Controls {
class Title;
};
};
class Combo: Title {
class Controls: Controls {
class Title: 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

@ -138,7 +138,6 @@ class CfgVehicles {
class StaticMGWeapon: StaticWeapon {}; class StaticMGWeapon: StaticWeapon {};
class HMG_01_base_F: StaticMGWeapon { class HMG_01_base_F: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ADDON { class ADDON {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(HMG_Static); proxyWeapon = QGVAR(HMG_Static);
@ -198,7 +197,6 @@ class CfgVehicles {
class GMG_TriPod; class GMG_TriPod;
class GMG_01_base_F: GMG_TriPod { class GMG_01_base_F: GMG_TriPod {
// ENABLE_CSW_ATTRIBUTE;
class ADDON { class ADDON {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(GMG_20mm); // Weapon Proxy (Shorter Reload Time) [CfgWeapons] proxyWeapon = QGVAR(GMG_20mm); // Weapon Proxy (Shorter Reload Time) [CfgWeapons]
@ -232,7 +230,6 @@ class CfgVehicles {
class AT_01_base_F: StaticMGWeapon { class AT_01_base_F: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ADDON { class ADDON {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(Titan_AT_Static); proxyWeapon = QGVAR(Titan_AT_Static);
@ -246,7 +243,6 @@ class CfgVehicles {
}; };
class AA_01_base_F: StaticMGWeapon { class AA_01_base_F: StaticMGWeapon {
// ENABLE_CSW_ATTRIBUTE;
class ADDON { class ADDON {
enabled = 1; enabled = 1;
proxyWeapon = QGVAR(Titan_AA_Static); // Weapon Proxy (Shorter Reload Time) [CfgWeapons] proxyWeapon = QGVAR(Titan_AA_Static); // Weapon Proxy (Shorter Reload Time) [CfgWeapons]
@ -262,7 +258,6 @@ class CfgVehicles {
class StaticMortar: StaticWeapon {}; class StaticMortar: StaticWeapon {};
class Mortar_01_base_F: StaticMortar { class Mortar_01_base_F: StaticMortar {
// ENABLE_CSW_ATTRIBUTE;
class ADDON { class ADDON {
enabled = 1; enabled = 1;
magazineLocation = ""; magazineLocation = "";

View File

@ -15,7 +15,6 @@ class CfgPatches {
}; };
}; };
#include "Cfg3den.hpp"
#include "CfgEventHandlers.hpp" #include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp" #include "CfgVehicles.hpp"
#include "CfgWeapons.hpp" #include "CfgWeapons.hpp"

View File

@ -40,7 +40,7 @@ private _nearSupplies = [_gunner] + ((_staticWeapon nearSupplies 10) select {
} forEach ((magazineCargo _xSource) select {isClass (_cfgMagGroups >> _x)}); } forEach ((magazineCargo _xSource) select {isClass (_cfgMagGroups >> _x)});
TRACE_2("",_xSource,_cswMagazines); TRACE_2("",_xSource,_cswMagazines);
private _compatibleMags = [_weapon] call CBA_fnc_compatibleMagazines; private _compatibleMags = compatibleMagazines _weapon;
if (_magazine != "") then { if (_magazine != "") then {
_compatibleMags insert [0, [_magazine]]; _compatibleMags insert [0, [_magazine]];
}; };

View File

@ -22,4 +22,4 @@ private _assemblyMode = [false, true, true, GVAR(defaultAssemblyMode)] select (_
private _notCrewed = (crew _staticWeapon) isEqualTo []; private _notCrewed = (crew _staticWeapon) isEqualTo [];
private _deadCrew = !(alive (gunner _staticWeapon)); // need to eject body??? private _deadCrew = !(alive (gunner _staticWeapon)); // need to eject body???
_assemblyMode && {_notCrewed || _deadCrew} _assemblyMode && {alive _staticWeapon} && {_notCrewed || _deadCrew}

View File

@ -23,7 +23,7 @@
private _secondaryWeaponClassname = secondaryWeapon _player; private _secondaryWeaponClassname = secondaryWeapon _player;
// handle loaded launchers which can become csw like CUP Metis // handle loaded launchers which can become csw like CUP Metis
private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""]; private _secondaryWeaponMagazine = secondaryWeaponMagazine _player param [0, ""];
_player removeWeaponGlobal (secondaryWeapon _player); _player removeWeaponGlobal _secondaryWeaponClassname;
private _onFinish = { private _onFinish = {
params ["_args"]; params ["_args"];
@ -75,5 +75,5 @@
}; };
private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime"); private _deployTime = getNumber(configFile >> "CfgWeapons" >> _secondaryWeaponClassname >> QUOTE(ADDON) >> "deployTime");
[TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, localize LSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar); [TIME_PROGRESSBAR(_deployTime), [_player, _secondaryWeaponClassname, _secondaryWeaponMagazine], _onFinish, _onFailure, LLSTRING(PlaceTripod_progressBar)] call EFUNC(common,progressBar);
}, _this] call CBA_fnc_execNextFrame; }, _this] call CBA_fnc_execNextFrame;

View File

@ -23,10 +23,13 @@
private _tripodClassname = typeOf _tripod; private _tripodClassname = typeOf _tripod;
_player removeWeaponGlobal _carryWeaponClassname; _player removeWeaponGlobal _carryWeaponClassname;
private _assembledClassname = getText(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "assembleTo" >> _tripodClassname); private _weaponConfig = configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON);
private _deployTime = getNumber(configfile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "deployTime"); private _assembledClassname = getText (_weaponConfig >> "assembleTo" >> _tripodClassname);
if (!isClass (configFile >> "CfgVehicles" >> _assembledClassname)) exitWith {ERROR_1("bad static classname [%1]",_assembledClassname);}; if (!isClass (configFile >> "CfgVehicles" >> _assembledClassname)) exitWith {ERROR_1("bad static classname [%1]",_assembledClassname);};
private _deployTime = getNumber (_weaponConfig >> "deployTime");
TRACE_4("",_carryWeaponClassname,_tripodClassname,_assembledClassname,_deployTime); TRACE_4("",_carryWeaponClassname,_tripodClassname,_assembledClassname,_deployTime);
private _onFinish = { private _onFinish = {
@ -69,8 +72,9 @@
private _codeCheck = { private _codeCheck = {
params ["_args"]; params ["_args"];
_args params ["_tripod"]; _args params ["_tripod"];
!isNull _tripod;
alive _tripod
}; };
[TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, localize LSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar); [TIME_PROGRESSBAR(_deployTime), [_tripod, _player, _assembledClassname, _carryWeaponClassname], _onFinish, _onFailure, LLSTRING(AssembleCSW_progressBar), _codeCheck] call EFUNC(common,progressBar);
}, _this] call CBA_fnc_execNextFrame; }, _this] call CBA_fnc_execNextFrame;

View File

@ -37,10 +37,9 @@
params ["_args"]; params ["_args"];
_args params ["_tripod", "_player"]; _args params ["_tripod", "_player"];
!(isNull _tripod) && { (secondaryWeapon _player) isEqualTo "" } (alive _tripod) && {secondaryWeapon _player == ""}
}; };
TRACE_3("",_pickupTime,typeOf _tripod,_tripodClassname); TRACE_3("",_pickupTime,typeOf _tripod,_tripodClassname);
[TIME_PROGRESSBAR(_pickupTime), [_tripod, _player, _tripodClassname], _onFinish, {}, localize LSTRING(PickupTripod_progressBar), _condition] call EFUNC(common,progressBar); [TIME_PROGRESSBAR(_pickupTime), [_tripod, _player, _tripodClassname], _onFinish, {}, LLSTRING(PickupTripod_progressBar), _condition] call EFUNC(common,progressBar);
}, _this] call CBA_fnc_execNextFrame; }, _this] call CBA_fnc_execNextFrame;

View File

@ -19,14 +19,24 @@
params ["_staticWeapon", "_player"]; params ["_staticWeapon", "_player"];
TRACE_2("assemble_pickupWeapon",_staticWeapon,_player); TRACE_2("assemble_pickupWeapon",_staticWeapon,_player);
private _onDisassembleFunc = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleFunc"); private _weaponConfig = configOf _staticWeapon >> QUOTE(ADDON);
private _carryWeaponClassname = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleWeapon"); private _carryWeaponClassname = getText (_weaponConfig >> "disassembleWeapon");
private _turretClassname = getText(configOf _staticWeapon >> QUOTE(ADDON) >> "disassembleTurret");
if (!isClass (configFile >> "CfgWeapons" >> _carryWeaponClassname)) exitWith {
ERROR_1("bad weapon classname [%1]",_carryWeaponClassname);
};
private _turretClassname = getText (_weaponConfig >> "disassembleTurret");
// Turret classname can equal nothing if the deploy bag is the "whole" weapon. e.g Kornet, Metis, other ATGMs
if ((_turretClassname != "") && {!isClass (configFile >> "CfgVehicles" >> _turretClassname)}) exitWith {
ERROR_1("bad turret classname [%1]",_turretClassname);
};
private _onDisassembleFunc = getText (_weaponConfig >> "disassembleFunc");
private _pickupTime = getNumber (configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime"); private _pickupTime = getNumber (configFile >> "CfgWeapons" >> _carryWeaponClassname >> QUOTE(ADDON) >> "pickupTime");
TRACE_4("",typeOf _staticWeapon,_carryWeaponClassname,_turretClassname,_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 isNotEqualTo "") && {!isClass (configFile >> "CfgVehicles" >> _turretClassname)}) exitWith {ERROR_1("bad turret classname [%1]",_turretClassname);};
private _onFinish = { private _onFinish = {
params ["_args"]; params ["_args"];
@ -38,14 +48,14 @@
private _weaponDir = getDir _staticWeapon; private _weaponDir = getDir _staticWeapon;
private _carryWeaponMag = ""; private _carryWeaponMag = "";
private _carryWeaponMags = getArray (configFile >> "CfgWeapons" >> _carryWeaponClassname >> "magazines") apply {toLowerANSI _x}; private _carryWeaponMags = compatibleMagazines _carryWeaponClassname;
LOG("remove ammo"); LOG("remove ammo");
{ {
_x params ["_xMag", "", "_xAmmo"]; _x params ["_xMag", "", "_xAmmo"];
if (_xAmmo == 0) then {continue}; if (_xAmmo == 0) then {continue};
private _carryMag = _xMag call FUNC(getCarryMagazine); private _carryMag = _xMag call FUNC(getCarryMagazine);
if (_carryWeaponMag isEqualTo "" && {toLowerANSI _carryMag in _carryWeaponMags}) then { if (_carryWeaponMag == "" && {_carryMag in _carryWeaponMags}) then {
TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag); TRACE_3("Adding mag to secondary weapon",_xMag,_xAmmo,_carryMag);
_carryWeaponMag = _carryMag; _carryWeaponMag = _carryMag;
DEC(_xAmmo); DEC(_xAmmo);
@ -100,5 +110,5 @@
((crew _staticWeapon) isEqualTo []) && (alive _staticWeapon) ((crew _staticWeapon) isEqualTo []) && (alive _staticWeapon)
}; };
[TIME_PROGRESSBAR(_pickupTime), [_staticWeapon, _player, _carryWeaponClassname, _turretClassname, _onDisassembleFunc], _onFinish, {}, localize LSTRING(DisassembleCSW_progressBar), _condition] call EFUNC(common,progressBar); [TIME_PROGRESSBAR(_pickupTime), [_staticWeapon, _player, _carryWeaponClassname, _turretClassname, _onDisassembleFunc], _onFinish, {}, LLSTRING(DisassembleCSW_progressBar), _condition] call EFUNC(common,progressBar);
}, _this] call CBA_fnc_execNextFrame; }, _this] call CBA_fnc_execNextFrame;

View File

@ -44,9 +44,9 @@ private _actions = [];
private _displayName = getText (_cfgMagazines >> _carryMag >> "displayName"); private _displayName = getText (_cfgMagazines >> _carryMag >> "displayName");
private _picture = getText (_cfgMagazines >> _carryMag >> "picture"); private _picture = getText (_cfgMagazines >> _carryMag >> "picture");
private _text = if (_isBeltLinking) then { private _text = if (_isBeltLinking) then {
format [localize LSTRING(actionLink), _displayName]; format [LLSTRING(actionLink), _displayName];
} else { } else {
format [localize LSTRING(loadX), _displayName]; format [LLSTRING(loadX), _displayName];
}; };
private _action = [format ["load_%1", _forEachIndex], _text, _picture, _statement, _condition, {}, _x] call EFUNC(interact_menu,createAction); private _action = [format ["load_%1", _forEachIndex], _text, _picture, _statement, _condition, {}, _x] call EFUNC(interact_menu,createAction);

View File

@ -23,8 +23,9 @@ private _statement = {
TRACE_5("starting unload",_target,_turretPath,_player,_carryMag,_vehMag); TRACE_5("starting unload",_target,_turretPath,_player,_carryMag,_vehMag);
private _timeToUnload = 1; private _timeToUnload = 1;
if (!isNull (configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime")) then { private _config = configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime";
_timeToUnload = getNumber (configOf _target >> QUOTE(ADDON) >> "ammoUnloadTime"); if (!isNull _config) then {
_timeToUnload = getNumber _config;
}; };
[ [
@ -36,7 +37,7 @@ private _statement = {
[QGVAR(removeTurretMag), [_target, _turretPath, _carryMag, _vehMag, _player]] call CBA_fnc_globalEvent; [QGVAR(removeTurretMag), [_target, _turretPath, _carryMag, _vehMag, _player]] call CBA_fnc_globalEvent;
}, },
{TRACE_1("unload progressBar fail",_this);}, {TRACE_1("unload progressBar fail",_this);},
format [localize LSTRING(unloadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")], format [LLSTRING(unloadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")],
{(_this select 0) call FUNC(reload_canUnloadMagazine)}, {(_this select 0) call FUNC(reload_canUnloadMagazine)},
["isNotInside"] ["isNotInside"]
] call EFUNC(common,progressBar); ] call EFUNC(common,progressBar);

View File

@ -66,7 +66,7 @@ if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then {
TRACE_1("Adding Actions",_typeOf); TRACE_1("Adding Actions",_typeOf);
if (_assemblyConfig) then { if (_assemblyConfig) then {
private _disassembleAction = [QGVAR(disassemble), localize LSTRING(DisassembleCSW_displayName), "", {call FUNC(assemble_pickupWeapon)}, {call FUNC(assemble_canPickupWeapon)}] call EFUNC(interact_menu,createAction); private _disassembleAction = [QGVAR(disassemble), LLSTRING(DisassembleCSW_displayName), "", LINKFUNC(assemble_pickupWeapon), LINKFUNC(assemble_canPickupWeapon)] call EFUNC(interact_menu,createAction);
[_typeOf, 0, ["ACE_MainActions"], _disassembleAction] call EFUNC(interact_menu,addActionToClass); [_typeOf, 0, ["ACE_MainActions"], _disassembleAction] call EFUNC(interact_menu,addActionToClass);
}; };
@ -86,17 +86,17 @@ if (hasInterface && {!(_typeOf in GVAR(initializedStaticTypes))}) then {
}; };
if (_configEnabled && {_magazineLocation != ""}) then { if (_configEnabled && {_magazineLocation != ""}) then {
private _positionCode = compile _magazineLocation; private _positionCode = compile _magazineLocation;
private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode, [], _positionCode, 4] call EFUNC(interact_menu,createAction); private _ammoAction = [QGVAR(magazine), LLSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode, [], _positionCode, 4] call EFUNC(interact_menu,createAction);
_ammoActionPath = [_typeOf, 0, [], _ammoAction] call EFUNC(interact_menu,addActionToClass); _ammoActionPath = [_typeOf, 0, [], _ammoAction] call EFUNC(interact_menu,addActionToClass);
} else { } else {
private _ammoAction = [QGVAR(magazine), localize LSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode] call EFUNC(interact_menu,createAction); private _ammoAction = [QGVAR(magazine), LLSTRING(AmmoHandling_displayName), "", {}, _condition, _childenCode] call EFUNC(interact_menu,createAction);
_ammoActionPath = [_typeOf, 0, ["ACE_MainActions"], _ammoAction] call EFUNC(interact_menu,addActionToClass); _ammoActionPath = [_typeOf, 0, ["ACE_MainActions"], _ammoAction] call EFUNC(interact_menu,addActionToClass);
}; };
if (["ace_reload"] call EFUNC(common,isModLoaded)) then { if (["ace_reload"] call EFUNC(common,isModLoaded)) then {
// move reload's check ammo action to the ammo handling point (remove and re-add) // move reload's check ammo action to the ammo handling point (remove and re-add)
[_typeOf, 0, ["ACE_MainActions", QEGVAR(reload,CheckAmmo)]] call EFUNC(interact_menu,removeActionFromClass); [_typeOf, 0, ["ACE_MainActions", QEGVAR(reload,CheckAmmo)]] call EFUNC(interact_menu,removeActionFromClass);
private _checkAmmoAction = [QGVAR(checkAmmo), localize ELSTRING(reload,checkAmmo), "", EFUNC(reload,checkAmmo), EFUNC(reload,canCheckAmmo)] call EFUNC(interact_menu,createAction); private _checkAmmoAction = [QGVAR(checkAmmo), LELSTRING(reload,checkAmmo), "", EFUNC(reload,checkAmmo), EFUNC(reload,canCheckAmmo)] call EFUNC(interact_menu,createAction);
[_typeOf, 0, _ammoActionPath, _checkAmmoAction] call EFUNC(interact_menu,addActionToClass); [_typeOf, 0, _ammoActionPath, _checkAmmoAction] call EFUNC(interact_menu,addActionToClass);
}; };
}; };

View File

@ -70,7 +70,7 @@ private _return = [];
) exitWith { ) exitWith {
_return pushBack [_carryMag, _turretPath, _loadInfo, _magSource]; _return pushBack [_carryMag, _turretPath, _loadInfo, _magSource];
}; };
} forEach ([_weapon] call CBA_fnc_compatibleMagazines); } forEach (compatibleMagazines _weapon);
} forEach _availableMagazines; } forEach _availableMagazines;
} forEach (_vehicle weaponsTurret _turretPath); } forEach (_vehicle weaponsTurret _turretPath);
} forEach (allTurrets _vehicle); } forEach (allTurrets _vehicle);

View File

@ -23,11 +23,12 @@ params ["_vehicle", "_turret", "_carryMag", "_magSource", "_unit"];
TRACE_5("loadMagazine",_vehicle,_turret,_carryMag,_magSource,_unit); TRACE_5("loadMagazine",_vehicle,_turret,_carryMag,_magSource,_unit);
private _timeToLoad = 1; private _timeToLoad = 1;
if (!isNull(configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime")) then { private _config = configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime";
_timeToLoad = getNumber(configOf _vehicle >> QUOTE(ADDON) >> "ammoLoadTime"); if (!isNull _config) then {
_timeToLoad = getNumber _config;
}; };
private _displayName = format [localize LSTRING(loadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")]; private _displayName = format [LLSTRING(loadX), getText (configFile >> "CfgMagazines" >> _carryMag >> "displayName")];
private _onFinish = { private _onFinish = {
(_this select 0) params ["_vehicle", "_turret", "_carryMag", "_magSource", "_unit"]; (_this select 0) params ["_vehicle", "_turret", "_carryMag", "_magSource", "_unit"];

View File

@ -1,15 +1 @@
#define CREATE_CSW_PROXY(weapon) class ##weapon; class GVAR(weapon): ##weapon { magazineReloadTime = 0.5; } #define CREATE_CSW_PROXY(weapon) class ##weapon; class GVAR(weapon): ##weapon { magazineReloadTime = 0.5; }
// Need to be careful about breaking Attributes inheritance, doesn't seem to be any standard
#define ENABLE_CSW_ATTRIBUTE class Attributes { \
class EGVAR(CSW,assemblyMode) { \
property = QEGVAR(CSW,assemblyMode); \
control = QEGVAR(CSW,assemblyModeControl); \
displayName = ECSTRING(CSW,eden_enableCSW); \
tooltip = ECSTRING(CSW,eden_enableCSW_tooltip); \
expression = QUOTE( if (_value != 3) then {_this setVariable [ARR_3('%s',_value,true)]} ); \
typeName = "NUMBER"; \
condition = "objectVehicle"; \
defaultValue = 3; \
}; \
}

View File

@ -168,7 +168,7 @@ private _action = [
// action display name will be overwritten in modifier function // action display name will be overwritten in modifier function
QGVAR(takeWeapon), "take", "\A3\ui_f\data\igui\cfg\actions\take_ca.paa", QGVAR(takeWeapon), "take", "\A3\ui_f\data\igui\cfg\actions\take_ca.paa",
{_player action ["TakeWeapon", _target, weaponCargo _target select 0]}, {_player action ["TakeWeapon", _target, weaponCargo _target select 0]},
{count weaponCargo _target == 1}, {(count weaponCargo _target == 1) && {[_player, objNull, []] call EFUNC(common,canInteractWith)}}, // Not checking if container is claimed
nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
{ {
params ["_target", "", "", "_actionData"]; params ["_target", "", "", "_actionData"];

View File

@ -1,4 +1,4 @@
#define MAJOR 3 #define MAJOR 3
#define MINOR 16 #define MINOR 17
#define PATCHLVL 3 #define PATCHLVL 0
#define BUILD 79 #define BUILD 83

View File

@ -15,12 +15,12 @@
* Public: No * Public: No
*/ */
#define __dsp (uiNamespace getVariable "ACE_RscYardage450") #define DISPLAY_YARDAGE (uiNamespace getVariable "ACE_RscYardage450")
#define __ctrlTarget (__dsp displayCtrl 720041) #define CTRL_TARGET (DISPLAY_YARDAGE displayCtrl 720041)
#define __ctrlLaser (__dsp displayCtrl 720042) #define CTRL_LASER (DISPLAY_YARDAGE displayCtrl 720042)
#define __ctrlRange (__dsp displayCtrl 720043) #define CTRL_RANGE (DISPLAY_YARDAGE displayCtrl 720043)
#define __ctrlMeters (__dsp displayCtrl 720044) #define CTRL_METERS (DISPLAY_YARDAGE displayCtrl 720044)
#define __ctrlYards (__dsp displayCtrl 720045) #define CTRL_YARDS (DISPLAY_YARDAGE displayCtrl 720045)
if (currentWeapon ACE_player != "ACE_Yardage450" || cameraView != "GUNNER") exitWith {}; if (currentWeapon ACE_player != "ACE_Yardage450" || cameraView != "GUNNER") exitWith {};
@ -33,25 +33,28 @@ GVAR(active) = true;
[{ [{
if (CBA_missionTime - GVAR(powerOnTime) > 30) exitWith { if (CBA_missionTime - GVAR(powerOnTime) > 30) exitWith {
GVAR(active) = false; GVAR(active) = false;
74210 cutText ["", "PLAIN"]; QUOTE(ADDON) cutText ["", "PLAIN"];
[_this select 1] call CBA_fnc_removePerFrameHandler; [_this select 1] call CBA_fnc_removePerFrameHandler;
}; };
if (currentWeapon ACE_player == "ACE_Yardage450" && cameraView == "GUNNER") then { if (currentWeapon ACE_player == "ACE_Yardage450" && cameraView == "GUNNER") then {
74210 cutRsc ["ACE_RscYardage450", "PLAIN", 1, false]; if (isNil {DISPLAY_YARDAGE} || {isNull DISPLAY_YARDAGE} || {ctrlIDD DISPLAY_YARDAGE != -1}) then {
TRACE_1("making display",DISPLAY_YARDAGE);
__ctrlLaser ctrlShow GVAR(lasing); QUOTE(ADDON) cutRsc ["ACE_RscYardage450", "PLAIN", 1, false];
if (GVAR(targetAcquired)) then {
__ctrlTarget ctrlSetText "Target Acquired";
__ctrlRange ctrlSetText GVAR(targetRangeText);
} else {
__ctrlTarget ctrlSetText "";
__ctrlRange ctrlSetText "---";
}; };
__ctrlMeters ctrlShow !GVAR(useYards);
__ctrlYards ctrlShow GVAR(useYards); CTRL_LASER ctrlShow GVAR(lasing);
if (GVAR(targetAcquired)) then {
CTRL_TARGET ctrlSetText "Target Acquired";
CTRL_RANGE ctrlSetText GVAR(targetRangeText);
} else { } else {
74210 cutText ["", "PLAIN"]; CTRL_TARGET ctrlSetText "";
CTRL_RANGE ctrlSetText "---";
};
CTRL_METERS ctrlShow !GVAR(useYards);
CTRL_YARDS ctrlShow GVAR(useYards);
} else {
QUOTE(ADDON) cutText ["", "PLAIN"];
}; };
}, 0, []] call CBA_fnc_addPerFrameHandler; }, 0, []] call CBA_fnc_addPerFrameHandler;

View File

@ -8,9 +8,9 @@ ace:
githubUrl: https://github.com/acemod/ACE3 githubUrl: https://github.com/acemod/ACE3
version: version:
major: 3 major: 3
minor: 16 minor: 17
patch: 3 patch: 0
build: 79 build: 82
markdown: kramdown markdown: kramdown

View File

@ -8,9 +8,9 @@ ace:
githubUrl: https://github.com/acemod/ACE3 githubUrl: https://github.com/acemod/ACE3
version: version:
major: 3 major: 3
minor: 16 minor: 17
patch: 3 patch: 0
build: 79 build: 82
markdown: kramdown markdown: kramdown

View File

@ -36,6 +36,12 @@
</i> </i>
</a> </a>
</div> </div>
<hr>
<p class="text-center">
ACE3 is free and open-source software.
<br/>
<a href="https://acemod.org">acemod</a>
</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -27,6 +27,7 @@
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-fork-ribbon-css/0.2.3/gh-fork-ribbon.min.css" />
<link rel="stylesheet" href="{{ site.baseurl }}/dist/bundle.css?v={{site.time | date: '%Y%m%d%H'}}" /> <link rel="stylesheet" href="{{ site.baseurl }}/dist/bundle.css?v={{site.time | date: '%Y%m%d%H'}}" />
</head> </head>
<body> <body>

View File

@ -0,0 +1,48 @@
---
title: ACEREP &#35;00012
description: Status report on ACE3 version 3.17.0
parent: posts
image:
author: Jonpas
layout: post
---
This post accompanies the release of ACE3 v3.17.0, a smaller but not any less significant release. We will also take a peek at at our new experimental project.
<!--more-->
### Release Cadence
With improved tooling such as [HEMTT](https://github.com/BrettMayson/HEMTT) simplifying our release processes, we have been aiming aiming to do releases more often than in the past. This is one of the first bigger releases following the set cadence.
While releases are expected to be smaller as less time passes between them resulting in fewer changes, the new cadence should effectively contribute to higher quality and stability of ACE3 overall.
We are maintaining our philosophy of "no schedule, no ETAs" and simply release when the team is able to and opts to do so. Work done on the project should not affect this and we aim to release more often even if there are only little or insignificant changes.
### Integrated CUP Compatibility
[Community Upgrade Project](https://www.cup-arma3.org/) has always provided compatibility and support for ACE3. Originally it has been hosted and maintained by the CUP Team. With the availability of automatically loading a compatibility patch if the given mod is loaded, we have worked together with the CUP Team to bring ACE3 Compatibility for CUP directly into the ACE3 mod.
**This means you should remove any compatibility patches provided by CUP** and instead simply use ACE3 together with CUP. In addition to integrated compatibility, some additional improvements were also made.
### ACE Anvil
<div class="row">
<div class="small-12 columns">
<img src="{{site.baseUrl}}/img/news/240401_ace_anvil_logo.webp" alt="ACE Anvil Logo"/>
</div>
</div>
[ACE Anvil](https://github.com/acemod/ACE-Anvil) is an **experimental** realism mod for Arma Reforger, the first Arma game running on the Enfusion engine.
Anvil is not expected to reach feature parity with ACE3. It is heavily experimental and we invite you to contribute to it. As Arma Reforger is a test platform, go wild, we are happy to add any realism or quality of life features, even some that might not be strictly within ACE's usual scope.
Learn more about ACE Anvil at the [Anvil Documentation](https://anvil.acemod.org/)!
### The End Things
The change log for ACE3 v3.17.0 can be found [here](https://github.com/acemod/ACE3/releases/v3.17.0){:target="_blank"}.
We are still in need for translations for some languages within the ACE3 project. Please have a look at [this GitHub issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is very appreciated.
Make sure to [follow us on Twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our Facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}.

View File

@ -1,5 +1,3 @@
version: "3.2"
services: services:
docs: docs:
container_name: ace3mod_jekyll container_name: ace3mod_jekyll

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -8,7 +8,7 @@ sitemap:
exclude: "yes" exclude: "yes"
--- ---
<a class="hide-for-small-only" href="https://github.com/acemod/ACE3" target="_blank" rel="noopener"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 9999" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a> <a class="github-fork-ribbon" href="https://github.com/acemod/ACE3" target="_blank" rel="noopener" data-ribbon="Fork me on GitHub" title="Fork me on GitHub">Fork me on GitHub</a>
<div class="row"> <div class="row">
<div class="large-12 columns"> <div class="large-12 columns">