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

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Пытаюсь узнать заведен ли транспорт, но всегда выдаёт 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

Сэнд

Известный
Проверенный
436
212
У меня еще вопрос :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,548
1,339
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,548
1,339
Проверку на загруженность лучше мутить вне цикла, нет надобности проверять загружен ли самп бесконечно, да и к тому же, ему надо чтобы код выполнялся, когда он в кого-то целится, а так многое будет выполнятся, даже если под прицелом никого не будет. Мало ли что может случится из-за этого
я лично с этой херней замутил стату, у меня выполняеться только когда кто то под прицелом, если бы я этим не пользовался то и не отечал бы и потом проверку можно писать и без if, этот префикс ставиться для удобства, и ничего выполняться не будет, поскольку коду нужно пройти часть с прицеливанием, перескакивать он не будет.
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,963
В высокоуровневых конструкциях без if ты не обойдёшься.
 

4el0ve4ik

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

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

4el0ve4ik

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

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

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,963
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. Как ты хочешь что бы это выглядело? Над его головой или в какой то части экрана? Или в чат?