If you JUST run the hack as-is without changing any code, you should only see a player count at the top right of the window. There are more features mentioned in the readme.md, but there is work required to get those functions operational; these are also mentioned in the readme.md (Prerequisites section)
Check the following:
- Is your framework up-to-date?
- Is SoT currently running and are you on server?
- Are you running your SoT Game in windowed mode?
- Validate you have a pyglet window that is opening and there are no errors DougsESP.log
- If the program is running, have you corrected the tests of faith mentioned in the readme.md (Prerequisites section)?
Generally this is a result of a software issue or incorrect version of software being installed. I highly recommend using the following software to minimize chance of this happening:
- Windows 10 or Windows 11 64-bit
- Python 3.7+ 64-bit version
- PyWin32 64-bit version; only 64-bit is available for python 3.10+ via pip
I've direclty seen 32-bit python and 32-bit PyWin32 cause issues with the framework working, please try swapping those to 64-bit. If you have issues, please contact me on Discord and I will help troubleshoot with you.
If you have windows scaling on (for a large/high DPI monitor), you may need to make a small change to python to avoid your pyglet window also scaling:
- Navigate to your python folder (Mine is
C:\Python37
for example) - Right-click your
python.exe
application and select "Properties" - Select the "Compatibility" tab at the top
- Select "Change high DPI Setting"
- Check the box labelled "Override high DPI scaling behavior. Scaling performed by:"
- Select "Application" in the dropdown
- Select "OK"
- Select "Apply" and then "OK"
When I run the hack, all entities 3D markers appear at (0,0,0) coordinates, not on the actual entity
More than likely this is caused by a recent update to the game. There is no "expected" SDK value that represents an
actors coordinates as far as I have found. As such, we rely on a manually-determined field in our offsets.json
file
to tell us where these coordinates live for each actor. Please review the commends in the
SoT-Python-Offset-Finder/offset_finder.py
file. You will more than likely need to update this offset to reflect where
the coordinates are actually stored now. Please contact me on discord if you encounter this issue.
To fix yourself: Open Cheat Engine (or your favorite memory browser) and around the old offset, try and find a new Vector (3 floats) that look like they may be coords (X, Y, and Z in that order). I think its -50,000 to 50,000 for X & Y, Z=0=Sea level. Try the offset at the start of the X coord and see if it works.
The Framework can automatically detect changes in the uWorld, gName, and gObject offsets if there are new version of the game. If for some reason you need to manually override those found automatically, here is the procedure to do so: If there has been a game version update:
- Load into a game server
- Open Cheat Engine
- Open the
SoTGame.exe
process in Cheat Engine - Change your "value type" to an "Array of byte"
- One-by-one enter the patterns found at the top of
memory_helper.py
(uWorld, gName, gObject) - Hit scan. Upon scanning, you should get one or two results, he top result is the one we want
- Extend the "Address" column to see all the data. Anything after "SoTGame.exe+" is our base offset
- Update the relevant variable(s) in the initialization of
ReadMemory
If the automatically generated offsets match the ones you find in Cheat Engine, and it still is not working, you may also need to update offsets found in the
offsets.json
file. If so, update the offsets according to the latest SDK (various providers available on Unknown Cheats, or try mine if its up to date). You may also use my offset
finder to help pull the appropriate data from the SDK files
Running the script in Debug mode (set debug
=True
in main.py
and utilize PyCharms Debug feature), may help you
identify what offsets are not working correctly and need updating.
Note: There are some offsets hardcoded into the program, it is possible those hardcoded offsets CAN change and cause your issues.
As of patch 2.5.3, it appears we are unable to collect all the player names on the entire server. Previously, we would
read data from the AthenaPlayerState
actors present regardless of your location and the subsequent PlayerName
attribute from that actor. It appears that field no longer provides meaningful data (intentional by the dev's or
otherwise), so we now rely on crew data to help us learn more about the server we are on.
It is possible that once you interact with a player (e.g. they are close enough to you to render), we could store that data as a reference for building a "Crew list" after that interaction, but you will need to build that yourself.
In the event you need that data, please browse the history of the repo prior to framework version 1.3.0.
Please, before contacting me ensure that you have read through the entire readme.md
and faq.md
files:
Discord: dougthedruid
- I already did the hard work of converting C functions to Python for you
- I don't believe a fully-functioning hand-out would help progress the skill level of programmers
- Much of the code is very well documented to help you understand the "how" of the hacks inner workings; as a result many resources on hacking forums will give you guidelines for implementing new functionality; I did it myself, you can to
- I have undergone 6 or 7 major iterations of this same code. I am still learning and re-writing functionality all the time; a smaller code base is much more simple to maintain
I have never and do not intend to make a full version publicly available, for sale or otherwise.
No. I learned to utilize already posted questions/comments easily found online, you can as well. This framework is meant for people who want to put in the work and learn something, not receive a hand-out. For community support, please contact me on Discord:
TL;DR: Yes. You can get banned, such is the risk of cheating.
Longer version: As is, this code purely utilizes a read-only state for the computer's memory. With hundreds of hours utilizing these same read-only permissions, I have never been banned, nor concerned for being banned. Does that guarantee you won't be? No. Does that guarantee you won't change something (like trying to write memory) that will cause you to get banned? No. If you aren't sure what something does, or why something is done a certain way, do some research on the potential impact of changing it before actually changing it.
This hack will work with both versions of the game (Microsoft & Steam). It is confirmed to work on running Windows 10 and Windows 11.
Python is at its more user-friendly version of C. Hypothetically, we can perform any C action using python, but make it more readable and beginner-friendly. I am also much more comfortable developing in Python and saw this as an opportunity to challenge myself.
Things I (and others) have implemented utilizing this framework:
- Ship ESP (Distance, Sunk %, and Type)
- Player ESP (Distance, HP, Name, and Currently Wielding)
- Skeleton ESP (Distance, Max HP)
- Loot ESP (Distance, Color-coding by "value", and grouping by proximity if I desire)
- X-Marks the spot ESP for normal treasure maps
- World object ESP (Rowboats, Events, Seagulls/Shipwrecks, Quest Areas, etc.)
- Player data for the server (count, names, who joined when, etc.)
- Crew data for the players on the server
- Current camera compass heading & bearing
- Cannon trajectory calculation