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

Firetheestle

Известный
20
0
Код:
{$CLEO .cs}
0000: NOP "Bot by Sontey for drp"
thread 'Wahter'
if 8AF7: get_samp_base_to 0@
then 0A93: end_custom_thread
end

repeat
wait 400
until 0AFA: is_samp_structures_available
wait 2000
0AF8: samp add_message_to_chat ">*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*<" color 0xFF66FFAA
0AF8: samp add_message_to_chat ">*| [CLEO] Шахтер удачно загружен.    |*<" color 0xFF66FFAA
0AF8: samp add_message_to_chat ">*| Автор: Filippov.Доработал: Sontey   |*<" color 0xFF66FFAA
0AF8: samp add_message_to_chat ">*|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||*<" color 0xFF66FFAA

repeat
wait 0
until Samp.Available()
0B34: samp register_client_command "wdrp" to_label @wdrp

while true
wait 0 
    if 10@ == 1
    then
        actor.StorePos($PLAYER_ACTOR,3@ 4@ 5@)
        0AB1: call @StoreClosestMarkerPos 0 X 7@ Y 8@ Z 9@ 
        0AB3: var 740 = 2
        wait 1000
        05D3: AS_actor $PLAYER_ACTOR goto_point 7@ 8@ 9@ mode 6 time 19000 ms
        wait 18000
        05D3: AS_actor $PLAYER_ACTOR goto_point 592.4914 859.3141 -42.9715 mode 6 time 10000 ms
        05D3: AS_actor $PLAYER_ACTOR goto_point 592.6129 853.9781 -43.0648 mode 6 time 4000 ms
        if
        00ED:   actor $PLAYER_ACTOR sphere 0 near_point 592.6129 853.9781 radius 1044.13 0.5 on_foot
        wait 8000
    end


:wdrp
0B12: 10@ = 10@ XOR 1
if 10@ == 1
then
0ACC: show_text_lowpriority "BOT miner ~g~Active" time 1500
else
10@ = 0
0AB3: var 740 = 0
0ACC: show_text_lowpriority "BOT miner ~r~Deactivated" time 1500
end
//0AB3: var 740 = 0
Samp.CmdRet()

:storeclosestmarkerpos
12@ = 9999.0
for 0@ = 0 to 31
     0085: 1@ = 0@
     1@ *= 160
     1@ += 0xC7DD58
     1@ += 48
     0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
     1@ += 4
     0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
     1@ += 4
     0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
     00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@  
     050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@
     if
         0025: 12@ > 8@
     then
         0087: 12@ = 8@
         0087: 9@ = 2@
         0087: 10@ = 3@
         0087: 11@ = 4@  
     end
end
0AB2: ret 3 9@ 10@ 11@
Приступлю к вопросу ;D
Сижу я исправляю код и вникаю в скриптинг на КЛЕО, но тут я увидел надпись 0AB3: var 740 = 2
и задумался зачем она? полез в опкоды нашел что означает 0AB3: и означает он var 0 = 10, но я все равно не понял зачем эта надпись, Поясните мне пожалуйста ;D
и второй вопрос в куске кода есть команды
Код:
05D3: AS_actor $PLAYER_ACTOR goto_point 592.4914 859.3141 -42.9715 mode 6 time 10000 ms
05D3: AS_actor $PLAYER_ACTOR goto_point 592.6129 853.9781 -43.0648 mode 6 time 4000 ms
и с ними большие проблемы:
1) бот не додобегает до координат и тпшится
2) сдает руду и куда-то бежит в направлении мышки, но потом поворачивается и бежит к чекпоинту сбора руды
Я надеюсь вы мне поможете ;D
 

itsLegend

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

Тпшится потому что время истекло. Засунь в цикл или поставь времени больше.
 

Firetheestle

Известный
20
0
0AB3 служит для присваивания значения глобальной переменной(переменная доступна из всех скриптов), можно использовать как обмен значениями между разными клео скриптами.

Тпшится потому что время истекло. Засунь в цикл или поставь времени больше.
я тут посидел подумал ;D посмотрел исходники могайки
и мне в голову пришел только этот цикл
Код:
if
10@ == 1
jf @1


:1
actor.StorePos($PLAYER_ACTOR,3@ 4@ 5@)
        0AB1: call @StoreClosestMarkerPos 0 X 7@ Y 8@ Z 9@  
        0AB3: var 740 = 2
        wait 1000
        goto @2
