z Baldur's Gate 3

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

Re: z Baldur's Gate 3

Post by Noway3 »

Update (2024-10-20): This post, about Game data dump, is not updated here anymore, please go to this more recent post instead: here
Older updates:
[*] Update: 2024-02-18:
  1. Data updates: I updated the script and generated data for game version "4.1.1.4763283" that includes "Patch6" stuff.
[*] Update: 2024-01-18: I wish you a Happy New Year 2024!
  1. Data updates:
    • I updated the script and generated new data files for the BG3 game version "4.1.1.4494476" (2024-01-15), including up to "Patch5_Hotfix6" stuff.
  2. Improvements:
    • Added logic to fill empty stats columns from their parent templates, so you don't need to trackback the stats description (for example).
    • Added logic to remove empty GameObjects columns.
[*] Update: 2023-12-18:
  1. Data updates:
    • I updated the script and generated data up to game version "4.1.1.4216792", including the "Patch5_Hotfix2" stuff.
  2. Bug Fixes:
    • Some important game elements were missing: items, passives, statuses among other and this is now corrected.
      It was due to a recent change in game "pak" directory structure that I did not noticed earlier.
    • Some translations that where also missing in Stats records have been added now.
  3. Improvements:
    • "Merged" and "Templates" objects are now consolidated together into single "GameObjects" files.
      This is much more closer to the original game structure and make it easier to find an object within a single file.
    • Added all GameObjects from "LevelTemplates" and "Levels" on top of "RootTemplates" and "TimelineTemplates".
      These are, to my understanding, objects that are available only in specific, region, level or area of the game.
    • There are columns named "LevelName" and "RootFolder" in the sheets that will hint you where, in-game, these objects can be found.
    • More globally, the script is now scanning much more thoroughly across game data for those bits and pieces that have been missed so far!
  4. Please let me know if something looks to be still missing or wrong!
[*] Update: 2023-11-04:
  1. I updated the script and generated data up to game version Patch #4 - v4.1.1.3905231
[*] Update: 2023-10-14:
  1. I updated the script and generated data up to game version Patch3_Hotfix3
  2. I optimized the output file generation to eliminate empty columns an minimize empty cells in all formats.
  3. I fixed some minor cosmetics issues in the excel sheets
[*] Update: 2023-10-05:
  1. I re-organized the files and data a bit differently, See the update description further down this post
  2. more python scripts updates...
[*] Update: 2023-10-01:
  1. Updated data to games version Patch3
  2. in "Templates" files, I have recursively filled in all information from parent templates for each object.
  3. added merged-items and merged-characters to have smaller files with those more interesting stuff extracted from merged-all
  4. reworked/updated the python script...
[*] Update: 2023-09-22:
  1. New feature: "Merged" objects (array, dict and SQLite database)

    The "Merged" database is consolidated from all _merged.lsf data files extracted from the game. These where off the radar until now.
    It is supposed, to my knowledge, to be a comprehensive list of all 'character', 'trigger', 'item', 'scenery', 'LevelTemplate' and other FX effects.
    for example: if you are looking for a specific character or a specific item, search for that name in the "DisplayNameEnglish" column. You should then find the MapKey of it (e.g. to summon it) and the UUID of the template (to spawn an instance of it).

    WARNING: these files are relatively BIG, around 300 MB, they contains a total of 475,746 game objects!

    ALSO: It is still work in progress: I am working on:
    (1) filling in the empty cells recursively from their template values to make it easier to sort out and browse thru .
    And (2) I will also split it to make it easier to download and browse, starting with 'character' (4126 rows) and 'item' list (54408 rows) which seems the most interesting for us (the other stuff could be of interest for modders)
[*] Update: 2023-09-16:
  1. Added logic to better completely eliminate duplicates (from game patches)
  2. Added logic to put "important/useful" columns in front, excel and json files.
[*] Update: 2023-09-15:
  1. Fixed missing English translations (mainly in templates files)
  2. Added Flags and Tags files
  3. Added TimelineTemplates in addition to RootTemplates
  4. Updated the code and data up to game version "Patch2 / Hotfix2"
  5. Re-organized files on a google drive share (see new links in this post)
  6. Published the python script source code
  7. Added SQLite3 output format (for future use)
