Jump to content

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


nightingale

Recommended Posts

4 hours ago, Mark Kerbin said:

Well guess I’ll be figuring out how to make one. :wink:

Sure, I'd love a pull request. ;)

I'll likely be looking at doing some dev this week - there's a couple issues on the tracker that I need to look at (including one that @inigma has been patiently waiting for).  If you raise an enhancement I may be able to get something for you, I'll likely just enhance SpawnKerbal with an option to spawn to the AC instead of in-world.

Link to comment
Share on other sites

I’ll investigate a bit and then give you the beginings of a pull request.

 

Edit

Actually, not sure if I know enough to make a new behavior. I would greatly appreciate if you could just tack on an “add to roster” option to spawnkerbal.

In the mean time I have a work around for what I wanted to do with it, so don’t feel like I am waiting on you.

(Yeah I’m being vague to avoid over promising on Kerbal Academy’s next update)

 

Sorry for any spelling weirdness, school WiFi  and autocorrect are not a good combo.

Edited by Mark Kerbin
Link to comment
Share on other sites

Not sure if this is a bug or not.

The following line:

maxAltitude = @/targetBody1.IsSun() ? 113549713200 : @/targetBody1 == Gilly ? 16000 : @/targetBody1.SpaceAltitudeThreshold()

Errors when Gilly doesn't exist in a system.  This happens in GPP, and others (I've only tested this in GPP).  Changing it to the following works:

%maxAltitude = @/targetBody1.IsSun() ? 113549713200 : @/targetBody1.SpaceAltitudeThreshold()

For now, I've worked around this by using a MM script to replace the line if Kopernicus is installed, but it is an inelegant way to do this

Error below:


ArgumentException: 'Gilly' is not a valid CelestialBody.
  at ContractConfigurator.ConfigNodeUtil.ParseCelestialBodyValue (System.String celestialName) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ExpressionParser.CelestialBodyParser.ParseIdentifier (ContractConfigurator.ExpressionParser.Token token) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseVarOrIdentifier (ContractConfigurator.ExpressionParser.Token token) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ExpressionParser.ExpressionParser`1[CelestialBody].ParseSimpleStatement[CelestialBody] () [0x00000] in <filename unknown>:0 
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ExpressionParser.ExpressionParser`1[System.Double].ParseStatement[Double] () [0x00000] in <filename unknown>:0 
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ExpressionParser.ExpressionParser`1[System.Double].ParseStatement[Double] () [0x00000] in <filename unknown>:0 
Rethrow as Exception: Error parsing statement.
Error occurred near '*':
@/targetBody1.IsSun() ? 113549713200 : @/targetBody1 == Gilly ? 16000 : @/targetBody1.SpaceAltitudeThreshold()
.......................* <-- HERE
  at ContractConfigurator.ExpressionParser.ExpressionParser`1[System.Double].ParseExpression (System.String key, System.String expression, ContractConfigurator.ExpressionParser.DataNode dataNode) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ConfigNodeUtil.ParseSingleValue[Double] (System.String key, System.String stringValue, Boolean allowExpression) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ConfigNodeUtil.ParseValue[Double] (.ConfigNode configNode, System.String key, Boolean allowExpression) [0x00000] in <filename unknown>:0 
  at ContractConfigurator.ConfigNodeUtil.ParseValue[Double] (.ConfigNode configNode, System.String key, System.Action`1 setter, IContractConfiguratorFactory obj, Double defaultValue, System.Func`2 validation) [0x00000] in <filename unknown>:0 
UnityEngine.DebugLogHandler:Internal_LogException(Exception, Object)
UnityEngine.DebugLogHandler:LogException(Exception, Object)
UnityEngine.Logger:LogException(Exception, Object)
UnityEngine.Debug:LogException(Exception)
ContractConfigurator.LoggingUtil:LogException(Exception)
ContractConfigurator.ConfigNodeUtil:ParseValue(ConfigNode, String, Action`1, IContractConfiguratorFactory, Double, Func`2)
ContractConfigurator.OrbitFactory:Load(ConfigNode)
ContractConfigurator.ParameterFactory:GenerateParameterFactory(ConfigNode, ContractType, ParameterFactory&, ParameterFactory)
ContractConfigurator.ParameterFactory:GenerateParameterFactory(ConfigNode, ContractType, ParameterFactory&, ParameterFactory)
ContractConfigurator.ContractType:Load(ConfigNode)
ContractConfigurator.<LoadContractTypeConfig>d__29:MoveNext()
ContractConfigurator.<FinalizeContractTypeLoad>d__28:MoveNext()
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
 
