Jump to content

[1.10.1+] Contract Configurator [v1.30.5] [2020-10-05]


nightingale

Recommended Posts

Sure. I'm modifying Advanced Progression's contracts.

Here is the MM cached output:


UrlConfig
{
name = FirstPlanetFlyby
type = CONTRACT_TYPE
parentUrl = AdvancedProgression/Progression
url = AdvancedProgression/Progression/FirstPlanetFlyby
CONTRACT_TYPE
{
name = FirstPlanetFlyby
group = AdvancedProgression
title = Send the first manned mission to another planet.
description = Our space program is ready to enter the next phase of exploration : the planets. Send the first manned mission to flyby another planet, and return safely to Kerbin.
notes = Complete the following:
synopsis = Launch a manned flyby mission to another planet. It doesn't matter which one.
completedMessage = You did it! We've launched the very first manned mission to another planet!
agent = Kerbin World-Firsts Record-Keeping Society
cancellable = true
declinable = true
prestige = Significant
maxCompletions = 1
maxSimultaneous = 1
rewardScience = 10.0
rewardReputation = 10.0
rewardFunds = 80000.0
advanceFunds = 70000.0
REQUIREMENT
{
name = CompleteContract11002
type = CompleteContract
contractType = FirstPlanetProbe
}
PARAMETER
{
name = VesselParameterGroup11001
type = VesselParameterGroup
define = Planetary Flyby
PARAMETER
{
name = HasCrew11001
type = HasCrew
minCrew = 1
}
PARAMETER
{
name = Any11001
type = Any
PARAMETER
{
name = ReachState11001
type = ReachState
targetBody = Sun.Children().Random()
situation = ESCAPING
disableOnStateChange = true
}
}
PARAMETER
{
name = ReturnHome11001
type = ReturnHome
completeInSequence = true
}
}
}
}

These are the changes I made:


@CONTRACT_TYPE[FirstPlanetFlyby]
{
@PARAMETER[VesselParameterGroup11001]
{
!PARAMETER[Any11001]{}
!PARAMETER[ReturnHome11001]{}
PARAMETER
{
name = Any11001
type = Any
PARAMETER
{
name = ReachState11001
type = ReachState
targetBody = Sun.Children().Random()
situation = ESCAPING
disableOnStateChange = true
}
}
PARAMETER
{
name = ReturnHome11001
type = ReturnHome
completeInSequence = true
}
}
}

And here is the original:

CONTRACT_TYPE
{
name = FirstPlanetFlyby
group = AdvancedProgression
title = Send the first manned mission to another planet.
description = Our space program is ready to enter the next phase of exploration : the planets. Send the first manned mission to flyby another planet, and return safely to Kerbin.
notes = Complete the following:
synopsis = Launch a manned flyby mission to another planet. It doesn't matter which one.
completedMessage = You did it! We've launched the very first manned mission to another planet!
agent = Kerbin World-Firsts Record-Keeping Society
//deadline = 100
cancellable = true
declinable = true
prestige = Significant
maxCompletions = 1
maxSimultaneous = 1
rewardScience = 10.0
rewardReputation = 10.0
rewardFunds = 80000.0
advanceFunds = 70000.0
REQUIREMENT
{
name = CompleteContract11002
type = CompleteContract
contractType = FirstPlanetProbe
}
PARAMETER
{
name = VesselParameterGroup11001
type = VesselParameterGroup
define = Planetary Flyby
PARAMETER
{
name = HasCrew11001
type = HasCrew
minCrew = 1
}
PARAMETER
{
name = Any11001
type = Any
PARAMETER
{
name = ReachState11001
type = ReachState
targetBody = Moho
situation = ESCAPING
disableOnStateChange = true
}
PARAMETER
{
name = ReachState11002
type = ReachState
targetBody = Eve
situation = ESCAPING
disableOnStateChange = true
}
PARAMETER
{
name = ReachState11003
type = ReachState
targetBody = Duna
situation = ESCAPING
disableOnStateChange = true
}
PARAMETER
{
name = ReachState11004
type = ReachState
targetBody = Dres
situation = ESCAPING
disableOnStateChange = true
}
PARAMETER
{
name = ReachState11005
type = ReachState
targetBody = Jool
situation = ESCAPING
disableOnStateChange = true
}
PARAMETER
{
name = ReachState11006
type = ReachState
targetBody = Eeloo
situation = ESCAPING
disableOnStateChange = true
}
}

PARAMETER
{
name = ReturnHome11001
type = ReturnHome
completeInSequence = true
}
}
}

