Project

General

Profile

Bug #27222

Rover Construction Contract Generated Mismatching ID to Vessel

Added by dfjohnso almost 4 years ago. Updated about 3 years ago.

Status:
Resolved
Severity:
Low
Assignee:
Category:
Contracts
Target version:
Start date:
02/04/2021
% Done:

100%

Version:
Platform:
Linux, Windows
Expansion:
Core Game
Language:
English (US)
Mod Related:
No
Votes:
Arrow u r green
Arrow d r red

Description

This is in regard to a new contract related to Assembly Required / changes to vessels by engineers.

A "RoverConstructionContract" was generated where the Contract "roverVslId" did not match the "persistentId" of the generated vessel.
Due to the mismatch, the contract cannot be completed, despite reaching the ending coordinates.
Upon altering the persistentId of the vessel in the save file to match the roverVslId in the contract, the contract correctly completed upon reloading and resuming control of the vessel.

When the roverVslId and vessel persistentId mismatch, the contract list does not show a Note regarding which zone to move to.
Once the roverVslId and persistentId are matched, the Note appears.
See "screenshot121.png" vs "screenshot122.png" for the change in the Contracts information.

I am using "Kerbal Space Program - 1.11.1.3066 (WindowsPlayer x64)" through Steam on Windows 10.

screenshot122.png (1.47 MB) screenshot122.png Contracts listing with destination note dfjohnso, 02/04/2021 04:50 AM
screenshot121.png (1.47 MB) screenshot121.png Contracts listing without a note dfjohnso, 02/04/2021 04:50 AM
quicksave.sfs (4.29 MB) quicksave.sfs Dunbaratu, 02/05/2021 03:22 AM
rover-contact-bugged-before-accepting.sfs (2.54 MB) rover-contact-bugged-before-accepting.sfs m1a3_abrams, 02/06/2021 03:39 PM
rover-contract-bugged-after-accepting.sfs (2.6 MB) rover-contract-bugged-after-accepting.sfs m1a3_abrams, 02/06/2021 03:39 PM
ksp rover.png (178 KB) ksp rover.png leff, 07/03/2021 12:18 AM
56052
56053
58021

History

#1 Updated by Dunbaratu over 3 years ago

Same problem here. The contract has a roverVsId that appears nowhere else in the file so it's not referring to the actual vessel the contract spawned, and the contract is therefore impossible to finish. This was reported in 1.11 and it's still broken in 1.11.1.

Giving players contracts that literally cannot ever be finished no matter what they do because the id's mismatch is a Big Deal and should be a higher priority issue.

#2 Updated by Dunbaratu over 3 years ago

