asd
🧩 Syntax:
{$CLEO .cs}
wait 8500
while true
wait 0
if
0256: player $PLAYER_ACTOR defined
then
0A8D: 29@ = read_memory 0xB74490 size 4 virtual_protect 0
29@ += 0x4
0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0
for 30@ = 0 to 35584 step 0x100
0A8D: 31@ = read_memory 29@ size 1 virtual_protect 0
000A: 29@ += 0x1
if and
0029: 31@ >= 0x00
001B: 0x80 > 31@
then
005A: 31@ += 30@
//0226: 5@ = actor 31@ health
if
0AB1: @SAMPGetPlayerIDByActorHandle 1 _ActorHandle 31@ _Returned: ID 28@
then
if
0AB1: @IsPlayerConnected 1 ID 28@
then
0AB1: @SAMPGetActorHealthByID 1 PlayerID 28@ _Returned: Health 5@
if
0AB1: @GetPlayerNameByID 1 ID 28@ _Returned: Name 27@
then
if and
056D: actor 31@ defined
803B: 31@ == $PLAYER_ACTOR // not my ped
then
if and
8118: actor 31@ dead
02CB: actor 31@ bounding_sphere_visible
then
03F0: enable_text_draw 1
0AC8: 26@ = allocate_memory_size 100
0AD3: 26@ = format "%s" 27@
0AC9: free_allocated_memory 26@
04C4: store_coords_to 11@ 12@ 13@ from_actor 31@ with_offset 0.0 0.0 0.0
0AB1: @Convert3DposTo2Dscreen 3 XYZ 11@ 12@ 13@ ScreenXY 11@ 12@
0AB1: call_scm_func @GET_BONE_POS 2 FROM_ACTOR 31@ BONE 6 _STORE_TO 0@ 1@ 2@ // HEAD
0AB1: call_scm_func @getScreenXYFrom3DCoords 3 3D_coords_X 0@ Y 1@ Z 2@ store_screen_X_to 3@ Y_to 4@
0AB1: call_scm_func @drawBar 9 coords_X 3@ coords_Y 4@ value 5@ size X 40.0 Y 4.0 thickness 2.0 RGB 255 0 0
0AB1: @CreateTextdraw 4 ID 1000 Text 26@ XY 11@ 12@
0AC9: free_allocated_memory 26@
//0AB1: call_scm_func @drawNumber 6 coords_X 3@ coords_Y 4@ value 5@ R 255 G 255 B 255
end
end
end
end
end
end
end
end
end
:CreateTextdraw
{
0.3.DL
0AC8: 0@ = allocate_memory_size 1024
0AD3: 0@ = format "Textdraw.."
0AB1: @CreateTextdraw 4 ID 1000 Text 0@ XY 320.0 224.0
}
IF 0AA2: 31@ = "samp.dll"
THEN
0AC8: 30@ = allocate_memory_size 66
0A8C: write_memory 30@ size 2 value 18 virtual_protect 1
30@ += 0x1
0A8C: write_memory 30@ size 4 value 0.25 virtual_protect 1 // fLetterWidth
30@ += 0x4
0A8C: write_memory 30@ size 4 value 1.0 virtual_protect 1 // fLetterHeight
30@ += 0x4
0A8C: write_memory 30@ size 4 value 0xFFFFFFFF virtual_protect 1 // letterColor
30@ += 0x4
0A8C: write_memory 30@ size 4 value 0.0 virtual_protect 1 // fBoxWidth
30@ += 0x4
0A8C: write_memory 30@ size 4 value 0.0 virtual_protect 1 // fBoxHeight
30@ += 0x4
0A8C: write_memory 30@ size 4 value 0xFF000000 virtual_protect 1 // boxColor
30@ += 0x4
0A8C: write_memory 30@ size 1 value 0 virtual_protect 1 // nShadow
30@ += 0x1
0A8C: write_memory 30@ size 1 value 0 virtual_protect 1 // bOutline
30@ += 0x1
0A8C: write_memory 30@ size 4 value 0xFF000000 virtual_protect 1 // m_backgroundColor
30@ += 0x4
0A8C: write_memory 30@ size 1 value 1 virtual_protect 1 // m_nStyle
30@ += 0x1
0A8C: write_memory 30@ size 1 value 0 virtual_protect 1 // unknown
30@ += 0x1
0A8C: write_memory 30@ size 4 value 2@ virtual_protect 1 // m_fX
30@ += 0x4
0A8C: write_memory 30@ size 4 value 3@ virtual_protect 1 // m_fY
30@ += 0x4
0A8C: write_memory 30@ size 2 value 0 virtual_protect 1 // m_nModel
30@ += 0x2
0A8C: write_memory 30@ size 4 value 0.0 virtual_protect 1 // m_rotationX
30@ += 0x4
0A8C: write_memory 30@ size 4 value 0.0 virtual_protect 1 // m_rotationY
30@ += 0x4
0A8C: write_memory 30@ size 4 value 0.0 virtual_protect 1 // m_rotationZ
30@ += 0x4
0A8C: write_memory 30@ size 4 value 0.0 virtual_protect 1 // m_fZoom
30@ += 0x4
0A8C: write_memory 30@ size 2 value 0xFF virtual_protect 1 // m_aColor[0]
30@ += 0x2
0A8C: write_memory 30@ size 2 value 0xFF virtual_protect 1 // m_aColor[1]
30@ -= 61 // go back to the original pointer.
0A8E: 29@ = 31@ + 0x2ACA24 // SAMP_INFO_OFFSET
0A8D: 29@ readMem 29@ sz 4 vp 0
29@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 29@ readMem 29@ sz 4 vp 0
29@ += 0x20 // SAMP_PPOOL_TEXTDRAW_OFFSET
0A8D: 29@ readMem 29@ sz 4 vp 0
0A8E: 28@ = 31@ + 0x1E3D0 //SAMP_CREATE_TEXTDRAW_OFFSET
0AA6: call_method 28@ struct 29@ num_params 3 pop 0 Text 1@ pTransmit 30@ ID 0@ _retVal 6@
END
0AB2: 0
:GetPlayerNameByID
{
0.3.DL
IF 0AB1: @GetPlayerNameByID 1 ID 0@ _Returned: Name 1@
}
IF 0AA2: 31@ = "samp.dll"
THEN
0A8E: 30@ = 31@ + 0x2ACA24 // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x170D0 // SAMP_GET_PLAYER_NAME_OFFSET
0AA8: call_function_method 29@ struct 30@ num_params 1 pop 0 0@ _Returned: Name 28@
IF 28@ > 0
THEN 0485: RETURN_TRUE
ELSE 059A: RETURN_FALSE
END
END
0AB2: 1 28@
:drawNumber
//0AB1: call_scm_func @drawNumber 6 coords_X 0@ coords_Y 1@ value 2@ R 3@ G 4@ B 5@
0349: set_text_draw_font 1
0342: set_text_draw_centered 1
033F: set_text_draw_letter_size 0.3 0.9
081C: draw_text_outline 1 RGBA 0 0 0 255
0340: set_text_draw_RGBA 3@ 4@ 5@ 255
045A: draw_text_1number 0@ 1@ GXT 'NUMBER' number 2@ // ~1~
0AB2: ret 0
:IsPlayerConnected
{
IF 0AB1: @IsPlayerConnected 1 ID 0@
}
IF 0AA2: 31@ = "samp.dll"
THEN
0AB1: @get_samp_version_id 0 _returned: ID 17@
IF 17@ > 0
THEN
IF 17@ == 1 // 0.3.7 R1
THEN
0A8E: 30@ = 31@ + 0x21A0F8 // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3CD // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x18 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x10B0 // SAMP_IS_PLAYER_CONNECTED_OFFSET
END
IF 17@ == 2 // 0.3.7 R2
THEN
0A8E: 30@ = 31@ + 0x21A100 // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3C5 // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x10B0 // SAMP_IS_PLAYER_CONNECTED_OFFSET
END
IF 17@ == 3 // 0.3.DL
THEN
0A8E: 30@ = 31@ + 0x2ACA24 // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x10B0 // SAMP_IS_PLAYER_CONNECTED_OFFSET
END
IF 17@ == 4 // 0.3.7 R3
THEN
0A8E: 30@ = 31@ + 0x26E8DC // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x10B0 // SAMP_IS_PLAYER_CONNECTED_OFFSET
END
IF 17@ == 5 // 0.3.7 R4
THEN
0A8E: 30@ = 31@ + 0x26EA0C // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x10B0 // SAMP_IS_PLAYER_CONNECTED_OFFSET
END
IF 17@ == 6 // 0.3.7 R4 - v2
THEN
0A8E: 30@ = 31@ + 0x26EA0C // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x4 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x10B0 // SAMP_IS_PLAYER_CONNECTED_OFFSET
END
IF 17@ == 7 // 0.3.7 R5
THEN
0A8E: 30@ = 31@ + 0x26EB94 // SAMP_INFO_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
30@ += 0x4 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 30@ = readMem 30@ sz 4 vp 0
0A8E: 29@ = 31@ + 0x10B0 // SAMP_IS_PLAYER_CONNECTED_OFFSET
END
0AA8: call_function_method 29@ struct 30@ num_params 1 pop 0 ID 0@ _Returned: Name 28@
IF 28@ > 0
THEN 0485: RETURN_TRUE
ELSE 059A: RETURN_FALSE
END
END
END
0AB2: ret 0
:SAMPGetPlayerIDByActorHandle
{
0.3.DL
IF 0AB1: @SAMPGetPlayerIDByActorHandle 1 _ActorHandle 0@ _Returned: ID 31@
}
IF 0AA2: 31@ = loadlib "samp.dll" // GET_SAMP_BASE
THEN
31@ += 0x2ACA24 // SAMP_INFO_OFFSET[0]
0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 // SAMP_INFO
IF 31@ > 0
THEN
31@ += 0x3DE // SAMP_POOLS_OFFSET[0]
0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 // SAMP_POOLS_OFFSET
IF 31@ > 0
THEN
31@ += 0x8 // PLAYER_POOLS_OFFSET[0]
0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 // PLAYER_POOLS
IF 31@ > 0
THEN
IF 003B: 0@ == $PLAYER_ACTOR // COMPARE_HANDLE_WHICH_WAS_GIVEN
THEN
0A8E: 30@ = 31@ + 0x0 // LOCAL_PLAYER_ID_OFFSET[0]
0A8D: 28@ = read_memory 30@ size 2 virtual_protect 0 // LOCAL_PLAYER_ID
0AB2: RET 1 28@
ELSE
0A8E: 29@ = 31@ + 0x22 // MAX_PLAYER_ID_STREAMED_ONLY_OFFSET[0]
0A8D: 29@ = read_memory 29@ size 4 virtual_protect 0 // MAX_PLAYER_ID_STREAMED_ONLY
FOR 28@ = 0 TO 29@ // FROM "0" TO "MAX_PLAYER_ID_STREAMED_ONLY"
27@ = 0x4 // SAVE VARIABLE "27@" AS DIGIT "4"
006A: 27@ *= 28@ // 4 * ID
0A8E: 26@ = 31@ + 0x26 // SAVE TO NEW "26@" VARIABLE "PLAYER_POOLS" + "REMOTE_PLAYER_OFFSET[0]"
005A: 26@ += 27@ // REMOTE_PLAYER_OFFSET + 4 * ID
0A8D: 26@ = read_memory 26@ size 4 virtual_protect 0 // REMOTE_PLAYER
IF 26@ > 0
THEN
26@ += 0x8 // PLAYER_DATA_OFFSET[0]
0A8D: 26@ = read_memory 26@ size 4 virtual_protect 0 // PLAYER_DATA
IF 26@ > 0
THEN
26@ += 0x4 // SAMP_ACTOR_OFFSET[0]
0A8D: 26@ = read_memory 26@ size 4 virtual_protect 0 // SAMP_ACTOR
IF 26@ > 0
THEN
26@ += 0x44 // GTA_PED_HANDLE_OFFSET[0]
0A8D: 26@ = read_memory 26@ size 4 virtual_protect 0 // GTA_PED_HANDLE
IF 26@ > 0
THEN
IF 003B: 0@ == 26@ // COMPARE_HANDLE_WHICH_WAS_GIVEN
THEN
0485: RETURN_TRUE
0AB2: RET 1 28@
END
END
END
END
END
END
END
END
END
END
END
059A: RETURN_FALSE
0AB2: RET 0
:get_samp_version_id
// 0AB1: @get_samp_version_id 0 _returned: ID 0@
30@ = 0
IF 0AA2: 31@ = "samp.dll" // IF and SET
THEN
31@ += 0x128
0A8D: 29@ = read_memory 31@ size 4 virtual_protect 1
IF 29@ == 0x5542F47A
THEN // 0.3.7 R1
30@ = 1
END
IF 29@ == 0x59C30C94
THEN // 0.3.7 R2
30@ = 2
END
IF 29@ == 0x5A6A3130
THEN // 0.3.DL
30@ = 3
END
31@ -= 8 // reading samp.dll + 0x120
0A8D: 29@ = read_memory 31@ size 4 virtual_protect 1
IF 29@ == 0x5C0B4243
THEN // 0.3.7 R3
30@ = 4
END
IF 29@ == 0x5DD606CD
THEN // 0.3.7 R4
30@ = 5
END
IF 29@ == 0x6094ACAB
THEN // 0.3.7 R4 - v2
30@ = 6
END
IF 29@ == 0x6372C39E
THEN // 0.3.7 R5
30@ = 7
END
END
0AB2: ret 1 30@
:SAMPGetActorHealthByID
{
0.3.DL
0AB1: @SAMPGetActorHealthByID 1 PlayerID 995 _Returned: Health 1@
}
IF 0AA2: 1@ = "samp.dll"
THEN
1@ += 0x2ACA24 // SAMP_INFO_OFFSET
0A8D: 1@ readMem 1@ sz 4 vp 0
1@ += 0x3DE // SAMP_PPOOLS_OFFSET
0A8D: 1@ readMem 1@ sz 4 vp 0
1@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET
0A8D: 1@ readMem 1@ sz 4 vp 0
0@ *= 0x4 // PLAYER_ID * 4
0@ += 0x26 // SAMP_REMOTEPLAYER_OFFSET
005A: 1@ += 0@
0A8D: 1@ readMem 1@ sz 4 vp 0
IF 1@ > 0
THEN
1@ += 0x8 // SAMP_REMOTEPLAYERDATA_OFFSET
0A8D: 1@ readMem 1@ sz 4 vp 0
IF 1@ > 0
THEN
1@ += 0x1B0 // SAMP_REMOTEPLAYERDATA_HEALTH_OFFSET
0A8D: 1@ readMem 1@ sz 4 vp 0
IF NOT 1@ < 0
THEN 0485: return_true
ELSE 059A: return_false
END
ELSE 059A: return_false
END
ELSE 059A: return_false
END
END
0AB2: 1 1@
:GET_BONE_POS
0085: 10@ = 0@ // (int)
0085: 15@ = 1@ // (int)
1@ = 0.0 // X offset
2@ = 0.0 // Y offset {THX TO: WESSER}
3@ = 0.0 // Z offset
0A96: 0@ = actor 10@ struct
0AC7: 4@ = var 1@ offset
0AA6: call_method 0x5E01C0 struct 0@ num_params 3 pop 0 bIncludeAnim 1 iBoneID 15@ vOffset 4@ // CPed__getBonePositionWithOffset
0AB2: retn 3 1@ 2@ 3@
:Convert3DposTo2Dscreen
{
0xB6FA2C - CAMERA VIEW MATRIX
input: 0@ 1@ 2@ xyz world coordinates
output: 0@ 1@ xy screen coordinates (640x448)
0AB1: @Convert3DposTo2Dscreen 3 XYZ 0@ 1@ 2@ ScreenXY 0@ 1@
}
// x = _x * _11 + _y * _21 + _z * _31 + 1 * _41
0007: 10@ = 0.0 // l=i (float)
0087: 3@ = 0@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA2C size 4 vp 0 // _11
006B: 3@ *= 4@ // l*=l (float)
005B: 10@ += 3@ // l+=l (float)
0087: 3@ = 1@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA3C size 4 vp 0 // _21
006B: 3@ *= 4@ // l*=l (float)
005B: 10@ += 3@ // l+=l (float)
0087: 3@ = 2@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA4C size 4 vp 0 // _31
006B: 3@ *= 4@ // l*=l (float)
005B: 10@ += 3@ // l+=l (float)
0A8D: 4@ = read_memory 0xB6FA5C size 4 vp 0 // _41
005B: 10@ += 4@ // l+=l (float)
// y = _x * _12 + _y * _22 + _z * _32 + 1 * _42
0007: 11@ = 0.0 // l=i (float)
0087: 3@ = 0@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA30 size 4 vp 0 // _12
006B: 3@ *= 4@ // l*=l (float)
005B: 11@ += 3@ // l+=l (float)
0087: 3@ = 1@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA40 size 4 vp 0 // _22
006B: 3@ *= 4@ // l*=l (float)
005B: 11@ += 3@ // l+=l (float)
0087: 3@ = 2@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA50 size 4 vp 0 // _32
006B: 3@ *= 4@ // l*=l (float)
005B: 11@ += 3@ // l+=l (float)
0A8D: 4@ = read_memory 0xB6FA60 size 4 vp 0 // _42
005B: 11@ += 4@ // l+=l (float)
// z = _x * _13 + _y * _23 + _z * _33 + 1 * _43
0007: 12@ = 0.0 // l=i (float)
0087: 3@ = 0@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA34 size 4 vp 0 // _13
006B: 3@ *= 4@ // l*=l (float)
005B: 12@ += 3@ // l+=l (float)
0087: 3@ = 1@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA44 size 4 vp 0 // _23
006B: 3@ *= 4@ // l*=l (float)
005B: 12@ += 3@ // l+=l (float)
0087: 3@ = 2@ // l=l (float)
0A8D: 4@ = read_memory 0xB6FA54 size 4 vp 0 // _33
006B: 3@ *= 4@ // l*=l (float)
005B: 12@ += 3@ // l+=l (float)
0A8D: 4@ = read_memory 0xB6FA64 size 4 vp 0 // _43
005B: 12@ += 4@ // l+=l (float)
// x *= 640.0 / z
// y *= 448.0 / z
0007: 0@ = 640.0 // l=i (float)
0007: 1@ = 448.0 // l=i (float)
006B: 0@ *= 10@ // l*=l (float)
006B: 1@ *= 11@ // l*=l (float)
0073: 0@ /= 12@ // l/=l (float)
0073: 1@ /= 12@ // l/=l (float)
0AB2: 2 0@ 1@
:getScreenXYFrom3DCoords
0AC7: 14@ = var 0@ offset
0AC7: 15@ = var 3@ offset
0AC7: 16@ = var 6@ offset
0AC7: 17@ = var 9@ offset
0AA5: call 0x70CE30 num_params 6 pop 6 {18@ 18@} 0 0 17@ 16@ 15@ 14@
0007: 12@ = 640.0
0007: 13@ = 448.0
0A8D: 14@ = read_memory 0xC17044 size 4 virtual_protect 0
0A8D: 15@ = read_memory 0xC17048 size 4 virtual_protect 0
0093: 14@ = integer 14@ to_float
0093: 15@ = integer 15@ to_float
0073: 12@ /= 14@
0073: 13@ /= 15@
006B: 3@ *= 12@
006B: 4@ *= 13@
0AB2: ret 2 3@ 4@
:drawBar
13@ = 100.0
0073: 13@ /= 3@ // (float)
0073: 2@ /= 13@ // (float)
0087: 11@ = 3@ // (float)
0087: 12@ = 4@ // (float)
005B: 11@ += 5@ // (float)
005B: 12@ += 5@ // (float)
038E: draw_box_position 0@ 1@ size 11@ 12@ RGBA 0 0 0 255
038E: draw_box_position 0@ 1@ size 3@ 4@ RGBA 6@ 7@ 8@ 255
0087: 10@ = 2@ // (float)
0017: 10@ /= 2.0
0017: 3@ /= 2.0
005B: 0@ += 10@ // (float)
0063: 0@ -= 3@ // (float)
038E: draw_box_position 0@ 1@ size 2@ 4@ RGBA 255 0 0 255
0AB2: ret 0