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

хуесос)

Известный
263
64
Код:
while samp.Available()   //  Начало цикла, если САМП включен
wait 0              // Задежрка 0
if                       //
0AB0:   key_pressed 49   // Если нажата 1
then                     //
0050: gosub @talons  // Переход на @talons
end       // Конец if-а
end       // Конец while-а

:talons
wait 0                               //
0C72: set_virtual_key 18 down true   // Открыть лавку альтом
wait 0                               //
0C72: set_virtual_key 18 down false  //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 13 down true       //    Выбрать первый пункт интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 1000                               //Задержка открытия диалога
0B49: samp set_current_dialog_list_item 15      //Выбрать талоны
wait 0                          
0C72: set_virtual_key 13 down true       //    Открытие талонов интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 49 down true       //    нажатие 1 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 49 down false      //
wait 0                           
0C72: set_virtual_key 48 down true       //    нажатие 0 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 48 down false      //
wait 0
0C72: set_virtual_key 16 down true            //
0C72: set_virtual_key 191 down true           //
wait 0                                        // Ввод запятой
0C72: set_virtual_key 191 down false          //
0C72: set_virtual_key 16 down  false          //
wait 0
0C72: set_virtual_key 52 down true       //    нажатие 4 при вводе цены
wait 0                                   //
0C72: set_virtual_key 52 down false      //
for 1@ = 1 to 4                                 //
wait 0                                          //
0C72: set_virtual_key 48 down true              //   Цикл for для ввода 0ей в цене
wait 0                                          //
0C72: set_virtual_key 48 down false             //
end                                             //
wait 0                                 //     
0C72: set_virtual_key 13 down true     //
wait 0                                 // Интер для подтверждения
0C72: set_virtual_key 13 down false    //
wait 0                                 //
return                          //Конец gosub
Надеюсь, что ты знаешь как выглядит механика лавок на Аризоне)

{$INCLUDE SF} написал
На сколько я знаю, в gosub не читает задержку. И поэтому сервер не успевает все это сделает

Как сделать так что бы в переменной 3@ были деньги? У меня получается так, что я ввожу команду и пишет Игрок: Вася Пупкин[228] | деньки: 0$, если даже у него на руках 1 бакс или больше.

CLEO:
{$CLEO}
0000:
 
0B34: samp register_client_command "money" to_label @3

:1
0001: wait 0 ms 
0AFA:  is_samp_available 
004D: jump_if_false @1
8AF7:   not samp 9@ = get_base 
004D: jump_if_false @1 

:2
0001: wait 0 ms 
0A8E: 0@ = 0 + 0  
0A8E: 0@ = 0@ + 1  
8039:   not  0@ == 1001 
004D: jump_if_false @2
0B23:  samp is_player_connected 0@ 

:3
0001: wait 0 ms 
0B20: samp 1@ = actor_handle_by_samp_player_id 0@ 
0B35: samp 10@ = get_last_command_params 
0AD4: 7@ = scan_string 10@ format "%d" 0@ 
010B: 3@ = player 1@ money 
0B36: samp 2@ = get_player_nickname 0@ 
0AF8: samp add_message_to_chat "Игрок: %s[%d] | деньки: %i$" color 0xffffffff 2@ 0@ 3@ 
0B43: samp cmd_ret
Этот опкод работает только вы сингле
 

AXE_CAMERON

Участник
66
0
На сколько я знаю, в gosub не читает задержку. И поэтому сервер не успевает все это сделает


Этот опкод работает только вы сингле
Не робит и без gosub и с задержкой в 10 сек, можно эмулировать прокрутку колеса или нажатие ЛКМ на определенном участке экрана хотя бы?
 

hnnssy

Известный
Друг
2,684
2,762
Не робит и без gosub и с задержкой в 10 сек, можно эмулировать прокрутку колеса или нажатие ЛКМ на определенном участке экрана хотя бы?
тебе дали опкод для выбора пункта диалога, зачем ты спишь с эмуляцией клавиш?
 

AXE_CAMERON

Участник
66
0
Код:
while samp.Available()   //  Начало цикла, если САМП включен
wait 0              // Задежрка 0  
if                       //
0AB0:   key_pressed 49   // Если нажата 1
then                     //
0050: gosub @talons  // Переход на @talons
end       // Конец if-а
end       // Конец while-а

