CLEO Help Help for Anti AFK.

CLEO related

ha.sh

Active member
Joined
Nov 14, 2018
Messages
66
Reaction score
0
Can someone help me for this? I've tried to make a cleo for Anti AFK. That'll be need the 3 digits number. The problem is, the cleo can't read that 3 digits from the string after "/afk".

Code:

Code:
if
0256:   player $PLAYER_CHAR defined
then
    0AC8: 1@ = allocate_memory_size 260
    0AB1: @getChatEntryText 1 ChatLineID 99 _Returned: text 1@ // 99 last chat line
    0AC8: 2@ = allocate_memory_size 260
    0AB1: @DeleteColorCodeFromText 4 text 1@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 2@ // remove color codes and return clean string  
    0AC8: 3@ = allocate_memory_size 1024
    0AD3: 3@ = format "You are now AFK, use `/afk"  
    0AC8: 5@ = allocate_memory_size 1024
    0AB1: @get_digits_to_print 2 text 3@ memory_to_store_digits_as_text 5@
    if
    0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: text 4@  // find text and compare to make sure is that what we need  
    then
        wait 700                  
        0AB1: @SEND_CMD 1 text 5@        
        wait 1000 // Antispam
    end
end
 

Parazitas

God
Joined
Jan 2, 2017
Messages
3,116
Solutions
5
Reaction score
882
Location
Lithuania
PHP:
{$CLEO .cs}

0000:

wait 8500

while true
wait 0

if 0256:   player $PLAYER_CHAR defined
then
    0AB1: @get_samp_version_id 0 _returned: ID 0@ 
    0AC8: 1@ = allocate_memory_size 1024
    0AC8: 2@ = allocate_memory_size 1024
    0AB1: @getChatString 2 SampVersionID 0@ ChatID 99 _Returned: Text 1@ PrefixText 2@ Color 3@ PrefixColor 4@  
    0AC8: 5@ = allocate_memory_size 1024
    0AB1: @DeleteColorCodeFromText 2 text 1@ memory_to_store_characters_as_text 5@
    0AC8: 6@ = allocate_memory_size 1024
    0AD3: 6@ = format "You are now AFK, use `/afk"  
    if 0AB1: @IfTextContains 2 String1 5@ String2 6@ _Returned: Text 7@  // find text and compare to make sure is that what we need  
    then
        0209: 8@ = random_int_in_ranges 500 700 
        wait 8@                
        0AC8: 9@ = allocate_memory_size 1024
        0AB1: @get_digits_to_print 2 text 7@ memory_to_store_digits_as_text 9@
        0AB1: @ProcessChatInput 2 SampVersionID 0@ InputText 9@       
        wait 1000 // Anti spam
    end
end

end

: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 
END
0AB2: ret 1 30@

:getChatString
{
    0AC8: 1@ = allocate_memory_size 1024
    0AC8: 2@ = allocate_memory_size 1024
    0AB1: @getChatString 2 SampVersionID 0@ ChatID 99 _Returned: Text 1@ PrefixText 2@ Color 3@ PrefixColor 4@
}
IF 0AA2: 31@ = "samp.dll"
THEN
    IF NOT 0@ < 1
    THEN
        IF 0@ == 1 // 0.3.7 R1
        THEN 
            31@ += 0x21A0E4 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END
        IF 0@ == 2 // 0.3.7 R2
        THEN 
            31@ += 0x21A0EC // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END

        IF 0@ == 3 // 0.3.DL
        THEN 
            31@ += 0x2ACA10 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END

        IF 0@ == 4 // 0.3.7 R3
        THEN  
            31@ += 0x26E8C8 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END

        IF 0@ == 5 // 0.3.7 R4
        THEN 
            31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END
      
        IF 0@ == 6 // 0.3.7 R4 - v2
        THEN 
            31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END
    END
    0AA3: 31@
END
0AB2: ret 4 30@ 29@ 27@ 24@

