z Baldur's Gate 3

Upload your cheat tables here (No requests)
User avatar
Noway3
Expert Cheater
Expert Cheater
Posts: 117
Joined: Sat Aug 12, 2023 12:20 pm
Reputation: 148

Re: z Baldur's Gate 3

Post by Noway3 »

obi-wan-master-dilf wrote:
Thu Jan 11, 2024 12:04 am
Hello, Ive successfully added cheat engine and got it running with the help from the fearlessrevolution Discord, but I am trying to figure out how to add more spell slots, it looks like my lv 4 character can only get 3 lv1 2 lv 2 and 1 lv 3, is this restricted by level or is there something I can do to the script to give myself 4 lv1 3 lv2 and 2 lv 3?
This is part of the Dungeons & Dragons 5th Edition rules which BG3 tries to follow.

It is possible to modify this globally (and permanently) with a mod that would change the leveling tables but you can also modify it in game for a specific character either with the Cheat Engine or the Script Extender:

How to add a spell slot:
In these examples, you will add 1 slot to your level 3 memorized spells list to the currently selected character in the group.
  • With the Script Extender, in SE Console window, type this:

    Code: Select all

    Osi.AddBoosts(GetHostCharacter(), "ActionResource(SpellSlot,1,3)", "", GetHostCharacter())
    
  • With Zanzer's Cheat Engine table activated, in the CE console window type this:

    Code: Select all

    AddBoostsToPlayer("ActionResource(SpellSlot,1,3)")
    
  • It is actually also included in Zanzer's cheat table itself here:
    "Character Resource Cheats" -> "Add Resources" -> "Spell Slot (Level 3)"
Warning: these changes, like most boosts, are not persistent across saves (sorry for console users!)

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
Last edited by Noway3 on Sun Jan 14, 2024 11:22 am, edited 2 times in total.

User avatar
Noway3
Expert Cheater
Expert Cheater
Posts: 117
Joined: Sat Aug 12, 2023 12:20 pm
Reputation: 148

Re: z Baldur's Gate 3

Post by Noway3 »

SenorPlebeian wrote:
Tue Jan 09, 2024 1:38 am
Noway3 wrote:
Fri Jan 05, 2024 10:44 am
yabadaba wrote:
Fri Jan 05, 2024 2:07 am
I'm new to programming in cheat engine and lua, I'm trying to make a "Transform All" command cheat with the latest CE table, where the whole party transforms to a defined UUID. I searched the functions in Register Commands but didn't find one to get the whole party as a table

In the SE console I can use this to teleport the party, so I know there is a way to get the party as a table type:

Code: Select all

x,y,z = GetPosition(GetHostCharacter()) for i,v in ipairs(Osi.DB_PartyMembers:Get(nil)) do TeleportToPosition(v[1],x,y,z) end
But I couldn't figure out how to properly call Osi.DB_PartyMembers:Get(nil) using ExecuteCall

something like this:

Code: Select all

ExecuteCall("DB_PartyMembers:Get(nil)") --doesn't work
local party = GetArgAt(0) --doesn't work
--printf(party)
for i = 1, #party do
    --use party[i] for whatever
end
I don't really know how the commands are registered when the game loads but I'm assuming the problem is the ":Get(nil)" part, how do I properly call it and get the table value?
The functions OsiDatabase:Get(...) and OsiDatabase:Delete(...) are neat hooks available within Norbyte's Script Extender only.
And Osiris calls like Osi.IterateInventory(...) or Osi.IterateCharacters(...) require to register an event handler function, which is possible to implement within CE, in theory, but ... it's complicated!

There are may be ways to interface CE with SE but, well, you could as easily create a mod to do the stuff with SE and without CE!

I recall EvenLess and PeDaGaNG have posted pieces of code about getting a list of party members and apply "things" to them.
check their posts here: (No, I am a not a search bot, I just have a selective memory!)
Hey thank you for linking to these! I was curious if anyone found a function to pull out UUIDs of all the active party members for stuff like this, and now iterating on PeDaGanG's version of the script, I've been able to recreate a lot of Zanzer's helper functions using lambdas without needing to require some user overhead to annoyingly copy each UUID (like scrolling through each party member, activating GetHostCharacter, placing it in a list, and repeating for each different party member on every game load). Instead, I just need to activate it while having my character selected and it's good until I next change up my party composition. In that case, I just need to close and reopen it.

Code: Select all

{$lua}
if syntaxcheck then return end
-- Script to generate active party member list, activate first before running any of the party member functions listed in the script
-- companionInParty["FLAG_UUID_State_IsInParty"] = {"COMPANION_UUID", "DISPLAY_NAME"}
companionInParty = {
  ["ef789a01-f41e-4a7d-9097-fa9c4f1d0f16"] = {"c7c13742-bacd-460a-8f65-f864fe41f255", "Astarion"},
  ["639d141f-6fa8-4d93-8eb7-41243e0fea32"] = {"ad9af97d-75da-406a-ae13-7071c563f604", "Gale"},
  ["9a3ea4cd-3a44-40f7-9d63-2b29bdb28725"] = {"7628bc0e-52b8-42a7-856a-13a6fd413323", "Halsin"},
  ["1b86aa78-a2db-4faa-b4a6-c5591c03bac9"] = {"91b6b200-7d00-4d62-8dc9-99e8339dfa1a", "Jaheira"},
  ["eb7c4de0-36b7-4086-aa33-82c09596a395"] = {"2c76687d-93a2-477b-8b18-8a14b549304c", "Karlach"},
  ["3ee6b1f2-24f4-4e85-b7dc-49060e6d2699"] = {"58a69333-40bf-8358-1d17-fff240d7fb12", "Lae'zel"},
  ["aeb58e60-562a-4e20-8cb2-0deb03b010fc"] = {"0de603c5-42e2-4811-9dad-f652de080eba", "Minsc"},
  ["766b8981-eb17-3ec5-5d30-2626509c550f"] = {"25721313-0c15-4935-8176-9f134385451b", "Minthara"},
  ["9a029c5a-e3c3-45ef-9cd4-1cb45718deb1"] = {"3ed74f06-3c60-42dc-83f6-f034cb47c679", "Shadowheart"},
  ["3c0972ef-d7a4-46ac-abdd-0ce6aadd61b0"] = {"c774d764-4a17-48dc-b470-32ace9ce447d"; "Wyll"},
  ["126c47da-7d24-49ce-b06f-5a44f09ee87e"] = {"4888dfaa-2e0a-4c10-9c8a-d5345aeb4746", "DarkUrge"}
}