I've attached an example save file. The contract in question is this one:

            CONTRACT
            {
                guid = df02bb88-c558-4cd2-aa89-ab3f826bc9d1
                type = RoverConstructionContract

It has this for its roverVsId:

                roverVslId = 160435444

But the rover it spawned is this one:

        {
            pid = 14bf258f4b51485da2225df0980f001b
            persistentId = 3350090854
            name = Unfinished Minmus Buggy Q-6KQV

Who's id is 3350090854, not 160435444 like the contract is expecting.

So the contract is impossible to ever succeed at, even if you do everything right, because it doesn't realize that that was the correct vessel that went with the contract.

Sadly I don't have an un-modded save to give you because I encountered this while playing on my modded game, but the problem happens regardless of mods.

#3 Updated by m1a3_abrams over 3 years ago

I also experienced this bug. I have two save files, one before I accept the contract and another after. This happens on all rover construction contracts in my game. The only mod I have is Kerbal Engineer.

#4 Updated by Graknils over 3 years ago

Interesting. I followed Dunbaratu's instructions, and found my (similar) contract in my persistent file. It turned out that my roverVslId was correct, however, I noticed that the Way Point Name was listed as endWPName = Zone 9F34-S which is supposedly coordinates on Minmus. While searching for this contract I noticed that another rover contract ALSO had a Way Point Name listed as endWPName = Zone 9F34-S but THIS location was on the Mun.

EDIT 12FEB21 - Apparently my coding [Un]Skills leave much to be desired. After this had been nagging at me for several days, I went back and looked again. Dunbaratu is correct and I misread my data. My roverVslId did NOT match my persistentId. This questions the validity of the Way Point Name location disparity being another issue or just a red herring that I threw into the mix. (Apologies Y'all)

CONTRACT
guid = 4ea0fffd-8bb8-4344-b3cf-106f401c0b7c
type = RoverConstructionContract
name = RoverWayPointParameter
roverVslId = 547086603

VESSEL
pid = 65e70dc2c14d472ea534f77f29575c2a
persistentId = 2402639808
name = Unfinished Minmus Adventurer MG-W

#5 Updated by Dunbaratu over 3 years ago

Graknils wrote:

Interesting. I followed Dunbaratu's instructions, and found my (similar) contract in my persistent file. It turned out that my roverVslId was correct, however, I noticed that the Way Point Name was listed as endWPName = Zone 9F34-S which is supposedly coordinates on Minmus. While searching for this contract I noticed that another rover contract ALSO had a Way Point Name listed as endWPName = Zone 9F34-S but THIS location was on the Mun.

Yeah, from my (not a KSP dev) point of view it really looks like some kind of core underlying problem is causing information to keep "bleeding" from one contract to another, where contracts get data values that were intended for other contracts. What you are reporting sounds very similar to this problem from KSP 1.11.0 -> https://bugs.kerbalspaceprogram.com/issues/27020 .

My (not a KSP dev) take on it is that it feels very similar to what happens when a programmer intended to make a deep-copy of an object but accidentally only made a shallow-copy somewhere inside it. It's a common ooopsie, in Languages like C# or Java where complex objects are always references and simple ones are always values, for a method that used to copy just fine to suddenly stop copying properly when an edit to the code has changed one of the members from being a primitive object to being a more complex object, so

foo.x = bar.x;
is now a reference assignment instead of the value assignment it used to be.

#6 Updated by andrei over 3 years ago

I caught the same bug yesterday. And issue was in the wrong value of roverVslId.
I changed id and mission was finished.

Game version - 1.11.1.3066 Win x64 ru

Thanks,
Andrei.

#7 Updated by mpesco over 3 years ago

I found the same issue to affect an "attach a new part to satellite" contract, with the satellite's persistentID not matching the contract's.

I have changed the satellite's ID in the save file and the contract completed fine.

#8 Updated by Jellybug over 3 years ago

Same issue here. Rover repair & move mission, the contract wants to see roverVslId = 3012094036, but the rover's persistentId = 55605867. No other objects in the save file have either of those IDs. Changing the rover's ID to match allowed the navigation icon to be shown on the navball, and the contract was completed on arrival.

Impossible to complete without a cheat or savegame edit.

#9 Updated by victorr over 3 years ago

  • Platform Linux added

#10 Updated by just_jim over 3 years ago

  • Status changed from New to Confirmed
  • Assignee set to just_jim
  • % Done changed from 0 to 10

Yes, I see the same issue

#12 Updated by RobRed over 3 years ago

Same issue here. Had a mission to complete a rover on the mun and drive it to a specific location. The contract did not complete. I found that in my save file the roverVslId from the contract did not match the persistent-id of the mission vehicle and after replacing the roverVslId in the file, the contract finished as expected.

I only searched the internet for this problem because i had two 'attach part to satellite' missions fail to me before in the same manner (had to cancel the contracts because they did not finish after attaching the part). I suppose the problem might have been the same. For now, 3 of the 4 new missions I had from the 'some reassembly required' update could not be finished (without savefile editing).

Upvote so this can be fixed.

#13 Updated by Dunbaratu over 3 years ago

A temporary workaround for players who want to do these contracts now without waiting for a patch that fixes it:

As soon as you accept one of the new contracts that appeared in KSP 1.11.x (repair rover, finish construction of rover), do this before you attempt to actually work on the contract:

1 - Make a named quicksave (alt-F5), and also make an un-named quicksave (F5).
2 - Edit that named .sfs file in your favorite text editor, searching for the two following areas in the file:
- Find the area where the contract is mentioned (Search for it by name, make sure it's status is "Active" so you're not looking at an old one.)
- Find the area where the vessel the contract spawned is mentioned (look in the Tracking Center - the lastmost vessel in the list will be the one the contract just spawned. Search for it by name in the save file.)
3 - The vessel will have a persistendID number. Copy it.
4 - The contract will mention a roverVsId in two places. It will be wrong. Overwrite that number in both of the two places it's mentioned with the one you copied in (3) above.

5 - Save your edits and try to reload the game from this named quicksave.
6 - If you screwed up your edits and broke the save, then instead reload from your unnamed quicksave (thus why I mentioned making two of them, in case your edits broke it you still have the one you didn't edit to load from).

If you do it and it works, the contract will be complete-able like it should be.

A similar workaround exists for the satellite contracts, but the value you have to overwrite isn't called "roverVsId" it's called something else I can't quite remember.

#14 Updated by Graknils over 3 years ago

Dunbaratu wrote:

A similar workaround exists for the satellite contracts, but the value you have to overwrite isn't called "roverVsId" it's called something else I can't quite remember.

I have: vesselPersistentId = 597644459
vesselName = Damaged Kerbin AS-P Satellite 4W-R3
In the contract section of my particular file.

For those who are not adept at editing, the contract can also be completed through the Alt-F12 menu.

#15 Updated by moppaking over 3 years ago

Same issue here. roverVslId and vessel persistentId mismatch. Edited the vessel persistentId of the rover, loaded the modified save and the contract completed on switching to the rover (it was already parked on the mission waypoint).

#16 Updated by sycorax over 3 years ago

This is confirmed and still no progress in solving it. Lots of people work a lot in the game and can't finish the rovers and satelites missions and don't read these issues for workarounds. I think it is a major bug and should be addressed fast.

#17 Updated by Dunbaratu over 3 years ago

sycorax wrote:

This is confirmed and still no progress in solving it. Lots of people work a lot in the game and can't finish the rovers and satelites missions and don't read these issues for workarounds. I think it is a major bug and should be addressed fast.

Agree 100%. The majority of users don't visit this bug tracker. All they know when the contract doesn't get checked as complete is "What am I doing wrong? What am I missing here? Why can't I figure out how to do this contract? Am I being dumb here? I don't get it." And that's a very mean way for a game to treat its customers.

#18 Updated by victorr over 3 years ago

  • Status changed from Confirmed to Ready to Test
  • Target version set to 1.12.0
  • % Done changed from 10 to 80

We have made some changes in this last 1.12.0 release and would like some feedback on this issue. Thanks.

#19 Updated by Anth12 over 3 years ago

KSP 1.11.2 + DLCs
KSP 1.12.0 + DLCs

Using "rover-contact-bugged-before-accepting.sfs":
1.11.2: Theres a nullref that stops the rover from even been created. Its not there just the destination
1.12.0: Works. I went to the rover. Added the command chair and then moved the rover to its destination

Appears fixed to me.

#20 Updated by Dunbaratu over 3 years ago

this appears fixed now.

#21 Updated by leff over 3 years ago

58021

Got the issue today.

You can see the position of the rover in the screen corresponds to the position on the contract, and the persistentId matches the roverVslId :

@VESSEL {
pid = b8fa32d2b2164f8d900fbde9b89fc965
persistentId = 3289468066
name = Unfinished Minmus Surveyor DR-X@

@CONTRACT
            {
guid = 446369c0-1bd8-4231-9a62-3a052911ea1e
type = RoverConstructionContract
prestige = 2
seed = 1847951677
state = Active
viewed = Read
agent = Periapsis Rocket Supplies Co
agentName = Periapsis Rocket Supplies Co
deadlineType = Floating
expiryType = Floating
values = 86400,46008000,216000,675000,216000,0,13,11,17005297.6099469,16922367.1793307,62930367.1793307,0
bodyName = Minmus
roverCraftDef = .../Kerbal Space Program/KSP_x64_Data/../GameData/Squad/Contracts/PreBuiltCraft/RoverContract/Contract Rover 10a.craft
craftStartLat = 59.164237445590963
craftStartLon = -32.352281681046641
craftEndLat = 61.558356019749311
craftEndLon = -36.481122340412732
roverVslId = 3289468066
PARAM {
name = RoverWayPointParameter
state = Incomplete
disableOnStateChange = False
values = 0,0,0,0,0
bodyName = Minmus
roverVslId = 3289468066
craftStartLat = 59.164237445590963
craftStartLon = -32.352281681046641
craftEndLat = 61.558356019749311
craftEndLon = -36.481122340412732
endWPName = Zone 9F34-S
}
}@

#22 Updated by Technicalfool about 3 years ago

  • Status changed from Ready to Test to Resolved
  • % Done changed from 80 to 100

This has been retested and seems to be fixed now. Please continue to report if the issue crops up again.

Also available in: Atom PDF