Careful, you're significantly changing the contract. The original has "do a flyby of Moho, or Eve, or ..."; yours ends up being "do a flyby of <one random planet selected at contract generation time>". What you want is more like this huge thing:


{
DATA
{
type = List<CelestialBody>

allPlanets = CelestialBody(Sun).Children()
}

@PARAMETER[VesselParameterGroup11001]
{
!PARAMETER[Any11001]{}
!PARAMETER[ReturnHome11001]{}
PARAMETER
{
name = Any11001
type = Any
PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(0)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 0
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(1)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 1
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(2)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 2
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(3)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 3
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(4)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 4
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(5)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 5
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(6)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 6
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(7)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 7
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(8)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 8
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(9)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 9
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(10)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 10
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(11)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 11
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(12)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 12
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(13)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 13
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(14)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 14
}
}

PARAMETER
{
type = ReachState
targetBody = @/allPlanets.ElementAt(15)
situation = ESCAPING

REQUIREMENT
{
type = Expression
expression = @/allPlanets.Count() > 15
}
}
}
PARAMETER
{
name = ReturnHome11001
type = ReturnHome
completeInSequence = true
}
}
}
@CONTRACT_TYPE[FirstPlanetFlyby]

Link to comment
Share on other sites

Oh wow, that looks scary.

Few things.

I did intend to change the way that contract works, but I'm not sure that it really changes that much? You go from, a planet selected at random to do a flyby, vs do a flyby of anything.

Hmm, typing that out I guess I do see the issue since this is supposed to be the first planet flyby. I guess what I wrote would be fine if it was a do random flyby.

Ok you convinced me. :)

Next, I'm curious as to why you need the 16 ReachState lines? Is it one for each possible planet or is something else happening that I'm not getting?

Sorry for all the questions. This is just really fascinating and kind of makes me want to try my hand at making contracts.

Oh and one more thing, was what I changed the contract too technically workable or did what I change cause the crash?

Edited by Nori
Link to comment
Share on other sites

Oh wow, that looks scary.

Few things.

I did intend to change the way that contract works, but I'm not sure that it really changes that much? You go from, a planet selected at random to do a flyby, vs do a flyby of anything.

Hmm, typing that out I guess I do see the issue since this is supposed to be the first planet flyby. I guess what I wrote would be fine if it was a do random flyby.

Ok you convinced me. :)

I just assumed you're trying to maintain linuxgurugamer's original intent. :)

Next, I'm curious as to why you need the 16 ReachState lines? Is it one for each possible planet or is something else happening that I'm not getting?

It was an arbitrary number to account for any number of planet packs. One day I'll think of a way to do auto-expand that rather than having to make that huge messy structure.

Sorry for all the questions. This is just really fascinating and kind of makes me want to try my hand at making contracts.

No problem!

Oh and one more thing, was what I changed the contract too technically workable or did what I change cause the crash?

Technically workable. The crash is due to a bug somewhere in mono. Usually moving stuff around into DATA nodes (or breaking them up into smaller chunks) works around it. If I'm ever able to reliably reproduce it with a simple test case I'll see if I can change my code to work around the issue... but it doesn't come up very often and the expression handling logic is very complicated... so I don't want to mess around with it too much.

