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

The_North_Fake

Новичок
15
0
0 - первая строка чата, 99 последняя. Всего 100.

Проверку на ответ диалога надо ставить в цикле
Спасибо, за строки не знал, вообще как по мне лучше работать с SF диалогами, они удобнее)) Это лично мое мнение.
 

azdsfbzxv

Новичок
73
6
Диалог появляется повторно потому, что идет флуд, попробуй поставить id строки чата 0, а не 99 (это помоему весь скан чата, а 0 - текущей строки) и по сути должно работать. И добавь проверку не открыт ли этот диалог уже 0B87: dialog 15 is_visible , если открыт то пропускаем.
CLEO:
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
0AC8: 1@ = allocate_memory_size 64
0AC8: 2@ = allocate_memory_size 64

:Noname_16
0001: wait 0 ms
00D6: if
0AFA:  is_samp_available
004D: jump_if_false @Noname_16

:Noname_33
0001: wait 0 ms
0B75: samp get_chat_string 99 text_to 1@ prefix_to 2@ color_to 3@ prefix_color_to 4@
00D6: if
0C18: 6@ = strstr string1 1@ string2 "Здравия желаю"
004D: jump_if_false @Noname_33
[B]00D6: if[/B]
[B]0B87: dialog 15 is_visible[/B]
[B][B]004D: jump_if_false @Noname_888[/B][/B]
0B3B: samp show_dialog id 15 caption "Здравия" text "{ff0000}Ваш ответ" button_1 "Ответ" button_2 "Нет" style 0
[B]:Noname_888[/B]
0001: wait 0 ms
00D6: if
0B3C:  samp is_dialog_responded id 15 button 7@ list_item 0 input_text 0
004D: jump_if_false @Noname_213
00D6: if
0039:   7@ == 1
004D: jump_if_false @Noname_202
0AF9: samp say_msg "Здраия желаю!"
0002: jump @Noname_213

:Noname_202
0AF9: samp say_msg "/w кхм"

:Noname_203
0AC9: free_allocated_memory 1@
0AC9: free_allocated_memory 2@

:Noname_213
0002: jump @Noname_33
0B87: dialog 15 is_visible попробую. Спасибо
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Вы меня наверное опять не поняли.
Данная конструкция клео скрипта, у меня работала 3 дня назад, ну уже 4 дня назад, без всяких на то проблем, уже вечером мне сообщили, что скрипт обьявление о начале мероприятия не работает.
2@ - переменная для обработки Лист Итема работает, при выборе первых двух пунктов, текст успешно отправляется, начиная с 3 пункта все что написано опкодом 0af9 не отправляется, если написать опкодом 0af8 (для себя, мне это не нужно) работает, так я проверил, что пункты меню работают, не работает только опкод 0af9 в них.
анти флуд тут не причем, ибо отправился бы в таком случае ХОТЯ БЫ одна строка, но не отправляется ни единой строки в 0af9 опкоде.
Качай локальный сервер, чекай там. Не еби мозги.
 

Garrus

Известный
159
20
При использовании опкода 0C65: 3@ = download_url "http://boost.org/LICENSE_1_0.txt" to_file "boost_lic.txt" и указании заведомо неправильной ссылки на dropbox, он закачивает файл, содержащий HTML-код страницы. Как это исправить? Нужно, чтоб он в данном случае ничего не закачивал.

И второй вопросик. Как правильно использовать опкод 0C6E: destroy_custom_thread 0@? У меня при его использовании кидает exception.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Это значит то, что в переменной хранится указатель на недействительный поток(уже завершен/перезаписано значение переменной).
 

Garrus

Известный
159
20
Это значит то, что в переменной хранится указатель на недействительный поток(уже завершен/перезаписано значение переменной).
Просто странно, ведь я переменную 25@ после создания потока не перезаписывал. Получается, нужно получить указатель на поток.
Набросал пример кода, можно ли так делать?

Код:
0C6A: 0@ = create_custom_thread_at_label @test

while true
if and
0C89:  key_just_pressed 45
8B21: not   samp is_chat_opened
then
0AF1: write_int 1 to_ini_file "cleo\temp" section "main" key "destroy-thread"
end
end

:test
while true
0AF0: 0@ = get_int_from_ini_file "cleo\temp" section "main" key "destroy-thread"
if 0@ == 1
then
0AF1: write_int 0 to_ini_file "cleo\temp" section "main" key "destroy-thread"
0A9F: 0@ = current_thread_pointer
0C6E: destroy_custom_thread 0@
end
end
 
Последнее редактирование:

azdsfbzxv

Новичок
73
6
  • Добавил поверку:
0B87: dialog 15 is_visible .
Проблема осталась

  • Добавил освобождение памяти:
0AC9: free_allocated_memory 1@
0AC9: free_allocated_memory 2@
Начали сыпаться варнинги после появления ответа.
Проблема осталась.

  • Как должно работать:
При появлении в чате выражения: Здравия желаю.
Выводится диалог. При нажатии "ответ"- в чат пишется "Здравия желаю!".
А при нажатии "Нет"- шепчет "/w кхм"

    • Однако работает неправильно:
Видит в чате выражение "Здравия желаю".
Выводится диалог. При нажатии "ответ" или "нет". Пишет "Здравия желаю". Выдаёт варнинг. Диалог не исчезает. Нажимаешь снова ответ. Диалог закрывается.
Но если снова видит "Здравия желаю" в чате, то выдаётся ответ сразу , а за тем выводится диалог. После нажатия "ответ" ничего не происходит

Большая просьба к вам найдите ошибку в коде. За ранее благодарен

Код:
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
0AC8: 1@ = allocate_memory_size 64
0AC8: 2@ = allocate_memory_size 64

:Noname_16
0001: wait 0 ms
00D6: if
0AFA:  is_samp_available
004D: jump_if_false @Noname_16

:Noname_33
0001: wait 0 ms
0B75: samp get_chat_string 99 text_to 1@ prefix_to 2@ color_to 3@ prefix_color_to 4@
00D6: if
0C18: 6@ = strstr string1 1@ string2 "Здравия желаю"
004D: jump_if_false @Noname_33
0B3B: samp show_dialog id 16 caption "Здравия" text "{ff0000}Ваш ответ" button_1 "Ответ" button_2 "Нет" style 0
0001: wait 0 ms
00D6: if
0B3C:  samp is_dialog_responded id 16 button 7@ list_item 0 input_text 0
004D: jump_if_false @Noname_227
00D6: if and
0039:   7@ == 1
0B87:  dialog 16 is_visible
004D: jump_if_false @Noname_206
0AF9: samp say_msg "Здраия желаю!"
0002: jump @Noname_227

:Noname_206
0AF9: samp say_msg "/w кхм"
0AC9: free_allocated_memory 1@
0AC9: free_allocated_memory 2@

:Noname_227
0002: jump @Noname_33

Я понимаю код простой. Несерьёзный. Но я хочу просто научиться считывать строку и через диалог выводить результат. Что бы потом запилить что то лучше
 
Последнее редактирование:

hnnssy

Известный
Друг
2,684
2,762

  • Добавил поверку:
0B87: dialog 15 is_visible .
Проблема осталась


  • Добавил освобождение памяти:
0AC9: free_allocated_memory 1@
0AC9: free_allocated_memory 2@
Начали сыпаться варнинги после появления ответа.
Проблема осталась.


  • Как должно работать:
При появлении в чате выражения: Здравия желаю.
Выводится диалог. При нажатии "ответ"- в чат пишется "Здравия желаю!".
А при нажатии "Нет"- шепчет "/w кхм"



    • Однако работает неправильно:
Видит в чате выражение "Здравия желаю".
Выводится диалог. При нажатии "ответ" или "нет". Пишет "Здравия желаю". Выдаёт варнинг. Диалог не исчезает. Нажимаешь снова ответ. Диалог закрывается.
Но если снова видит "Здравия желаю" в чате, то выдаётся ответ сразу , а за тем выводится диалог. После нажатия "ответ" ничего не происходит

Большая просьба к вам найдите ошибку в коде. За ранее благодарен

Код:
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
0AC8: 1@ = allocate_memory_size 64
0AC8: 2@ = allocate_memory_size 64

:Noname_16
0001: wait 0 ms
00D6: if
0AFA:  is_samp_available
004D: jump_if_false @Noname_16

:Noname_33
0001: wait 0 ms
0B75: samp get_chat_string 99 text_to 1@ prefix_to 2@ color_to 3@ prefix_color_to 4@
00D6: if
0C18: 6@ = strstr string1 1@ string2 "Здравия желаю"
004D: jump_if_false @Noname_33
0B3B: samp show_dialog id 16 caption "Здравия" text "{ff0000}Ваш ответ" button_1 "Ответ" button_2 "Нет" style 0
0001: wait 0 ms
00D6: if
0B3C:  samp is_dialog_responded id 16 button 7@ list_item 0 input_text 0
004D: jump_if_false @Noname_227
00D6: if and
0039:   7@ == 1
0B87:  dialog 16 is_visible
004D: jump_if_false @Noname_206
0AF9: samp say_msg "Здраия желаю!"
0002: jump @Noname_227

:Noname_206
0AF9: samp say_msg "/w кхм"
0AC9: free_allocated_memory 1@
0AC9: free_allocated_memory 2@