:ProcessChatInput
{
    0AB1: @get_samp_version_id 0 _returned: ID 0@
    0AB1: @ProcessChatInput 2 SampVersionID 0@ InputText 0@
}
IF 0AA2: 20@ = "samp.dll"
THEN    
    IF NOT 0@ < 1
    THEN
        IF 0@ == 1 // 0.3.7 R1
        THEN
            0A8E: 21@ = 20@ + 0x21A0E8            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
           
            0A8E: 24@ = 20@ + 0x80F60 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x65D30 // PROCESS_INPUT  
        END
    
        IF 0@ == 2 // 0.3.7 R2
        THEN
            0A8E: 21@ = 20@ + 0x21A0F0            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
           
            0A8E: 24@ = 20@ + 0x81000 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x65E00 // PROCESS_INPUT 
        END
    
        IF 0@ == 3 // 0.3.DL
        THEN
            0A8E: 21@ = 20@ + 0x2ACA14            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
           
            0A8E: 24@ = 20@ + 0x85000 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x69410 // PROCESS_INPUT   
        END
    
        IF 0@ == 4 // 0.3.7 R3
        THEN
            0A8E: 21@ = 20@ + 0x26E8CC            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
           
            0A8E: 24@ = 20@ + 0x84E70 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x69260 // PROCESS_INPUT 
        END
    
        IF 0@ == 5 // 0.3.7 R4
        THEN
            0A8E: 21@ = 20@ + 0x26E9FC            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
           
            0A8E: 24@ = 20@ + 0x855B0 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x69990 // PROCESS_INPUT 
        END
        
        IF 0@ == 6 // 0.3.7 R4 - v2
        THEN
            0A8E: 21@ = 20@ + 0x26E9FC            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
           
            0A8E: 24@ = 20@ + 0x855E0 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x699D0 // PROCESS_INPUT 
        END
        0AA8: call_function_method 24@ struct 27@ num_params 2 pop 0 _bSelected 0 _pszText 1@ _retVal 6@
        0AA8: call_function_method 25@ struct 22@ num_params 0 pop 0 _retVal 7@
    END
END
0AB2: 0

:DeleteColorCodeFromText
{
    0AC8: 1@ = allocate_memory_size 1024
    0AB1: @DeleteColorCodeFromText 2 text 0@ memory_to_store_characters_as_text 1@
}
//*********************** Strlen *********************\\
0085: 27@ = 0@ // copy pointer
FOR 31@ = 0 TO 1024
    0A8D: 26@ = read_memory 27@ size 1 virtual_protect 0
    IF NOT 26@ == 0
    JF BREAK
    27@ += 1
END    
//****************************************************\\
5@ = FALSE // inbracket
    FOR 30@ = 0 TO 31@  
        0085: 29@ = 0@ // copy pointer
        005A: 29@ += 30@  // add offset (as the loop progresses it becomes pointers to first-last character)
        0A8D: 28@ = read_memory 29@ size 1 virtual_protect 1 // 28@ is the ascii number representing character
        IF 28@ == 123
        THEN 5@ = TRUE // inbracket begin
        END
        
        IF 5@ == FALSE // not inbracket 
        THEN
            0A8C: write_memory 1@ size 1 value 28@ virtual_protect 1
            1@ += 1 // move to next address
        END
        
        IF 28@ == 125
        THEN 5@ = FALSE // inbracket end
        END
    END
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination 
0AB2: ret 0

:IfTextContains
{
    0@ - the main text
    1@ - piece of text to be found within the main text
}
//*********************** Strlen *********************\\
0085: 25@ = 0@ // copy pointer
FOR 31@ = 0 TO 1024
    0A8D: 22@ = read_memory 25@ size 1 virtual_protect 0
    IF NOT 22@ == 0
    JF BREAK
    25@ += 1
END    
//****************************************************\\
//*********************** Strlen *********************\\
0085: 21@ = 1@ // copy pointer
FOR 30@ = 0 TO 1024
    0A8D: 20@ = read_memory 21@ size 1 virtual_protect 0
    IF NOT 20@ == 0
    JF BREAK
    21@ += 1
END    
//****************************************************\\
//initial length check (the phrase can't be longer than the main text)
if 001D:   30@ > 31@  // (int)
then
059A:  return_false
0AB2: ret 1 0
end

