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

Forus

Известный
54
12
Берешь переменную например 1@ и делаешь такую штуку

Код:
1@ +=1
if 1@ == 1
jf другой лбл
метка твоя
Дак смотри. По сути я понял тебя,но не понял как же всё-таки сделать .
У меня есть общая метка @Noname_151 которая вызывается при команде gbot ,и уже в этой меткe вызываются другие метки - @noname_11 ;@noname_561 и т.д.
Мне нужно что бы после выполнения @noname_11 при первом запуске скрипта далее что бы он игнорировался.
Как я понял можно вписать в конец метки - noname_11 1@ == 1
и в начало метки
Код:
if 1@ = 1
then
Игнорируем эту метку и идём дальше по скрипту(КАК ЭТО СДЕЛАТЬ?)
 

Woofing Giraffe

Активный
402
49
Код:
if 1@ = 1
then
Игнорируем эту метку и идём дальше по скрипту(КАК ЭТО СДЕЛАТЬ?)
Ну во первых, 1@ = 1 присваивает переменной 1@ значение 1. Сравнение это оператор "==". А вообще, для того чтобы выполнить действие только один раз, можно сделать что-то типо такого:
CLEO:
if not 20@ == 1
then
    // Тут вызов функции которая тебе нужна
    20@ = 1
end
И всё. При пером запуске она сработает, но далее не будет работать.
 
  • Нравится
Реакции: Forus

Forus

Известный
54
12
Ну во первых, 1@ = 1 присваивает переменной 1@ значение 1. Сравнение это оператор "==". А вообще, для того чтобы выполнить действие только один раз, можно сделать что-то типо такого:
CLEO:
if not 20@ == 1
then
    // Тут вызов функции которая тебе нужна
    20@ = 1
end
И всё. При пером запуске она сработает, но далее не будет работать.
Спасибо огромнейшее!
Ещё будет один вопросик..
Я хочу что бы когда цикл прошёл например 5 раз метка 20@ становилась равна 0,как это сделать?
По типу как грузчики на с-рп,через 15 кругов забирает зп и продолжает работу.
 

AWRage

Активный
642
141
Что здесь не так? При нажатии клавиш ALT + 1, в чат пишет команду /healme, остальные сочетания клавиш не работают.
Код:
{$CLEO}
0000:

repeat
wait 500
until 0AFA: is_samp_available

while true
wait 0
gosub @bind
end

:bind
if and
0AB0: key_pressed 18 // ALT
0AB0: key_pressed 49 // 1
then
0AF9: samp say_msg "/healme"
call @key 1 49
end
if and
0AB0: key_pressed 18
0AB0: key_pressed 50 // 2
then
0AF9: samp say_msg "/fontsize 0"
call @key 1 50
end
if and
0AB0: key_pressed 18
0AB0: key_pressed 51 // 3
then
0AF9: samp say_msg "/fontsize -3"
call @key 1 51
end
return

:key
while 0AB0: key_pressed 0@
wait 0
end
ret 0
 

Forus

Известный
54
12
Есть ли ф-ция резкой остановки скрипта?
Т.е. у меня активация/деактивация построена на присвоение чисел переменным(true/false).И получается когда я выключаю скрипт,присваивается false.Но что бы скрипт прекратил работу нужно ожидать окончание цикла.
Вот можно как-нибудь резко стопнуть не дожидаясь конца цикла?

----------------------------

Что здесь не так? При нажатии клавиш ALT + 1, в чат пишет команду /healme, остальные сочетания клавиш не работают.
Код:
{$CLEO}
0000:

repeat
wait 500
until 0AFA: is_samp_available

while true
wait 0
gosub @bind
end

:bind
if and
0AB0: key_pressed 18 // ALT
0AB0: key_pressed 49 // 1
then
0AF9: samp say_msg "/healme"
call @key 1 49
end
if and
0AB0: key_pressed 18
0AB0: key_pressed 50 // 2
then
0AF9: samp say_msg "/fontsize 0"
call @key 1 50
end
if and
0AB0: key_pressed 18
0AB0: key_pressed 51 // 3
then
0AF9: samp say_msg "/fontsize -3"
call @key 1 51
end
return

:key
while 0AB0: key_pressed 0@
wait 0
end
ret 0
Я конечно не спец,но попробуй вкинуть каждое сочетание клавиш в цикл.
 

AWRage

Активный
642
141
Есть ли ф-ция резкой остановки скрипта?
Т.е. у меня активация/деактивация построена на присвоение чисел переменным(true/false).И получается когда я выключаю скрипт,присваивается false.Но что бы скрипт прекратил работу нужно ожидать окончание цикла.
Вот можно как-нибудь резко стопнуть не дожидаясь конца цикла?

----------------------------


Я конечно не спец,но попробуй вкинуть каждое сочетание клавиш в цикл.
Не работает. Скорее всего, дело в том что /fontsize -3 и /fontsize 0 не серверные команды. Мб есть опкод, который в чат напишет эту команду?

попробуй зарегистрировать команду.
Код:
0B34: samp register_client_command "/off" to_label @off

[цикл]

:off
[твоя переменная] = false
0B43: samp cmd_ret
 
Последнее редактирование:

hnnssy

Известный
Друг
2,684
2,768
Что здесь не так? При нажатии клавиш ALT + 1, в чат пишет команду /healme, остальные сочетания клавиш не работают.
Код:
{$CLEO}
0000:

repeat
wait 500
until 0AFA: is_samp_available

