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

DarkP1xel

Сила воли наше всё.
BH Team
3,637
5,024
Табуляцию научись использовать, а то так и будешь писать не правильно.

Вместо - - - нужно написать значение типа float и никак иначе.
 

RedBoxWhite

Известный
337
27
Табуляцию научись использовать, а то так и будешь писать не правильно.

Вместо - - - нужно написать значение типа float и никак иначе.
Лол, координаты я потом поставлю. там нет сейчас координат, я тестил с координатами, но крашило там где проверка на ган)
 

01EG

Известный
Проверенный
639
364
ну ты сам ответил на свой вопрос, в логе чата сампа скопируй эту строку и вставь со всеми символами
может там "Материалов: {FFFFFF}10000/10000"
1eb8820ba4337cafa44ed7ef3d7874b9.png

Британские ученный иследовали, что цвет строки - {00db00} (через фотошоп). Почему через фотошоп ?
Ну, бля буду, в чатлоге именно строку с материалами не отображало ее цвет. По-этому я сразу не взял оттуда.
Сокращу проверку до if 0C18: 5@ = strstr string1 0@ string2 "{00db00}10000/10000"
Надеюсь сработает.
Что не так? На проверке, держит ли персонаж оружие крашит.
CLEO:
                if 0AB0: 80
                then
                while 0AB0: 80
                wait 0
                end
                Actor.StorePos($Player_Actor, 0@, 1@, 2@)
                Actor.PutAt($Player_Actor, - - -)
                wait 500
                Actor.PutAt($Player_Actor, - - -)
                if 02D8: Actor $PLAYER_ACTOR current_weapon == 24
                then
                Actor.PutAt($Player_Actor, - - -)
                end
                wait 500
                Actor.PutAt($Player_Actor, 0@, 1@, 2@)
Крашило, как вариант:
1) Ты проебал один end, у тебя 2 then и один цикл while = 3end
2) Даже, если бы стоял end, то после первой итерации скрипта, скрипт падает вниз, т.е. не было больше никаких опкодов и действий и все пиздец - краш.
3) Неправильная структура, скрипт идет одним потоком и постепенной проверкой, т.е. все end должны быть в конце, а у тебя как получилось, что ты после while закрывал цикл и проверка на оружие актера шла совсем, как другая, а если так и нужно было, то смысл скрипта ? Тебя бы тпшило на записанные кординаты, но у тебя кординаты записывались, только, если бы ты зажимал клавишу 80. Короче, опиши, как ты хочешь, чтоб работал скрипт. А пока он работает в таком состоянии.
CLEO:
{$CLEO}
0000:              
              
while true // :1
wait 0
Actor.StorePos($Player_Actor, 0@, 1@, 2@)
    if 0AB0: 49
    then
        while 0AB0: 49
        wait 0
        Actor.PutAt($Player_Actor, 0.0 0.0 20.0)
        wait 500
        Actor.PutAt($Player_Actor, 500.0 500.0 20.0)
            if 02D8: Actor $PLAYER_ACTOR current_weapon == 24
            then
            Actor.PutAt($Player_Actor, 1000.0 1000.0 1000.0)
            end
            Actor.PutAt($Player_Actor, 0@, 1@, 2@)
            wait 500
        end
    end
end  // jump @1
// можно заменить в том месте.
4) Вообще для многоуровневых конструкций, нужна практика. Наверное этот скрипт и был твоей практикой, но как делал я, я сначала писал интересующий меня код, а потом, если он работал на низкоуровневых конструкциях(лабелы, джампы), то я переводил его на высоуровневые.(циклы). Сейчас стараюсь почти всегда писать высокоуровневый код, но когда не получается, то использую метки и джампы, так что в этом нет ничего такого, главное, чтоб код работал, наверное.
 
Последнее редактирование модератором:

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,754
1eb8820ba4337cafa44ed7ef3d7874b9.png

Британские ученный иследовали, что цвет строки - {00db00} (через фотошоп). Почему через фотошоп ?
Ну, бля буду, в чатлоге именно строку с материалами не отображало ее цвет. По-этому я сразу не взял оттуда.
Сокращу проверку до if 0C18: 5@ = strstr string1 0@ string2 "{00db00}10000/10000"
Надеюсь сработает.

Крашило, как вариант:
1) Ты проебал один end, у тебя 2 then и один цикл while = 3end
2) Даже, если бы стоял end, то после первой итерации скрипта, скрипт падает вниз, т.е. не было больше никаких опкодов и действий и все пиздец - краш.
3) Неправильная структура, скрипт идет одним потоком и постепенной проверкой, т.е. все end должны быть в конце, а у тебя как получилось, что ты после while закрывал цикл и проверка на оружие актера шла совсем, как другая, а если так и нужно было, то смысл скрипта ? Тебя бы тпшило на записанные кординаты, но у тебя кординаты записывались, только, если бы ты зажимал клавишу 80. Короче, опиши, как ты хочешь, чтоб работал скрипт. А пока он работает в таком состоянии.
CLEO:
{$CLEO}
0000:             
             
