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

utmpL

Активный
309
65
как бежать по определенным координатам? без скольжения и тд.
(короче для бегающего бота типо)
 

astap_

Известный
Всефорумный модератор
626
597
как бежать по определенным координатам? без скольжения и тд.
(короче для бегающего бота типо)
В клео нет нескользящих опкодов. Фиксится это OpcodeFixer'ом. Но для этого должен быть установлен этот самый опкод фиксер, что не очень удобно.
Удобный вариант предложил gcode.
CLEO:
:CharGoto
repeat
   wait 0
   00A0: store_actor $PLAYER_ACTOR position_to 4@ 5@ 2@
   0063: 0@ -= 4@
   0063: 1@ -= 5@
   0604: get_Z_angle_for_point 0@ 1@ store_to 2@
   005B: 0@ += 4@
   005B: 1@ += 5@
   2@ *= 0.01745
   0A96: 4@ = actor $PLAYER_ACTOR struct
   4@ += 0x558
   0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0
   0373: set_camera_directly_behind_player
   if
       3@ == false
   then
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 0 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   else
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   end
until 00ED: actor $PLAYER_ACTOR 0 near_point 0@ 1@ radius 0.4 0.4 on_foot
0AB2: ret 0
 

utmpL

Активный
309
65
В клео нет нескользящих опкодов. Фиксится это OpcodeFixer'ом. Но для этого должен быть установлен этот самый опкод фиксер, что не очень удобно.
Удобный вариант предложил gcode.
CLEO:
:CharGoto
repeat
   wait 0
   00A0: store_actor $PLAYER_ACTOR position_to 4@ 5@ 2@
   0063: 0@ -= 4@
   0063: 1@ -= 5@
   0604: get_Z_angle_for_point 0@ 1@ store_to 2@
   005B: 0@ += 4@
   005B: 1@ += 5@
   2@ *= 0.01745
   0A96: 4@ = actor $PLAYER_ACTOR struct
   4@ += 0x558
   0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0
   0373: set_camera_directly_behind_player
   if
       3@ == false
   then
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 0 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   else
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   end
until 00ED: actor $PLAYER_ACTOR 0 near_point 0@ 1@ radius 0.4 0.4 on_foot
0AB2: ret 0
спасибо конечно, но еще хотел спросить: как правильно использовать его? пробовал много вариантов, так как я недавно в клео,
то логично что у меня ничего не получилось. т.е получилось, но его нельзя было остановить, и он бегал туда сюда.
вообщем, нужно чтобы он бежал на одни координаты, как прибежит , то на другие, тд. и как переменная 13 будет false, то он должен будет остановиться.
заранее спасибо.
CLEO:
{$CLEO .cs}
0000:

repeat
wait 111
until samp.Available()

0B34: samp register_client_command "mycmd" to_label @1

repeat
wait 0

if 13@ == true
then

// вот сюда

until false

:1
0B12: 13@ = 13@ XOR 1
if 13@ == true
then
0AF8: samp add_message_to_chat "1" color -1
else
0AF8: samp add_message_to_chat "0" color -1
end
samp.CmdRet()



:CharGoto
repeat
   wait 0
   00A0: store_actor $PLAYER_ACTOR position_to 4@ 5@ 2@
   0063: 0@ -= 4@
   0063: 1@ -= 5@
   0604: get_Z_angle_for_point 0@ 1@ store_to 2@
   005B: 0@ += 4@
   005B: 1@ += 5@
   2@ *= 0.01745
   0A96: 4@ = actor $PLAYER_ACTOR struct
   4@ += 0x558
   0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0
   0373: set_camera_directly_behind_player
   if
       3@ == false
   then
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 0 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   else
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   end
until 00ED: actor $PLAYER_ACTOR 0 near_point 0@ 1@ radius 0.4 0.4 on_foot
0AB2: ret 0
 

astap_

