Jump to content

Recommended Posts

Helo. I have a seeding problem with the random function that I just can't figure out. 
 

while { surfaceIsWater _suitable || count _list > 0} do {
	while {_spot distance officer_jeff < 1000 || surfaceIsWater _spot} do {

		  _prevStep = _center getPos[ (random 2000), (random 350)];
		  for "_i" from 0 to 2 do {
		  	_step = _prevStep getPos[ (random 2001), (random 351)];
		  	_prevStep = _step;
		  };
	  	_spot = [_step select 0,_step select 1,0];
	};
	_suitable = [_spot, 0, 300, 20, 0, 0.7, 0] call BIS_fnc_findSafePos;
	_list = nearestTerrainObjects [_suitable,["TREE","BUILDING","RUIN","ROCK","HOUSE"], _howBig,false];
};

If the script can't find a position that is not a water surface, it restarts BUT the RANDOM functions just keeps giving me the same position every time the cycle ends. I don't understand, is it not supposed to be random? 
I also tried this with seed using the alternate syntax of random: 

while { surfaceIsWater _suitable || count _list > 0} do {
	while {_spot distance officer_jeff < 1000 || surfaceIsWater _spot} do {

		  _prevStep = _center getPos[ (time random 2000), (time random 350)];
		  for "_i" from 0 to 2 do {
		  	_step = _prevStep getPos[ (time random 2001), (time random 351)];
		  	_prevStep = _step;
		  };
	  	_spot = [_step select 0,_step select 1,0];
	};
	_suitable = [_spot, 0, 300, 20, 0, 0.7, 0] call BIS_fnc_findSafePos;
	_list = nearestTerrainObjects [_suitable,["TREE","BUILDING","RUIN","ROCK","HOUSE"], _howBig,false];
};

Here is an example output: 

15:12:48 "[823.795,10712.5] as _suitable, 56 as count _list, [816.133,10551.5,0] as _spot "
15:12:49 "[820.423,10745.8] as _suitable, 46 as count _list, [816.133,10551.5,0] as _spot "
15:12:50 "[828.004,10684.4] as _suitable, 76 as count _list, [816.133,10551.5,0] as _spot "

Any help would be much appreciated.
 

Share this post


Link to post
Share on other sites

Can you please also post the code that prints the output?

Share this post


Link to post
Share on other sites
diag_log format ["%1 %2 %3  ", _suitable,count _list, _spot];

I don't see how is this important. 

Share this post


Link to post
Share on other sites

Honestly I don't see anything wrong with the output. _spot is only printing the last value you assigned to it

Share this post


Link to post
Share on other sites

I know that the output is correct. Did you read my question? I want to know why the "[ (random 2000), (random 350)]" keeps giving back the same numbers in each cycle ?

Share this post


Link to post
Share on other sites

Have you tried putting:

 

systemchat format["_prevStep = %1",_prevStep];

 

Because I doubt it really gives back same numbers...

Share this post


Link to post
Share on other sites

Yes it does, and if you don't believe it, try it. I can upload the whole file if need be. 

Share this post


Link to post
Share on other sites

if you put the whole script somewhere I would like to test it

Share this post


Link to post
Share on other sites

I get only one print in the log but the numbers are different every time

Share this post


Link to post
Share on other sites

This is the code I tested with, had to make some modifications because I run the script from init.sqf and there was no _this variable there:

 

 officer_jeff = player;
 
_howBig = 11; // _this select 0;
missionNamespace setVariable["task_underway",true];

_center = missionNamespace getVariable ["World_center",[5840,5700,0]];
_suitable = [0,0,0];
private ["_step","_prevStep"];
_list = _suitable;
_spot = getPos officer_jeff;
while { surfaceIsWater _suitable || count _list > 0} do {
	while {_spot distance (officer_jeff) < 1000 || surfaceIsWater _spot} do {

		  _prevStep = _center getPos[ (random 2000), (random 350)];
		  for "_i" from 0 to 2 do {
		  	_step = _prevStep getPos[ (random 2001), (random 351)];
		  	_prevStep = _step;
		  };
	  	_spot = [_step select 0,_step select 1,0];
	};
	_suitable = [_spot, 0, 300, 20, 0, 0.7, 0] call BIS_fnc_findSafePos;
	_list = nearestTerrainObjects [_suitable,["TREE","BUILDING","RUIN","ROCK","HOUSE"], _howBig,false];
	diag_log format [">>>>>>>>>>>>>>>>>>>>>>>>>> %1 %2 %3 ", _suitable,count _list, _spot];
};
_marker1 = createMarker ["Marker"+ str _suitable,_suitable];
_marker1 setMarkerType "hd_objective";

 