Link to comment
Share on other sites

If I'm trying to grab a a bunch of moons, then exclude a list of planets. I can exclude 1 just fine but not the whole list.

I thought it'd be a simple comma separated. Also not sure if this is the best way to do it anyway. Or should I put something else in the Where function?

AllBodies().Where(cb => cb.HasSurface() && cb.IsMoon()).Exclude(Kerbin,Aptur,Serran,Mun)

Link to comment
Share on other sites

You're close, see the List methods. What you want is:

[COLOR=#333333]AllBodies().Where(cb => cb.HasSurface() && cb.IsMoon()).Exclude[/COLOR][COLOR=#ff0000]All[/COLOR][COLOR=#333333]([/COLOR][COLOR=#ff0000][[/COLOR][COLOR=#333333]Kerbin,Aptur,Serran,Mun[/COLOR][COLOR=#ff0000]][/COLOR][COLOR=#333333])[/COLOR]

This should also work:

[COLOR=#333333]AllBodies().Where(cb => cb.HasSurface() && cb.IsMoon() && cb.Parent() != Sonnah)[/COLOR]

Link to comment
Share on other sites

Hey Nightingale, I recently started work on a mod to add in a new resource system and just got that all working today but now would like to add some contracts to go with it, ...as you can see, this is where you come in... ;). I basically want it to be like an ISRU contract only you mine the new resource and have to recover on Kerbin every time. I got the contract mostly working, I just can't find the parameter to mine fresh resources. And then maybe a parameter to have "x" amount of the resource on the craft once back on Kerbin would be nice too. Hopefully I just missed them or something simple. Thank you in advance for any help.

[h=1][/h]

Link to comment
Share on other sites

Hi nightingale,

I got tired of RemoteTech getting all of the contract love, so I've put together a contract pack for AntennaRange. It gives people contracts to put relay satellites in orbit around all of the bodies in the solar system (planet packs and everything), plus a few extra high-orbit relays around gas giants and such.

Link to comment
Share on other sites

Hi nightingale,

I got tired of RemoteTech getting all of the contract love, so I've put together a contract pack for AntennaRange. It gives people contracts to put relay satellites in orbit around all of the bodies in the solar system (planet packs and everything), plus a few extra high-orbit relays around gas giants and such.

Awesome, I'm always happy to see more contract packs, congrats on the release!

Link to comment
Share on other sites

Still an awesome job Nighingale!

Each time I return to work on BeyondMun (Contract Campaign) there a new CC releases. I would dream of beeing such dedicated to a project! :)

Thanks, glad to see you're still working on that campaign!.

Link to comment
Share on other sites

Hello!

I'm trying to get the new MissionTimer parameter to work... Is there any examples of people using it yet?

here's what I have so far:

ucixJzZ.png


// Requires Contract Configurator. Fourm link http://forum.kerbalspaceprogram.com/threads/101604
// Adds a Contract to recover a prebuilt SSTO spaceplane from Asclepius.
//