-- hireling["HIRELING_UUID"] = {"CLASS", "DISPLAY_NAME"}
hireling = {
    ["7bed07ee-d1db-498d-bbfd-600ddf04676e"] = {"Barbarian", "Eldra Luthrinn"},
    ["4d3c9cb3-ca34-46ba-9c81-44081270bfde"] = {"Bard", "Brinna Brightsong"},
    ["12e541ac-1eb3-4b8c-a8b8-95263e30b217"] = {"Cleric", "Zenith Feur'sel"},
    ["49f522f8-9ac9-431e-ab39-a45e38e222c2"] = {"Druid", "Danton"},
    ["d61d12ad-dc80-4805-8c6e-fb876da196cd"] = {"Fighter", "Varanna Sunblossom"},
    ["0b149cab-4438-467a-953d-8697535b953d"] = {"Monk", "Sina'zith"},
    ["244e782b-a99c-444a-bd8d-d356c26c2902"] = {"Paladin", "Kerz"},
    ["0488a406-402c-4bd1-ba38-63b28c112d8d"] = {"Ranger", "Ver'yll Wenkiir"},
    ["e4818484-7ee4-466b-82b3-60bbd7b2ff8f"] = {"Rogue", "Maddala Deadeye"},
    ["097aa418-eda5-47f9-867f-29a4339be03e"] = {"Sorcerer","Jacelyn"},
    ["ee3f1f8d-f2d1-43f2-aba0-72cacafce03c"] = {"Warlock", "Kree Derryck"},
    ["2c8c93f0-898b-42d6-b2ca-cf4922852632"] = {"Wizard", "Sir Fuzzalump"},
}

partyMember = {}

function setActivePartyMembers()
  partyMember = {}
  table.insert(partyMember, GetHostCharacter())
  for k,v in pairs(companionInParty) do
    local gotFlag = 0
    gotFlag = GetFlagOnPlayer(k)
    if gotFlag ~= nil and gotFlag ~= 0 then
      -- print(string.format("Companion '%s' is in your party.", v[2]))
      table.insert(partyMember, v[1])
    end
  end
  for k,v in pairs(hireling) do
    local gotFlag = 0
    gotFlag = GetFlag("0052da16-4401-4873-8176-16336d8942da", k)
    if gotFlag ~= nil and gotFlag ~= 0 then
      -- print(string.format("Hireling '%s' (%s) is in your party.", v[2], v[1]))
      table.insert(partyMember, k)
    end
  end
end

function onParty(func)
  local status = 0
  for i = 1, #partyMember do
    status = func(partyMember[i])
  end
  return status
end

function AddPassiveToParty(PassiveID)
  local func = function(player) AddPassive(player, PassiveID) end
  return onParty(func)
end

function RemovePassiveFromParty(PassiveID)
  local func = function(player) RemovePassive(player, PassiveID) end
  return onParty(func)
end

function AddBoostsToParty(Boosts)
  local func = function(player) AddBoosts(player, Boosts, 0, 0) end
  return onParty(func)
end

function RemoveBoostsFromParty(Boosts)
  local func = function(player) RemoveBoosts(player, Boosts, 0, 0, 0) end
  return onParty(func)
end

function ApplyStatusToParty(Status, Duration)
  local func = function(player) ApplyStatus(player, Status, Duration, 1, 0) end
  return onParty(func)
end

function RemoveStatusFromParty(Status)
  local func = function(player) RemoveStatus(player, Status, 0) end
  return onParty(func)
end

function AddSpellToParty(Spell)
  local func = function(player) AddSpell(player, Spell, 0, 1) end
  return onParty(func)
end

function RemoveSpellFromParty(Spell)
  local func = function(player) RemoveSpell(player, Spell, 0) end
  return onParty(func)
end

function SetTagOnParty(Tag)
  local func = function(player) SetTag(player, Tag) end
  return onParty(func)
end

function ClearTagOnParty(Tag)
  local func = function(player) ClearTag(player, Tag) end
  return onParty(func)
end


[ENABLE]
setActivePartyMembers()
[DISABLE]
{$asm}

With this enabled a lot of Player functions I can just change from Player to Party to more or less have the same effect on the party, like adding an extra bonus action

Code: Select all

[ENABLE]
{$lua}
if syntaxcheck then return end
AddBoostsToParty("ActionResource(BonusActionPoint,1,0)")
{$asm}
[DISABLE]
And for anything else that requires a UUID, I can just encapsulate it into a lambda and pass it as an argument to OnParty like so

Code: Select all

