Jump to content
Sign in to follow this  
blakeace

Blake's AI Forward Observer

Recommended Posts

If the FO respawns, does he still retain his FO ability? If so, does that mean if the FO's respawns repeatedly, there will be a bunch of "FO abilities" laying around for other AIs to pick up?

Also is there a way to have infinite ammo and to decrease the minimum range of the artillery pieces?

Edited by pcc

Share this post


Link to post
Share on other sites
Nice update, thank you!

The "no further attempt is made.." to replace a dead FO if first replacement gets a prior hit - is that by design, or a imitation of the engine? - curiosity, not complaint :)

BR

Orcinus

Sorry Orcinus I missed this one.

By design, one to keep the code simple and non intensive, and also a simple way of avoiding a lemming situation if possible where each member takes their turn to walk into a kill zone.

If the FO respawns, does he still retain his FO ability? If so, does that mean if the FO's respawns repeatedly, there will be a bunch of "FO abilities" laying around for other AIs to pick up?

Also is there a way to have infinite ammo and to decrease the minimum range of the artillery pieces?

Sorry for the slow reply, but I've been away.

When a unit dies, it ends the FO code. So if you want to give the respawned unit an FO's ability you would have to re initialise that too. See the Version 1.1 additions (in the first post) on how to do that. By default when the unit dies another group member will try to "grab" the ability. To prevent having a respawned unit and a group member both having the ability see in the 1.3 version additions on how to stop other members trying to get the ability.

Re infinite ammo, no other than setting the amounts to very large values.

Re range, the ranges are set by the bis artillery module. So there is no way to alter them.

Edited by blakeace

Share this post


Link to post
Share on other sites
Interesting. Can I ask how this code looks?

Also have such questions:

Some time ago I maded AI arty script too, dedicated to beginners however, but for more advanced users yours arty scripts seems to be better in my opinion. So I'm wondering, would you be interseted in implementing/adapting into yours script used by me code for calculating amendment for moving targets? I used for that purpose overall movement vector determined by comparing of target's position change in time instead of simply target's movement direction in given moment only. This makes FO more clever and makes targeting routine less sensitive to dodging and erratic movement, because FO pays attention on general movement direction, not on present direction. Of course this way of calculation needs more time. But maybe you used some better method...

Maybe also you will be interested in used by me way to choose most tempting target amongst known enemies?

Sorry Rydygier I missed this post.

Re unlimited ammo is achieved by defining counter variables for each round type. As each type of mission is completes that round types counter is reduced. In the FO's code when the determining what fire mission to use, it checks these counters to see if a certain mission type is available.

E.g. Target is armour, first check is to see if there are SADARM rounds available, if not it checks for HE rounds.

Re determining the solution, I used pretty much the same process. Track the target for a while to get an average overall movement vector, then apply an offset based on that direction and speed. I also have a max cap on speed etc. I also check to see if the target is on the road, and if it is I look for a road near the calculated impact point. Rationalising that is the most likely point to hit if found.

The module already checks all the known targets and determines which is considered the highest threat to the FO.

Thank you blakeace, I had added your addon to the

AI Compilation List of Addons/Mods/Scripts & Misc thread.

http://forums.bistudio.com/showthread.php?117674-AI-Compilation-List-of-Addons-Mods-Scripts-amp-Misc

its list under Arma2 Addons.

Cheers Günter.

Share this post


Link to post
Share on other sites
defining counter variables for each round type.

I see. Often most obvious solutions just doesn't come into mind. :)

I also check to see if the target is on the road, and if it is, I look for a road near the calculated impact point.

Interesting. I like it. There is also an option, that vehicle is on road, but road turning and leads the other way before reaches calculated point. Now I began to wonder, if there is method to take into account also such circumstance. But for this may be needed script, that somehow follow the road to determine, if this road leads into impact area, or not, and if not, then calculates, at which point of road will be target while splash occurs (so must also to calculate lenght of the relevant section of road line). Well. Doesn't matter. :)

Share this post


Link to post
Share on other sites
Interesting. I like it. There is also an option, that vehicle is on road, but road turning and leads the other way before reaches calculated point. Now I began to wonder, if there is method to take into account also such circumstance. But for this may be needed script, that somehow follow the road to determine, if this road leads into impact area, or not, and if not, then calculates, at which point of road will be target while splash occurs (so must also to calculate lenght of the relevant section of road line). Well. Doesn't matter. :)

For the sake of simplicity and trying to minimise the computational overheads as much as possible the road check only works on relatively straight roads.

I have wondered about this command roadsConnectedTo, if that could be used to trace possible paths away from the current position, using the position of each segment to calculate distances over the "curved" paths. It just seemed like it would be quite intensive to calculate especially when there are also multiple path choices due to intersections. I may play around with it at a later stage if I ever get enough time :p I haven't tested the command, so it assumes I am interpreting what it does correctly.

Share this post


Link to post
Share on other sites
For the sake of simplicity and trying to minimise the computational overheads as much as possible the road check only works on relatively straight roads.

I have wondered about this command roadsConnectedTo, if that could be used to trace possible paths away from the current position, using the position of each segment to calculate distances over the "curved" paths. It just seemed like it would be quite intensive to calculate especially when there are also multiple path choices due to intersections. I may play around with it at a later stage if I ever get enough time :p I haven't tested the command, so it assumes I am interpreting what it does correctly.