Известный
Всефорумный модератор
626
597
спасибо конечно, но еще хотел спросить: как правильно использовать его? пробовал много вариантов, так как я недавно в клео,
то логично что у меня ничего не получилось. т.е получилось, но его нельзя было остановить, и он бегал туда сюда.
вообщем, нужно чтобы он бежал на одни координаты, как прибежит , то на другие, тд. и как переменная 13 будет false, то он должен будет остановиться.
заранее спасибо.
CLEO:
{$CLEO .cs}
0000:

repeat
wait 111
until samp.Available()

0B34: samp register_client_command "mycmd" to_label @1

repeat
wait 0

if 13@ == true
then

// вот сюда

until false

:1
0B12: 13@ = 13@ XOR 1
if 13@ == true
then
0AF8: samp add_message_to_chat "1" color -1
else
0AF8: samp add_message_to_chat "0" color -1
end
samp.CmdRet()



:CharGoto
repeat
   wait 0
   00A0: store_actor $PLAYER_ACTOR position_to 4@ 5@ 2@
   0063: 0@ -= 4@
   0063: 1@ -= 5@
   0604: get_Z_angle_for_point 0@ 1@ store_to 2@
   005B: 0@ += 4@
   005B: 1@ += 5@
   2@ *= 0.01745
   0A96: 4@ = actor $PLAYER_ACTOR struct
   4@ += 0x558
   0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0
   0373: set_camera_directly_behind_player
   if
       3@ == false
   then
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 0 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   else
       4@ = 0xB73458
       4@ += 0x20
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
       4@ = 0xB73458
       4@ += 0x3
       0A8C: write_memory 4@ size 1 value 255 virtual_protect 0
   end
until 00ED: actor $PLAYER_ACTOR 0 near_point 0@ 1@ radius 0.4 0.4 on_foot
0AB2: ret 0
CLEO:
 CALL @CharGoto x y z true/false // тру - спринтует, фалс - пешком.
 

Skelerll

Известный
154
8
Как изменить скорость анимки, чтобы она только у меня была, допустим Х5, а у других нормально? Проще говроря, как сделать ВИЗУАЛЬНОЕ ускорение анимации. Просто если ускорять просто опкодом, то кикает.
Прошлый способ не очень помог.
 

D[a]Ni

Участник
63
3
Нужна помощь не могу предумать как зделать такую херню:
Создался маркер и когда он наехал на него появился следущий маркер, Создать типо трассу по маркерам(Гоночные чекпоинты)
 

клешь рояль

Известный
1,255
551
Как можно записать свои координаты потом телепортироваться на определённые координаты и обратно?
CLEO:
{$CLEO .cs}
0000: NOP
repeat
wait 100
until 0AFA:  is_samp_available
0B34: samp register_client_command "123" to_label @cmd_mycmd

repeat
wait 0
    if 0@ == true
    then
    00A0: store_actor $PLAYER_ACTOR position_to 1@ 2@ 3@
    call @OnFootData 3 1281.68 -1834.37 13.38
    wait 10000
    call @OnFootData 3 1@ 2@ 3@
    end
until false

:OnFootData
0AC8: 4@ = allocate_memory_size 68
0B2B: samp 5@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0BBA: samp store_player 5@ onfoot_data 4@
0C0D: struct 4@ offset 6 size 4 = 0@
0C0D: struct 4@ offset 10 size 4 = 1@
0C0D: struct 4@ offset 14 size 4 = 2@
0BC0: samp send_onfoot_data 4@
0AC9: free_allocated_memory 4@
0AB2: ret 0