[ENABLE]
{$lua}
if syntaxcheck then return end
onParty(function(player) SetTag(player, "dc860a81-f3c2-4c1a-ab90-e7583324845c") end)
{$asm}
[DISABLE]
Only sucky part is I need to have it as its own separate script instead of part of the script after activating Register Commands so I can refresh the list of Party Members on the fly. I probably could set it up to initialize on Register Commands and then just set up the other script to reset it, though I like having the party logic all live in one specific place rather than across multiple scripts. Either way, this definitely has made a lot of console commands easier on me
How to apply Statuses/Boosts to the whole party:
I am simply doing it this way:
  1. A function that gets the list of actual party member

    Code: Select all

    function GetPartyMembers()
      companionInParty = {}
      -- companionInParty["FLAG_UUID_State_IsInParty"] = {"COMPANION_UUID", "DISPLAY_NAME"}
      companionInParty["ef789a01-f41e-4a7d-9097-fa9c4f1d0f16"] = {"c7c13742-bacd-460a-8f65-f864fe41f255", "Astarion"}
      companionInParty["639d141f-6fa8-4d93-8eb7-41243e0fea32"] = {"ad9af97d-75da-406a-ae13-7071c563f604", "Gale"}
      companionInParty["9a3ea4cd-3a44-40f7-9d63-2b29bdb28725"] = {"7628bc0e-52b8-42a7-856a-13a6fd413323", "Halsin"}
      companionInParty["1b86aa78-a2db-4faa-b4a6-c5591c03bac9"] = {"91b6b200-7d00-4d62-8dc9-99e8339dfa1a", "Jaheira"}
      companionInParty["eb7c4de0-36b7-4086-aa33-82c09596a395"] = {"2c76687d-93a2-477b-8b18-8a14b549304c", "Karlach"}
      companionInParty["3ee6b1f2-24f4-4e85-b7dc-49060e6d2699"] = {"58a69333-40bf-8358-1d17-fff240d7fb12", "Lae'zel"}
      companionInParty["aeb58e60-562a-4e20-8cb2-0deb03b010fc"] = {"0de603c5-42e2-4811-9dad-f652de080eba", "Minsc"}
      companionInParty["766b8981-eb17-3ec5-5d30-2626509c550f"] = {"25721313-0c15-4935-8176-9f134385451b", "Minthara"}
      companionInParty["9a029c5a-e3c3-45ef-9cd4-1cb45718deb1"] = {"3ed74f06-3c60-42dc-83f6-f034cb47c679", "Shadowheart"}
      companionInParty["3c0972ef-d7a4-46ac-abdd-0ce6aadd61b0"] = {"c774d764-4a17-48dc-b470-32ace9ce447d"; "Wyll"}
      companionInParty["126c47da-7d24-49ce-b06f-5a44f09ee87e"] = {"4888dfaa-2e0a-4c10-9c8a-d5345aeb4746", "DarkUrge"}
    
      hireling = {}
      -- hireling["HIRELING_UUID"] = {"CLASS", "DISPLAY_NAME"}
      hireling["7bed07ee-d1db-498d-bbfd-600ddf04676e"] = {"Barbarian", "Eldra Luthrinn"}
      hireling["4d3c9cb3-ca34-46ba-9c81-44081270bfde"] = {"Bard", "Brinna Brightsong"}
      hireling["12e541ac-1eb3-4b8c-a8b8-95263e30b217"] = {"Cleric", "Zenith Feur'sel"}
      hireling["49f522f8-9ac9-431e-ab39-a45e38e222c2"] = {"Druid", "Danton"}
      hireling["d61d12ad-dc80-4805-8c6e-fb876da196cd"] = {"Fighter", "Varanna Sunblossom"}
      hireling["0b149cab-4438-467a-953d-8697535b953d"] = {"Monk", "Sina'zith"}
      hireling["244e782b-a99c-444a-bd8d-d356c26c2902"] = {"Paladin", "Kerz"}
      hireling["0488a406-402c-4bd1-ba38-63b28c112d8d"] = {"Ranger", "Ver'yll Wenkiir"}
      hireling["e4818484-7ee4-466b-82b3-60bbd7b2ff8f"] = {"Rogue", "Maddala Deadeye"}
      hireling["097aa418-eda5-47f9-867f-29a4339be03e"] = {"Sorcerer","Jacelyn"}
      hireling["ee3f1f8d-f2d1-43f2-aba0-72cacafce03c"] = {"Warlock", "Kree Derryck"}
      hireling["2c8c93f0-898b-42d6-b2ca-cf4922852632"] = {"Wizard", "Sir Fuzzalump"}
    
      partyMembers = {
      GetHostCharacter(),
      }
      for k,v in pairs(companionInParty) do
        local gotFlag = 0
        gotFlag = GetFlagOnPlayer(k)
        if gotFlag ~= nil and gotFlag ~= 0 then
          -- print(string.format("Companion '%s' is in your party.", v[2]))
          table.insert(partyMembers, v[1])
        end
      end
      for k,v in pairs(hireling) do
        local gotFlag = 0
        gotFlag = GetFlag("0052da16-4401-4873-8176-16336d8942da", k)
        if gotFlag ~= nil and gotFlag ~= 0 then
          -- print(string.format("Hireling '%s' (%s) is in your party.", v[2], v[1]))
          table.insert(partyMembers, k)
        end
      end
      return partyMembers
    end
  2. Apply/Remove whatever script to that list (e.g "Greater Invisibility" in this example):

    Code: Select all

    {$lua}
    if syntaxcheck then return end
    partyMembers = GetPartyMembers()
    local status = {
      "GREATER_INVISIBILITY"
    }
    [ENABLE]
    for i = 1, #partyMembers do
      ApplyStatus(partyMembers[i], status)
    end
    [DISABLE]
    for i = 1, #partyMembers do
      RemoveStatus(partyMembers[i], status)
    end
So, each time you invoke the scripts (2), it gets first an updated list of party members (1) ...

User avatar
Noway3
Expert Cheater
Expert Cheater
Posts: 117
Joined: Sat Aug 12, 2023 12:20 pm
Reputation: 148

Re: z Baldur's Gate 3

Post by Noway3 »

dude179 wrote:
Mon Jan 08, 2024 9:03 am
I would like to allow Shadowheart to use the mirror of loss. However, I can't do that because I made a Selune Shadowheart.

Does anyone know the game flags that I have to change to make her into a Shar Shadowheart?
You can use either the Script Extender console or the Cheat Engine console.

How to use the "Magic Mirror" for any character:
Make sure you have selected the correct character in your team first!
  • With Script Engine console:

    Code: Select all

    Osi.StartChangeAppearance(GetHostCharacter())
    
  • With Cheat Engine console and Zanzer's Cheat Table active:
    (You can of course also save this script within the cheat table)

    Code: Select all

    local player = GetHostCharacter()
    SetArgToString(0, player)
    ExecuteCall("StartChangeAppearance")
    
Last edited by Noway3 on Sun Jan 14, 2024 5:27 pm, edited 1 time in total.

User avatar
Noway3
Expert Cheater
Expert Cheater
Posts: 117
Joined: Sat Aug 12, 2023 12:20 pm
Reputation: 148

Re: z Baldur's Gate 3

Post by Noway3 »

