I'm currently making a tourist planner for KSP which reads in the persistent.sfs which tourist want to do what on which planet . Here's a preview.
The problem is that although science has the whole body name, tourist contracts use a targetBody
to tell which planet
For example here is a tourist contract in the savefile
PARAM
{
name = KerbalTourParameter
state = Incomplete
disableOnStateChange = False
allowPartialFailure = True
values = 219375,0,0,0,0
kerbalName = Ludves Kerman
kerbalGender = Male
PARAM
{
name = KerbalDestinationParameter
state = Incomplete
values = 24375,0,0,0,0
targetBody = 5
targetType = Orbit
kerbalName = Ludves Kerman
}
PARAM
{
name = KerbalDestinationParameter
state = Incomplete
values = 24375,0,0,0,0
targetBody = 0
targetType = Orbit
kerbalName = Ludves Kerman
}
PARAM
{
name = KerbalDestinationParameter
state = Incomplete
values = 24375,0,0,0,0
targetBody = 2
targetType = Flyby
kerbalName = Ludves Kerman
}
}
(as you can see on my screenshot, Ludves wants to Orbit the Sun (0), Orbit Eve (5) and flyby the Mun (2))
And here is a science found
Science
{
id = mysteryGoo@KerbinSrfLandedLaunchPad
title = Observation de la glairine™ mystérieuse d’Aire de lancement
dsc = 1
scv = 0.0122894989
sbv = 0.300000012
sci = 3.85207105
cap = 3.9000001
}
- Do you know where I can find the IDs of all bodies in KSP instead of just doing every single mission?
- Are they the same between each save game?
For the moment I have found :
Sun : 0
Kerbin : 1
Mun : 2
Minmus : 3
Duna : 6 (you see the number begin to become unsorted...)
Ike : 7
Eve : 5
Thanks!
Best Answer
At least one way to observe this numbering in-game is to press Alt+F12 to open the cheat menu, select the "Set Orbit" pane and scroll through the list of available celestial bodies. They seem to be presented in exactly the order given by the numbers you list, i.e. Sun → Kerbin → Mun → Minmus → etc.
I believe the numbering itself comes from the order in which the bodies are stored internally in the
FlightGlobals.Bodies
list (and I suspect it historically more or less reflects the order in which the various bodies were added to the game during its development). If you're writing a mod, you should be able to access a celestial body by its ID number simply by using the number as an index into this list. Conversely, everyCelestialBody
object has aFlightGlobalsIndex
property that gives its index in the list.I'm not sure if there's any convenient way to obtain this numbering directly from a save file. For a stock KSP install, it should always be the same so you could just hardcode it, but mods that add new celestial bodies e.g. via Kopernicus can presumably mix it up.