CONTRACT_TYPE
{
name = KesslerRun
title = The Kessler Run
description = Can your baby do the Kessler run in under 12 mins?
synopsis = We want you to Fly the Kessler Run
completedMessage = You could probably outrun a bulk cruiser in that.

// Agent (agency). If not populated, a random agent will be selected.
//agent = Integrated Integrals

cancellable = true
declinable = true
targetBody = Asclepius
maxCompletions = 0
maxSimultaneous = 1

// Contract rewards
rewardScience = 10.0
rewardReputation = 25.0
rewardFunds = 50000.0
failureReputation = 10.0
failureFunds = 5000.0
advanceFunds = 5000.0

BEHAVIOUR
{
name = WaypointGenerator
type = WaypointGenerator

WAYPOINT
{

name = SKessler

// The parameter that must be completed before the waypoint becomes
// visible. If not specified, the waypoint is always visible.
parameter = Kessler1strt
targetBody = Asclepius
icon = balloon

// The altitude of the waypoint above the terrain. Note that an
// altitude of 0.0 means "on the ground". If not specified, uses a
// A random value between 0.0 and the atmosphere ceiling (which is zero
// if there's no atmosphere).
altitude = 100
// The coordinates.
latitude = -18.7265875306472
longitude = -53.9731235534922
}
WAYPOINT
{
name = NKessler
targetBody = Asclepius
icon = balloon
altitude = 100
// The coordinates.
latitude = -3.75831542364648
longitude = -79.153185595674
}
}

PARAMETER
{
name = KessTimer
type = MissionTimer
startCriteria = PARAMETER_COMPLETION
startParameter = Kessler1strt
endCriteria = PARAMETER_COMPLETION
endParameter = Kessler1end
}

//
PARAMETER
{
name = Kessler1strt
type = VisitWaypoint
// Distance tolerance to be considered at the waypoint.
//
// Type: double
// Required: No (defaulted)
// Default: 500.0 (if on the surface).
// / 5.0 (if not on the surface).
//
distance = 500.0

// Whether the waypoint should get automatically hidden after completing
// the contract objective.
hideOnCompletion = true

// Text to use for the parameter
//
// Type: string
// Required: No (defaulted)
// Default: Location: <waypoint>
//
title = Kessler Run Start
}
//
PARAMETER
{
name = Kessler1end
type = VisitWaypoint
distance = 700.0
hideOnCompletion = false
title = Kessler Run Finish
}


REQUIREMENT
{
name = OrbitAsc
type = Orbit

// Target body, defaulted from the contract if not supplied.
//
// Type: CelestialBody
// Required: No (defaulted)
//
targetBody = Asclepius
}
}

My plan is to have a contract to get to point A, start the timer, get to point B, and end the mission. Eventually I want to add persistant data storage so that a "fastest time" gets recorded. (and ultimately spawn in an "easter egg" vessel if the contract is completed in X amount of time. Any help is apprecieated :)

I usually just keep trying 1000000 times until I get it to work, but I thought it might help to ask around :)

Link to comment
Share on other sites

Hello!

I'm trying to get the new MissionTimer parameter to work... Is there any examples of people using it yet?

here's what I have so far:

http://i.imgur.com/ucixJzZ.png


// Requires Contract Configurator. Fourm link http://forum.kerbalspaceprogram.com/threads/101604
// Adds a Contract to recover a prebuilt SSTO spaceplane from Asclepius.
//

CONTRACT_TYPE
{
name = KesslerRun
title = The Kessler Run
description = Can your baby do the Kessler run in under 12 mins?
synopsis = We want you to Fly the Kessler Run
completedMessage = You could probably outrun a bulk cruiser in that.

// Agent (agency). If not populated, a random agent will be selected.
//agent = Integrated Integrals

cancellable = true
declinable = true
targetBody = Asclepius
maxCompletions = 0
maxSimultaneous = 1

// Contract rewards
rewardScience = 10.0
rewardReputation = 25.0
rewardFunds = 50000.0
failureReputation = 10.0
failureFunds = 5000.0
advanceFunds = 5000.0

BEHAVIOUR
{
name = WaypointGenerator
type = WaypointGenerator

WAYPOINT
{

name = SKessler

// The parameter that must be completed before the waypoint becomes
// visible. If not specified, the waypoint is always visible.
parameter = Kessler1strt
targetBody = Asclepius
icon = balloon

// The altitude of the waypoint above the terrain. Note that an
// altitude of 0.0 means "on the ground". If not specified, uses a
// A random value between 0.0 and the atmosphere ceiling (which is zero
// if there's no atmosphere).
altitude = 100
// The coordinates.
latitude = -18.7265875306472
longitude = -53.9731235534922
}
WAYPOINT
{
name = NKessler
targetBody = Asclepius
icon = balloon
altitude = 100
// The coordinates.
latitude = -3.75831542364648
longitude = -79.153185595674
}
}

PARAMETER
{
name = KessTimer
type = MissionTimer
startCriteria = PARAMETER_COMPLETION
startParameter = Kessler1strt
endCriteria = PARAMETER_COMPLETION
endParameter = Kessler1end
}

//
PARAMETER
{
name = Kessler1strt
type = VisitWaypoint
// Distance tolerance to be considered at the waypoint.
//
// Type: double
// Required: No (defaulted)
// Default: 500.0 (if on the surface).
// / 5.0 (if not on the surface).
//
distance = 500.0

// Whether the waypoint should get automatically hidden after completing
// the contract objective.
hideOnCompletion = true

// Text to use for the parameter
//
// Type: string
// Required: No (defaulted)
// Default: Location: <waypoint>
//
title = Kessler Run Start
}
//
PARAMETER
{
name = Kessler1end
type = VisitWaypoint
distance = 700.0
hideOnCompletion = false
title = Kessler Run Finish
}


REQUIREMENT
{
name = OrbitAsc
type = Orbit

// Target body, defaulted from the contract if not supplied.
//
// Type: CelestialBody
// Required: No (defaulted)
//
targetBody = Asclepius
}
}