alieeeeeeen wrote:
Mon Jan 08, 2024 7:40 pm
Hey guys, I got a problem in Honour Mode.
When at the Creche, I mistakenly attacked before going into the thingy. Now Lae'Zel became hostile and left my party. I tried my best with debugs but she never stops being hostile. I looked at the save file and the databases seem to have her trigger a flag where even if she dies and gets revived will stay like that. I used CE but I just can't wrap my head around the functions for the flags.

How do I reset Lae'Zel from hostile to friendly and make her join my party again?

Any help is truly and deeply appreciated!
It is tough to say: there are potentially many elements that needs to be reverted. Flags, Tags and Quests stages are burned in the save game.
What need to be reverted mainly depends on what bring her to become hostile to you and where did that happen. Also check the status of Laezel's companion quest in your journal.

Can you thus shed some light on these points? Is it just because you attacked the guards at the entry of the creche? Does also the whole Githyanki nation became hostile to you ?

User avatar
Noway3
Expert Cheater
Expert Cheater
Posts: 117
Joined: Sat Aug 12, 2023 12:20 pm
Reputation: 148

Re: z Baldur's Gate 3

Post by Noway3 »

dirtycopgangsta wrote:
Tue Jan 09, 2024 8:27 pm
Hello, thank you for all the work. Is there a way to remove the "Avatar" flag from PCs ? I had started a campaign with a pal, but he's no longer available and I'd like for The Dark Urge to start talking again. Thank you for your help.
To my knowledge, The Dark Urge can't be a companion, it is a customizable avatar only and the intended cannon backstory for the player character. I am pretty sure that he/she has no voiced dialog of his/her own.

alieeeeeeen
What is cheating?
What is cheating?
Posts: 4
Joined: Mon Jan 08, 2024 7:35 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by alieeeeeeen »

Noway3 wrote:
Thu Jan 11, 2024 3:24 pm
alieeeeeeen wrote:
Mon Jan 08, 2024 7:40 pm
Hey guys, I got a problem in Honour Mode.
When at the Creche, I mistakenly attacked before going into the thingy. Now Lae'Zel became hostile and left my party. I tried my best with debugs but she never stops being hostile. I looked at the save file and the databases seem to have her trigger a flag where even if she dies and gets revived will stay like that. I used CE but I just can't wrap my head around the functions for the flags.

How do I reset Lae'Zel from hostile to friendly and make her join my party again?

Any help is truly and deeply appreciated!
It is tough to say: there are potentially many elements that needs to be reverted. Flags, Tags and Quests stages are burned in the save game.
What need to be reverted mainly depends on what bring her to become hostile to you and where did that happen. Also check the status of Laezel's companion quest in your journal.

Can you thus shed some light on these points? Is it just because you attacked the guards at the entry of the creche? Does also the whole Githyanki nation became hostile to you ?
I looked through the whole debug databases for any changes, then checked either the latest entries or deletes, just everything I could find.

This whole thing started when I blew up the room before going into the planecaster to kill the inquisitor and some others after accepting Vlaakiths request - it worked countless times before that she didn't become hostile, the same way worked without it multiple times before but now the game decided it's gonna not work. I assume it's a patch or smth.

I first wanted to just try out the commands so I deleted it while in the fight. Hostility didn't go away nor could I readd her to the party, game just didn't think about it. I then tried to run away a bit and opened a door which seems to have triggered something and now it assumed that Laezel is hostile because of "Gith Chokepoint" event, whatever that is. Even showed me the "Comp permanently left" message.

My bet for now is that she needs to be dead, then I need to delete the DBs and add her, as the game recognizes the hostility and doesn't know what to do. Since I'm in the Creche, it assumes that she's hostile because something before happened.

The quests are a good one, I may need to check for that too.

fake.adobo
What is cheating?
What is cheating?
Posts: 1
Joined: Thu Jan 11, 2024 5:48 pm
Reputation: 3

Re: z Baldur's Gate 3

Post by fake.adobo »

Hi is anyone having a problem where the game crashes shortly after activating the dice roll boost cheat?

alieeeeeeen
What is cheating?
What is cheating?
Posts: 4
Joined: Mon Jan 08, 2024 7:35 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by alieeeeeeen »

alieeeeeeen wrote:
Thu Jan 11, 2024 5:28 pm
Noway3 wrote:
Thu Jan 11, 2024 3:24 pm
alieeeeeeen wrote:
Mon Jan 08, 2024 7:40 pm
Hey guys, I got a problem in Honour Mode.
When at the Creche, I mistakenly attacked before going into the thingy. Now Lae'Zel became hostile and left my party. I tried my best with debugs but she never stops being hostile. I looked at the save file and the databases seem to have her trigger a flag where even if she dies and gets revived will stay like that. I used CE but I just can't wrap my head around the functions for the flags.

How do I reset Lae'Zel from hostile to friendly and make her join my party again?

Any help is truly and deeply appreciated!
It is tough to say: there are potentially many elements that needs to be reverted. Flags, Tags and Quests stages are burned in the save game.
What need to be reverted mainly depends on what bring her to become hostile to you and where did that happen. Also check the status of Laezel's companion quest in your journal.

Can you thus shed some light on these points? Is it just because you attacked the guards at the entry of the creche? Does also the whole Githyanki nation became hostile to you ?
I looked through the whole debug databases for any changes, then checked either the latest entries or deletes, just everything I could find.

This whole thing started when I blew up the room before going into the planecaster to kill the inquisitor and some others after accepting Vlaakiths request - it worked countless times before that she didn't become hostile, the same way worked without it multiple times before but now the game decided it's gonna not work. I assume it's a patch or smth.

I first wanted to just try out the commands so I deleted it while in the fight. Hostility didn't go away nor could I readd her to the party, game just didn't think about it. I then tried to run away a bit and opened a door which seems to have triggered something and now it assumed that Laezel is hostile because of "Gith Chokepoint" event, whatever that is. Even showed me the "Comp permanently left" message.

My bet for now is that she needs to be dead, then I need to delete the DBs and add her, as the game recognizes the hostility and doesn't know what to do. Since I'm in the Creche, it assumes that she's hostile because something before happened.

The quests are a good one, I may need to check for that too.
It didn't work. I didn't try the quest one but I'm kinda done. It sucks but it is what it is.
Thanks for the help tho and if anyone ever figures smth out, mention me lol.

