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

Woofing Giraffe

Активный
402
49
Думал что понял, но нет ._. Я открываю диалог командой, кинул только эту часть скрипта, которая не работает. Ничего не происходит после ввода "1" в диалог
PHP:
:dialog
0B3B: samp show_dialog id 16 caption "Dialog" text "/free [ID] - выпустить из КПЗ" button_1 "OK" button_2 "" style DIALOG_STYLE_MSGBOX 1
SAMP.CmdRet
:1
wait 0
    SAMP.Available()
jf @1   
alloc 12@ 128

while true
    wait 0
    if 0B3C:  samp is_dialog_responded id 16 button 13@ list_item 0 input_text 12@
    then
        if 13@ == 1 // Если нажал enter
        then                                         
            0C1A: 14@ = atoi 12@
            if 14@ == 1
            then
            say "/free"
            end
        end
    end
end
Кинь сюда весь скрипт, или в лс мне, тут видно что бред полный
 

hnnssy

Известный
Друг
2,684
2,748
PHP:
0B34: samp register_client_command "int" to_label @int
   :int
SAMP.IsCommandTyped(0@)
0AD4: 1@ = scan_string 0@ format "%d" 11@
if 11@ == 1
then
    0BD1: samp send_picked_up_pickup 157
    wait 5000
    Actor.PutAt($PLAYER_ACTOR, 271.67 1862.56 8.76)
    04BB: select_interior 0
end
Почему не работает задержка в 5 секунд?
В командах wait и циклы не работают.
 

Woofing Giraffe

Активный
402
49
Зато в циклах можно.
CLEO:
0B34: samp register_client_command "int" to_label @int
   
while true
    wait 0
    if 10@ == true
    then
        0BD1: samp send_picked_up_pickup 157
        wait 5000
        Actor.PutAt($PLAYER_ACTOR, 271.67 1862.56 8.76)
        04BB: select_interior 0
        10@ = false
    end
end
     
:int
SAMP.IsCommandTyped(0@)
0AD4: 1@ = scan_string 0@ format "%d" 11@
if 11@ == 1
then
    10@ = true
end
cmdret
 

Forus

Известный
54
12
Может у кого есть инфа про
" call @метка " ?
Ну как я понял call вызывает метку и когда метка проходит скрипт идёт дальше.
Но вот в чём прикол,в скрипте который мне писали call использовано кучу раз,и всё хорошо работает,да и сам я его дописал позже с использованием call, и всё хорошо работает.
А вот начал писать сам другой скрипт,использую call - компилируется - в игре этот call пропускается.
 

:notCoder:

Новичок
19
0
подскажите, как сделать так, чтобы при нажатии определенной клавиши/прописывании команды в чат, открывалось диалог-меню и выбирался какой-то пункт(в моем случае на дрифт сервере нужно нажимать альт, затем выбирать нужный пункт, а мне нужно чтобы все автоматически происходило). Извиняюсь, если написал бред :crazy:
 

Forus

Известный
54
12
подскажите, как сделать так, чтобы при нажатии определенной клавиши/прописывании команды в чат, открывалось диалог-меню и выбирался какой-то пункт(в моем случае на дрифт сервере нужно нажимать альт, затем выбирать нужный пункт, а мне нужно чтобы все автоматически происходило). Извиняюсь, если написал бред :crazy:
Вот по фасту написал,не знаю что там с опкодом 0B49,на BHwiki написано что выделяет строку,поэтому поставил что бы после этого нажимало enter. Если оно выделяет и само нажимает enter,то удали последние строки с set_virtual_key 13 down true / set_virtual_key 13 down false . Тестани вообщем,не уверен что будет работать,но вот:
Код:
{$CLEO}
0000: NOP

repeat
wait 0
until SAMP.Available()

repeat
wait 0
:g
if
0AB0: key_pressed 49 // Если нажата клавиша "1"
then
      
    if or
  0B21:     samp is_chat_opened // Если открыт чат
  0B4C:  samp is_dialog_active -1 // Если открыт диалог
  then jump @g // Тогда прыгаем к метке @g
  else // Но если нихуя не открыто и всё хорошо,тогда идём дальше
 
