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

Rom_Black

Новичок
44
0
Во-первых, нужно запомнить
"==" сравнение
"=" приравнивание
т.е если нужно чтобы 2@ было равно 2, тогда 2@ = 2
если нужно узнать равняется ли 2@ двум, тогда if 2@ == 2
Во-вторых, тебе нужно либо либо объявить переменные (компилятор не знает, что находится в 4@ и 2@ )
{$CLEO}
var
// 2@ : <тип пременной (int, float, string) >
// к примеру
4@ : int
end
<код>
Или можно просто написать полный опкод
Если в 2@ и 4@ int - тогда в поиске SB просто введи "@ == @ int"
Найдешь 003B: 18@ == 21@ // (int)
Ну и выйдет:
if 003B: 4@ == 1@
then

end
Спасибо тебе пацан.
 

Rom_Black

Новичок
44
0
Подскажите как сделать сканирование строки:
Груз доставлен на склад! Всего перенесено грузов: %d
 

Enjoy

Новичок
Проверенный
164
11
Подскажите как сделать сканирование строки:
Груз доставлен на склад! Всего перенесено грузов: %d

Должно работать, я думаю.
Код:
while true
wait 0

    alloc 2@ 124
    alloc 3@ 0
    0B75: samp get_chat_string 99 text_to 2@ prefix_to 3@ color_to 4@ prefix_color_to 5@
    if 0C18: 6@ = strstr string1 2@ string2 "Груз доставлен на склад! Всего перенесено грузов:"
    then
           free 2@
           free 3@
           // Какие-либо твои действия
    end
end
 

Rom_Black

Новичок
44
0
Должно работать, я думаю.
Код:
while true
wait 0

    alloc 2@ 124
    alloc 3@ 0
    0B75: samp get_chat_string 99 text_to 2@ prefix_to 3@ color_to 4@ prefix_color_to 5@
    if 0C18: 6@ = strstr string1 2@ string2 "Груз доставлен на склад! Всего перенесено грузов:"
    then
           free 2@
           free 3@
           // Какие-либо твои действия
    end
end
Спасибо большое, только вот какая ячейка перенесенного груза?
 

Enjoy

Новичок
Проверенный
164
11
а память не нужно занимать?
Если до сих пор не получилось, то попробуй так.
Код:
0B75: samp get_chat_string 99 text_to 2@ prefix_to 3@ color_to 4@ prefix_color_to 5@
0AD3: 0@ = format "Груз доставлен на склад! Всего перенесено грузов: %d" 1@
if 0C18: 6@ = strstr string1 2@ string2 0@
Все остальное так же.
 

Zaxar_D

Известный
53
5
Можно ли как то удалить серверный текстдрав?
И хочу научиться рисовать UseBox на экране, прощу помощи и если можно развернутый ответ)
Заранее спасибо!
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,463
Код:
0B75: samp get_chat_string 99 text_to 5@ prefix_to 6@ color_to 7@ prefix_color_to 8@
if 0AD4: 5@ = scan_string 5@ format "Груз доставлен на склад. Количество: {FF9900}%d кг" 9@ // 9@ кол-во КГ.
then
// code
Вы если подсказываете, то подсказывайте правильно.
После этого кода память останется(вы её уже не сможете очистить, т.к. указатель в переменной(5@) сменился на кол-во прочтенных параметров).
Т.е.
Код:
- цикл 1
|
   |5@ = выделенная память
   |5@ = строка из чата
   |5@ = кол-во просканированных параметров
- повторение цикла
|
   |5@ = кол-во просканированных параметров
   |5@ = строка из чата сохраняется черти куда, а если точнее, копируется 4 байта, может даже переходит за границы и лезет на другие переменные, тем самым убивая все данные, которые хранятся в них
   |5@ = ! здесь либо варнинг, либо неправильное чтение + лежит оставленный буфер в памяти, который уже не используется
- цикл over999
...
Для того, чтобы сохранить строку из чата заново, придется выделять память снова, что будет являться утечкой.

Я не знаю, может вы не видите вики раздел, либо он вам просто не подходит.
 
Последнее редактирование:
  • Нравится
Реакции: Enjoy

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,463
Если вам нужен моментальная проверка сообщений, которые приходят с сервера, используйте хуки. Я туториал по ним в вики до сих пор занести не могу, т.к. если просто писать туда примеры, то это будет чушью.

Есть маленький пример, разберетесь, может...:
http://dumpz.org/1303571/
 

Enjoy

Новичок
Проверенный
164
11
Легенд, то есть вот так нужно было сделать?
Код:
alloc 0@ 64
0AD4: 1@ = scan_string 0@ format "Груз доставлен на склад! Всего перенесено грузов: %d" 2@
if 1@ > 0
then
// действия
end
free 0@
 

Enjoy

Новичок
Проверенный
164
11
То есть, получается, тот самый указатель (5@) будет постоянно забиваться кол-вом прочтенных параметров пока память не засрется полностью, но понять не могу, почему этот указатель нельзя будет очистить? Это так по дефолту что ли?