obi-wan-master-dilf
What is cheating?
What is cheating?
Posts: 4
Joined: Tue Jan 09, 2024 12:24 am
Reputation: 0

Re: z Baldur's Gate 3

Post by obi-wan-master-dilf »

Noway3 wrote:
Thu Jan 11, 2024 2:19 pm
obi-wan-master-dilf wrote:
Thu Jan 11, 2024 12:04 am
Hello, Ive successfully added cheat engine and got it running with the help from the fearlessrevolution Discord, but I am trying to figure out how to add more spell slots, it looks like my lv 4 character can only get 3 lv1 2 lv 2 and 1 lv 3, is this restricted by level or is there something I can do to the script to give myself 4 lv1 3 lv2 and 2 lv 3?
This is part of the Dungeons & Dragons 5th Edition rules which BG3 tries to follow.

It is possible to modify this globally (and permanently) with a mod that would change the leveling tables but you can also modify it in game for a specific character either with the Cheat Engine or the Script Extender:

How to add a spell slot:
In these examples, you will add 1 slot to your level 3 memorized spells list to the currently selected character in the group.
  • With the Script Extender, in SE Console window, type this:

    Code: Select all

    Osi.AddBoosts(GetHostCharacter(), "ActionResource(SpellSlot,1,3)", "", GetHostCharacter())
    
  • With Zanzer's Cheat Engine table activated, in the CE console window type this:

    Code: Select all

    AddBoostsToPlayer("ActionResource(SpellSlot,1,3)")
    
  • It is actually also included in Zanzer's cheat table itself here:
    "Character Resource Cheats" -> "Add Resources" -> "Spell Slot (Level 3)"
Warning: these changes, like most boosts, are not persistent across saves (sorry for console users!)
Thank you Very much, I have added the spell slots and used cheat engine to enable my fighter to learn spells from scrolls, and learned all of my scrolls, but now when i load up the game it shows the spell slots but nothing is in there, the spells are gone, but if i go look at learning a spell scroll again, it says spell already learned. So what gives? Do I need to take a few levels as a wizard for them to populate in my spellbook? Also I chose to go the route of bound weapon for a warlock but wanted them to be able to learn the quasit scroll spell so they could have a minion and be competent in melee, Will the same thing happen to the quasit scroll with the my warlock(will it disappear).

Thank you Very much for your responses.

SenorPlebeian
Cheater
Cheater
Posts: 28
Joined: Thu Jun 08, 2017 8:01 am
Reputation: 48

Re: z Baldur's Gate 3

Post by SenorPlebeian »

Noway3 wrote:
Thu Jan 11, 2024 2:30 pm
SenorPlebeian wrote:
Tue Jan 09, 2024 1:38 am
Noway3 wrote:
Fri Jan 05, 2024 10:44 am


The functions OsiDatabase:Get(...) and OsiDatabase:Delete(...) are neat hooks available within Norbyte's Script Extender only.
And Osiris calls like Osi.IterateInventory(...) or Osi.IterateCharacters(...) require to register an event handler function, which is possible to implement within CE, in theory, but ... it's complicated!

There are may be ways to interface CE with SE but, well, you could as easily create a mod to do the stuff with SE and without CE!

I recall EvenLess and PeDaGaNG have posted pieces of code about getting a list of party members and apply "things" to them.
check their posts here: (No, I am a not a search bot, I just have a selective memory!)
Hey thank you for linking to these! I was curious if anyone found a function to pull out UUIDs of all the active party members for stuff like this, and now iterating on PeDaGanG's version of the script, I've been able to recreate a lot of Zanzer's helper functions using lambdas without needing to require some user overhead to annoyingly copy each UUID (like scrolling through each party member, activating GetHostCharacter, placing it in a list, and repeating for each different party member on every game load). Instead, I just need to activate it while having my character selected and it's good until I next change up my party composition. In that case, I just need to close and reopen it.

Code: Select all

{$lua}
if syntaxcheck then return end
-- Script to generate active party member list, activate first before running any of the party member functions listed in the script
-- companionInParty["FLAG_UUID_State_IsInParty"] = {"COMPANION_UUID", "DISPLAY_NAME"}
companionInParty = {
  ["ef789a01-f41e-4a7d-9097-fa9c4f1d0f16"] = {"c7c13742-bacd-460a-8f65-f864fe41f255", "Astarion"},
  ["639d141f-6fa8-4d93-8eb7-41243e0fea32"] = {"ad9af97d-75da-406a-ae13-7071c563f604", "Gale"},
  ["9a3ea4cd-3a44-40f7-9d63-2b29bdb28725"] = {"7628bc0e-52b8-42a7-856a-13a6fd413323", "Halsin"},
  ["1b86aa78-a2db-4faa-b4a6-c5591c03bac9"] = {"91b6b200-7d00-4d62-8dc9-99e8339dfa1a", "Jaheira"},
  ["eb7c4de0-36b7-4086-aa33-82c09596a395"] = {"2c76687d-93a2-477b-8b18-8a14b549304c", "Karlach"},
  ["3ee6b1f2-24f4-4e85-b7dc-49060e6d2699"] = {"58a69333-40bf-8358-1d17-fff240d7fb12", "Lae'zel"},
  ["aeb58e60-562a-4e20-8cb2-0deb03b010fc"] = {"0de603c5-42e2-4811-9dad-f652de080eba", "Minsc"},
  ["766b8981-eb17-3ec5-5d30-2626509c550f"] = {"25721313-0c15-4935-8176-9f134385451b", "Minthara"},
  ["9a029c5a-e3c3-45ef-9cd4-1cb45718deb1"] = {"3ed74f06-3c60-42dc-83f6-f034cb47c679", "Shadowheart"},
  ["3c0972ef-d7a4-46ac-abdd-0ce6aadd61b0"] = {"c774d764-4a17-48dc-b470-32ace9ce447d"; "Wyll"},
  ["126c47da-7d24-49ce-b06f-5a44f09ee87e"] = {"4888dfaa-2e0a-4c10-9c8a-d5345aeb4746", "DarkUrge"}
}