31@ -= 1
26@ = 0 // counter of the same chars in a row
for 29@ = 0 to 31@ // for each char of the main text  (29@ = index)
    0085: 24@ = 0@ // (int)
    005A: 24@ += 29@  // (int)
    0A8D: 28@ = read_memory 24@ size 1 virtual_protect 0

    0085: 23@ = 1@ // (int)
    005A: 23@ += 26@  // (int)
    0A8D: 27@ = read_memory 23@ size 1 virtual_protect 0

    if 003B:   28@ == 27@  // (int)
    then
    26@++
        if 002D:   26@ >= 30@  // (int)
        then
        0485:  return_true
        0062: 24@ -= 30@  // (int)
        24@ += 1
        0AB2: ret 1 24@
        end
    else
        if 26@ > 0
        then
        29@-- //check the same char again and assume it's the begining of the string but only if there was matching parts before (otherwise it would go back all the time and make infinite loop)
        end
    26@ = 0
    end
end

059A:  return_false
0AB2: ret 1 0

:get_digits_to_print
{
    0AC8: 1@ = allocate_memory_size 1024
    0AB1: @get_digits_to_print 2 text 0@ memory_to_store_digits_as_text 1@
}
//*********************** Strlen *********************\\
0085: 27@ = 0@ // copy pointer
FOR 31@ = 0 TO 1024
    0A8D: 26@ = read_memory 27@ size 1 virtual_protect 0
    IF NOT 26@ == 0
    JF BREAK
    27@ += 1
END    
//****************************************************\\
5@ = FALSE // inbracket
    FOR 30@ = 0 TO 31@ 
        0085: 29@ = 0@ // copy pointer
        005A: 29@ += 30@  // add offset (as the loop progresses it becomes pointers to first-last character)
        0A8D: 28@ = read_memory 29@ size 1 virtual_protect 1 // 28@ is the ascii number representing character
        IF 28@ == 123
        THEN 5@ = TRUE // inbracket
        END
       
        IF 5@ == FALSE
        THEN
            IF AND
            28@ >= 0x30 // '0'
            28@ <= 0x39 // '9'
            THEN
                0A8C: write_memory 1@ size 1 value 28@ virtual_protect 1
                1@ += 1 // move to next address
            END
        END
       
        IF 28@ == 125
        THEN 5@ = FALSE // inbracket
        END
    END
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
 

ha.sh

Active member
Joined
Nov 14, 2018
Messages
66
Reaction score
0
PHP:
{$CLEO .cs}

0000:

wait 8500

while true
wait 0

if 0256:   player $PLAYER_CHAR defined
then
    0AB1: @get_samp_version_id 0 _returned: ID 0@
    0AC8: 1@ = allocate_memory_size 1024
    0AC8: 2@ = allocate_memory_size 1024
    0AB1: @getChatString 2 SampVersionID 0@ ChatID 99 _Returned: Text 1@ PrefixText 2@ Color 3@ PrefixColor 4@ 
    0AC8: 5@ = allocate_memory_size 1024
    0AB1: @DeleteColorCodeFromText 2 text 1@ memory_to_store_characters_as_text 5@
    0AC8: 6@ = allocate_memory_size 1024
    0AD3: 6@ = format "You are now AFK, use `/afk" 
    if 0AB1: @IfTextContains 2 String1 5@ String2 6@ _Returned: Text 7@  // find text and compare to make sure is that what we need 
    then
        0209: 8@ = random_int_in_ranges 500 700
        wait 8@               
        0AC8: 9@ = allocate_memory_size 1024
        0AB1: @get_digits_to_print 2 text 7@ memory_to_store_digits_as_text 9@
        0AB1: @ProcessChatInput 2 SampVersionID 0@ InputText 9@      
        wait 1000 // Anti spam
    end
end

end

: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
END
0AB2: ret 1 30@

