trainerbase 3.0.0__tar.gz → 3.1.0__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-3.0.0 → trainerbase-3.1.0}/PKG-INFO +1 -1
- {trainerbase-3.0.0 → trainerbase-3.1.0}/pyproject.toml +1 -1
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/codeinjection.py +15 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/common.py +5 -10
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/gameobject.py +18 -1
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/gui.py +1 -1
- {trainerbase-3.0.0 → trainerbase-3.1.0}/LICENSE +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/README.rst +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/__init__.py +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/config.py +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/main.py +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/memory.py +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/scriptengine.py +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/speedhack.py +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/trainerbase/tts.py +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/vendor/FASM.EXE +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/vendor/speedhack32.dll +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/vendor/speedhack64.dll +0 -0
- {trainerbase-3.0.0 → trainerbase-3.1.0}/vendor/speedhack_config.json +0 -0
|
@@ -114,6 +114,21 @@ class AllocatingCodeInjection(AbstractCodeInjection): # pylint: disable=too-man
|
|
|
114
114
|
self.new_memory_address = 0
|
|
115
115
|
|
|
116
116
|
|
|
117
|
+
class MultipleCodeInjection(AbstractCodeInjection):
|
|
118
|
+
def __init__(self, *injections: AbstractCodeInjection):
|
|
119
|
+
self._injections = injections
|
|
120
|
+
|
|
121
|
+
@override
|
|
122
|
+
def inject(self):
|
|
123
|
+
for injection in self._injections:
|
|
124
|
+
injection.inject()
|
|
125
|
+
|
|
126
|
+
@override
|
|
127
|
+
def eject(self):
|
|
128
|
+
for injection in self._injections:
|
|
129
|
+
injection.eject()
|
|
130
|
+
|
|
131
|
+
|
|
117
132
|
def compile_asm(code: Code) -> bytes:
|
|
118
133
|
if isinstance(code, str):
|
|
119
134
|
fasm_mode = f"use{ARCH}"
|
|
@@ -8,8 +8,8 @@ from typing import Self
|
|
|
8
8
|
from keyboard import on_press_key, on_release_key
|
|
9
9
|
from pymem.exception import MemoryReadError
|
|
10
10
|
|
|
11
|
-
from trainerbase.gameobject import GameObject
|
|
12
|
-
from trainerbase.scriptengine import Script
|
|
11
|
+
from trainerbase.gameobject import AbstractReadableObject, GameObject
|
|
12
|
+
from trainerbase.scriptengine import Script, system_script_engine
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
type Coords[T: (int, float)] = tuple[T, T, T]
|
|
@@ -75,7 +75,8 @@ class Teleport:
|
|
|
75
75
|
self.current_position: Coords | None = None
|
|
76
76
|
self.movement_vector = Vector3(0, 0, 0)
|
|
77
77
|
self.minimal_movement_vector_length = minimal_movement_vector_length
|
|
78
|
-
|
|
78
|
+
|
|
79
|
+
system_script_engine.register_script(Script(self.update_movement_vector, enabled=True))
|
|
79
80
|
|
|
80
81
|
def set_coords(self, x: Number, y: Number, z: Number = 100) -> None:
|
|
81
82
|
self.player_x.value = x
|
|
@@ -126,12 +127,6 @@ class Teleport:
|
|
|
126
127
|
new_coords = Vector3(*self.get_coords()) + dash_movement_vector
|
|
127
128
|
self.set_coords(*new_coords)
|
|
128
129
|
|
|
129
|
-
def create_movement_vector_updater_script(self) -> Script:
|
|
130
|
-
if self.movement_vector_updater_script is None:
|
|
131
|
-
self.movement_vector_updater_script = Script(self.update_movement_vector, enabled=True)
|
|
132
|
-
|
|
133
|
-
return self.movement_vector_updater_script
|
|
134
|
-
|
|
135
130
|
|
|
136
131
|
class Switchable(ABC):
|
|
137
132
|
@abstractmethod
|
|
@@ -195,7 +190,7 @@ class ShortLongPressSwitch:
|
|
|
195
190
|
|
|
196
191
|
def regenerate(
|
|
197
192
|
current_value: GameObject,
|
|
198
|
-
max_value:
|
|
193
|
+
max_value: AbstractReadableObject,
|
|
199
194
|
percent: Number,
|
|
200
195
|
min_value: Number = 1,
|
|
201
196
|
):
|
|
@@ -6,7 +6,14 @@ from pymem.exception import MemoryWriteError
|
|
|
6
6
|
from trainerbase.memory import ConvertibleToAddress, ensure_address, pm
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class
|
|
9
|
+
class AbstractReadableObject[T](ABC):
|
|
10
|
+
@property
|
|
11
|
+
@abstractmethod
|
|
12
|
+
def value(self) -> T:
|
|
13
|
+
pass
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GameObject[PymemType, TrainerBaseType](AbstractReadableObject[TrainerBaseType]):
|
|
10
17
|
created_objects: list[Self] = []
|
|
11
18
|
|
|
12
19
|
@staticmethod
|
|
@@ -45,6 +52,7 @@ class GameObject[PymemType, TrainerBaseType](ABC):
|
|
|
45
52
|
return value # type: ignore
|
|
46
53
|
|
|
47
54
|
@property
|
|
55
|
+
@override
|
|
48
56
|
def value(self) -> TrainerBaseType:
|
|
49
57
|
return self.after_read(self.pm_read(self.address.resolve()))
|
|
50
58
|
|
|
@@ -126,6 +134,15 @@ class GameBool(GameObject[bool, bool]):
|
|
|
126
134
|
pm_write = pm.write_bool
|
|
127
135
|
|
|
128
136
|
|
|
137
|
+
class ReadonlyGameObjectSumGetter(AbstractReadableObject[int | float]):
|
|
138
|
+
def __init__(self, *game_numbers: GameInt | GameFloat):
|
|
139
|
+
self.game_numbers = game_numbers
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def value(self) -> int | float:
|
|
143
|
+
return sum(number.value for number in self.game_numbers)
|
|
144
|
+
|
|
145
|
+
|
|
129
146
|
def update_frozen_objects():
|
|
130
147
|
for game_object in GameObject.created_objects:
|
|
131
148
|
if game_object.frozen is not None:
|
|
@@ -262,7 +262,7 @@ class TeleportUI(AbstractUIComponent):
|
|
|
262
262
|
dpg.add_text(f"[{self.hotkey_set_saved_position}] Set Saved Position")
|
|
263
263
|
|
|
264
264
|
def _tp_add_dash_hotkeys_if_needed(self):
|
|
265
|
-
if self.
|
|
265
|
+
if self.hotkey_dash is None:
|
|
266
266
|
return
|
|
267
267
|
|
|
268
268
|
add_hotkey(self.hotkey_dash, self.on_hotkey_dash_press)
|
|
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
|