With regard to intersections, would nearRoads be any better? Haven't thought this through properly (& couldn't code it myself), however, if you are already factoring in the speed & general heading of the target, could you set a radius from the target along the line of travel (with target at the perimeter, not the centre), that radius being proportional to its speed?

BR

Orcinus

Share this post


Link to post
Share on other sites
With regard to intersections, would nearRoads be any better? Haven't thought this through properly (& couldn't code it myself), however, if you are already factoring in the speed & general heading of the target, could you set a radius from the target along the line of travel (with target at the perimeter, not the centre), that radius being proportional to its speed?

BR

Orcinus

At the moment it sort of does this, though the radius of the nearRoads command is kept quite small. The bigger the radius the larger the impact the command has when running. Being server side I am always trying to minimise the impact a mod like this has.

After posting above I had an idea of how to control the intersection prediction. Keeping it simple, always follow the path that reduces the distance to the direct line prediction point. Then use that distance to calculate what the required cumulative distance added up between sections. Not perfect by any means but I think an improvement generally over the current version in most circumstances.

A small video of my testing not showing intersections but how distance and curves are worked out.

Edit: Actually there is one intersection at the farm, thanks Orcinus for spotting that.

QivjC1YHbdc

Edited by blakeace

Share this post


Link to post
Share on other sites