:talons
wait 0                               //
0C72: set_virtual_key 18 down true   // Открыть лавку альтом
wait 0                               //
0C72: set_virtual_key 18 down false  //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 13 down true       //    Выбрать первый пункт интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 1000                               //Задержка открытия диалога
0B49: samp set_current_dialog_list_item 15      //Выбрать талоны
wait 0                            
0C72: set_virtual_key 13 down true       //    Открытие талонов интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 49 down true       //    нажатие 1 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 49 down false      //
wait 0                             
0C72: set_virtual_key 48 down true       //    нажатие 0 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 48 down false      //
wait 0
0C72: set_virtual_key 16 down true            //
0C72: set_virtual_key 191 down true           //
wait 0                                        // Ввод запятой
0C72: set_virtual_key 191 down false          //
0C72: set_virtual_key 16 down  false          //
wait 0
0C72: set_virtual_key 52 down true       //    нажатие 4 при вводе цены
wait 0                                   //
0C72: set_virtual_key 52 down false      //
for 1@ = 1 to 4                                 //
wait 0                                          //
0C72: set_virtual_key 48 down true              //   Цикл for для ввода 0ей в цене
wait 0                                          //
0C72: set_virtual_key 48 down false             //
end                                             //
wait 0                                 //       
0C72: set_virtual_key 13 down true     //
wait 0                                 // Интер для подтверждения
0C72: set_virtual_key 13 down false    //
wait 0                                 //
return                          //Конец gosub
покажи код с ним
 

astap_

Известный
Всефорумный модератор
626
601
Код:
while samp.Available()   //  Начало цикла, если САМП включен
wait 0              // Задежрка 0
if                       //
0AB0:   key_pressed 49   // Если нажата 1
then                     //
0050: gosub @talons  // Переход на @talons
end       // Конец if-а
end       // Конец while-а

:talons
wait 0                               //
0C72: set_virtual_key 18 down true   // Открыть лавку альтом
wait 0                               //
0C72: set_virtual_key 18 down false  //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 13 down true       //    Выбрать первый пункт интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 1000                               //Задержка открытия диалога
0B49: samp set_current_dialog_list_item 15      //Выбрать талоны
wait 0                          
0C72: set_virtual_key 13 down true       //    Открытие талонов интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 49 down true       //    нажатие 1 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 49 down false      //
wait 0                           
0C72: set_virtual_key 48 down true       //    нажатие 0 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 48 down false      //
wait 0
0C72: set_virtual_key 16 down true            //
0C72: set_virtual_key 191 down true           //
wait 0                                        // Ввод запятой
0C72: set_virtual_key 191 down false          //
0C72: set_virtual_key 16 down  false          //
wait 0
0C72: set_virtual_key 52 down true       //    нажатие 4 при вводе цены
wait 0                                   //
0C72: set_virtual_key 52 down false      //
for 1@ = 1 to 4                                 //
wait 0                                          //
0C72: set_virtual_key 48 down true              //   Цикл for для ввода 0ей в цене
wait 0                                          //
0C72: set_virtual_key 48 down false             //
end                                             //
wait 0                                 //     
0C72: set_virtual_key 13 down true     //
wait 0                                 // Интер для подтверждения
0C72: set_virtual_key 13 down false    //
wait 0                                 //
return                          //Конец gosub
в gosub нельзя использовать задержки и циклы, да и вообще тут нет необходимости в нём, зачем влепил? непонятно.
для работы с диалогами есть опкод 0BC9, очень удобно, тебе понравится, ведь больше не нужно использовать 5 строк для того чтобы ввести запятую.

подробно написано про него здесь:
https://blast.hk/wiki/opcodes:0bc9
CLEO:
0BC9: samp send_dialog_response dialog ID: 0@ button 1@ listitem 2@ input ""
 
  • Нравится
Реакции: AXE_CAMERON

Kristyan

Известный
165
16
Код:
while samp.Available()   //  Начало цикла, если САМП включен
wait 0              // Задежрка 0 
if                       //
0AB0:   key_pressed 49   // Если нажата 1
then                     //
0050: gosub @talons  // Переход на @talons
end       // Конец if-а
end       // Конец while-а

