trainerbase 4.1.5__tar.gz → 4.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {trainerbase-4.1.5 → trainerbase-4.2.1}/.gitignore +1 -1
- {trainerbase-4.1.5 → trainerbase-4.2.1}/PKG-INFO +1 -1
- {trainerbase-4.1.5 → trainerbase-4.2.1}/pyproject.toml +2 -2
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/codeinjection.py +2 -1
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/common/helpers.py +2 -1
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/common/rainbow.py +1 -1
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/common/teleport.py +2 -2
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/config.py +1 -2
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gameobject.py +3 -2
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/memory.py +4 -2
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/process.py +3 -3
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/speedhack.py +2 -1
- {trainerbase-4.1.5 → trainerbase-4.2.1}/LICENSE +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/README.md +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/__init__.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/abc.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/common/__init__.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/common/abc.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/common/keyboard.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/common/tapper.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/__init__.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/helpers.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/injections.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/misc.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/objects.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/rainbow.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/scripts.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/speedhack.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/tapper.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/teleport.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/gui/types.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/logger.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/main.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/py.typed +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/scriptengine.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase/tts.py +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase_vendor/FASM.EXE +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase_vendor/speedhack32.dll +0 -0
- {trainerbase-4.1.5 → trainerbase-4.2.1}/trainerbase_vendor/speedhack64.dll +0 -0
|
@@ -93,7 +93,7 @@ ipython_config.py
|
|
|
93
93
|
# pyenv
|
|
94
94
|
# For a library or package, you might want to ignore these files since the code is
|
|
95
95
|
# intended to run in multiple environments; otherwise, check them in:
|
|
96
|
-
|
|
96
|
+
.python-version
|
|
97
97
|
|
|
98
98
|
# pipenv
|
|
99
99
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "trainerbase"
|
|
3
|
-
version = "4.1
|
|
3
|
+
version = "4.2.1"
|
|
4
4
|
description = "Framework for creating game trainers/mods"
|
|
5
5
|
license = "MIT"
|
|
6
6
|
authors = [
|
|
@@ -74,5 +74,5 @@ build-backend = "hatchling.build"
|
|
|
74
74
|
|
|
75
75
|
[dependency-groups]
|
|
76
76
|
dev = [
|
|
77
|
-
"ruff>=0.7.
|
|
77
|
+
"ruff>=0.7.3",
|
|
78
78
|
]
|
|
@@ -8,7 +8,8 @@ from typing import ClassVar, Final, Self, override
|
|
|
8
8
|
|
|
9
9
|
from pymem.exception import MemoryWriteError
|
|
10
10
|
|
|
11
|
-
from trainerbase.memory import ARCH, ConvertibleToAddress, allocate, ensure_address
|
|
11
|
+
from trainerbase.memory import ARCH, ConvertibleToAddress, allocate, ensure_address
|
|
12
|
+
from trainerbase.process import pm
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
FASM_EXECUTABLE_PATH: Final[Path] = Path(__file__).resolve().parent.parent / "trainerbase_vendor" / "FASM.EXE"
|
|
@@ -7,7 +7,8 @@ from uuid import uuid4
|
|
|
7
7
|
from pymem.exception import MemoryReadError, MemoryWriteError
|
|
8
8
|
|
|
9
9
|
from trainerbase.gameobject import AbstractReadableObject, GameObject
|
|
10
|
-
from trainerbase.memory import POINTER_SIZE, Address, allocate
|
|
10
|
+
from trainerbase.memory import POINTER_SIZE, Address, allocate
|
|
11
|
+
from trainerbase.process import pm
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
type Number = int | float
|
|
@@ -26,7 +26,7 @@ class GradientUpdater(AbstractBaseScript):
|
|
|
26
26
|
if self.tags is None or self.colors is None:
|
|
27
27
|
raise RuntimeError("Call setup(...)")
|
|
28
28
|
|
|
29
|
-
for tag, color in zip(self.tags, self.get_colors(len(self.tags))):
|
|
29
|
+
for tag, color in zip(self.tags, self.get_colors(len(self.tags)), strict=False):
|
|
30
30
|
dpg.configure_item(tag, color=color)
|
|
31
31
|
|
|
32
32
|
def setup(
|
|
@@ -35,12 +35,12 @@ class Vector3:
|
|
|
35
35
|
return self.__apply_binary_function(other, add)
|
|
36
36
|
|
|
37
37
|
def __apply_binary_function(self, other, function) -> Self:
|
|
38
|
-
if isinstance(other,
|
|
38
|
+
if isinstance(other, float | int):
|
|
39
39
|
other = repeat(other, 3)
|
|
40
40
|
elif not isinstance(other, self.__class__):
|
|
41
41
|
raise TypeError(f"Can't apply function {function}. Wrong type: {type(other)}")
|
|
42
42
|
|
|
43
|
-
return self.__class__(*starmap(function, zip(self, other)))
|
|
43
|
+
return self.__class__(*starmap(function, zip(self, other, strict=False)))
|
|
44
44
|
|
|
45
45
|
@classmethod
|
|
46
46
|
def from_coords(cls, x1, y1, z1, x2, y2, z2) -> Self:
|
|
@@ -7,7 +7,8 @@ from typing import ClassVar, Self, cast, override
|
|
|
7
7
|
from pymem.exception import MemoryWriteError
|
|
8
8
|
|
|
9
9
|
from trainerbase.abc import Switchable
|
|
10
|
-
from trainerbase.memory import ConvertibleToAddress, ensure_address
|
|
10
|
+
from trainerbase.memory import ConvertibleToAddress, ensure_address
|
|
11
|
+
from trainerbase.process import pm
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
class AbstractReadableObject[T](ABC):
|
|
@@ -69,7 +70,7 @@ class GameObject[PymemType, TrainerBaseType](AbstractReadableObject[TrainerBaseT
|
|
|
69
70
|
if self.value_range is None:
|
|
70
71
|
return True
|
|
71
72
|
|
|
72
|
-
if not isinstance(value,
|
|
73
|
+
if not isinstance(value, int | float):
|
|
73
74
|
raise TypeError(f"Unable to validate range for non-numeric value: {value} (type: {type(value)})")
|
|
74
75
|
|
|
75
76
|
min_value, max_value = self.value_range
|
|
@@ -10,7 +10,7 @@ from pymem.pattern import pattern_scan_all, pattern_scan_module
|
|
|
10
10
|
from pymem.process import module_from_name
|
|
11
11
|
|
|
12
12
|
from trainerbase.logger import logger
|
|
13
|
-
from trainerbase.process import
|
|
13
|
+
from trainerbase.process import pm
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
ARCH: Final[int] = 64 if pm.is_64_bit else 32
|
|
@@ -46,6 +46,7 @@ class AOBScan(AbstractAddress):
|
|
|
46
46
|
should_cache: bool = True,
|
|
47
47
|
should_escape: bool = True,
|
|
48
48
|
any_byte_marker: str = "??",
|
|
49
|
+
check_memory_protection: bool = True,
|
|
49
50
|
):
|
|
50
51
|
self._should_cache = should_cache
|
|
51
52
|
self._saved_scan_result: int | None = None
|
|
@@ -60,6 +61,7 @@ class AOBScan(AbstractAddress):
|
|
|
60
61
|
self.add = add
|
|
61
62
|
self.module_name = module_name
|
|
62
63
|
self.multiple_result_index = multiple_result_index
|
|
64
|
+
self.check_memory_protection = check_memory_protection
|
|
63
65
|
|
|
64
66
|
def __add__(self, extra_add: int) -> Self:
|
|
65
67
|
new_add = self.add + extra_add
|
|
@@ -82,7 +84,7 @@ class AOBScan(AbstractAddress):
|
|
|
82
84
|
|
|
83
85
|
find_aob = partial(pattern_scan_module, pm.process_handle, module, return_multiple=return_multiple)
|
|
84
86
|
|
|
85
|
-
scan_result: list[int] | int | None = find_aob(self.aob, check_memory_protection=
|
|
87
|
+
scan_result: list[int] | int | None = find_aob(self.aob, check_memory_protection=self.check_memory_protection)
|
|
86
88
|
|
|
87
89
|
if not scan_result:
|
|
88
90
|
raise ValueError(f"AOB not found: {self.aob}")
|
|
@@ -74,14 +74,14 @@ def attach_to_process() -> Pymem:
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
def shutdown_if_process_exited():
|
|
77
|
-
if not pid_exists(cast(int,
|
|
77
|
+
if not pid_exists(cast(int, pm.process_id)):
|
|
78
78
|
logger.info("Game process exited. Shutting down.")
|
|
79
79
|
force_exit(0)
|
|
80
80
|
|
|
81
81
|
|
|
82
82
|
def kill_game_process():
|
|
83
83
|
logger.info("Killing game process.")
|
|
84
|
-
Process(
|
|
84
|
+
Process(pm.process_id).kill()
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
pm = attach_to_process()
|
|
@@ -8,7 +8,8 @@ from pymem.process import module_from_name
|
|
|
8
8
|
from pymem.ressources.structure import MODULEINFO
|
|
9
9
|
|
|
10
10
|
from trainerbase.gameobject import GameDouble
|
|
11
|
-
from trainerbase.memory import ARCH
|
|
11
|
+
from trainerbase.memory import ARCH
|
|
12
|
+
from trainerbase.process import pm
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
SPEEDHACK_DLL_MODULE_NAME: Final[str] = f"speedhack{ARCH}.dll"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|