:2
if
05D3: AS_actor $PLAYER_ACTOR goto_point 7@ 8@ 9@ mode 6 time 19000 ms
jf @3
:3
if
05D3: AS_actor $PLAYER_ACTOR goto_point 592.4914 859.3141 -42.9715 mode 6  time 10000 ms
jf @4
:4
05D3: AS_actor $PLAYER_ACTOR goto_point 592.6129 853.9781 -43.0648 mode 6  time 4000 ms
jf @5
:5
if
00ED:   actor $PLAYER_ACTOR sphere 0 near_point 592.6129 853.9781 radius 1044.13 0.5 on_foot
jf @6
:6
if
10@ == 0
then 10@ = 0
else
jf @1
end
Не ругайтесь сильно ;D
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
jf - jump if false - выполняется только тогда, когда условие неверно.
Ты зачем его в каждый блок понатыкал?
 

Thomas_Johnson

Известный
Проверенный
183
21
я тут посидел подумал ;D посмотрел исходники могайки
и мне в голову пришел только этот цикл
Код:
if
10@ == 1
jf @1


:1
actor.StorePos($PLAYER_ACTOR,3@ 4@ 5@)
        0AB1: call @StoreClosestMarkerPos 0 X 7@ Y 8@ Z 9@
        0AB3: var 740 = 2
        wait 1000
        goto @2
:2
if
05D3: AS_actor $PLAYER_ACTOR goto_point 7@ 8@ 9@ mode 6 time 19000 ms
jf @3
:3
if
05D3: AS_actor $PLAYER_ACTOR goto_point 592.4914 859.3141 -42.9715 mode 6  time 10000 ms
jf @4
:4
05D3: AS_actor $PLAYER_ACTOR goto_point 592.6129 853.9781 -43.0648 mode 6  time 4000 ms
jf @5
:5
if
00ED:   actor $PLAYER_ACTOR sphere 0 near_point 592.6129 853.9781 radius 1044.13 0.5 on_foot
jf @6
:6
if
10@ == 0
then 10@ = 0
else
jf @1
end
Не ругайтесь сильно ;D
jf - jump if false
Твои проверки бессмысленны, т.к. код продолжает выполняться
Намного проще, на мой взгляд, вот так вот
Код:
while true
wait 0
if
//proverka
then
//code
end
end
 
  • Нравится
Реакции: itsLegend

Firetheestle

Известный
20
0
jf - jump if false
Твои проверки бессмысленны, т.к. код продолжает выполняться
Намного проще, на мой взгляд, вот так вот
Код:
while true
wait 0
if
//proverka
then
//code
end
end
типо этого выйдет?
Код:
while true
wait 0   
    if 10@ == 1
    then
        actor.StorePos($PLAYER_ACTOR,3@ 4@ 5@)
        0AB1: call @StoreClosestMarkerPos 0 X 7@ Y 8@ Z 9@   
        0AB3: var 740 = 2
        wait 1000
        05D3: AS_actor $PLAYER_ACTOR goto_point 7@ 8@ 9@ mode 6 time 19000 ms 
        05D3: AS_actor $PLAYER_ACTOR goto_point 592.4914 859.3141 -42.9715 mode 6 time 10000 ms
        05D3: AS_actor $PLAYER_ACTOR goto_point 592.6129 853.9781 -43.0648 mode 6 time 4000 ms
        00ED:   actor $PLAYER_ACTOR sphere 0 near_point 592.6129 853.9781 radius 1044.13 0.5 on_foot
    end
у меня прост всегда с циклами хуево D; в паскале так же было
 

Thomas_Johnson

Известный
Проверенный
183
21
типо этого выйдет?
Код:
while true
wait 0  
    if 10@ == 1
    then
        actor.StorePos($PLAYER_ACTOR,3@ 4@ 5@)
        0AB1: call @StoreClosestMarkerPos 0 X 7@ Y 8@ Z 9@  
        0AB3: var 740 = 2
        wait 1000
        05D3: AS_actor $PLAYER_ACTOR goto_point 7@ 8@ 9@ mode 6 time 19000 ms
        05D3: AS_actor $PLAYER_ACTOR goto_point 592.4914 859.3141 -42.9715 mode 6 time 10000 ms
        05D3: AS_actor $PLAYER_ACTOR goto_point 592.6129 853.9781 -43.0648 mode 6 time 4000 ms
        00ED:   actor $PLAYER_ACTOR sphere 0 near_point 592.6129 853.9781 radius 1044.13 0.5 on_foot
    end
у меня прост всегда с циклами хуево D; в паскале так же было
Забыл end закрывающий while true (бесконечный цикл). Я так понимаю это вырезок из кода, т.к. 10@ у тебя не обнуляется в коде и проверка опять же бессмысленна, нет метки StoreClosestMarkerPos
 

Firetheestle

Известный
20
0
Забыл end закрывающий while true (бесконечный цикл). Я так понимаю это вырезок из кода, т.к. 10@ у тебя не обнуляется в коде и проверка опять же бессмысленна, нет метки StoreClosestMarkerPos
Код:
:storeclosestmarkerpos
12@ = 9999.0
for 0@ = 0 to 31
     0085: 1@ = 0@
     1@ *= 160
     1@ += 0xC7DD58
     1@ += 48
     0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
     1@ += 4
     0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
     1@ += 4
     0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0 
     00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@   
     050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@
     if
         0025: 12@ > 8@
     then
         0087: 12@ = 8@
         0087: 9@ = 2@
         0087: 10@ = 3@
         0087: 11@ = 4@   
     end
