Вопросы по CLEO-скриптингу

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Можешь помочь с написанием кода? Надо чтоб после строки в чате "сказал: %d", скрипт прописывает команду в чат "/find %d". Дальше если в чате появляется строка "x Координаты этого игрока получить невозможно!" скрипт писал "/c Инт", или если этой строки в чате нет, то пишет в чат "/c go"
Это называется не помощь в написании, а просьба о написании скрипта. Плиз, кыш.
 

Ice

Известный
33
3
Код:
//Allocating memory for string1
alloc 1@ 512
0C11: memset 1@ 0 512

//Allocating memory for string2
alloc 2@ 512
0C11: memset 2@ 0 512

//After i store text in string 1@ (Read text from dialog or format my own) i try to reverse text
0C2D: strrev in 1@ out 2@
The strrev function randomly crashes my game while playing, and when you alt tab game when you return you also crash...
Is it just me or someone can confirm bug?

Anyway if someone could help me to extract 11 last characters from text... (Example: "Some static text XXXXXXXXXX" ) These static text is always the same and i can find it with strstr. I just need to extract 11 last characters into another string.

I tried reversing string, copying first 11 characters and reversing string again. Its working but strrev function just crashes my game randomly and on alt+tab/maximize. By the way, i do release memory, so its not memory leak (at least not on in my cleo script)

Any help is welcome. Fell free to answer in Russian i will understand.
 
Последнее редактирование:

Niko

Известный
Проверенный
230
268
Код:
:deleteCharFromString
// call @deleteCharFromString 3 string 0@ new_string 1@ char 2@
var
    3@ : int
    4@ : int

    2@ : int
    5@ : int
end
0C17: 3@ = strlen 0@
4@ = 0
6@ = 0 // len of new string
while 4@ < 3@
    0C1D: 5@ = array 0@ element 4@ el_size 1
    if 5@ <> 2@
    then
        0C1E: array 1@ element 6@ el_size 1 = 5@
        6@++
    end
    4@++
end
ret 0

Как пример:
Код:
0AC8: alloc 0@ 128
0AC8: alloc 1@ 128
0C11: memset 0@ 0 128
0C11: memset 1@ 0 128
0AD3: format 0@ = "Here: 1 2 3 4 5 6 7 8 9. This symbol \"%c\" is hidden" 0x3A
0AB1: call @deleteCharFromString 3 string 0@ new_string 1@ char 0x3A
0AF8: chat "String before - %s" -1 0@
0AF8: chat "String after - %s" -1 1@
0AC9: free 0@
0AC9: free 1@
0x3A(58) - ASCII код символа :
Спасибо тебе большое
 

Vovich

HOT
Проверенный
717
197
Подскажите ID TextDrawa этого.
А то не получается чёт у меня прочекать текст из него таким способом:
Код:
  0C5A: samp textdraw 2187 get_string_to 1@
  if 0C14: strcmp string1 1@ string2 "Press Y"   
  then

Bezimyanni_4302630_17882368.png
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
The strrev function randomly crashes my game while playing, and when you alt tab game when you return you also crash...
Is it just me or someone can confirm bug?

Anyway if someone could help me to extract 11 last characters from text... (Example: "Some static text XXXXXXXXXX" ) These static text is always the same and i can find it with strstr. I just need to extract 11 last characters into another string.

I tried reversing string, copying first 11 characters and reversing string again. Its working but strrev function just crashes my game randomly and on alt+tab/maximize. By the way, i do release memory, so its not memory leak (at least not on in my cleo script)

Any help is welcome. Fell free to answer in Russian i will understand.
Код:
alloc 1@ 512
0C11: memset 1@ 0 512
format 1@ = "Some static text ABCDEFGHIJK"

alloc 2@ 512
0C11: memset 2@ 0 512
0C2D: strrev in 1@ out 2@
It's work.

With cut last 11 symbols:
First version(with strrev):
Код:
alloc 1@ 512
0C11: memset 1@ 0 512
format 1@ = "123456789 ABCDEFGHIJK"
0C2D: strrev in 1@ out 1@

