robloxmemoryapi 0.2.4__tar.gz → 0.2.5__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.
- {robloxmemoryapi-0.2.4/src/robloxmemoryapi.egg-info → robloxmemoryapi-0.2.5}/PKG-INFO +3 -1
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/README.md +2 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/pyproject.toml +1 -1
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/memory.py +6 -6
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/instance.py +60 -29
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5/src/robloxmemoryapi.egg-info}/PKG-INFO +3 -1
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/LICENSE.md +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/setup.cfg +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/__init__.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/__init__.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/luau/__init__.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/luau/parser.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/offsets.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/__init__.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/bytecode/decryptor.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/bytecode/encryptor.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/datastructures.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/fflags.py +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi.egg-info/SOURCES.txt +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi.egg-info/dependency_links.txt +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi.egg-info/requires.txt +0 -0
- {robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: robloxmemoryapi
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Python Library that abstracts reading and writing data from the Roblox DataModel
|
|
5
5
|
Author-email: upio <notpoiu@users.noreply.github.com>, mstudio45 <mstudio45@users.noreply.github.com>, ActualMasterOogway <ActualMasterOogway@users.noreply.github.com>
|
|
6
6
|
License: Copyright 2025 upio, mstudio45, master oogway
|
|
@@ -35,6 +35,8 @@ Dynamic: license-file
|
|
|
35
35
|
|
|
36
36
|
This was made by [upio](https://github.com/notpoiu), [mstudio45](https://github.com/mstudio45), and [Master Oogway](https://github.com/ActualMasterOogway) and created for the [Dig Macro](https://github.com/mstudio45/digmacro) project (external mode and not the computer vision mode).
|
|
37
37
|
|
|
38
|
+
Offsets are sourced from [imtheo.lol](https://imtheo.lol/Offsets). This project is not affilated with imtheo.lol in any way.
|
|
39
|
+
|
|
38
40
|
## Installation
|
|
39
41
|
|
|
40
42
|
PyPI:
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
This was made by [upio](https://github.com/notpoiu), [mstudio45](https://github.com/mstudio45), and [Master Oogway](https://github.com/ActualMasterOogway) and created for the [Dig Macro](https://github.com/mstudio45/digmacro) project (external mode and not the computer vision mode).
|
|
6
6
|
|
|
7
|
+
Offsets are sourced from [imtheo.lol](https://imtheo.lol/Offsets). This project is not affilated with imtheo.lol in any way.
|
|
8
|
+
|
|
7
9
|
## Installation
|
|
8
10
|
|
|
9
11
|
PyPI:
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "robloxmemoryapi"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.5"
|
|
8
8
|
description = "Python Library that abstracts reading and writing data from the Roblox DataModel"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -290,15 +290,15 @@ class EvasiveProcess:
|
|
|
290
290
|
# numbers #
|
|
291
291
|
def read_int(self, address: int, offset: int = 0) -> int:
|
|
292
292
|
buffer = self.read(address + offset, 4)
|
|
293
|
-
return int.from_bytes(buffer, 'little') if len(buffer) == 4 else 0
|
|
293
|
+
return int.from_bytes(buffer, 'little', signed=True) if len(buffer) == 4 else 0
|
|
294
294
|
|
|
295
295
|
def read_int64(self, address: int, offset: int = 0) -> int:
|
|
296
296
|
buffer = self.read(address + offset, 8)
|
|
297
|
-
return int.from_bytes(buffer, 'little') if len(buffer) == 8 else 0
|
|
297
|
+
return int.from_bytes(buffer, 'little', signed=True) if len(buffer) == 8 else 0
|
|
298
298
|
|
|
299
299
|
def read_long(self, address: int, offset: int = 0) -> int:
|
|
300
300
|
buffer = self.read(address + offset, 8)
|
|
301
|
-
return int.from_bytes(buffer, 'little') if len(buffer) == 8 else 0
|
|
301
|
+
return int.from_bytes(buffer, 'little', signed=True) if len(buffer) == 8 else 0
|
|
302
302
|
|
|
303
303
|
def read_double(self, address: int, offset: int = 0) -> float:
|
|
304
304
|
try:
|
|
@@ -332,13 +332,13 @@ class EvasiveProcess:
|
|
|
332
332
|
return [0.0]
|
|
333
333
|
|
|
334
334
|
def write_int(self, address: int, value: int) -> None:
|
|
335
|
-
self.write(address, struct.pack('<
|
|
335
|
+
self.write(address, struct.pack('<i', value & 0xFFFFFFFF))
|
|
336
336
|
|
|
337
337
|
def write_int64(self, address: int, value: int) -> None:
|
|
338
|
-
self.write(address, struct.pack('<
|
|
338
|
+
self.write(address, struct.pack('<q', value & 0xFFFFFFFFFFFFFFFF))
|
|
339
339
|
|
|
340
340
|
def write_long(self, address: int, value: int) -> None:
|
|
341
|
-
self.write(address, struct.pack('<
|
|
341
|
+
self.write(address, struct.pack('<q', value & 0xFFFFFFFFFFFFFFFF))
|
|
342
342
|
|
|
343
343
|
def write_double(self, address: int, value: float) -> None:
|
|
344
344
|
self.write(address, struct.pack('<d', value))
|
|
@@ -10,6 +10,7 @@ basepart_offsets = Offsets["BasePart"]
|
|
|
10
10
|
primitive_offsets = Offsets["Primitive"]
|
|
11
11
|
camera_offsets = Offsets["Camera"]
|
|
12
12
|
gui_offsets = Offsets["GuiObject"]
|
|
13
|
+
gui_2d_offsets = Offsets["GuiBase2D"]
|
|
13
14
|
misc_offsets = Offsets["Misc"]
|
|
14
15
|
humanoid_offsets = Offsets["Humanoid"]
|
|
15
16
|
model_offsets = Offsets["Model"]
|
|
@@ -265,6 +266,12 @@ class RBXInstance:
|
|
|
265
266
|
3
|
|
266
267
|
)
|
|
267
268
|
return Vector3(*position_vector3)
|
|
269
|
+
elif className == "attachment":
|
|
270
|
+
position_vector3 = self.memory_module.read_floats(
|
|
271
|
+
self.raw_address + attachment_offsets["Position"],
|
|
272
|
+
3
|
|
273
|
+
)
|
|
274
|
+
return Vector3(*position_vector3)
|
|
268
275
|
else:
|
|
269
276
|
return self._read_udim2(self.raw_address + gui_offsets["Position"])
|
|
270
277
|
|
|
@@ -287,6 +294,13 @@ class RBXInstance:
|
|
|
287
294
|
(vec.X, vec.Y, vec.Z)
|
|
288
295
|
)
|
|
289
296
|
|
|
297
|
+
elif className == "attachment":
|
|
298
|
+
vec = self._as_vector3(value, "Position")
|
|
299
|
+
self.memory_module.write_floats(
|
|
300
|
+
self.raw_address + attachment_offsets["Position"],
|
|
301
|
+
(vec.X, vec.Y, vec.Z)
|
|
302
|
+
)
|
|
303
|
+
|
|
290
304
|
else:
|
|
291
305
|
udim2_value = self._as_udim2(value, "Position")
|
|
292
306
|
self._write_udim2(self.raw_address + gui_offsets["Position"], udim2_value)
|
|
@@ -486,6 +500,42 @@ class RBXInstance:
|
|
|
486
500
|
gui_size = self._as_udim2(value, "Size")
|
|
487
501
|
self._write_udim2(self.raw_address + gui_offsets["Size"], gui_size)
|
|
488
502
|
|
|
503
|
+
@property
|
|
504
|
+
def AbsoluteSize(self):
|
|
505
|
+
SizeData = self.memory_module.read_floats(
|
|
506
|
+
self.raw_address + gui_2d_offsets["AbsoluteSize"],
|
|
507
|
+
2
|
|
508
|
+
)
|
|
509
|
+
|
|
510
|
+
return Vector2(*SizeData)
|
|
511
|
+
|
|
512
|
+
@AbsoluteSize.setter
|
|
513
|
+
def AbsoluteSize(self, value):
|
|
514
|
+
self._ensure_writable()
|
|
515
|
+
vec = self._as_vector2(value, "AbsoluteSize")
|
|
516
|
+
self.memory_module.write_floats(
|
|
517
|
+
self.raw_address + gui_2d_offsets["AbsoluteSize"],
|
|
518
|
+
(vec.X, vec.Y)
|
|
519
|
+
)
|
|
520
|
+
|
|
521
|
+
@property
|
|
522
|
+
def AbsolutePosition(self):
|
|
523
|
+
PositionData = self.memory_module.read_floats(
|
|
524
|
+
self.raw_address + gui_2d_offsets["AbsolutePosition"],
|
|
525
|
+
2
|
|
526
|
+
)
|
|
527
|
+
|
|
528
|
+
return Vector2(*PositionData)
|
|
529
|
+
|
|
530
|
+
@AbsolutePosition.setter
|
|
531
|
+
def AbsolutePosition(self, value):
|
|
532
|
+
self._ensure_writable()
|
|
533
|
+
vec = self._as_vector2(value, "AbsolutePosition")
|
|
534
|
+
self.memory_module.write_floats(
|
|
535
|
+
self.raw_address + gui_2d_offsets["AbsolutePosition"],
|
|
536
|
+
(vec.X, vec.Y)
|
|
537
|
+
)
|
|
538
|
+
|
|
489
539
|
@property
|
|
490
540
|
def Transparency(self):
|
|
491
541
|
if "part" not in self.ClassName.lower():
|
|
@@ -512,11 +562,11 @@ class RBXInstance:
|
|
|
512
562
|
if "part" not in self.ClassName.lower():
|
|
513
563
|
return None
|
|
514
564
|
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
return Color3(
|
|
565
|
+
# Color is stored as 3 bytes (R, G, B) rather than floats
|
|
566
|
+
color_bytes = self.memory_module.read(self.raw_address + basepart_offsets["Color3"], 3)
|
|
567
|
+
if len(color_bytes) == 3:
|
|
568
|
+
return Color3(color_bytes[0] / 255.0, color_bytes[1] / 255.0, color_bytes[2] / 255.0)
|
|
569
|
+
return Color3(0, 0, 0)
|
|
520
570
|
|
|
521
571
|
@Color.setter
|
|
522
572
|
def Color(self, value):
|
|
@@ -525,9 +575,11 @@ class RBXInstance:
|
|
|
525
575
|
self._ensure_writable()
|
|
526
576
|
|
|
527
577
|
vec = self._as_color3(value, "Color3")
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
578
|
+
r, g, b = int(vec.R * 255), int(vec.G * 255), int(vec.B * 255)
|
|
579
|
+
# Write 3 bytes directly
|
|
580
|
+
self.memory_module.write(
|
|
581
|
+
self.raw_address + basepart_offsets["Color3"],
|
|
582
|
+
bytes([r & 0xFF, g & 0xFF, b & 0xFF])
|
|
531
583
|
)
|
|
532
584
|
|
|
533
585
|
def _read_primitive_flags(self):
|
|
@@ -1150,27 +1202,6 @@ class RBXInstance:
|
|
|
1150
1202
|
(vec.X, vec.Y, vec.Z)
|
|
1151
1203
|
)
|
|
1152
1204
|
|
|
1153
|
-
# attachment props #
|
|
1154
|
-
@property
|
|
1155
|
-
def AttachmentPosition(self):
|
|
1156
|
-
if self.ClassName != "Attachment":
|
|
1157
|
-
return None
|
|
1158
|
-
pos_data = self.memory_module.read_floats(
|
|
1159
|
-
self.raw_address + attachment_offsets["Position"],
|
|
1160
|
-
3
|
|
1161
|
-
)
|
|
1162
|
-
return Vector3(*pos_data)
|
|
1163
|
-
|
|
1164
|
-
@AttachmentPosition.setter
|
|
1165
|
-
def AttachmentPosition(self, value):
|
|
1166
|
-
if self.ClassName != "Attachment":
|
|
1167
|
-
raise AttributeError("AttachmentPosition is only available on Attachment instances.")
|
|
1168
|
-
self._ensure_writable()
|
|
1169
|
-
vec = self._as_vector3(value, "AttachmentPosition")
|
|
1170
|
-
self.memory_module.write_floats(
|
|
1171
|
-
self.raw_address + attachment_offsets["Position"],
|
|
1172
|
-
(vec.X, vec.Y, vec.Z)
|
|
1173
|
-
)
|
|
1174
1205
|
|
|
1175
1206
|
# charactermesh props #
|
|
1176
1207
|
@property
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: robloxmemoryapi
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: Python Library that abstracts reading and writing data from the Roblox DataModel
|
|
5
5
|
Author-email: upio <notpoiu@users.noreply.github.com>, mstudio45 <mstudio45@users.noreply.github.com>, ActualMasterOogway <ActualMasterOogway@users.noreply.github.com>
|
|
6
6
|
License: Copyright 2025 upio, mstudio45, master oogway
|
|
@@ -35,6 +35,8 @@ Dynamic: license-file
|
|
|
35
35
|
|
|
36
36
|
This was made by [upio](https://github.com/notpoiu), [mstudio45](https://github.com/mstudio45), and [Master Oogway](https://github.com/ActualMasterOogway) and created for the [Dig Macro](https://github.com/mstudio45/digmacro) project (external mode and not the computer vision mode).
|
|
37
37
|
|
|
38
|
+
Offsets are sourced from [imtheo.lol](https://imtheo.lol/Offsets). This project is not affilated with imtheo.lol in any way.
|
|
39
|
+
|
|
38
40
|
## Installation
|
|
39
41
|
|
|
40
42
|
PyPI:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/bytecode/decryptor.py
RENAMED
|
File without changes
|
{robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/bytecode/encryptor.py
RENAMED
|
File without changes
|
{robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi/utils/rbx/datastructures.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robloxmemoryapi-0.2.4 → robloxmemoryapi-0.2.5}/src/robloxmemoryapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|