end
0AB2: ret 3 9@ 10@ 11@
Про "10@ у тебя не обнуляется в коде и проверка опять же бессмысленна"
Можешь подробнее?
 

Thomas_Johnson

Известный
Проверенный
183
21
Код:
:storeclosestmarkerpos
12@ = 9999.0
for 0@ = 0 to 31
     0085: 1@ = 0@
     1@ *= 160
     1@ += 0xC7DD58
     1@ += 48
     0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0
     1@ += 4
     0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0
     1@ += 4
     0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0
     00A0: store_actor $PLAYER_ACTOR position_to 5@ 6@ 7@  
     050A: 8@ = distance_between_XYZ 2@ 3@ 4@ and_XYZ 5@ 6@ 7@
     if
         0025: 12@ > 8@
     then
         0087: 12@ = 8@
         0087: 9@ = 2@
         0087: 10@ = 3@
         0087: 11@ = 4@  
     end
end
0AB2: ret 3 9@ 10@ 11@
Про "10@ у тебя не обнуляется в коде и проверка опять же бессмысленна"
Можешь подробнее?
10@ у тебя все время 1, пока ты 0 ему не присвоишь, зачем проверять равен ли он одному, если ты заведомо знаешь, что он всегда 1
Код:
if 10@ == 1
then
 

Firetheestle

Известный
20
0
Можешь указать, где мне нужно приравнять 10@ к 0 в коде? мб тогда я пойму о чем ты пытаешься мне донести D;
 

Alex7227

Новичок
28
0
Помогите пожалуйста сделать диалог! Вот список диалога Пункт первый, второй, третий. И когда я выбираю например пункт первый то открывается другой диалог. Как на картинках!
Вот ссылка на картинки: Клик
Код:
{$CLEO}

const
    DIALOG_STYLE_LIST = 2
end

0000:

repeat
    wait 400
until 0AFA:  is_samp_available // Ожидаем инициализации структур SAMP'а

while true
    wait 0
        if 0AB0: key_pressed 121
        then
        0AC8: 0@ = allocate_memory_size 64 // Выделяем память под список элементов(кол-во текста должно быть не больше 64 символов(пробелы и переходы на новую строку тоже равны 1 символу))
        0ad3: format_stirng 0@ = "Первый пункт%cВторой пункт%cТретий пункт" 0xA 0xA // Создаем список, 0xA - означает переход на новую строку, а %c указывается в самой строке
        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 121
        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 0AF8: samp add_message_to_chat "Это первый пункт" color -1
            end

            if 3@ == 1 // Был выбран второй пункт
            then 0AF8: samp add_message_to_chat "Это второй пункт" color -1
            end

            if 3@ == 2 // Был выбран третий пункт
            then 0AF8: samp add_message_to_chat "Это третий пункт" color -1
            end
        else
        end
    end
end

Брал от сюда код http://blasthack.net/wiki/tutorials:local_dialogs
 
Последнее редактирование:

cover

Известный
Проверенный
245
268
Помогите пожалуйста сделать диалог! Вот список диалога Пункт первый, второй, третий. И когда я выбираю например пункт первый то открывается другой диалог. Как на картинках!
gta_sa+2015-01-01+12-41-45-893.jpg
gta_sa%202015-01-01%2012-51-10-552.jpg
Ты код то кидай, картинки не грузит.
 

Alex7227

Новичок
28
0
Ты код то кидай, картинки не грузит.
Вот код
Код:
{$CLEO}

const
    DIALOG_STYLE_LIST = 2
end

0000:

repeat
    wait 400
until 0AFA:  is_samp_available // Ожидаем инициализации структур SAMP'а

while true
    wait 0
        if 0AB0: key_pressed 121
        then
        0AC8: 0@ = allocate_memory_size 64 // Выделяем память под список элементов(кол-во текста должно быть не больше 64 символов(пробелы и переходы на новую строку тоже равны 1 символу))
        0ad3: format_stirng 0@ = "Первый пункт%cВторой пункт%cТретий пункт" 0xA 0xA // Создаем список, 0xA - означает переход на новую строку, а %c указывается в самой строке
        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 121
        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 0AF8: samp add_message_to_chat "Это первый пункт" color -1
            end

            if 3@ == 1 // Был выбран второй пункт
            then 0AF8: samp add_message_to_chat "Это второй пункт" color -1
            end

            if 3@ == 2 // Был выбран третий пункт
            then 0AF8: samp add_message_to_chat "Это третий пункт" color -1
            end
        else
        end
    end
end