repeat
   wait 0
   until 0AB0: key_pressed 49 // Тогда проверяем,отжата ли она.Когда клавиша будет отжата скрипт продолжит работу
  wait 100
  0C72: set_virtual_key 18 down true // Нажимаем alt
  wait 50
  0C72: set_virtual_key 18 down false // Отжимаем alt
     if
      0B4C:  samp is_dialog_active -1 // Если активен любой диалог
      then
      0B49: samp set_current_dialog_list_item 1@ // в 1@ впиши НОМЕР СТРОКИ ДИАЛОГА // Выделяем нужную строку
        wait 50
       0C72: set_virtual_key 13 down true // Нажимаем enter
        wait 50
       0C72: set_virtual_key 13 down false // Отжимаем enter
end
end
end
until false
 

hnnssy

Известный
Друг
2,684
2,748
Вот по фасту написал,не знаю что там с опкодом 0B49,на BHwiki написано что выделяет строку,поэтому поставил что бы после этого нажимало enter. Если оно выделяет и само нажимает enter,то удали последние строки с set_virtual_key 13 down true / set_virtual_key 13 down false . Тестани вообщем,не уверен что будет работать,но вот:
Код:
{$CLEO}
0000: NOP

repeat
wait 0
until SAMP.Available()

repeat
wait 0
:g
if
0AB0: key_pressed 49 // Если нажата клавиша "1"
then
     
    if or
  0B21:     samp is_chat_opened // Если открыт чат
  0B4C:  samp is_dialog_active -1 // Если открыт диалог
  then jump @g // Тогда прыгаем к метке @g
  else // Но если нихуя не открыто и всё хорошо,тогда идём дальше

repeat
   wait 0
   until 0AB0: key_pressed 49 // Тогда проверяем,отжата ли она.Когда клавиша будет отжата скрипт продолжит работу
  wait 100
  0C72: set_virtual_key 18 down true // Нажимаем alt
  wait 50
  0C72: set_virtual_key 18 down false // Отжимаем alt
     if
      0B4C:  samp is_dialog_active -1 // Если активен любой диалог
      then
      0B49: samp set_current_dialog_list_item 1@ // в 1@ впиши НОМЕР СТРОКИ ДИАЛОГА // Выделяем нужную строку
        wait 50
       0C72: set_virtual_key 13 down true // Нажимаем enter
        wait 50
       0C72: set_virtual_key 13 down false // Отжимаем enter
end
end
end
until false
Вместо нажатия enter можно просто закрыть диалог 1 кнопкой.
0B47: samp close_current_dialog_with_button 1
 
  • Нравится
Реакции: Lightkiller

:notCoder:

Новичок
19
0
Вот по фасту написал,не знаю что там с опкодом 0B49,на BHwiki написано что выделяет строку,поэтому поставил что бы после этого нажимало enter. Если оно выделяет и само нажимает enter,то удали последние строки с set_virtual_key 13 down true / set_virtual_key 13 down false . Тестани вообщем,не уверен что будет работать,но вот:
Код:
{$CLEO}
0000: NOP

repeat
wait 0
until SAMP.Available()

repeat
wait 0
:g
if
0AB0: key_pressed 49 // Если нажата клавиша "1"
then
    
    if or
  0B21:     samp is_chat_opened // Если открыт чат
  0B4C:  samp is_dialog_active -1 // Если открыт диалог
  then jump @g // Тогда прыгаем к метке @g
  else // Но если нихуя не открыто и всё хорошо,тогда идём дальше

repeat
   wait 0
   until 0AB0: key_pressed 49 // Тогда проверяем,отжата ли она.Когда клавиша будет отжата скрипт продолжит работу
  wait 100
  0C72: set_virtual_key 18 down true // Нажимаем alt
  wait 50
  0C72: set_virtual_key 18 down false // Отжимаем alt
     if
      0B4C:  samp is_dialog_active -1 // Если активен любой диалог
      then
      0B49: samp set_current_dialog_list_item 1@ // в 1@ впиши НОМЕР СТРОКИ ДИАЛОГА // Выделяем нужную строку
        wait 50
       0C72: set_virtual_key 13 down true // Нажимаем enter
        wait 50
       0C72: set_virtual_key 13 down false // Отжимаем enter