My plan is to have a contract to get to point A, start the timer, get to point B, and end the mission. Eventually I want to add persistant data storage so that a "fastest time" gets recorded. (and ultimately spawn in an "easter egg" vessel if the contract is completed in X amount of time. Any help is apprecieated :)

I usually just keep trying 1000000 times until I get it to work, but I thought it might help to ask around :)

You're probably the first one using it, since it's so new. It looks fine the way you have it set up, but your second VisitWaypoint should have index=1 (right now both the start and end look at the same waypoint).

If you have other issues with the MissionTimer let me know - it could always be a bug.

Link to comment
Share on other sites

ive done some more fiddling... it keeps saying


[ERROR] ContractConfigurator.ParameterFactory.CONTRACT_TYPE'KesslerRun',PARAMETER 'KessTimer' of type 'MissionTimer': No ParameterFactory has been registered for type 'MissionTimer'.

ParameterFactory? :huh:

Edited by MrChumley
Link to comment
Share on other sites

ive done some more fiddling... it keeps saying


[ERROR] ContractConfigurator.ParameterFactory.CONTRACT_TYPE'KesslerRun',PARAMETER 'KessTimer' of type 'MissionTimer': No ParameterFactory has been registered for type 'MissionTimer'.

ParameterFactory? :huh:

Sounds like you're not on the latest version.

A parameter factory is a factory where parameters are made!

EDIT: That being said, the error isn't all that user friendly, I'll clean that up.

EDIT2: So sorry, I just realized you are WAY ahead of the game, since I am just releasing the changes for MissionTimer right... NOW!

Edited by nightingale
Link to comment
Share on other sites

New release, bug fixes and a few small changes - download now!

Contract Configurator 1.5.5

  • New MissionTimer parameter for displaying a count-up timer (use it for challenges!).
  • New functions/methods related to contract multipliers - ContractMultiplier(), CelestialBody.Multiplier() ContractPrestige.Multiplier().
  • Made contract deadline independent of targetBody multiplier (thanks NathanKell).
  • Correctly update Contracts Window Plus when contract state + titles changes at the same time.
  • Improved error handling in parameter generation for unexpected scenarios - fixes New Horizons issues (thanks kp0llux & kingoftheinternet).

Link to comment
Share on other sites

FYI - CKAN is throwing errors with this update... posted to CKAN thread here: http://forum.kerbalspaceprogram.com/threads/100067-The-Comprehensive-Kerbal-Archive-Network-%28CKAN%29-Package-Manager-v1-10-3-16-Jul-2015?p=2103861&viewfull=1#post2103861

Update: It's fixed. :)