Mmm. thanks. How ever did you get the video to show those points? (only if it the explanation is simple, I'm sure you have more important things to do :)

One thing I noticed is that it missed the turnoff to left by the small base - is that because it's a dirt road (IIRC), or some other reason?

BR

Orcinus

Share this post


Link to post
Share on other sites
Mmm. thanks. How ever did you get the video to show those points? (only if it the explanation is simple, I'm sure you have more important things to do :)

One thing I noticed is that it missed the turnoff to left by the small base - is that because it's a dirt road (IIRC), or some other reason?

BR

Orcinus

_name = format ["marker%1", _count];
_marker = createMarker [_name, position _next_pos ];
_marker setMarkerShape "ICON";
_name setMarkerType "DOT";
_count = _count + 1;

_count was initialised earlier. Each time a new segment was found it runs over this section of the code(in the loop) to generate a new marker so I could visualise what the code was doing.

I didn't explain the video to well, as it was fairly late when I finally finished playing with the algorithm. At the top of the screen is a marker which represents the calculated impact point that the mod usually derives from analysing the targets movement. So when the algorithm I was using got to the intersection to the farm, it checked both segments and determined that the distance from the main road segment was shorter than the farm lane segment. In most circumstances, this simple selection technique shouldn't be an issue in the functionality of the mod as the lead on the target isn't that great that choosing the wrong path will probably only affect one mission before the target if not killed passes that point.

Share this post


Link to post
Share on other sites

Updated

Version 1.4 available in the first post.

  • Updated the prediction algorithm when units are on a road.
  • Tweeked the general prediction algorithm's lead caculations.
    The BIS artillery module now gives the artillery units all the available ammo types by default. Because of this the below changes were made.
  • Set the default SADARM ammunition type count to zero. By default these specialised rounds shouldn't be available I believe.
  • Updated the sample missions. No need to manually set specialised ammo types to the artillery units, they now get them by default.

~Note: Use the ammo type number of fire missions counters to set which types are available and how many missions they can deliver.

Thanks Rydygier for getting me thinking about the road algorithm again :)

Share this post


Link to post
Share on other sites

I can't get my mortars to work. Every time the FO would call in a strike, I get this script error:

Error in expression <stics select 0;

_minRange = _ballistics select 1;

_maxRange = _ballistics select>

Error position: <select 1;

_maxRange = _ballistics select>

Error Zero divisor

File ca\modules\ARTY\data\scripts\ARTY_firingSolution.sqf, line 23

Is that a problem with the mod or is the game trying to tell me that the observer or battery is misplaced?

And are there published min/max ranges for Blake arty? The values differ wildly from actual player-controlled pieces.

Share this post


Link to post
Share on other sites
I can't get my mortars to work. Every time the FO would call in a strike, I get this script error:

Error in expression <stics select 0;

_minRange = _ballistics select 1;

_maxRange = _ballistics select>

Error position: <select 1;

_maxRange = _ballistics select>

Error Zero divisor

File ca\modules\ARTY\data\scripts\ARTY_firingSolution.sqf, line 23

Is that a problem with the mod or is the game trying to tell me that the observer or battery is misplaced?

And are there published min/max ranges for Blake arty? The values differ wildly from actual player-controlled pieces.

The error is coming from the BIS artillery module. Sorry I haven't seen this error to help with what the problem is. Are you using the default BIS mortars? I know the ACE 60mm mortar doesn't work it doesn't seem to be setup the same way as the BIS artillery units as far as I can tell. I can't remember if it produced some kind of error though sorry.

It shouldn't be anything to do with the ranges called for by AIFO, as it performs a range check before calling for a mission using "BIS_ARTY_F_PosInRange". Unless it is something to do with this function? Though I have never had an issue with this. If it is a custom mortar maybe check with the creator to see if it is compatible with the BIS artillery module?

The artillery unit ranges are set by the artillery units themselves. The Blake's AIFO modules doesn't alter anything like this. The default BIS units have their ranges listed here. There about 3/4 down.

If you want to check the range of the artillery unit you are using, on the first page there are instructions (in the instructions spoiler) which allow you to set the module into a debug mode which at this stage just displays a hint detailing the min and max ranges, plus the distance between the artillery unit and the first FO synced to the module.

Hope this helps

Blake.

Share this post


Link to post
Share on other sites

All I did was place the module and sync it with an observer. The init field is spawning six arty pieces, ACR Podnos mortars by default.

Share this post


Link to post
Share on other sites
All I did was place the module and sync it with an observer. The init field is spawning six arty pieces, ACR Podnos mortars by default.

Maturin,

I cannot replicate your error. I have tried spawning opfor, blufor, independent units. Man and non man type FO's. I have tried placing the artillery both in and out of range. Multiple and single spawned artillery unit numbers.

The only thing I can think of from here is to have a look at the actual mission. If you didn't want it to be publically available you could send me a link to it via a pm. Maybe use something like rapidshare or similar. Outside of that I am at a loss.

I'm not an expert on the BIS artillery module, so I am at a loss as to what would cause this error in it? From the quick look at it's code it seems to be incorrectly passing the minimum range of the unit? That said, I don't even know what bit of code is calling this.

Sorry from what I have to go on; I am unable to replicate it to postulate even what's going on.

Blake

Share this post


Link to post
Share on other sites

Is it poor form to just post the raw text of the mission file? If you paste that into a Documents>ArmA2>Missions?gorka.chernarus folder as a mission.sqm text file, everything should show up. But it requires all of ACE.

If that's not too much hassle, the arty setup in the mission is quite simple, and wouldn't take to long to assess. I appreciate the offer.

version=11;

class Mission

{

addOns[]=

{

"cacharacters2",

"camisc_e",

"chernarus",

"caweapons_warfare_weapons",

"acex_ru_veh_btr70",

"caweapons",

"aifo",

"cacharacters_e",

"CAWeapons_SPG9"

};

addOnsAuto[]=

{

"caweapons_warfare_weapons",

"cacharacters2",

"acex_ru_veh_btr70",

"CAWeapons_SPG9",

"aifo",

"cacharacters_e",

"caweapons",

"camisc_e",

"chernarus"

};

randomSeed=14280483;

class Intel

{

startWeather=0.02001816;

forecastWeather=0.031102598;

year=2008;

month=10;

day=11;

hour=9;

minute=20;

};

class Groups

{

items=15;

class Item0

{

side="EAST";

class Vehicles

{

items=3;

class Item0

{

position[]={9194.5107,335.10959,8842.9121};

azimut=210;

id=1;

side="EAST";

vehicle="DSHkM_Mini_TriPod";

player="PLAY G";

leader=1;

skill=0.60000002;

};

class Item1

{

position[]={8858.4248,297.98288,8399.4531};

azimut=225;

special="NONE";

id=47;

side="CIV";

vehicle="Citizen1";

skill=1;

init="dostop this; hideobject this; this setunitpos ""up""; this allowdamage false;";

};

class Item2

{

position[]={9265.8818,323.875,8743.1777};

azimut=239.69981;

special="NONE";

id=56;

side="EAST";

vehicle="Ins_WarfareBMGNest_PK";

skill=1;

};

};

};

class Item1

{

side="WEST";

class Vehicles

{

items=10;

class Item0

{

position[]={8269.3682,432.53729,7606.2949};

azimut=35;

id=3;

side="WEST";

vehicle="CDF_Soldier_TL";

leader=1;

rank="LIEUTENANT";

skill=0.59999996;

};

class Item1

{

position[]={8231.8594,428.73294,7589.9199};

azimut=35;

id=4;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="SERGEANT";

skill=0.46666664;

};

class Item2

{

position[]={8233.498,428.99863,7588.7729};

azimut=35;

id=5;

side="WEST";

vehicle="CDF_Soldier_RPG";

rank="CORPORAL";

skill=0.33333331;

};

class Item3

{

position[]={8235.1367,429.25903,7587.6255};

azimut=35;

id=6;

side="WEST";

vehicle="CDF_Soldier_GL";

rank="CORPORAL";

skill=0.33333331;

};

class Item4

{

position[]={8236.7744,429.46118,7586.4785};

azimut=35;

id=7;

side="WEST";

vehicle="CDF_Soldier";

rank="CORPORAL";

skill=0.33333331;

};

class Item5

{

position[]={8238.4131,429.66336,7585.3311};

azimut=35;

id=8;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="CORPORAL";

skill=0.33333331;

};

class Item6

{

position[]={8240.0518,429.86572,7584.1841};

azimut=35;

id=9;

side="WEST";

vehicle="CDF_Soldier_GL";

skill=0.2;

};

class Item7

{

position[]={8241.6895,430.0679,7583.0371};

azimut=35;

id=10;

side="WEST";

vehicle="CDF_Soldier_RPG";

skill=0.2;

};

class Item8

{

position[]={8243.3281,430.27713,7581.8896};

azimut=35;

id=11;

side="WEST";

vehicle="CDF_Soldier";

skill=0.2;

};

class Item9

{

position[]={8244.9658,430.49005,7580.7427};

azimut=35;

id=12;

side="WEST";

vehicle="CDF_Soldier_Medic";

skill=0.2;

};

};

class Waypoints

{

items=4;

class Item0

{

position[]={8364.9561,382.51465,7715.377};

formation="LINE";

combat="COMBAT";

class Effects

{

};

showWP="NEVER";

};

class Item1

{

position[]={8650.3066,318.38092,7922.9077};

combat="SAFE";

class Effects

{

};

showWP="NEVER";

};

class Item2

{

position[]={8760.9141,296.97574,8314.3281};

class Effects

{

};

showWP="NEVER";

};

class Item3

{

position[]={8778.5986,298.23804,8347.2666};

combat="COMBAT";

class Effects

{

};

showWP="NEVER";

};

};

};

class Item2

{

side="WEST";

class Vehicles

{

items=10;

class Item0

{

position[]={8748.4688,366.47726,7471.3169};

id=13;

side="WEST";

vehicle="CDF_Soldier_TL";

leader=1;

rank="LIEUTENANT";

skill=0.59999996;

};

class Item1

{

position[]={8755.1563,367.41721,7461.6611};

id=14;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="SERGEANT";

skill=0.46666664;

};

class Item2

{

position[]={8757.1563,367.41989,7461.6611};

id=15;

side="WEST";

vehicle="CDF_Soldier_RPG";

rank="CORPORAL";

skill=0.33333331;

};

class Item3

{

position[]={8759.1563,367.42255,7461.6611};

id=16;

side="WEST";

vehicle="CDF_Soldier_GL";

rank="CORPORAL";

skill=0.33333331;

};

class Item4

{

position[]={8761.1563,367.37738,7461.6611};

id=17;

side="WEST";

vehicle="CDF_Soldier";

rank="CORPORAL";

skill=0.33333331;

};

class Item5

{

position[]={8763.1563,367.27603,7461.6611};

id=18;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="CORPORAL";

skill=0.33333331;

};

class Item6

{

position[]={8765.1563,367.17471,7461.6611};

id=19;

side="WEST";

vehicle="CDF_Soldier_GL";

skill=0.2;

};

class Item7

{

position[]={8767.1563,367.07336,7461.6611};

id=20;

side="WEST";

vehicle="CDF_Soldier_RPG";

skill=0.2;

};

class Item8

{

position[]={8769.1563,367.07367,7461.6611};

id=21;

side="WEST";

vehicle="CDF_Soldier";

skill=0.2;

};

class Item9

{

position[]={8771.1563,367.08969,7461.6611};

id=22;

side="WEST";

vehicle="CDF_Soldier_Medic";

skill=0.2;

};

};

class Waypoints

{

items=4;

class Item0

{

position[]={8583.3789,338.42612,7814.416};

formation="LINE";

class Effects

{

};

showWP="NEVER";

};

class Item1

{

position[]={8559.8096,334.40854,8364.7607};

class Effects

{

};

showWP="NEVER";

};

class Item2

{

position[]={8784.8975,336.82187,8734.7988};

class Effects

{

};

showWP="NEVER";

};

class Item3

{

position[]={8899.209,329.46848,8764.2598};

combat="COMBAT";

class Effects

{

};

showWP="NEVER";

};

};

};

class Item3

{

side="WEST";

class Vehicles

{

items=10;

class Item0

{

position[]={8977.71,325.45798,7624.812};

id=23;

side="WEST";

vehicle="CDF_Soldier_TL";

leader=1;

rank="LIEUTENANT";

skill=0.59999996;

};

class Item1

{

position[]={8988.8291,319.98508,7637.4033};

id=24;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="SERGEANT";

skill=0.46666664;

};

class Item2

{

position[]={8990.8291,319.52988,7637.4033};

id=25;

side="WEST";

vehicle="CDF_Soldier_RPG";

rank="CORPORAL";

skill=0.33333331;

};

class Item3

{

position[]={8992.8291,319.06671,7637.4033};

id=26;

side="WEST";

vehicle="CDF_Soldier_GL";

rank="CORPORAL";

skill=0.33333331;

};

class Item4

{

position[]={8994.8291,318.58127,7637.4033};

id=27;

side="WEST";

vehicle="CDF_Soldier";

rank="CORPORAL";

skill=0.33333331;

};

class Item5

{

position[]={8996.8291,318.09607,7637.4033};

id=28;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="CORPORAL";

skill=0.33333331;

};

class Item6

{

position[]={8998.8291,317.60403,7637.4033};

id=29;

side="WEST";

vehicle="CDF_Soldier_GL";

skill=0.2;

};

class Item7

{

position[]={9000.8291,317.10043,7637.4033};

id=30;

side="WEST";

vehicle="CDF_Soldier_RPG";

skill=0.2;

};

class Item8

{

position[]={9002.8291,316.58566,7637.4033};

id=31;

side="WEST";

vehicle="CDF_Soldier";

skill=0.2;

};

class Item9

{

position[]={9004.8291,316.07111,7637.4033};

id=32;

side="WEST";

vehicle="CDF_Soldier_Medic";

skill=0.2;

};

};

class Waypoints

{

items=3;

class Item0

{

position[]={8995.0996,266.56845,7907.8682};

formation="LINE";

class Effects

{

};

showWP="NEVER";

};

class Item1

{

position[]={9174.1475,256.81558,8500.752};

class Effects

{

};

showWP="NEVER";

};

class Item2

{

position[]={9182.5938,288.37466,8624.0605};

combat="STEALTH";

class Effects

{

};

showWP="NEVER";

};

};

};

class Item4

{

side="WEST";

class Vehicles

{

items=10;

class Item0

{

position[]={9157.4814,340.03815,7420.356};

id=33;

side="WEST";

vehicle="CDF_Soldier_TL";

leader=1;

rank="LIEUTENANT";

skill=0.59999996;

};

class Item1

{

position[]={9160.4814,339.28003,7352.4766};

id=34;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="SERGEANT";

skill=0.46666664;

};

class Item2

{

position[]={9162.4814,338.93329,7352.4766};

id=35;

side="WEST";

vehicle="CDF_Soldier_RPG";

rank="CORPORAL";

skill=0.33333331;

};

class Item3

{

position[]={9164.4814,338.5658,7352.4766};

id=36;

side="WEST";

vehicle="CDF_Soldier_GL";

rank="CORPORAL";

skill=0.33333331;

};

class Item4

{

position[]={9166.4814,338.18982,7352.4766};

id=37;

side="WEST";

vehicle="CDF_Soldier";

rank="CORPORAL";

skill=0.33333331;

};

class Item5

{

position[]={9168.4814,337.81125,7352.4766};

id=38;

side="WEST";

vehicle="CDF_Soldier_MG";

rank="CORPORAL";

skill=0.33333331;

};

class Item6

{

position[]={9170.4814,337.42944,7352.4766};

id=39;

side="WEST";

vehicle="CDF_Soldier_GL";

skill=0.2;

};

class Item7

{

position[]={9172.4814,337.03754,7352.4766};

id=40;

side="WEST";

vehicle="CDF_Soldier_RPG";

skill=0.2;

};

class Item8

{

position[]={9174.4814,336.61902,7352.4766};

id=41;

side="WEST";

vehicle="CDF_Soldier";

skill=0.2;

};

class Item9

{

position[]={9176.4814,336.20047,7352.4766};

id=42;

side="WEST";

vehicle="CDF_Soldier_Medic";

skill=0.2;

};

};

class Waypoints

{

items=3;

class Item0

{

position[]={9166.7012,281.05685,7588.0117};

formation="LINE";

class Effects

{

};

showWP="NEVER";

};

class Item1

{

position[]={9236.6465,245.59193,8458.5254};

class Effects

{

};

showWP="NEVER";

};

class Item2

{

position[]={9228.2002,288.035,8608.8584};

combat="COMBAT";

class Effects

{

};

showWP="NEVER";

};

};

};

class Item5

{

side="EAST";

class Vehicles

{

items=1;

class Item0

{

position[]={9170.8984,333.39993,8835.3516};

azimut=255;

id=43;

side="EAST";

vehicle="Ins_WarfareBMGNest_PK";

leader=1;

skill=1;

};

};

};

class Item6

{

side="EAST";

class Vehicles

{

items=4;

class Item0

{

position[]={9111.0361,344.78259,8918.3389};

azimut=185;

id=44;

side="EAST";

vehicle="ACE_BTR70_RU";

leader=1;

skill=1;

};

class Item1

{

position[]={9145.5371,345.29214,8912.6572};

azimut=190;

special="NONE";

id=45;

side="EAST";

vehicle="SPG9_Ins";

player="PLAY G";

skill=0.60000002;

};

class Item2

{

position[]={9051.041,343.4061,8924.668};

azimut=191.48399;

special="NONE";

id=68;

side="EAST";

vehicle="DSHkM_Mini_TriPod";

skill=0.60000002;

};

class Item3

{

position[]={9197.5049,358.99866,8996.5615};

azimut=191.48399;

special="NONE";

id=67;

side="EAST";

vehicle="DSHkM_Mini_TriPod";

player="PLAY G";

skill=0.60000002;

};

};

};

class Item7

{

side="EAST";

class Vehicles

{

items=8;

class Item0

{

position[]={9123.1006,329.6123,8837.2305};

azimut=190;

id=48;

side="EAST";

vehicle="INS_Soldier_CO";

leader=1;

rank="SERGEANT";

skill=0.46666664;

};

class Item1

{

position[]={9121.0146,330.49493,8842.6748};

azimut=190;

id=49;

side="EAST";

vehicle="INS_Soldier_AR";

rank="CORPORAL";

skill=0.33333331;

};

class Item2

{

position[]={9119.0449,330.44467,8843.0225};

azimut=190;

id=50;

side="EAST";

vehicle="INS_Soldier_GL";

rank="CORPORAL";

skill=0.33333331;

};

class Item3

{

position[]={9117.0752,330.3913,8843.3701};

azimut=190;

id=51;

side="EAST";

vehicle="INS_Soldier_AT";

skill=0.2;

};

class Item4

{

position[]={9115.1055,330.33759,8843.7168};

azimut=190;

id=52;

side="EAST";

vehicle="INS_Soldier_2";

skill=0.2;

};

class Item5

{

position[]={9113.1357,330.28397,8844.0645};

azimut=190;

id=53;

side="EAST";

vehicle="INS_Soldier_AR";

skill=0.2;

};

class Item6

{

position[]={9111.166,330.25482,8844.4121};

azimut=190;

id=54;

side="EAST";

vehicle="INS_Soldier_1";

skill=0.2;

};

class Item7

{

position[]={9109.1963,330.23141,8844.7588};

azimut=190;

id=55;

side="EAST";

vehicle="INS_Soldier_2";

skill=0.2;

};

};

class Waypoints

{

items=1;

class Item0

{

position[]={9119.5039,328.52951,8830.7334};

formation="LINE";

combat="COMBAT";

class Effects

{

};

showWP="NEVER";

};

};

};

class Item8

{

side="EAST";

class Vehicles

{

items=8;

class Item0

{

position[]={9263.4414,325.22784,8763.46};

azimut=226.289;

id=57;

side="EAST";

vehicle="Ins_Soldier_CO";

leader=1;

rank="SERGEANT";

skill=0.46666664;

init="THIS enableattack false";

};

class Item1

{

position[]={9264.9834,325.81458,8769.0859};

azimut=226.28947;

id=58;

side="EAST";

vehicle="INS_Soldier_AR";

rank="CORPORAL";

skill=0.33333331;

};

class Item2

{

position[]={9263.5977,325.76553,8770.5342};

azimut=226.28947;

id=59;

side="EAST";

vehicle="INS_Soldier_GL";

rank="CORPORAL";

skill=0.33333331;

};

class Item3

{

position[]={9262.2188,325.72446,8771.9785};

azimut=226.28947;

id=60;

side="EAST";

vehicle="INS_Soldier_AT";

skill=0.2;

};

class Item4

{

position[]={9260.8359,325.71234,8773.4219};

azimut=226.28947;

id=61;

side="EAST";

vehicle="INS_Soldier_2";

skill=0.2;

};

class Item5

{

position[]={9259.4551,325.70071,8774.8691};

azimut=226.28947;

id=62;

side="EAST";

vehicle="INS_Soldier_AR";

skill=0.2;

};

class Item6

{

position[]={9258.0723,325.71149,8776.3154};

azimut=226.28947;

id=63;

side="EAST";

vehicle="INS_Soldier_1";

skill=0.2;

};

class Item7

{

position[]={9256.6904,325.72464,8777.7607};

azimut=226.28947;

id=64;

side="EAST";

vehicle="INS_Soldier_2";

skill=0.2;

};

};

class Waypoints

{

items=1;

class Item0

{

position[]={9256.7002,324.16785,8760.3555};

formation="LINE";

combat="COMBAT";

class Effects

{

};

showWP="NEVER";

};

};

};

class Item9

{

side="LOGIC";

class Vehicles

{

items=1;

class Item0

{

position[]={8331.1094,417.00949,8595.2256};

id=66;

side="LOGIC";

vehicle="AIFO";

leader=1;

lock="UNLOCKED";

skill=0.60000002;

init="this setvariable [""Size_Group"",4,false]; ";

synchronizations[]={72};

};

};

};

class Item10

{

side="WEST";

class Vehicles

{

items=1;

class Item0

{

position[]={8801.6025,369.26678,9000.0801};

azimut=93.398376;

special="NONE";

id=72;

side="WEST";

vehicle="CZ_Soldier_SL_DES_EP1";

leader=1;

skill=1;

ammo=0;

init="dostop this; this setunitpos ""up""; this allowdamage false; this setcaptive true;";

synchronizations[]={66};

};

};

};

class Item11

{

side="EAST";

class Vehicles

{

items=2;

class Item0

{

position[]={9164.1182,345.31696,8907.7061};

azimut=195;

special="NONE";

id=65;

side="EAST";

vehicle="AGS_Ins";

player="PLAY G";

leader=1;

skill=1;

};

class Item1

{

position[]={9158.5996,304.58936,7522.123};

azimut=190;

special="NONE";

id=71;

side="CIV";

vehicle="Citizen1";

skill=0.56051308;

init="dostop this; hideobject this; this setunitpos ""up""; this allowdamage false;";

};

};

};

class Item12

{

side="EAST";

class Vehicles

{

items=6;

class Item0

{

position[]={9192.7813,344.89383,8906.0957};

azimut=210;

special="NONE";

id=73;

side="EAST";

vehicle="ACE_BTR70_INS";

leader=1;

skill=1;

};

class Item1

{

position[]={8310.4561,422.44199,7612.5659};

azimut=350;

special="NONE";

id=70;

side="CIV";

vehicle="Citizen1";

skill=1;

init="dostop this; hideobject this; this setunitpos ""up""; this allowdamage false;";

};

class Item2

{

position[]={8635.0781,355.30008,7589.9561};

azimut=20;

special="NONE";

id=46;

side="CIV";

vehicle="Citizen1";

skill=1;

init="dostop this; hideobject this; this setunitpos ""up""; this allowdamage false;";

};

class Item3

{

position[]={9038.5215,287.56473,7755.2798};

azimut=320;

special="NONE";

id=0;

side="CIV";

vehicle="Citizen1";

skill=1;

init="dostop this; hideobject this; this setunitpos ""up""; this allowdamage false;";

};

class Item4

{

position[]={9228.7168,328.14783,8806.6572};

azimut=191.48399;

special="NONE";

id=69;

side="EAST";

vehicle="DSHkM_Mini_TriPod";

skill=0.60000002;

};

class Item5

{

position[]={8806.7021,296.9704,8184.7266};

azimut=225;

special="NONE";

id=75;

side="CIV";

vehicle="Citizen1";

skill=1;

init="dostop this; hideobject this; this setunitpos ""up""; this allowdamage false;";

};

};

};

class Item13

{

side="WEST";

class Vehicles

{

items=1;

class Item0

{

position[]={8298.5098,419.88171,8586.7686};

azimut=30;

special="NONE";

id=74;

side="WEST";

vehicle="CZ_Soldier_SL_DES_EP1";

player="PLAYER COMMANDER";

leader=1;

skill=0.60000002;

};

};

};

class Item14

{

side="CIV";

class Vehicles

{

items=1;

class Item0

{

position[]={8798.3447,369.75827,9000.6309};

azimut=93.398376;

special="NONE";

id=76;

side="CIV";

vehicle="Citizen1";

player="PLAY CDG";

leader=1;

skill=1;

};

};

};

};

class Vehicles

{

items=1;

class Item0

{

position[]={9194.0293,335.01724,8842.0176};

azimut=206.32333;

id=2;

side="EMPTY";

vehicle="Fort_EnvelopeSmall_EP1";

skill=0.60000002;

};

};

class Markers

{

items=15;

class Item0

{

position[]={8636.0244,342.18903,7686.0537};

name="1";

text="1360m";

type="mil_dot";

};

class Item1

{

position[]={8330.8584,397.70895,7669.9912};

name="AA";

text="1500m";

type="mil_dot";

};

class Item2

{

position[]={9013.5801,289.13763,7801.5728};

name="B";

text="1150m";

type="mil_dot";

};

class Item3

{

position[]={9151.3398,313.14371,7503.4204};

name="BB";

text="1440m";

type="mil_dot";

};

class Item4

{

position[]={8786.3438,299.74072,8365.4355};

name="C";

text="540m";

type="mil_dot";

};

class Item5

{

position[]={8577.1338,332.27475,7860.1245};

name="d";

text="1150m";

type="mil_dot";

};

class Item6

{

position[]={9492.3955,276.18982,8570.6387};

name="f";

markerType="RECTANGLE";

type="Empty";

colorName="ColorRed";

fillName="FDiagonal";

a=200;

b=20;

};

class Item7

{

position[]={8226.1875,422.85132,8536.1182};

name="f_1";

markerType="RECTANGLE";

type="Empty";

colorName="ColorRed";

fillName="Vertical";

a=200;

b=20;

angle=-195.92999;

};

class Item8

{

position[]={8560.3086,385.3804,8744.4814};

name="f_2";

markerType="RECTANGLE";

type="Empty";

colorName="ColorRed";

fillName="Vertical";

a=200;

b=20;

angle=313.694;

};

class Item9

{

position[]={8415.7314,401.77615,8571.7178};

name="dd";

text="MINES";

type="Empty";

colorName="ColorRed";

};

class Item10

{

position[]={9461.248,275.05997,8524.8672};

name="dd_1";

text="MINES";

type="Empty";

colorName="ColorRed";

};

class Item11

{

position[]={8137.6777,469.64459,9087.4297};

name="gg";

type="o_armor";

};

class Item12

{

position[]={10153.285,251.29274,8849.1943};

name="gg_1";

type="o_armor";

};

class Item13

{

position[]={9584.0859,310.81915,8970.3682};

name="s";

type="Faction_INS";

a=1.3;

};

class Item14

{

position[]={8250.2744,461.60577,9108.2939};

name="s_1";

type="Faction_INS";

a=1.3;

};

};

};

class Intro

{

addOns[]=

{

"chernarus"

};

addOnsAuto[]=

{

"chernarus"

};

randomSeed=15935747;

class Intel

{

startWeather=0.25;

forecastWeather=0.25;

year=2008;

month=10;

day=11;

hour=9;

minute=20;

};

};

class OutroWin

{

addOns[]=

{

"chernarus"

};

addOnsAuto[]=

{

"chernarus"

};

randomSeed=5293136;

class Intel

{

startWeather=0.25;

forecastWeather=0.25;

year=2008;

month=10;

day=11;

hour=9;

minute=20;

};

};

class OutroLoose

{

addOns[]=

{

"chernarus"

};

addOnsAuto[]=

{

"chernarus"

};

randomSeed=12186099;

class Intel

{

startWeather=0.25;

forecastWeather=0.25;

year=2008;

month=10;

day=11;

hour=9;

minute=20;

};

};

Share this post


Link to post
Share on other sites

BlackAce, the arty module fails to find an artillery weapon with registered ballistics. It does so by checking the vehicle of the leader of the group that is synchronized with the arty module. Assuming the mortar has ballistics defined, the problem might be in the group's leader being a dismounted soldier or occupying a non-artillery vehicle.

Otherwise, try executing '[_gun] call BIS_ARTY_F_initVehicle' for every gun dynamically created.

Share this post


Link to post
Share on other sites
Is it poor form to just post the raw text of the mission file? If you paste that into a Documents>ArmA2>Missions?gorka.chernarus folder as a mission.sqm text file, everything should show up. But it requires all of ACE.

If that's not too much hassle, the arty setup in the mission is quite simple, and wouldn't take to long to assess. I appreciate the offer.

Ok I tried the mission with both ACE and the beta version of arma running ACE. The only other mods running were my personal development mods including AIFO. None of which should have a bearing on the AIFO in regards to testing.

I couldn't replicate the error at all. The only issue I found was by setting the FO to be setcaptive true, prevented him from calling in fire missions, as I use the getfriend command to determine which elements returned from the neartargets command are threats. If I removed the setcaptive line from the FO's init he would request fire missions.

The only other thing I found was the placement of the mortars resulted in most dieing after the first fire mission as they are in line of sight with the opfor units in Gorka.

Sorry but I have no idea what is causing the error in the artillery module your game, and not mine running the same mission?

At a loss sorry

Blake.

Share this post


Link to post
Share on other sites

No worries! Removing the setcaptive line makes the module work perfectly.

If it's not too difficult, I would recommend removing that limitation, as many mission makers may use this addon in a cheating sort of way, with invisible observers calling in constant barrages from safety.

I usually accomplish this thought the HideObject command, but I suspect that calling in a fire mission somehow gives enemy AI knowsabout, and results in a dead observer, even though he hasn't made a sound or moved an inch.

Share this post


Link to post
Share on other sites
No worries! Removing the setcaptive line makes the module work perfectly.

If it's not too difficult, I would recommend removing that limitation, as many mission makers may use this addon in a cheating sort of way, with invisible observers calling in constant barrages from safety.

I usually accomplish this thought the HideObject command, but I suspect that calling in a fire mission somehow gives enemy AI knowsabout, and results in a dead observer, even though he hasn't made a sound or moved an inch.

Cheers thanks for letting me know.

Will have to have a think about how to do this. From my perspective the only way I can think of is if the unit returns being a civilian, to check if the unit is a subtype of soldierWB, soldierEB etc. In the meantime, you could just sync with a member from each of the blufor groups. By default they will call in missions on any known targets plus if an FO goes down a team mate will attempt to grab his "virtual" gear and take over the role. By having one unit in each group also allows for some redundancy.

It is also a little more realistic as they will only call missions against known enemy positions.

This way (if you wished), you could also allow the artillery to WP a groups waypoint, see below, from the first post. Might help your blufor in their assault on gorka.

How FO's call Smoke and WP.

It is important for mission designers to note how I have limited the use of WP/Smoke to try and realise it's use in as realistic way as possible.

If an FO's group's current waypoint is search and destroy or destroy, and their behaviour is set to be combat or aware; Then they will call for WP/smoke if available for the final part of their approach to that waypoint. If they know of any enemy, they will switch to calling HE and the like in preference to the WP/smoke.

My thinking is that way it is used for assaulting possible enemy positions, and prevents it's use at inapproriate times.

Share this post


Link to post
Share on other sites
BlackAce, the arty module fails to find an artillery weapon with registered ballistics. It does so by checking the vehicle of the leader of the group that is synchronized with the arty module. Assuming the mortar has ballistics defined, the problem might be in the group's leader being a dismounted soldier or occupying a non-artillery vehicle.

Otherwise, try executing '[_gun] call BIS_ARTY_F_initVehicle' for every gun dynamically created.

Thanks William for your thoughts,

In this case Maturin isn't specifying a custom mortar, but allowing the AIFO module to create the west sides default mortars (after looking at his actual mission). The AIFO module creates a new group with only mortars and their gunners. The FO's remain in their existing groups so they cannot be part of the artillery module error. The strangest part is when I run Maturin's mission I don't actually get the error?

in the module where I create an artillery module that I sync with the created artillery units I use BIS_ARTY_F_initVehicle to initialise the leader of the artillery group.

Thanks

Blake

@Maturin

I actually went back to your mission to see if there was another easy solution. You actually already had it.

I usually accomplish this thought the HideObject command, but I suspect that calling in a fire mission somehow gives enemy AI knowsabout, and results in a dead observer, even though he hasn't made a sound or moved an inch.

This works, the AIFO module doesn't do anything like revealing a unit. The AI will only know about a unit through the the default acquisition processes of the game engine.

Try putting in your code you have for those other units in your FO, in the small test I did it worked fine.

dostop this; hideobject this; this setunitpos "up"; this allowdamage false;

Share this post


Link to post
Share on other sites

Updated Version 1.4.01

Available in the first post.

Just a small update that utilises the new-ish SunOrMoon and MoonIntensity commands allowing FO's with no augmented vision to better utilise their artillery. No idea if flares affect detection but it greatly improves the overall ambience.

Version 1.4.01

  • Changed the code checking for night to be more realistic. FO's now mix up the ILLUM/HE combination differently depending on the amount of ambient moonlight at night using the moonIntensity command. Night time is found more correctly using hte night SunOrMoon command.
  • Changed the AI schedule ILLUM/HE missions with realistic spcing rather than randomly selecting which type on a percentage like die roll.
  • Changed the prediction algorithm slightly to reduce fire mission calculation time.
  • Added a sample mission to observe the new ILLUM changes, Note the FO's still require themselves to not have NVG's for them to call ILLUM.
  • Fixed report log when trying to add binoculars to a unit that already had a pair.

OsX1iANNogk

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×