Skip to content

Instantly share code, notes, and snippets.

@jh0ker
Last active June 19, 2025 04:08
Show Gist options
  • Save jh0ker/1b8dd16f113b7ddc7b90e617ac0851c4 to your computer and use it in GitHub Desktop.
Save jh0ker/1b8dd16f113b7ddc7b90e617ac0851c4 to your computer and use it in GitHub Desktop.
Max attributes and skills in SCUM game single player (+ unlock developer commands)

README

This script manipulates the SCUM database for the single player mode to increase the level of all skills and attributes to max (or the value of your choice) for a given prisoner. This script does not work for multiplayer characters.

You can edit the configuration settings SET_ATTRIBUTES and SET_SKILLS at the start of the script below to change the target values for the skills and attributes. Default is maxed out.

Tested with SCUM Build 0.9.605.85940

How do I use it?

You need to have Python installed on your computer. The script was tested with Python 3.13 - older versions may work, newer versions should be fine.

Download Python from python.org and install it. I recommend you tick the option "Add to PATH" during the install if there is one.

Now, scroll down on this page to the 01_max_prisoner.py script file and download it by right-clicking on the Raw button in its title bar and selecting "Save link as...". Save it somewhere you can easily find it.

Make sure you are not currently in a single player game (being in the main menu should be fine). Now, you should be able to run the script by simply double-clicking it in Windows. If this does not work, right click the file and select "Open with" -> "Python".

The script will automatically create a backup of your current DB and ask you which prisoner/character to work on. If everything works out correctly, it will look something like this:

image

Inspired by https://gist.github.com/quonic/279da005187df6e611b1b31859d91eeb

Other scripts

02_elevate_user.py

This script was contributed by @Vortox14 (see this comment) and allows you to use developer commands. You will need your Steam ID 64 – you can use a website like https://www.steamidfinder.com/ to find it. The following commands are available after elevating your user account:

  • #SetInfiniteAmmo <true | false>
  • #SetInfiniteOxygen <true | false>
  • #SetInfiniteStamina <true | false>
  • #SetImmortality <true | false>
  • #SetMetabolismSimulationSpeed <Multiplier>
  • #SetAttributes <Str [1-8]> <Con [1-5]> <Dex [1-5]> <Int [1-5]>
  • #SetSkillLevel <SkillName> <SkillLevel [0-4]>

03_repair_placed_items.py

I made this variant of the script for @MrAndrsn21 to help with testing different strategies. It simply restores the durability of all placed items and building elements. See this comment for further info.

