Anggajkwkwkw
New member
- Joined
- Apr 27, 2019
- Messages
- 3
- Reaction score
- 0
I need an auto response if there is a chat "Jackson needs help use '/accept [ID]' to help. and it will automatically type /accept [id]. im using samp 0.3.dl
{$CLEO .cs}
0000:
REPEAT
IF 8256: player $PLAYER_CHAR defined
THEN 0A93: end_custom_thread
END
WAIT 1500
UNTIL 0256: player $PLAYER_CHAR defined
WHILE TRUE
WAIT 0
IF 0256: player $PLAYER_CHAR defined
THEN
IF 0AB0: 123 // PRESSED - F12
THEN
REPEAT
WAIT 0
UNTIL 8AB0: 123 // NOT PRESSED - F12
IF 0@ == FALSE
THEN
0@ = TRUE
0AD1: "~Y~AutoResponse: ~G~ON" 1337
ELSE
0@ = FALSE
0AD1: "~Y~AutoResponse: ~R~OFF" 1337
END
END
IF 0@ == TRUE
THEN
0AC8: 31@ = allocate_memory_size 260
0AC8: 30@ = allocate_memory_size 260
0AB1: @getChatString 1...
Those these two lines comes at same time?Actually like this
I've actually looked for auto response in ugbase froum, but I don't understand why it doesn't work for random numbers like ID
View attachment 6333
Yes, at the same timeThose these two lines comes at same time?
Actually like this
I've actually looked for auto response in ugbase froum, but I don't understand why it doesn't work for random numbers like ID
View attachment 6333
{$CLEO .cs}
0000:
REPEAT
IF 8256: player $PLAYER_CHAR defined
THEN 0A93: end_custom_thread
END
WAIT 1500
UNTIL 0256: player $PLAYER_CHAR defined
WHILE TRUE
WAIT 0
IF 0256: player $PLAYER_CHAR defined
THEN
0AC8: 31@ = allocate_memory_size 260
0AC8: 30@ = allocate_memory_size 260
0AB1: @getChatString 1 ChatID 98 _Returned: Text 31@ PrefixText 30@ Color 29@ PrefixColor 28@
0AC8: 27@ = allocate_memory_size 260
0AB1: @DeleteColorCodes 2 text 31@ memory_to_store_characters_as_text 27@
0AC8: 26@ = allocate_memory_size 260
0AD3: 26@ = format "Client:"
IF 0AB1: @IfTextContains 2 String1 27@ String2 26@ _returned: Text 25@
THEN
0AC8: 24@ = allocate_memory_size 1024
0AD3: 24@ = format "(id:"
IF 0AB1: @IfTextContains 2 String1 25@ String2 24@ _returned: Text 23@
THEN
0AC8: 22@ = allocate_memory_size 260
0AB1: @get_digits_to_print param_count 2 text 23@ memory_to_store_digits_as_text 22@
0AC8: 21@ = allocate_memory_size 260
0AD3: 21@ = format "/accept %s" 22@
0AB1: @process_chat_input 1 InputText 21@
0AC9: free_allocated_memory 22@
0AC9: free_allocated_memory 21@
END
END
0AC9: free_allocated_memory 31@
0AC9: free_allocated_memory 30@
0AC9: free_allocated_memory 27@
0AC9: free_allocated_memory 26@
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
IF 29@ == 0x6372C39E
THEN // 0.3.7 R5
30@ = 7
END
END
0AB2: ret 1 30@
:IfTextContains
{
0AC8: 3@ = allocate_memory_size 1024
0AD3: 3@ = format "Ar"
if 0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: Text 4@
}
0AB1: @strlenA 1 string 0@ _length 31@
0AB1: @strlenA 1 string 1@ _length 30@
//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
:DeleteColorCodes
{
0AB1: @DeleteColorCodes 2 text 0@ memory_to_store_characters_as_text 1@
In: 0@ = text
Out: 1@ = pointer to memory where characters will be stored as text
}
5@ = FALSE // inbracket
0AB1: @strlenA 1 string 0@ _length 31@
for 30@ = 0 to 31@
0085: 29@ = 0@ // copy pointer
005A: 29@ += 30@ // add offset make loop
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 // 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
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
:get_digits_to_print
{
0@ = text
1@ = pointer to memory where digits will be stored as text
}
0AB1: @strlenA 1 string 0@ _length 31@
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 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
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
:StrlenA
// 0AB1: @StrlenA 1 String 0@ _Returned: Length 1@
0A8D: 26@ = readmem 0x8580DC sz 4 vp 0 // 0x8580DC - KERNEL32.lstrlenA
0AA7: strlen_addr 26@ num_params 1 pop 0 string 0@ _returned_length 25@
0AB2: ret 1 25@
:getChatString
{
0AC8: 0@ = allocate_memory_size 1024
0AC8: 1@ = allocate_memory_size 1024
0AB1: @getChatString 1 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@
}
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
31@ += 0x21A0E4 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 2 // 0.3.7 R2
THEN
31@ += 0x21A0EC // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 3 // 0.3.DL
THEN
31@ += 0x2ACA10 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 4 // 0.3.7 R3
THEN
31@ += 0x26E8C8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 5 // 0.3.7 R4
THEN
31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 6 // 0.3.7 R4 - v2
THEN
31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 7 // 0.3.7 R5
THEN
31@ += 0x26EB80 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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
0AA3: 31@
END
END
0AB2: ret 4 30@ 29@ 27@ 24@
:process_chat_input
/*
0AC8: 0@ = allocate_memory_size 1024
0AD3: 0@ = format "text or /command"
0AB1: @process_chat_input 1 InputText 1@
*/
IF 0AA2: 31@ = "samp.dll"
THEN
0AB1: @get_samp_version_id 0 _Returned: ID 17@
IF NOT 17@ < 1
THEN
IF 17@ == 1 // 0.3.7 R1
THEN
0A8E: 30@ = 31@ + 0x21A0E8 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x80F60 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x65D30 // PROCESS_INPUT
END
IF 17@ == 2 // 0.3.7 R2
THEN
0A8E: 30@ = 31@ + 0x21A0F0 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x81000 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x65E00 // PROCESS_INPUT
END
IF 17@ == 3 // 0.3.DL
THEN
0A8E: 30@ = 31@ + 0x2ACA14 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x85000 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69410 // PROCESS_INPUT
END
IF 17@ == 4 // 0.3.7 R3
THEN
0A8E: 30@ = 31@ + 0x26E8CC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x84E70 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69260 // PROCESS_INPUT
END
IF 17@ == 5 // 0.3.7 R4
THEN
0A8E: 30@ = 31@ + 0x26E9FC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x855B0 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69990 // PROCESS_INPUT
END
IF 17@ == 6 // 0.3.7 R4 - v2
THEN
0A8E: 30@ = 31@ + 0x26E9FC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x855E0 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x699D0 // PROCESS_INPUT
END
IF 17@ == 7 // 0.3.7 R5
THEN
0A8E: 30@ = 31@ + 0x26EB84 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x85580 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x699D0 // PROCESS_INPUT
END
0AA8: call_function_method 26@ struct 27@ num_params 2 pop 0 _bSelected 0 _pszText 0@ _retVal 6@
0AA8: call_function_method 25@ struct 29@ num_params 0 pop 0 _retVal 7@
END
END
0AB2: 0
{$CLEO .cs}
0000:
REPEAT
IF 8256: player $PLAYER_CHAR defined
THEN 0A93: end_custom_thread
END
WAIT 1500
UNTIL 0256: player $PLAYER_CHAR defined
WHILE TRUE
WAIT 0
IF 0256: player $PLAYER_CHAR defined
THEN
IF 0AB0: 123 // PRESSED - F12
THEN
REPEAT
WAIT 0
UNTIL 8AB0: 123 // NOT PRESSED - F12
IF 0@ == FALSE
THEN
0@ = TRUE
0AD1: "~Y~AutoResponse: ~G~ON" 1337
ELSE
0@ = FALSE
0AD1: "~Y~AutoResponse: ~R~OFF" 1337
END
END
IF 0@ == TRUE
THEN
0AC8: 31@ = allocate_memory_size 260
0AC8: 30@ = allocate_memory_size 260
0AB1: @getChatString 1 ChatID 98 _Returned: Text 31@ PrefixText 30@ Color 29@ PrefixColor 28@
0AC8: 27@ = allocate_memory_size 260
0AB1: @DeleteColorCodes 2 text 31@ memory_to_store_characters_as_text 27@
0AC8: 26@ = allocate_memory_size 260
0AD3: 26@ = format "Client:"
IF 0AB1: @IfTextContains 2 String1 27@ String2 26@ _returned: Text 25@
THEN
0AC8: 24@ = allocate_memory_size 1024
0AD3: 24@ = format "(id:"
IF 0AB1: @IfTextContains 2 String1 25@ String2 24@ _returned: Text 23@
THEN
0AC8: 22@ = allocate_memory_size 260
0AB1: @get_digits_to_print param_count 2 text 23@ memory_to_store_digits_as_text 22@
0AC8: 21@ = allocate_memory_size 260
0AD3: 21@ = format "/accept %s" 22@
0AB1: @process_chat_input 1 InputText 21@
0AC9: free_allocated_memory 22@
0AC9: free_allocated_memory 21@
END
END
0AC9: free_allocated_memory 31@
0AC9: free_allocated_memory 30@
0AC9: free_allocated_memory 27@
0AC9: free_allocated_memory 26@
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
IF 29@ == 0x6372C39E
THEN // 0.3.7 R5
30@ = 7
END
END
0AB2: ret 1 30@
:IfTextContains
{
0AC8: 3@ = allocate_memory_size 1024
0AD3: 3@ = format "Ar"
if 0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: Text 4@
}
0AB1: @strlenA 1 string 0@ _length 31@
0AB1: @strlenA 1 string 1@ _length 30@
//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
:DeleteColorCodes
{
0AB1: @DeleteColorCodes 2 text 0@ memory_to_store_characters_as_text 1@
In: 0@ = text
Out: 1@ = pointer to memory where characters will be stored as text
}
5@ = FALSE // inbracket
0AB1: @strlenA 1 string 0@ _length 31@
for 30@ = 0 to 31@
0085: 29@ = 0@ // copy pointer
005A: 29@ += 30@ // add offset make loop
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 // 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
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
:get_digits_to_print
{
0@ = text
1@ = pointer to memory where digits will be stored as text
}
0AB1: @strlenA 1 string 0@ _length 31@
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 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
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
:StrlenA
// 0AB1: @StrlenA 1 String 0@ _Returned: Length 1@
0A8D: 26@ = readmem 0x8580DC sz 4 vp 0 // 0x8580DC - KERNEL32.lstrlenA
0AA7: strlen_addr 26@ num_params 1 pop 0 string 0@ _returned_length 25@
0AB2: ret 1 25@
:getChatString
{
0AC8: 0@ = allocate_memory_size 1024
0AC8: 1@ = allocate_memory_size 1024
0AB1: @getChatString 1 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@
}
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
31@ += 0x21A0E4 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 2 // 0.3.7 R2
THEN
31@ += 0x21A0EC // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 3 // 0.3.DL
THEN
31@ += 0x2ACA10 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 4 // 0.3.7 R3
THEN
31@ += 0x26E8C8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 5 // 0.3.7 R4
THEN
31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 6 // 0.3.7 R4 - v2
THEN
31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 7 // 0.3.7 R5
THEN
31@ += 0x26EB80 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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
0AA3: 31@
END
END
0AB2: ret 4 30@ 29@ 27@ 24@
:process_chat_input
/*
0AC8: 0@ = allocate_memory_size 1024
0AD3: 0@ = format "text or /command"
0AB1: @process_chat_input 1 InputText 1@
*/
IF 0AA2: 31@ = "samp.dll"
THEN
0AB1: @get_samp_version_id 0 _Returned: ID 17@
IF NOT 17@ < 1
THEN
IF 17@ == 1 // 0.3.7 R1
THEN
0A8E: 30@ = 31@ + 0x21A0E8 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x80F60 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x65D30 // PROCESS_INPUT
END
IF 17@ == 2 // 0.3.7 R2
THEN
0A8E: 30@ = 31@ + 0x21A0F0 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x81000 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x65E00 // PROCESS_INPUT
END
IF 17@ == 3 // 0.3.DL
THEN
0A8E: 30@ = 31@ + 0x2ACA14 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x85000 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69410 // PROCESS_INPUT
END
IF 17@ == 4 // 0.3.7 R3
THEN
0A8E: 30@ = 31@ + 0x26E8CC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x84E70 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69260 // PROCESS_INPUT
END
IF 17@ == 5 // 0.3.7 R4
THEN
0A8E: 30@ = 31@ + 0x26E9FC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x855B0 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69990 // PROCESS_INPUT
END
IF 17@ == 6 // 0.3.7 R4 - v2
THEN
0A8E: 30@ = 31@ + 0x26E9FC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x855E0 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x699D0 // PROCESS_INPUT
END
IF 17@ == 7 // 0.3.7 R5
THEN
0A8E: 30@ = 31@ + 0x26EB84 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x85580 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x699D0 // PROCESS_INPUT
END
0AA8: call_function_method 26@ struct 27@ num_params 2 pop 0 _bSelected 0 _pszText 0@ _retVal 6@
0AA8: call_function_method 25@ struct 29@ num_params 0 pop 0 _retVal 7@
END
END
0AB2: 0
{$CLEO .cs}
0000:
REPEAT
IF 8256: player $PLAYER_CHAR defined
THEN 0A93: end_custom_thread
END
WAIT 1500
UNTIL 0256: player $PLAYER_CHAR defined
WHILE TRUE
WAIT 0
IF 0256: player $PLAYER_CHAR defined
THEN
IF 0AB0: 123 // F12
THEN
REPEAT
WAIT 0
UNTIL 8AB0: 123 // F12
IF 31@ == FALSE
THEN
31@ = TRUE
0AD1: "~Y~Auto Response: ~G~ON" 1337
ELSE
31@ = FALSE
0AD1: "~Y~Auto Response: ~R~OFF" 1337
END
END
IF 31@ == TRUE
THEN
0AC8: 30@ = allocate_memory_size 260
0AC8: 29@ = allocate_memory_size 260
0AB1: @getChatString 1 ChatID 98 _Returned: Text 30@ PrefixText 29@ Color 28@ PrefixColor 27@
0AC8: 26@ = allocate_memory_size 260
0AB1: @DeleteColorCodes 2 text 30@ memory_to_store_characters_as_text 26@
0AC8: 25@ = allocate_memory_size 260
0AD3: 25@ = format "Last known position:"
IF 0AB1: @IfTextContains 2 String1 26@ String2 25@ _returned: Text 24@
THEN
0AB1: @strlenA 1 string 26@ _length 23@
0AB1: @strlenA 1 string 24@ _length 22@
0062: 23@ -= 22@ // (int)
0AC8: 21@ = allocate_memory_size 260
0AB1: @strncpy 3 destination 21@ source 26@ size 23@
0AC8: 20@ = allocate_memory_size 260
0AB1: @get_digits_to_print 2 text 21@ memory_to_store_digits_as_text 20@
0AC8: 19@ = allocate_memory_size 260
0AD3: 19@ = format "/accept %s" 20@
0AB1: @process_chat_input 1 InputText 19@
0AC9: free_allocated_memory 21@
0AC9: free_allocated_memory 20@
0AC9: free_allocated_memory 19@
END
0AC9: free_allocated_memory 25@
0AC9: free_allocated_memory 30@
0AC9: free_allocated_memory 29@
0AC9: free_allocated_memory 26@
0AC9: free_allocated_memory 25@
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
IF 29@ == 0x6372C39E
THEN // 0.3.7 R5
30@ = 7
END
END
0AB2: ret 1 30@
:IfTextContains
{
0AC8: 3@ = allocate_memory_size 1024
0AD3: 3@ = format "Ar"
if 0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: Text 4@
}
0AB1: @strlenA 1 string 0@ _length 31@
0AB1: @strlenA 1 string 1@ _length 30@
//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
:DeleteColorCodes
{
0AB1: @DeleteColorCodes 2 text 0@ memory_to_store_characters_as_text 1@
In: 0@ = text
Out: 1@ = pointer to memory where characters will be stored as text
}
5@ = FALSE // inbracket
0AB1: @strlenA 1 string 0@ _length 31@
for 30@ = 0 to 31@
0085: 29@ = 0@ // copy pointer
005A: 29@ += 30@ // add offset make loop
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 // 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
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
:get_digits_to_print
{
0@ = text
1@ = pointer to memory where digits will be stored as text
}
0C17: 31@ = strlen 0@
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 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
0A8C: write_memory 1@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
:StrlenA
// 0AB1: @StrlenA 1 String 0@ _Returned: Length 1@
0A8D: 26@ = readmem 0x8580DC sz 4 vp 0 // 0x8580DC - KERNEL32.lstrlenA
0AA7: strlen_addr 26@ num_params 1 pop 0 string 0@ _returned_length 25@
0AB2: ret 1 25@
:strncpy
var
0@ : integer
1@ : integer
2@ : integer
30@ : integer
31@ : integer
end
// 0@ - destination, 1@ - source, 2@ - size
// Example: 0AB1: @strncpy 3 destination 0@ source 1@ size 2@
while 803B: 30@ == 2@ // (int)
0A8D: 31@ = read_memory 1@ size 1 virtual_protect 0
0A8C: write_memory 0@ size 1 value 31@ virtual_protect 0
30@++ // count
0@++ // dst
1@++ // src
end
0A8C: write_memory 0@ size 1 value 0 virtual_protect 0 // null terminate
0AB2: ret 0
:getChatString
{
0AC8: 0@ = allocate_memory_size 1024
0AC8: 1@ = allocate_memory_size 1024
0AB1: @getChatString 1 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@
}
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
31@ += 0x21A0E4 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 2 // 0.3.7 R2
THEN
31@ += 0x21A0EC // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 3 // 0.3.DL
THEN
31@ += 0x2ACA10 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 4 // 0.3.7 R3
THEN
31@ += 0x26E8C8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 5 // 0.3.7 R4
THEN
31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 6 // 0.3.7 R4 - v2
THEN
31@ += 0x26E9F8 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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 17@ == 7 // 0.3.7 R5
THEN
31@ += 0x26EB80 // SAMP_CHAT_INFO_OFFSET
0A8D: 31@ readMem 31@ sz 4 vp 0
31@ += 0x132
0@ *= 0xFC
005A: 31@ += 0@
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
0AA3: 31@
END
END
0AB2: ret 4 30@ 29@ 27@ 24@
:process_chat_input
/*
0AC8: 0@ = allocate_memory_size 1024
0AD3: 0@ = format "text or /command"
0AB1: @process_chat_input 1 InputText 1@
*/
IF 0AA2: 31@ = "samp.dll"
THEN
0AB1: @get_samp_version_id 0 _Returned: ID 17@
IF NOT 17@ < 1
THEN
IF 17@ == 1 // 0.3.7 R1
THEN
0A8E: 30@ = 31@ + 0x21A0E8 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x80F60 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x65D30 // PROCESS_INPUT
END
IF 17@ == 2 // 0.3.7 R2
THEN
0A8E: 30@ = 31@ + 0x21A0F0 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x81000 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x65E00 // PROCESS_INPUT
END
IF 17@ == 3 // 0.3.DL
THEN
0A8E: 30@ = 31@ + 0x2ACA14 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x85000 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69410 // PROCESS_INPUT
END
IF 17@ == 4 // 0.3.7 R3
THEN
0A8E: 30@ = 31@ + 0x26E8CC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x84E70 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69260 // PROCESS_INPUT
END
IF 17@ == 5 // 0.3.7 R4
THEN
0A8E: 30@ = 31@ + 0x26E9FC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x855B0 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x69990 // PROCESS_INPUT
END
IF 17@ == 6 // 0.3.7 R4 - v2
THEN
0A8E: 30@ = 31@ + 0x26E9FC // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x855E0 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x699D0 // PROCESS_INPUT
END
IF 17@ == 7 // 0.3.7 R5
THEN
0A8E: 30@ = 31@ + 0x26EB84 // SAMP_CHAT_INPUT_INFO_OFFSET
0A8D: 29@ = readMem 30@ sz 4 vp 0 // pChatInput;
0A8E: 28@ = 29@ + 0x8 // pChatInput->pEditBox;
0A8D: 27@ = readMem 28@ sz 4 vp 0 // pEditBox;
0A8E: 26@ = 31@ + 0x85580 // CDXUTEditBox::SetText
0A8E: 25@ = 31@ + 0x699D0 // PROCESS_INPUT
END
0AA8: call_function_method 26@ struct 27@ num_params 2 pop 0 _bSelected 0 _pszText 0@ _retVal 6@
0AA8: call_function_method 25@ struct 29@ num_params 0 pop 0 _retVal 7@
END
END
0AB2: 0
:Chatmsg
/*
0AC8: 0@ = allocate_memory_size 1024
0AD3: 0@ = format "{FFFFFF}Auto Accept: {00FF00}ON"
0AB1: @Chatmsg 2 text 0@ color -1
*/
IF 0AA2: 31@ = "samp.dll"
THEN
0AB1: @get_samp_version_id 0 _Returned: ID 17@
IF NOT 17@ < 1
THEN
IF 17@ == 1 // 0.3.7 R1
THEN
0A8E: 30@ = 31@ + 0x21A0E4 // SAMP_CHAT_INFO_OFFSET (R1)
0A8D: 30@ = readMem 30@ sz 4 vp 0 // pChat;
0A8E: 29@ = 31@ + 0x64010 // FUNC_ADDTOCHATWND (R1)
END
IF 17@ == 2 // 0.3.7 R2
THEN
0A8E: 30@ = 31@ + 0x21A0EC // SAMP_CHAT_INFO_OFFSET (R2)
0A8D: 30@ = readMem 30@ sz 4 vp 0 // pChat;
0A8E: 29@ = 31@ + 0x640E0 // FUNC_ADDTOCHATWND (R2)
END
IF 17@ == 3 // 0.3.DL
THEN
0A8E: 30@ = 31@ + 0x2ACA10 // SAMP_CHAT_INFO_OFFSET (DL)
0A8D: 30@ = readMem 30@ sz 4 vp 0 // pChat;
0A8E: 29@ = 31@ + 0x67650 // FUNC_ADDTOCHATWND (DL)
END
IF 17@ == 4 // 0.3.7 R3
THEN
0A8E: 30@ = 31@ + 0x26E8C8 // SAMP_CHAT_INFO_OFFSET (R3)
0A8D: 30@ = readMem 30@ sz 4 vp 0 // pChat;
0A8E: 29@ = 31@ + 0x67460 // FUNC_ADDTOCHATWND (R3)
END
IF 17@ == 5 // 0.3.7 R4
THEN
0A8E: 30@ = 31@ + 0x26E9F8 // SAMP_CHAT_INFO_OFFSET (R4)
0A8D: 30@ = readMem 30@ sz 4 vp 0 // pChat;
0A8E: 29@ = 31@ + 0x67BA0 // FUNC_ADDTOCHATWND (R4) 699D0
END
IF 17@ == 6 // 0.3.7 R4 - v2
THEN
0A8E: 30@ = 31@ + 0x26E9F8 // SAMP_CHAT_INFO_OFFSET (R4)
0A8D: 30@ = readMem 30@ sz 4 vp 0 // pChat;
0A8E: 29@ = 31@ + 0x67BE0 // FUNC_ADDTOCHATWND (R4)
END
IF 17@ == 7 // 0.3.7 R5
THEN
0A8E: 30@ = 31@ + 0x26EB80 // SAMP_CHAT_INFO_OFFSET (R4)
0A8D: 30@ = readMem 30@ sz 4 vp 0 // pChat;
0A8E: 29@ = 31@ + 0x67BE0 // FUNC_ADDTOCHATWND (R4)
END
IF 1@ == -1
THEN 1@ = 0xFFFFFFFF
END
0AA6: call 29@ struct 30@ num_params 5 pop 0 params 0 1@ 0 0@ 8
END
END
0AB2: 0