Share this post


Link to post
Share on other sites

_howbig is always more than 100 meters, of course it works with 11. I might have forgot to mention that. 

Share this post


Link to post
Share on other sites

Ok I got it printing more with 50 in the _howBig

 

and this is what it printed:

 

18:25:52 "_spot = [5424.32,2814.91,0]"
18:25:52 "_spot = [6579.24,1790.43,0]"
18:25:52 "_spot = [6060.41,6817.24,0]"
18:25:52 "_spot = [6682.16,6311.07,0]"
18:25:52 "_spot = [7446.01,7323.48,0]"
18:25:52 ">>> [7185.68,7461.17] 0 [7446.01,7323.48,0] "

second run:

 

18:26:13 "_spot = [6449.77,3067.1,0]"
18:26:13 "_spot = [6000.58,4245.9,0]"
18:26:13 ">>> [6037.21,4216.71] 3 [6000.58,4245.9,0] "
18:26:13 ">>> [6245.18,4352.97] 7 [6000.58,4245.9,0] "
18:26:13 ">>> [6033.74,4244.55] 7 [6000.58,4245.9,0] "
18:26:13 ">>> [6024.26,4214.05] 5 [6000.58,4245.9,0] "
18:26:13 ">>> [5954.42,4244.34] 3 [6000.58,4245.9,0] "
18:26:13 ">>> [5902.36,4290.74] 2 [6000.58,4245.9,0] "
18:26:13 ">>> [5932.08,4268.41] 2 [6000.58,4245.9,0] "
18:26:13 ">>> [5923.96,4278.38] 2 [6000.58,4245.9,0] "
18:26:13 ">>> [5869,4270.3] 4 [6000.58,4245.9,0] "
18:26:13 ">>> [6234.19,4349.69] 10 [6000.58,4245.9,0] "
18:26:13 ">>> [6269.02,4344.69] 2 [6000.58,4245.9,0] "
18:26:13 ">>> [5863.95,4260.2] 7 [6000.58,4245.9,0] "
18:26:13 ">>> [5924.03,4258.01] 1 [6000.58,4245.9,0] "
18:26:13 ">>> [5974.62,4262.46] 3 [6000.58,4245.9,0] "
18:26:13 ">>> [5983.3,4359.46] 6 [6000.58,4245.9,0] "
18:26:13 ">>> [6007.38,4256.17] 5 [6000.58,4245.9,0] "
18:26:13 ">>> [5915.53,4280.58] 2 [6000.58,4245.9,0] "
18:26:13 ">>> [6084.11,4323.63] 2 [6000.58,4245.9,0] "
18:26:13 ">>> [5910.75,4262.52] 0 [6000.58,4245.9,0] "

 

Seems to work to me (The _spot is changing)

Share this post


Link to post
Share on other sites

No it doesn't, I can see it clearly. The _spot didn't change in the last 20 cycles [6000.58,4245.9,0]. Don't tell me you don't see it. _spot is supposed to be random, not the same number in each cycle. Get it ?

Share this post


Link to post
Share on other sites
Just now, JeyR said:

No it doesn't, I can see it clearly. The _spot didn't change in the last 20 cycles [6000.58,4245.9,0]. Don't tell me you don't see it. _spot is supposed to be random, not the same number in each cycle. Get it ?

 

Of course it's the same in the second print because it prints the last value set for _spot. But in the "_spot = " line all the values assigned to _spot are printed and those vary

Share this post


Link to post
Share on other sites

I can't see it, the 2nd run just printed _spot as [6000.58,4245.9,0] 20 times in a row. What do you mean it varies ?

Share this post


Link to post
Share on other sites

Try with this new test code:

 

officer_jeff = player;
 
