z Baldur's Gate 3

Upload your cheat tables here (No requests)
icedtea676
What is cheating?
What is cheating?
Posts: 4
Joined: Mon Aug 14, 2023 8:52 pm
Reputation: 1

Re: z Baldur's Gate 3

Post by icedtea676 »

Thepledge wrote:
Tue Aug 15, 2023 11:30 am
icedtea676 wrote:
Mon Aug 14, 2023 9:04 pm
Thepledge wrote:
Sat Aug 12, 2023 3:45 pm


I've made a series of console commands for setting and clearing the various isdating flags, and have managed to start the romance paths with everyone but wyll so far in my game by clearing other romances, then trying to trigger the relevant dialog, IE, get approval high with gale, clear all romances, camp, wait til night, get magic lessons, then reset all your romances. probably there will be other conflicts to navigate as time goes on, but working alright so far.

Just copy the below code, then press ctrl v within your cheatengine table

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
  <CheatEntries>
    <CheatEntry>
      <ID>4499</ID>
      <Description>"Romance Flags"</Description>
      <LastState Value="" RealAddress="00000000"/>
      <GroupHeader>1</GroupHeader>
      <CheatEntries>
        <CheatEntry>
          <ID>4507</ID>
          <Description>"Dating Gale"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "75d0e041-c16c-d089-6d89-64354fa4c9d9" --Debug_SetReallyTagsToo

local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4492</ID>
          <Description>"Dating Wyll"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "f1520748-1d36-4500-9f8a-0da4207f8dd5" -- ORI_State_DatingWithWyll

local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4493</ID>
          <Description>"Dating Astarion"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "ba298c56-26b6-4918-9bd4-616668d369d8" -- ORI_State_DatingAstarion


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4494</ID>
          <Description>"Dating Shadowheart"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "e87f1e21-a758-47ae-8c0e-9e715eb289b5" -- ORI_State_DatingShadowheart


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4508</ID>
          <Description>"Dating Lae'zel"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "86eaa84a-350b-401b-8b43-b53eeb534579" -- ORI_State_DatingLaezel


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4509</ID>
          <Description>"Dating Minthara"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "de1360cd-894b-40ea-95a7-1166d675d040" -- ORI_State_DatingMinthara


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4510</ID>
          <Description>"Dating Karlach"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "f24c3f3e-7287-4908-84bf-ba314921f5ee" -- ORI_State_DatingKarlach


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4511</ID>
          <Description>"Dating"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "a3346d5b-c54b-4c73-bf18-0a2bf90c35da" -- ORI_State_Dating

local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4500</ID>
          <Description>"Clear Dating Gale"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "75d0e041-c16c-d089-6d89-64354fa4c9d9" --Debug_SetReallyTagsToo