(Filename:  Line: -1)

 

Link to comment
Share on other sites

@linuxgurugamer - Not a bug, there isn't very good handling for constants sourced from things like CelestialBodies that may not exist in some cases.  ModuleManager patch, something based on min body radius or the space altitude threshold are going to be your best bets.

Trying to think if there's a good alternative to fix it - if I let it resolve to null if the CB doesn't exist, then you lose out on potentially valuable error checking.

Link to comment
Share on other sites

35 minutes ago, nightingale said:

@linuxgurugamer - Not a bug, there isn't very good handling for constants sourced from things like CelestialBodies that may not exist in some cases.  ModuleManager patch, something based on min body radius or the space altitude threshold are going to be your best bets.

Trying to think if there's a good alternative to fix it - if I let it resolve to null if the CB doesn't exist, then you lose out on potentially valuable error checking.

How about a generic CB, which is used if it doesn’t exist?  Not sure if it will work, but it’s an idea.

Link to comment
Share on other sites

On 5/12/2018 at 7:15 AM, Gordon Dry said:

After I enabled it and went back to main menu and loaded the save I immediately got nearly a dozen of rescue contracts available.

Odd. I can only guess my mods are conflicting or there is something in my savegames preventing it. Both were started on older versions. (1.4.0?)

Maybe I'll try with a new game to see if it works then.

Link to comment
Share on other sites

@linuxgurugamer - I spent some time thinking about your issue and I think I'm going to change it to just return null on a non-match.  There's so few cases where the "error handling" is helpful and so many cases where you need flexibility due to planet packs that I think it'll just work better this way.  So expect that to get fixed for you in the next release.

Link to comment
Share on other sites

7 hours ago, nightingale said:

@linuxgurugamer - I spent some time thinking about your issue and I think I'm going to change it to just return null on a non-match.  There's so few cases where the "error handling" is helpful and so many cases where you need flexibility due to planet packs that I think it'll just work better this way.  So expect that to get fixed for you in the next release.

Actually not my issue (originally), this is in the Bases and Stations pack.  However, sice it is currently unmaintained, I may adopt it.

 

Link to comment
Share on other sites

46 minutes ago, goblinsrus4 said:

help i have contract configurator v1.25.0 on ksp 1.4.3 it works ok but it not showing textures just a white background at mission control and tracking centre  

I'm unaware of issues with 1.4.3, but I haven't tested extensively.  I'd need a KSP.log to be able to comment any further though.

Link to comment
Share on other sites

To increase the number of contracts you can accept, you have to upgrade the Mission Control building. The starting level gives you 2 contracts max, the second level gives you 7 contracts (I think) and the final level gives you unlimited contracts. For clarity, just in case you don't already know, to upgrade any of the buildings of the Space Centre simply right-click on them to bring up their menu.

Link to comment
Share on other sites

2 hours ago, IntoSpaceAgain said:

To increase the number of contracts you can accept, you have to upgrade the Mission Control building. The starting level gives you 2 contracts max, the second level gives you 7 contracts (I think) and the final level gives you unlimited contracts. For clarity, just in case you don't already know, to upgrade any of the buildings of the Space Centre simply right-click on them to bring up their menu.

I believe there are also contract difficulty limits, i.e. you can only have so many of each of the three contract difficulty levels, even when the MC is fully upgraded, effectively limiting the total number of contracts.  In my case, that's 12, 9 and 6 for trivial, significant and exceptional, respectively.

He may be asking how to increase those limits.  Maybe this thread can help.

 

Link to comment
Share on other sites

I'm working on a contract which will spawn kerbals of a specific name, but it doesn't seem to want to work.

Here is the pertinent part of the contract:

        BEHAVIOUR
        {
                name = SpawnKerbal
                type = SpawnKerbal
                KERBAL
                {
                        kerbal = NewKerbal(Male,"Pilot", "Norman Thuot")
                        kerbalType = Crew
                        owned = true
                        addToRoster = True
                        targetBody = HomeWorld()
                        lat = 10.5959
                        lon = 239.8044
                        alt = 0
                        heading = 180.0
                }
		}

And here is the error I am getting in the log when it is called:

[EXC 18:44:11.553] MissingMethodException: Method not found: 'ProtoCrewMember.ChangeName'.
        ContractConfigurator.Behaviour.SpawnKerbal.OnAccepted ()
        ContractConfigurator.ContractBehaviour.Accept ()
        ContractConfigurator.ConfiguredContract.OnAccepted ()
        Contracts.Contract.SetState (State newState)
        Contracts.Contract.Accept ()
        ContractConfigurator.Util.MissionControlUI.OnClickAccept ()
        UnityEngine.Events.InvokableCall.Invoke (System.Object[] args)
        UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters)
        UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters)
        UnityEngine.Events.UnityEvent.Invoke ()
        UnityEngine.UI.Button.Press ()
        UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData)
        UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData)
        UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor)
        UnityEngine.EventSystems.EventSystem:Update()

I am running KSP.x86_64 version 3.1.1 and ContractConfigurator 1.24.4.0 

I tried running the SpawnKerbal behavior detailed on the wiki https://github.com/jrossignol/ContractConfigurator/wiki/SpawnKerbal-Behaviour
but that won't even load the contract to run.

Suggestions, pointers, questions? What am I missing in how to do this?

Link to comment
Share on other sites

On 5/2/2018 at 10:03 PM, nightingale said:

@inigma - I'll have to play around with it, but won't have time until at least the weekend.  If you have a suggestion as to what you think would make sense syntax-wise feel free to raise the github issue.

@theonegalen - It's pretty much as @Ger_space says when it comes to the KK integration.  It looks like I never added the documentation when I pulled that stuff in from AlphaAsh though - I'll have to remember to do that.  For the moment you'll have to either read the code yourself or use Kerbin Side Jobs or Side-GAP as an example.

I just saw CKAN updated to show CC 1.25 compatible with KSP 1.4.3? Is this confirmed?

Link to comment
Share on other sites

@Kematia - It's in the difficulty settings, there's a global multiplier.

@CT96B - You'll need to be running KSP 1.4.x (ideally 1.4.3).  I don't know what 3.1.1 is, probably 1.1.3, but either way you'll definitely need to be on the latest.

@inigma - Officially no, but I didn't expect it to take so long to get my release out.  The existing version seems to run fine against 1.4.3, but I always want to at least get a recompile in because there's historically always been *something* wrong.  I expected CKAN to use the version file that is part of the tarball, but looks like it's all too happy to go to GitHub where I've made updates.  I gave up on figuring out why CKAN does certain things long ago. ;)

Link to comment
Share on other sites

Sorry @nightingale - dyslexia strikes again. I meant 1.3.1

Unfortunately, for other mods I want to run I'm stuck at no higher than 1.3.1. I'm willing to run 1.4.x to debug the cfg. I will setup and try that this weekend - but the documentation to the mod and the mod itself don't seem to agree on SpawnKerbal. I'm not asking anyone to fix it - I'm asking how it's supposed to work without having to reverse the code to make it work. 

 

From the Sample Code on the wiki:

BEHAVIOUR
{
    name = SpawnKerbal
    type = SpawnKerbal
    KERBAL
    {
        kerbal = NewKerbal("Engineer")
        name = Kerbediah Kerman	//variable 'name' not known, ignoring.
        gender = Female
        kerbalType = Unowned
        owned = true
        addToRoster = true
        targetBody = Kerbin
        lat = 10.595910968977
        lon = 239.804476675472
        alt = 387.929475510377
        heading = 180.0

    }
}

This generates the following exception:


[EXC 16:28:15.827] ArgumentException: Expected ',' or ')', got: end of statement
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].GetCalledFunction (System.String functionName, Function& selectedMethod, Boolean isFunction)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[ContractConfigurator.Kerbal].ParseMethod[Kerbal] (ContractConfigurator.ExpressionParser.Token token, ContractConfigurator.Kerbal obj, Boolean isFunction)
	Rethrow as Exception: Error parsing statement.
	Error occurred near '*':
	NewKerbal("Engineer")
	..........* <-- HERE
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseExpression (System.String key, System.String expression, ContractConfigurator.ExpressionParser.DataNode dataNode)
	ContractConfigurator.ConfigNodeUtil.ParseSingleValue[Kerbal] (System.String key, System.String stringValue, Boolean allowExpression)
	ContractConfigurator.ConfigNodeUtil.ParseValue[Kerbal] (.ConfigNode configNode, System.String key, Boolean allowExpression)
	ContractConfigurator.ConfigNodeUtil.ParseValue[Kerbal] (.ConfigNode configNode, System.String key, System.Action`1 setter, IContractConfiguratorFactory obj, ContractConfigurator.Kerbal defaultValue, System.Func`2 validation)
	UnityEngine.Debug:LogException(Exception)
	ContractConfigurator.LoggingUtil:LogException(Exception)
	ContractConfigurator.ConfigNodeUtil:ParseValue(ConfigNode, String, Action`1, IContractConfiguratorFactory, Kerbal, Func`2)
	ContractConfigurator.ConfigNodeUtil:ParseValue(ConfigNode, String, Action`1, IContractConfiguratorFactory)
	ContractConfigurator.Behaviour.SpawnKerbal:Create(ConfigNode, SpawnKerbalFactory)
	ContractConfigurator.Behaviour.SpawnKerbalFactory:Load(ConfigNode)
	ContractConfigurator.BehaviourFactory:GenerateBehaviourFactory(ConfigNode, ContractType, BehaviourFactory&)
	ContractConfigurator.ContractType:Load(ConfigNode)
	ContractConfigurator.<LoadContractTypeConfig>d__30:MoveNext()
	ContractConfigurator.<FinalizeContractTypeLoad>d__29:MoveNext()
	UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

So CLEARLY the SpawnKerbal function does not work as advertised. By iterative effort I was able to get it to at least stop throwing an exception when trying to parse in the contract, but it still won't execute the contract without the previously listed exception. The wiki page in question hasn't been updated since 2016 - so regardless if I'm running 1.3.1 from 2017 or 1.4.x from 2018, it's not working. I am 100% certain am doing something wrong in my config, but absent some working documentation I am left with two options: Ask, or reverse engineer the code myself. I asked. 

Link to comment
Share on other sites

For the record, here is my whole contract:

CONTRACT_TYPE
{
	name = M2
	group = NASARecruits
	title = M2
	description = The Aggregate 3 (M1) was the third in a series of ballistic missiles designed and developed by Wernher von Braun in 1937 under the leadership of Dr. Walter Robert Dornberger, at Kummersdorf south of Berlin.
	synopsis = Launch the M1 ballistic missile
	completedMessage = Mission Success!
	agent = NASA
	minExpiry = 1
	maxExpiry = 30
	deadline = 70
	prestige = Trivial
	targetBody = HomeWorld()
	maxCompletions = 1
	rewardScience = 2500
	rewardReputation = 25
	rewardFunds = 7500
	advanceFunds = 10000
	
	PARAMETER
	{
		name = M2
		type = VesselParameterGroup

		PARAMETER
		{
			name = NewVessel
			type = NewVessel
			hidden = true
		}

		PARAMETER 
		{
			name = Crewmembers
			type = HasCrew
			minCrew = 0
			maxCrew = 1
		}
		
		PARAMETER
		{
			name = ReachState
			type = ReachState
			situation = FLYING
		}
	}
	BEHAVIOUR
	{
		name = SpawnKerbal
		type = SpawnKerbal
	
		KERBAL
		{
			kerbal = NewKerbal("Engineer")
			name = Kerbediah Kerman
			gender = Female
			kerbalType = Unowned
			owned = true
			addToRoster = true
			targetBody = Kerbin
			lat = 10.595910968977
			lon = 239.804476675472
			alt = 387.929475510377
			heading = 180.0
		}
	}
}

which is itself mostly a copy from somewhere else just trying to make this behaviour work.

And here is the full output of that contract import:

[LOG 18:50:12.071] [INFO] ContractConfigurator.ContractType: Loading CONTRACT_TYPE: 'M2'
[ERR 18:50:12.076] ContractConfigurator.Behaviour.SpawnKerbalFactory: CONTRACT_TYPE 'M2', BEHAVIOUR 'Kerbediah Kerman' of type 'SpawnKerbal: Error parsing kerbal

[EXC 18:50:12.187] DataStoreCastException: Cannot cast from System.String to ProtoCrewMember+Gender.
	ContractConfigurator.ExpressionParser.ExpressionParser`1[System.String].ConvertType[Gender] (System.String value)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[System.String].ParseStatement[Gender] (System.String lval)
	Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
	System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)
	System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[ProtoCrewMember+Gender].ParseStatement[Gender] ()
	Rethrow as DataStoreCastException: Cannot cast from System.String to ProtoCrewMember+Gender.
	ContractConfigurator.ExpressionParser.ExpressionParser`1[ProtoCrewMember+Gender].ParseStatement[Gender] ()
	Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
	System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)
	System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].GetCalledFunction (System.String functionName, Function& selectedMethod, Boolean isFunction)
	Rethrow as DataStoreCastException: Cannot cast from System.String to ProtoCrewMember+Gender.
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].GetCalledFunction (System.String functionName, Function& selectedMethod, Boolean isFunction)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[System.String].ParseMethod[String] (ContractConfigurator.ExpressionParser.Token token, System.String obj, Boolean isFunction)
	Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
	System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)
	System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[ContractConfigurator.Kerbal].ParseStatement[Kerbal] ()
	Rethrow as DataStoreCastException: Cannot cast from System.String to ProtoCrewMember+Gender.
	ContractConfigurator.ExpressionParser.ExpressionParser`1[ContractConfigurator.Kerbal].ParseStatement[Kerbal] ()
	Rethrow as Exception: Error parsing statement.
	Error occurred near '*':
	NewKerbal("Engineer")
	....................* <-- HERE
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseExpression (System.String key, System.String expression, ContractConfigurator.ExpressionParser.DataNode dataNode)
	ContractConfigurator.ConfigNodeUtil.ParseSingleValue[Kerbal] (System.String key, System.String stringValue, Boolean allowExpression)
	ContractConfigurator.ConfigNodeUtil.ParseValue[Kerbal] (.ConfigNode configNode, System.String key, Boolean allowExpression)
	ContractConfigurator.ConfigNodeUtil.ParseValue[Kerbal] (.ConfigNode configNode, System.String key, System.Action`1 setter, IContractConfiguratorFactory obj, ContractConfigurator.Kerbal defaultValue, System.Func`2 validation)
	UnityEngine.Debug:LogException(Exception)
	ContractConfigurator.LoggingUtil:LogException(Exception)
	ContractConfigurator.ConfigNodeUtil:ParseValue(ConfigNode, String, Action`1, IContractConfiguratorFactory, Kerbal, Func`2)
	ContractConfigurator.ConfigNodeUtil:ParseValue(ConfigNode, String, Action`1, IContractConfiguratorFactory)
	ContractConfigurator.Behaviour.SpawnKerbal:Create(ConfigNode, SpawnKerbalFactory)
	ContractConfigurator.Behaviour.SpawnKerbalFactory:Load(ConfigNode)
	ContractConfigurator.BehaviourFactory:GenerateBehaviourFactory(ConfigNode, ContractType, BehaviourFactory&)
	ContractConfigurator.ContractType:Load(ConfigNode)
	ContractConfigurator.<LoadContractTypeConfig>d__30:MoveNext()
	ContractConfigurator.<FinalizeContractTypeLoad>d__29:MoveNext()
	UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
[WRN 18:50:12.188] ContractConfigurator.Behaviour.SpawnKerbalFactory: CONTRACT_TYPE 'M2', BEHAVIOUR 'SpawnKerbal' of type 'SpawnKerbal': unexpected attribute 'name' found, ignored.
[WRN 18:50:12.188] ContractConfigurator.Behaviour.SpawnKerbalFactory: CONTRACT_TYPE 'M2', BEHAVIOUR 'SpawnKerbal' of type 'SpawnKerbal': unexpected attribute 'gender' found, ignored.
[WRN 18:50:12.188] ContractConfigurator.ContractType: Errors encountered while trying to load CONTRACT_TYPE 'M2'

 

Link to comment
Share on other sites

Thank you @nightingale! I finally got it to spawn without throwing exceptions.

        BEHAVIOUR
        {
                name = SpawnKerbal
                type = SpawnKerbal
                KERBAL
                {
                        kerbal = NewKerbal(Female, "Kerbediah Kerman", "Engineer")
                        kerbalType = Crew
                        owned = true
                        addToRoster = True
                        targetBody = HomeWorld()
                        pqsCity = KSC
                        pqsOffset = 800, 5, 24
                }
        }

Spawns the kerbal just north of the runway, which for what I'm doing with this is just fine.

 

Now on to figure out some alternate name generation and how to use the persistent datastore... 

Link to comment
Share on other sites

@nightingale

Today I had 2 occasions that manned mission contracts (early career ones) have been fulfilled by probe missions as soon as they have been destroyed in focus (reentry impact for spent upper stage debris).

There was no exception regarding contracts in the log, just the message "Congratulation ..."

Is this known?

Link to comment
Share on other sites

So, I've been using Contract Configurator for quite a while now but finally got around to picking up a whole slew of contract packs, which are great so far. However, it's filled up my contract list to the point where a lot of the vanilla (but important) contracts aren't appearing very often. It's my understanding that adjusting the slider in the difficulty setting for CC (the multiplier slider) should increase the amount of offered contracts that show up, but I'm not seeing any change at all, one way or another... Am I missing something?

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...