-- hireling["HIRELING_UUID"] = {"CLASS", "DISPLAY_NAME"}
hireling = {
    ["7bed07ee-d1db-498d-bbfd-600ddf04676e"] = {"Barbarian", "Eldra Luthrinn"},
    ["4d3c9cb3-ca34-46ba-9c81-44081270bfde"] = {"Bard", "Brinna Brightsong"},
    ["12e541ac-1eb3-4b8c-a8b8-95263e30b217"] = {"Cleric", "Zenith Feur'sel"},
    ["49f522f8-9ac9-431e-ab39-a45e38e222c2"] = {"Druid", "Danton"},
    ["d61d12ad-dc80-4805-8c6e-fb876da196cd"] = {"Fighter", "Varanna Sunblossom"},
    ["0b149cab-4438-467a-953d-8697535b953d"] = {"Monk", "Sina'zith"},
    ["244e782b-a99c-444a-bd8d-d356c26c2902"] = {"Paladin", "Kerz"},
    ["0488a406-402c-4bd1-ba38-63b28c112d8d"] = {"Ranger", "Ver'yll Wenkiir"},
    ["e4818484-7ee4-466b-82b3-60bbd7b2ff8f"] = {"Rogue", "Maddala Deadeye"},
    ["097aa418-eda5-47f9-867f-29a4339be03e"] = {"Sorcerer","Jacelyn"},
    ["ee3f1f8d-f2d1-43f2-aba0-72cacafce03c"] = {"Warlock", "Kree Derryck"},
    ["2c8c93f0-898b-42d6-b2ca-cf4922852632"] = {"Wizard", "Sir Fuzzalump"},
}

partyMember = {}

function setActivePartyMembers()
  partyMember = {}
  table.insert(partyMember, GetHostCharacter())
  for k,v in pairs(companionInParty) do
    local gotFlag = 0
    gotFlag = GetFlagOnPlayer(k)
    if gotFlag ~= nil and gotFlag ~= 0 then
      -- print(string.format("Companion '%s' is in your party.", v[2]))
      table.insert(partyMember, v[1])
    end
  end
  for k,v in pairs(hireling) do
    local gotFlag = 0
    gotFlag = GetFlag("0052da16-4401-4873-8176-16336d8942da", k)
    if gotFlag ~= nil and gotFlag ~= 0 then
      -- print(string.format("Hireling '%s' (%s) is in your party.", v[2], v[1]))
      table.insert(partyMember, k)
    end
  end
end

function onParty(func)
  local status = 0
  for i = 1, #partyMember do
    status = func(partyMember[i])
  end
  return status
end

function AddPassiveToParty(PassiveID)
  local func = function(player) AddPassive(player, PassiveID) end
  return onParty(func)
end

function RemovePassiveFromParty(PassiveID)
  local func = function(player) RemovePassive(player, PassiveID) end
  return onParty(func)
end

function AddBoostsToParty(Boosts)
  local func = function(player) AddBoosts(player, Boosts, 0, 0) end
  return onParty(func)
end

function RemoveBoostsFromParty(Boosts)
  local func = function(player) RemoveBoosts(player, Boosts, 0, 0, 0) end
  return onParty(func)
end

function ApplyStatusToParty(Status, Duration)
  local func = function(player) ApplyStatus(player, Status, Duration, 1, 0) end
  return onParty(func)
end

function RemoveStatusFromParty(Status)
  local func = function(player) RemoveStatus(player, Status, 0) end
  return onParty(func)
end

function AddSpellToParty(Spell)
  local func = function(player) AddSpell(player, Spell, 0, 1) end
  return onParty(func)
end

function RemoveSpellFromParty(Spell)
  local func = function(player) RemoveSpell(player, Spell, 0) end
  return onParty(func)
end

function SetTagOnParty(Tag)
  local func = function(player) SetTag(player, Tag) end
  return onParty(func)
end

function ClearTagOnParty(Tag)
  local func = function(player) ClearTag(player, Tag) end
  return onParty(func)
end


[ENABLE]
setActivePartyMembers()
[DISABLE]
{$asm}

With this enabled a lot of Player functions I can just change from Player to Party to more or less have the same effect on the party, like adding an extra bonus action

Code: Select all

[ENABLE]
{$lua}
if syntaxcheck then return end
AddBoostsToParty("ActionResource(BonusActionPoint,1,0)")
{$asm}
[DISABLE]
And for anything else that requires a UUID, I can just encapsulate it into a lambda and pass it as an argument to OnParty like so

Code: Select all