while true // :1
wait 0
Actor.StorePos($Player_Actor, 0@, 1@, 2@)
    if 0AB0: 49
    then
        while 0AB0: 49
        wait 0
        Actor.PutAt($Player_Actor, 0.0 0.0 20.0)
        wait 500
        Actor.PutAt($Player_Actor, 500.0 500.0 20.0)
            if 02D8: Actor $PLAYER_ACTOR current_weapon == 24
            then
            Actor.PutAt($Player_Actor, 1000.0 1000.0 1000.0)
            end
            Actor.PutAt($Player_Actor, 0@, 1@, 2@)
            wait 500
        end
    end
end  // jump @1
// можно заменить в том месте.
4) Вообще для многоуровневых конструкций, нужна практика. Наверное этот скрипт и был твоей практикой, но как делал я, я сначала писал интересующий меня код, а потом, если он работал на низкоуровневых конструкциях(лабелы, джампы), то я переводил его на высоуровневые.(циклы). Сейчас стараюсь почти всегда писать высокоуровневый код, но когда не получается, то использую метки и джампы, так что в этом нет ничего такого, главное, чтоб код работал, наверное.
1) прям как только я увидел "через фотошоп", я сразу понял, что ты совсем еще нуб :(
видишь время какого цвета? у времени всегда основной текст, тот самый цвет, который в опкоде добавления сообщения в чат как параметр пишешь (-1 к примеру), тут не используется изменение цвета через {FFFFFF}, чат лог показывает полностью строку, но тут его нет, значит все сообщение основного цвета

2) я никогда не понимал людей, использующих "0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 21@ prefix_color_to 22@" для того, чтобы скрипт реагировал на сообщения, ЭТО НЕ НАДЁЖНО, в твоём случае самп так быстро добавляет сообщения в чат, что твой клео скрипт даже не успевает получить текст о материалах, ведь его успевает сдвинуть сообщение о состоянии склада, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭТОТ ОПКОД, он не для этого сделан, для того, чтобы скрипт всегда обрабатывал каждое сообщение, нужно ставить хук на получение сообщений, тогда скрипт будет всегда надёжным и никогда не пропустит сообщение
 
  • Нравится
Реакции: 01EG

RedBoxWhite

Известный
337
27
4) Вообще для многоуровневых конструкций, нужна практика. Наверное этот скрипт и был твоей практикой, но как делал я, я сначала писал интересующий меня код, а потом, если он работал на низкоуровневых конструкциях(лабелы, джампы), то я переводил его на высоуровневые.(циклы). Сейчас стараюсь почти всегда писать высокоуровневый код, но когда не получается, то использую метки и джампы, так что в этом нет ничего такого, главное, чтоб код работал, наверное.
Попробовал твой скрипт, но он в любом случае тпшит, есть оружие или нет и тпшит только на 1 координаты. Мне нужен скрипт, который сохраняет твои координаты (Actor.StorePos($Player_Actor, 0@, 1@, 2@)), потом телепортируется на 1 точку, потом 2-ую и ждёт появления в руках дигла (24 ID), после того как получит телепортируется на 3-ю точку, а после уже туда, где находился (Actor.PutAt($Player_Actor, 0@, 1@, 2@)).
 

hnnssy

Известный
Друг
2,684
2,768
Попробовал твой скрипт, но он в любом случае тпшит, есть оружие или нет и тпшит только на 1 координаты. Мне нужен скрипт, который сохраняет твои координаты (Actor.StorePos($Player_Actor, 0@, 1@, 2@)), потом телепортируется на 1 точку, потом 2-ую и ждёт появления в руках дигла (24 ID), после того как получит телепортируется на 3-ю точку, а после уже туда, где находился (Actor.PutAt($Player_Actor, 0@, 1@, 2@)).
CLEO:
{$CLEO}
0000:             
wait 2000 
          