end
end
end
until false
Спасибо. Крч, затестил и вот, что получается: когда открыт чат/диалог, и я нажимаю клавишу 1 - игра намертво зависает. И еще, "0B49: samp set_current_dialog_list_item 1@ // в 1@ впиши НОМЕР СТРОКИ ДИАЛОГА // Выделяем нужную строку" что тут именно надо вписать? Номер строки диалога? Как его узнать?:в Да-да, я нуб
 
Последнее редактирование:

Forus

Известный
54
12
Честно говоря,я с кнопками никогда не работал.Писал по мануалу от дабстепа,мб что-то упустил.
Вот немного подправил с меткой и добавил от prokhorov'a_,может теперь будет работать :
Код:
repeat
wait 0
until SAMP.Available()

repeat
wait 0

if
0AB0: key_pressed 49 // Åñëè íàæàòà êëàâèøà "1"
then
   0B21:     samp is_chat_opened
   0B4C:  samp is_dialog_active -1
    jf @g
    :g
   repeat
   wait 0
   until 0AB0: key_pressed 49 // Òîãäà ïðîâåðÿåì,îòæàòà ëè îíà.Êîãäà êëàâèøà îòîæì¸òñÿ ñêðèïò ïðîäîëæèò ðàáîòó
  wait 100
  0C72: set_virtual_key 18 down true // íàæèìàåì alt
  wait 50
  0C72: set_virtual_key 18 down false // îòæèìàåì alt
     if
      0B4C:  samp is_dialog_active -1 // Åñëè ëþáîé äèàëîã àêòèâåí
      then
      0B49: samp set_current_dialog_list_item 1@ // ÍÎÌÅÐ ÑÒÐÎÊÈ ÓÊÀÆÈ . // Òîãäà âûáèðàåì íóæíûé ýëåìåíò èç ñïèñêà
        wait 50  
0B47: samp close_current_dialog_with_button 1
end
end
until false
Номер строки - это собственно порядковый номер строки диалога.
Вот у тебя открыт диалог ,и там появляются пункты,например " Телепорты,Автомобили,Дмзоны " и т.п.Только в ряд.
Диалог:
Телепорты - строка номер 1
Автомобили - строка номер 2
Тёлки - строка номер 3
Бар - строка номер 4
И вот тебе нужно что бы автоматом выбирало " Тёлки ",ставишь вместо 1@ цифру 3
0B49: samp set_current_dialog_list_item 3
Если и это не будет работать,тогда в кнопке проблема а мне разбираться в падлу.

Вот через команду :
Код:
{$CLEO}
0000: NOP

repeat
wait 0
until SAMP.Available()
0B34: samp register_client_command "w" to_label @w

repeat
wait 0

if
0@ == true
then
    if
   0B4C:  samp is_dialog_active -1
    then
     0@ = false
     chatmsg "Закрой диалог" 0xFFFF
  wait 100
  0C72: set_virtual_key 18 down true // íàæèìàåì alt
  wait 50
  0C72: set_virtual_key 18 down false // îòæèìàåì alt
     if
      0B4C:  samp is_dialog_active -1 // Åñëè ëþáîé äèàëîã àêòèâåí
      then
      0B49: samp set_current_dialog_list_item 1@ // ÍÎÌÅÐ ÑÒÐÎÊÈ ÓÊÀÆÈ . // Òîãäà âûáèðàåì íóæíûé ýëåìåíò èç ñïèñêà
      wait 100
      0B47: samp close_current_dialog_with_button true
      0@ == false
end
end
end
until false

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

hnnssy

Известный
Друг
2,684
2,748
Ну например написал /gip 178.23.45.456 и оно показало страну проживания данного IP. Обычно приходится открывать 2ip и смотреть, но ведь можно сделать удобнее.
Отправляешь запрос на 2ip просто и читаешь ответ.
XML: http://api.2ip.com.ua/geo.xml?ip=8.8.8.8
JSON: http://api.2ip.com.ua/geo.json?ip=8.8.8.8
Вместо 8.8.8.8 нужный IP.