:cmd_mycmd
0B12: 0@ = 0@ XOR 1
if 0@ == true
then
chatmsg "on" 0xFF0000 {red}
else
chatmsg "off" 0xFF0000
end
0B43: samp cmd_ret
Пробовал с этим кодом отправить синхру на спавн где зз, но я отправляю синхру и бью рукой по идее меня должо нагнуть но нет :(
 

astap_

Известный
Всефорумный модератор
626
597
Нужна помощь не могу предумать как зделать такую херню:
Создался маркер и когда он наехал на него появился следущий маркер, Создать типо трассу по маркерам(Гоночные чекпоинты)
CLEO:
0107: 4@ = create_object 0@ at 1@ 2@ 3@ // создаём чекпоинт. ИД модели 19945.

00EE:   actor $PLAYER_ACTOR sphere 0 near_point 1@ 2@ radius 10.0 10.0 in_car // Проверяем, наехали ли мы на чекпоинт.

01BC: put_object 4@ at 5@ 6@ 7@ // Если наехали, перемещаем чекпоинт в другое место.
 

Musaigen

abobusnik
Проверенный
1,585
1,309
Как можно записать свои координаты потом телепортироваться на определённые координаты и обратно?
CLEO:
{$CLEO .cs}
0000: NOP
repeat
wait 100
until 0AFA:  is_samp_available
0B34: samp register_client_command "123" to_label @cmd_mycmd

repeat
wait 0
    if 0@ == true
    then
    00A0: store_actor $PLAYER_ACTOR position_to 1@ 2@ 3@
    call @OnFootData 3 1281.68 -1834.37 13.38
    wait 10000
    call @OnFootData 3 1@ 2@ 3@
    end
until false

:OnFootData
0AC8: 4@ = allocate_memory_size 68
0B2B: samp 5@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0BBA: samp store_player 5@ onfoot_data 4@
0C0D: struct 4@ offset 6 size 4 = 0@
0C0D: struct 4@ offset 10 size 4 = 1@
0C0D: struct 4@ offset 14 size 4 = 2@
0BC0: samp send_onfoot_data 4@
0AC9: free_allocated_memory 4@
0AB2: ret 0

:cmd_mycmd
0B12: 0@ = 0@ XOR 1
if 0@ == true
then
chatmsg "on" 0xFF0000 {red}
else
chatmsg "off" 0xFF0000
end
0B43: samp cmd_ret
Пробовал с этим кодом отправить синхру на спавн где зз, но я отправляю синхру и бью рукой по идее меня должо нагнуть но нет :(
А почему бы сразу в синхре не отправить о том, что ты нажал ЛКМ?
 

astap_

Известный
Всефорумный модератор
626
597
call @OnFootData 3 1@ 2@ 3@
зачем ты делаешь отправку синхры на свою же позицию?
upd: я догнал что ты хотел сделать, но это не имеет смысла, сервер сам тебя возвращает на твою локальную позицию примерно через секунду после того , как ты отправил фейк-позицию.
 

клешь рояль

Известный
1,255
551
зачем ты делаешь отправку синхры на свою же позицию?
Не мой код код пацана выше
А почему бы сразу в синхре не отправить о том, что ты нажал ЛКМ?
Там я просто проверяю есть ЗЗ или нет, там просто скрипт для нубо рп который нагинает весь сервер если ты в зз активируешь скрипт
 

astap_

Известный
Всефорумный модератор
626
597
Там я просто проверяю есть ЗЗ или нет, там просто скрипт для нубо рп который нагинает весь сервер если ты в зз активируешь скрипт
ну так проще будет сделать, как и сказал @Musaigen.
CLEO:
0C0D: struct 4@ offset 4 size 2 = 4 // отправляем серверу пакет о том, что нажата ЛКМ
 

клешь рояль

Известный
1,255
551
ну так проще будет сделать, как и сказал @Musaigen.
CLEO:
0C0D: struct 4@ offset 4 size 2 = 4 // отправляем серверу пакет о том, что нажата ЛКМ
Пля, суть не в том что бы я нажал ЛКМ, а суть в том что бы я был в зз находясь не в зз, xD it is logic,
там просто скрипт для нубо рп который нагинает весь сервер если ты в зз активируешь скрипт