[ENABLE]
{$lua}
if syntaxcheck then return end
onParty(function(player) SetTag(player, "dc860a81-f3c2-4c1a-ab90-e7583324845c") end)
{$asm}
[DISABLE]
Only sucky part is I need to have it as its own separate script instead of part of the script after activating Register Commands so I can refresh the list of Party Members on the fly. I probably could set it up to initialize on Register Commands and then just set up the other script to reset it, though I like having the party logic all live in one specific place rather than across multiple scripts. Either way, this definitely has made a lot of console commands easier on me
How to apply Statuses/Boosts to the whole party:
I am simply doing it this way:
  1. A function that gets the list of actual party member

    Code: Select all

    function GetPartyMembers()
      companionInParty = {}
      -- companionInParty["FLAG_UUID_State_IsInParty"] = {"COMPANION_UUID", "DISPLAY_NAME"}
      companionInParty["ef789a01-f41e-4a7d-9097-fa9c4f1d0f16"] = {"c7c13742-bacd-460a-8f65-f864fe41f255", "Astarion"}
      companionInParty["639d141f-6fa8-4d93-8eb7-41243e0fea32"] = {"ad9af97d-75da-406a-ae13-7071c563f604", "Gale"}
      companionInParty["9a3ea4cd-3a44-40f7-9d63-2b29bdb28725"] = {"7628bc0e-52b8-42a7-856a-13a6fd413323", "Halsin"}
      companionInParty["1b86aa78-a2db-4faa-b4a6-c5591c03bac9"] = {"91b6b200-7d00-4d62-8dc9-99e8339dfa1a", "Jaheira"}
      companionInParty["eb7c4de0-36b7-4086-aa33-82c09596a395"] = {"2c76687d-93a2-477b-8b18-8a14b549304c", "Karlach"}
      companionInParty["3ee6b1f2-24f4-4e85-b7dc-49060e6d2699"] = {"58a69333-40bf-8358-1d17-fff240d7fb12", "Lae'zel"}
      companionInParty["aeb58e60-562a-4e20-8cb2-0deb03b010fc"] = {"0de603c5-42e2-4811-9dad-f652de080eba", "Minsc"}
      companionInParty["766b8981-eb17-3ec5-5d30-2626509c550f"] = {"25721313-0c15-4935-8176-9f134385451b", "Minthara"}
      companionInParty["9a029c5a-e3c3-45ef-9cd4-1cb45718deb1"] = {"3ed74f06-3c60-42dc-83f6-f034cb47c679", "Shadowheart"}
      companionInParty["3c0972ef-d7a4-46ac-abdd-0ce6aadd61b0"] = {"c774d764-4a17-48dc-b470-32ace9ce447d"; "Wyll"}
      companionInParty["126c47da-7d24-49ce-b06f-5a44f09ee87e"] = {"4888dfaa-2e0a-4c10-9c8a-d5345aeb4746", "DarkUrge"}
    
      hireling = {}
      -- hireling["HIRELING_UUID"] = {"CLASS", "DISPLAY_NAME"}
      hireling["7bed07ee-d1db-498d-bbfd-600ddf04676e"] = {"Barbarian", "Eldra Luthrinn"}
      hireling["4d3c9cb3-ca34-46ba-9c81-44081270bfde"] = {"Bard", "Brinna Brightsong"}
      hireling["12e541ac-1eb3-4b8c-a8b8-95263e30b217"] = {"Cleric", "Zenith Feur'sel"}
      hireling["49f522f8-9ac9-431e-ab39-a45e38e222c2"] = {"Druid", "Danton"}
      hireling["d61d12ad-dc80-4805-8c6e-fb876da196cd"] = {"Fighter", "Varanna Sunblossom"}
      hireling["0b149cab-4438-467a-953d-8697535b953d"] = {"Monk", "Sina'zith"}
      hireling["244e782b-a99c-444a-bd8d-d356c26c2902"] = {"Paladin", "Kerz"}
      hireling["0488a406-402c-4bd1-ba38-63b28c112d8d"] = {"Ranger", "Ver'yll Wenkiir"}
      hireling["e4818484-7ee4-466b-82b3-60bbd7b2ff8f"] = {"Rogue", "Maddala Deadeye"}
      hireling["097aa418-eda5-47f9-867f-29a4339be03e"] = {"Sorcerer","Jacelyn"}
      hireling["ee3f1f8d-f2d1-43f2-aba0-72cacafce03c"] = {"Warlock", "Kree Derryck"}
      hireling["2c8c93f0-898b-42d6-b2ca-cf4922852632"] = {"Wizard", "Sir Fuzzalump"}
    
      partyMembers = {
      GetHostCharacter(),
      }
      for k,v in pairs(companionInParty) do
        local gotFlag = 0
        gotFlag = GetFlagOnPlayer(k)
        if gotFlag ~= nil and gotFlag ~= 0 then
          -- print(string.format("Companion '%s' is in your party.", v[2]))
          table.insert(partyMembers, v[1])
        end
      end
      for k,v in pairs(hireling) do
        local gotFlag = 0
        gotFlag = GetFlag("0052da16-4401-4873-8176-16336d8942da", k)
        if gotFlag ~= nil and gotFlag ~= 0 then
          -- print(string.format("Hireling '%s' (%s) is in your party.", v[2], v[1]))
          table.insert(partyMembers, k)
        end
      end
      return partyMembers
    end
  2. Apply/Remove whatever script to that list (e.g "Greater Invisibility" in this example):

    Code: Select all

    {$lua}
    if syntaxcheck then return end
    partyMembers = GetPartyMembers()
    local status = {
      "GREATER_INVISIBILITY"
    }
    [ENABLE]
    for i = 1, #partyMembers do
      ApplyStatus(partyMembers[i], status)
    end
    [DISABLE]
    for i = 1, #partyMembers do
      RemoveStatus(partyMembers[i], status)
    end
So, each time you invoke the scripts (2), it gets first an updated list of party members (1) ...
Ah I like this way, thank you! Much more concise approach and I think looping over party members in the function is a lot more readable than passing lambdas

I originally went for a similar approach in terms of generating the party member list each time you call a party wide console command, however since GetHostCharacter retrieves whomever is actively being controlled, this would exclude custom player characters when not selected since I believe GetHostCharacter is our main means of retrieving their UUID. Instead I opted to store it in memory so you'd only need to run the script to generate the list while controlling the player once and you can then call all the methods at any point from then on. That said, thinking on it, you'll only ever run into conflicts if you try to run it whilst in combat during a party member's turn that's on a different initiative, since otherwise, you just switch over to the player character, and I don't think it's often you'd ever need to run a party wide command while already in combat, so I think that calling the function each time is probably the better approach.

wapple
Noobzor
Noobzor
Posts: 9
Joined: Mon Sep 25, 2023 11:36 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by wapple »

wapple wrote:
Sat Jan 06, 2024 3:56 am
Noway3 wrote:
Sun Dec 31, 2023 10:39 am
Arbitality wrote:
Sat Dec 30, 2023 11:04 pm
Sorry if this has been asked but I haven't found if anyone has found the spell IDs for the God Gale spells with the latest epilogues? Namely:

Power Word: Ruin
Formsculpt: Tressym
Divine Revelry
Aura of Possibility
I have published and I do maintain BG3 Data sheets that list all these stuff with characteristics and uuid: spells, game objects (armors, weapons books, etc..), characters, flags, tags, statuses.
Please have a look at the references below for descriptions and links.
Here are some of those that you are looking for, I let you discover more in the Stats/Spells sheet.

Code: Select all

