mdang291
New member
Can you make a /sighcheck in Lawless Roleplay ? It apears 9 pictures and shoud click the right picture and click verify button ? Thank you so much . And have a nice day !!!!!!!!!!
Sign Check - Dialog
Source samp 0.3.7 R*- 0.3.DL:
PHP:{$CLEO .cs} 0000: wait 8500 0AC8: 4@ = allocate_memory_size 260 0AD3: 4@ = format "Sign check" WHILE TRUE WAIT 0 IF 0256: player $PLAYER_CHAR defined THEN 0AB1: @get_samp_version_id 0 _Returned: ID 1@ IF 0AB1: @isDialogOpen 1 SampVersionID 1@ THEN IF 0AB1: @GetDialogCaption 1 SampVersionID 1@ _Return: caption 2@ THEN 0AC8: 3@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 2@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 3@ IF 0AB1: @IfTextContains 2 String1 3@ String2 4@ _returned: Text 5@ THEN IF 0AB1: @GetDialogText 1 SampVersionID 1@ _Returned: text 6@ THEN 0AC8: 7@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 6@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 7@ 0AC8: 8@ = allocate_memory_size 260 0AB1: @get_digits_to_print param_count 2 text 7@ memory_to_store_digits_as_text 8@ 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 1@ text 8@ 0209: 9@ = random_int_in_ranges 1000 2000 // generate random time - protect from admin detection wait 9@ // normal people can't react instant , so that why we need add timer 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 1@ Button 1 // 1 = Left , 0 = Right END END END END END END :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :isDialogOpen // 0AB1: @isDialogOpen 1 SampVersionID 0@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 2@ = readMem 2@ sz 4 vp 0 0A8E: 2@ = 2@ + 0x28 0A8D: 2@ = readMem 2@ sz 4 vp 0 IF 2@ == 1 THEN 0485: dialog_open ELSE 059A: dialog_closed END 0AB2: ret 0 :GetDialogCaption // 0AB1: @GetDialogCaption 1 SampVersionID 0@ _Returned: caption 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 IF 5@ == 1 // Dialog open THEN 0A8E: 3@ = 4@ + 0x40 //DialogCaptionOffset 0485: dialog_open 0AB2: ret 1 3@ ELSE 059A: dialog closed END 0AB2: ret 0 :GetDialogText // 0AB1: @GetDialogText 1 SampVersionID 0@ _Returned: text 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 if 5@ == 1 // Dialog active then 0A8E: 6@ = 4@ + 0x2C //DialogTypeOffset 0A8D: 6@ = readMem 6@ sz 4 vp 0 if or 6@ == 0 // DIALOG_STYLE_MSGBOX 6@ == 1 // DIALOG_STYLE_INPUT 6@ == 3 // DIALOG_STYLE_PASSWORD then 0A8E: 7@ = 4@ + 0x34 // DialogTextOffset 0A8D: 7@ = readMem 7@ sz 4 vp 0 0485: dialog_open 0AB2: ret 1 7@ else 059A: dialog closed end end 0AB2: ret 0 :get_digits_to_print { 0@ = text 1@ = pointer to memory where digits will be stored as text } 0AB1: @strlen 1 string 0@ _return: 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 :SetDialogInputEditBoxText // 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 0@ text 1@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x80F60 // CDXUTEditBox::SetText END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x81000 // CDXUTEditBox::SetText END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x85000 // CDXUTEditBox::SetText END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x84E70 // CDXUTEditBox::SetText END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x855B0 // CDXUTEditBox::SetText END // CDXUTEditBox::SetText takes 2 params // 1 - pointer to zero terminated string // 2 - bool, if text is to be selected or not 0AA8: call_function_method 5@ struct 4@ num_params 2 pop 0 _bSelected 0 _pszText 1@ _retVal 6@ END 0AB2: 0 :CloseCurrentDialogWithButton // 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 0@ Button 1 // 1 = Left , 0 = Right IF 0AA2: 10@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 11@ = 10@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C040 //SAMP_DIALOG_CLOSE END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 11@ = 10@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C0F0 //SAMP_DIALOG_CLOSE END IF 0@ == 3 // 0.3.DL THEN 0A8E: 11@ = 10@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x700D0 //SAMP_DIALOG_CLOSE END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 11@ = 10@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6FF40 //SAMP_DIALOG_CLOSE END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 11@ = 10@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x70660 //SAMP_DIALOG_CLOSE END 0AA8: call_function_method 11@ struct 12@ num_params 1 pop 0 Button 1@ _retVal 6@ END 0AB2: 0 :IfTextContains //0AB1: @IfTextContains 2 String1 0@ String2 1@ 0AB1: @strlen 1 string 0@ _length 31@ 0AB1: @strlen 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination 0AB2: ret 0 :strlen // 0AB1: @strlen 1 string 1@ _return: size 3@ for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@
Sign Check - Chat
Source samp 0.3.7 R*- 0.3.DL:
PHP:{$CLEO .cs} 0000: NOP wait 8500 0AC8: 3@ = allocate_memory_size 260 0AD3: 3@ = "Type /signcheck" // Check / find text 0AC8: 5@ = allocate_memory_size 260 0AD3: 5@ "/signcheck" // CMD while true wait 0 if 0256: player $PLAYER_CHAR defined then 0AB1: @get_samp_version_id 0 _Returned: ID 0@ for 30@ = 95 to 99 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 30@ _Returned: text 1@ 0AC8: 2@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 1@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 2@ if 0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: text 4@ then 0AB1: @SEND_CMD 2 SampVersionID 0@ text 5@ wait 10000 // anti spam end end end end :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :GetChatEntryText { 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 99 _Returned: text 1@ } IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0E4 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0EC END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2ACA10 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E8C8 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9F8 END 0A8D: 2@ readMem 3@ sz 4 vp 0 2@ += 0x132 1@ *= 0xFC 005A: 2@ += 1@ 2@ += 0x20 0AA3: 2@ END 0AB2: ret 1 2@ :IfTextContains { 0@ - the main text 1@ - piece of text to be found within the main text } 0AB1: @strlen 1 strPtr 0@ _length 31@ 0AB1: @strlen 1 strPtr 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 1 string 0@ _return: 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination 0AB2: ret 0 :strlen { Example: 0AB1: @strlen 1 string 1@ _return: 3@ In: 0@ - text; Out: 1@ - size; } for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@ :SEND_CMD // 0AB1: @SEND_CMD 2 SampVersionID 0@ text 3@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x65C60 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x65D30 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x69340 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x69190 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x698C0 END 0AA5: call 3@ num_param 1 pop 0 1@ END 0AB2: 0
Sign Check - Chat 2
Source samp 0.3.7 R*- 0.3.DL:
PHP:{$CLEO .cs} 0000: NOP wait 8500 while true wait 0 if 0256: player $PLAYER_CHAR defined then 0AB1: @get_samp_version_id 0 _Returned: ID 0@ for 30@ = 95 to 99 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 30@ _Returned: text 1@ 0AC8: 2@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 1@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 2@ 0AC8: 3@ = allocate_memory_size 260 0AD3: 3@ = "/signcheck" // Check / find text if 0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: text 4@ then 0AC8: 6@ = allocate_memory_size 260 0AB1: @get_digits_to_print param_count 2 text 2@ memory_to_store_digits_as_text 6@ 0AC8: 5@ = allocate_memory_size 260 0AD3: 5@ "/signcheck %s" 6@ // CMD 0AB1: @SEND_CMD 2 SampVersionID 0@ text 5@ wait 10000 // anti spam end end end end :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :GetChatEntryText { 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 99 _Returned: text 1@ } IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0E4 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0EC END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2ACA10 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E8C8 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9F8 END 0A8D: 2@ readMem 3@ sz 4 vp 0 2@ += 0x132 1@ *= 0xFC 005A: 2@ += 1@ 2@ += 0x20 0AA3: 2@ END 0AB2: ret 1 2@ :IfTextContains { 0@ - the main text 1@ - piece of text to be found within the main text } 0AB1: @strlen 1 strPtr 0@ _length 31@ 0AB1: @strlen 1 strPtr 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 1 string 0@ _return: 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ 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: @strlen 1 string 0@ _return: 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 :strlen { Example: 0AB1: @strlen 1 string 1@ _return: 3@ In: 0@ - text; Out: 1@ - size; } for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@ :SEND_CMD // 0AB1: @SEND_CMD 2 SampVersionID 0@ text 3@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x65C60 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x65D30 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x69340 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x69190 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x698C0 END 0AA5: call 3@ num_param 1 pop 0 1@ END 0AB2: 0
Etc...
PHP:{$CLEO .cs} 0000: wait 8500 0AC8: 4@ = allocate_memory_size 260 0AD3: 4@ = format "Drug Production" WHILE TRUE WAIT 0 IF 0256: player $PLAYER_CHAR defined THEN 0AB1: @get_samp_version_id 0 _Returned: ID 1@ IF 0AB1: @isDialogOpen 1 SampVersionID 1@ THEN IF 0AB1: @GetDialogCaption 1 SampVersionID 1@ _Return: caption 2@ THEN 0AC8: 3@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 2@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 3@ IF 0AB1: @IfTextContains 2 String1 3@ String2 4@ _returned: Text 5@ THEN IF 0AB1: @GetDialogText 1 SampVersionID 1@ _Returned: text 6@ THEN 0AC8: 7@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 6@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 7@ 0AB1: @GetLastCharacters 2 String 7@ Characters 11 rnt 8@ 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 1@ text 8@ 0209: 9@ = random_int_in_ranges 1000 2000 // generate random time - protect from admin detection wait 9@ // normal people can't react instant , so that why we need add timer 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 1@ Button 1 // 1 = Left , 0 = Right END END END END END END :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :isDialogOpen // 0AB1: @isDialogOpen 1 SampVersionID 0@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 2@ = readMem 2@ sz 4 vp 0 0A8E: 2@ = 2@ + 0x28 0A8D: 2@ = readMem 2@ sz 4 vp 0 IF 2@ == 1 THEN 0485: dialog_open ELSE 059A: dialog_closed END 0AB2: ret 0 :GetDialogCaption // 0AB1: @GetDialogCaption 1 SampVersionID 0@ _Returned: caption 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 IF 5@ == 1 // Dialog open THEN 0A8E: 3@ = 4@ + 0x40 //DialogCaptionOffset 0485: dialog_open 0AB2: ret 1 3@ ELSE 059A: dialog closed END 0AB2: ret 0 :GetDialogText // 0AB1: @GetDialogText 1 SampVersionID 0@ _Returned: text 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 if 5@ == 1 // Dialog active then 0A8E: 6@ = 4@ + 0x2C //DialogTypeOffset 0A8D: 6@ = readMem 6@ sz 4 vp 0 if or 6@ == 0 // DIALOG_STYLE_MSGBOX 6@ == 1 // DIALOG_STYLE_INPUT 6@ == 3 // DIALOG_STYLE_PASSWORD then 0A8E: 7@ = 4@ + 0x34 // DialogTextOffset 0A8D: 7@ = readMem 7@ sz 4 vp 0 0485: dialog_open 0AB2: ret 1 7@ else 059A: dialog closed end end 0AB2: ret 0 :SetDialogInputEditBoxText // 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 0@ text 1@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x80F60 // CDXUTEditBox::SetText END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x81000 // CDXUTEditBox::SetText END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x85000 // CDXUTEditBox::SetText END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x84E70 // CDXUTEditBox::SetText END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x855B0 // CDXUTEditBox::SetText END // CDXUTEditBox::SetText takes 2 params // 1 - pointer to zero terminated string // 2 - bool, if text is to be selected or not 0AA8: call_function_method 5@ struct 4@ num_params 2 pop 0 _bSelected 0 _pszText 1@ _retVal 6@ END 0AB2: 0 :CloseCurrentDialogWithButton // 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 0@ Button 1 // 1 = Left , 0 = Right IF 0AA2: 10@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 11@ = 10@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C040 //SAMP_DIALOG_CLOSE END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 11@ = 10@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C0F0 //SAMP_DIALOG_CLOSE END IF 0@ == 3 // 0.3.DL THEN 0A8E: 11@ = 10@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x700D0 //SAMP_DIALOG_CLOSE END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 11@ = 10@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6FF40 //SAMP_DIALOG_CLOSE END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 11@ = 10@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x70660 //SAMP_DIALOG_CLOSE END 0AA8: call_function_method 11@ struct 12@ num_params 1 pop 0 Button 1@ _retVal 6@ END 0AB2: 0 :IfTextContains //0AB1: @IfTextContains 2 String1 0@ String2 1@ 0AB1: @strlen 1 string 0@ _length 31@ 0AB1: @strlen 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination 0AB2: ret 0 :GetLastCharacters { 0AB1: @GetLastCharacters 2 String 0@ Characters 5 rnt 1@ } 0AB1: @strlen 1 String 0@ Lenght 2@ 0062: 2@ -= 1@ 005A: 0@ += 2@ 0AB2: ret 1 0@ :strlen // 0AB1: @strlen 1 string 1@ _return: size 3@ for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@
! Make Sure you have right settings !
Hi, can you help me with a similar cleo? cleo is active when there is a chat line: "Who is going to give me 100000$ --> secret number + secret number - secret number + secret number = ?" then it will automatically calculate the result and automatically chat out the calculated number (question mark), samp 0.3dlSign Check - Dialog
Source samp 0.3.7 R*- 0.3.DL:
PHP:{$CLEO .cs} 0000: wait 8500 0AC8: 4@ = allocate_memory_size 260 0AD3: 4@ = format "Sign check" WHILE TRUE WAIT 0 IF 0256: player $PLAYER_CHAR defined THEN 0AB1: @get_samp_version_id 0 _Returned: ID 1@ IF 0AB1: @isDialogOpen 1 SampVersionID 1@ THEN IF 0AB1: @GetDialogCaption 1 SampVersionID 1@ _Return: caption 2@ THEN 0AC8: 3@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 2@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 3@ IF 0AB1: @IfTextContains 2 String1 3@ String2 4@ _returned: Text 5@ THEN IF 0AB1: @GetDialogText 1 SampVersionID 1@ _Returned: text 6@ THEN 0AC8: 7@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 6@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 7@ 0AC8: 8@ = allocate_memory_size 260 0AB1: @get_digits_to_print param_count 2 text 7@ memory_to_store_digits_as_text 8@ 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 1@ text 8@ 0209: 9@ = random_int_in_ranges 1000 2000 // generate random time - protect from admin detection wait 9@ // normal people can't react instant , so that why we need add timer 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 1@ Button 1 // 1 = Left , 0 = Right END END END END END END :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :isDialogOpen // 0AB1: @isDialogOpen 1 SampVersionID 0@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 2@ = readMem 2@ sz 4 vp 0 0A8E: 2@ = 2@ + 0x28 0A8D: 2@ = readMem 2@ sz 4 vp 0 IF 2@ == 1 THEN 0485: dialog_open ELSE 059A: dialog_closed END 0AB2: ret 0 :GetDialogCaption // 0AB1: @GetDialogCaption 1 SampVersionID 0@ _Returned: caption 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 IF 5@ == 1 // Dialog open THEN 0A8E: 3@ = 4@ + 0x40 //DialogCaptionOffset 0485: dialog_open 0AB2: ret 1 3@ ELSE 059A: dialog closed END 0AB2: ret 0 :GetDialogText // 0AB1: @GetDialogText 1 SampVersionID 0@ _Returned: text 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 if 5@ == 1 // Dialog active then 0A8E: 6@ = 4@ + 0x2C //DialogTypeOffset 0A8D: 6@ = readMem 6@ sz 4 vp 0 if or 6@ == 0 // DIALOG_STYLE_MSGBOX 6@ == 1 // DIALOG_STYLE_INPUT 6@ == 3 // DIALOG_STYLE_PASSWORD then 0A8E: 7@ = 4@ + 0x34 // DialogTextOffset 0A8D: 7@ = readMem 7@ sz 4 vp 0 0485: dialog_open 0AB2: ret 1 7@ else 059A: dialog closed end end 0AB2: ret 0 :get_digits_to_print { 0@ = text 1@ = pointer to memory where digits will be stored as text } 0AB1: @strlen 1 string 0@ _return: 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 :SetDialogInputEditBoxText // 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 0@ text 1@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x80F60 // CDXUTEditBox::SetText END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x81000 // CDXUTEditBox::SetText END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x85000 // CDXUTEditBox::SetText END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x84E70 // CDXUTEditBox::SetText END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x855B0 // CDXUTEditBox::SetText END // CDXUTEditBox::SetText takes 2 params // 1 - pointer to zero terminated string // 2 - bool, if text is to be selected or not 0AA8: call_function_method 5@ struct 4@ num_params 2 pop 0 _bSelected 0 _pszText 1@ _retVal 6@ END 0AB2: 0 :CloseCurrentDialogWithButton // 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 0@ Button 1 // 1 = Left , 0 = Right IF 0AA2: 10@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 11@ = 10@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C040 //SAMP_DIALOG_CLOSE END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 11@ = 10@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C0F0 //SAMP_DIALOG_CLOSE END IF 0@ == 3 // 0.3.DL THEN 0A8E: 11@ = 10@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x700D0 //SAMP_DIALOG_CLOSE END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 11@ = 10@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6FF40 //SAMP_DIALOG_CLOSE END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 11@ = 10@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x70660 //SAMP_DIALOG_CLOSE END 0AA8: call_function_method 11@ struct 12@ num_params 1 pop 0 Button 1@ _retVal 6@ END 0AB2: 0 :IfTextContains //0AB1: @IfTextContains 2 String1 0@ String2 1@ 0AB1: @strlen 1 string 0@ _length 31@ 0AB1: @strlen 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination 0AB2: ret 0 :strlen // 0AB1: @strlen 1 string 1@ _return: size 3@ for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@
Sign Check - Chat
Source samp 0.3.7 R*- 0.3.DL:
PHP:{$CLEO .cs} 0000: NOP wait 8500 0AC8: 3@ = allocate_memory_size 260 0AD3: 3@ = "Type /signcheck" // Check / find text 0AC8: 5@ = allocate_memory_size 260 0AD3: 5@ "/signcheck" // CMD while true wait 0 if 0256: player $PLAYER_CHAR defined then 0AB1: @get_samp_version_id 0 _Returned: ID 0@ for 30@ = 95 to 99 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 30@ _Returned: text 1@ 0AC8: 2@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 1@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 2@ if 0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: text 4@ then 0AB1: @SEND_CMD 2 SampVersionID 0@ text 5@ wait 10000 // anti spam end end end end :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :GetChatEntryText { 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 99 _Returned: text 1@ } IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0E4 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0EC END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2ACA10 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E8C8 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9F8 END 0A8D: 2@ readMem 3@ sz 4 vp 0 2@ += 0x132 1@ *= 0xFC 005A: 2@ += 1@ 2@ += 0x20 0AA3: 2@ END 0AB2: ret 1 2@ :IfTextContains { 0@ - the main text 1@ - piece of text to be found within the main text } 0AB1: @strlen 1 strPtr 0@ _length 31@ 0AB1: @strlen 1 strPtr 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 1 string 0@ _return: 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination 0AB2: ret 0 :strlen { Example: 0AB1: @strlen 1 string 1@ _return: 3@ In: 0@ - text; Out: 1@ - size; } for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@ :SEND_CMD // 0AB1: @SEND_CMD 2 SampVersionID 0@ text 3@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x65C60 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x65D30 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x69340 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x69190 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x698C0 END 0AA5: call 3@ num_param 1 pop 0 1@ END 0AB2: 0
Sign Check - Chat 2
Source samp 0.3.7 R*- 0.3.DL:
PHP:{$CLEO .cs} 0000: NOP wait 8500 while true wait 0 if 0256: player $PLAYER_CHAR defined then 0AB1: @get_samp_version_id 0 _Returned: ID 0@ for 30@ = 95 to 99 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 30@ _Returned: text 1@ 0AC8: 2@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 1@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 2@ 0AC8: 3@ = allocate_memory_size 260 0AD3: 3@ = "/signcheck" // Check / find text if 0AB1: @IfTextContains 2 String1 2@ String2 3@ _returned: text 4@ then 0AC8: 6@ = allocate_memory_size 260 0AB1: @get_digits_to_print param_count 2 text 2@ memory_to_store_digits_as_text 6@ 0AC8: 5@ = allocate_memory_size 260 0AD3: 5@ "/signcheck %s" 6@ // CMD 0AB1: @SEND_CMD 2 SampVersionID 0@ text 5@ wait 10000 // anti spam end end end end :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :GetChatEntryText { 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatEntryText 2 SampVersionID 0@ ChatLineID 99 _Returned: text 1@ } IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0E4 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0EC END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2ACA10 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E8C8 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9F8 END 0A8D: 2@ readMem 3@ sz 4 vp 0 2@ += 0x132 1@ *= 0xFC 005A: 2@ += 1@ 2@ += 0x20 0AA3: 2@ END 0AB2: ret 1 2@ :IfTextContains { 0@ - the main text 1@ - piece of text to be found within the main text } 0AB1: @strlen 1 strPtr 0@ _length 31@ 0AB1: @strlen 1 strPtr 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 1 string 0@ _return: 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ 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: @strlen 1 string 0@ _return: 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 :strlen { Example: 0AB1: @strlen 1 string 1@ _return: 3@ In: 0@ - text; Out: 1@ - size; } for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@ :SEND_CMD // 0AB1: @SEND_CMD 2 SampVersionID 0@ text 3@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x65C60 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x65D30 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x69340 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x69190 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x698C0 END 0AA5: call 3@ num_param 1 pop 0 1@ END 0AB2: 0
Etc...
PHP:{$CLEO .cs} 0000: wait 8500 0AC8: 4@ = allocate_memory_size 260 0AD3: 4@ = format "Drug Production" WHILE TRUE WAIT 0 IF 0256: player $PLAYER_CHAR defined THEN 0AB1: @get_samp_version_id 0 _Returned: ID 1@ IF 0AB1: @isDialogOpen 1 SampVersionID 1@ THEN IF 0AB1: @GetDialogCaption 1 SampVersionID 1@ _Return: caption 2@ THEN 0AC8: 3@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 2@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 3@ IF 0AB1: @IfTextContains 2 String1 3@ String2 4@ _returned: Text 5@ THEN IF 0AB1: @GetDialogText 1 SampVersionID 1@ _Returned: text 6@ THEN 0AC8: 7@ = allocate_memory_size 260 0AB1: @DeleteColorCodeFromText 4 text 6@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 7@ 0AB1: @GetLastCharacters 2 String 7@ Characters 11 rnt 8@ 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 1@ text 8@ 0209: 9@ = random_int_in_ranges 1000 2000 // generate random time - protect from admin detection wait 9@ // normal people can't react instant , so that why we need add timer 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 1@ Button 1 // 1 = Left , 0 = Right END END END END END END :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :isDialogOpen // 0AB1: @isDialogOpen 1 SampVersionID 0@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 2@ = readMem 2@ sz 4 vp 0 0A8E: 2@ = 2@ + 0x28 0A8D: 2@ = readMem 2@ sz 4 vp 0 IF 2@ == 1 THEN 0485: dialog_open ELSE 059A: dialog_closed END 0AB2: ret 0 :GetDialogCaption // 0AB1: @GetDialogCaption 1 SampVersionID 0@ _Returned: caption 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 IF 5@ == 1 // Dialog open THEN 0A8E: 3@ = 4@ + 0x40 //DialogCaptionOffset 0485: dialog_open 0AB2: ret 1 3@ ELSE 059A: dialog closed END 0AB2: ret 0 :GetDialogText // 0AB1: @GetDialogText 1 SampVersionID 0@ _Returned: text 1@ 0AA2: 1@ = "samp.dll" IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 2@ = 1@ + 0x21A0B8 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 2@ = 1@ + 0x21A0C0 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 2@ = 1@ + 0x2AC9E0 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 2@ = 1@ + 0x26E898 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 2@ = 1@ + 0x26E9C8 END 0A8D: 4@ = readMem 2@ sz 4 vp 0 0A8E: 5@ = 4@ + 0x28 //DialogOpenOffset 0A8D: 5@ = readMem 5@ sz 4 vp 0 if 5@ == 1 // Dialog active then 0A8E: 6@ = 4@ + 0x2C //DialogTypeOffset 0A8D: 6@ = readMem 6@ sz 4 vp 0 if or 6@ == 0 // DIALOG_STYLE_MSGBOX 6@ == 1 // DIALOG_STYLE_INPUT 6@ == 3 // DIALOG_STYLE_PASSWORD then 0A8E: 7@ = 4@ + 0x34 // DialogTextOffset 0A8D: 7@ = readMem 7@ sz 4 vp 0 0485: dialog_open 0AB2: ret 1 7@ else 059A: dialog closed end end 0AB2: ret 0 :SetDialogInputEditBoxText // 0AB1: @SetDialogInputEditBoxText 2 SampVersionID 0@ text 1@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x80F60 // CDXUTEditBox::SetText END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x81000 // CDXUTEditBox::SetText END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x85000 // CDXUTEditBox::SetText END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x84E70 // CDXUTEditBox::SetText END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 3@ = readMem 3@ sz 4 vp 0 // pDialog; 0A8E: 4@ = 3@ + 0x24 // pDialog->pEditBox; 0A8D: 4@ = readMem 4@ sz 4 vp 0 // pEditBox; 0A8E: 5@ = 2@ + 0x855B0 // CDXUTEditBox::SetText END // CDXUTEditBox::SetText takes 2 params // 1 - pointer to zero terminated string // 2 - bool, if text is to be selected or not 0AA8: call_function_method 5@ struct 4@ num_params 2 pop 0 _bSelected 0 _pszText 1@ _retVal 6@ END 0AB2: 0 :CloseCurrentDialogWithButton // 0AB1: @CloseCurrentDialogWithButton 2 SampVersionID 0@ Button 1 // 1 = Left , 0 = Right IF 0AA2: 10@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 11@ = 10@ + 0x21A0B8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C040 //SAMP_DIALOG_CLOSE END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 11@ = 10@ + 0x21A0C0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6C0F0 //SAMP_DIALOG_CLOSE END IF 0@ == 3 // 0.3.DL THEN 0A8E: 11@ = 10@ + 0x2AC9E0 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x700D0 //SAMP_DIALOG_CLOSE END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 11@ = 10@ + 0x26E898 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x6FF40 //SAMP_DIALOG_CLOSE END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 11@ = 10@ + 0x26E9C8 // SAMP_DIALOG_INFO_OFFSET 0A8D: 12@ = readMem 11@ sz 4 vp 0 0A8E: 11@ = 10@ + 0x70660 //SAMP_DIALOG_CLOSE END 0AA8: call_function_method 11@ struct 12@ num_params 1 pop 0 Button 1@ _retVal 6@ END 0AB2: 0 :IfTextContains //0AB1: @IfTextContains 2 String1 0@ String2 1@ 0AB1: @strlen 1 string 0@ _length 31@ 0AB1: @strlen 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination 0AB2: ret 0 :GetLastCharacters { 0AB1: @GetLastCharacters 2 String 0@ Characters 5 rnt 1@ } 0AB1: @strlen 1 String 0@ Lenght 2@ 0062: 2@ -= 1@ 005A: 0@ += 2@ 0AB2: ret 1 0@ :strlen // 0AB1: @strlen 1 string 1@ _return: size 3@ for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@
! Make Sure you have right settings !
AnyHi, can you help me with a similar cleo? cleo is active when there is a chat line: "Who is going to give me 100000$ --> secret number + secret number - secret number + secret number = ?" then it will automatically calculate the result and automatically chat out the calculated number (question mark), samp 0.3dl
The numbers "28" "79" "63" "49" are randomAny
Pic??
Just one.., give me more examplesThe numbers "28" "79" "63" "49" are random
Currently I only have this one, hope you understand, the math problem I have circled in blueJust one.., give me more examples
I have some more picturesJust one.., give me more examples
I have some more pictures
{$CLEO .cs}
0000:
wait 8500
while true
wait 0
if 0256: player $PLAYER_CHAR defined
then
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@
0AC8: 4@ = allocate_memory_size 1024
0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 4@
0AC8: 5@ = allocate_memory_size 1024
0AD3: 5@ = format "tra loi dung"
if 0AB1: @IfTextContains 2 String1 4@ String2 5@ _returned: Text 6@
then
0AC8: 7@ = allocate_memory_size 1024
0AD3: 7@ = format "__>"
if 0AB1: @IfTextContains 2 String1 6@ String2 7@ _returned: Text 8@
then
if 0AD4: $NOT_USED = scan_string 8@ format "__> %d + %d - %d + %d = ?" 9@ 10@ 11@ 12@
then
005A: 9@ += 10@ // (int)
005A: 11@ += 12@ // (int)
0062: 9@ -= 11@ // (int)
0AD1: "ANSWER: %d" 1337 9@
end
end
end
end
end
:getChatString
{
0AC8: 0@ = allocate_memory_size 260
0AC8: 1@ = allocate_memory_size 260
0AB1: @getChatString 1 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@
0.3.DL
}
IF 0AA2: 31@ = "samp.dll"
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
0AA3: 31@
END
0AB2: ret 4 30@ 29@ 27@ 24@
:DeleteColorCodeFromText
{
0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@
In: 0@ = text , FirstCharacter , SecondCharacter
Out: 1@ = pointer to memory where characters will be stored as text
}
5@ = FALSE // inbracket
0AB1: @strlen 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
003B: 28@ == 1@ // (int)
then
5@ = TRUE // inbracket
end
if
5@ == FALSE // inbracket
THEN
0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1
3@ += 1 // move to next address
END
if
003B: 28@ == 2@ // (int)
then
5@ = FALSE // inbracket
end
end
0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination
0AB2: ret 0
:IfTextContains
//0AB1: @IfTextContains 2 String1 0@ String2 1@ _Returned: Text 2@
0AB1: @strlen 1 string 0@ _length 31@
0AB1: @strlen 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
:strlen
// 0AB1: @strlen 1 string 1@ _return: size 3@
for 1@ = 0 to 1024
0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
if not 2@ == 0
jf break
0@ += 1
end
0AB2: ret 1 1@
Annoying WTLSparazitas I'm hot garbage and forgot I'll have to also distinguish between colors
Always !! but never forget when you face a problem with a serverAnnoying WTLS
Enjoy!Always !! but never forget when you face a problem with a server
quit the server
improvise adapt overcome god sobfox feeling blessed
Sign Check - Chat
Source samp 0.3.7 R*- 0.3.DL:
PHP:{$CLEO .cs} 0000: NOP wait 8500 while true wait 0 if 0256: player $PLAYER_CHAR defined then 0AB1: @get_samp_version_id 0 _Returned: ID 0@ for 1@ = 95 to 99 0AC8: 2@ = allocate_memory_size 1024 0AC8: 3@ = allocate_memory_size 1024 0AB1: @getChatString 2 SampVersionID 0@ ChatID 1@ _Returned: Text 2@ PrefixText 3@ Color 4@ PrefixColor 5@ 0AC8: 6@ = allocate_memory_size 1024 0AB1: @DeleteColorCodeFromText 4 text 2@ FirstCharacter 123 SecondCharacter 125 memory_to_store_characters_as_text 6@ 0AC8: 7@ = allocate_memory_size 1024 0AD3: 7@ = "Type /signcheck" // Check / find text if 0AB1: @IfTextContains 2 String1 6@ String2 7@ _returned: text 8@ then 0AC8: 9@ = allocate_memory_size 1024 0AD3: 9@ "/signcheck" // CMD 0AB1: @SEND_CMD 2 SampVersionID 0@ Text 9@ wait 10000 // anti spam end end end end :get_samp_version_id // 0AB1: @get_samp_version_id 0 _returned: id 0@ 30@ = 0 IF 0AA2: 31@ = load_library "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 END 0AB2: ret 1 30@ :getChatString { 0AC8: 0@ = allocate_memory_size 260 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatString 2 SampVersionID 1 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@ } IF 0AA2: 31@ = "samp.dll" THEN IF NOT 0@ < 1 THEN IF 0@ == 1 // 0.3.7 R1 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@ == 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 END 0AA3: 31@ END 0AB2: ret 4 30@ 29@ 27@ 24@ :IfTextContains { 0@ - the main text 1@ - piece of text to be found within the main text } 0AB1: @strlen 1 strPtr 0@ _length 31@ 0AB1: @strlen 1 strPtr 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 :DeleteColorCodeFromText { 0AB1: @DeleteColorCodeFromText 4 text 0@ FirstCharacter 91 SecondCharacter 93 memory_to_store_characters_as_text 1@ In: 0@ = text , FirstCharacter , SecondCharacter Out: 1@ = pointer to memory where characters will be stored as text } 5@ = FALSE // inbracket 0AB1: @strlen 1 string 0@ _return: 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 003B: 28@ == 1@ // (int) then 5@ = TRUE // inbracket end if 5@ == FALSE // inbracket THEN 0A8C: write_memory 3@ size 1 value 28@ virtual_protect 1 3@ += 1 // move to next address END if 003B: 28@ == 2@ // (int) then 5@ = FALSE // inbracket end end 0A8C: write_memory 3@ size 1 value 0 virtual_protect 1 // null-termination 0AB2: ret 0 :strlen { Example: 0AB1: @strlen 1 string 1@ _return: 3@ In: 0@ - text; Out: 1@ - size; } for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@ :SEND_CMD // 0AB1: @SEND_CMD 2 SampVersionID 0@ Text 3@ IF 0AA2: 2@ = "samp.dll" THEN IF NOT 0@ < 0 THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x65C60 0AA5: call 3@ num_param 1 pop 0 1@ END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x65D30 0AA5: call 3@ num_param 1 pop 0 1@ END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x69340 0AA5: call 3@ num_param 1 pop 0 1@ END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x69190 0AA5: call 3@ num_param 1 pop 0 1@ END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x698C0 0AA5: call 3@ num_param 1 pop 0 1@ END END END 0AB2: 0
Hi, first and foremost, your sources have without a doubt helped me a lot, but is it possible to make this script togglable with maybe Numpad Insert? I have tried to implement from many different scripts, but well, let's just say I'm not a programmer since it failed miserably...
Ahh, sorry I should have been more specific. Truth be told, I'm actually using your source as a base for an automatic join event script, the mentioned source still works as of now (minus being togglable). Since I use it on an RP server it can be quite bad if I accidentally joined an event while I'm in the middle of a situation.It is old source mate..., server keep updating systems..
No problem I added strlenIt's for SAMP 0.3.DL, and I think IT WORKS!! Thank you very much, I presume you missed this part since it gives out an error otherwise, but after I include it BOOM it works, my respect, it works perfectly!
Code::strlen { Example: 0AB1: @strlen 1 string 1@ _return: 3@ In: 0@ - text; Out: 1@ - size; } for 1@ = 0 to 1024 0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0 if not 2@ == 0 jf break 0@ += 1 end 0AB2: ret 1 1@
{$CLEO .cs}
0000: NOP
wait 8500
30@ = true {autostart}
while true
wait 0
if
0ADC: test_cheat "JOIN"
then
if
30@ == false
then
30@ = true
0AD1: "~w~Event Join ~g~Enable" 1337
else
30@ = false
0AD1: "~w~Event Join ~r~Disable" 1337
end
end
if and
30@ == true
0256: player $PLAYER_CHAR defined
then
wait 250
0AC8: 0@ = allocate_memory_size 1024
0AC8: 1@ = allocate_memory_size 1024
0AB1: @getChatString 2 SampVersionID 3 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@
0AC8: 4@ = allocate_memory_size 1024
0AD3: 4@ = "to participate in the event"
if
0AB1: @IfTextContains 2 String1 0@ String2 4@ _returned: Text 5@
then
wait 1500
0AC8: 6@ = allocate_memory_size 1024
0AD3: 6@ "/event join"
0AB1: @SEND_CMD 2 SampVersionID 3 text 6@
wait 10000
end
end
end
end
:getChatString
{
0AC8: 0@ = allocate_memory_size 260
0AC8: 1@ = allocate_memory_size 260
0AB1: @getChatString 2 SampVersionID 1 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@
}
IF 0AA2: 31@ = "samp.dll"
THEN
IF 0@ == 1 // 0.3.7 R1
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@ == 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
0AA3: 31@
END
0AB2: ret 4 30@ 29@ 27@ 24@
:IfTextContains
//0AB1: @IfTextContains 2 String1 0@ String2 1@
0AB1: @strlen 1 string 0@ _length 31@
0AB1: @strlen 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
:SEND_CMD
// 0AB1: @SEND_CMD 2 SampVersionID 1 Command: 7@
IF 0AA2: 2@ = "samp.dll"
THEN
IF 0@ == 1 // 0.3.7 R1
THEN
0A8E: 3@ = 2@ + 0x65C60
END
IF 0@ == 2 // 0.3.7 R2
THEN
0A8E: 3@ = 2@ + 0x65D30
END
IF 0@ == 3 // 0.3.DL
THEN
0A8E: 3@ = 2@ + 0x69340
END
IF 0@ == 4 // 0.3.7 R3
THEN
0A8E: 3@ = 2@ + 0x69190
END
IF 0@ == 5 // 0.3.7 R4
THEN
0A8E: 3@ = 2@ + 0x698C0
END
0AA5: call 3@ num_param 1 pop 0 1@
END
0AB2: 0
:strlen
{
Example: 0AB1: @strlen 1 string 1@ _return: 3@
In: 0@ - text;
Out: 1@ - size;
}
for 1@ = 0 to 1024
0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
if not 2@ == 0
jf break
0@ += 1
end
0AB2: ret 1 1@
SA:MP Version?
Code:{$CLEO .cs} 0000: NOP wait 8500 30@ = true {autostart} while true wait 0 if 0ADC: test_cheat "JOIN" then if 30@ == false then 30@ = true 0AD1: "~w~Event Join ~g~Enable" 1337 else 30@ = false 0AD1: "~w~Event Join ~r~Disable" 1337 end end if and 30@ == true 0256: player $PLAYER_CHAR defined then wait 250 0AC8: 0@ = allocate_memory_size 1024 0AC8: 1@ = allocate_memory_size 1024 0AB1: @getChatString 2 SampVersionID 3{1=0.3.7-R1|3=0.3.DL-R1} ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@ 0AC8: 4@ = allocate_memory_size 1024 0AD3: 4@ = "to participate in the event" if 0AB1: @IfTextContains 2 String1 0@ String2 4@ _returned: Text 5@ then wait 1500 0AC8: 6@ = allocate_memory_size 1024 0AD3: 6@ "/event join" 0AB1: @SEND_CMD 2 SampVersionID 3{1=0.3.7-R1|3=0.3.DL-R1} text 6@ wait 10000 end end end end :getChatString { 0AC8: 0@ = allocate_memory_size 260 0AC8: 1@ = allocate_memory_size 260 0AB1: @getChatString 2 SampVersionID 1 ChatID 99 _Returned: Text 0@ PrefixText 1@ Color 2@ PrefixColor 3@ } IF 0AA2: 31@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 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@ == 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 0AA3: 31@ END 0AB2: ret 4 30@ 29@ 27@ 24@ :IfTextContains //0AB1: @IfTextContains 2 String1 0@ String2 1@ 0AB1: @strlen 1 string 0@ _length 31@ 0AB1: @strlen 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 :SEND_CMD // 0AB1: @SEND_CMD 2 SampVersionID 1 Command: 7@ IF 0AA2: 2@ = "samp.dll" THEN IF 0@ == 1 // 0.3.7 R1 THEN 0A8E: 3@ = 2@ + 0x65C60 END IF 0@ == 2 // 0.3.7 R2 THEN 0A8E: 3@ = 2@ + 0x65D30 END IF 0@ == 3 // 0.3.DL THEN 0A8E: 3@ = 2@ + 0x69340 END IF 0@ == 4 // 0.3.7 R3 THEN 0A8E: 3@ = 2@ + 0x69190 END IF 0@ == 5 // 0.3.7 R4 THEN 0A8E: 3@ = 2@ + 0x698C0 END 0AA5: call 3@ num_param 1 pop 0 1@ END 0AB2: 0
:strlen
{
Example: 0AB1: @strlen 1 string 1@ _return: 3@
In: 0@ - text;
Out: 1@ - size;
}
for 1@ = 0 to 1024
0A8D: 2@ = read_memory 0@ size 1 virtual_protect 0
if not 2@ == 0
jf break
0@ += 1
end
0AB2: ret 1 1@
Should help from you.Enjoy!
Download in the video description
can you make it a cleo file? i cant compile it when am trying toNo problem I added strlen