{$CLEO .cs} wait 3000 25@ = 0 while true wait 0 if 0ADC: test_cheat "z" then 0AD1: show_formatted_text_highpriority "on" time 2000 25@ = 1 end if 0ADC: test_cheat "x" then 0AD1: show_formatted_text_highpriority "off" time 2000 25@ = 0 0AC8: 26@ = allocate_memory_size 100 0AD3: 26@ = format "" 0AC9: free_allocated_memory 26@ 0AB1: @CreateTextdraw 4 ID 1000 Text 26@ XY 0.0 0.0 end 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 25@ == 1 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 "~p~%s ~Y~%.1f" 27@ 5@ 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 11.5 Y 2.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