Page 2 of 2

Re: Saving At Stations

Posted: Thu Nov 23, 2023 12:36 pm
by phkb
Killer Wolf wrote: Thu Nov 23, 2023 11:38 am
but again it won't let me save. will i be able to stick the above code into the "do" bit of the planetinfo?
Spawning anything via the script_actions in planetinfo will not ever allow you to save your game at the station it spawns. That system was designed before the "systemWillPopulate" routines were implemented, and would be a step backwards in terms of compatibility.

Would it be possible to get a copy of your OXP, as it stands, so I can have a deeper dive into whats going on? I should be able to provide some insight and get you going in the right direction. You can PM me a link if you'd like to keep the code private for now. Even just the Config and Script folders should be enough to allow me to debug it.

Re: Saving At Stations

Posted: Fri Nov 24, 2023 11:31 am
by Killer Wolf
made a little progress, i can forward you the folders if you can't suss this out though;
currently have a world-scripts that points to my script in Scripts. it says

Code: Select all

this.systemWillPopulate = function()
{
	if (galaxyNumber === 0 && system.ID === 129) 
		{
		system.setPopulator("II_station", 
			{
			callback: function (pos) 
				{
				system.addShips("KW_II", 1, Vector3D(26700, 11250, 5235).fromCoordinateSystem("pwm"));
				},
			location: "COORDINATES",
			coordinates: stationPos,
			deterministic:true // < this is important
		});
	}
}
which is appearing now to work - jump to Zaonce and i get my station, jump eslewhere, i don't. Still need to tweak the coords, i don't fully understand why it's not spwaning where i thought it should, BUT - i'm still not allowd to save :-(

Re: Saving At Stations

Posted: Fri Nov 24, 2023 12:32 pm
by phkb
It doesn’t look like you’re setting stationPos anywhere inside the function. That’s the variable that is defining where your station will spawn. Without it, you’re essentially passing in a null value, which is probably negating the effect of deterministic:true.

Re: Saving At Stations

Posted: Fri Nov 24, 2023 1:54 pm
by Killer Wolf
magic, that's more consistent, thanks. any idea about the saving problem?

Re: Saving At Stations

Posted: Fri Nov 24, 2023 2:27 pm
by phkb
Killer Wolf wrote: Fri Nov 24, 2023 1:54 pm
any idea about the saving problem?
This line is the problem:

Code: Select all

system.addShips("KW_II", 1, Vector3D(26700, 11250, 5235).fromCoordinateSystem("pwm"));
When you pass in stationPos to the callback, inside that callback you have a new variable, pos, which is the position you want to create your station at. So that line should read:

Code: Select all

system.addShips("KW_II", 1, pos, 0);
Based on this, your full routine should look something like this:

Code: Select all

this.systemWillPopulate = function()
{
	if (galaxyNumber === 0 && system.ID === 129) 
		{
		var stationPos = Vector3D(26700, 11250, 5235).fromCoordinateSystem("pwm");
		system.setPopulator("II_station", 
			{
			callback: function (pos) 
				{
				system.addShips("KW_II", 1, pos, 0);
				},
			location: "COORDINATES",
			coordinates: stationPos,
			deterministic:true // < this is important
		});
	}
}
That should allow you to save at your station.

Re: Saving At Stations

Posted: Mon Dec 11, 2023 5:47 pm
by Killer Wolf
finally replaced my test script w/ the example above and i'm not getting any spawn again. Doesn't have the log line in that my script does but the station appears as an "I" on the ASC, but i'm seeing nothing. no compile/syntax errors in the log though :-/

is there any significance to your addships having a zero at the end? mine ends w/ the co-ordinates.

Re: Saving At Stations

Posted: Mon Dec 11, 2023 7:51 pm
by hiran
Killer Wolf wrote: Mon Dec 11, 2023 5:47 pm
is there any significance to your addships having a zero at the end? mine ends w/ the co-ordinates.
The documentation shows the addShips function can be run with two, three and four arguments.
https://wiki.alioth.net/index.php/Oolit ... m#addShips

So if you omit the fourth parameter, the ship will spawn within the scanner range of the third parameter.
The third parameter defines the position. If it is omitted, Oolite will spawn at the witchpoint.

Maybe you still should convert your coordinates, or search closer to the witchpoint?

Re: Saving At Stations

Posted: Mon Dec 11, 2023 9:35 pm
by phkb
The 0 parameter at the end is vital, because we want the station to be positioned at the *exact* coordinates we specify. Otherwise the deterministic flag is pointless and we can’t save at the station.

Can you post the entire script file, top to bottom, so I can debug?

Re: Saving At Stations

Posted: Tue Dec 12, 2023 5:04 pm
by Killer Wolf
this was my test script to get the only-in-Cebior bit working, spawned the station in view of the Witchspace exit but wouldn't allow saves;

Code: Select all

this.name = "oolite-II";
	
this.systemWillPopulate = function()
{
	if (galaxyNumber === 1 && system.ID === 195) 
		{
		this.kwiistationOffset = system.mainPlanet.position.subtract(system.mainStation.position);
		this.kwiistationPosition = system.mainStation.position.add(this.kwiistationOffset.multiply(2)); // put the kwiistation directly on the other side of the planet from the main station.
		this.kwiistation = system.addShips("KWii", 1, this.kwiistationPosition); // this.kwiistation is an array of added ships - in this case a single cell array
		log(this.name, "kwiistation added.");
		};
		
}
this is the current version from what you posted early. i've since chopped the vector3D numbers down by a decimal place to see if it made any difference but still doesn't appear to be doing anything; no compile errors but no spawn i can see, nothing on my ASC;

Code: Select all

this.name = "oolite-II";
	
this.systemWillPopulate = function()
{
	if (galaxyNumber === 1 && system.ID === 195) 
		{
		var stationPos = Vector3D(26.700, 11.250, 5.235).fromCoordinateSystem("pwm");
		system.setPopulator("II_station", 
			{
			callback: function (pos) 
				{
				system.addShips("KW_II", 1, pos, 0);
				},
			location: "COORDINATES",
			coordinates: stationPos,
			deterministic:true // < this is important
		});
	}
}
cheers

Re: Saving At Stations

Posted: Tue Dec 12, 2023 8:59 pm
by phkb
Well, on the surface, the code looks OK. However, the big difference I can see between the two routines is this:

Code: Select all

system.addShips("KWii", 1, this.kwiistationPosition);

Code: Select all

system.addShips("KW_II", 1, pos, 0);
If the first version, with "KWii" works, and the second version, with "KW_II" doesn't work, then I'd suspect your station doesn't have the role of "KW_II", but does have the role of "KWii". Check the roles and make sure you're using the right one. Edit to add: Capitalisation is important.

As a suggestion, you can add this to your code to help debug:

Code: Select all

this.systemWillPopulate = function()
{
	if (galaxyNumber === 1 && system.ID === 195) 
		{
		var stationPos = Vector3D(26.700, 11.250, 5.235).fromCoordinateSystem("pwm");
		system.setPopulator("II_station", 
			{
			callback: function (pos) 
				{
				var stn = system.addShips("KW_II", 1, pos, 0);
				if (stn && stn.length > 0) {
					log("station_spawn", "station spawned successfully");
				} else {
					log("station_spawn", "**ERROR** - station not spawned");
				},
			location: "COORDINATES",
			coordinates: stationPos,
			deterministic:true // < this is important
		});
	}
}

Re: Saving At Stations

Posted: Wed Dec 13, 2023 10:22 am
by Killer Wolf
for crying out loud, it was staring me in my face - you're right, the ship tag is KW_II and the role was KWii, got myself mixed up. will rename!

works and can now save, just need to tweak position and possibly orientation.

much obliged @phkb :-)

Re: Saving At Stations

Posted: Wed Dec 13, 2023 10:43 am
by phkb
Yay! Got there in the end!