alloc 2@ 16
0C11: memset 2@ 0 16
0C24: strncpy destination 2@ source 1@ size 11
0C2D: strrev in 2@ out 2@ // set normal string

0C2D: strrev in 1@ out 1@ // return normal string

0AF8: "%s" -1 1@
0AF8: "%s" -1 2@

free 1@
free 2@

Second version:
Код:
alloc 1@ 512
0C11: memset 1@ 0 512
format 1@ = "123456789 ABCDEFGHIJK"
0085: 2@ = 1@ // save pointer

0C17: 3@ = strlen 1@
3@ -= 11
005A: 2@ += 3@ // offset in pointer string
0AF8: "%s" -1 2@

free 1@
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Подскажите ID TextDrawa этого.
А то не получается чёт у меня прочекать текст из него таким способом:
Код:
  0C5A: samp textdraw 2187 get_string_to 1@
  if 0C14: strcmp string1 1@ string2 "Press Y"
  then

Bezimyanni_4302630_17882368.png
Опкод 0C5A не реагирует на текстдравы типа ForPlayer. По крайне мере, я думаю, что это такой тип.
 

Vovich

HOT
Проверенный
717
197
Читай через память или через хук. А для начала проверь через RakLogger.
Нашел пример скрипта, там автонажатие для Stage RP таким же образом сделано как и я пытался.
При этом скрипт работает, ну и там тоже TextDraw, но немного не такой... С чем оно связано?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Нашел пример скрипта, там автонажатие для Stage RP таким же образом сделано как и я пытался.
При этом скрипт работает, ну и там тоже TextDraw, но немного не такой... С чем оно связано?
http://dumpz.org/1207883/
Думаю никто не против, т.к. он и так уже в паблике.
Возможно, что не будет работать. Он на 0.3z.
Ты просто не приложил никаких данных, ничего. Даю код, который писал ещё в октябре 2014.
 

Vovich

HOT
Проверенный
717
197
http://dumpz.org/1207883/
Думаю никто не против, т.к. он и так уже в паблике.
Возможно, что не будет работать. Он на 0.3z.
Ты просто не приложил никаких данных, ничего. Даю код, который писал ещё в октябре 2014.
Я пытаюсь сделать автонажатие для другого сервера, для текстдрава скрин которого я кидал.
А этот к сожалению не работает :c
 

Vovich

HOT
Проверенный
717
197
Как опкод 0С5A заменить?
А то не пашет(

Код:
{$CLEO .cs}
0000:

0B34: samp register_client_command "cmd" to_label @cmd
alloc 1@ 128

while true
wait 0
if 0@ == true
then
0C5A: samp textdraw 2223 get_string_to 1@
if 0C14: strcmp string1 1@ string2 "Press Y"
then
chatmsg "TextDraw ID: 2223 отображен, нажимайте клавишу Y"
else
if 0C14: strcmp string1 1@ string2 "Press N"
then
chatmsg "TextDraw ID: 2223 отображен, нажимайте клавишу N"
end
end
end
end

:cmd
if 0@ == false
then
0@ = true
else
0@ = false
end
SAMP.CmdRet()
 

[Nexus]

Известный
41
2
Код:
{$CLEO }
0000:
if not 0@ = SAMP.Base()
then 0A93: end_custom_thread
end
while not SAMP.Available()
wait 100
end

:tam_1
wait 0    
if
00EC: actor $PLAYER_ACTOR 0 near_point 1256.6039 242.2310 19.5547 radius 2.0 2.0
else_jump @tam_2
0AF9: samp say_msg "/materials get 30"
0b43: samp cmd_ret
jump @tam_1    
:tam_2
wait 0
if
00EC: actor $PLAYER_ACTOR 0 near_point -2119.1736 -177.9378 35.3203 radius 2.0 2.0
else_jump @tam_1
0AF9: samp say_msg "/materials deliver"
0b43: samp cmd_ret
jump @tam_2

Как сделать чтоб актер брал метку всего раз, а не флудил бесконечно?
 
Последнее редактирование: