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

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,472
Пытаюсь узнать заведен ли транспорт, но всегда выдаёт 0, что не так?

CLEO:
:1
wait 500
03C0: 0@ = actor $PLAYER_ACTOR car
0A97: 1@ = car 0@ struct
1@ += 0x428
0A8D: 2@ = read_memory 1@ size 1 virtual_protect 1
if
2@ == 16
jf @2
wait 500
say "1"
goto @3

:2
wait 500
say "0"
goto @3
CLEO:
0B10: 3@ = 2@ AND 16
if 3@ == 16
then
    // Engine on
end

CLEO:
if 0ABE:   vehicle 0@ engine_on
then
    // Engine on
end
 
  • Нравится
Реакции: ShadowBroker

Сэнд

Известный
Проверенный
435
213
У меня еще вопрос :D
Почему, если поставить этот опкод, как условие, скрипт перестает работать?
CLEO:
0AD2: 3@ = player $PLAYER_CHAR targeted_actor
CLEO:
{$CLEO .cs}
while true
wait 0
    if 0AD2: 0@ = player $PLAYER_CHAR targeted_actor
    then
        if 0B2B: samp 1@ = get_player_id_by_actor_handle 0@
        then
             // сюда все что хочешь с ним делать
        end
    end
end
 

4el0ve4ik

Известный
Всефорумный модератор
1,561
1,379
CLEO:
{$CLEO .cs}
while true
wait 0
    if 0AD2: 0@ = player $PLAYER_CHAR targeted_actor
    then
        if 0B2B: samp 1@ = get_player_id_by_actor_handle 0@
        then
             // сюда все что хочешь с ним делать
        end
    end
end

Попробуй так, без if, if не обязателен
CLEO:
0AD2:
while true
wait 0
if 0AFA: is_samp_available
then
1@ = player 0@ targeted_actor //IF and SET
0B2B: samp 2@ = get_player_id_by_actor_handle 1@
// все что хочешь
end
проверку на загруженность поставил потому что привык, учился по видосам DarkP1xel'a и продолжаю учиться :D
 

DarkExorcist

Новичок
77
3
Попробуй так, без if, if не обязателен
CLEO:
while true
wait 0
if 0AFA: is_samp_available
then
0AD2: 1@ = player 0@ targeted_actor //IF and SET
0B2B: samp 2@ = get_player_id_by_actor_handle 1@
// все что хочешь
end
end
проверку на загруженность поставил потому что привык, учился по видосам DarkP1xel'a и продолжаю учиться :D
Проверку на загруженность лучше мутить вне цикла, нет надобности проверять загружен ли самп бесконечно, да и к тому же, ему надо чтобы код выполнялся, когда он в кого-то целится, а так многое будет выполнятся, даже если под прицелом никого не будет. Мало ли что может случится из-за этого
 
Последнее редактирование:

4el0ve4ik

Известный
Всефорумный модератор
1,561
1,379
Проверку на загруженность лучше мутить вне цикла, нет надобности проверять загружен ли самп бесконечно, да и к тому же, ему надо чтобы код выполнялся, когда он в кого-то целится, а так многое будет выполнятся, даже если под прицелом никого не будет. Мало ли что может случится из-за этого
я лично с этой херней замутил стату, у меня выполняеться только когда кто то под прицелом, если бы я этим не пользовался то и не отечал бы и потом проверку можно писать и без if, этот префикс ставиться для удобства, и ничего выполняться не будет, поскольку коду нужно пройти часть с прицеливанием, перескакивать он не будет.
 

DarkP1xel

Ухожу в армию... Вернусь через год.
BH Team
3,637
5,060
В высокоуровневых конструкциях без if ты не обойдёшься.
 

4el0ve4ik

Известный
Всефорумный модератор
1,561
1,379
Такой вопросик, как можно в 0C48: samp textdraw 420 create "%d" pos 200.0 400.0 записать свое значение? чето у меня нифига не получаеться, нужно что бы из переменной 9@ он записывал значение, ну или подскажите как это можно реализовать с помощью других опкодов
 