while true
wait 0
gosub @bind
end

:bind
if and
0AB0: key_pressed 18 // ALT
0AB0: key_pressed 49 // 1
then
0AF9: samp say_msg "/healme"
call @key 1 49
end
if and
0AB0: key_pressed 18
0AB0: key_pressed 50 // 2
then
0AF9: samp say_msg "/fontsize 0"
call @key 1 50
end
if and
0AB0: key_pressed 18
0AB0: key_pressed 51 // 3
then
0AF9: samp say_msg "/fontsize -3"
call @key 1 51
end
return

:key
while 0AB0: key_pressed 0@
wait 0
end
ret 0
/fontsize - команда клиента, её нельзя вызвать отправкой в чат через 0af9.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Есть ли ф-ция резкой остановки скрипта?
Т.е. у меня активация/деактивация построена на присвоение чисел переменным(true/false).И получается когда я выключаю скрипт,присваивается false.Но что бы скрипт прекратил работу нужно ожидать окончание цикла.
Вот можно как-нибудь резко стопнуть не дожидаясь конца цикла?
continue - перезапустит цикл(начнет сначала)
break - "сломает" цикл(оборвет цикл. Если применить к основному циклу, то игра вылетит, если не будет другого похожего цикла).
 
  • Нравится
Реакции: Forus

zwhoz

Известный
106
11
Выбивает ошибку:
Невозможно выполнить переход к метке. Внутренная метка не найдена.
Проверьте ваши высокоуровневые конструкции. Некоторые из них не имеют закрывающего "end".

Код:
Код:
  {$CLEO}
const
    DIALOG_STYLE_LIST = 2
end
0000:
while true
    wait 0
    if 0AB0: key_pressed 122
        then
        0AC8: 0@ = allocate_memory_size 64
        0ad3: format_stirng 0@ = "0hp%cВторой пункт%cТретий пункт%cЧетвёртый пункт" 0xA 0xA 0xA
        0B3B: samp show_dialog id 17 caption "Третий диалог" text 0@ button_1 "Выбрать" button_2 "Закрыть" style DIALOG_STYLE_LIST
        0AC9: free_allocated_memory 0@
        while 0AB0: key_pressed 122 
        wait 20
    end
end
if 0B3C: samp is_dialog_responded id 17 button 1@ list_item 4@ input_text 0
    then
    0AF8: samp add_message_to_chat "Была нажата кнопка %d" color -1 params 1@
    if
        1@ == 1
        then
        0AF8: samp add_message_to_chat "А именно: Уря" color -1
        0AF8: samp add_message_to_chat "Элемент №%d" color -1 params 4@
        if 4@ == 0
            then 
            while true
            wait 0
            if 0AB0: key_pressed 123
                then
                0AC8: 0@ = allocate_memory_size 64
                0ad3: format_stirng 0@ = "0hp%c45hp%c100hp" 0xA 0xA
                0B3B: samp show_dialog id 17 caption "Health" text 0@ button_1 "Выбрать" button_2 "Закрыть" style DIALOG_STYLE_LIST
                0AC9: free_allocated_memory 0@
                while 0AB0: key_pressed 123 
                wait 20
            end
        end 
        if 0B3C: samp is_dialog_responded id 17 button 1@ list_item 3@ input_text 0
            then
            0AF8: samp add_message_to_chat "Была нажата кнопка %d" color -1 params 1@
            if
                1@ == 1
                then
                0AF8: samp add_message_to_chat "А именно: Уря" color -1
                0AF8: samp add_message_to_chat "Элемент №%d" color -1 params 3@
               
                if 3@ == 0
                    then Actor.Health($PLAYER_ACTOR) = 0
                end
               
                if 3@ == 1
                    then Actor.Health($PLAYER_ACTOR) = 45
                end
    
                if 3@ == 2
                    then Actor.Health($PLAYER_ACTOR) = 100
                end  
            end
        end   
    
        if 4@ == 1
            then 0AF8: samp add_message_to_chat "Это второй пункт" color -1
        end
    
        if 4@ == 2
            then 0AF8: samp add_message_to_chat "Это третий пункт" color -1
        end
                       
        if 4@ == 3
            then 0AF8: samp add_message_to_chat "Это четвёртый пункт" color -1
        end
    end  
end
Смотрел, вроде if столько же как end, прошу помочь.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
Ну если так, то у тебя не хватает два end'а.
А по другому, код будет работать не так, как ты задумал...
 
  • Нравится
Реакции: zwhoz

zwhoz

Известный
106
11
Ну если так, то у тебя не хватает два end'а.
А по другому, код будет работать не так, как ты задумал...
Можешь помочь, что я не так сделал, почему он не будет работать?
Действительно, при заходе начинает лагать. Как исправить ошибку?
 

Forus

Известный
54
12
continue - перезапустит цикл(начнет сначала)
break - "сломает" цикл(оборвет цикл. Если применить к основному циклу, то игра вылетит, если не будет другого похожего цикла).
Что бы использовать break нужно подключать какую-либо инклуду?Ибо в SB оно у меня даже жирным не выделяется,а в компиле пишет тип неизвестный .
break оборвёт любой активный цикл?
Т.е. если я например напишу
jf break @метка(в которой совершается цикл)
- не верно?
p.S В гугле толкового объяснения по break не нашёл..
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,469
CLEO:
while true
    wait 0
    if 0@ == 1
    then
        break
    end
end

while true
    wait 0
end
Как 0@ будет равен единице, то он перейдет к следующему циклу.