Jump to content
sprucewaine

Creating Sectors by Script.

Recommended Posts

I copied larrow's code and tried running it through this setup.

 

halfWorldSize = (worldSize / 2);
allLocations = nearestLocations [[halfWorldSize,halfWorldSize,0], ["NameVillage","HistoricalSite","NameCityCapital","NameCity"], halfWorldSize];

{
_pos = locationPosition _x;

//Create the sector logic
_logic = (createGroup sideLogic) createUnit ["ModuleSector_F",_pos,[],0,"NONE"];

//Default setting,  which are optional
_logic setVariable ["DefaultOwner","-1"];
_logic setVariable ["OnOwnerChange",""];
_logic setVariable ["OwnerLimit","0"];
_logic setVariable ["ScoreReward","0"];
_logic setVariable ["TaskOwner","3"];

//Set the sides for the sector
_logic setVariable ["sides",[ east, west ]];

//Wait until sector is initialised
waitUntil {
!isNil { _logic getVariable [ "finalized", nil ] } &&
{ !( _logic getVariable [ "finalized", true ] ) }
};

//A size for the trigger
_trgSize = 500;
//Set the trigger size on the sector
_logic setVariable [ "size", _trgSize ];
//Make the module update its trigger
[ _logic, [], true, "area" ] call BIS_fnc_moduleSector;

//Unfortunately the sector has not been written to also update its marker so..
//Get the modules trigger
_trg = ( _logic getVariable "areas" ) select 0;
//Get the triggers marker
_mrk = ( _trg getVariable "markers" ) select 0;
//Update the markers size
_mrk setMarkerSize [ _trgSize, _trgSize ];
} forEach allLocations;

 

But it only creates one sector. I don't know why its not working.

 

More info on what I'm trying to do, i really like the idea of a scripted mission given how versatile it will be, just to drag the scripts over to any map. Once i get sectors on all the location spots, ill be trying to hook up the spawn ai modules.

Share this post


Link to post
Share on other sites

Nvm i figured it out.

 

Here is finished product.

 

halfWorldSize = (worldSize / 2);
allLocations = nearestLocations [[halfWorldSize,halfWorldSize,0], ["NameVillage","HistoricalSite","NameCityCapital","NameCity"], halfWorldSize];

{
_pos = locationPosition _x;

//Create the sector logic
_logic = (createGroup sideLogic) createUnit ["ModuleSector_F",_pos,[],0,"NONE"];

//Default setting,  which are optional
_logic setVariable ["DefaultOwner","-1"];
_logic setVariable ["OnOwnerChange",""];
_logic setVariable ["OwnerLimit","0"];
_logic setVariable ["ScoreReward","0"];
_logic setVariable ["TaskOwner","3"];

//Set the sides for the sector
_logic setVariable ["sides",[ east, west ]];

//A size for the trigger
_trgSize = 500;
//Set the trigger size on the sector
_logic setVariable [ "size", _trgSize ];
//Make the module update its trigger
[_logic] call BIS_fnc_moduleSector;

//Unfortunately the sector has not been written to also update its marker so..
//Get the modules trigger
_trg = ( _logic getVariable "areas" ) select 0;
//Get the triggers marker
_mrk = ( _trg getVariable "markers" ) select 0;
//Update the markers size
_mrk setMarkerSize [ _trgSize, _trgSize ];
} forEach allLocations;

 

Yeah i apologize deeply for just taking code like that, and not understanding it all that well.

Share this post


Link to post
Share on other sites
10 hours ago, sprucewaine said:

[_logic] call BIS_fnc_moduleSector;

Never recall the module initialisation. This is already done by the sector module itself.

 

Spoiler

_halfWorldSize = (worldSize / 2);
_allLocations = nearestLocations [[ _halfWorldSize, _halfWorldSize,0], ["NameVillage","HistoricalSite","NameCityCapital","NameCity"], _halfWorldSize * 1.4142];

{
	_pos = locationPosition _x;

	//Create the sector logic
	"ModuleSector_F" createUnit [ _pos, createGroup sideLogic, "
		
		this setVariable[ 'DefaultOwner', '-1' ];
		this setVariable[ 'OnOwnerChange', '' ];
		this setVariable[ 'OwnerLimit', '0' ];
		this setVariable[ 'ScoreReward', '0' ];
		this setVariable[ 'TaskOwner', '3' ];
		this setVariable[ 'sides', [ east, west ] ];
		
		this setVariable[ 'BIS_fnc_initModules_disableAutoActivation', false, true ];
		
		_nul = [ this ] spawn {
			params[ '_logic' ];
			
			waitUntil {
				!isNil { _logic getVariable [ 'finalized', nil ] } &&
				{ !( _logic getVariable [ 'finalized', true ] ) }
			};

			_trgSize = 500;
			_logic setVariable [ 'size', _trgSize ];
			[ _logic, [], true, 'area' ] call BIS_fnc_moduleSector;

			_trg = ( _logic getVariable 'areas' ) select 0;
			_mrk = ( _trg getVariable 'markers' ) select 0;
			_mrk setMarkerSize [ _trgSize, _trgSize ];
		};
	" ];

} forEach _allLocations;

 

 

  • Like 1
  • Thanks 2

Share this post


Link to post
Share on other sites

 

I was not able to get that one to work, still only spawns one in the middle. "bis_o65 waiting" - the chat log, what ever that means.

Share this post


Link to post
Share on other sites

What map? I get 8 sectors on Stratis with those settings "NameVillage","HistoricalSite","NameCityCapital","NameCity".

Ignore the "Waiting" thing it was in there as test code and I just forgot to remove it.

Share this post


Link to post
Share on other sites
1 minute ago, Larrow said:

What map? I get 8 sectors on Stratis with those settings "NameVillage","HistoricalSite","NameCityCapital","NameCity".

Ignore the "Waiting" thing it was in there as test code and I just forgot to remove it.

Gotcha, yeah ill try with other maps later, ATM i am doing the WW2 maps from iron front mod.

I was going to be working with the base game maps and dlc maps eventually so, this will come in handy regardless.

Thanks for the help.

Share this post


Link to post
Share on other sites
Spoiler

 

Upon retrying with a different map (stratis), i am still only getting one sector from your script.

Would there be a mod that might affect anything? I got an ACE IF3 CBA setup.

 

 

Spoiler
On 7/17/2019 at 2:17 PM, Larrow said:

Never recall the module initialisation. This is already done by the sector module itself.

 

  Reveal hidden contents



_halfWorldSize = (worldSize / 2);
_allLocations = nearestLocations [[ _halfWorldSize, _halfWorldSize,0], ["NameVillage","HistoricalSite","NameCityCapital","NameCity"], _halfWorldSize * 1.4142];

{
	_pos = locationPosition _x;

	//Create the sector logic
	"ModuleSector_F" createUnit [ _pos, createGroup sideLogic, "
		
		this setVariable[ 'DefaultOwner', '-1' ];
		this setVariable[ 'OnOwnerChange', '' ];
		this setVariable[ 'OwnerLimit', '0' ];
		this setVariable[ 'ScoreReward', '0' ];
		this setVariable[ 'TaskOwner', '3' ];
		this setVariable[ 'sides', [ east, west ] ];
		
		this setVariable[ 'BIS_fnc_initModules_disableAutoActivation', false, true ];
		
		_nul = [ this ] spawn {
			params[ '_logic' ];
			
			waitUntil {
				!isNil { _logic getVariable [ 'finalized', nil ] } &&
				{ !( _logic getVariable [ 'finalized', true ] ) }
			};

			_trgSize = 500;
			_logic setVariable [ 'size', _trgSize ];
			[ _logic, [], true, 'area' ] call BIS_fnc_moduleSector;

			_trg = ( _logic getVariable 'areas' ) select 0;
			_mrk = ( _trg getVariable 'markers' ) select 0;
			_mrk setMarkerSize [ _trgSize, _trgSize ];
		};
	" ];

} forEach _allLocations;

 

 

 

Upon retrying with a different map (stratis), i am still only getting one sector from your script.

Would there be a mod that might effect anything? I got an ACE IF3 CBA setup.

 

Share this post


Link to post
Share on other sites
17 hours ago, sprucewaine said:

Would there be a mod that might effect anything? I got an ACE IF3 CBA setup.

I do not know, that would be for you to test by removing all mods and re-enabling them one at a time to see what one effects it.

 

As I said before the code in my previous post works fine for me on all vanilla maps. No mods loaded other than a few of my own Eden tools.

 

 

Also this...

On 7/17/2019 at 1:17 PM, Larrow said:

this setVariable[ 'BIS_fnc_initModules_disableAutoActivation', false, true ];

...is the answer to your other thread about spawning spawnAI module by script. When spawning any module in a running mission this is needed to make it initialise properly.

  • Like 2
  • Thanks 1

Share this post


Link to post
Share on other sites

doesnt look like anyone actually answered this,

 

private _logic = (createGroup sideLogic) createUnit ["ModuleSector_F",_pos,[],0,"NONE"];

 

you need to add this to your loop to make the variable reset after each iteration of the foreach loop, thats why your only getting one sector, the variables in a foreach loop are local to that loop, so you  can nest them fine, but to use the variable again each time in the same loop you need to reset its value for each time the loop executes

 

wish i could have helped sooner, i cant see anything else wrong here really, but from your results thats sounds like where your having trouble

 

Share this post


Link to post
Share on other sites
35 minutes ago, grrrrobots said:

but to use the variable again each time in the same loop you need to reset its value for each time the loop executes

 

While privating local variables is always good practice, that's not what "private" does. 

 

Without it, "_logic" is still redefined in each iteration.

 

You are also referring to abandoned code. See Larrow's first reply above.

 

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

×