z Baldur's Gate 3

Upload your cheat tables here (No requests)
Fieryabyss
Noobzor
Noobzor
Posts: 8
Joined: Mon Sep 25, 2023 3:32 pm
Reputation: 3

Re: z Baldur's Gate 3

Post by Fieryabyss »

Filipiano wrote:
Fri Sep 29, 2023 8:18 pm
Hello, I have a problem - my character is stuck in the camp. She is constantly incapacitated while sleeping and the effect does not wear off. The restore party does not work on cheat engine. Please help me how to remove this effect/spell, because I can't go further with the plot.
Thank you very much in advance.
Can you tell what the exact spell or affect is called. there are alot of status affects and conditions that it could be.
Additionally a quick google search says that other people with a similar problem had a character stuck in dialogue and had to switch to a awake character and try talking to others.

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

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 »

HenryEx wrote:
Fri Sep 29, 2023 2:28 pm
wingzero wrote:
Fri Sep 29, 2023 4:17 am
after Hotfix #7 i can no longer enable " Last Item Moved (moved item must have quantity of 2 or more) " in table v10
code slightly changed, uses a variant with shorter opcodes now (this might change back in a later update, it's compiler fuckery)

changed the entry for Hotfix #7, copy&paste into your cheat table, probably keep the old version around for next patches and just try which version works:

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
  <CheatEntries>
    <CheatEntry>
      <ID>1</ID>
      <Description>"Last Item Moved (moved item must have quantity of 2 or more) [short opcode]"</Description>
      <Options moHideChildren="1"/>
      <LastState/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscanmodule(LastItemMoved,$process,44 38 ?? ?? 0F 85 ?? ?? ?? ?? 48 8D ?? ?? 48 8B ?? ?? E8)
alloc(newmem,$1000,LastItemMoved)

label(LastItemMovedPtr)
label(LastItemMovedBkp)
label(return)

newmem:
LastItemMovedBkp:
  readmem(LastItemMoved+A,8)
  mov rax,LastItemMovedPtr
  mov [rax],rcx
  jmp return

align 10
LastItemMovedPtr:
  dq 0

LastItemMoved+A:
  jmp newmem
  nop 3
return:
registersymbol(LastItemMoved)
registersymbol(LastItemMovedBkp)
registersymbol(LastItemMovedPtr)

[DISABLE]
LastItemMoved+A:
  readmem(LastItemMovedBkp,8)
unregistersymbol(LastItemMoved)
unregistersymbol(LastItemMovedBkp)
unregistersymbol(LastItemMovedPtr)
dealloc(newmem)

</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>2</ID>
          <Description>"Quantity"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>LastItemMovedPtr</Address>
          <Offsets>
            <Offset>4</Offset>
            <Offset>10</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
  </CheatEntries>
</CheatTable>
Thanks it worked

hexa34041
What is cheating?
What is cheating?
Posts: 2
Joined: Tue Aug 01, 2023 11:56 am
Reputation: 0

Re: z Baldur's Gate 3

Post by hexa34041 »

I'm trying to spawn in Ring of Spiteful Thunder but it spawns in as common ring with no effects. Does anyone know what's causing this?
uuid i used to spawn is 5c05ff73-9d0d-4d58-b93a-e4b448a1e388
Image

kidicarus
Novice Cheater
Novice Cheater
Posts: 22
Joined: Sat Jan 15, 2022 3:09 am
Reputation: 3

Re: z Baldur's Gate 3

Post by kidicarus »

how would i find character uuids? im new to modding bg3 and can find spells and items etc just fine but cant find uuids for characters, ive searched this thread through google but there isnt any info on that, theres the google docs in this thread but i cant find what im looking for in there

Cornberry
Noobzor
Noobzor
Posts: 8
Joined: Sat Sep 30, 2023 7:10 am
Reputation: 1

Re: z Baldur's Gate 3

Post by Cornberry »

dardack wrote:
Tue Aug 15, 2023 6:45 pm
BoehserOnkel wrote:
Tue Aug 15, 2023 6:43 pm
dardack wrote:
Tue Aug 15, 2023 6:40 pm


So i loaded an old save, the Item is definetely Chapter2: S_GLO_OrpheusChapter2_4dbaf850-49ff-4e41-adc2-7054e416c960
From the last dropped item UUID. But I'm not able to convert that to spawn in my newest save, don't want to loss 4 hours of play. Anyone know how to convert?
tested - worked
Oh I must of been using an old version of the script, that worked. Ok now to use on newer save.
Do you mind telling me what you mean by old version of the script? I'm trying to do the same thing you did and spawn Orpheus Ch2 but nothing spawns when I try...

Cornberry
Noobzor
Noobzor
Posts: 8
Joined: Sat Sep 30, 2023 7:10 am
Reputation: 1

Re: z Baldur's Gate 3

Post by Cornberry »

f0rresty wrote:
Sat Aug 12, 2023 8:58 pm
Still searching for the UUID of Orpheus book 2. After reading through this topic, no one ever managed to find the correct book; all the UUIDs in this topic point to items that don't progress the quest and after about an hour of searching through the files I don't really think I'll find any other items than the ones that have already been found and posted here.
There is, however, a "Last Item Dropped UUID" option, does anyone have any insight into how that works? Couldn't figure that one out and didn't find any explanation in this topic, either.

EDIT:
Figured out how to use Last Item Dropped UUID, feel stupid now. For anyone else that wants to use this: simply activate the option and THEN drop something on the ground. It'll spit out the item in the value.

Also: UUID for Orpheus Book 2 is "4dbaf850-49ff-4e41-adc2-7054e416c960". Progresses the quest as it should.
Hey if you're still around, could I get some help with the spawning? I've tested spawning other items and it works, but this freaking book is not spawning at all. I even double checked the UUID going back to an old save to find it myself. Nothing spawns. Is that just a me thing?

vaux
What is cheating?
What is cheating?
Posts: 1
Joined: Sat Sep 30, 2023 7:34 am
Reputation: 0

Re: z Baldur's Gate 3

Post by vaux »

randompenguin wrote:
Thu Aug 31, 2023 6:20 pm
Zanzer wrote:
Thu Aug 31, 2023 12:01 pm
randompenguin wrote:
Thu Aug 31, 2023 5:09 am
Hi, has anyone figured out how to add the passive blessing Loviatar's Love back if you've lost it from dying? I didn't realize this got rid of a buff I thought was permanent, and I'd have to reload several hours to get it back. I did a quick search through this thread and looked through the available passives, but I didn't see an answer. It looks like some of the other similar passives have been found (Boooal's Blessing and Volo's Eye) but I didn't see this one or Morninglord's Radiance.

Code: Select all

status = {
"GOB_PENITENT",
"GOB_CALMNESS_IN_PAIN",
"GOB_CALMNESS_IN_PAIN_ACTIVE"
}
ApplyStatusToPlayer(status)
Thank you, this worked for me!
How/where do you put this? I tried a few different places and couldn't figure it out. I was looking for other similar effects in the CT but couldn't find any

Cornberry
Noobzor
Noobzor
Posts: 8
Joined: Sat Sep 30, 2023 7:10 am
Reputation: 1

Re: z Baldur's Gate 3

Post by Cornberry »

sicwan wrote:
Wed Aug 09, 2023 5:51 pm
BoehserOnkel wrote:
Wed Aug 09, 2023 3:54 pm
sicwan wrote:
Wed Aug 09, 2023 3:42 pm
does anyone have the UUID for Book 2 of the Prince of the Comet quest? this here appears to be the first one,

"0f5d749b-b620-43e0-bf06-ea4e9f63b642";"BOOK_ORI_Laezel_OrpheusChapter1_HiddenText";;"Orpheus, Prince of the Comet, Part One: Betrayal";"A round slate with circular symbols etched into it."

but I can't find the one for 2, and I'm not able to go back
"469db08a-c4ef-47f4-8147-2c2832128c80";"BOOK_UNI_MOO_OrpheusExchange2";"OBJ_Scroll";"Missive from Ketheric";

"5b32ec11-7aa3-431c-a6a9-f861fd3a7e4a";"BOOK_UNI_INT_OrpheusMonksBook_03";;"Inscribed Githyanki Slate";"This stone disc is carved with circular runes and pictographs."

"6bc9784f-1019-4c33-bd04-e69bec76bb76";"BOOK_UNI_MOO_OrpheusExchange1";"OBJ_Scroll";"Missive from Gortash";

"82ae5b58-00ef-470f-a87e-d32c4369fce6";"BOOK_UNI_CRE_OrpheusMonksBook_01";;"Inscribed Githyanki Slate";"This stone disc is carved with circular runes and pictographs."

"b2fccde5-4dfd-4e2d-9645-d101de82a8c0";"BOOK_UNI_INT_OrpheusMonksBook_02";;"Inscribed Githyanki Slate";"This stone disc is carved with circular runes and pictographs."

thats all
damn, tried them and none of them are triggering a quest update, guess that quest is going unfinished.. oh well
Hey, can I ask how you actually found the first book UUID?

Cornberry
Noobzor
Noobzor
Posts: 8
Joined: Sat Sep 30, 2023 7:10 am
Reputation: 1

Re: z Baldur's Gate 3

Post by Cornberry »

BoehserOnkel wrote:
Tue Aug 15, 2023 6:43 pm
dardack wrote:
Tue Aug 15, 2023 6:40 pm
dardack wrote:
Tue Aug 15, 2023 6:32 pm


I saw the spoiler, but the links are empty to me (first post).

EDIT: They now show up for me. Still no chapter 2, but mention of books 1-3 and book 1 doesn't have description. GOing to try and spawn book 2 see what happens.
So i loaded an old save, the Item is definetely Chapter2: S_GLO_OrpheusChapter2_4dbaf850-49ff-4e41-adc2-7054e416c960
From the last dropped item UUID. But I'm not able to convert that to spawn in my newest save, don't want to loss 4 hours of play. Anyone know how to convert?
tested - worked
I don't know if they changed it, but this code is not working for me to spawn. It's definitely the code when I go back on an old save to find the UUID, but it's not the right one for spawning.

Cornberry
Noobzor
Noobzor
Posts: 8
Joined: Sat Sep 30, 2023 7:10 am
Reputation: 1

Re: z Baldur's Gate 3

Post by Cornberry »

EvenLess wrote:
Fri Aug 04, 2023 11:42 pm
  • 2023-08-20:
    1. Another list (.xlsx/Excel), available as a [Link]. It's even too large for Google Spreadsheets to import it.
      It contains ALL "GameObjects" found in ALL RootTemplates, with ALL attributes. 25139 rows, and more columns (attributes) I care to count (A to QT). A lot of these columns/attributes are probably irellevant, but it was easier to just extract all than try to figure out what to filter.
      The PowerShell script I wrote to do this, are inserted below. It took 30 minutes to complete on my system.
      Spoiler

      Code: Select all

      $Stopwatch = New-Object -TypeName System.Diagnostics.Stopwatch
      $Stopwatch.Start()
      $UnpackedDataFolder = [System.IO.FileInfo]'C:\Games\BG3-Tools\BG3-Modders-Multitool\UnpackedData'
      $MyDocuments        = [System.IO.FileInfo][System.Environment]::GetFolderPath('MyDocuments')
      $CheatTableFolder   = [System.IO.FileInfo]"$($MyDocuments.FullName)\My Cheat Tables\bg3"
      $LocalizationPath   = [System.IO.FileInfo]"$($UnpackedDataFolder.FullName)\English\Localization\English\english.xml"
      $CsvPath            = "$($CheatTableFolder)\all_templates.csv"
      
      $LocalizationData   = New-Object -TypeName System.Xml.XmlDocument
      $LocalizationData.PreserveWhitespace = $true
      $LocalizationData.Load($LocalizationPath.FullName)
      
      $RootTemplateFolders = @(
           "$($UnpackedDataFolder.FullName)\Shared\Public\Shared\RootTemplates"
          ,"$($UnpackedDataFolder.FullName)\Shared\Public\SharedDev\RootTemplates"
          ,"$($UnpackedDataFolder.FullName)\Gustav\Public\Gustav\RootTemplates"
          ,"$($UnpackedDataFolder.FullName)\Gustav\Public\GustavDev\RootTemplates"
      )
      $RootTemplates = Get-ChildItem -Recurse -File -Filter *.lsx -Path $RootTemplateFolders
      
      # Empty array to contain the objects.
      $Objects    = @()
      # Empty array to contain the attributes.
      $Attributes = @()
      foreach ($Template in $RootTemplates) {
          $Object = [ordered]@{}
          $XmlDocument = New-Object -TypeName System.Xml.XmlDocument
          $XmlDocument.PreserveWhitespace = $true
          $XmlDocument.Load($Template.FullName)
          $Nodes = $XmlDocument.SelectNodes("//node[@id='GameObjects']")
          if ($Nodes.Count -eq 0) { continue }
          $Nodes.attribute | ForEach-Object {
              $k = $_.id
              $v = $_.value
              if ($k -notin $Attributes) {
                  $Attributes += $k
              }
              $Object.Add($k, $v)
              if ($_.type -eq 'TranslatedString') {
                  $k = "$($k)English"
                  $v = $_.handle
                  if ($k -notin $Attributes) {
                      $Attributes += $k
                  }
                  $Object.Add("$($k)English", $LocalizationData.SelectSingleNode("//content[@contentuid='$($v)']").'#text')
              }
          }
          $Objects += New-Object -TypeName PSCustomObject -Property $Object
      }
      # All data are gathered, but we need to create a new object, where every entry contains all the same attribute/property keys, otherwise exporting to Csv apparently doesn't work very well.
      
      # Empty array to contain the objects.
      $oArray = @()
      foreach ($o in $Objects) {
          # Create/reset the hashtable used to all the attributes/properties.
          # The ones explicitly listed, are so they are sorted first (i.e. the first columnds).
          $oTable = [ordered]@{
              Type = ''
              MapKey = ''
              ParentTemplateId = ''
              Name = ''
              DisplayNameEnglish = ''
          }
          # Sort the collected attributes and add the rest to the hashtable.
          $Attributes | Sort-Object -Unique | ForEach-Object {
              if ($_ -notin $oTable.Keys) {
                  $oTable.Add($_, '')
              }
          }
          # Loop through all the attributes/properties.
          foreach ($k in $o.psobject.Properties.Name) {
              # Update the matching keys in the hashtable, with the collected value.
              $oTable."$($k)" = $o."$($k)"
          }
          # Add the table to the array.
          $oArray += New-Object -TypeName PSCustomObject -Property $oTable
      }
      $oArray | Export-Csv -NoTypeInformation -Force -Encoding UTF8 -Delimiter ';' -Path $CsvPath
      $Stopwatch.Stop()
      $Stopwatch.Elapsed
  • 2023-08-19:
    1. Created new items list, available as a [Link] (too large to attach without compressing it).
      It contains ALL of type=item found in the RootTemplates, as well as various attributes for the items, that can be used for searching/filtering.
  • 2023-08-19:
    1. Added bg3_EvenLess_2023.08.19.CT.
      Minor fixes. Addes scrolls.
    2. Added bg3_EvenLess_Scrolls_20230819T0856582171.CT.
      Just the scrolls. For merging with other tables.
    3. Added bg3_scrolls.txt.
      CSV with the scrolls, with names.
  • 2023-08-18:
    1. Added bg3_EvenLess_2023.08.18.CT.
  • 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.
Were you ever able to find Orpheus Book Chapters 2 and 3?

EvenLess
Expert Cheater
Expert Cheater
Posts: 181
Joined: Fri Aug 04, 2023 10:59 pm
Reputation: 207

Re: z Baldur's Gate 3

Post by EvenLess »

Cornberry wrote:
Sat Sep 30, 2023 7:50 am
EvenLess wrote:
Fri Aug 04, 2023 11:42 pm
...
Were you ever able to find Orpheus Book Chapters 2 and 3?
Haven't looked. But a quick search using (more or less) the approach I described in the post you quoted:
Gustav\Mods\GustavDev\Globals\CRE_Main_A\Items\_merged.lsf

Code: Select all

				<node id="GameObjects">
					<attribute id="BookType" type="uint8" value="8" />
					<attribute id="Description" type="TranslatedString" handle="h9b3da45age14cg4c7fga5a8g37034319e762" version="1" />
					<attribute id="DisplayName" type="TranslatedString" handle="he50c912cg3281g4ba6g8c36g7faebe9f2da6" version="7" />
					<attribute id="Flag" type="int32" value="1" />
					<attribute id="IsGlobal" type="bool" value="True" />
					<attribute id="LevelName" type="FixedString" value="CRE_Main_A" />
					<attribute id="MapKey" type="FixedString" value="4dbaf850-49ff-4e41-adc2-7054e416c960" />
					<attribute id="Name" type="LSString" value="S_GLO_OrpheusChapter2" />
					<attribute id="TemplateName" type="FixedString" value="1f4773b1-a218-46d6-ab3e-a5cd13dcc697" />
					<attribute id="Type" type="FixedString" value="item" />
					<attribute id="_OriginalFileVersion_" type="int64" value="144115207403209032" />
					<children>
						<node id="LayerList">
							<children>
								<node id="Layers">
									<children>
										<node id="Object">
											<attribute id="MapKey" type="FixedString" value="CRE_Main_A" />
											<children>
												<node id="Layer">
													<attribute id="Object" type="guid" value="0cdf52f2-9453-df63-13c3-cfad8fbdbd2a" />
												</node>
												<node id="Layer">
													<attribute id="Object" type="guid" value="3937977e-b5d9-5124-508e-c3654c9d9e03" />
												</node>
												<node id="Layer">
													<attribute id="Object" type="guid" value="6b7894d1-95f4-8221-636e-6754155d590c" />
												</node>
											</children>
										</node>
									</children>
								</node>
							</children>
						</node>
						<node id="OnUsePeaceActions">
							<children>
								<node id="Action">
									<attribute id="ActionType" type="int32" value="11" />
									<children>
										<node id="Attributes">
											<attribute id="Animation" type="FixedString" value="" />
											<attribute id="BookId" type="FixedString" value="ORI_Laezel_OrpheusChapter2" />
											<attribute id="Conditions" type="LSString" value="" />
										</node>
									</children>
								</node>
							</children>
						</node>
						<node id="Transform">
							<attribute id="Position" type="fvec3" value="1369.503 -0.0431124 -767.851" />
							<attribute id="RotationQuat" type="fvec4" value="0 0 0 1" />
							<attribute id="Scale" type="float" value="1" />
						</node>
					</children>
				</node>
Gustav\Mods\GustavDev\Globals\SCL_Main_A\Items\_merged.lsf

Code: Select all

				<node id="GameObjects">
					<attribute id="BookType" type="uint8" value="8" />
					<attribute id="Description" type="TranslatedString" handle="h90dffb60gdb34g49efgb976g5ef326a0f10f" version="1" />
					<attribute id="DisplayName" type="TranslatedString" handle="h96cd8f0ag004bg49f0gbf00gf07ee363e700" version="3" />
					<attribute id="Flag" type="int32" value="1" />
					<attribute id="IsGlobal" type="bool" value="True" />
					<attribute id="LevelName" type="FixedString" value="SCL_Main_A" />
					<attribute id="MapKey" type="FixedString" value="bad6bedb-5be9-407a-840e-977c2e23aba3" />
					<attribute id="Name" type="LSString" value="S_GLO_OrpheusChapter3" />
					<attribute id="TemplateName" type="FixedString" value="1f4773b1-a218-46d6-ab3e-a5cd13dcc697" />
					<attribute id="Type" type="FixedString" value="item" />
					<attribute id="_OriginalFileVersion_" type="int64" value="144115207403209020" />
					<children>
						<node id="LayerList">
							<children>
								<node id="Layers">
									<children>
										<node id="Object">
											<attribute id="MapKey" type="FixedString" value="SCL_Main_A" />
											<children>
												<node id="Layer">
													<attribute id="Object" type="guid" value="07f964f7-bdb6-68be-f41f-3c6bb4ecf4d6" />
												</node>
												<node id="Layer">
													<attribute id="Object" type="guid" value="ba49432f-9d08-98a9-2877-1b608e3b9079" />
												</node>
											</children>
										</node>
									</children>
								</node>
							</children>
						</node>
						<node id="OnUsePeaceActions">
							<children>
								<node id="Action">
									<attribute id="ActionType" type="int32" value="11" />
									<children>
										<node id="Attributes">
											<attribute id="Animation" type="FixedString" value="" />
											<attribute id="BookId" type="FixedString" value="ORI_Laezel_OrpheusChapter3" />
											<attribute id="Conditions" type="LSString" value="" />
										</node>
									</children>
								</node>
							</children>
						</node>
						<node id="Transform">
							<attribute id="Position" type="fvec3" value="-127.5312 38.52673 -182.3876" />
							<attribute id="RotationQuat" type="fvec4" value="0 0 0 1" />
							<attribute id="Scale" type="float" value="1" />
						</node>
					</children>
				</node>
Use the MapKey GUID

wolfdwarf
What is cheating?
What is cheating?
Posts: 1
Joined: Sat Sep 30, 2023 1:17 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by wolfdwarf »

efrog wrote:
Mon Aug 14, 2023 1:08 pm
bearsausage wrote:
Sun Aug 13, 2023 2:54 pm
Does anyone have the uuid of Ketheric's Netherstone? I am ready for the end in Act 3 but that stone is just...gone. Any help appreciated. Found it!
In case anyone is interested. I just ran a grep on the extracted gustav pak and the binary .lsf files matched the text "netherstone", and trial and error found it to be the following:
6f02fb92-21da-439b-a00c-ed9888aa5f0e
Using cheat engine edit SetFlag Script and enter uuid for Having gortash stone: "27dbf056-29ee-4d43-9ad9-4831fa2c8739", orin stone "818fd00e-6780-4712-980e-5c7c25ba9987" ketheric stone "0243527e-408f-4711-97a0-7759847bb00a", enter and execute one by one
it sets gameflags as if you have the stones and can enter the skiff

Hope this helps
apology for the noob question , but could you possibly give a real step-by-step idiot's guide on how to do this?

or rather any way to get kethric's stone / get on the skiff / move along?

I lost Kethric's netherstone and am so close to the end now!

edit: Somehow lost it. Really desperate. At the skiff ready to finish.

Looked everywhere chests in Outer City camp, Elfsong camp, inventories, frequented storekeeps, followed quests markers to nothing. Tried mods, tried cheat engine. Looked through the similar posts on here and elsewhere. Got as far as S_COL_CrownController_Ketheric_06b8891b-e71c-423b-8482-2680c3c16a4d , but nothing is working.

Did anyone find a solution? and if so can you explain it simply step-by-step? please.
Last edited by wolfdwarf on Sat Sep 30, 2023 2:26 pm, edited 1 time in total.

dezzter
Noobzor
Noobzor
Posts: 10
Joined: Wed Apr 19, 2017 2:11 am
Reputation: 3

Re: z Baldur's Gate 3

Post by dezzter »

Anyone know how to remove the ability to fly from my character who has it from sorc bloodline? I tried using the fireball remove spell with Projectile_Fly_DragonWings which I checked in progressions.lsx and spelllist.lsx is the correct spell ID, but it didn't work.

Zanzer
RCE Fanatics
RCE Fanatics
Posts: 1104
Joined: Fri Mar 03, 2017 10:48 pm
Reputation: 3574

Re: z Baldur's Gate 3

Post by Zanzer »

Tekrom0 wrote:
Sat Sep 30, 2023 2:00 am
Zanzer wrote:
Thu Sep 28, 2023 4:49 pm
On Demand Cheats has a script to Transform into Mind Flayer
Change the UUID in there to that of the Steel Walker. I see a few labeled Steel Watcher.
One of the possible rulesets even allows you to transform your abilities to match that creature as well.

Code: Select all

"27385ea6-d768-47ce-91b8-8d957c0aabd9"--SteelWatcher_Biped_A (Steel Watcher)
"70417e3e-9278-4f96-a1d8-5bd90bf5d07a"--SteelWatcher_Biped_A_Ranged
"ec2820db-afd7-4428-90bd-a0838949cc69"--SteelWatcher_Biped_B (Hellfire Watcher)
"80cb7cbd-41fc-4921-847b-d62f2517ddd9"--SteelWatcher_Biped_B_Ranged
"9337b42e-e302-4cd2-887d-7093d992e83b"--SteelWatcher_Biped_C (Hellfire Watcher)
"26fa3fe9-608c-4113-99a6-727781351ea4"--SteelWatcher_Quadruped_A (Steel Watcher Titan)
Oh sweet, thank you very much. Now my question is, what would I have to do in order to equip a Steel Watcher Weapon (SW Sword / SW CrossBow) onto my character? I'm still unable to equip either when I use the code. I have tried it as a disguise and as a Polymorph, but no success.

Is there a list of Ruleset UUIDs I can look at? I'm taking a guess in saying that switching my Ruleset UUID would allow me to equip it.

I know there used to be a bug that allowed you to equip Giant weapons by dragging your equipped weapon over the giant weapon, but I think they patched it out, as it doesn't work anymore, at least for me.
There is a Shapeshift folder inside the various Shared/SharedDev dumps. That's where all the ruleset UUIDs are.
Some rules contain: <attribute id="ApplySpellsFromTemplate" type="bool" value="true"/>

Zanzer
RCE Fanatics
RCE Fanatics
Posts: 1104
Joined: Fri Mar 03, 2017 10:48 pm
Reputation: 3574

Re: z Baldur's Gate 3

Post by Zanzer »

hexa34041 wrote:
Sat Sep 30, 2023 5:36 am
I'm trying to spawn in Ring of Spiteful Thunder but it spawns in as common ring with no effects. Does anyone know what's causing this?
uuid i used to spawn is 5c05ff73-9d0d-4d58-b93a-e4b448a1e388
Image
Maybe this will spawn you one

Code: Select all

{$lua}
if syntaxcheck then return end
[ENABLE]
GenerateTreasureBag("MOO_ZhentQuartermaster")
[DISABLE]

Post Reply

Who is online

Users browsing this forum: a1084894269, anthony9786, didin, Ginger256, giorgos9334, Google [Bot], Google Adsense [Bot], Jetadawoot, jonaaa, KKIceNinja, lormdoep, ndck@ModEngine, nickisnoob, thetopman