"""
This script manipulates the SCUM database for the single player mode to
increase the level of all skills and attributes to max (or the value of
your choice).
Edit the constants below to change the target values for the skills and
attributes. Default is maxed out.
Tested with Python 3.13 on December 28th, 2024 with SCUM Build 0.9.605.85940
"""
from dataclasses import dataclass
import datetime as dt
from pathlib import Path
import shutil
import sqlite3
import struct
import traceback
from typing import Literal
#### Configuration ####
## Main attributes ##
SET_ATTRIBUTES = {
"BaseStrength": 8.0, # 1.0 to 8.0
"BaseConstitution": 5.0, # 1.0 to 5.0
"BaseDexterity": 5.0, # 1.0 to 5.0
"BaseIntelligence": 8.0, # 1.0 to 8.0
}
## Skills ##
"""
You can remove skills from the list below and they will not be changed.
If a new skill is added to the game, you can add it to the list below.
The first number in each line is the skill level (0 - 3)
The second number is the skill experience (0 - 10000000)
"""
SET_SKILLS = {
"BoxingSkill": (3, 10000000),
"AwarenessSkill": (3, 10000000),
"RiflesSkill": (3, 10000000),
"SnipingSkill": (3, 10000000),
"CamouflageSkill": (3, 10000000),
"SurvivalSkill": (3, 10000000),
"MeleeWeaponsSkill": (3, 10000000),
"HandgunSkill": (3, 10000000),
"RunningSkill": (3, 10000000),
"EnduranceSkill": (3, 10000000),
"TacticsSkill": (3, 10000000),
"CookingSkill": (3, 10000000),
"ThieverySkill": (3, 10000000),
"ArcherySkill": (3, 10000000),
"DrivingSkill": (3, 10000000),
"EngineeringSkill": (3, 10000000),
"DemolitionSkill": (3, 10000000),
"MedicalSkill": (3, 10000000),
"MotorcycleSkill": (3, 10000000),
"StealthSkill": (3, 10000000),
"AviationSkill": (3, 10000000),
"ResistanceSkill": (3, 10000000),
"FarmingSkill": (3, 10000000),
}
# Other constants
DB_PATH = Path.home() / "AppData/Local/SCUM/Saved/SaveFiles/SCUM.db"
BODY_SIM_KEY_PADDING = 5
BODY_SIM_VALUE_PADDING = 10
@dataclass
class PropertyType:
"""Just a small class to define property types as they occur in the body simulation blob."""
name: bytes
width: int # in bytes
# Used for converting with Python types
struct_type: Literal["<d", "<f", "<?"]
DoubleProperty = PropertyType(name=b"DoubleProperty", width=8, struct_type="<d")
FloatProperty = PropertyType(name=b"FloatProperty", width=4, struct_type="<f")
BoolProperty = PropertyType(name=b"BoolProperty", width=1, struct_type="<?")
def load_prisoner(con: sqlite3.Connection, id: int):
"""Load prisoner from database."""
cur = con.execute("SELECT * FROM prisoner WHERE id = ?", (id,))
result = {desc[0]: val for desc, val in zip(cur.description, cur.fetchone())}
return result
def save_prisoner(con: sqlite3.Connection, prisoner: dict):
"""Updates prisoner in database. Currently only sets body_simulation."""
return con.execute(
"UPDATE prisoner SET body_simulation = ? WHERE id = ?",
(prisoner["body_simulation"], prisoner["id"]),
)
def update_body_sim(
body_sim: bytearray,
key: bytes,
value: float,
property_type: PropertyType,
):
# Find the key in the body simulation blob
key_offset = body_sim.index(key)
# Make sure we are using the correct property type
property_type_offset = key_offset + len(key) + BODY_SIM_KEY_PADDING
assert (
body_sim[property_type_offset : property_type_offset + len(property_type.name)]
== property_type.name
)
# Calculate offset of actual value
value_offset = (
key_offset
+ len(key)
+ BODY_SIM_KEY_PADDING
+ len(property_type.name)
+ BODY_SIM_VALUE_PADDING
)
# Convert value to bytes
value_bytes = struct.pack(property_type.struct_type, value)
# Update value in body sim blob
body_sim[value_offset : value_offset + property_type.width] = value_bytes
def update_skills(con: sqlite3.Connection, prisoner: dict):
"""Sets all skills to max level in the database."""
for (name,) in con.execute(
"SELECT name FROM prisoner_skill WHERE prisoner_id = ?", (prisoner["id"],)
):
if name not in SET_SKILLS:
continue
new_level, new_experience = SET_SKILLS[name]
# Finally, update the XML and other fields in the database
con.execute(
"UPDATE prisoner_skill SET level = ?, experience = ? WHERE prisoner_id = ? AND name = ?",
(new_level, new_experience, prisoner["id"], name),
)
def choose_prisoner(con: sqlite3.Connection):
"""Choose prisoner to update."""
cur = con.execute(
"SELECT prisoner.id, user_profile.name FROM prisoner LEFT JOIN user_profile ON prisoner.user_profile_id = user_profile.id WHERE user_profile.authority_name is ?",
(None,),
)
prisoners = {id: name for (id, name) in cur}
if not prisoners:
print("No prisoners found in local single player.")
return None
print("\nFound prisoners in local single player:\n")
for id, name in prisoners.items():
print(f'"{name}" with ID {id}')
selected_id = input("\nEnter prisoner ID: ")
try:
selected_id = int(selected_id)
except ValueError:
print("Invalid input.")
return None
if selected_id not in prisoners:
print("Please enter a valid prisoner ID.")
return None
return selected_id
def create_backup(db_path: Path):
"""Creates a backup of the database."""
filename_safe_iso = dt.datetime.now().isoformat().replace(":", "-")
backup_path = db_path.with_name(f"SCUM-bak-{filename_safe_iso}.db")
shutil.copy(db_path, backup_path)
return backup_path
def main():
if not DB_PATH.exists():
print(f"Database file {DB_PATH} not found.")
input("Press enter to exit.")
return
print("Creating backup... ")
backup_path = create_backup(DB_PATH)
print(f"Backed up to: {backup_path}")
print("\nConnecting to database...")
con = sqlite3.connect(DB_PATH)
# Choose prisoner interactively
prisoner_id = choose_prisoner(con)
if not prisoner_id:
input("Prisoner selection failed. Press enter to exit.")
return
print(f"Loading prisoner with ID {prisoner_id}...")
prisoner = load_prisoner(con, prisoner_id)
print("\nUpdating attributes... ", end="")
body_sim = bytearray(prisoner["body_simulation"])
for attribute, value in SET_ATTRIBUTES.items():
update_body_sim(
body_sim,
attribute.encode("ascii"),
value,
DoubleProperty,
)
prisoner["body_simulation"] = bytes(body_sim)
save_prisoner(con, prisoner)
print("Success!")
print("Updating skills... ", end="")
update_skills(con, prisoner)
print("Success!")
con.commit()
input("\nAll done! Press enter to exit.")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nExiting...")
except Exception:
print("\n\nSomething went wrong...\n\n")
traceback.print_exc()
input("\n\nPress enter to exit.")
"""
This script manipulates the SCUM database for the single player mode to
unlock developer commands.
Tested with Python 3.13 on December 28th, 2024 with SCUM Build 0.9.605.85940
"""
import shutil
import sqlite3
from pathlib import Path
import datetime as dt
import traceback
DB_PATH = Path.home() / "AppData/Local/SCUM/Saved/SaveFiles/SCUM.db"
def add_elevated_user(steam_id: str):
"""
Adds a SteamID64 to the elevated_users list.
Parameters:
steam_id (str): SteamID64 of the user to elevate.
Returns:
None
"""
# Connect to the database
with sqlite3.connect(DB_PATH) as con:
cursor = con.cursor()
# Insert the SteamID64 into the existing table
cursor.execute(
"""
INSERT INTO elevated_users (user_id)
VALUES (?)
""",
(steam_id,),
)
# Commit the changes
con.commit()
print(f"SteamID64 {steam_id} successfully added to elevated_users.")
def create_backup(db_path: Path):
"""Creates a backup of the database."""
filename_safe_iso = dt.datetime.now().isoformat().replace(":", "-")
backup_path = db_path.with_name(f"SCUM-bak-{filename_safe_iso}.db")
shutil.copy(db_path, backup_path)
return backup_path
def main():
print("Creating backup... ")
backup_path = create_backup(DB_PATH)
print(f"Backed up to: {backup_path}")
# Prompt user for SteamID64
steam_id = input("Enter the SteamID64 to elevate: ").strip()
# Validate SteamID64
if len(steam_id) == 17 and steam_id.isdigit():
add_elevated_user(steam_id)
else:
print("Invalid SteamID64. Please ensure it is a 17-digit numeric ID.")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nExiting...")
except Exception:
print("\n\nSomething went wrong...\n\n")
traceback.print_exc()
input("\n\nPress enter to exit.")
"""
This script manipulates the SCUM database for the single player mode to
repair placed items by the chosen player.
Tested with Python 3.10 on September 15, 2022 with SCUM Build 0.7.162.51364
"""
import datetime as dt
import os
import shutil
import sqlite3
import traceback
import xml.etree.ElementTree as ET
from pathlib import Path
from typing import Tuple
#### Configuration ####
# No configuration :)
# Other constants
DB_PATH = Path.home() / "AppData/Local/SCUM/Saved/SaveFiles/SCUM.db"
def repair_base_element(con: sqlite3.Connection, prisoner_id: int):
"""Reset health of base elements like walls, foundations and some other stuff."""
con.execute(
"UPDATE base_element SET element_health = ? WHERE creator_prisoner_id = ?",
(1.0, prisoner_id),
)
def repair_virtualized_item(con: sqlite3.Connection, user_profile_id: int):
"""Reset health of other buildings and dropped items."""
for item_id, xml in con.execute(
"SELECT id, item_xml FROM virtualized_item WHERE user_profile_id = ?",
(user_profile_id,),
):
# Parse XML, modify health and max health, and convert back to XML
string_terminator = "\x0a\x00"
root = ET.fromstring(xml.rstrip(string_terminator))
root.set("_health", "1")
root.set("_maxHealth", "1")
new_xml = ET.tostring(root, encoding="unicode") + string_terminator
# Finally, update the XML and other fields in the database
con.execute(
"UPDATE virtualized_item SET item_xml = ? WHERE id = ?",
(new_xml, item_id),
)
def choose_prisoner(con: sqlite3.Connection) -> Tuple[int, int]:
"""Choose prisoner to update. Returns a tuple (prisoner_id, user_profile_id)."""
cur = con.execute(
"SELECT prisoner.id, user_profile.name, user_profile.id FROM prisoner LEFT JOIN user_profile ON prisoner.user_profile_id = user_profile.id WHERE user_profile.authority_name is ?",
(None,),
)
prisoners = {
prisoner_id: {"name": name, "user_profile_id": user_profile_id}
for (prisoner_id, name, user_profile_id) in cur
}
print("\nFound prisoners in local single player:\n")
for prisoner_id, data in prisoners.items():
print(f'"{data["name"]}" with ID {prisoner_id}')
chosen_prisoner_id = int(input("\nEnter prisoner ID: "))
if chosen_prisoner_id not in prisoners:
raise ValueError(f"Prisoner ID {chosen_prisoner_id} not found!")
return (chosen_prisoner_id, prisoners[chosen_prisoner_id]["user_profile_id"])
def main():
print("Backing up database... ")
filename_safe_iso = dt.datetime.now().isoformat().replace(":", "-")
backup_path = DB_PATH.with_name(f"SCUM-bak-{filename_safe_iso}.db")
shutil.copy(DB_PATH, backup_path)
print(f"Backed up to: {backup_path}")
print("\nConnecting to database...")
con = sqlite3.connect(DB_PATH)
# Choose prisoner interactively
prisoner_id, user_profile_id = choose_prisoner(con)
print('Repairing items in table "base_element"... ', end="")
repair_base_element(con, prisoner_id)
print("Success!")
print('Repairing items in table "virtualized_item"... ', end="")
repair_virtualized_item(con, user_profile_id)
print("Success!")
con.commit()
input("\nAll done! Press enter to exit.")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nExiting...")
except Exception:
print("\n\nSomething went wrong...\n\n")
traceback.print_exc()
input("\n\nPress enter to exit.")
@jh0ker
Copy link
Author