while true // :1
wait 0
if 0ADC:   test_cheat "go"
jf continue
Actor.StorePos($Player_Actor, 0@, 1@, 2@
Actor.PutAt($Player_Actor 1.0 1.0 1.0)
wait 500
Actor.PutAt($Player_Actor 2.0 2.0 2.0)
repeat
    wait 0
until 02D8: Actor $PLAYER_ACTOR current_weapon == 24
Actor.PutAt($Player_Actor 3.0 3.0 3.0)
wait 500
Actor.PutAt($Player_Actor 0@ 1@ 2@)
end
 
  • Нравится
Реакции: RedBoxWhite

01EG

Известный
Проверенный
639
364
1) прям как только я увидел "через фотошоп", я сразу понял, что ты совсем еще нуб :(
видишь время какого цвета? у времени всегда основной текст, тот самый цвет, который в опкоде добавления сообщения в чат как параметр пишешь (-1 к примеру), тут не используется изменение цвета через {FFFFFF}, чат лог показывает полностью строку, но тут его нет, значит все сообщение основного цвета

2) я никогда не понимал людей, использующих "0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 21@ prefix_color_to 22@" для того, чтобы скрипт реагировал на сообщения, ЭТО НЕ НАДЁЖНО, в твоём случае самп так быстро добавляет сообщения в чат, что твой клео скрипт даже не успевает получить текст о материалах, ведь его успевает сдвинуть сообщение о состоянии склада, НИКОГДА НЕ ИСПОЛЬЗУЙТЕ ЭТОТ ОПКОД, он не для этого сделан, для того, чтобы скрипт всегда обрабатывал каждое сообщение, нужно ставить хук на получение сообщений, тогда скрипт будет всегда надёжным и никогда не пропустит сообщение
Я думал, что этот способ подходит, так как ищет нужный мне текст в чате, а оказывается, что он не успевает и нужно делать через хук. Изначально через хук не делал, так как много строк.
есть разница между
этим - if 0C18: 5@ = strstr string1 0@ string2 "10000/10000"
и этим - if 0C18: 5@ = strstr string1 0@ string2 "{FFFFFF}10000/10000" ?
 

hnnssy

Известный
Друг
2,684
2,768
Я думал, что этот способ подходит, так как ищет нужный мне текст в чате, а оказывается, что он не успевает и нужно делать через хук. Изначально через хук не делал, так как много строк.
есть разница между
этим - if 0C18: 5@ = strstr string1 0@ string2 "10000/10000"
и этим - if 0C18: 5@ = strstr string1 0@ string2 "{FFFFFF}10000/10000" ?
пиздец, есть
 
  • Нравится
Реакции: Thomas_Johnson и 01EG

RedBoxWhite

Известный
337
27
Собственно, забыл про 1 функцию в скрипте описать, а именно, чтобы после телепортации на точку, скрипт ждал сообщения в чате "asd" и после этого сообщения продолжил телепортацию. Попытался сделать по примеру одного скрипта, который построен только на чтении/сканирования чата, но в этом скрипте что-то не так. Help.
CLEO:
{$CLEO}
0000:            
wait 2000 

0AC8: 4@ = allocate_memory_size 256
         
while true // :1
wait 0
if 0ADC:   test_cheat "go"
jf continue
Actor.StorePos($Player_Actor, 0@, 1@, 2@
Actor.PutAt($Player_Actor 1.0 1.0 1.0)
wait 500
Actor.PutAt($Player_Actor 2.0 2.0 2.0)
repeat
    wait 0
until 02D8: Actor $PLAYER_ACTOR current_weapon == 24
Actor.PutAt($Player_Actor 3.0 3.0 3.0)
wait 500
while true
0B75: samp get_chat_string 99 text_to 4@ prefix_to 0 color_to 0 prefix_color_to 0
if 0C18: 0 = strstr string1 4@ string2 "asd" 
then
Actor.PutAt($Player_Actor, 123.0 321.0 111.0)
end
Actor.PutAt($Player_Actor 0@ 1@ 2@)
end
 

01EG

Известный
Проверенный
639
364
Как и ожидалось, не сработало, так ещё и крашнуло.
Вот самый простой и известный мне способ поиска текста в строке. Все работает, я проверил. Крашило потому что ты мне дал опкод в котором запись некоторых параметров происходила в "0". Я почему-то по глупости подумал, что так можно делать. Дальше думай сам как его применить.
CLEO:
{$CLEO}
0000:

repeat
wait 500
until 0afa:

:Find_Text
alloc 0@ 64
    while true
    wait 0
    0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 2@ prefix_color_to 3@
        if 0C18: 4@ = strstr string1 0@ string2 "Privet"
        then
        print "Text Find" 5000
        end
    end
 

RedBoxWhite

Известный
337
27
Вот самый простой и известный мне способ поиска текста в строке. Все работает, я проверил. Крашило потому что ты мне дал опкод в котором запись некоторых параметров происходила в "0". Я почему-то по глупости подумал, что так можно делать. Дальше думай сам как его применить.
CLEO:
{$CLEO}
0000:

repeat
wait 500
until 0afa:

:Find_Text
alloc 0@ 64
    while true
    wait 0
    0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 2@ prefix_color_to 3@
        if 0C18: 4@ = strstr string1 0@ string2 "Privet"
        then
        print "Text Find" 5000
        end
    end
О, сработало, но при телепорте на предпоследнюю точку персонаж фризиться. Сделал вот так:
CLEO:
Actor.PutAt($Player_Actor, 1989.85 -1162.53 20.84)
repeat
    wait 700
until 0afa:
alloc 4@ 64
while true
wait 0
0B75: samp get_chat_string 99 text_to 4@ prefix_to 5@ color_to 6@ prefix_color_to 7@
if 0C18: 8@ = strstr string1 4@ string2 "{FFFFFF}asd" 
then
Actor.PutAt($Player_Actor, 1987.35 -1168.53 20.46)
end
wait 0
end
repeat