[*] Update: 2023-09-01:

I have refreshed all the JSON and the EXCEL sheets to include Patch2 updates for all items, spells, etc ... and translations.
    [*] Update: 2023-08-28:

    I have updated all the JSON and the EXCEL sheets with a "fresh script run" today. With these changes:
    1. Added all RootTemplates records (.xlsx and _dict.json))
      • In these files I have gathered the records from "RootTemplates" files found in the 'UnpackedData' directory tree.
      • All are there (367792 rows) and, as a result, it is quite a cumbersome list. I suggest to filter it with "Type = item" to get the essentials:
      • You will find there, among other, "skinned" weapons and armors (like the Nightsong outfit), books, alchemy, food, weapons, quests and other more mundane stuff.
    2. Sorted the columns in the excel sheets
      • I have moved the most "interesting one" to left so you have then on screen at first sight (English names, UUID, ..)
    3. Corrected few bugs in my script that missed certain type of translations.
    old post version
    Pitch and details
    I have created a script to gather all the stats of things such as Armors, Characters, Object, Passives, Spells, Statuses, Tags, Flags, Templates, Weapons and outputs them into JSON, Excel files and SQLite database .

    With these files, you should be able to query for any item, spell, boost, flag, tag, status that you may be looking for and find the corresponding UUID to use in the cheat tables.

    Here is the link to the google drive directory, with all the files: [Link]

    It is organized with "Json", "Excel" and "SQLite" and "Script" directories:
    :!: Note: the JSON, Excel or SQLite version contains exactly the same data in different formats; choose the format that fits your needs or your preference.

    The "Stats" files contains information about: "Armors", "Weapons", "Objects", "Passives", "Spells", "Statuses", "Characters", "CriticalHitTypes", "Interrupts"

    The "GameObjects" files contain information about: "item", "character", "LevelTemplate", "" --- and other environmental stuff
    • Json Files (Array or Dict format):
      • Flags, Tags
      • Stats_*: Stats file --- with all data from the "Stats" game directories files
      • GameObjects_*: -GameObjects files -- with all data from "RootTemplates", "TimelineTemplates", "LevelTemplates" and "Levels" game directories files
    • Excel files:
      • Flags.xlsx, Tags.xlsx
      • Stats.xlsx: one sheet per type of Stats
      • GameObjects_All.xlsx - sheets: "item", "character", "scenery" --- and other environmental stuff
      • GameObjects_Items_Characters.xlsx - sheets: "item" and "character" only (smaller file)
    • SQLite files:
      • bg3data-raw.sqlite3: Stats Tables (one Table per type of stats) + Flags and Tags tables.
      • bg3data-gameobjects.sqlite3: One single table with all objects types.
      • bg3data-gameobjects-split.sqlite3: Multiple tables split per object types.
      • bg3data-gameobjects-small.sqlite3: The two most wanted tables only: Characters and Items
      --> The Python script, that generates all these files, is also shared on the google drive, in the "Script" directory
    My thanks again (and again) and credits to Zanzer, EvenLess and all the others in this forum that heavily inspired my own production here.
    ----------------------------------------------------------------------

    You can view JSON files in any text viewer but I suggest to use a specialized viewer, like "Datroit JSON Viewer" (available on datroit_dot_com).
    MS Visual Studio Code is also fine for viewing and searching inside JSON files.

    While testing my script, I have found that they are sometimes multiple instances of the same object in different files.

    Does anybody knows where I can find the proper "load order" of "unpacked _data" to ensure that I am taking the latest update of an object only?
    This is the "load order" that I use in my script for now -- can someone check if that's right, please?:
    ROOT_FOLDERS_L1: List[str] = [ # List of first level root folders directory (add new game Patch/Version here)
    "Shared", "Gustav",
    "Patch0_Hotfix1", "Patch0_Hotfix2", "Patch0_Hotfix3", "Patch0_Hotfix4",
    "Patch1",
    "Patch2", "Patch2_Hotfix1", "Patch2_Hotfix2",
    "Patch3"
    ]

    ROOT_FOLDERS_L2: List[str] = [ # List of second level root folders directory
    "Public/Shared",
    "Public/SharedDev",
    "Public/Gustav",
    "Public/GustavDev"
    ]
    Here are some example of what's in those files:
    Example of spell details found in Spell_dict.json
    "Shout_MAG_Critical_ArcanicCritical": {
    "EntryName": "Shout_MAG_Critical_ArcanicCritical",
    "EntryType": "SpellData",
    "SpellType": "Shout",
    "EntryUsing": "Shout_FalseLife",
    "SpellSchool": "Divination",
    "SpellProperties": "ApplyStatus(MAG_CRITICAL_ARCANIC_CRITICAL,100, 1)",
    "Icon": "Action_Monster_Orin_DeathbringerAssault",
    "DisplayName": "hcb4c06ebgeb5dg4b0dgb4d3gce925d8b8833;2",
    "DisplayName_English": "Arcane Critical",
    "Description": "h32772a4agf2f6g43fagaa4fgecb011feb623;3",
    "Description_English": "Magically augment your ability to annihilate your foes with powerful attacks. The number you need to <LSTag Tooltip=\"AttackRoll\">roll</LSTag> a <LSTag Tooltip=\"CriticalHit\">Critical Hit</LSTag> while attacking is reduced by 2. This effect can stack.",
    "DescriptionParams": "1",
    "TooltipStatusApply": "ApplyStatus(MAG_CRITICAL_ARCANIC_CRITICAL,100, 1)",
    "UseCosts": "BonusActionPoint:1;SpellSlotsGroup:1:1:1",
    "VerbalIntent": "Buff",
    "root_folder": "Patch1/Public/GustavDev"
    },
    Example of lookup for "Legendary" in file "Armor_dict.json" with Datroit JSON viewer:
    Image

    Another example of browsing JSON file with MS Visual Studio Code:
    Image

    Please let me know if something looks to be missing or wrong!

    And don't forget to enjoy the game!


    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 Oct 20, 2024 12:51 pm, edited 26 times in total.

    Aeill
    What is cheating?
    What is cheating?
    Posts: 2
    Joined: Sat Aug 26, 2023 2:52 pm
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by Aeill »

    Gameholix wrote:
    Sat Aug 26, 2023 2:09 pm
    Trip wrote:
    Sat Aug 26, 2023 12:47 pm
    omrictu wrote:
    Sat Aug 26, 2023 12:42 pm
    console commands broken? I loaded the saved game and still it keeps telling me to load saved game before activating?!
    Here is what worked for me:
    Load your game and CT script check the register commands: if it gives you the message to load a save uncheck it, hit F5 quicksave, reload that and hit register commands again.
    I was able to get it working using these steps, thanks! However, it only worked when I clicked register while the game was loading (as soon as command list is populated).
    I need some help... After multiples tentative i'm not able to make the register command working.. anyone have an idea how i can make it work? all other script work except the one i want, register command... if it can help, when i right clic on register command i have a message: lua error in the script at line 2...here what i see when i clic on that message:


    [ENABLE]
    {$lua}
    if syntaxcheck then return end
    local commands = readPointer("cmdList")
    if commands == 0 then
    print("plaese load a saved game first")
    return
    end
    local size = readInteger(commands + 0x2C)
    if size <= 0 then
    print("please load a saved game first")
    return
    elseif size > 3000 then
    size = 3000 -- just in case
    end
    commands = readPointer(commands + 0x20)
    COMMAND_SELF = {}
    for i = 1, size do
    local addr = readPointer(commands)
    local name = readPointer(addr + 0x08)
    name = readString(name, 256, false)
    local self = readPointer(addr + 0x40)
    addr = readPointer(addr + 0x48)
    COMMAND_SELF[name] = self
    if addr > 0x1000 then
    unregisterSymbol(name)
    registerSymbol(name, addr, true)
    end
    commands = commands + 0x08
    end


    thanks for your help!!!
    Last edited by Aeill on Sat Aug 26, 2023 3:11 pm, edited 1 time in total.

    benny89
    Expert Cheater
    Expert Cheater
    Posts: 182
    Joined: Mon Sep 18, 2017 10:11 pm
    Reputation: 11

    Re: z Baldur's Gate 3

    Post by benny89 »

    Trip wrote:
    Sat Aug 26, 2023 12:47 pm
    omrictu wrote:
    Sat Aug 26, 2023 12:42 pm
    console commands broken? I loaded the saved game and still it keeps telling me to load saved game before activating?!
    Here is what worked for me:
    Load your game and CT script check the register commands: if it gives you the message to load a save uncheck it, hit F5 quicksave, reload that and hit register commands again.
    Doesn't work for me. Whenever I click on "Register Commands" it simply doesn't work and has "Lua error in the script". I unchecked, save, load, try to check agian - nothing.

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

    Re: z Baldur's Gate 3

    Post by Noway3 »

    benny89 wrote:
    Sat Aug 26, 2023 2:59 pm
    Trip wrote:
    Sat Aug 26, 2023 12:47 pm
    omrictu wrote:
    Sat Aug 26, 2023 12:42 pm
    console commands broken? I loaded the saved game and still it keeps telling me to load saved game before activating?!
    Here is what worked for me:
    Load your game and CT script check the register commands: if it gives you the message to load a save uncheck it, hit F5 quicksave, reload that and hit register commands again.
    Doesn't work for me. Whenever I click on "Register Commands" it simply doesn't work and has "Lua error in the script". I unchecked, save, load, try to check agian - nothing.
    Can you provide more information about the "Lua error in the script"?

    When you hover over the "Register commands" line with the mouse, you should see in the tooltip more details about the last error that that script encountered: like script line number and error details.

    Also mention what version of what script you use e.g. "--- Game v4.1.1.3669438 --- Table v8 ---" for Zanzer's cheat table (that is seen as one of the last cheat in the cheat list)

    It will help to find more easily what part of the script is not working for you.

    foulron
    What is cheating?
    What is cheating?
    Posts: 1
    Joined: Sat Aug 26, 2023 3:13 pm
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by foulron »

    having the same issue. Until now it worked like a charm. But now you see a clock gif for 1 sec. reloading or save and reload does not fix it.
    I have a steam version. I tried older versions of the table with no result. Could it be and update or do i need a newer version of cheat engine (using 7.5)
    It concerns unlimited prepared spells and register commands.
    Any help or tips would be most welcome.

    After trying all the suggestions i checked my mod folder and just deleted the lot. Cheat table is running fine now. :oops:
    sometimes...........
    Last edited by foulron on Sun Aug 27, 2023 6:59 am, edited 1 time in total.

    Letstalk804
    Noobzor
    Noobzor
    Posts: 6
    Joined: Sat Aug 26, 2023 3:22 pm
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by Letstalk804 »

    Is there someway I can spawn a custom ring/armor with +20 sleight of hand so I can have a permanent boost? I was wondering if it’s possible to put a proficiency bonus of any size on armor

    benny89
    Expert Cheater
    Expert Cheater
    Posts: 182
    Joined: Mon Sep 18, 2017 10:11 pm
    Reputation: 11

    Re: z Baldur's Gate 3

    Post by benny89 »

    Noway3 wrote:
    Sat Aug 26, 2023 3:19 pm
    benny89 wrote:
    Sat Aug 26, 2023 2:59 pm
    Trip wrote:
    Sat Aug 26, 2023 12:47 pm


    Here is what worked for me:
    Load your game and CT script check the register commands: if it gives you the message to load a save uncheck it, hit F5 quicksave, reload that and hit register commands again.
    Doesn't work for me. Whenever I click on "Register Commands" it simply doesn't work and has "Lua error in the script". I unchecked, save, load, try to check agian - nothing.
    Can you provide more information about the "Lua error in the script"?

    When you hover over the "Register commands" line with the mouse, you should see in the tooltip more details about the last error that that script encountered: like script line number and error details.

    Also mention what version of what script you use e.g. "--- Game v4.1.1.3669438 --- Table v8 ---" for Zanzer's cheat table (that is seen as one of the last cheat in the cheat list)

    It will help to find more easily what part of the script is not working for you.
    I dwnloaded latest table. Version matches. Hotfix 4 installed. I enter game, attached Table, save game, load game, click on Register Commands and nothing happens. Also I don't have anything "hovering". I right click on command and I can see the following:


    Drake22
    Noobzor
    Noobzor
    Posts: 9
    Joined: Fri Aug 11, 2023 3:01 am
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by Drake22 »

    Sylvar wrote:
    Sun Aug 20, 2023 11:28 pm
    Okay so for those who have been posting questions about multiple romances, I wanted to share my experience.

    There are stages in the romances, i.e. dating, partnered, past partners with etc.

    If you have multiple IsDating flags set to = 1 then when one of those origin characters enters a partnership with you, the others who you were dating will give you some form of "I saw you're going steady with so and so" and break things off with you.

    However, I have found a separate flag state of "--ORI_State_PartneredWith" and I was doing some testing, I set the flag state of this to = 1 with both Shadowheart and Astarion. So far they are both acting as if they are in a relationship with me, I.e. I can go up to each of them and ask them for a kiss, talk "about us" etc. and doing so with one does not seem to incur any disapproval with the other, even if we're partied up together. They seem to act as if they are oblivious to my partnership with the other.

    I haven't noticed any major bugs with this test, the only thing I noticed is when Halsin asks about being with you and asks you to check with your partner, it gives you the option in dialogue to say you'll check with either Shadowheart or Astarion, though you only need to click one of the options to progress dialogue. However, you can go talk to and get consent from both of them to pursue Halsin.

    The other thing I noticed is the drow twins seems to default to whomever you were partnered with first, if you try to pick the both option at Sharess' Caress. For me it acts as if Astarion is my partner even if I have Shadowheart in the party instead.

    I have yet to complete either of their respective personal quests yet, nor have I gotten Shadowheart's romance scene in act 3, but figured I would share what my testing had resulted in so far!

    Hope that this helps!
    does it work with update 1?

    Alex7952
    What is cheating?
    What is cheating?
    Posts: 1
    Joined: Sat Aug 26, 2023 3:33 pm
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by Alex7952 »

    Thepledge wrote:
    Sat Aug 12, 2023 3:45 pm
    echovald wrote:
    Sat Aug 12, 2023 2:33 pm
    Any updates on romance flags or how exactly to use the IsDating flag?
    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>
    
    I was wondering if there's an updated version for this for the new patch in BG3? I tried to get this to work yesterday, and I am getting a LUA error when trying to tick the checkboxes. I'm not at all knowledgeable in LUA and Assembly so unfortunately can't figure out how to get this to work.

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

    Re: z Baldur's Gate 3

    Post by Noway3 »

    Aeill wrote:
    Sat Aug 26, 2023 2:57 pm
    Gameholix wrote:
    Sat Aug 26, 2023 2:09 pm
    Trip wrote:
    Sat Aug 26, 2023 12:47 pm


    Here is what worked for me:
    Load your game and CT script check the register commands: if it gives you the message to load a save uncheck it, hit F5 quicksave, reload that and hit register commands again.
    I was able to get it working using these steps, thanks! However, it only worked when I clicked register while the game was loading (as soon as command list is populated).
    I need some help... After multiples tentative i'm not able to make the register command working.. anyone have an idea how i can make it work? all other script work except the one i want, register command... if it can help, when i right clic on register command i have a message: lua error in the script at line 2...here what i see when i clic on that message:


    [...]

    thanks for your help!!!
    Ok, I was able to reproduce your issue with an outdated version of the game(v1.1.3648072).
    The game was updated by Larian Studios yesterday to version v4.1.1.3669438!

    You can verify your game version on the bottom right of the main menu game screen. If it does not match you should let GOG or Steam launcher update it and then you can retry the CT with it.

    Fatebinder
    What is cheating?
    What is cheating?
    Posts: 1
    Joined: Sat Aug 26, 2023 3:39 pm
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by Fatebinder »

    Adding or should I say modifying passives from the stats folder in shared no longer works the game does not seem to recognise it anymore.

    unREAL
    Expert Cheater
    Expert Cheater
    Posts: 159
    Joined: Sat May 07, 2022 4:46 pm
    Reputation: 69

    Re: z Baldur's Gate 3

    Post by unREAL »

    Aeill wrote:
    Sat Aug 26, 2023 2:57 pm

    [ENABLE]
    {$lua}
    if syntaxcheck then return end
    local commands = readPointer("cmdList")
    if commands == 0 then
    print("plaese load a saved game first")
    return
    end
    local size = readInteger(commands + 0x2C)
    if size <= 0 then
    print("please load a saved game first")
    return
    elseif size > 3000 then
    size = 3000 -- just in case
    end
    commands = readPointer(commands + 0x20)
    COMMAND_SELF = {}
    for i = 1, size do
    local addr = readPointer(commands)
    local name = readPointer(addr + 0x08)
    name = readString(name, 256, false)
    local self = readPointer(addr + 0x40)
    addr = readPointer(addr + 0x48)
    COMMAND_SELF[name] = self
    if addr > 0x1000 then
    unregisterSymbol(name)
    registerSymbol(name, addr, true)
    end
    commands = commands + 0x08
    end


    thanks for your help!!!
    its pretty easy to fix

    for all, copy this and paste to override the code from Aeill in the Register Commands script:

    Code: Select all

    [ENABLE]
    {$lua}
    if syntaxcheck then return end
    local commands = readPointer("cmdList")
    if commands == 0 then
      print("plaese load a saved game first")
      return
    end
    local size = readInteger(commands + 0x2C)
    if size <= 0 then
      print("please load a saved game first")
      return
    elseif size > 3000 then
      size = 3000 -- just in case
    end
    commands = readPointer(commands + 0x20)
    COMMAND_SELF = {}
    for i = 1, size do
      local addr = readPointer(commands)
      if addr > 0 then
    	  local name = readPointer(addr + 0x08)
    	  name = readString(name, 256, false)
    	  local self = readPointer(addr + 0x40)
    	  addr = readPointer(addr + 0x48)
    	  COMMAND_SELF[name] = self
    	  if addr > 0x1000 then
    		unregisterSymbol(name)
    		registerSymbol(name, addr, true)
    	  end
    	end
      commands = commands + 0x08
    end
    
    

    ( override until you hit the Prepare Call function )

    now the script will activate and everything should work.

    Edit:
    fixed a typo!
    Last edited by unREAL on Sat Aug 26, 2023 4:35 pm, edited 1 time in total.

    Letstalk804
    Noobzor
    Noobzor
    Posts: 6
    Joined: Sat Aug 26, 2023 3:22 pm
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by Letstalk804 »

    Can someone please help me? I’m not good with this stuff.
    Is there someway I can spawn a custom ring/armor with +20 sleight of hand so I can have a permanent boost? I was wondering if it’s possible to put a proficiency bonus of any size on armor

    aldrich222
    What is cheating?
    What is cheating?
    Posts: 1
    Joined: Sat Aug 26, 2023 3:43 pm
    Reputation: 0

    Re: z Baldur's Gate 3

    Post by aldrich222 »

    for savedgame before patch 1 can't use console commands
    →start game
    →activate bg3.CT(table v8 or later)
    →click "Console Commands"
    →loading a new game(created after patch 1)
    →click "Register Commands"
    →loading a savedgame before patch 1
    Last edited by aldrich222 on Sat Aug 26, 2023 4:14 pm, edited 2 times in total.

    User avatar
    Wraithspectr3
    Cheater
    Cheater
    Posts: 26
    Joined: Fri Nov 12, 2021 5:59 pm
    Reputation: 13

    Re: z Baldur's Gate 3

    Post by Wraithspectr3 »

    I dwnloaded latest table. Version matches. Hotfix 4 installed. I enter game, attached Table, save game, load game, click on Register Commands and nothing happens. Also I don't have anything "hovering". I right click on command and I can see the following:

    i have the exact same problem. using latest table (v8) and latest game version.

    Post Reply

    Who is online

    Users browsing this forum: authuser, Baidu [Spider], Baselaird, Bing [Bot], Crese, Csimbi, Devola, Google [Bot], Google Adsense [Bot], JimJonze, Kaptin, Khold, neokrog, rafaelrennow, Wolfae, YandexBot