:getChatString
{
    0AC8: 1@ = allocate_memory_size 1024
    0AC8: 2@ = allocate_memory_size 1024
    0AB1: @getChatString 2 SampVersionID 0@ ChatID 99 _Returned: Text 1@ PrefixText 2@ Color 3@ PrefixColor 4@
}
IF 0AA2: 31@ = "samp.dll"
THEN
    IF NOT 0@ < 1
    THEN
        IF 0@ == 1 // 0.3.7 R1
        THEN
            31@ += 0x21A0E4 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END
        IF 0@ == 2 // 0.3.7 R2
        THEN
            31@ += 0x21A0EC // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END

        IF 0@ == 3 // 0.3.DL
        THEN
            31@ += 0x2ACA10 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END

        IF 0@ == 4 // 0.3.7 R3
        THEN 
            31@ += 0x26E8C8 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END

        IF 0@ == 5 // 0.3.7 R4
        THEN
            31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END
     
        IF 0@ == 6 // 0.3.7 R4 - v2
        THEN
            31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
            0A8D: 31@ readMem 31@ sz 4 vp 0
            31@ += 0x132
            1@ *= 0xFC
            005A: 31@ += 1@
            0A8E: 30@ = 31@ + 0x20 // CHAT_TEXT_OFFSET
            0A8E: 29@ = 31@ + 0x4 // CHAT_PREFIX_TEXT_OFFSET
            0A8E: 28@ = 31@ + 0xF4 // CHAT_COLOR_OFFSET
            0A8D: 27@ readMem 28@ sz 4 vp 0 // HEX Color
            0A8E: 26@ = 31@ + 0xF8 // CHAT_PREFIX_COLOR_OFFSET
            0A8D: 25@ readMem 26@ sz 1 vp 0
            IF NOT 25@ > 0
            THEN 24@ = 0
            ELSE 0A8D: 24@ readMem 26@ sz 4 vp 0
            END
        END
    END
    0AA3: 31@
END
0AB2: ret 4 30@ 29@ 27@ 24@

:ProcessChatInput
{
    0AB1: @get_samp_version_id 0 _returned: ID 0@
    0AB1: @ProcessChatInput 2 SampVersionID 0@ InputText 0@
}
IF 0AA2: 20@ = "samp.dll"
THEN   
    IF NOT 0@ < 1
    THEN
        IF 0@ == 1 // 0.3.7 R1
        THEN
            0A8E: 21@ = 20@ + 0x21A0E8            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
          
            0A8E: 24@ = 20@ + 0x80F60 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x65D30 // PROCESS_INPUT 
        END
   
        IF 0@ == 2 // 0.3.7 R2
        THEN
            0A8E: 21@ = 20@ + 0x21A0F0            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
          
            0A8E: 24@ = 20@ + 0x81000 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x65E00 // PROCESS_INPUT
        END
   
        IF 0@ == 3 // 0.3.DL
        THEN
            0A8E: 21@ = 20@ + 0x2ACA14            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
          
            0A8E: 24@ = 20@ + 0x85000 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x69410 // PROCESS_INPUT  
        END
   
        IF 0@ == 4 // 0.3.7 R3
        THEN
            0A8E: 21@ = 20@ + 0x26E8CC            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
          
            0A8E: 24@ = 20@ + 0x84E70 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x69260 // PROCESS_INPUT
        END
   
        IF 0@ == 5 // 0.3.7 R4
        THEN
            0A8E: 21@ = 20@ + 0x26E9FC            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
          
            0A8E: 24@ = 20@ + 0x855B0 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x69990 // PROCESS_INPUT
        END
       
        IF 0@ == 6 // 0.3.7 R4 - v2
        THEN
            0A8E: 21@ = 20@ + 0x26E9FC            // SAMP_CHAT_INPUT_INFO_OFFSET
            0A8D: 22@ = readMem 21@ sz 4 vp 0     // pChatInput;
            0A8E: 26@ = 22@ + 0x8                 // pChatInput->pEditBox;
            0A8D: 27@ = readMem 26@ sz 4 vp 0     // pEditBox;
          
            0A8E: 24@ = 20@ + 0x855E0 // CDXUTEditBox::SetText
            0A8E: 25@ = 20@ + 0x699D0 // PROCESS_INPUT
        END
        0AA8: call_function_method 24@ struct 27@ num_params 2 pop 0 _bSelected 0 _pszText 1@ _retVal 6@
        0AA8: call_function_method 25@ struct 22@ num_params 0 pop 0 _retVal 7@
    END
END
0AB2: 0

:DeleteColorCodeFromText
{
    0AC8: 1@ = allocate_memory_size 1024
    0AB1: @DeleteColorCodeFromText 2 text 0@ memory_to_store_characters_as_text 1@
}
//*********************** Strlen *********************\\
0085: 27@ = 0@ // copy pointer
FOR 31@ = 0 TO 1024
    0A8D: 26@ = read_memory 27@ size 1 virtual_protect 0
    IF NOT 26@ == 0
    JF BREAK
    27@ += 1