jh0ker commented Sep 26, 2022

Hey @MrAndrsn21, glad it worked as intended!

As to your question about the saving – I'm not really sure.

Last time i was testing stuff it was at least sufficient to exit to the main menu, making changes to the DB and re-entering single player instead of restarting the game entirely. Though i suppose if you are adding or deleting characters, it might require a game restart to register the updated DB after restoring the backup (ie. to force the game to reload the list of characters). I'm not aware of any way to replace the database while actually being in single player mode and i can't imagine that would be possible.

Also you could probably automate the backup creation and reverting with a script. Listing, copying and deleting files and a little bit of string formatting/parsing is a great project to learn, i think. Maybe check out Automate the Boring Stuff with Python, particularly chapters 9 & 10 for working with files. You can even take a peek at my scripts above as they always do a backup of the DB with a standardized name.

@MrAndrsn21
Copy link

MrAndrsn21 commented Sep 27, 2022 via email

@NickG1991
Copy link

@MrAndrsn21 Sounds interesting. I'm pretty sure it'd be quite similar to this script, so it shouldn't be too difficult to make... I'll take a closer look this evening after work and report back.

@NickG1991 As far as i know, there isn't currently any way to access the game database of a server hosted on Nitrado, so at least this method would not work. I am not aware of any other methods either.

I do see on Nitrado a section with MySQL Credentials could it be there where i have to edit?

@jh0ker
Copy link
Author

jh0ker commented Sep 29, 2022

@NickG1991

I do see on Nitrado a section with MySQL Credentials could it be there where i have to edit?

Ah, i was not aware of this. Perhaps there is a way to modify the script to work with a server hosted by Nitrado, however in it's current form it can not work with a MySQL database. It's specifically written to work with the single player database which uses SQLite.

I'm a little busy with work ATM but I'll try to find some time to rent a small server there and check this out myself. It would be pretty cool if this would be possible for server admins as well.

@jh0ker
Copy link
Author

jh0ker commented Oct 22, 2022

@NickG1991 I finally had the time to check it out, unfortunately it's bad news.

While Nitrado indeed provisions a MySQL database, it doesn't seem like it's actually used by the SCUM server. Most likely, it still uses an SQLite database like it does on the single player. Sadly, Nitrado does not allow FTP access for SCUM so we can neither confirm nor exploit this.

@LuxiiChan
Copy link

LuxiiChan commented Nov 2, 2022

@jh0ker Hello sir, does this still works on changing the max attributes & skills? (Sorry I'm new to this).
I've read and followed the instruction as it says on your thread. When I click the max_prisoner.py, it says on the cmd.

Backing up database...

Something went wrong...

Traceback (most recent call last):
File "F:\Files\saves\SCUM SAVES\max_prisoner.py", line 221, in
main()
File "F:\Files\saves\SCUM SAVES\max_prisoner.py", line 183, in main
shutil.copy(DB_PATH, backup_path)
File "C:\Users\wef\AppData\Local\Programs\Python\Python311\Lib\shutil.py", line 419, in copy
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "C:\Users\wef\AppData\Local\Programs\Python\Python311\Lib\shutil.py", line 256, in copyfile
with open(src, 'rb') as fsrc:
^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\wef\AppData\Local\SCUM\Saved\SaveFiles\SCUM.db'

The game is currently on Version: 0.7511.54633

@jh0ker
Copy link
Author

jh0ker commented Nov 2, 2022

Hey @LuxiiChan, thanks for trying out the script and reporting back!

It seems like the location of your save game is different from where the script expects it to be. I am not quite sure why that would be the case, but if you can locate your SCUM.db file, I suspect the script should still work fine.

Hopefully step by step fix:

  1. Find the correct path to your SCUM.db savegame file.
  2. Go to line 71 which says DB_PATH = Path(f"C:/Users/{USER}/AppData/Local/SCUM/Saved/SaveFiles/SCUM.db")
  3. Assuming you found your savegame at N:\Savegames\SCUM\SCUM.db, change the line to DB_PATH = Path(r"N:\Savegames\SCUM\SCUM.db") (note that the f" is changed to r" – this is so you can just copy-paste a Windows file path that contains \ without breaking anything)
  4. The script should now work normally

Let me know if it works, where you found your savegame (if you can find it) or if you have any more questions.

Cheers!

@LuxiiChan
Copy link

Hey @LuxiiChan, thanks for trying out the script and reporting back!

It seems like the location of your save game is different from where the script expects it to be. I am not quite sure why that would be the case, but if you can locate your SCUM.db file, I suspect the script should still work fine.

Hopefully step by step fix:

  1. Find the correct path to your SCUM.db savegame file.
  2. Go to line 71 which says DB_PATH = Path(f"C:/Users/{USER}/AppData/Local/SCUM/Saved/SaveFiles/SCUM.db")
  3. Assuming you found your savegame at N:\Savegames\SCUM\SCUM.db, change the line to DB_PATH = Path(r"N:\Savegames\SCUM\SCUM.db") (note that the f" is changed to r" – this is so you can just copy-paste a Windows file path that contains \ without breaking anything)
  4. The script should now work normally

Let me know if it works, where you found your savegame (if you can find it) or if you have any more questions.

Cheers!

Okay, so hello again sir. I fixed it, I did something where I change the DB_PATH as you says in the py.file. From {Users} to my pc's name
DB_PATH = Path(f"C:/Users/wef/AppData/Local/SCUM/Saved/SaveFiles/SCUM.db"). The script works normally now, thank you!

@ShadoweCZ
Copy link

ShadoweCZ commented Nov 30, 2022

wimax_prisoner.py WORKS on 0.8.0.57842
havent tried the rest, but still good job and thx :)

