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

BugHunter

Известный
91
13
CLEO:
{$CLEO}
0BE2: raknet setup_outcoming_packet_hook @oPacket
0BDE: pause_thread 0

:oPacket
0BE5: raknet 0@ = get_hook_param {PARAM_PACKETID}1
IF 0039:   0@ == {PACKET_PLAYER_SYNC}207
THEN 0BE0: raknet hook_ret FALSE
END
0BE0: raknet hook_ret TRUE
А можешь пожалуйста сделать пример как ноп выключает дату о ходьбе с помощью команды и с помощью другой - включает обратно. А то так нифига не понятно :D
 

Dark_Knight

Me, me and me.
Друг
4,078
2,095
А можешь пожалуйста сделать пример как ноп выключает дату о ходьбе с помощью команды и с помощью другой - включает обратно. А то так нифига не понятно :D
CLEO:
{$CLEO}
0BE2: raknet setup_outcoming_packet_hook @oPacket
0b34: "test" @test
0@ = false
0BDE: pause_thread 0

:test
0B12: 0@ = 0@ XOR true
samp.CmdRet()

:oPacket
0BE5: raknet 0@ = get_hook_param {PARAM_PACKETID}1
IF 0039:   0@ == {PACKET_PLAYER_SYNC}207
THEN 0BE0: raknet hook_ret 0@
END
0BE0: raknet hook_ret TRUE
 

BlackKnigga

Известный
BH Team
922
446
Как поставить защиту на клео по нику?
То есть перед работой скрипта будет проверка ника, если он удовлетворяет условию, то скрипт будет работать, если нет, то скрипт отключается.
Как это осуществить?
CLEO:
0B2B: samp 0@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0B36: samp 1@ = get_player_nickname 0@
if 0C21: stricmp string1 1@ string2 "Nick_Name"
then
    // CODE
end
 
  • Нравится
Реакции: RedBoxWhite и Unknown13

BugHunter

Известный
91
13
И снова прошу помощи :D. Как сделать что бы если переменная 3@ содержала значение 16, оно бы менялось на 15? Пробовал несколько раз, но тогда игнорирует отправку команды. (А, и еще. Как сделать что бы после того как скрипт узнал хп игрока локального, от него отнемалось 10? Пробовал так сделать, почему то гта просто зависает) Вот код:
CLEO:
{$CLEO .cs}
0000:
thread "ADrugs"
if not 0@ = SAMP.Base()
then 0a93:
end
 
repeat
wait 200
until SAMP.Available()
0B34: samp register_client_command "ud" to_label @adrugs

while true
wait 0
end

:adrugs
wait 0
0B35: samp 0@ = get_last_command_params
int 3@ = 16
    1@ = Actor.Health($PLAYER_ACTOR)
        0B14: 2@ = 1@ MOD 10
            0062: 1@ -= 2@
            0016: 1@ /= 10
            0062: 3@ -= 1@
                if 3@ > 0
                then if 3@ < 16
                    0AF9: samp say_msg "/usedrugs %d" 3@
end
0B43: samp cmd_ret
Гта звисала когда делал так:
CLEO:
    1@ = Actor.Health($PLAYER_ACTOR)
      0062: 1@ -= 10
      0B14: 2@ = 1@ MOD 10
            0062: 1@ -= 2@
            0016: 1@ /= 10
            0062: 3@ -= 1@
 
Последнее редактирование:

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
Научись использовать табуляцию. После каждого if должно быть end .
 

BugHunter

Известный
91
13
Научись использовать табуляцию. После каждого if должно быть end .
Табуляция это обычные пробелы - они играют только роль в пониманий скрипта людьми, но не роботами. Или я ошибаюсь? :D
Насчет после каждого if должно быть end
CLEO:
               if 3@ > 0
                    then if3@ < 16
                            0AF9: samp say_msg "/usedrugs %d"3@
               end
                     end
0B43: samp cmd_retp
Так что ле? :D
P.S. А что нибудь по теме?
 
Последнее редактирование:

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
  • Табуляция нужна для того, чтобы найти мелкие ошибки в коде(и не только в принципе), которые могут сильно повредить при его выполнении(особенно когда IDE не подсвечивает тебе эти ошибки). А ошибка у тебя в том, что условия два, а end один;
  • 0062 предназначен для вычитания переменной из другой переменной: 0@ -= 1@, к примеру. Для того, чтобы просто вычесть число, то используй 000E или просто, без опкодов(0@ -= 55);
 

BugHunter

Известный
91
13
Научись использовать табуляцию. После каждого if должно быть end .

  • Табуляция нужна для того, чтобы найти мелкие ошибки в коде(и не только в принципе), которые могут сильно повредить при его выполнении(особенно когда IDE не подсвечивает тебе эти ошибки). А ошибка у тебя в том, что условия два, а end один;
    0062 предназначен для вычитания переменной из другой переменной: 0@ -= 1@, к примеру. Для того, чтобы просто вычесть число, то используй 000E или просто, без опкодов(0@ -= 55);
CLEO:
:adrugs
wait 0
0B35: samp 0@ = get_last_command_params
int 3@ = 16
    1@ = Actor.Health($PLAYER_ACTOR)
        0B14: 2@ = 1@ MOD 10
            0062: 1@ -= 2@
                0016: 1@ /= 10
                    0062: 3@ -= 1@
                        if 3@ > 0
                            then if 3@ < 16
                                0AF9: samp say_msg "/usedrugs %d" 3@
                        end
                            end
Теперь пишет неизвестная end
 

BlackKnigga

Известный
BH Team
922
446
CLEO:
:adrugs
wait 0
0B35: samp 0@ = get_last_command_params
int 3@ = 16
    1@ = Actor.Health($PLAYER_ACTOR)
        0B14: 2@ = 1@ MOD 10
            0062: 1@ -= 2@
                0016: 1@ /= 10
                    0062: 3@ -= 1@
                        if 3@ > 0
                            then if 3@ < 16
                                0AF9: samp say_msg "/usedrugs %d" 3@
                        end
                            end
Теперь пишет неизвестная end
Табуляцию используют не так, нужно делать таб внутри каждой конструкции, кончающейся на end.

И еще нельзя после then сразу if ставить. Нужно делать так:
CLEO:
if 3@ > 0
then
    if 3@ < 16
    then
        0AF9: "/usedrugs %d" 3@
    end
end
А вообще лучше не выдумывать и делать через if and
CLEO:
if and
3@ > 0
3@ < 16
then
    0AF9: "/usedrugs %d" 3@
end
 
Последнее редактирование:
  • Нравится
Реакции: FYP и BugHunter

BugHunter

Известный
91
13
CLEO:
{$CLEO}
0BE2: raknet setup_outcoming_packet_hook @oPacket
0b34: "test" @test
0@ = false
0BDE: pause_thread 0

:test
0B12: 0@ = 0@ XOR true
samp.CmdRet()

:oPacket
0BE5: raknet 0@ = get_hook_param {PARAM_PACKETID}1
IF 0039:   0@ == {PACKET_PLAYER_SYNC}207
THEN 0BE0: raknet hook_ret 0@
END
0BE0: raknet hook_ret TRUE
Попробовал скомпилировать и написать /test в игре - не работает.
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
Попробовал скомпилировать и написать /test в игре - не работает.
CLEO:
{$CLEO}
0006: 0@ = TRUE
0B34: "TEST" @cTest
0BE2: raknet setup_outcoming_packet_hook @oPacket
0BDE: pause_thread 0

:cTest
0B12: 0@ = 0@ XOR TRUE
0B43: samp cmd_ret

:oPacket
0BE5: raknet 1@ = get_hook_param {PARAM_PACKETID}1
IF 0039:   1@ == {PACKET_PLAYER_SYNC}207
THEN 0BE0: raknet hook_ret 0@
END
0BE0: raknet hook_ret TRUE
 

