robloxmemoryapi 0.2.5__tar.gz → 0.2.6__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.5/src/robloxmemoryapi.egg-info → robloxmemoryapi-0.2.6}/PKG-INFO +1 -1
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/pyproject.toml +1 -1
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/offsets.py +0 -13
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/instance.py +485 -31
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6/src/robloxmemoryapi.egg-info}/PKG-INFO +1 -1
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/LICENSE.md +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/README.md +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/setup.cfg +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/__init__.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/__init__.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/luau/__init__.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/luau/parser.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/memory.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/__init__.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/bytecode/decryptor.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/bytecode/encryptor.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/datastructures.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/fflags.py +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi.egg-info/SOURCES.txt +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi.egg-info/dependency_links.txt +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi.egg-info/requires.txt +0 -0
- {robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/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.6
|
|
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
|
|
@@ -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.6"
|
|
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"
|
|
@@ -5,24 +5,11 @@ BASE_URL = "https://imtheo.lol/Offsets"
|
|
|
5
5
|
# Offsets
|
|
6
6
|
OffsetsRequest = requests.get(f"{BASE_URL}/Offsets.json")
|
|
7
7
|
|
|
8
|
-
# Legacy Offsets
|
|
9
|
-
OldOffsetsRequest = requests.get("https://offsets.ntgetwritewatch.workers.dev/offsets.json")
|
|
10
|
-
try:
|
|
11
|
-
OldOffsets = OldOffsetsRequest.json()
|
|
12
|
-
except:
|
|
13
|
-
OldOffsets = {}
|
|
14
|
-
|
|
15
8
|
try:
|
|
16
9
|
Offsets = OffsetsRequest.json()["Offsets"]
|
|
17
10
|
except:
|
|
18
11
|
Offsets = {}
|
|
19
12
|
|
|
20
|
-
# Handle non-existant offsets
|
|
21
|
-
try:
|
|
22
|
-
Offsets["Camera"]["ViewportSize"] = int(OldOffsets["ViewportSize"], 16)
|
|
23
|
-
except:
|
|
24
|
-
Offsets["Camera"]["ViewportSize"] = 0x6AD28F
|
|
25
|
-
|
|
26
13
|
# FFlag offsets (lazily loaded)
|
|
27
14
|
_fflag_data = None
|
|
28
15
|
_fflag_offsets = None
|
|
@@ -27,6 +27,8 @@ spawnlocation_offsets = Offsets["SpawnLocation"]
|
|
|
27
27
|
clothing_offsets = Offsets["Clothing"]
|
|
28
28
|
charactermesh_offsets = Offsets["CharacterMesh"]
|
|
29
29
|
attachment_offsets = Offsets["Attachment"]
|
|
30
|
+
air_properties_offsets = Offsets["AirProperties"]
|
|
31
|
+
seat_offsets = Offsets["Seat"]
|
|
30
32
|
|
|
31
33
|
ROTATION_MATRIX_FLOATS = 9
|
|
32
34
|
|
|
@@ -404,6 +406,16 @@ class RBXInstance:
|
|
|
404
406
|
self.raw_address,
|
|
405
407
|
Offsets["ColorCorrectionEffect"]["Enabled"]
|
|
406
408
|
)
|
|
409
|
+
elif self.ClassName == "BlurEffect":
|
|
410
|
+
return self.memory_module.read_bool(
|
|
411
|
+
self.raw_address,
|
|
412
|
+
Offsets["BlurEffect"]["Enabled"]
|
|
413
|
+
)
|
|
414
|
+
elif self.ClassName == "ColorGradingEffect":
|
|
415
|
+
return self.memory_module.read_bool(
|
|
416
|
+
self.raw_address,
|
|
417
|
+
Offsets["ColorGradingEffect"]["Enabled"]
|
|
418
|
+
)
|
|
407
419
|
elif self.ClassName == "SpawnLocation":
|
|
408
420
|
return self.memory_module.read_bool(
|
|
409
421
|
self.raw_address,
|
|
@@ -437,6 +449,18 @@ class RBXInstance:
|
|
|
437
449
|
self.raw_address + Offsets["ColorCorrectionEffect"]["Enabled"],
|
|
438
450
|
bool(value)
|
|
439
451
|
)
|
|
452
|
+
elif self.ClassName == "BlurEffect":
|
|
453
|
+
self._ensure_writable()
|
|
454
|
+
self.memory_module.write_bool(
|
|
455
|
+
self.raw_address + Offsets["BlurEffect"]["Enabled"],
|
|
456
|
+
bool(value)
|
|
457
|
+
)
|
|
458
|
+
elif self.ClassName == "ColorGradingEffect":
|
|
459
|
+
self._ensure_writable()
|
|
460
|
+
self.memory_module.write_bool(
|
|
461
|
+
self.raw_address + Offsets["ColorGradingEffect"]["Enabled"],
|
|
462
|
+
bool(value)
|
|
463
|
+
)
|
|
440
464
|
elif self.ClassName == "SpawnLocation":
|
|
441
465
|
self._ensure_writable()
|
|
442
466
|
self.memory_module.write_bool(
|
|
@@ -444,7 +468,7 @@ class RBXInstance:
|
|
|
444
468
|
bool(value)
|
|
445
469
|
)
|
|
446
470
|
else:
|
|
447
|
-
raise AttributeError("Enabled is only available on ScreenGui, ProximityPrompt, Tool, ColorCorrectionEffect, or SpawnLocation instances.")
|
|
471
|
+
raise AttributeError("Enabled is only available on ScreenGui, ProximityPrompt, Tool, ColorCorrectionEffect, BlurEffect, ColorGradingEffect, or SpawnLocation instances.")
|
|
448
472
|
|
|
449
473
|
@property
|
|
450
474
|
def Visible(self):
|
|
@@ -536,6 +560,12 @@ class RBXInstance:
|
|
|
536
560
|
(vec.X, vec.Y)
|
|
537
561
|
)
|
|
538
562
|
|
|
563
|
+
@property
|
|
564
|
+
def AbsoluteRotation(self):
|
|
565
|
+
return self.memory_module.read_float(
|
|
566
|
+
self.raw_address + gui_2d_offsets["AbsoluteRotation"]
|
|
567
|
+
)
|
|
568
|
+
|
|
539
569
|
@property
|
|
540
570
|
def Transparency(self):
|
|
541
571
|
if "part" not in self.ClassName.lower():
|
|
@@ -937,15 +967,15 @@ class RBXInstance:
|
|
|
937
967
|
self.raw_address + gui_offsets["BackgroundColor3"],
|
|
938
968
|
3
|
|
939
969
|
)
|
|
940
|
-
return
|
|
970
|
+
return Color3(*color_data)
|
|
941
971
|
|
|
942
972
|
@BackgroundColor3.setter
|
|
943
973
|
def BackgroundColor3(self, value):
|
|
944
974
|
self._ensure_writable()
|
|
945
|
-
vec = self.
|
|
975
|
+
vec = self._as_color3(value, "BackgroundColor3")
|
|
946
976
|
self.memory_module.write_floats(
|
|
947
977
|
self.raw_address + gui_offsets["BackgroundColor3"],
|
|
948
|
-
(vec.
|
|
978
|
+
(vec.R, vec.G, vec.B)
|
|
949
979
|
)
|
|
950
980
|
|
|
951
981
|
@property
|
|
@@ -954,15 +984,15 @@ class RBXInstance:
|
|
|
954
984
|
self.raw_address + gui_offsets["BorderColor3"],
|
|
955
985
|
3
|
|
956
986
|
)
|
|
957
|
-
return
|
|
987
|
+
return Color3(*color_data)
|
|
958
988
|
|
|
959
989
|
@BorderColor3.setter
|
|
960
990
|
def BorderColor3(self, value):
|
|
961
991
|
self._ensure_writable()
|
|
962
|
-
vec = self.
|
|
992
|
+
vec = self._as_color3(value, "BorderColor3")
|
|
963
993
|
self.memory_module.write_floats(
|
|
964
994
|
self.raw_address + gui_offsets["BorderColor3"],
|
|
965
|
-
(vec.
|
|
995
|
+
(vec.R, vec.G, vec.B)
|
|
966
996
|
)
|
|
967
997
|
|
|
968
998
|
@property
|
|
@@ -971,15 +1001,15 @@ class RBXInstance:
|
|
|
971
1001
|
self.raw_address + gui_offsets["TextColor3"],
|
|
972
1002
|
3
|
|
973
1003
|
)
|
|
974
|
-
return
|
|
1004
|
+
return Color3(*color_data)
|
|
975
1005
|
|
|
976
1006
|
@TextColor3.setter
|
|
977
1007
|
def TextColor3(self, value):
|
|
978
1008
|
self._ensure_writable()
|
|
979
|
-
vec = self.
|
|
1009
|
+
vec = self._as_color3(value, "TextColor3")
|
|
980
1010
|
self.memory_module.write_floats(
|
|
981
1011
|
self.raw_address + gui_offsets["TextColor3"],
|
|
982
|
-
(vec.
|
|
1012
|
+
(vec.R, vec.G, vec.B)
|
|
983
1013
|
)
|
|
984
1014
|
|
|
985
1015
|
@property
|
|
@@ -1008,8 +1038,7 @@ class RBXInstance:
|
|
|
1008
1038
|
@property
|
|
1009
1039
|
def BackgroundTransparency(self):
|
|
1010
1040
|
return self.memory_module.read_float(
|
|
1011
|
-
self.raw_address
|
|
1012
|
-
gui_offsets["BackgroundTransparency"]
|
|
1041
|
+
self.raw_address + gui_offsets["BackgroundTransparency"]
|
|
1013
1042
|
)
|
|
1014
1043
|
|
|
1015
1044
|
@BackgroundTransparency.setter
|
|
@@ -1023,8 +1052,7 @@ class RBXInstance:
|
|
|
1023
1052
|
@property
|
|
1024
1053
|
def ZIndex(self):
|
|
1025
1054
|
return self.memory_module.read_int(
|
|
1026
|
-
self.raw_address
|
|
1027
|
-
gui_offsets["ZIndex"]
|
|
1055
|
+
self.raw_address + gui_offsets["ZIndex"]
|
|
1028
1056
|
)
|
|
1029
1057
|
|
|
1030
1058
|
@ZIndex.setter
|
|
@@ -1070,8 +1098,7 @@ class RBXInstance:
|
|
|
1070
1098
|
if self.ClassName != "Tool":
|
|
1071
1099
|
return None
|
|
1072
1100
|
return self.memory_module.read_bool(
|
|
1073
|
-
self.raw_address
|
|
1074
|
-
tool_offsets["ManualActivationOnly"]
|
|
1101
|
+
self.raw_address + tool_offsets["ManualActivationOnly"]
|
|
1075
1102
|
)
|
|
1076
1103
|
|
|
1077
1104
|
@ManualActivationOnly.setter
|
|
@@ -1202,15 +1229,66 @@ class RBXInstance:
|
|
|
1202
1229
|
(vec.X, vec.Y, vec.Z)
|
|
1203
1230
|
)
|
|
1204
1231
|
|
|
1232
|
+
# blureffect props #
|
|
1233
|
+
@property
|
|
1234
|
+
def BlurSize(self):
|
|
1235
|
+
if self.ClassName != "BlurEffect":
|
|
1236
|
+
return None
|
|
1237
|
+
return self.memory_module.read_float(
|
|
1238
|
+
self.raw_address + Offsets["BlurEffect"]["Size"]
|
|
1239
|
+
)
|
|
1240
|
+
|
|
1241
|
+
@BlurSize.setter
|
|
1242
|
+
def BlurSize(self, value: float):
|
|
1243
|
+
if self.ClassName != "BlurEffect":
|
|
1244
|
+
raise AttributeError("BlurSize is only available on BlurEffect instances.")
|
|
1245
|
+
self._ensure_writable()
|
|
1246
|
+
self.memory_module.write_float(
|
|
1247
|
+
self.raw_address + Offsets["BlurEffect"]["Size"],
|
|
1248
|
+
float(value)
|
|
1249
|
+
)
|
|
1250
|
+
|
|
1251
|
+
# colorgradingeffect props #
|
|
1252
|
+
@property
|
|
1253
|
+
def TonemapperPreset(self):
|
|
1254
|
+
if self.ClassName != "ColorGradingEffect":
|
|
1255
|
+
return None
|
|
1256
|
+
return self.memory_module.read_int(
|
|
1257
|
+
self.raw_address + Offsets["ColorGradingEffect"]["TonemapperPreset"]
|
|
1258
|
+
)
|
|
1259
|
+
|
|
1260
|
+
@TonemapperPreset.setter
|
|
1261
|
+
def TonemapperPreset(self, value: int):
|
|
1262
|
+
if self.ClassName != "ColorGradingEffect":
|
|
1263
|
+
raise AttributeError("TonemapperPreset is only available on ColorGradingEffect instances.")
|
|
1264
|
+
self._ensure_writable()
|
|
1265
|
+
self.memory_module.write_int(
|
|
1266
|
+
self.raw_address + Offsets["ColorGradingEffect"]["TonemapperPreset"],
|
|
1267
|
+
int(value)
|
|
1268
|
+
)
|
|
1269
|
+
|
|
1270
|
+
# seat props #
|
|
1271
|
+
@property
|
|
1272
|
+
def Occupant(self):
|
|
1273
|
+
if self.ClassName != "Seat":
|
|
1274
|
+
return None
|
|
1275
|
+
ptr = self.memory_module.get_pointer(
|
|
1276
|
+
self.raw_address,
|
|
1277
|
+
seat_offsets["Occupant"]
|
|
1278
|
+
)
|
|
1279
|
+
if ptr == 0:
|
|
1280
|
+
return None
|
|
1281
|
+
return RBXInstance(ptr, self.memory_module)
|
|
1205
1282
|
|
|
1206
1283
|
# charactermesh props #
|
|
1207
1284
|
@property
|
|
1208
1285
|
def BaseTextureId(self):
|
|
1209
1286
|
if self.ClassName != "CharacterMesh":
|
|
1210
1287
|
return None
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1288
|
+
offset = charactermesh_offsets.get("BaseTextureId", 0)
|
|
1289
|
+
if offset == 0: return None
|
|
1290
|
+
return self.memory_module.read_string(
|
|
1291
|
+
self.raw_address + offset
|
|
1214
1292
|
)
|
|
1215
1293
|
|
|
1216
1294
|
@BaseTextureId.setter
|
|
@@ -1218,18 +1296,21 @@ class RBXInstance:
|
|
|
1218
1296
|
if self.ClassName != "CharacterMesh":
|
|
1219
1297
|
raise AttributeError("BaseTextureId is only available on CharacterMesh instances.")
|
|
1220
1298
|
self._ensure_writable()
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1299
|
+
offset = charactermesh_offsets.get("BaseTextureId", 0)
|
|
1300
|
+
if offset == 0: return
|
|
1301
|
+
self.memory_module.write_string(
|
|
1302
|
+
self.raw_address + offset,
|
|
1303
|
+
str(value)
|
|
1224
1304
|
)
|
|
1225
1305
|
|
|
1226
1306
|
@property
|
|
1227
1307
|
def OverlayTextureId(self):
|
|
1228
1308
|
if self.ClassName != "CharacterMesh":
|
|
1229
1309
|
return None
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1310
|
+
offset = charactermesh_offsets.get("OverlayTextureId", 0)
|
|
1311
|
+
if offset == 0: return None
|
|
1312
|
+
return self.memory_module.read_string(
|
|
1313
|
+
self.raw_address + offset
|
|
1233
1314
|
)
|
|
1234
1315
|
|
|
1235
1316
|
@OverlayTextureId.setter
|
|
@@ -1237,9 +1318,11 @@ class RBXInstance:
|
|
|
1237
1318
|
if self.ClassName != "CharacterMesh":
|
|
1238
1319
|
raise AttributeError("OverlayTextureId is only available on CharacterMesh instances.")
|
|
1239
1320
|
self._ensure_writable()
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1321
|
+
offset = charactermesh_offsets.get("OverlayTextureId", 0)
|
|
1322
|
+
if offset == 0: return
|
|
1323
|
+
self.memory_module.write_string(
|
|
1324
|
+
self.raw_address + offset,
|
|
1325
|
+
str(value)
|
|
1243
1326
|
)
|
|
1244
1327
|
|
|
1245
1328
|
@property
|
|
@@ -1255,9 +1338,10 @@ class RBXInstance:
|
|
|
1255
1338
|
def CharacterMeshId(self):
|
|
1256
1339
|
if self.ClassName != "CharacterMesh":
|
|
1257
1340
|
return None
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1341
|
+
offset = charactermesh_offsets.get("MeshId", 0)
|
|
1342
|
+
if offset == 0: return None
|
|
1343
|
+
return self.memory_module.read_string(
|
|
1344
|
+
self.raw_address + offset
|
|
1261
1345
|
)
|
|
1262
1346
|
|
|
1263
1347
|
# clothing props (Shirt/Pants) #
|
|
@@ -1735,6 +1819,272 @@ class RBXInstance:
|
|
|
1735
1819
|
bool(value)
|
|
1736
1820
|
)
|
|
1737
1821
|
|
|
1822
|
+
@property
|
|
1823
|
+
def AutoJumpEnabled(self):
|
|
1824
|
+
if self.ClassName != "Humanoid":
|
|
1825
|
+
return None
|
|
1826
|
+
return self.memory_module.read_bool(
|
|
1827
|
+
self.raw_address,
|
|
1828
|
+
humanoid_offsets["AutoJumpEnabled"]
|
|
1829
|
+
)
|
|
1830
|
+
|
|
1831
|
+
@AutoJumpEnabled.setter
|
|
1832
|
+
def AutoJumpEnabled(self, value: bool):
|
|
1833
|
+
if self.ClassName != "Humanoid":
|
|
1834
|
+
raise AttributeError("AutoJumpEnabled is only available on Humanoid instances.")
|
|
1835
|
+
self._ensure_writable()
|
|
1836
|
+
self.memory_module.write_bool(
|
|
1837
|
+
self.raw_address + humanoid_offsets["AutoJumpEnabled"],
|
|
1838
|
+
bool(value)
|
|
1839
|
+
)
|
|
1840
|
+
|
|
1841
|
+
@property
|
|
1842
|
+
def BreakJointsOnDeath(self):
|
|
1843
|
+
if self.ClassName != "Humanoid":
|
|
1844
|
+
return None
|
|
1845
|
+
return self.memory_module.read_bool(
|
|
1846
|
+
self.raw_address,
|
|
1847
|
+
humanoid_offsets["BreakJointsOnDeath"]
|
|
1848
|
+
)
|
|
1849
|
+
|
|
1850
|
+
@BreakJointsOnDeath.setter
|
|
1851
|
+
def BreakJointsOnDeath(self, value: bool):
|
|
1852
|
+
if self.ClassName != "Humanoid":
|
|
1853
|
+
raise AttributeError("BreakJointsOnDeath is only available on Humanoid instances.")
|
|
1854
|
+
self._ensure_writable()
|
|
1855
|
+
self.memory_module.write_bool(
|
|
1856
|
+
self.raw_address + humanoid_offsets["BreakJointsOnDeath"],
|
|
1857
|
+
bool(value)
|
|
1858
|
+
)
|
|
1859
|
+
|
|
1860
|
+
@property
|
|
1861
|
+
def CameraOffset(self):
|
|
1862
|
+
if self.ClassName != "Humanoid":
|
|
1863
|
+
return None
|
|
1864
|
+
data = self.memory_module.read_floats(
|
|
1865
|
+
self.raw_address + humanoid_offsets["CameraOffset"],
|
|
1866
|
+
3
|
|
1867
|
+
)
|
|
1868
|
+
return Vector3(*data)
|
|
1869
|
+
|
|
1870
|
+
@CameraOffset.setter
|
|
1871
|
+
def CameraOffset(self, value):
|
|
1872
|
+
if self.ClassName != "Humanoid":
|
|
1873
|
+
raise AttributeError("CameraOffset is only available on Humanoid instances.")
|
|
1874
|
+
self._ensure_writable()
|
|
1875
|
+
vec = self._as_vector3(value, "CameraOffset")
|
|
1876
|
+
self.memory_module.write_floats(
|
|
1877
|
+
self.raw_address + humanoid_offsets["CameraOffset"],
|
|
1878
|
+
(vec.X, vec.Y, vec.Z)
|
|
1879
|
+
)
|
|
1880
|
+
|
|
1881
|
+
@property
|
|
1882
|
+
def DisplayName(self):
|
|
1883
|
+
"""Humanoid display name label. Use PlayerClass.DisplayName for the player display name."""
|
|
1884
|
+
if self.ClassName != "Humanoid":
|
|
1885
|
+
return None
|
|
1886
|
+
return self.memory_module.read_string(
|
|
1887
|
+
self.raw_address,
|
|
1888
|
+
humanoid_offsets["DisplayName"]
|
|
1889
|
+
)
|
|
1890
|
+
|
|
1891
|
+
@property
|
|
1892
|
+
def EvaluateStateMachine(self):
|
|
1893
|
+
if self.ClassName != "Humanoid":
|
|
1894
|
+
return None
|
|
1895
|
+
return self.memory_module.read_bool(
|
|
1896
|
+
self.raw_address,
|
|
1897
|
+
humanoid_offsets["EvaluateStateMachine"]
|
|
1898
|
+
)
|
|
1899
|
+
|
|
1900
|
+
@EvaluateStateMachine.setter
|
|
1901
|
+
def EvaluateStateMachine(self, value: bool):
|
|
1902
|
+
if self.ClassName != "Humanoid":
|
|
1903
|
+
raise AttributeError("EvaluateStateMachine is only available on Humanoid instances.")
|
|
1904
|
+
self._ensure_writable()
|
|
1905
|
+
self.memory_module.write_bool(
|
|
1906
|
+
self.raw_address + humanoid_offsets["EvaluateStateMachine"],
|
|
1907
|
+
bool(value)
|
|
1908
|
+
)
|
|
1909
|
+
|
|
1910
|
+
@property
|
|
1911
|
+
def HealthDisplayDistance(self):
|
|
1912
|
+
if self.ClassName != "Humanoid":
|
|
1913
|
+
return None
|
|
1914
|
+
return self.memory_module.read_float(
|
|
1915
|
+
self.raw_address,
|
|
1916
|
+
humanoid_offsets["HealthDisplayDistance"]
|
|
1917
|
+
)
|
|
1918
|
+
|
|
1919
|
+
@HealthDisplayDistance.setter
|
|
1920
|
+
def HealthDisplayDistance(self, value: float):
|
|
1921
|
+
if self.ClassName != "Humanoid":
|
|
1922
|
+
raise AttributeError("HealthDisplayDistance is only available on Humanoid instances.")
|
|
1923
|
+
self._ensure_writable()
|
|
1924
|
+
self.memory_module.write_float(
|
|
1925
|
+
self.raw_address + humanoid_offsets["HealthDisplayDistance"],
|
|
1926
|
+
float(value)
|
|
1927
|
+
)
|
|
1928
|
+
|
|
1929
|
+
@property
|
|
1930
|
+
def HealthDisplayType(self):
|
|
1931
|
+
if self.ClassName != "Humanoid":
|
|
1932
|
+
return None
|
|
1933
|
+
return self.memory_module.read_int(
|
|
1934
|
+
self.raw_address,
|
|
1935
|
+
humanoid_offsets["HealthDisplayType"]
|
|
1936
|
+
)
|
|
1937
|
+
|
|
1938
|
+
@HealthDisplayType.setter
|
|
1939
|
+
def HealthDisplayType(self, value: int):
|
|
1940
|
+
if self.ClassName != "Humanoid":
|
|
1941
|
+
raise AttributeError("HealthDisplayType is only available on Humanoid instances.")
|
|
1942
|
+
self._ensure_writable()
|
|
1943
|
+
self.memory_module.write_int(
|
|
1944
|
+
self.raw_address + humanoid_offsets["HealthDisplayType"],
|
|
1945
|
+
int(value)
|
|
1946
|
+
)
|
|
1947
|
+
|
|
1948
|
+
@property
|
|
1949
|
+
def HumanoidRootPart(self):
|
|
1950
|
+
if self.ClassName != "Humanoid":
|
|
1951
|
+
return None
|
|
1952
|
+
ptr = self.memory_module.get_pointer(
|
|
1953
|
+
self.raw_address,
|
|
1954
|
+
humanoid_offsets["HumanoidRootPart"]
|
|
1955
|
+
)
|
|
1956
|
+
if ptr == 0:
|
|
1957
|
+
return None
|
|
1958
|
+
return RBXInstance(ptr, self.memory_module)
|
|
1959
|
+
|
|
1960
|
+
@property
|
|
1961
|
+
def NameDisplayDistance(self):
|
|
1962
|
+
if self.ClassName != "Humanoid":
|
|
1963
|
+
return None
|
|
1964
|
+
return self.memory_module.read_float(
|
|
1965
|
+
self.raw_address,
|
|
1966
|
+
humanoid_offsets["NameDisplayDistance"]
|
|
1967
|
+
)
|
|
1968
|
+
|
|
1969
|
+
@NameDisplayDistance.setter
|
|
1970
|
+
def NameDisplayDistance(self, value: float):
|
|
1971
|
+
if self.ClassName != "Humanoid":
|
|
1972
|
+
raise AttributeError("NameDisplayDistance is only available on Humanoid instances.")
|
|
1973
|
+
self._ensure_writable()
|
|
1974
|
+
self.memory_module.write_float(
|
|
1975
|
+
self.raw_address + humanoid_offsets["NameDisplayDistance"],
|
|
1976
|
+
float(value)
|
|
1977
|
+
)
|
|
1978
|
+
|
|
1979
|
+
@property
|
|
1980
|
+
def NameOcclusion(self):
|
|
1981
|
+
if self.ClassName != "Humanoid":
|
|
1982
|
+
return None
|
|
1983
|
+
return self.memory_module.read_int(
|
|
1984
|
+
self.raw_address,
|
|
1985
|
+
humanoid_offsets["NameOcclusion"]
|
|
1986
|
+
)
|
|
1987
|
+
|
|
1988
|
+
@NameOcclusion.setter
|
|
1989
|
+
def NameOcclusion(self, value: int):
|
|
1990
|
+
if self.ClassName != "Humanoid":
|
|
1991
|
+
raise AttributeError("NameOcclusion is only available on Humanoid instances.")
|
|
1992
|
+
self._ensure_writable()
|
|
1993
|
+
self.memory_module.write_int(
|
|
1994
|
+
self.raw_address + humanoid_offsets["NameOcclusion"],
|
|
1995
|
+
int(value)
|
|
1996
|
+
)
|
|
1997
|
+
|
|
1998
|
+
@property
|
|
1999
|
+
def PlatformStand(self):
|
|
2000
|
+
if self.ClassName != "Humanoid":
|
|
2001
|
+
return None
|
|
2002
|
+
return self.memory_module.read_bool(
|
|
2003
|
+
self.raw_address,
|
|
2004
|
+
humanoid_offsets["PlatformStand"]
|
|
2005
|
+
)
|
|
2006
|
+
|
|
2007
|
+
@PlatformStand.setter
|
|
2008
|
+
def PlatformStand(self, value: bool):
|
|
2009
|
+
if self.ClassName != "Humanoid":
|
|
2010
|
+
raise AttributeError("PlatformStand is only available on Humanoid instances.")
|
|
2011
|
+
self._ensure_writable()
|
|
2012
|
+
self.memory_module.write_bool(
|
|
2013
|
+
self.raw_address + humanoid_offsets["PlatformStand"],
|
|
2014
|
+
bool(value)
|
|
2015
|
+
)
|
|
2016
|
+
|
|
2017
|
+
@property
|
|
2018
|
+
def RequiresNeck(self):
|
|
2019
|
+
if self.ClassName != "Humanoid":
|
|
2020
|
+
return None
|
|
2021
|
+
return self.memory_module.read_bool(
|
|
2022
|
+
self.raw_address,
|
|
2023
|
+
humanoid_offsets["RequiresNeck"]
|
|
2024
|
+
)
|
|
2025
|
+
|
|
2026
|
+
@RequiresNeck.setter
|
|
2027
|
+
def RequiresNeck(self, value: bool):
|
|
2028
|
+
if self.ClassName != "Humanoid":
|
|
2029
|
+
raise AttributeError("RequiresNeck is only available on Humanoid instances.")
|
|
2030
|
+
self._ensure_writable()
|
|
2031
|
+
self.memory_module.write_bool(
|
|
2032
|
+
self.raw_address + humanoid_offsets["RequiresNeck"],
|
|
2033
|
+
bool(value)
|
|
2034
|
+
)
|
|
2035
|
+
|
|
2036
|
+
@property
|
|
2037
|
+
def SeatPart(self):
|
|
2038
|
+
if self.ClassName != "Humanoid":
|
|
2039
|
+
return None
|
|
2040
|
+
ptr = self.memory_module.get_pointer(
|
|
2041
|
+
self.raw_address,
|
|
2042
|
+
humanoid_offsets["SeatPart"]
|
|
2043
|
+
)
|
|
2044
|
+
if ptr == 0:
|
|
2045
|
+
return None
|
|
2046
|
+
return RBXInstance(ptr, self.memory_module)
|
|
2047
|
+
|
|
2048
|
+
@property
|
|
2049
|
+
def Sit(self):
|
|
2050
|
+
if self.ClassName != "Humanoid":
|
|
2051
|
+
return None
|
|
2052
|
+
return self.memory_module.read_bool(
|
|
2053
|
+
self.raw_address,
|
|
2054
|
+
humanoid_offsets["Sit"]
|
|
2055
|
+
)
|
|
2056
|
+
|
|
2057
|
+
@Sit.setter
|
|
2058
|
+
def Sit(self, value: bool):
|
|
2059
|
+
if self.ClassName != "Humanoid":
|
|
2060
|
+
raise AttributeError("Sit is only available on Humanoid instances.")
|
|
2061
|
+
self._ensure_writable()
|
|
2062
|
+
self.memory_module.write_bool(
|
|
2063
|
+
self.raw_address + humanoid_offsets["Sit"],
|
|
2064
|
+
bool(value)
|
|
2065
|
+
)
|
|
2066
|
+
|
|
2067
|
+
@property
|
|
2068
|
+
def TargetPoint(self):
|
|
2069
|
+
if self.ClassName != "Humanoid":
|
|
2070
|
+
return None
|
|
2071
|
+
data = self.memory_module.read_floats(
|
|
2072
|
+
self.raw_address + humanoid_offsets["TargetPoint"],
|
|
2073
|
+
3
|
|
2074
|
+
)
|
|
2075
|
+
return Vector3(*data)
|
|
2076
|
+
|
|
2077
|
+
@TargetPoint.setter
|
|
2078
|
+
def TargetPoint(self, value):
|
|
2079
|
+
if self.ClassName != "Humanoid":
|
|
2080
|
+
raise AttributeError("TargetPoint is only available on Humanoid instances.")
|
|
2081
|
+
self._ensure_writable()
|
|
2082
|
+
vec = self._as_vector3(value, "TargetPoint")
|
|
2083
|
+
self.memory_module.write_floats(
|
|
2084
|
+
self.raw_address + humanoid_offsets["TargetPoint"],
|
|
2085
|
+
(vec.X, vec.Y, vec.Z)
|
|
2086
|
+
)
|
|
2087
|
+
|
|
1738
2088
|
@property
|
|
1739
2089
|
def HumanoidState(self):
|
|
1740
2090
|
if self.ClassName != "Humanoid":
|
|
@@ -2959,6 +3309,93 @@ class WorkspaceService(ServiceBase):
|
|
|
2959
3309
|
float(value)
|
|
2960
3310
|
)
|
|
2961
3311
|
|
|
3312
|
+
@property
|
|
3313
|
+
def FallenPartsDestroyHeight(self):
|
|
3314
|
+
if self.failed:
|
|
3315
|
+
return 0.0
|
|
3316
|
+
|
|
3317
|
+
World = self.memory_module.get_pointer(
|
|
3318
|
+
self.instance.raw_address,
|
|
3319
|
+
self.offset_base["World"]
|
|
3320
|
+
)
|
|
3321
|
+
|
|
3322
|
+
return self.memory_module.read_float(
|
|
3323
|
+
World,
|
|
3324
|
+
world_offsets["FallenPartsDestroyHeight"]
|
|
3325
|
+
)
|
|
3326
|
+
|
|
3327
|
+
@FallenPartsDestroyHeight.setter
|
|
3328
|
+
def FallenPartsDestroyHeight(self, value: float):
|
|
3329
|
+
self._ensure_writable()
|
|
3330
|
+
|
|
3331
|
+
World = self.memory_module.get_pointer(
|
|
3332
|
+
self.instance.raw_address,
|
|
3333
|
+
self.offset_base["World"]
|
|
3334
|
+
)
|
|
3335
|
+
|
|
3336
|
+
self.memory_module.write_float(
|
|
3337
|
+
World + world_offsets["FallenPartsDestroyHeight"],
|
|
3338
|
+
float(value)
|
|
3339
|
+
)
|
|
3340
|
+
|
|
3341
|
+
def _get_air_properties(self):
|
|
3342
|
+
"""Returns the AirProperties pointer from World."""
|
|
3343
|
+
World = self.memory_module.get_pointer(
|
|
3344
|
+
self.instance.raw_address,
|
|
3345
|
+
self.offset_base["World"]
|
|
3346
|
+
)
|
|
3347
|
+
return self.memory_module.get_pointer(
|
|
3348
|
+
World,
|
|
3349
|
+
world_offsets["AirProperties"]
|
|
3350
|
+
)
|
|
3351
|
+
|
|
3352
|
+
@property
|
|
3353
|
+
def AirDensity(self):
|
|
3354
|
+
if self.failed:
|
|
3355
|
+
return 0.0
|
|
3356
|
+
|
|
3357
|
+
air = self._get_air_properties()
|
|
3358
|
+
return self.memory_module.read_float(
|
|
3359
|
+
air,
|
|
3360
|
+
air_properties_offsets["AirDensity"]
|
|
3361
|
+
)
|
|
3362
|
+
|
|
3363
|
+
@AirDensity.setter
|
|
3364
|
+
def AirDensity(self, value: float):
|
|
3365
|
+
self._ensure_writable()
|
|
3366
|
+
air = self._get_air_properties()
|
|
3367
|
+
self.memory_module.write_float(
|
|
3368
|
+
air + air_properties_offsets["AirDensity"],
|
|
3369
|
+
float(value)
|
|
3370
|
+
)
|
|
3371
|
+
|
|
3372
|
+
@property
|
|
3373
|
+
def GlobalWind(self):
|
|
3374
|
+
if self.failed:
|
|
3375
|
+
return None
|
|
3376
|
+
|
|
3377
|
+
air = self._get_air_properties()
|
|
3378
|
+
data = self.memory_module.read_floats(
|
|
3379
|
+
air + air_properties_offsets["GlobalWind"],
|
|
3380
|
+
3
|
|
3381
|
+
)
|
|
3382
|
+
return Vector3(*data)
|
|
3383
|
+
|
|
3384
|
+
@GlobalWind.setter
|
|
3385
|
+
def GlobalWind(self, value):
|
|
3386
|
+
self._ensure_writable()
|
|
3387
|
+
if isinstance(value, Vector3):
|
|
3388
|
+
v = value
|
|
3389
|
+
elif isinstance(value, (tuple, list)) and len(value) == 3:
|
|
3390
|
+
v = Vector3(*value)
|
|
3391
|
+
else:
|
|
3392
|
+
raise TypeError("GlobalWind must be a Vector3 or iterable of 3 numbers.")
|
|
3393
|
+
air = self._get_air_properties()
|
|
3394
|
+
self.memory_module.write_floats(
|
|
3395
|
+
air + air_properties_offsets["GlobalWind"],
|
|
3396
|
+
(v.X, v.Y, v.Z)
|
|
3397
|
+
)
|
|
3398
|
+
|
|
2962
3399
|
class LightingService(ServiceBase):
|
|
2963
3400
|
def __init__(self, memory_module, game: DataModel):
|
|
2964
3401
|
super().__init__()
|
|
@@ -3230,6 +3667,23 @@ class LightingService(ServiceBase):
|
|
|
3230
3667
|
float(value)
|
|
3231
3668
|
)
|
|
3232
3669
|
|
|
3670
|
+
@property
|
|
3671
|
+
def GlobalShadows(self):
|
|
3672
|
+
if self.failed: return None
|
|
3673
|
+
return self.memory_module.read_bool(
|
|
3674
|
+
self.instance.raw_address,
|
|
3675
|
+
self.offset_base["GlobalShadows"]
|
|
3676
|
+
)
|
|
3677
|
+
|
|
3678
|
+
@GlobalShadows.setter
|
|
3679
|
+
def GlobalShadows(self, value: bool):
|
|
3680
|
+
if self.failed: return
|
|
3681
|
+
self._ensure_writable()
|
|
3682
|
+
self.memory_module.write_bool(
|
|
3683
|
+
self.instance.raw_address + self.offset_base["GlobalShadows"],
|
|
3684
|
+
bool(value)
|
|
3685
|
+
)
|
|
3686
|
+
|
|
3233
3687
|
class InputObject(RBXInstance):
|
|
3234
3688
|
def __init__(self, raw_address: int, memory_module):
|
|
3235
3689
|
super().__init__(raw_address, memory_module)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: robloxmemoryapi
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
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
|
|
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
|
{robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/bytecode/decryptor.py
RENAMED
|
File without changes
|
{robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/bytecode/encryptor.py
RENAMED
|
File without changes
|
{robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi/utils/rbx/datastructures.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robloxmemoryapi-0.2.5 → robloxmemoryapi-0.2.6}/src/robloxmemoryapi.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|