altho there is 1 visual bug, when you are selecting character it shows you the character info with the base stats
will try to redo but with 1exp missing so i can get a level and hopefully update the loading card :)

EDIT:
there is new skill, "FarmingSkill" that you dont have in the script, just simple edit

@kyokyo0199
Copy link

Hey @jh0ker thx for share, i new here... if edit simulation body fat or body muscle from kategory "Body Stat" can modify ? if can i wanna try body muscle if 100 look like, and if very fat if 100 look like if... sorry if bad english.

once again thank you

@jh0ker
Copy link
Author

jh0ker commented Dec 16, 2022

@LuxiiChan Great to hear you made it work 😄

@ShadoweCZ Thanks for testing, I also just verified with latest version and updated the script to include the new FarmingSkill.

About the character selection screen, I don't really care much about that since it's a visual bug only. If your solution works, feel free to post about it for others though!

@kyokyo0199 Hello! If you use maximum stats, you will get 100% muscle. I do not know how to get 100% fat. I looked at the database but I can not understand how to increase body fat percent with script. Sorry.

Maybe you can try the following:

  • Modify single player settings to increase body simulation speed, see this guide and look for BodySimulationSpeed. Change to a high number like 25.0
  • Make character with 1 Strength, 1 Constitution, 1 Dexterity
  • Spawn in food with lots of fat and eat it
  • High BodySimulationSpeed should mean that the fat will get absorbed very quickly

@FoxMulder13
Copy link

hi How can I undo that I have my old settings again? Please help

???

@jh0ker
Copy link
Author

jh0ker commented Dec 21, 2022