_howBig = 50; // _this select 0;
missionNamespace setVariable["task_underway",true];

_center = missionNamespace getVariable ["World_center",[5840,5700,0]];
_suitable = [0,0,0];
private ["_step","_prevStep"];
_list = _suitable;
_spot = getPos officer_jeff;
while { surfaceIsWater _suitable || count _list > 0} do {
	while {_spot distance (officer_jeff) < 1000 || surfaceIsWater _spot} do {

		  _prevStep = _center getPos[ (random 2000), (random 350)];
		  for "_i" from 0 to 2 do {
		  	_step = _prevStep getPos[ (random 2001), (random 351)];
		  	_prevStep = _step;
		  };
	  	_spot = [_step select 0,_step select 1,0];
		
		diag_log format["_spot = %1", _spot];
	};
	_suitable = [_spot, 0, 300, 20, 0, 0.7, 0] call BIS_fnc_findSafePos;
	_list = nearestTerrainObjects [_suitable,["TREE","BUILDING","RUIN","ROCK","HOUSE"], _howBig,false];
	
	diag_log format [">>> %1 %2 %3 ", _suitable,count _list, _spot];
};
_marker1 = createMarker ["Marker"+ str _suitable,_suitable];
_marker1 setMarkerType "hd_objective";

 

Then check the "_spot =" prints in the log

 

Share this post


Link to post
Share on other sites
17:49:03 "_spot = [9666.13,3028.81,0]"
17:49:03 ">>> [9531.69,2972.07] 167 [9666.13,3028.81,0] "
17:49:03 ">>> [9455.88,3236.07] 38 [9666.13,3028.81,0] "
17:49:03 ">>> [9409.98,3141.88] 44 [9666.13,3028.81,0] "
17:49:03 ">>> [9784.95,2756.75] 103 [9666.13,3028.81,0] "
17:49:03 ">>> [9478.4,3219.99] 66 [9666.13,3028.81,0] "
17:49:03 ">>> [9432.54,3081.66] 112 [9666.13,3028.81,0] "
17:49:03 ">>> [9464.37,3226.52] 45 [9666.13,3028.81,0] "
17:49:03 ">>> [9672.66,2894.3] 131 [9666.13,3028.81,0] "
17:49:03 ">>> [9427.07,3079.41] 109 [9666.13,3028.81,0] "
17:49:03 ">>> [9411.67,3120.7] 75 [9666.13,3028.81,0] "
17:49:03 ">>> [9499.26,3231.2] 92 [9666.13,3028.81,0] "
17:49:03 ">>> [9650.26,2901.7] 129 [9666.13,3028.81,0] "
17:49:03 ">>> [9455.83,3235.39] 38 [9666.13,3028.81,0] "
17:49:04 ">>> [9454.94,3095.55] 126 [9666.13,3028.81,0] "
17:49:04 ">>> [9778.71,2757.8] 105 [9666.13,3028.81,0] "
17:49:04 ">>> [9486.06,3108.22] 126 [9666.13,3028.81,0] "

 

Share this post


Link to post
Share on other sites

This is what it printed for me:

 

18:52:20 "_spot = [7819.88,3367.59,0]"
18:52:20 "_spot = [7012.37,4690.59,0]"
18:52:20 "_spot = [7960.8,4514.42,0]"
18:52:20 "_spot = [4829.26,7487.83,0]"
18:52:20 "_spot = [6527.62,6185.35,0]"
18:52:20 ">>> [7228,6987,0] 0 [6527.62,6185.35,0] "

 

Share this post


Link to post
Share on other sites

Okey, I have to be missing something then. I am calling this script via debug console. like this : [100] spawn CHAB_fnc_findSpot; Each of my functions are listed in CfgFunctions.hpp. What do I do wrong? 

Share this post


Link to post
Share on other sites

try placing your target guy in forest or something.

Share this post


Link to post
Share on other sites

Find a safe spot for a composition to spawn , randomly. 

Share this post


Link to post
Share on other sites
Just now, JeyR said:

Find a safe spot for a composition to spawn , randomly. 

That's perhaps the problem. You need a too big safe pos (good luck on Tanoa!) and random is not efficient. Try a spiral, or some filter to avoid already checked areas.

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

×