Search the Community
Showing results for tags 'shell'.
Found 1 result
-
MGI ENHANCED TURRET Last update 09/05/2018 Hi all, Here is a little script allowing AI gunners to fire HE shells on infantry. I hoped Tank DLC will improve some AI features about targeting and ammo firing possibilities, but it seems not. So, running this script makes gunners load some accurate shells to fire with cannon. It's complementary to MGs. On the other hand, I tried to overwrite the targeting engine as far as the present BI one consider a team leader more dangerous than an AT soldier... The result is disastrous, of course. I gave up with this idea. If it's easy to choose the best threat to be shot, it's impossible to override the engine to order the gunner to watch, aim, fire at the chosen target. Engine has its own life... as usual, commands do nothing persistent (working) on that. parameters: none (at this time) Script can be added in init.sqf or initServer.sqf 0=[] spawn { while {true} do { uiSleep 4; _allCannonVehicles = vehicles select {local _x && isNil {_x getVariable "admitVeh"} && !(_x isKindOf "WeaponHolderSimulated") && (getText (configfile >> "CfgVehicles" >> typeOf _x >> "editorSubcategory") in ["EdSubcat_APCs","EdSubcat_Tanks","EdSubcat_Artillery"])}; { _x setVariable ["admitVeh",true,true]; _x spawn { params [["_tk",objNull],["_tgt",objNull]]; private _wpnTrt = _tk weaponsTurret [0]; private _cannon = (_wpnTrt select {getText (configfile >> "CfgWeapons" >> _x >> "nameSound") == "cannon"}) select 0; if (isnil "_cannon") then {_cannon = ""}; if (_cannon != "") then { _cannonMags = getArray (configFile >> "cfgweapons" >> _cannon >> "magazines"); _cannonReloadTime = getNumber (configfile >> "CfgWeapons" >> _cannon >> "magazineReloadTime"); _magsDetail = magazinesAmmo _tk; _magsDetail apply { _class = (configfile >> "CfgAmmo" >>getText (configfile >> "CfgMagazines" >> _x select 0 >> "ammo") >> "aiAmmoUsageFlags"); _usage = if (istext _class) then [{(getText _class) splitString " + "},{[str(getNumber _class)]}]; _x pushback _usage;_x }; while {alive (_tk turretUnit [0])} do { _gunner = _tk turretUnit [0]; if (!((_tk targets [true,700]) isEqualTo []) && !isPlayer _gunner) then { _tgts = (_tk targets [true,700]) apply {[_tk aimedAtTarget [_x],_x]}; _tgts sort false; _tgt = _tgts select 0 select 1; _magsDetail = _magsDetail select {(_x select 1) > 0}; if (((_tgt isKindOf "landVehicle") or (_tgt isKindOf "CAManBase" && diag_tickTime mod 30 <= 6)) && _tk currentWeaponTurret [0] != str _cannon) then { _tk selectWeaponTurret [_cannon,[0]] }; call { if (_tgt isKindOf "landVehicle" && !(_tgt isKindOf "car")) exitWith { for "_i" from 0 to count _magsDetail -1 do { if ("512" in (_magsDetail select _i select 2) && (_magsDetail select _i select 0) in _cannonMags) exitWith { _tk loadMagazine [[0],_cannon,_magsDetail select _i select 0]; }; }; }; if (secondaryWeapon _tgt != "" && diag_tickTime mod 30 <= 6) exitWith { for "_i" from 0 to count _magsDetail -1 do { if ("64" in (_magsDetail select _i select 2) && (_magsDetail select _i select 0) in _cannonMags && !(_tk getVariable ["loaded64",false])) exitWith { _tk loadMagazine [[0],_cannon,_magsDetail select _i select 0]; }; }; }; if (_tgt isKindOf "landVehicle") exitWith { for "_i" from 0 to count _magsDetail -1 do { if ("128" in (_magsDetail select _i select 2) && (_magsDetail select _i select 0) in _cannonMags) exitWith { _tk loadMagazine [[0],_cannon,_magsDetail select _i select 0]; }; }; }; if (_tgt isKindOf "CAManBase" && diag_tickTime mod 30 <= 6) exitWith { for "_i" from 0 to count _magsDetail -1 do { if ("64" in (_magsDetail select _i select 2) && (_magsDetail select _i select 0) in _cannonMags) exitWith { _tk loadMagazine [[0],_cannon,_magsDetail select _i select 0]; }; }; }; }; uiSleep _cannonReloadTime; } else { uiSleep 2; }; }; }; }; } forEach _allCannonVehicles; }; }; Feedback welcome.