:Noname_227
0002: jump @Noname_33

Я понимаю код простой. Несерьёзный. Но я хочу просто научиться считывать строку и через диалог выводить результат. Что бы потом запилить что то лучше
CLEO:
{$CLEO}
{$NOSOURCE}
{$INCLUDE SF}
0000:
thread " "

wait 2000

alloc 4@ 256
memset 4@ 256 0

0BE3: raknet setup_incoming_rpc_hook @ClientMessage

while true
wait 0
if 0B3C: samp dialog_respond 16 button 11@ list_item 12@ input_text 0
then
  if 11@ == 1
  then
  0af9: "Здравия"
  else
  if 11@ == 2
  then
  0af9: "/w Кхм"
  end
  end
end
end

:ClientMessage
0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM
0BE5: raknet 1@ = get_hook_param PARAM_PACKETID
//0BEF: raknet 5@ = bit_stream 0@ get_number_of_bytes_used
if
1@ == RPC_ScrClientMessage // DWORD color, DWORD strLen, char[] msg
then
  0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_INT  // color
  0BE7: raknet 3@ = bit_stream_read 0@ type BS_TYPE_INT  // strLen
  0C11: memset destination 4@ value 0 size 256   
  0BE8: raknet bit_stream 0@ read_array 4@ size 3@ // Text
  0C0F: array 4@ element 3@ = 0x00
  if and
  0C18: 5@ = strstr string1 4@ string2 "Здравия желаю"
  then
  0B3B: samp show_dialog id 16 caption "Здравия" text "{ff0000}Ваш ответ" button_1 "Ответ" button_2 "Нет" style 0
  end
end
0BE0: raknet hook_ret true
 

azdsfbzxv

Новичок
73
6
Спасибо. Проверю. Только raknet для меня вообще тёмный лес. Даже пока не читал про него
 

BlackKnigga

Известный
BH Team
922
446
Просто странно, ведь я переменную 25@ после создания потока не перезаписывал. Получается, нужно получить указатель на поток.
Набросал пример кода, можно ли так делать?

Код:
0C6A: 0@ = create_custom_thread_at_label @test

while true
if and
0C89:  key_just_pressed 45
8B21: not   samp is_chat_opened
then
0AF1: write_int 1 to_ini_file "cleo\temp" section "main" key "destroy-thread"
end
end

:test
while true
0AF0: 0@ = get_int_from_ini_file "cleo\temp" section "main" key "destroy-thread"
if 0@ == 1
then
0AF1: write_int 0 to_ini_file "cleo\temp" section "main" key "destroy-thread"
0A9F: 0@ = current_thread_pointer
0C6E: destroy_custom_thread 0@
end
end
Так поток ты не закроешь. Так его только из другого потока закрыть можно. Чтобы закрыть текущий поток, нужно использовать 0A93: end_custom_thread
 

azdsfbzxv

Новичок
73
6
CLEO:
{$CLEO}
{$NOSOURCE}
{$INCLUDE SF}
0000:
thread " "

wait 2000

alloc 4@ 256
memset 4@ 256 0

0BE3: raknet setup_incoming_rpc_hook @ClientMessage

while true
wait 0
if 0B3C: samp dialog_respond 16 button 11@ list_item 12@ input_text 0
then
  if 11@ == 1
  then
  0af9: "Здравия"
  else
  if 11@ == 2
  then
  0af9: "/w Кхм"
  end
  end
end
end

:ClientMessage
0BE5: raknet 0@ = get_hook_param PARAM_BITSTREAM
0BE5: raknet 1@ = get_hook_param PARAM_PACKETID
//0BEF: raknet 5@ = bit_stream 0@ get_number_of_bytes_used
if
1@ == RPC_ScrClientMessage // DWORD color, DWORD strLen, char[] msg
then
  0BE7: raknet 2@ = bit_stream_read 0@ type BS_TYPE_INT  // color
  0BE7: raknet 3@ = bit_stream_read 0@ type BS_TYPE_INT  // strLen
  0C11: memset destination 4@ value 0 size 256 
  0BE8: raknet bit_stream 0@ read_array 4@ size 3@ // Text
  0C0F: array 4@ element 3@ = 0x00
  if and
  0C18: 5@ = strstr string1 4@ string2 "Здравия желаю"
  then
  0B3B: samp show_dialog id 16 caption "Здравия" text "{ff0000}Ваш ответ" button_1 "Ответ" button_2 "Нет" style 0
  end
end
0BE0: raknet hook_ret true
memset 4@ 256 0 это 0C11: memset destination 4@ value 256 size 0 ?
Заменил. Теперь пишет неверное число условий. максимум 8