Gig: Spy in the jungle, I have a vanilla nomad backstory, but for some reason I became a corpo in this quest, regardless of the order in which I set the settings, it's still why the corporate
when setting the settings to None, nomad is back, but in preset :Nomad - Street kid - Corpo, the main reason why Corpo
Hi! Just started a new game with this mod, but I cannot find where I can tweak mod settings, been looking through everything for 15 mins now, feeling dumb ;(
Edit; after launching game for the second time, it finally appeared. Sorry for the previous post. Cannot wait to try this out. Thanks
Aside from some unnecessary repetitions, there is also a redundant variable initialization:
let playerLifePath: gamedataLifePath = playerDevSystem.GetLifePath(playerObject); You can remove:
= playerDevSystem.GetLifePath(playerObject) because playerLifePath gets overwritten before it is ever used.
However, the most critical issue is the following condition:
return (firstPriorityLifepath == 2.0 && NotEquals(lifePath, gamedataLifePath.Nomad)) && (firstPriorityLifepath == 3.0 && NotEquals(lifePath, gamedataLifePath.StreetKid)) && (firstPriorityLifepath == 4.0 && NotEquals(lifePath, gamedataLifePath.Corporate)) && (secondPriorityLifepath == 2.0 && NotEquals(lifePath, gamedataLifePath.Nomad)) && (secondPriorityLifepath == 3.0 && NotEquals(lifePath, gamedataLifePath.StreetKid)) && (secondPriorityLifepath == 4.0 && NotEquals(lifePath, gamedataLifePath.Corporate)) && (thirdPriorityLifepath == 2.0 && NotEquals(lifePath, gamedataLifePath.Nomad)) && (thirdPriorityLifepath == 3.0 && NotEquals(lifePath, gamedataLifePath.StreetKid)) && (thirdPriorityLifepath == 4.0 && NotEquals(lifePath, gamedataLifePath.Corporate)); This condition is never true. The problem is that it requires a single variable, such as firstPriorityLifepath, to hold multiple different values at the same time. For example, it would need to be both 2.0 and 3.0 simultaneously, which is impossible. The same issue applies to secondPriorityLifepath and thirdPriorityLifepath.
You either need to rethink the logic—likely replacing some && with ||—or simply replace the entire condition with false, as it will always evaluate to false. There's no need to waste resources on unnecessary checks.
That works very well. However, it still doesn't fully fix the issue where prioritization doesn't apply in certain cases where the lifepath is chosen automatically. Fixing this would likely require deeper modifications, as there doesn’t seem to be a clear definition in the game code distinguishing between an automatically assigned decision and a regular dialog option.
For those stucked during the quest "The Pick Up" aka q003 when you want to spot the mole but can't do it because of the backround not being nomad, here's the solution :
- CET Consol command - Set backround to nomad
local newPath = 'Nomad'; local function changePath(path) local P = Game.GetPlayer(); local QS = Game.GetQuestsSystem(); local DS = PlayerDevelopmentSystem.GetInstance(P):GetDevelopmentData(P); local curLifePath = DS:GetLifePath().value; local lifePaths = {'StreetKid', 'Corporate', 'Nomad'}; local pathFacts = {'q000_street_kid_background', 'q000_corpo_background', 'q000_nomad_background'}; if curLifePath == path then print(' \n\tNo need to set '..path..' Life Path.\n ') return end if path == lifePaths[1] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[1], 1) DS:SetLifePath('LifePaths.'..lifePaths[1]) elseif path == lifePaths[2] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[2], 1) DS:SetLifePath('LifePaths.'..lifePaths[2]) elseif path == lifePaths[3] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[3], 1) DS:SetLifePath('LifePaths.'..lifePaths[3]) end print(' \n\tLife path set to : '..path..'.\n ') end changePath(newPath)
- Ensure both q003_convoy_signatures and q003_militech_nomad_offer are set to 1
- Should be good to go ! Then you can go back to your original background after talking to Meredith
Corpo
local newPath = 'Corporate'; local function changePath(path) local P = Game.GetPlayer(); local QS = Game.GetQuestsSystem(); local DS = PlayerDevelopmentSystem.GetInstance(P):GetDevelopmentData(P); local curLifePath = DS:GetLifePath().value; local lifePaths = {'StreetKid', 'Corporate', 'Nomad'}; local pathFacts = {'q000_street_kid_background', 'q000_corpo_background', 'q000_nomad_background'}; if curLifePath == path then print(' \n\tNo need to set '..path..' Life Path.\n ') return end if path == lifePaths[1] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[1], 1) DS:SetLifePath('LifePaths.'..lifePaths[1]) elseif path == lifePaths[2] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[2], 1) DS:SetLifePath('LifePaths.'..lifePaths[2]) elseif path == lifePaths[3] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[3], 1) DS:SetLifePath('LifePaths.'..lifePaths[3]) end print(' \n\tLife path set to : '..path..'.\n ') end changePath(newPath)
Stret Kid
local newPath = 'StreetKid'; local function changePath(path) local P = Game.GetPlayer(); local QS = Game.GetQuestsSystem(); local DS = PlayerDevelopmentSystem.GetInstance(P):GetDevelopmentData(P); local curLifePath = DS:GetLifePath().value; local lifePaths = {'StreetKid', 'Corporate', 'Nomad'}; local pathFacts = {'q000_street_kid_background', 'q000_corpo_background', 'q000_nomad_background'}; if curLifePath == path then print(' \n\tNo need to set '..path..' Life Path.\n ') return end if path == lifePaths[1] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[1], 1) DS:SetLifePath('LifePaths.'..lifePaths[1]) elseif path == lifePaths[2] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[2], 1) DS:SetLifePath('LifePaths.'..lifePaths[2]) elseif path == lifePaths[3] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[3], 1) DS:SetLifePath('LifePaths.'..lifePaths[3]) end print(' \n\tLife path set to : '..path..'.\n ') end changePath(newPath)
Credits to Thortok2000 for Fact Finder (https://www.nexusmods.com/cyberpunk2077/mods/12735?tab=files&file_id=70271&nmm=1) and Silverhandsome for the categorized command list (https://www.nexusmods.com/cyberpunk2077/mods/521).
Obviously thanx to dnbnhlp for making this mod ;) Don't know if you can make something out of these command with your mod, but anyway good luck !
It's the one instance where this mod won't be enough to identify the mole unless you were a genuine nomad lifepath. Even with the mod, if you go there as say, a corpo, V won't comment on Gilcrest or the HOA. It's game thing, not a mod thing.
Also, thank you OP! Appreciate the info and the code! Now it really does feel like restrictions have been lifted. My OCD also thanks you. XD
Just don't forget to disable the mod before the credits roll. The game doesn't seem to like it very much. It'll freeze up when you are given the option to "just one last gig" and get back to main menu.
Wait. Did I just started streetkid quest, being nomad? I thought mod only gives you an opportunity to choose answers for each lifepath? For example it doesn't allow you to pin the mole in "The Pickup" if you're streetkid or corpo.
On my lastest playthrought, Kirk quest and car quest started as soon as I reach to Panam while War Pigs only start for me when I finish almost everything (quests, gigs, ncpds...) though.
"War Pigs" should start after "Transmission", as they say. No luck for now. "SM, BM" - after "Heroes" (check) "TBaMfW" - after meeting Panam. (check) Also, while V being Nomad, Johnny sees them as corpo :) At Ofrenda V says last words as if they being streetkid :) A little cognitive dissonance :)
Chalk to it as imaginations your Nomad V had, like a bad peyote lmao. He/she imagined working for a corp or born into NC and meeting that gonk street slug Kirk.
Hello. I started the game with Corpo. Set the settings to 1.Corpo 2.Streetkid 3.NoneIn the quest at Jackie's funeral, I played Streetkid's dialogue. I turned it off, completed the quest, turned it on. After leaving el cojote I had a quest with Kirk. After completing Transmission, I didn't get the quest with Frank (Corpo). Is this how it should be according to your idea? Or here's another... I went to play Streetkid, completed the quest with Kirk, after the Transmission quest a quest with Frank appeared, although I turned on Corpo only in the prologue (pickup), then turned it off. How does this work? please explain
156 comments
when setting the settings to None, nomad is back, but in preset :Nomad - Street kid - Corpo, the main reason why Corpo
Just started a new game with this mod, but I cannot find where I can tweak mod settings, been looking through everything for 15 mins now, feeling dumb ;(
Edit; after launching game for the second time, it finally appeared. Sorry for the previous post. Cannot wait to try this out. Thanks
Aside from some unnecessary repetitions, there is also a redundant variable initialization:
let playerLifePath: gamedataLifePath = playerDevSystem.GetLifePath(playerObject);
You can remove:
= playerDevSystem.GetLifePath(playerObject)
because playerLifePath gets overwritten before it is ever used.
However, the most critical issue is the following condition:
return (firstPriorityLifepath == 2.0 && NotEquals(lifePath, gamedataLifePath.Nomad))
&& (firstPriorityLifepath == 3.0 && NotEquals(lifePath, gamedataLifePath.StreetKid))
&& (firstPriorityLifepath == 4.0 && NotEquals(lifePath, gamedataLifePath.Corporate))
&& (secondPriorityLifepath == 2.0 && NotEquals(lifePath, gamedataLifePath.Nomad))
&& (secondPriorityLifepath == 3.0 && NotEquals(lifePath, gamedataLifePath.StreetKid))
&& (secondPriorityLifepath == 4.0 && NotEquals(lifePath, gamedataLifePath.Corporate))
&& (thirdPriorityLifepath == 2.0 && NotEquals(lifePath, gamedataLifePath.Nomad))
&& (thirdPriorityLifepath == 3.0 && NotEquals(lifePath, gamedataLifePath.StreetKid))
&& (thirdPriorityLifepath == 4.0 && NotEquals(lifePath, gamedataLifePath.Corporate));
This condition is never true. The problem is that it requires a single variable, such as firstPriorityLifepath, to hold multiple different values at the same time. For example, it would need to be both 2.0 and 3.0 simultaneously, which is impossible. The same issue applies to secondPriorityLifepath and thirdPriorityLifepath.
You either need to rethink the logic—likely replacing some && with ||—or simply replace the entire condition with false, as it will always evaluate to false. There's no need to waste resources on unnecessary checks.
@replaceMethod(LifePath_ScriptConditionType)
public const quest func Evaluate(playerObject: ref<GameObject>) -> Bool {
if !IsDefined(playerObject) {
return false;
}
let pCtrlObj: ref<GameObject> = GameInstance.GetPlayerSystem(playerObject.GetGame()).GetLocalPlayerControlledGameObject();
if !IsDefined(pCtrlObj) {
return false;
}
let lifePath: gamedataLifePath = TweakDBInterface.GetLifePathRecord(this.m_lifePathId).Type();
let priority1: Float = TweakDBInterface.GetFloat(t"NewPerks.firstPriorityLifepath.value", 1.0);
let priority2: Float = TweakDBInterface.GetFloat(t"NewPerks.secondPriorityLifepath.value", 1.0);
let priority3: Float = TweakDBInterface.GetFloat(t"NewPerks.thirdPriorityLifepath.value", 1.0);
if priority1 <= 1.0 && priority2 <= 1.0 && priority3 <= 1.0 {
let objLifePath: gamedataLifePath = this.GetPlayerDevelopmentSystem().GetLifePath(pCtrlObj);
return GetFinalResult(Equals(lifePath, objLifePath), this.m_inverted);
}
return GetFinalResult(
MatchesLifePath(priority1, lifePath) ||
MatchesLifePath(priority2, lifePath) ||
MatchesLifePath(priority3, lifePath), this.m_inverted);
}
private func GetFinalResult(result: Bool, inverted: Bool) -> Bool {
return inverted ? !result : result;
}
private func MatchesLifePath(priority: Float, path: gamedataLifePath) -> Bool {
return (priority == 2.0 && Equals(path, gamedataLifePath.Nomad)) ||
(priority == 3.0 && Equals(path, gamedataLifePath.StreetKid)) ||
(priority == 4.0 && Equals(path, gamedataLifePath.Corporate));
}
That works very well. However, it still doesn't fully fix the issue where prioritization doesn't apply in certain cases where the lifepath is chosen automatically. Fixing this would likely require deeper modifications, as there doesn’t seem to be a clear definition in the game code distinguishing between an automatically assigned decision and a regular dialog option.
For those stucked during the quest "The Pick Up" aka q003 when you want to spot the mole but can't do it because of the backround not being nomad, here's the solution :
- CET Consol command
- Set backround to nomad
local newPath = 'Nomad'; local function changePath(path) local P = Game.GetPlayer(); local QS = Game.GetQuestsSystem(); local DS = PlayerDevelopmentSystem.GetInstance(P):GetDevelopmentData(P); local curLifePath = DS:GetLifePath().value; local lifePaths = {'StreetKid', 'Corporate', 'Nomad'}; local pathFacts = {'q000_street_kid_background', 'q000_corpo_background', 'q000_nomad_background'}; if curLifePath == path then print(' \n\tNo need to set '..path..' Life Path.\n ') return end if path == lifePaths[1] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[1], 1) DS:SetLifePath('LifePaths.'..lifePaths[1]) elseif path == lifePaths[2] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[2], 1) DS:SetLifePath('LifePaths.'..lifePaths[2]) elseif path == lifePaths[3] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[3], 1) DS:SetLifePath('LifePaths.'..lifePaths[3]) end print(' \n\tLife path set to : '..path..'.\n ') end changePath(newPath)
- Ensure both q003_convoy_signatures and q003_militech_nomad_offer are set to 1
Game.GetQuestsSystem():SetFactStr("q003_convoy_signatures", 1)
Game.GetQuestsSystem():SetFactStr("q003_militech_nomad_offer", 1)
- Should be good to go ! Then you can go back to your original background after talking to Meredith
Corpo
local newPath = 'Corporate'; local function changePath(path) local P = Game.GetPlayer(); local QS = Game.GetQuestsSystem(); local DS = PlayerDevelopmentSystem.GetInstance(P):GetDevelopmentData(P); local curLifePath = DS:GetLifePath().value; local lifePaths = {'StreetKid', 'Corporate', 'Nomad'}; local pathFacts = {'q000_street_kid_background', 'q000_corpo_background', 'q000_nomad_background'}; if curLifePath == path then print(' \n\tNo need to set '..path..' Life Path.\n ') return end if path == lifePaths[1] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[1], 1) DS:SetLifePath('LifePaths.'..lifePaths[1]) elseif path == lifePaths[2] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[2], 1) DS:SetLifePath('LifePaths.'..lifePaths[2]) elseif path == lifePaths[3] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[3], 1) DS:SetLifePath('LifePaths.'..lifePaths[3]) end print(' \n\tLife path set to : '..path..'.\n ') end changePath(newPath)
Stret Kid
local newPath = 'StreetKid'; local function changePath(path) local P = Game.GetPlayer(); local QS = Game.GetQuestsSystem(); local DS = PlayerDevelopmentSystem.GetInstance(P):GetDevelopmentData(P); local curLifePath = DS:GetLifePath().value; local lifePaths = {'StreetKid', 'Corporate', 'Nomad'}; local pathFacts = {'q000_street_kid_background', 'q000_corpo_background', 'q000_nomad_background'}; if curLifePath == path then print(' \n\tNo need to set '..path..' Life Path.\n ') return end if path == lifePaths[1] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[1], 1) DS:SetLifePath('LifePaths.'..lifePaths[1]) elseif path == lifePaths[2] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[2], 1) DS:SetLifePath('LifePaths.'..lifePaths[2]) elseif path == lifePaths[3] then for i, p in next, pathFacts do QS:SetFactStr(p, 0) end QS:SetFactStr(pathFacts[3], 1) DS:SetLifePath('LifePaths.'..lifePaths[3]) end print(' \n\tLife path set to : '..path..'.\n ') end changePath(newPath)
Credits to Thortok2000 for Fact Finder (https://www.nexusmods.com/cyberpunk2077/mods/12735?tab=files&file_id=70271&nmm=1) and Silverhandsome for the categorized command list (https://www.nexusmods.com/cyberpunk2077/mods/521).
Obviously thanx to dnbnhlp for making this mod ;) Don't know if you can make something out of these command with your mod, but anyway good luck !
Kiss
Also, thank you OP! Appreciate the info and the code! Now it really does feel like restrictions have been lifted. My OCD also thanks you. XD
Does if affect any like important decisions or is this just purely dialogue?
For example it doesn't allow you to pin the mole in "The Pickup" if you're streetkid or corpo.
"SM, BM" - after "Heroes" (check)
"TBaMfW" - after meeting Panam. (check)
Also, while V being Nomad, Johnny sees them as corpo :)
At Ofrenda V says last words as if they being streetkid :)
A little cognitive dissonance :)