p1cador

cerf
Проверенный
221
359
Жопа бомбит уже, помогите

Когда игрок поворачивает камеру ровно на север, в памяти по адресу 0xB6F258 лежит значение, равное -пи/2 радиан (-90 градусов), вот пруфы
т.е. если записать угол поворота камеры = -90 градусов, она повернется ровно на север.

Опкодер выкладывал функу
Код:
:getZAngleBetweenPoints
0063: 0@ -= 2@
0063: 1@ -= 3@
0604: get_Z_angle_for_point 0@ 1@ store_to 4@
0AB2: 1 4@
Эта функция возвращает угол, между двумя игроками, относительно точки на карте, находящейся на севере. Вот для наглядности(угол альфа - то, что вернет эта функция, если передать в нее 3д координаты желтого кружка("я") и оранжевого ("цели")).
fZ4WoDUv084.jpg
Чтоб повернуть камеру ровно на ебучую цель, достаточно записать в память по адресу 0xB6F258 значение, возвращаемое функцией опкодера - 90, переведенное в радианы. И это работает, всё прекрасно наводится, но хуйня в том, что наводит на цель оно ровно ЦЕНТР экрана(так можно на изи аим на снайпу сделать) В других же стволах(кроме снайпы) прицел находится на 20 игровых пикселей правее, чем центр экрана и хуй пойми, как переделать всё под эту ситуацию.

Попробовал сделать так:
Брал игровые 2д 340.0 х 180.0(2д коорды прицела), переводил их в игровые 3д с глубиной, равной расстоянию от камеры до $PLAYER_ACTOR, тем самым получая координаты точки в пространстве, находящейся на месте прицела и передавал эти координаты в функу опкодера вместо своих. Это немного помогло - наводиться стало чуть точнее, чем было до этого, но все же при изменении расстояния от меня до цели, прицел стал чуть убегать вправо. Эту неточность можно было скорректироваь, но корректировать ее, прибавляя для каждого расстояния разные значения - это ебаный бдсм, так быть не должно (хоть и получается более-менее нормально)
Я психанул, отрендерил на экране всю хуйню, с которой работаю

-зеленый вектор - идет от центра моего скина(Actor.StorePos) к центру скина цели
-тонкий желтый вектор - идет от прицела до цели
-жирный желтый вектор - идет от точки, которая находится чуть правее центра моего скина (правее на 20.0 игровых пикселей, что соответствует положению прицела по "у" в 2д) до цели
-красный вектор - условно идет от камеры до этой же точки, которая находится чуть правее центра моего скина
-красная тонкая вертикальная линия - середина экрана по "у" (320.0 игровых пикселей)
-серая тонкая вертикальная линия - положение прицела по "у" в игровых 2д (340.0 пикселей)
Короч хер знает что с этим всем сделать, чтоб на цель наводился именно прицел, а не центр экрана и не точка, находящаяся между прицелом и центром экрана. Предполагаю, что это из за того, что запись в 0xB6F258 значения, равного -90 градусов поворачивает на север именно центр экрана, а не прицел, и потом, естественно, из за этого будет неточность, тогда скажите, какое значение записать в 0xB6F258, чтоб повернуть на север именно ПРИЦЕЛ. Я почти уверен, что дело в этом, но уже рили затрахался всё это перепроверять, хер знает, мб вы свежим взглядом со стороны че-то еще увидите
 
Последнее редактирование:

Perojek)0

Известный
205
3
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:

repeat
    wait 2000
until 0AFA:  is_samp_available

while true
wait 0
    if
    0ADC:   test_cheat "6"
    then
    0AC8: 0@ = allocate_memory_size 260
    0AD3: 0@ = format "Всем привет !"
    0C16: 1@ = strtok string1 0@ string2 " "
    0AF8: samp add_message_to_chat 0@ color -1
    0AC9: free_allocated_memory 0@
    end
end
В чат выводится слово "Всем", а как сделать, чтобы вывелось например "!"?