Quantcast

Jump to content

» «
Photo

entity has marker?

2 replies to this topic
HeresOtis
  • HeresOtis

    The SCM Undergrad

  • Feroci Racing
  • Joined: 29 Apr 2011
  • United-States

#1

Posted 19 July 2013 - 01:44 AM

How to check if a ped/vehicle/object has a radar marker attached to it?

_DK
  • _DK

    Homie

  • Feroci Racing
  • Joined: 12 Apr 2009
  • Ukraine

#2

Posted 19 July 2013 - 09:00 AM

Not tested.
CODE
:EntityHasMarker
/* 0AB1: call @EntityHasMarker 2 params: entityType 1 handle 0@ result: 0@
/  Entity type:
/  1 - car
/  2 - ped
/  3 - object
/  7 - pickup  
*/
for 2@ = 0xBA86F0 to 0xBAA248 step 0x28
   0A8E: 3@ = 2@ + 4
   0A8D: 3@ = read_memory 3@ size 4 virtual_protect 0
   if
       003B: 3@ == 1@
   then
       0A8E: 3@ = 2@ + 0x26
       0A8D: 3@ = read_memory 3@ size 1 virtual_protect 0
       0B15: 3@ = 3@ SHR 2
       0B10: 3@ = 3@ AND 0xF
       if
           003B: 3@ == 0@
       then
           0AB2: ret 1 true
       end
   end        
end
0AB2: ret 1 false

Wesser
  • Wesser

    The complexity simplifier, the efficiency optimizer.

  • Feroci Racing
  • Joined: 19 Aug 2006
  • Unknown

#3

Posted 19 July 2013 - 08:26 PM Edited by Wesser, 19 July 2013 - 10:13 PM.

This CLEO3-compatible function might work in the same way but I'm not sure about the flag as I didn't test the code by myself:
CODE
if
0AB1: call_scm_func @hasEntityMarker 1 entity -1 marker_to 0@
then
   // The marker has been associated to the entity.
end

[...]

:hasEntityMarker
for 1@ = 0xBA86F0 to 0xBAA248 step 0x28 // sizeof(CMarker)
   0A8E: 2@ = 1@ + 0x04 // CMarker.m_iEntityHandle
   0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
   if
   003B: 2@ == 0@
   then
       0A8E: 3@ = 1@ + 0x26 // CMarker.m_cTypeFlag
       0A8D: 3@ = read_memory 3@ size 1 virtual_protect 0
       08C3: clear 3@ bit 0
       08C3: clear 3@ bit 1
       if
           3@ <> 0x00
       then
           0A8E: 4@ = 1@ + 0x14 // CMarker.m_sIndex
           0A8D: 4@ = read_memory 4@ size 2 virtual_protect 0
           4@ *= 0x00010000 // CMarker.m_sIndex << 16
           1@ /= 0x28
           005A: 1@ += 4@
           0485: return_true
           0AB2: ret 1 marker 1@
       end
   end
end
059A: return_false
0AB2: ret 1 marker -1




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users