END   
//****************************************************\\
5@ = FALSE // inbracket
    FOR 30@ = 0 TO 31@ 
        0085: 29@ = 0@ // copy pointer
        005A: 29@ += 30@  // add offset (as the loop progresses it becomes pointers to first-last character)
        0A8D: 28@ = read_memory 29@ size 1 virtual_protect 1 // 28@ is the ascii number representing character
        IF 28@ == 123
        THEN 5@ = TRUE // inbracket begin
        END
       
        IF 5@ == FALSE // not inbracket
        THEN
            0A8C: write_memory 1@ size 1 value 28@ virtual_protect 1
            1@ += 1 // move to next address
        END
       
        IF 28@ == 125
        THEN 5@ = FALSE // inbracket end
        END
    END
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0

:IfTextContains
{
    0@ - the main text
    1@ - piece of text to be found within the main text
}
//*********************** Strlen *********************\\
0085: 25@ = 0@ // copy pointer
FOR 31@ = 0 TO 1024
    0A8D: 22@ = read_memory 25@ size 1 virtual_protect 0
    IF NOT 22@ == 0
    JF BREAK
    25@ += 1
END   
//****************************************************\\
//*********************** Strlen *********************\\
0085: 21@ = 1@ // copy pointer
FOR 30@ = 0 TO 1024
    0A8D: 20@ = read_memory 21@ size 1 virtual_protect 0
    IF NOT 20@ == 0
    JF BREAK
    21@ += 1
END   
//****************************************************\\
//initial length check (the phrase can't be longer than the main text)
if 001D:   30@ > 31@  // (int)
then
059A:  return_false
0AB2: ret 1 0
end

31@ -= 1
26@ = 0 // counter of the same chars in a row
for 29@ = 0 to 31@ // for each char of the main text  (29@ = index)
    0085: 24@ = 0@ // (int)
    005A: 24@ += 29@  // (int)
    0A8D: 28@ = read_memory 24@ size 1 virtual_protect 0

    0085: 23@ = 1@ // (int)
    005A: 23@ += 26@  // (int)
    0A8D: 27@ = read_memory 23@ size 1 virtual_protect 0

    if 003B:   28@ == 27@  // (int)
    then
    26@++
        if 002D:   26@ >= 30@  // (int)
        then
        0485:  return_true
        0062: 24@ -= 30@  // (int)
        24@ += 1
        0AB2: ret 1 24@
        end
    else
        if 26@ > 0
        then
        29@-- //check the same char again and assume it's the begining of the string but only if there was matching parts before (otherwise it would go back all the time and make infinite loop)
        end
    26@ = 0
    end
end

059A:  return_false
0AB2: ret 1 0

:get_digits_to_print
{
    0AC8: 1@ = allocate_memory_size 1024
    0AB1: @get_digits_to_print 2 text 0@ memory_to_store_digits_as_text 1@
}
//*********************** Strlen *********************\\
0085: 27@ = 0@ // copy pointer
FOR 31@ = 0 TO 1024
    0A8D: 26@ = read_memory 27@ size 1 virtual_protect 0
    IF NOT 26@ == 0
    JF BREAK
    27@ += 1
END   
//****************************************************\\
5@ = FALSE // inbracket
    FOR 30@ = 0 TO 31@
        0085: 29@ = 0@ // copy pointer
        005A: 29@ += 30@  // add offset (as the loop progresses it becomes pointers to first-last character)
        0A8D: 28@ = read_memory 29@ size 1 virtual_protect 1 // 28@ is the ascii number representing character
        IF 28@ == 123
        THEN 5@ = TRUE // inbracket
        END
      
        IF 5@ == FALSE
        THEN
            IF AND
            28@ >= 0x30 // '0'
            28@ <= 0x39 // '9'
            THEN
                0A8C: write_memory 1@ size 1 value 28@ virtual_protect 1
                1@ += 1 // move to next address
            END
        END
      
        IF 28@ == 125
        THEN 5@ = FALSE // inbracket
        END
    END
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0

it crashes, i just changed the sampversionid to 0.3DL
 
Top