:talons
wait 0                               //
0C72: set_virtual_key 18 down true   // Открыть лавку альтом
wait 0                               //
0C72: set_virtual_key 18 down false  //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 13 down true       //    Выбрать первый пункт интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 1000                               //Задержка открытия диалога
0B49: samp set_current_dialog_list_item 15      //Выбрать талоны
wait 0                           
0C72: set_virtual_key 13 down true       //    Открытие талонов интером
wait 0                                   //
0C72: set_virtual_key 13 down false      //
wait 200                               //Задержка открытия диалога
0C72: set_virtual_key 49 down true       //    нажатие 1 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 49 down false      //
wait 0                            
0C72: set_virtual_key 48 down true       //    нажатие 0 при вводе кол-ва
wait 0                                   //
0C72: set_virtual_key 48 down false      //
wait 0
0C72: set_virtual_key 16 down true            //
0C72: set_virtual_key 191 down true           //
wait 0                                        // Ввод запятой
0C72: set_virtual_key 191 down false          //
0C72: set_virtual_key 16 down  false          //
wait 0
0C72: set_virtual_key 52 down true       //    нажатие 4 при вводе цены
wait 0                                   //
0C72: set_virtual_key 52 down false      //
for 1@ = 1 to 4                                 //
wait 0                                          //
0C72: set_virtual_key 48 down true              //   Цикл for для ввода 0ей в цене
wait 0                                          //
0C72: set_virtual_key 48 down false             //
end                                             //
wait 0                                 //      
0C72: set_virtual_key 13 down true     //
wait 0                                 // Интер для подтверждения
0C72: set_virtual_key 13 down false    //
wait 0                                 //
return                          //Конец gosub
держи
 

Вложения

  • tutorials_-_local_dialogs__BlastHack__DEV_WIKI.pdf
    256 KB · Просмотры: 11
  • Нравится
Реакции: AXE_CAMERON

The Spark

Известный
656
687
CLEO:
{$CLEO}
0000:
thread 'astap'

while not SAMP.Available()
    wait 0
end
alloc 0@ 256
0AD3: 0@ = format "~w~22~y~:~w~47" // твоя строка находится в переменной 0@

while true
    wait 0
    if 0ab0: 49 // pressed 1
    then
        repeat
            wait 0
        until 8ab0: 49
        0AC7: 3@ = var 2@ offset
        0AC7: 4@ = var 1@ offset
        0AA5: call 0x8220AD num_params 4 pop 4 params | outcoming: 3@ 4@ | incoming: "~w~%i~y~:~w~%i" 0@ // 4@ - minutes; 3@ - hours; 0@ - string
        alloc 4@ 256
        0AD3: 4@ = format "%i:%i" 1@ 2@
        chatmsg 4@ -1
        free 4@
    end
end
Вот что получилось из твоего кода(работает):
CLEO:
{$CLEO}
0000:
thread 'astap'

while not SAMP.Available()
    wait 0
end
0b34: samp "Rel" @rel
11@ = Render.CreateFont("Arial", 18, 5)
alloc 0@ 228
alloc 5@ 228
while true
    wait 0
    if 0ab0: 49 // pressed 1
    then    
        0C5A: samp textdraw 0 get_string_to 0@
        0AC7: 3@ = var 2@ offset
        0AC7: 4@ = var 1@ offset    
        0AA5: call 0x8220AD num_params 4 pop 4 params | outcoming: 3@ 4@ | incoming: "~w~%i~y~:~w~%i" 0@ // 4@ - minutes; 3@ - hours; 0@ - string    
        0AD3: 5@ = format "%i:%i" 1@ 2@
        Render.DrawText(11@, 5@, 400, 400, 0xFFFFFFFF) 
    end
end

:rel
end_thread
0A92: create_custom_thread "1.cs"
Samp.CmdRet()
Захотел я вставить другое туда:
CLEO:
{$CLEO}
0000:
thread 'astap'

while not SAMP.Available()
    wait 0