(Name, DisplayNameEnglish, SpellProperties, DescriptionEnglish)
"Formsculpt: Tressym " "Target_EPI_Polymorph_GaleGod"	"ApplyStatus(EPI_POLYMOPH_TRESSYM,100,5)"
"Rearrange a creature's very being into the image of Gale's darling pet. "
---
"Power Word: Ruin", "Projectile_EPI_Disintegrate_GaleGod" "DealDamage(10d6+40,Force,Magical)"
"Speak a word of disaster into the Galerian Weave, calling forth three beams of pure destruction that each deal [1]."
----
"Divine Revelry" "Target_EPI_PartyTime_GaleGod" "GROUND:Spawn(79050068-7ce3-43f9-a9a3-1646f5eb39c3);IF(Character()):ApplyStatus(EPI_GALEGOD_IRRESISTIBLE_DANCE,100,1)"
"Conjure forth a barrel of Shadowdark Ale from the Yawning Portal and spread an Irrestible Dance across all nearby creatures. "


Here are some useful BG3 thread quick links:

How would one add these abilities to gale (or anyone if possible)
any news on these abilities? I wanna do a "new game plus" run where gale sees what it would have been like if he had his godhood the entire adventure,

notapoke
What is cheating?
What is cheating?
Posts: 3
Joined: Thu Jul 07, 2022 11:04 pm
Reputation: 6

Re: z Baldur's Gate 3

Post by notapoke »

any chance of an update to the latest game version?

User avatar
Noway3
Expert Cheater
Expert Cheater
Posts: 117
Joined: Sat Aug 12, 2023 12:20 pm
Reputation: 148

Re: z Baldur's Gate 3

Post by Noway3 »

wapple wrote:
Fri Jan 12, 2024 6:11 am
wapple wrote:
Sat Jan 06, 2024 3:56 am
Noway3 wrote:
Sun Dec 31, 2023 10:39 am

I have published and I do maintain BG3 Data sheets that list all these stuff with characteristics and uuid: spells, game objects (armors, weapons books, etc..), characters, flags, tags, statuses.
Please have a look at the references below for descriptions and links.
Here are some of those that you are looking for, I let you discover more in the Stats/Spells sheet.

Code: Select all

(Name, DisplayNameEnglish, SpellProperties, DescriptionEnglish)
"Formsculpt: Tressym " "Target_EPI_Polymorph_GaleGod"	"ApplyStatus(EPI_POLYMOPH_TRESSYM,100,5)"
"Rearrange a creature's very being into the image of Gale's darling pet. "
---
"Power Word: Ruin", "Projectile_EPI_Disintegrate_GaleGod" "DealDamage(10d6+40,Force,Magical)"
"Speak a word of disaster into the Galerian Weave, calling forth three beams of pure destruction that each deal [1]."
----
"Divine Revelry" "Target_EPI_PartyTime_GaleGod" "GROUND:Spawn(79050068-7ce3-43f9-a9a3-1646f5eb39c3);IF(Character()):ApplyStatus(EPI_GALEGOD_IRRESISTIBLE_DANCE,100,1)"
"Conjure forth a barrel of Shadowdark Ale from the Yawning Portal and spread an Irrestible Dance across all nearby creatures. "


Here are some useful BG3 thread quick links:

How would one add these abilities to gale (or anyone if possible)
any news on these abilities? I wanna do a "new game plus" run where gale sees what it would have been like if he had his godhood the entire adventure,
How to add spells to any character:
Once you are in game and have Zanzer's Cheat Table activated properly, you can paste this string in the CE Console window and press "Execute". Make sure you select the right companion in game first.
For multiple spells:

Code: Select all

local spells_list = {
  "Target_EPI_Polymorph_GaleGod",
  "Projectile_EPI_Disintegrate_GaleGod",
}
AddSpellToPlayer(spells_list)
Or for a single spell just this:

Code: Select all

AddSpellToPlayer("Target_EPI_Polymorph_GaleGod")

wapple
Noobzor
Noobzor
Posts: 9
Joined: Mon Sep 25, 2023 11:36 pm
Reputation: 0

Re: z Baldur's Gate 3

Post by wapple »

Noway3 wrote:
Fri Jan 12, 2024 10:24 am
wapple wrote:
Fri Jan 12, 2024 6:11 am
wapple wrote:
Sat Jan 06, 2024 3:56 am



How would one add these abilities to gale (or anyone if possible)
any news on these abilities? I wanna do a "new game plus" run where gale sees what it would have been like if he had his godhood the entire adventure,
How to add spells to any character:
Once you are in game and have Zanzer's Cheat Table activated properly, you can paste this string in the CE Console window and press "Execute". Make sure you select the right companion in game first.
For multiple spells:

Code: Select all

local spells_list = {
  "Target_EPI_Polymorph_GaleGod",
  "Projectile_EPI_Disintegrate_GaleGod",
}
AddSpellToPlayer(spells_list)
Or for a single spell just this:

Code: Select all

AddSpellToPlayer("Target_EPI_Polymorph_GaleGod")
I have been searching for the CE console window, i will admit I have zero experience adding commands with CE and in the past only really used the value editor to limited success until finding premade tables, i was trying to just put the code into the "get ability" cheat but that keeps crashing the game, how do i open the "CE console window" where I should put the code, I am sorry that this is such a novice question but i appreciate everyone on this forum immensely

EDIT: i have learned that the button i needed to press was the "table" button on the top hotbar, from there "show cheat engine lau script" opened the console window needed, and the command for all three abilities is as follows:

" local spells_list = {
"Target_EPI_Polymorph_GaleGod",
"Projectile_EPI_Disintegrate_GaleGod",
"Target_EPI_PartyTime_GaleGod",
}
AddSpellToPlayer(spells_list) "

With this you get all three spells, havent tested them all but the power word ruin might not have animations
Last edited by wapple on Fri Jan 12, 2024 9:45 pm, edited 1 time in total.

Paledrake
Noobzor
Noobzor
Posts: 8
Joined: Tue Dec 26, 2023 3:41 am
Reputation: 1

Re: z Baldur's Gate 3

Post by Paledrake »

Probably due for an update, lot's of crashing when using certain Cheats like the Dice Roll boost.

Post Reply

Who is online

Users browsing this forum: AhrefsBot, ch0104, Google Adsense [Bot], LaposLazulia, liquidxearo1, lomazzi, masturbaiter, moryabro, Obigel, Royce G, Scarpetti, seallaw, Yespy