local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("ClearFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4501</ID>
          <Description>"Clear Dating Wyll"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "f1520748-1d36-4500-9f8a-0da4207f8dd5" -- ORI_State_DatingWithWyll

local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("ClearFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4502</ID>
          <Description>"Clear Dating Astarion"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "ba298c56-26b6-4918-9bd4-616668d369d8" -- ORI_State_DatingAstarion


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("ClearFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4503</ID>
          <Description>"Clear Dating Shadowheart"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "e87f1e21-a758-47ae-8c0e-9e715eb289b5" -- ORI_State_DatingShadowheart


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4504</ID>
          <Description>"Clear Dating Lae'zel"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "86eaa84a-350b-401b-8b43-b53eeb534579" -- ORI_State_DatingLaezel


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("ClearFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4505</ID>
          <Description>"Clear Dating Minthara"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "de1360cd-894b-40ea-95a7-1166d675d040" -- ORI_State_DatingMinthara


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("ClearFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4512</ID>
          <Description>"Clear Dating"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "a3346d5b-c54b-4c73-bf18-0a2bf90c35da" -- ORI_State_Dating

local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("ClearFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
        <CheatEntry>
          <ID>4506</ID>
          <Description>"Clear Dating Karlach"</Description>
          <LastState/>
          <VariableType>Auto Assembler Script</VariableType>
          <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end

local uuid = "f24c3f3e-7287-4908-84bf-ba314921f5ee" -- ORI_State_DatingKarlach


local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")

PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)

writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)

PrepareCall("ClearFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}

[DISABLE]
</AssemblerScript>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
</CheatTable>
Is there any chance you can take a look at this again? I managed to insert it into the cheat engine table provided on the OP, though it took a bit of finagling. The code also doesn't work at all if made in its own .ct file, Cheat Engine complains about the command cmdCall or whatever. Anyways, once the code does work after very precise copy/pasting, it fails to actually do what is intended to do.

As others have mentioned, clearing dating or clearing dating with a specific NPC, they still remain as the main romance. When trying to clear Karlach (my current romance partner), she is still swooning me. When trying to clear Karlach, clear Dating, and enable Dating Shadowheart; Shadowhearts' initial dialogue goes directly into a "this would have been a nice thing, I'm sorry it couldn't happen".

Have you tested your code at all past Act 1? I'm at Wyrm's Crossing/Lower-City of Baldur's Gate. This type of change romance would be very much appreciated, but appears to be broken.

Thank you for your time =).
Been a busy time, and I'm still in Act 1, so haven't had the opportunity to test it much beyond using it to start all the romances simultaneously in act 1. It may be that they can't be started later, and I did read some reference to a stabledating counter in some of the data files, so I will take a look when I have the chance, but it may be a while before I get there, and my own skills are fairly limited.
Thanks for replying to me. I think I know what the issue is, in game that is; when you've started a romance and proceed to do romance things like kissing the partner, it seems to lock in who you've picked. It also seems to give other NPC's who had interest with you an auto-fail. Even if I tell Karlach I want to end our romance, Shadowheart (someone I've not romanced, didn't seem to get an opportunity) and Lae'zel (someone I did romance before dropping her for Karlach), both give that same kind of "could have been amazing, sorry it didn't work out". I think other characters I've shown no interest at all, have more signs of starting a romance, but I will admit I didn't attempt to romance them with your code, as my issue is with Shadowheart who'd I'd like to end the game with.

There must be other flags or types of flags for romance/dating that need to be changed when making someone else a new partner.

How to use this cheat table?
  1. Install Cheat Engine
  2. Double-click the .CT file in order to open it.
  3. Click the PC icon in Cheat Engine in order to select the game process.
  4. Keep the list.
  5. Activate the trainer options by checking boxes or setting values from 0 to 1

dardack
Noobzor
Noobzor
Posts: 6
Joined: Tue Aug 15, 2023 5:32 pm
Reputation: 1

Re: z Baldur's Gate 3

Post by dardack »

fearlessengineer333 wrote:
Tue Aug 15, 2023 6:55 pm
I have a request for finding the UUID of the edition the Necromancy of Thay after you use it. The description on the book says "Twisted Binding" "Look. Away"

This UUID is not in the four which is on the main page, those are different versions of the book. This is concerning a bug with the quest, so I need that specific string. The book cannot be dropped so the CE script cannot pick it up.
Opened it with Gem? S_FOR_DangerousBook_Tome_73ea8888-ed82-4ca5-b9f9-0c9119873507

That's after I opened it. Also I can drop it.
Last edited by dardack on Tue Aug 15, 2023 7:13 pm, edited 1 time in total.

Cidrow
Novice Cheater
Novice Cheater
Posts: 16
Joined: Fri Mar 03, 2017 10:18 am
Reputation: 15

Re: z Baldur's Gate 3

Post by Cidrow »

fearlessengineer333 wrote:
Tue Aug 15, 2023 6:55 pm
I have a request for finding the UUID of the edition the Necromancy of Thay after you use it. The description on the book says "Twisted Binding" "Look. Away"

This UUID is not in the four which is on the main page, those are different versions of the book. This is concerning a bug with the quest, so I need that specific string. The book cannot be dropped so the CE script cannot pick it up.
Spoiler
"0c44ae4e-4ac9-45fd-bf01-4407213036bb";
"CINE_UNI_FOR_ThayanTome_Socketed";"FOR_DangerousBook";"The Necromancy of Thay";"Look. Away."

"215dc202-2b77-4825-b6d1-c72954f6394a";
"UNI_FOR_ThayanTome_Socketed";"FOR_DangerousBook";"The Necromancy of Thay";"Look. Away."

"35a4fb2e-fdf2-40d0-98a0-a0a67a37248b";
"CINE_UNI_FOR_ThayanTome_Open";"FOR_DangerousBook";"The Necromancy of Thay";"Look. Away."

"79f752d4-1680-4eaa-acfa-1c92c9b9477b";
"UNI_FOR_ThayanTome_Open";"FOR_DangerousBook";"The Necromancy of Thay";"Look. Away."

"87918b9b-8551-476b-8544-68a2a3ce9e2e";
"UNI_FOR_ThayanTome_Open_Unsocketed";"FOR_DangerousBook";"The Necromancy of Thay";"It. Is. Not. Too. Late."

"e0b3e78b-102e-4f2a-92dd-c66bc1533824";
"CINE_UNI_FOR_ThayanTome_Open_Unsocketed";"FOR_DangerousBook";"The Necromancy of Thay";"It. Is. Not. Too. Late."

"f2a13db1-1dd7-4b5e-9d22-549d4cb803c6";
"CINE_UNI_FOR_ThayanTome_Unsocketed";"FOR_DangerousBook";"The Necromancy of Thay";"It. Is. Not. Too. Late."

"feecea9b-c091-46fd-9795-738e9c0e3019";
"UNI_FOR_ThayanTome_Unsocketed";"FOR_DangerousBook";"The Necromancy of Thay";"It. Is. Not. Too. Late."

weird032
Expert Cheater
Expert Cheater
Posts: 60
Joined: Mon Feb 05, 2018 6:35 am
Reputation: 15

Re: z Baldur's Gate 3

Post by weird032 »

EvenLess wrote:
Fri Aug 04, 2023 11:42 pm
  • 2023-08-13:
    1. Added bg3_items_20230813T0228529556.txt. Removed bg3_items_20230812T2222384844.txt.
      Also [Link].
  • 2023-08-12:
    1. Added bg3_EvenLess_armor_v2.CT.
      Based on a new PowerShell script (which I'm refining), that automatically indexes all the items in the armor.txt-files, attempts to find the equipment slot. Looks up the localized name and description and adds this for the name and extra details in the script comments, then generates the final Cheat Table.
    2. Added bg3_items_20230812T2222384844.txt.
      More details CSV with all armors in Armor.txt-files.
I have added a LOT of items to the Item Spawner. Primarily Legendary and Very Rare, and some Rare and Uncommon. I have sorted and color-coded them.
All this is in the attached bg3_items_spells.CT table, which is based Zanzer's bg3.CT v4.1.1.3624901 (2) table.

You can also use one of the attached tables that only contains the items (bg3_armor.CT, bg3_weapon.CT, and bg3_object.CT). They contain a LOT more items, but are not as pretty and sorted as the ones I manually added in the bg3_items_spells.CT table.
To use these you must load Zanzer's bg3.CT table first, then and Activate Console Commands, then Register Commands, before being able to use the Item Spawner.
Then from the already opened Cheat Engine, with Zanzer's bg3.CT loaded, open my bg3_armor.CT, or bg3_weapon.CT, or bg3_object.CT and merge it into Zanzer's bg3.CT.
Image

These (incomplete) lists are based on all the items found in the armor.txt, weapon.txt, and armor.txt files, found in the following unpacked folders, and a list of those are added in the bg_items.txt (CSV) file:
  • Gustav\Public\Gustav\Stats\Generated\Data
  • Gustav\Public\GustavDev\Stats\Generated\Data
  • Shared\Public\Shared\Stats\Generated\Data
  • Shared\Public\SharedDev\Stats\Generated\Data
I've attached another, more complete and more searchable list, as bg3_items_v2.txt (CSV) file. This one contains all items found in the all the RootTemplates-files. This does include a lot of items that cannot be added to inventory, from the looks of it. It does not contain all files, I've discovered, but it is the most complete list so far.

If you want to find more items yourself, I created a small guide in another post, but have added it here as well, to have all the tidbits gathered in one post. The guide is based on the [Link] (which CKeylos also pointed out.
  1. Download and extract the latest version of Norbyte's ExportTool [Link].
  2. Download and extract the latest version of ShinyHobo's BG3-Modders-Multitool [Link].
    I extracted the BG3-Modders-Multitool to the base directory of Norbyte's ExportTool, as the Multitool requires divine.exe from this.
  3. Open the multitool (bg3-modders-multitool.exe).
  4. Add the paths to divine.exe and bg3.exe by clicking the asterisk in the lower right hand corner after opening the Multitool.
    Image
  5. Unpack .pak Files and select at least Gustav.pak and Shared.pak. I recommend also unpacking English.pak as this contains the translations you see in-game.
    Image
    This step takes a while and takes up a around 30 GB of disk space.
  6. Index Files. This step also takes a while.
    Image
  7. Index Search to search for things. If you search for the in-game name, you should get results from English.loca. The line here contains a "handle" (ID). Use this handle to do a new search, and you will find the files that contain references to this handle. These files likely contains the UUID/MapKey.
    Image
  8. For more control/advanced use, use the ConverterApp.exe to batch convert all .lsf-files (binary) to .lsj-files (json) to make them more readable. Also use ConvertApp.exe to convert English.loca (binary) to xml.
    Image
    Image
The way I created the lists and the item Cheat Tables, was with a few PowerShell scripts I wrote.

The first script, which only inventories the before-mentioned .txt-files, is pretty fast to run. It creates both the CSV and the 3 item Cheat Tables. Remember to update paths to your locations.
bg3_items.ps1

Code: Select all

# Get the path for the My Documents folder.
$DocumentsFolder = [System.Environment]::GetFolderPath('MyDocuments')

# The default location where Cheat Engine saves cheat tables.
$CheatTablesFolder = Join-Path -Path $DocumentsFolder -ChildPath 'My Cheat Tables'

$ItemsCsvFile = 'bg3_items.csv'
$ItemsCsvPath = Join-Path -Path $CheatTablesFolder -ChildPath $ItemsCsvFile
$ItemsCtFile = 'bg3_armor.CT'
$ItemsCtPath = Join-Path -Path $CheatTablesFolder -ChildPath $ItemsCtFile

# Base-path of the unpacked data/.pak-files.
$BasePath = 'C:\Games\BG3-Tools\UnpackedData'
# Get tools to extract with here:
# https://github.com/Norbyte/lslib/releases/latest
# https://github.com/ShinyHobo/BG3-Modders-Multitool/releases/latest

# Sub-paths to the armor, object, and weapon .txt-files.
$ArmorFiles = @(
     'Shared\Public\Shared\Stats\Generated\Data\Armor.txt'
    ,'Shared\Public\SharedDev\Stats\Generated\Data\Armor.txt'
    ,'Gustav\Public\Gustav\Stats\Generated\Data\Armor.txt'
    ,'Gustav\Public\GustavDev\Stats\Generated\Data\Armor.txt'
)
$WeaponFiles = @(
     'Shared\Public\Shared\Stats\Generated\Data\Weapon.txt'
    ,'Shared\Public\SharedDev\Stats\Generated\Data\Weapon.txt'
    ,'Gustav\Public\Gustav\Stats\Generated\Data\Weapon.txt'
    ,'Gustav\Public\GustavDev\Stats\Generated\Data\Weapon.txt'
)
$ObjectFiles = @(
     'Shared\Public\Shared\Stats\Generated\Data\Object.txt'
    ,'Shared\Public\SharedDev\Stats\Generated\Data\Object.txt'
    ,'Gustav\Public\Gustav\Stats\Generated\Data\Object.txt'
    ,'Gustav\Public\GustavDev\Stats\Generated\Data\Object.txt'
)

# Combine to one.
#$Files = $ArmorFiles + $WeaponFiles + $ObjectFiles
$Files = $ArmorFiles + $WeaponFiles + $ObjectFiles

$RarityColor = @{
    'RARITY_UNKNOWN' = 'C0C0C0'
    'Uncommon'       = '00FF00'
    'Rare'           = 'FFFF00'
    'VeryRare'       = 'FF00FF'
    'Legendary'      = '4080FF'
}

$CheatTableHead = @"
<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
    <CheatEntries>
        <CheatEntry>
            <ID>@@CE_ID@@</ID>
            <Description>"Item Spawner"</Description>
            <Options moHideChildren="1"/>
            <GroupHeader>1</GroupHeader>
            <CheatEntries>
"@
$CheatTableFoot = @"
            </CheatEntries>
        </CheatEntry>
    </CheatEntries>
    <UserdefinedSymbols>
        <SymbolEntry>
            <Name>playerCharactersPtr</Name>
            <Address>1D4526F0000</Address>
        </SymbolEntry>
    </UserdefinedSymbols>
    <DisassemblerComments>
        <DisassemblerComment>
            <Address>"bg3.exe"+25C0F20</Address>
            <Comment>Zanzer</Comment>
        </DisassemblerComment>
    </DisassemblerComments>
</CheatTable>
"@
$CheatEntryTemplate = @"
                <CheatEntry>
                    <ID>@@CE_ID@@</ID>
                    <Description>"@@ITEM_NAME@@"</Description>
                    <Color>@@RARITY_COLOR@@</Color>
                    <VariableType>Auto Assembler Script</VariableType>
                    <AssemblerScript Async="1">[ENABLE]
{`$lua}
if syntaxcheck then return end

local uuid = "@@ITEM_UUID@@"

local cmdCall = getAddress("cmdCall")
local cmdAddr = getAddress("cmdAddr")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

writePointer(cmdArgs + 0x18, readPointer(cmdArgs + 0x08))
PrepareCall("CreateAtObject")
writePointer(cmdArgs + 0x08, cmdStr1)
writeString(cmdStr1, uuid)
writeBytes(cmdStr1 + #uuid, 0)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 0)
writeQword(cmdArgs + 0x48, 0)
writeQword(cmdArgs + 0x58, 0)
executeCodeEx(0, nil, cmdCall)

{`$asm}
assert(true)
[DISABLE]
                    </AssemblerScript>
                </CheatEntry>
"@

# Regular Expression to check if the UUID looks right.
$RegexUUID = [regex]'^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$'

# Create an empty array to store all the items.
$Items = ''

# Create an empty string variable to store the content of the files.
$Content = ''
# Loop through the files and read their contents into one big string.
foreach ($File in $Files) {
    # Combine base-path and sub-path to the full path.
    $FullPath = Join-Path -Path $BasePath -ChildPath $File
    $Content += Get-Content -Raw -Path $FullPath
}
# Split the content string into an array of lines.
$Line = $Content -split '\n'

# Create an empty array to store the item objects in.
$Items = @()
# Ensure the Item variable is empty for the first iteration.
Clear-Variable -Name Item -ErrorAction SilentlyContinue
# Loop through all the lines.
for ($l = 0; $l -lt $Line.Count; $l++) {
    # Check if the current line is the start of a new item entry.
    if ($Line[$l] -match '^new entry "(?<Name>\w+)"') {
        # Store the items "name" in a new variable, so it does not get overwritten by following mathes.
        $ItemName = $Matches.Name
        # Check if we already have an item object, and if that item object contains a valid UUID.
        if ($Item -and $Item.UUID -match $RegexUUID) {
            # Store the previous item object in the array.
            $Items += New-Object -TypeName psobject -Property $Item
        }
        # Create a fresh hashtable and populate it with the default values.
        $Item = [ordered]@{
            Name   = $ItemName
            UUID   = $null
            Type   = 'TYPE_UNKNOWN'
            Rarity = 'RARITY_UNKNOWN'
        }
    }
    else {
        # Not a new item entry, so look for the current item entrys data.
        # Check if the current line is the item type.
        if ($Line[$l] -match 'type "(?<Type>\w+)"') {
            # Update the hashtable with the found value.
            $Item.Type = $Matches.Type
        }
        # Check if the current line is the item rarity.
        if ($Line[$l] -match '^data "Rarity" "(?<Rarity>\w+)"') {
            # Update the hashtable with the found value.
            $Item.Rarity = $Matches.Rarity
        }
        # Check if the current line is the item UUID.
        if ($Line[$l] -match '^data "RootTemplate" "(?<UUID>[a-f0-9-]+)"') {
            # Update the hashtable with the found value.
            $Item.UUID = $Matches.UUID
        }
    }
}

# Export the items to a the items CSV-file. Using semi-colon (;) as delimiter, simply because the CSV file will automatically be shown in colums, in spreadsheet programs.
$Items | Sort-Object -Property Name | Export-Csv -Force -NoTypeInformation -Encoding Default -Delimiter ';' -Path $ItemsCsvPath

# Build the Cheat Table.
foreach ($t in ($Items | Select-Object -ExpandProperty Type -Unique)) {
    $CtFile = "bg3_$($t.ToLower()).CT"
    $CtPath = Join-Path -Path $CheatTablesFolder -ChildPath $CtFile
    $CheatID = 1
    $CheatTableHead.Replace('@@CE_ID@@', $CheatID) | Out-File -Force -Encoding default -FilePath $CtPath
    foreach ($i in ($Items | Where-Object { $_.Type -eq $t} | Sort-Object -Property Name)) {
        $CheatID++
        $CheatEntryTemplate.Replace('@@CE_ID@@', $CheatID).Replace('@@ITEM_NAME@@', $i.Name).Replace('@@RARITY_COLOR@@', $RarityColor."$($i.Rarity)").Replace('@@ITEM_UUID@@', $i.UUID) | Out-File -Append -Encoding default -FilePath $CtPath
    }
    $CheatTableFoot | Out-File -Append -Encoding default -FilePath $CtPath
}
The second script was an attempt to find ALL items, as it looked like all items were stored in the RootTemplates-files. I also wanted the localized names, so the script will also find that and add to the list. This script is VERY SLOW. First run (which generated the attached bg3_items_v2.txt-file) took more than 14 hours to complete (14 hours, 5 minutes, 2 seconds and 404 milliseconds to be exact).
It requires all the binary .lsf-files to be converted .lsj JSON-files. Easily done using the ConverterApp.exe that is included in Norbyte's ExportTool.
bg3_items_v2.ps1

Code: Select all

$VerbosePreference = 'SilentlyContinue'
$VerbosePreference = 'Continue'
$Stopwatch = New-Object -TypeName System.Diagnostics.Stopwatch
$Stopwatch.Start()

$DocumentsFolder = [System.Environment]::GetFolderPath('MyDocuments')
$CheatTablesFolder = Join-Path -Path $DocumentsFolder -ChildPath 'My Cheat Tables'
$CsvFile = 'bg3_allitems.csv'
$CsvPath = Join-Path -Path $CheatTablesFolder -ChildPath $CsvFile

$BasePath = 'C:\Games\BG3-Tools\UnpackedData'

$LocalizationPath = "$($BasePath)\English\Localization\English\english.xml"

$RootTemplates = @(
     "$($BasePath)\Shared\Public\Shared\RootTemplates"
    ,"$($BasePath)\Shared\Public\SharedDev\RootTemplates"
    ,"$($BasePath)\Gustav\Public\Gustav\RootTemplates"
    ,"$($BasePath)\Gustav\Public\GustavDev\RootTemplates"
)

$LocalizationData = [xml](Get-Content -Encoding Default -Path $LocalizationPath)

$RegexUUID = [regex]'^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$'

function Get-TemplateData {
	[CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [System.IO.FileInfo]
        $Path
        ,
        [Parameter(Mandatory = $true)]
        [guid]
        $Id
    )
    Write-Verbose -Message "Fn: Get-TemplateData -Id '$($Id)'"
    $Template = Join-Path -Path $Path -ChildPath "$($Id).lsj"
    $Success = $false
    if (Test-Path -Path $Template) {
        $Success = $true
        try {
            $Data = Get-Content -Raw -Encoding Default -Path $Template | ConvertFrom-Json
        }
        catch {
            $Success = $false
        }
    }
    if ($Success) {
        return $Data.save.regions.Templates.GameObjects[0]
    }
}


$Items = @()
$Files = Get-ChildItem -Path $RootTemplates -Filter *.lsj
Write-Output '"UUID";"Name";"Stats";"DisplayName";"Description"' | Out-File -Force -Encoding default -FilePath $CsvPath
foreach ($f in $Files) {
    $TemplatePath = $f.Directory.FullName
    $TemplateId   = $f.BaseName
    $Item = [ordered]@{
        UUID        = $f.BaseName
        Name        = $null
        Stats       = $null
        DisplayName = $null
        Description = $null
    }
    Write-Verbose -Message "L1: Read '$($f.BaseName)'."
    do {
        $Data = Get-TemplateData -Path $TemplatePath -Id $TemplateId
        if ('Name' -notin $Data.psobject.Properties.Name) {
            Write-Verbose -Message "L2: Name missing for '$($f.BaseName)'."
            break
        }
        foreach ($p in $Data.psobject.Properties.Name) {
            switch ($p) {
                'Name' {
                    if ($null -eq $Item.Name) {
                        Write-Verbose -Message "L3: Adding Name '$($Data.Name.value)'."
                        $Item.Name = $Data.Name.value
                    }
                }
                'Stats' {
                    if ($null -eq $Item.Stats) {
                        Write-Verbose -Message "L3: Adding Stats '$($Data.Stats.value)'."
                        $Item.Stats = $Data.Stats.value
                    }
                }
                'DisplayName' {
                    if ($null -eq $Item.DisplayName) {
                        $LocalizedName = ($LocalizationData.contentList.content | Where-Object {
                            $_.contentuid -eq $Data.DisplayName.handle
                        }).'#text'
                        Write-Verbose -Message "L3: Adding DisplayName '$($LocalizedName)'."
                        $Item.DisplayName = $LocalizedName
                    }
                }
                'Description' {
                    if ($null -eq $Item.Description) {
                        $LocalizedName = ($LocalizationData.contentList.content | Where-Object {
                            $_.contentuid -eq $Data.Description.handle
                        }).'#text'
                        Write-Verbose -Message "L3: Adding Description '$($LocalizedName)'."
                        $Item.Description = $LocalizedName
                    }
                }
            }
        }
        $TemplateId = $Data.ParentTemplateId.value
    } while ($Data.psobject.Properties.Name -contains 'ParentTemplateId' -and $Data.ParentTemplateId.value -match $RegexUUID)
    Write-Verbose -Message "L1: Done '$($f.BaseName)'."
    if ($null -eq $Item.DisplayName) {
        Write-Verbose -Message "L1: DisplayName missing for '$($f.BaseName)'."
        continue
    }
    $ItemObject = New-Object -TypeName psobject -Property $Item
    $ItemObject | ConvertTo-Csv -NoTypeInformation -Delimiter ';' | Select-Object -Skip 1 | Out-File -Append -Encoding default -FilePath $CsvPath
    #$Items += $ItemObject
}

#$Items | Export-Csv -Force -NoTypeInformation -Encoding Default -Delimiter ';' -Path $CsvPath

$Stopwatch.Stop()
$Stopwatch.Elapsed
Disclaimer!
Zanzer deserves all the credit for the Cheat Tables.
Evenless created an excel file for UUIDs items. It gets updated, I think last time I used the excel table. Easier to search

paludettogamer
What is cheating?
What is cheating?
Posts: 3
Joined: Tue Aug 15, 2023 1:49 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by paludettogamer »

Hey guys, I really thank you for these amazing tables. I just have one question about the Item Spawner. It works great, but sometimes I do get random crashes when I click the spawn command. There's times that I can spawn four different items in a row, there's times game crashes first or second try. Is there a way to make the code/process more stable? Or is it a game engine thing? Not complaining, just asking. Again thanks for the magical tables.

jojoz
Noobzor
Noobzor
Posts: 8
Joined: Mon Aug 14, 2023 11:44 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by jojoz »

jojoz wrote:
Tue Aug 15, 2023 12:12 pm
jojoz wrote:
Tue Aug 15, 2023 5:25 am
jojoz wrote:
Tue Aug 15, 2023 3:12 am

I've been trying this below and it hasn't been working it keeps showing up as failure

[ENABLE]
{$lua}
if syntaxcheck then return end
local uuid = "a3802564-7ed0-46d2-bbf6-8dd8fc065fe1"
local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)

local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)

local cmdStr2 = getAddress("cmdStr2")
writeString(cmdStr2, player)
writeBytes(cmdStr2 + #player, 0)
executeCodeEx(0, nil, cmdCall)
PrepareCall("AddPartyFollower")
writePointer(cmdArgs + 0x18, cmdStr2)
writePointer(cmdArgs + 0x08, cmdStr1)
writeString(cmdStr1, uuid)
writeBytes(cmdStr1 + #uuid, 0)
executeCodeEx(0, nil, cmdCall)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}
assert(true)
[DISABLE]
still need some help with this. I've tried the npc spawner, but they just spawn in and I can't talk to them at all. kinda new to this whole thing so I'm not too familiar with some stuff, but I've tried to setflag stuff and nothing's really worked for me. I just want Karlach as a companion since I lost the timed quest with her and now she won't spawn at all.
^

TravisScottex
What is cheating?
What is cheating?
Posts: 1
Joined: Tue Aug 15, 2023 8:12 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by TravisScottex »

How can I remove the dice bonus? I deactivated it but I have the +50 left

vgoy1082
Cheater
Cheater
Posts: 38
Joined: Sat Jan 22, 2022 1:13 am
Reputation: 3

Re: z Baldur's Gate 3

Post by vgoy1082 »

nell9 wrote:
Tue Aug 15, 2023 1:20 pm
Spoiler
vgoy1082 wrote:
Tue Aug 15, 2023 1:04 pm
nell9 wrote:
Tue Aug 15, 2023 12:08 pm
Please can someone explain me how to add Karlach as companion using
ClearFlagOnPlayer()
SetFlagOnPlayer()

I've tried:

Code: Select all

Debug_AddKarlach = "ddbad09f-940f-4d06-b214-0d127f657e8a",
GLO_Origin_PartOfTheTeam_Karlach = "b1e6f12a-600a-4e2e-9871-b08a9fe3a617",
and

Code: Select all

KARLACH = "a3802564-7ed0-46d2-bbf6-8dd8fc065fe1", --KARLACH 
KARLACHAVATAR = "9f241ff7-bfb3-4826-87c6-00f10937adca", --KARLACHAVATAR
KARLACHCAMP = "96af8618-d785-4edc-909e-e8fc25252a1a", --KARLACHCAMP
KARLACHCOMPANION = "c97e0ee2-e8f1-4593-95ed-1e32a08b146d", --KARLACHCOMPANION
KARLACHPARTY = "124a4ba3-5ec4-4288-be42-4617997a1af7",  --KARLACHPARTY
without any result, I can make her stay at camp but she never follow me please somoene explain what i've did wrong and why she left sudden

This is my code

Code: Select all

flag = {
GLO_Origin_Avatar_Karlach = "b5ad4b07-9522-47ec-98e6-85c28df64dc5",
GLO_Origin_PartOfTheTeam_Karlach = "b1e6f12a-600a-4e2e-9871-b08a9fe3a617",
Debug_AddKarlach = "ddbad09f-940f-4d06-b214-0d127f657e8a",
MaybeRecruitKarlach = "3e847e3c-698b-ea4b-9173-93e9209ba29c",
PLA_KarlachRecruitment_Event_KarlachLeaves = "3c7fc104-976e-4573-b18e-f1ffd4eebab2",
CAMP_Jergal_State_CanResurrectKarlach = "e0f009cb-6e6d-4f4f-b097-fa418ce7b430",
CAMP_Jergal_State_PartyMemberDead = "9e29c6e8-d087-4235-9930-43e104277e29",
CAMP_Jergal_State_WillResurrectKarlach = "b5b85189-fe48-4a16-99fe-e76149c62432",
KARLACH = "a3802564-7ed0-46d2-bbf6-8dd8fc065fe1", --KARLACH 
KARLACHAVATAR = "9f241ff7-bfb3-4826-87c6-00f10937adca", --KARLACHAVATAR
KARLACHCAMP = "96af8618-d785-4edc-909e-e8fc25252a1a", --KARLACHCAMP
KARLACHCOMPANION = "c97e0ee2-e8f1-4593-95ed-1e32a08b146d", --KARLACHCOMPANION
KARLACHPARTY = "124a4ba3-5ec4-4288-be42-4617997a1af7",  --KARLACHPARTY
Debug_RemoveHideKarlach = "2c195909-d102-414c-8402-2da115b43717",
MaybeRecruitKarlach = "3e847e3c-698b-ea4b-9173-93e9209ba29c" --360e8b56-3608-33c5-fa82-ec37ecd6b51a_MaybeRecruitKarlach
}

--add = "ddbad09f-940f-4d06-b214-0d127f657e8a" --Debug_AddKarlach

--SetFlagOnPlayer(flag)
--SetFlagOnPlayer(flag2)

--ClearFlagOnPlayer(flag)
print("\n\n\n\n\n")
for n,val in pairs(flag) do
    local hasFlag = GetFlagOnPlayer(val)
    print(n, (hasFlag == 1 and "Yes" or "No"))
    --print("val: ", val, "flag: ", flag[n], n)
end


--SetFlagOnPlayer(flag["MaybeRecruitKarlach"])
--SetFlagOnPlayer(flag["Debug_AddKarlach"])
--SetFlagOnPlayer(flag["GLO_Origin_PartOfTheTeam_Karlach"])
--ClearFlagOnPlayer(flag["KARLACH"])
--ClearFlagOnPlayer(flag["KARLACHCAMP"])
--ClearFlagOnPlayer(flag["KARLACHCOMPANION"])
--SetFlagOnPlayer(flag["KARLACHPARTY"])
this helped me add Halsin, i noticed that if i add him in past act 2 he wouldnt join my party, but if i added him in act 2 he automatically joins, some of his questline is bugged tho doin this, but i can speak to him in camp and open up other dialog, maybe you need to reload an earlier save to get karlach to stay.

I've tryied that once but doesn't work, for me is impossible unfortunate, her quest line is bugget for example she always leave if "I travel through the Underdark" or "Travel to the montain pass" it doesn't even make sense why she leave if I do those objective
She just disagreed with my travel lol and say:
Look, I think we should go our separate ways. I've spend long enough in the Hells to know a bad situation when I see one.
I was wrong to think there could've been something between us. We're just different.
Good luck, soldier. At the rate you're going, you're going need it.
Wtf does this even mean?! Why she disagreed when I want to travel...


I found the solution why she leave party!
Her approval suddent drop after traveling so by getting her on green side she will stay... I have no clue why after traveling her approval drop out of the blue


EVERY TIME YOU LOAD SAVE SHE IS DISAGREDING WITH YOU so you cannot keep her approval from droping as long you save adn reload she will leave you because she disagreed on whatever flying fk she wants
in my save Halsin is the same thing, except that if you load him in act 2 he stays the entire act, but you still cant complete the quests to permanently recruit him and he will leave upon progressing to act 3.. his approval rating does not matter.

palasx
Noobzor
Noobzor
Posts: 13
Joined: Mon Dec 27, 2021 7:45 pm
Reputation: 2

Re: z Baldur's Gate 3

Post by palasx »

Tried to add these functions:

Code: Select all

function AddBoostsToWeapon(Boosts)
  local item = GetEquippedWeapon()
  AddBoosts(item, Boosts, 0, 0)
end

function RemoveBoostsFromWeapon(Boosts)
  local item = GetEquippedWeapon()
  RemoveBoosts(item, Boosts, 0, 0)
end
and then tried the cheat:

Code: Select all

{$lua}
if syntaxcheck then return end
[ENABLE]
AddBoostsToWeapon("Ability(Strength,12)")
[DISABLE]
RemoveBoostsFromWeapon("Ability(Strength,12)")
Could not add a Boost to the equipped weapon. Anyone have any definitive reason this doesnt work? only STATUSes for wepaons/items?

Sliding_into_the_DMs
Noobzor
Noobzor
Posts: 7
Joined: Sat Sep 16, 2017 4:54 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by Sliding_into_the_DMs »

Is there a way to reduce my maximum health? I love the extended tool box of higher levels but I don't want to entirely trivialize Act I combat with a really high health pool.

KishudarK
Cheater
Cheater
Posts: 37
Joined: Sat Jun 13, 2020 11:44 pm
Reputation: 2

Re: z Baldur's Gate 3

Post by KishudarK »

Is there any way to to trigger camp events without time passing in the outside?

Slannesh
What is cheating?
What is cheating?
Posts: 4
Joined: Tue Apr 06, 2021 11:43 am
Reputation: 0

Re: z Baldur's Gate 3

Post by Slannesh »

Did anyone know how i can add more feats to my character (like ATHLETE, DUAL WIELDER? ?
Also add mor abilities checks (like PERSUASION, ACROBATICS, etc)?

Kopekci
What is cheating?
What is cheating?
Posts: 1
Joined: Tue Aug 15, 2023 9:13 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by Kopekci »

Has anyone find out the dating flags?, the approval scripts doesnt work by the way

CalumWulfe
What is cheating?
What is cheating?
Posts: 1
Joined: Tue Aug 15, 2023 9:30 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by CalumWulfe »

is there a place that lists the older versions of the table?

rafaelrennow
Cheater
Cheater
Posts: 31
Joined: Thu Oct 19, 2017 1:31 pm
Reputation: 6

Re: z Baldur's Gate 3

Post by rafaelrennow »

Hello! Is the +1 Inspiration Point working for everyone? It's not working for me at all and I'm not sure if I need to to anything other than just check and uncheck the option like most of the "on demand cheats". I even tried to save after activating it and reloading to see if the number would go up, but it won't.

Thanks!

Post Reply

Who is online

Users browsing this forum: admantx, AhrefsBot, Google Adsense [Bot], Nope4200, SemrushBot, smashbro596