Последнее редактирование:

DarkB1t

Новичок
11
0
Всем спасибо, я решил проблему с опкодом. Он не работал из-за CLEO 4.3, я поставил CLEO 4.4 (доработка) и все заработало!
 

DarkP1xel

Ухожу в армию... Вернусь через год.
BH Team
3,637
5,060
Такой вопросик, как можно в 0C48: samp textdraw 420 create "%d" pos 200.0 400.0 записать свое значение? чето у меня нифига не получаеться, нужно что бы из переменной 9@ он записывал значение, ну или подскажите как это можно реализовать с помощью других опкодов
CLEO:
0AC8: 0@ = allocate_memory_size 32
0C11: memset destination 0@ value 0x0 size 32
0AD3: 0@ = _format "%d" {NUMBER}1337
0C48: samp textdraw 420 create 0@ pos 200.0 400.0
 

4el0ve4ik

Известный
Всефорумный модератор
1,561
1,379
крашить начало( и я опять не могу найти проеб
CLEO:
while true     
wait 0
0AFA: is_samp_available
            0AD2: 3@ = player 0@ targeted_actor //IF and SET
            0B2B: samp 7@ = get_player_id_by_actor_handle 3@
            0B36: samp 9@ = get_player_nickname 7@
            0AC8: 9@ = allocate_memory_size 32
            0C11: memset destination 9@ value 0x0 size 64
            0AD3: 9@ = _format "%s" 1337
            0C48: samp textdraw 420 create 9@ pos 200.0 400.0
            while 0AD2: 3@ = player 0@ targeted_actor
                wait 0
            end
        end
 

DarkP1xel

Ухожу в армию... Вернусь через год.
BH Team
3,637
5,060
1) Опкод 0AFA ничего не выполняет ибо стоит без проверки.
2) Получаешь данные игрока на которого не нацелен.
3) Используешь опкоды SA:MP'a до загрузки структур.
4) Выводишь число через %s, а не через %d .
5) Второй цикл вообще там нахуй не нужен.
6) После успешного завершения форматирования текста, выделенный участок памяти желательно освободить (0AC9) .
7) В 0@ - нет никакого Player'a . $PLAYER_CHAR скорее всего тебе понадобится. Хоть там в большинстве случаев будет 0, но всё же, так будет по стандартам.
8) Память нужно выделять до получения строки. Так как опкод возрата ника получает указатель, то выделять память не нужно.

И научись табуляцию использовать, бесит когда криво - косо пишут.
 

4el0ve4ik

Известный
Всефорумный модератор
1,561
1,379
5) Второй цикл вообще там нахуй не нужен.
Если без него то мне начинает флудить когда целюсь в кого то, там просто в чат кое то пишеться при его выполнении

4) Выводишь число через %s, а не через %d .
мне нужно вывести некоторые значения буквами, а некоторые числами, поэтому и %s а не %d.
остальное исправил
 

DarkP1xel

Ухожу в армию... Вернусь через год.
BH Team
3,637
5,060
Textdraw не лучший способ вывода для проверок. Используй log или 0ad1/0acd .
 

azdsfbzxv

Новичок
73
6
крашить начало( и я опять не могу найти проеб
CLEO:
while true   
wait 0
0AFA: is_samp_available
            0AD2: 3@ = player 0@ targeted_actor //IF and SET
            0B2B: samp 7@ = get_player_id_by_actor_handle 3@
            0B36: samp 9@ = get_player_nickname 7@
            0AC8: 9@ = allocate_memory_size 32
            0C11: memset destination 9@ value 0x0 size 64
            0AD3: 9@ = _format "%s" 1337
            0C48: samp textdraw 420 create 9@ pos 200.0 400.0
            while 0AD2: 3@ = player 0@ targeted_actor
                wait 0
            end
        end
1. Тебе надо что бы показывало ID игрока и ник?
2. Ник с _ или без.
3. Как ты хочешь что бы это выглядело? Над его головой или в какой то части экрана? Или в чат?