Jump to content

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


nightingale

Recommended Posts

After doing some more editing, I think I've figured most of the things out, however there's something that I find odd and I don't know why CC is working this way:

I have an int DATA node in the Groups.cfg for a funds multiplier like this:

DATA
{
	type = int
	title = Fund Modifier
	fundModifier = 1
}

and in a CONTRACT_TYPE, I have this:

advanceFunds = 10000 * @localMod
rewardFunds = 5000 * @localMod

DATA
{
	type = int
	localMod = $fundModifier
}

BEHAVIOUR
{
	name = NoFailureProfit
	type = Expression
	
	CONTRACT_COMPLETED_SUCCESS
	{
		$fundModifier = 0
	}
}

Now, my intention with this is for Contract 1 to be completed once with a >0 advance and reward fund. And imo this should, in theory work. However, CC seems to register localMod as 0, even though $fundModifier hasn't been, or shouldn't've been affected by the BEHAVIOUR node.

Is there any way to fix this problem? Any alternate solution I should use?

Link to comment
Share on other sites

54 minutes ago, Teykn said:

however there's something that I find odd and I don't know why CC is working this way:

Data from a group config is accessed by @[groupname]:[variable] in an expression. In your example if your group name was "MyGroup" your variable in a contract would be @MyGroup:fundModifier. Group data is good for static values that do not change that can be shared with all contracts offered by the group.  

The $fundModifier is a variable in the persistent data store that you are referencing in your contract. If not previously set, the default value of 0 is set for numbers and whatever the default value is for other data types like strings etc. 

Your initial contract should set values in the data store to what you want. In the example below I set the value I want in my first contract in a series when the contract is offered. Subsequent contracts can then read this value and then update it on success of failure. It is a good idea to prepend some kind of mod identifier on your persistent data store variables (I use "ksrgap") because it is accessible by all contracts from any pack. If some other mod uses "fundModifier" it will interfere with yours.   

// Persistent Storage routines
	BEHAVIOUR
	{
		name = Expression
		type = Expression

		CONTRACT_OFFERED
		{
			type = int		
			ksrgapFlightProgress = -2
		}		
		
		// On success set the progress counter
		CONTRACT_COMPLETED_SUCCESS
		{
			type = int
			ksrgapFlightProgress = $ksrgapFlightProgress + 1
		}
	}

You can see the contents of the persistent data store in your games save persistent.sfs file. Open it with a text editor and search for Persistent Data Store and you can see all the values that are set there.

Link to comment
Share on other sites

  • 2 weeks later...

Hi, I got this error:

[EXC 21:28:12.726] NullReferenceException: Object reference not set to an instance of an object
	ContractConfigurator.ExpressionParser.ExperienceTraitParser.EQ (Experience.ExperienceTrait a, Experience.ExperienceTrait b) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ApplyBooleanOperator (T lval, System.String op, T rval) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ApplyOperator[TResult] (T lval, System.String op, T rval) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseOperation[TResult] (T lval, System.String op) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseStatement[TResult] (T lval) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseStatementInner[TResult] () (at <ef0243a06f2841fe9bf57034a334902e>:0)
	System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
	System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseStatement[TResult] () (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ListExpressionParser`1[T].ParseWhereMethod[TResult] (System.Collections.Generic.List`1[T] obj) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ListExpressionParser`1[T].ParseMethod[TResult] (ContractConfigurator.ExpressionParser.BaseParser+Token token, System.Collections.Generic.List`1[T] obj, System.Boolean isFunction) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
	System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseMethod[TResult] (ContractConfigurator.ExpressionParser.BaseParser+Token token, T obj, System.Boolean isFunction) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].CompleteIdentifierParsing[U] (U value) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
	System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <ad04dee02e7e4a85a1299c7ee81c79f6>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseSpecialIdentifier (ContractConfigurator.ExpressionParser.BaseParser+Token token) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseSimpleStatement[TResult] () (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseStatementInner[TResult] () (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseStatement[TResult] () (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseExpression (System.String key, System.String expression, ContractConfigurator.ExpressionParser.DataNode dataNode) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	Rethrow as Exception: Error parsing statement.
	Error occurred near '*':
	@/targetVessel.Crew().Where(k => k.ExperienceTrait() == "Scientist").Count() > 0
	...................................................................* <-- HERE
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ParseExpression (System.String key, System.String expression, ContractConfigurator.ExpressionParser.DataNode dataNode) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ExpressionParser.ExpressionParser`1[T].ExecuteExpression (System.String key, System.String expression, ContractConfigurator.ExpressionParser.DataNode dataNode) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ConfigNodeUtil.ParseSingleValue[T] (System.String key, System.String stringValue, System.Boolean allowExpression) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ConfigNodeUtil.ParseValue[T] (ConfigNode configNode, System.String key, System.Boolean allowExpression) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	ContractConfigurator.ConfigNodeUtil.ParseValue[T] (ConfigNode configNode, System.String key, System.Action`1[T] setter, ContractConfigurator.IContractConfiguratorFactory obj, T defaultValue, System.Func`2[T,TResult] validation) (at <ef0243a06f2841fe9bf57034a334902e>:0)
	UnityEngine.DebugLogHandler:LogException(Exception, Object)
	ModuleManager.UnityLogHandle.InterceptLogHandler:LogException(Exception, Object)
	UnityEngine.Debug:LogException(Exception)
	ContractConfigurator.LoggingUtil:LogException(Exception)
	ContractConfigurator.ConfigNodeUtil:ParseValue(ConfigNode, String, Action`1, IContractConfiguratorFactory, Boolean, Func`2)
	ContractConfigurator.ConfigNodeUtil:ParseValue(ConfigNode, String, Action`1, IContractConfiguratorFactory, Func`2)
	ContractConfigurator.DeferredLoadUtil:ExecuteLoad(DeferredLoadObject`1)
	System.Reflection.MethodBase:Invoke(Object, Object[])
	ContractConfigurator.<UpdateNonDeterministicValuesIterator>d__31:MoveNext()
	System.Linq.ConcatIterator`1:MoveNext()
	ContractConfigurator.<GenerateContract>d__33:MoveNext()
	ContractConfigurator.<ContractEnumerator>d__32:MoveNext()
	ContractConfigurator.ContractPreLoader:Update()

KSP.log: https://www.dropbox.com/s/t0kmcb5gqugxlqp/KSP.log?dl=0

Link to comment
Share on other sites

1 hour ago, John007qwe said:

Hi, I got this error:

See the attached post. The exception occurs when no rover is deployed, or when a rover without a scientist is deployed. Once there is a rover with a scientist the parse will work correctly and allow the contract to work.  

 

Link to comment
Share on other sites

1 minute ago, Caerfinon said:

See the attached post. The exception occurs when no rover is deployed, or when a rover without a scientist is deployed. Once there is a rover with a scientist the parse will work correctly and allow the contract to work.  

 

Right, so I just ignore it then. Thanks!

Link to comment
Share on other sites

  • 3 weeks later...

How do you change the max of accepted contracts in a given level?

I mean, I want to accept a lot, or even infinite, contracts in all levels, current level is 2, how do I modify the mod files to allow that?

Link to comment
Share on other sites

58 minutes ago, Darks :v said:

How do you change the max of accepted contracts in a given level?

The max number of contracts per level is controlled by upgrades to mission control this can be changed with a Custom Barn Kit config.

The maximum number of contracts that can be accepted of each prestige level can be set in Contract Configurator by the game difficulty settings.  Change the Active Contract Multiplier slider to a value you would like. The default value is 1.0 

  • At slider 8 (maximum value)  it allows 42 trivial, 33 significant, and 24 exceptional contracts at the same time. 

If you want to change the values per Mission Control level use this;

 

Link to comment
Share on other sites

Quote
On 5/4/2021 at 6:34 PM, Caerfinon said:

Change the Active Contract Multiplier slider to a value you would like. The default value is 1.0 

 

I have installed Custom Barn Kit but that boat sailed, the game is on going

 

On 5/4/2021 at 6:34 PM, Caerfinon said:
  • At slider 8 (maximum value)  it allows 42 trivial, 33 significant, and 24 exceptional contracts at the same time. 

 

I know that persistent files in save folder are the current status of the game, so i search that value in persistent.sfs, and use notepad to change that value, specifically in ContractConfiguratorParameters, from 1 to 8

ActiveContractMultiplier = 1 >> ActiveContractMultiplier = 8

 

But nothing changed, values still the default, i enter control station, and only shows max active contracts, in actives label. When i change to All lable, it shows the default values, then i close the game, and reopened persistent.sfs, but value was still 8

 

persistenct,loadmeta contains only values about the game, like science and money
 

Edited by Darks :v
Link to comment
Share on other sites

21 minutes ago, Darks :v said:

so i search that value in persistent.sfs

Why not just change it in the in-game settings?  Press ESC, go into settings, choose difficulty, find the Contract Configurator tab and set the setting there?  

Link to comment
Share on other sites

  • 2 weeks later...

Is it possible that this mod might be causing the new stock missions with 1.11 "add a part to satellite/rover" to fail?

Numerous posts about this bug occurring with 1.1.1 missions, but wondering if all these people have Contract Configurator installed.  I know I do.  The bug goes like this:

Mission = add missing part XYZ to satellite. 

After adding part XYZ, the contract mission does not update with success/completion status.

 

 

 

Link to comment
Share on other sites

2 hours ago, fragtzack said:

Is it possible that this mod might be causing the new stock missions with 1.11 "add a part to satellite/rover" to fail?

I haven't seen any evidence that this is the case.

It seems more likely that stock contract has an issue where it forgets the vesselPersistentId of the ship the repairs are destined for, making the contract to be impossible to complete except from the debug console or editing the persistent.sfs file of the game were it occurs.

The issue as pertaining to satellites is discussed here;

 

Edited by Caerfinon
Link to comment
Share on other sites

Heyo,

Just wondering if there were/are plans on changing how vessels are tracked, if possible, or if it's possible to change how it's tracked via extending nodes like parameters? I discovered recently that, with a vesselParameterGroup with a specific vessel and a time requirement (e.g. stay in orbit for 30d) that CC only tracks it while in flight or in the Tracking Station (i think). I'd like CC to track the vessel (and the contract parameters pertaining to said vessel) across different scenes, but I'm presuming that this functionality hasn't been added due to KSP limitations or something? 

Link to comment
Share on other sites

1 hour ago, Teykn said:

I'd like CC to track the vessel (and the contract parameters pertaining to said vessel) across different scenes

This is possible, but the duration parameter needs to be nested in the VesselParameterGroup. The following example from one of my contracts has a 3 day timer that persists through Scene changes and stays associated with the defined Vessel. 

Spoiler


// The unique vesselID
	DATA
	{
		type = string
		craft = "KSRGAPKGOCampsite"
		hidden = true
	}


// The VesselParameterGroup with the duration timer
	PARAMETER
	{
		name = CampSite
		type = VesselParameterGroup
		title = Create a Camp within 500 meters of the marker  
		define = @/craft
		
		PARAMETER
		{
			Title = in your Rover Camper 
			name = VesselIsType
			type = VesselIsType
			vesselType = Rover
		}
		
		PARAMETER
		{
			name = HasCrewCapacity
			type = HasCrewCapacity
			title = have total crew capacity for 4 kerbals
			minCapacity = 4
			completeInSequence = true
			disableOnStateChange = false
		}

		PARAMETER
		{
			name = HasCrew
			type = HasCrew
			title = have a pilot
			trait = Pilot
			minCrew = 1
			hideChildren = true
			disableOnStateChange = false
		}
	
		
		PARAMETER
		{
			title = Have @/scientistKerbalName on board
			name = HasPassengers
			type = HasPassengers
			kerbal = @/kerbalScientist.ElementAt(0)
		}
	
		PARAMETER
		{
			name = VisitWaypoint
			type = VisitWaypoint
			index = 0
			distance = 500
			showMessages = true
			hideOnCompletion = true
			targetBody = @/targetBody
		}
		
		PARAMETER
		{
			name = ReachState
			type = ReachState
			title = Stop and set up camp
			targetBody = Kerbin
			situation = LANDED
			maxSpeed = 0.0
			hideChildren = true
		}
		
		PARAMETER
		{
			name = CampSite
			type = Duration
			duration = 3d
			preWaitText = Waiting to establish camp 
			waitingText = Camping at site for: 
			completionText = Camping Completed! 
			disableOnStateChange = true
		}	
	}

 

 

Edited by Caerfinon
Link to comment
Share on other sites

On 5/26/2021 at 1:10 PM, Caerfinon said:

This is possible, but the duration parameter needs to be nested in the VesselParameterGroup. The following example from one of my contracts has a 3 day timer that persists through Scene changes and stays associated with the defined Vessel. 

Is using define a critical part of the solution? I know for a fact that the counter will randomly get reset for that contract.

Link to comment
Share on other sites

4 minutes ago, siimav said:

Is using define a critical part of the solution?

Yes the vessel must be defined by a unique name. If you have other Vessel Parameter Groups in you contract you can refer to a "defined" vessel using the  the vessel  = [defined name or variable]

See - > https://github.com/jrossignol/ContractConfigurator/wiki/VesselParameterGroup-Parameter

Link to comment
Share on other sites

On 5/26/2021 at 3:10 AM, Caerfinon said:

This is possible, but the duration parameter needs to be nested in the VesselParameterGroup. The following example from one of my contracts has a 3 day timer that persists through Scene changes and stays associated with the defined Vessel. 

  Reveal hidden contents


// The unique vesselID
	DATA
	{
		type = string
		craft = "KSRGAPKGOCampsite"
		hidden = true
	}


// The VesselParameterGroup with the duration timer
	PARAMETER
	{
		name = CampSite
		type = VesselParameterGroup
		title = Create a Camp within 500 meters of the marker  
		define = @/craft
		
		PARAMETER
		{
			Title = in your Rover Camper 
			name = VesselIsType
			type = VesselIsType
			vesselType = Rover
		}
		
		PARAMETER
		{
			name = HasCrewCapacity
			type = HasCrewCapacity
			title = have total crew capacity for 4 kerbals
			minCapacity = 4
			completeInSequence = true
			disableOnStateChange = false
		}

		PARAMETER
		{
			name = HasCrew
			type = HasCrew
			title = have a pilot
			trait = Pilot
			minCrew = 1
			hideChildren = true
			disableOnStateChange = false
		}
	
		
		PARAMETER
		{
			title = Have @/scientistKerbalName on board
			name = HasPassengers
			type = HasPassengers
			kerbal = @/kerbalScientist.ElementAt(0)
		}
	
		PARAMETER
		{
			name = VisitWaypoint
			type = VisitWaypoint
			index = 0
			distance = 500
			showMessages = true
			hideOnCompletion = true
			targetBody = @/targetBody
		}
		
		PARAMETER
		{
			name = ReachState
			type = ReachState
			title = Stop and set up camp
			targetBody = Kerbin
			situation = LANDED
			maxSpeed = 0.0
			hideChildren = true
		}
		
		PARAMETER
		{
			name = CampSite
			type = Duration
			duration = 3d
			preWaitText = Waiting to establish camp 
			waitingText = Camping at site for: 
			completionText = Camping Completed! 
			disableOnStateChange = true
		}	
	}

 

 

Hmm, I'm guessing that having the Vessel stored in a DATA node allows it to be tracked across all flight scenes? I've tried it with just a regular "define = targetVessel" in one VesselParameterGroup and have it be "vessel  = targetVessel" in another VPG, which is the one where i'm wanting to track the vessel duration.

Link to comment
Share on other sites

35 minutes ago, Teykn said:

Vessel stored in a DATA node allows it to be tracked across all flight scenes?

The data node is convenient for only having to define the key once in a contract and then just use the variable in all other VPG in the contract. I find that having the duration in the VPG where the vessel is defined seems to work better. But I don't really know why it does.  

 

Link to comment
Share on other sites

2 hours ago, Caerfinon said:

The data node is convenient for only having to define the key once in a contract and then just use the variable in all other VPG in the contract. I find that having the duration in the VPG where the vessel is defined seems to work better. But I don't really know why it does.  

 

Hmm, there's not a lot of cases where I would have a duration in the same VPG where vessel is also defined. Afaik defined vessels can be used across different CONTRACT_TYPEs in the same .cfg file, which is what I am currently doing. However, this does not allow for tracking in different scenes besides flying the vessel directly. Would having a vessel DATA node be set to the vessel defined in the VPG in the first CONTRACT_TYPE  allow for better tracking to occur with VPGs in the second CONTRACT_TYPE?

Link to comment
Share on other sites

40 minutes ago, Teykn said:

Would having a vessel DATA node be set to the vessel defined in the VPG in the first CONTRACT_TYPE  allow for better tracking to occur with VPGs in the second CONTRACT_TYPE

No. the data node in a contract is usable only within the same contract_type

By defining the vessel key it becomes persistent as long as the vessel exists and can be refereed to in other contracts according to the wiki

Separate contract_types can share data (even if in the same file) in two ways; 

  1.  Data nodes defined as part of the Contract Group definition can be accessed by any contract offered by the same Contract Group. This data is typically static. It is accessed by a variable in the form  @[group name]:[variable]
  2.  Data  can be added the the persistent data store using an Expression Behaviour and can be accessed by any contract (even other people's contracts) by a variable in the form $[variablename] . This data can be modified by other Expression Behaviours in the same or other contracts.

I generally have duration timers within one contract_type and associated with the VPG that defines the vessel that needs to complete the duration. I can switch scenes, ships etc and the timer persists until it reaches 0 with the original ship (when I switch back to it). I make it so that the VPG with the timer is only satisfied when the ship meeting the  design and crew parameters is in the correct position/orbit/location any only then is the duration timer triggered.

If the timer is long, several days to a year, I set a Kerbal Alarm Clock alert for when it should complete and switch flight to the vessel to see the completion of the duration and continue with any unfinished parameters.


 

 

 

Link to comment
Share on other sites

  • 2 weeks later...

I'm new to fiddling with Contract Configurator, and trying to find a way to use the NextUnreachedBodies() function to always generate two identical contracts but different bodies on the progression list from NextUnreachedBodies().

So if for example I was generating two flyby contracts I'd like to get one foe Eve and one for Duna but never get two for the same body.

I'm assuming that if I did something like :-

CONTRACT_TYPE
{
  ....
  targetBody = @/targetBody
  maxSimultaneous = 2
  ...


  DATA
  {
    type = CelestialBody
    targetBody = NextUnreachedBodies(2).Random()
  }

  ...

}

then I might get two contracts with the same target body? 

If NextUnreachedBodies() generates [Eve, Duna] then I want to guarantee I get 1 contract for Duna and another for Eve, and aprt from the target bosy the two contracts are otherwise identical.

Link to comment
Share on other sites

6 minutes ago, Kerolyov said:

to always generate two identical contracts but different bodies

You need to add a "uniquenessCheck" to the Data Node.

  DATA
  {
    type = CelestialBody
    targetBody = NextUnreachedBodies(2).Random()
    uniquenessCheck = CONTRACT_ACTIVE
  }

See the Wiki for full details -> https://github.com/jrossignol/ContractConfigurator/wiki/Data-Node

Link to comment
Share on other sites

19 minutes ago, Caerfinon said:

You need to add a "uniquenessCheck" to the Data Node.

Thanks!  Is it better to use SelectUnique() rather than Random() and have

  DATA
  {
    type = CelestialBody
    targetBody = NextUnreachedBodies(2).SelectUnique()
    uniquenessCheck = CONTRACT_ACTIVE
  }

 

Also the reload contracts in the debug menu seems to hang with message "Reloading ModuleManager..." displayed in the game screen (not the CC debug window).  Any ideas why that happens to me?

Link to comment
Share on other sites

43 minutes ago, Kerolyov said:

Is it better to use SelectUnique() rather than Random()

Not sure it mattered in the context of choosing between two choices.  SelectUnique()  would return the first one. Random() would return either the first or the second. The Uniqueness check would prevent duplication on the second round.

46 minutes ago, Kerolyov said:

Also the reload contracts in the debug menu seems to hang

I never use the reload contracts in the debug menu I just reload the game so I get a clean load of any contract changes I make.  You would need to post your ksp.log and your player.log to check what;s happening. 

Link to comment
Share on other sites

24 minutes ago, Caerfinon said:

I never use the reload contracts in the debug menu I just reload the game so I get a clean load of any contract changes I make.  You would need to post your ksp.log and your player.log to check what;s happening. 

Found this open bug/issue on the CC github, although it seems very old ( 5 years ago), maybe it was never fixed?  I'll avoid that button for now

https://github.com/jrossignol/ContractConfigurator/issues/592

@Caerfinon As for the contacts I'm fiddling with everything works well until I accept one of the two choices.  Once I do the other contract can then be identical to the acepted one and it seems random even using SelectUnique()

An example would be 1 Duna and 1 Eve contract.  Now I accept just one of those choices say Duna.  If I decline the Eve one (or wait for it to expire) it regenerates BUT 50% of the time its another Duna one, whereas with both SelectUnique() and uniquenessCheck = CONTRACT_ACTIVE, I would expect to only get an Eve contract.  I've tried uniquenessCheck = CONTRACT_ALL and same issue.

Edited by Kerolyov
Link to comment
Share on other sites

I seem to recall when I used this mod back in the day that there was a way to use it to turn off certain types of stock contracts, i.e. tourism, survey, etc. I can't for the life of me figure it out now. Anyone know?

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