@FoxMulder13

  • Exit your current single player game
  • Open the explorer and navigate to %LOCALAPPDATA%\SCUM\Saved\SaveFiles
  • There, you can find the current save game named SCUM.db and backups
  • Find the backup you want to restore (look at the file name or modification date)
  • Now delete (or rename) the current SCUM.db
  • Rename your backup to SCUM.db
  • You can now continue playing

@FoxMulder13
Copy link

Thank you, I'll try and report back if it doesn't work

@FoxMulder13
Copy link

Which file do I use exactly? This (SCUM-bak-2022-12-20T23-44-45.180631.db) or Database File (SCUM_20221220151353.db-backup) type DB BACKUP FILE

Scum

@jh0ker
Copy link
Author

jh0ker commented Dec 21, 2022

Either one should work. One is created as a backup by the game itself, while the other one is created by the script before adjusting attributes and skills. They have different file endings but they are the same.

@FoxMulder13
Copy link

Thank you Thank you very much, everything works. Cool script, I have to say I find it unbeatable

@jh0ker
Copy link
Author

jh0ker commented Dec 22, 2022

@FoxMulder13 Glad to hear it!

@B00BLASTER
Copy link

If I own a scum server is it possible to use this somehow to increase my characters attributes like your prisoner script?

@B00BLASTER
Copy link

If I own a scum server is it possible to use this somehow to increase my characters attributes like your prisoner script?

My Server is on GPortal and my discord is boo#6363 if you could find something please send here or reply in comments thanks love your work!

@jimmy-mook
Copy link

Is it working on the newest update?

@foodstampz313
Copy link

does not seem to be working it makes the DB back up but nothing after that

@jh0ker
Copy link
Author

jh0ker commented May 5, 2023

@foodstampz313 @jimmy-mook I just tested it, on my end it's still working correctly.

@foodstampz313 Can perhaps give some more information, like the exact output of the script?

If it gets stuck after entering the prisoner ID, that is something I've seen before. It seems to be a problem with reading the user input. If that is the case for you, try downloading this script and replace the number 123 in line 27 that says PRISONER_ID = 123 with the actual prisoner ID. That version of the script will skip the interactive ID selection process.

@andreas12793
Copy link

andreas12793 commented May 11, 2023

Dear jh0ker

there seems to be an issue with the latest update ( 8.5)
this is the error im getting.

========

Enter prisoner ID: 10
Loading prisoner with ID 10...

Updating attributes... Success!
Updating skills...

Something went wrong...

Traceback (most recent call last):
File "C:\Users\IcedCaramelCream\Desktop\PROGRAMS\SCUM stats edit\max_prisoner.py", line 222, in
main()
File "C:\Users\IcedCaramelCream\Desktop\PROGRAMS\SCUM stats edit\max_prisoner.py", line 213, in main
update_skills(con, prisoner)
File "C:\Users\IcedCaramelCream\Desktop\PROGRAMS\SCUM stats edit\max_prisoner.py", line 155, in update_skills
root = ET.fromstring(xml.rstrip(string_terminator))
AttributeError: 'NoneType' object has no attribute 'rstrip'

@jimmy-mook
Copy link

@jh0ker @foodstampz313 It worked for me when I had downloaded it. My bad for taking so long, I had forgot my pw for this thing. It doesnt work on the newest update obviously. It was really cool while it lasted. Hopefully it gets updated for the newest version.

@jh0ker
Copy link
Author

jh0ker commented May 12, 2023

@andreas12793 @jimmy-mook Thanks for your feedback. I published an updated version of the script, tested and working with SCUM version 0.8.500.67830 (HELL'S KITCHEN update). The required change was relatively minor, in fact the database model for the skills has been simplified.

There is a new BLOB field that seems to be exclusively used by the cooking skill, so if you notice anything weird with cooking specifically, please let me know (although it is a new feature so some bugs are expected). I'm not touching that field, so I don't expect any issues. Even deleting it seemed to have no negative effect, the game restored it on its own. However, if you want to be 100% safe, you can remove the CookingSkill line 54 from the script.

@jimmy-mook
Copy link

jimmy-mook commented May 13, 2023

@foodstampz313 Been having some trouble running the script through python. I tried opening it with python but would keep getting a window telling me to update python. After I did it still won't open it successfully.

@jimmy-mook
Copy link

Dude I'm so dumb I was downloading the read me script instead of the max prisoner one smh lol

@jimmy-mook
Copy link

It works like a charm brother! Great work again.

@andreas12793
Copy link

Appreciated it ! Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment