Jump to content
bangabob

Enemy occupation system (eos)

Recommended Posts

So.. I've spent a whole night reading the 59 pages of this post and nobody seems to have tried to make EOS persistent. Me and my online group have a dedi just for EOS so we want it to be persistent, so I've made it with inidb2. We are still testing but its already working so I thougt I'd let you guys know.. although I think there's probaly nobody interested since no one seemed to even try.

Tried, done, and implemented (using namespace). You should have just asked.

Share this post


Link to post
Share on other sites

Does anyone know if there is any way to limit how many EOS zones can be activated at once? This would be a very good way to optimize missions so that there isn't so many AI spawned at once bogging down performance. 

Share this post


Link to post
Share on other sites

I was wondering if there is a way to somehow cap how many units are spawned on the map at any given time, the reason is i have markers next to each other and when moving from one to another then obviously both are activated resulting in to many units spawned = lag.

I am also looking for either this or somehow limiting how many markers can be active at once until one is cleared, another becomes active and so on.

Share this post


Link to post
Share on other sites

I would suggest having 2 optional conditions for the AI to spawn/respawn

 

1) Based on minimal server cps, say 20

2) Limit number of AI on map. (Most servers know what their AI cap is or nearabouts, so the ability to limit this will help maintain a good cps

Share this post


Link to post
Share on other sites

I would suggest having 2 optional conditions for the AI to spawn/respawn

 

1) Based on minimal server cps, say 20

2) Limit number of AI on map. (Most servers know what their AI cap is or nearabouts, so the ability to limit this will help maintain a good cps

Do you know how to go about doing that?

Share this post


Link to post
Share on other sites

I guess not. Sucks how bad servers lag when people go off and start activating more zones..........

Share this post


Link to post
Share on other sites

I guess not. Sucks how bad servers lag when people go off and start activating more zones..........

I have not tested this except for dropping it in to see if the count works. But, I guess you could get the marker alpha and loop every few seconds checking and setting a public var that could be used in the trigger condition within the core.

//null=[] execVM "eos\markercount.sqf";
//When the markeralpha is > .5 and not a icon then count it. 
//Shape types for markers "ICON", "RECTANGLE" or "ELLIPSE". 

_count = { if ( markerAlpha _x > .5 && markerShape _x != "ICON" && getMarkerColor _x == hostileColor ) then { true }else{ false };} count allMapMarkers;
hint format[" %1 ",_count];

You may be also able to count the activated zones variable (_eosactivated), but I haven't tried. I did add speed to the condition (_actCond) which seemed to help out with that. Example, players speed must be < 300 to activate the zone...  (speed _x) <= 300 . That would deal with guys in jets flying around lighting up the whole map.

 

Just some quick ideas for you to try.

 

dub

Share this post


Link to post
Share on other sites

Using in a mission now, thanks for taking the time to put together a simple detailed instructions readme for us noobies.  :D 

Share this post


Link to post
Share on other sites

This looks super cool! I'm going to give a shot working with it today!

Share this post


Link to post
Share on other sites

I still cannot get it working correctly.  In the beginning I at least managed to have it spawn in soldiers but now for some reason all I keep getting are errors in different files but mainly this :

 

http://imgur.com/a/C9F2S

Share this post


Link to post
Share on other sites

Do you know how to go about doing that?

 

 

I guess not. Sucks how bad servers lag when people go off and start activating more zones..........

 

A bit more patience pal, not everyone here is running around after you.

 

To grab the server fps use this command

 

https://community.bistudio.com/wiki/diag_fps

 

to grab the number of ai (assuming a dedicated server with no headless clients and no local ai on the players nodes or just a few ai taking up playable slots

 

The good enough value for the use in this function would be allunits-playableunits

Lets assume you want to define your max number of allowed AI on the map at any one time is 200

lets assume the minimum fps you want on the server is 20 (You could go as slow as 15 but defnitely no lower than that)

 

so you would add a condition, something like the following in the script that creates the AI (search "createUnit" to find the scripts that do this)

while {true}do
{
     while{((count (allunits-playableUnits)) > 200)||(diag_fps < 20)}do
     {
          sleep 10;
     };
 
// add the code that calls the script that creates the AI, wherever that is, you can search for that
 
};

The suggestion was aimed at Bangabob for possible future development of his system.

  • Like 1

Share this post


Link to post
Share on other sites

A bit more patience pal, not everyone here is running around after you.

 

To grab the server fps use this command

 

https://community.bistudio.com/wiki/diag_fps

 

to grab the number of ai (assuming a dedicated server with no headless clients and no local ai on the players nodes or just a few ai taking up playable slots

 

The good enough value for the use in this function would be allunits-playableunits

Lets assume you want to define your max number of allowed AI on the map at any one time is 200

lets assume the minimum fps you want on the server is 20 (You could go as slow as 15 but defnitely no lower than that)

 

so you would add a condition, something like the following in the script that creates the AI (search "createUnit" to find the scripts that do this)

while {true}do
{
while{(allunits-playableUnits > 200)||(diag_fps < 20)}do
{
sleep 10;
};
 
// add the code that calls the script that creates the AI, wherever that is, you can search for that
 
};

The suggestion was aimed at Bangabob for possible future development of his system.

I did not know about this! I think I will give it a go!

 

Going to want to count allunits-playableUnits since this returns a list not a number.

 

dub

Share this post


Link to post
Share on other sites

I have not tested this except for dropping it in to see if the count works. But, I guess you could get the marker alpha and loop every few seconds checking and setting a public var that could be used in the trigger condition within the core.

//null=[] execVM "eos\markercount.sqf";
//When the markeralpha is > .5 and not a icon then count it. 
//Shape types for markers "ICON", "RECTANGLE" or "ELLIPSE". 

_count = { if ( markerAlpha _x > .5 && markerShape _x != "ICON" && getMarkerColor _x == hostileColor ) then { true }else{ false };} count allMapMarkers;
hint format[" %1 ",_count];

You may be also able to count the activated zones variable (_eosactivated), but I haven't tried. I did add speed to the condition (_actCond) which seemed to help out with that. Example, players speed must be < 300 to activate the zone...  (speed _x) <= 300 . That would deal with guys in jets flying around lighting up the whole map.

 

Just some quick ideas for you to try.

 

dub

 

A bit more patience pal, not everyone here is running around after you.

 

To grab the server fps use this command

 

https://community.bistudio.com/wiki/diag_fps

 

to grab the number of ai (assuming a dedicated server with no headless clients and no local ai on the players nodes or just a few ai taking up playable slots

 

The good enough value for the use in this function would be allunits-playableunits

Lets assume you want to define your max number of allowed AI on the map at any one time is 200

lets assume the minimum fps you want on the server is 20 (You could go as slow as 15 but defnitely no lower than that)

 

so you would add a condition, something like the following in the script that creates the AI (search "createUnit" to find the scripts that do this)

while {true}do
{
while{((count (allunits-playableUnits)) > 200)||(diag_fps < 20)}do
{
sleep 10;
};
 
// add the code that calls the script that creates the AI, wherever that is, you can search for that
 
};

The suggestion was aimed at Bangabob for possible future development of his system.

Thanks for your help guys. Been doing nothing but trial and error non-stop for the past few days here, trying to debug my many failed attempts at different things.

I'm gonna give these a try though. If i find myself clueless (which chances are likely), I'll pop back in here,

Thanks again!

Share this post


Link to post
Share on other sites

Going to want to count allunits-playableUnits since this returns a list not a number.

 

 

Oops sorry my mistake, original code edited

Share this post


Link to post
Share on other sites

Oops sorry my mistake, original code edited

Anyone get any results with this?

 

I haven't yet, but I found the createUnit in eos\functions\infantry_fnc.sqf

Share this post


Link to post
Share on other sites

Hi All

 

I have been asked by a friend if i could implement the EOS system in a mission he has put together, all he had done is provided me with a mission file with all the friendly stuff in place and asked me to sort out the enemy using EOS. the problem is the supplied mission is done in the Eden 3D editor which does not support the game logic. Is there any way round this issue as i can't put in the required game logic to get the EOS started.

 

Any suggestions would be much appreciated.

 

Thanks

 

Ian

Share this post


Link to post
Share on other sites

Hi All

 

I have been asked by a friend if i could implement the EOS system in a mission he has put together, all he had done is provided me with a mission file with all the friendly stuff in place and asked me to sort out the enemy using EOS. the problem is the supplied mission is done in the Eden 3D editor which does not support the game logic. Is there any way round this issue as i can't put in the required game logic to get the EOS started.

 

Any suggestions would be much appreciated.

 

Thanks

 

Ian

Drop it in and see. You will know in 2 seconds. In the Eden editor, choose "Systems"->"Logic Entities"->"objects" -> "Game Logic". Call it "server".

 

dub

Share this post


Link to post
Share on other sites

Having an issue with the new Tanoa units:

// ADD CLASSNAMES 
	if (_faction==5) then {
	_InfPool=	["I_C_Soldier_Bandit_1_F","I_C_Soldier_Bandit_2_F","I_C_Soldier_Bandit_3_F","I_C_Soldier_Bandit_4_F","I_C_Soldier_Bandit_5_F","I_C_Soldier_Bandit_6_F","I_C_Soldier_Bandit_7_F","I_C_Soldier_Bandit_8_F"];	
	_ArmPool=	[];
	_MotPool=	["I_C_Offroad_02_unarmed_F"];
	_ACHPool=	[];
	_CHPool=	[];
	_uavPool=	[];
	_stPool=	[];
	_shipPool=	[];
	_diverPool=	[];
	_crewPool=	[];
	_heliCrew=	[];
	};

Because of the MotPool it comes up with a script error, if I dont try and spawn a veh the error doesnt appear, any ideas?

Share this post


Link to post
Share on other sites

Having an issue with the new Tanoa units:

// ADD CLASSNAMES 
	if (_faction==5) then {
	_InfPool=	["I_C_Soldier_Bandit_1_F","I_C_Soldier_Bandit_2_F","I_C_Soldier_Bandit_3_F","I_C_Soldier_Bandit_4_F","I_C_Soldier_Bandit_5_F","I_C_Soldier_Bandit_6_F","I_C_Soldier_Bandit_7_F","I_C_Soldier_Bandit_8_F"];	
	_ArmPool=	[];
	_MotPool=	["I_C_Offroad_02_unarmed_F"];
	_ACHPool=	[];
	_CHPool=	[];
	_uavPool=	[];
	_stPool=	[];
	_shipPool=	[];
	_diverPool=	[];
	_crewPool=	[];
	_heliCrew=	[];
	};

Because of the MotPool it comes up with a script error, if I dont try and spawn a veh the error doesnt appear, any ideas?

Just tested this. This working fine. See below

// IND Syndicate
if ( _faction == 5 ) then {
	_InfPool=	["I_C_Soldier_Bandit_7_F","I_C_Soldier_Bandit_2_F","I_C_Soldier_Bandit_3_F","I_C_Soldier_Bandit_4_F","I_C_Soldier_Bandit_5_F","I_C_Soldier_Bandit_6_F","I_C_Soldier_Bandit_8_F","I_C_Soldier_Para_7_F","I_C_Soldier_Para_2_F","I_C_Soldier_Para_3_F","I_C_Soldier_Para_4_F","I_C_Soldier_Para_5_F","I_C_Soldier_Para_6_F","I_C_Soldier_Para_8_F"];
	_ArmPool=	[];
	_MotPool=	["I_C_Offroad_02_unarmed_F","I_G_Offroad_01_armed_F","I_G_Offroad_01_F"];
	_ACHPool=	[];
	_CHPool=	["I_C_Heli_Light_01_civil_F"];
	_uavPool=	[];
	_stPool=	[];
	_shipPool=	["I_C_Boat_Transport_02_F","I_C_Boat_Transport_01_F","I_Boat_Armed_01_minigun_F","C_Scooter_Transport_01F"];
	_diverPool=	["I_C_Soldier_Bandit_7_F","I_C_Soldier_Bandit_2_F","I_C_Soldier_Bandit_3_F"];
	_crewPool=	["I_C_Soldier_Para_2_F","I_C_Soldier_Para_3_F","I_C_Soldier_Para_4_F","I_C_Soldier_Bandit_7_F","I_C_Soldier_Bandit_2_F","I_C_Soldier_Bandit_3_F"];
	_heliCrew=	["I_C_Soldier_Para_2_F"];
};

Share this post


Link to post
Share on other sites

Hi guys, looking for some help in a Tanoa insurgency mission I've created. Apologies if this is answered elsewhere, I looked through pages of this thread and couldn't see anything.

 

My problem is that after some time the zones stop spawning enemies.  Zones work fine with multiple factions for a while, but eventually no enemies appear and zones are cleared by simply entering them.

 

I had the same issue when creating an eos file for the unsung mod a while ago.  On both mission files everything works as expected for quite a while, then randomly no enemies are spawned.

 

Each zone has its own array in openMe.sqf (around 650 zones each with its own array). It's not particular zones that don't work, when it stops working I restart the server and teleport to a zone that wasn't working, and it spawns enemies fine.

 

Nothing in RPT log to point to a problem.  Any suggestions or ideas would be appreciated.

 

EDIT: 

 

I can replicate this by teleporting a player in and out of the enemy spawn zone.  After several times working perfectly, no more enemies are spawned.

 

Also when 1 faction stops spawning, the other can carry on fine for a while before breaking also ie. independent zones no longer spawn enemies but EAST zones still do for a while, before breaking also.

Share this post


Link to post
Share on other sites

I've had that happen before, I don't believe the script is deleting the groups that are losing units due to being despawned properly. So eventually it'll run out of groups to work with. Like so:

 

https://community.bistudio.com/wiki/deleteGroup

 

With 650(!) zones, it's no wonder you're running out of groups quickly. I've used various scripts in the past to constantly clean the groups up, assuming you run something like DMZ Delete where you're spawning the units (server or HC) it should work.

Share this post


Link to post
Share on other sites

I've had that happen before, I don't believe the script is deleting the groups that are losing units due to being despawned properly. So eventually it'll run out of groups to work with. Like so:

 

https://community.bistudio.com/wiki/deleteGroup

 

With 650(!) zones, it's no wonder you're running out of groups quickly. I've used various scripts in the past to constantly clean the groups up, assuming you run something like DMZ Delete where you're spawning the units (server or HC) it should work.

Thanks for this.  Yes 650 is a lot but it's a large map :)

 

So I have a cleanup script that removes groups running on the server but have just realized that all AI units are being passed to the headless.  How do I run that script on the headless?

 

EDIT: After you gave me the idea, I loaded the mission on dedi without headless, works perfectly...I learn everything by trial and error but I'm stumped on how to have the script passing AI to the headless also run a cleanup.

Share this post


Link to post
Share on other sites

Presumably, your cleanup script init starts by checking that it's on the server with !isServer. This works fine for 90% of implementations, but we're in the 10%. So we need to modify it.

 

According to the isServer Wiki Page, the most likely best solution is to initialize the cleanup script globally, but run a isPlayer check instead of !isServer and if true, exit the script. This should cause it to exit on the player machines only, leaving the Server and HC machines free to delete empty groups as they encounter them.

Share this post


Link to post
Share on other sites

Thanks for taking the time to answer.

 

My cleanup script starts with !isServer check.

 

So looking at the wiki page you pointed me to, I could instead use:  

 

if (!hasInterface) then {};

 

I'll try replacing the isServer check with that and see what happens.  Want it to work on both dedicated only and dedicated with HC.  Feel like I'm getting close.

 

EDIT: Fixed thanks to Ikincheloe's suggestion.  For anyone else:

 

In the script that passes AI to the HC, I added:

 

if (!hasInterface) then {
[] execVM "scripts\clearBodies.sqf"; (that's the script that clears groups)
diag_log "Cleanup";
};
 
Before the if (!isServer) exitWith {};

Share this post


Link to post
Share on other sites

guys? I only want infantry to spawn in the area, how do I do that? I try to remove the classname of the vehicle but i'm getting error

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

×