end
0b34: samp "Rel" @rel
11@ = Render.CreateFont("Arial", 18, 5)
alloc 0@ 228
alloc 10@ 228
while true
    wait 0
    if 0ab0: 49 // pressed 1
    then     
        0C5A: samp textdraw 2048 get_string_to 0@     
        0AC7: 3@ = var 2@ offset
        0AC7: 4@ = var 1@ offset
        0AC7: 6@ = var 5@ offset            
        0AA5: call 0x8220AD num_params 4 pop 4 params | outcoming: 3@ 4@ 6@ | incoming: "~w~Lvl: ~y~%i ~w~Exp: ~y~%i~w~/~y~%i" 0@    
        0AD3: 10@ = format "%i %i %i" 2@ 1@ 5@
        Render.DrawText(11@, 10@, 500, 400, 0xFFFFFFFF) 
    end
end

:rel
end_thread
0A92: create_custom_thread "1.cs"
Samp.CmdRet()
И ничего, я прост тупой. Help me родной
 

astap_

Известный
Всефорумный модератор
626
601
Вот что получилось из твоего кода(работает):
CLEO:
{$CLEO}
0000:
thread 'astap'

while not SAMP.Available()
    wait 0
end
0b34: samp "Rel" @rel
11@ = Render.CreateFont("Arial", 18, 5)
alloc 0@ 228
alloc 5@ 228
while true
    wait 0
    if 0ab0: 49 // pressed 1
    then 
        0C5A: samp textdraw 0 get_string_to 0@
        0AC7: 3@ = var 2@ offset
        0AC7: 4@ = var 1@ offset 
        0AA5: call 0x8220AD num_params 4 pop 4 params | outcoming: 3@ 4@ | incoming: "~w~%i~y~:~w~%i" 0@ // 4@ - minutes; 3@ - hours; 0@ - string 
        0AD3: 5@ = format "%i:%i" 1@ 2@
        Render.DrawText(11@, 5@, 400, 400, 0xFFFFFFFF)
    end
end

:rel
end_thread
0A92: create_custom_thread "1.cs"
Samp.CmdRet()
Захотел я вставить другое туда:
CLEO:
{$CLEO}
0000:
thread 'astap'

while not SAMP.Available()
    wait 0
end
0b34: samp "Rel" @rel
11@ = Render.CreateFont("Arial", 18, 5)
alloc 0@ 228
alloc 10@ 228
while true
    wait 0
    if 0ab0: 49 // pressed 1
    then  
        0C5A: samp textdraw 2048 get_string_to 0@  
        0AC7: 3@ = var 2@ offset
        0AC7: 4@ = var 1@ offset
        0AC7: 6@ = var 5@ offset         
        0AA5: call 0x8220AD num_params 4 pop 4 params | outcoming: 3@ 4@ 6@ | incoming: "~w~Lvl: ~y~%i ~w~Exp: ~y~%i~w~/~y~%i" 0@ 
        0AD3: 10@ = format "%i %i %i" 2@ 1@ 5@
        Render.DrawText(11@, 10@, 500, 400, 0xFFFFFFFF)
    end
end

:rel
end_thread
0A92: create_custom_thread "1.cs"
Samp.CmdRet()
И ничего, я прост тупой. Help me родной
20 строка, поменяй num_params 4 pop 4 на num_params 5 pop 5
и память выделяй/освобождай в цикле, а не перед ним
 
Последнее редактирование:

Harryss

Участник
233
26
Каким образом можно добавлять значение к каждому написанному сообщению в чат?
На подобии хука onSendChat в Lua можно что-нибудь сконструировать в Cleo? Для автоакцента.
 

хуесос)

Известный
263
64
Каким образом можно добавлять значение к каждому написанному сообщению в чат?
На подобии хука onSendChat в Lua можно что-нибудь сконструировать в Cleo? Для автоакцента.
Ну попробуй так.
CLEO:
alloc 1@ 154
0B77: samp get_chat_input_text_to 1@
0af9: "[Сын шлюхи]: %s" 1@
free 1@
 

Svyatogor2007

Новичок
5
0
Всех приветствую.
Возник вопрос по опкоду 0518:, есть ли возможность как-то увеличить лимит прайса? Суть в том, что если поставить стоимость дома больше $300 тыс, то сам по себе пикап работает нормально, но цена дома над пикапом отображается коряво, точнее отображается какая-то левая цифра.
 

Kristyan

Известный
165
16
Неа. У сампа с этим кодом начинаются проблемы - на сервер зайти не может, постоянные рестарты и краши.
Каким боком? Это же опкод сампа, как он не может работать в сампе? Может ты не правильно используешь !?