Edited by eightiesboi
Updated
Link to comment
Share on other sites

Thanks for the tip, everything looks good on my side, it's either a CKAN issue or a CKAN issue with your install. Hopefully the guys on the CKAN thread will be able to sort it out. :)

Link to comment
Share on other sites

Is there anyway to ignore the celestial body modifier to get a static reward value?

Yes, just introduced in the last release! To get a value of 10000 regardless of the body modifier:

rewardFunds = 10000 / @targetBody.[COLOR=#333333]Multiplier()[/COLOR]

And if you also want to ignore the contract prestige multiplier:

rewardFunds = 10000 / [COLOR=#3E3E3E]ContractMultiplier[/COLOR][COLOR=#333333]()[/COLOR]

Link to comment
Share on other sites

Cool thanks! I was not aware there was a prestige modifier. Is there some documentation on that somewhere? I haven't seen anything while searching.

~Edit - You can disregard that. I did some testing and it appears that going from Trivial to Exceptional nets you about 50% more rewards. Unless there is something more too it I'm struggling to see why Squad put it in the game.

Is there a way to select a Target body excluding ones that have been orbited, flown by or landed on?

I figured I could do something like this:

AllBodies().Where(cb => cb.HasSurface() && cb.xyz)

But I'm not seeing a node under CelestialBody Type that would really fit. I mean there is the return a list of orbited or landed bodies. But I was hoping to be able to use something like the FlyBy requirement.

~Edit - Another question (sorry!). I'm looking at CelestialBody Type and I don't see any method that returns the space high border. Is there a way to retrieve that that I am missing?

Edited by Nori
Link to comment
Share on other sites

Cool thanks! I was not aware there was a prestige modifier. Is there some documentation on that somewhere? I haven't seen anything while searching.

~Edit - You can disregard that. I did some testing and it appears that going from Trivial to Exceptional nets you about 50% more rewards. Unless there is something more too it I'm struggling to see why Squad put it in the game.

Correct, I documented them here. They are 1.0, 1.25 and 1.5. It makes more sense for non-Contract Configurator contracts as making a single contract type is a much bigger investment, so it pays to have it work differently for the different prestige levels.

Is there a way to select a Target body excluding ones that have been orbited, flown by or landed on?

I figured I could do something like this:

AllBodies().Where(cb => cb.HasSurface() && cb.xyz)

But I'm not seeing a node under CelestialBody Type that would really fit. I mean there is the return a list of orbited or landed bodies. But I was hoping to be able to use something like the FlyBy requirement.

It's something that I've been meaning to get in for a little while now, right now it's fairly limited in what you can do. I've raised [#279], although I'm not sure I'll be able to get in for 1.6.0, so I've targeted 1.6.1 (or so). Please comment there if there's some specific thing you need beyond what you've mentioned in the thread here. If it's reasonably small I may be able to push it into the 1.6.0 release instead.

EDIT: Didn't answer this part:

~Edit - Another question (sorry!). I'm looking at CelestialBody Type and I don't see any method that returns the space high border. Is there a way to retrieve that that I am missing?

Don't have it, I'll add in 1.6.0 - [#280].

Edited by nightingale
Missed a question
Link to comment
Share on other sites

Cool! No that looks like it would be perfect. Can't think of anything else at this time. Oh, except, is there a way to check if a vessel currently orbits a celestial body?

Link to comment
Share on other sites

Cool! No that looks like it would be perfect. Can't think of anything else at this time. Oh, except, is there a way to check if a vessel currently orbits a celestial body?

Something along these lines:


vessel = SomeVessel()
targetBody = SomeBody()
vesselOrbitsBody = @vessel.CelestialBody() == @targetBody

- - - Updated - - -

In unrelated news...

BDArmory players rejoice - Volwen has a new military contract pack out! Kerbin on Fire Military Contract Pack includes a bunch of military contracts, including including aerial combat missions! Check it out!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...