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

Lobber

Известный
178
57
Есть ли у кого-то мысли, как изменить анимацию другого игрока который умер, пускай даже локально? Я никак не могу эту анимку изменить, только обновляя зону стрима. Мб можно через синхру, даже не знаю...
 

mc_alex

Участник
151
23
Приветствую всех. Как сделать так, чтобы скрипт нашёл в зоне прорисовки пикап, и сразу же телепортировался на него?
 

TheArtemMaps

Новичок
27
0
Скажите мне пожалуйста как сделать плавное движение самолета? А то он дергается как хрен знает что. И какая часть скрипта отвечает за его перемещение? Вот скрипт:
 

Вложения

  • Dodo with ad banner 2.cs
    23 KB · Просмотры: 3

Lobber

Известный
178
57
Скажите мне пожалуйста как сделать плавное движение самолета? А то он дергается как хрен знает что. И какая часть скрипта отвечает за его перемещение? Вот скрипт:
Если честно, не нашел ничего что могло бы вызвать рывки или кривое передвижение. Со стороны кода не вижу особых изъянов или костылей, хоть он и собран судя по всему под cleo 3. Можешь подробнее рассказать, что происходит?
 

TheArtemMaps

Новичок
27
0
Если честно, не нашел ничего что могло бы вызвать рывки или кривое передвижение. Со стороны кода не вижу особых изъянов или костылей, хоть он и собран судя по всему под cleo 3. Можешь подробнее рассказать, что происходит?
Самолёт летает по всем трём городам, но проблема в том что он не плавно передвигается, а рывками. Хотелось бы что бы он плавно летел. Кдео 3? Не думаю. У меня все скрипты под 4 только. Бывает он долетает до гаража у сан фиерро, потом пошел сбой и он начинает плавно лететь вверх без остановки.
 

Lobber

Известный
178
57
Кдео 3? Не думаю. У меня все скрипты под 4 только
Такой синтаксис я видел только в 3-м клео...
CLEO:
Car.Create(8@, 593, 0@, 1@, 2@)
Car.Angle(8@) = 3@
Car.LockInCurrentPosition(8@, True)
Marker.CreateAboveCar(3@, 8@)
Object.Init(12@, 593, 0.0, 0.0, 0.0)
Object.Angle(12@) = 3@
Model.Destroy(593)
Actor.SetImmunities(10@, True, True, True, True, True)
Ну да ни суть. Я проверил в одиночке твои слова, не совсем тоже самое наблюдаю. Но принципиальных отличий нет, передвигается он у меня тоже странно. Советую проверить логику построения маршрута, особенно Z-координаты, ибо у тебя точки отсчета статика а z вычисляется динамически. Также у тебя некоторые переменные сами себя перезаписывают, стоило бы для каждого действия иметь свои личные выделенные переменные. Возможно в этом и ошибка, нужно тестить.
 

TheArtemMaps

Новичок
27
0
Такой синтаксис я видел только в 3-м клео...
CLEO:
Car.Create(8@, 593, 0@, 1@, 2@)
Car.Angle(8@) = 3@
Car.LockInCurrentPosition(8@, True)
Marker.CreateAboveCar(3@, 8@)
Object.Init(12@, 593, 0.0, 0.0, 0.0)
Object.Angle(12@) = 3@
Model.Destroy(593)
Actor.SetImmunities(10@, True, True, True, True, True)
Ну да ни суть. Я проверил в одиночке твои слова, не совсем тоже самое наблюдаю. Но принципиальных отличий нет, передвигается он у меня тоже странно. Советую проверить логику построения маршрута, особенно Z-координаты, ибо у тебя точки отсчета статика а z вычисляется динамически. Также у тебя некоторые переменные сами себя перезаписывают, стоило бы для каждого действия иметь свои личные выделенные переменные. Возможно в этом и ошибка, нужно тестить.
Через Carrec, можно это как то сделать?
 

Lobber

Известный
178
57
Хорошо, тогда как по другому?
Смотря какой эффект ты ожидаешь от своей работы. Если судить по коду, то каждый кадр это дело себе обновляет маршрут, и это с элементами рандома, что для стабильной работы нот гуд. Есть (как по мне) лишние проверки, а также циклы которые и могут поломать логику работы. Я бы сел да занялся его полной доработкой, но боюсь займет тонну времени :(

Я нашел похоже более хорошую версию твоего скрипта. Тут есть хороший алгоритм полета, и скорее всего более адекватный чем твой. Посмотри, может быть тебе стоит использовать базу этого скрипта в своей поделке?

CLEO:
{$CLEO .cs}

0000: NOP

:Begin
wait 0
077E: get_active_interior_to $ACTIVE_INTERIOR
if or
not $ACTIVE_INTERIOR == 0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0
then
jump @Begin
else
0005: 4@ = 1374.0687
0005: 5@ = -1889.2344
0005: 6@ = 612.8045
0005: 7@ = -1295.6091
    if and
    0154:   actor $PLAYER_ACTOR in_zone 'LA'
    00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
    then
    Model.Load(#DODO)
    Model.Load(1573)
    038B: load_requested_models
    jump @Create
    else
    0005: 4@ = -2697.0837
    0005: 5@ = 374.9268
    0005: 6@ = -2114.3589
    0005: 7@ = 1189.8759
        if and
        0154:   actor $PLAYER_ACTOR in_zone 'SF'
        00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
        then
        Model.Load(#DODO)
        Model.Load(1573)
        038B: load_requested_models
        jump @Create
        else
        0005: 4@ = 1574.1027
        0005: 5@ = 2159.2104
        0005: 6@ = 2486.0554
        0005: 7@ = 1407.873
            if and
            0154:   actor $PLAYER_ACTOR in_zone 'VE'
            00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
            jf @Begin
            Model.Load(#DODO)
            Model.Load(1573)
            038B: load_requested_models
            jump @Create
        end
    end
end

:Create
wait 0
if and
Model.Available(#DODO)
Model.Available(1573)
jf @Create
0208: 0@ = random_float_in_ranges 4@ 6@
0208: 1@ = random_float_in_ranges 5@ 7@
02CE: 2@ = ground_z_at 0@ 1@ 1000.0
0009: 2@ += 100.0
0208: 3@ = random_float_in_ranges 0.0 360.0
Car.Create(8@, #DODO, 0@, 1@, 2@)
Car.Angle(8@) = 3@
Car.LockInCurrentPosition(8@) = True
Object.Init(12@, 1573, 0.0, 0.0, 0.0)
Object.Angle(12@) = 3@
0681: attach_object 12@ to_car 8@ with_offset 0.0 -1.0 -1.9 rotation 0.0 0.0 0.0
Model.Destroy(#DODO)
Model.Destroy(1573)
0560: create_random_actor_in_car 8@ handle_as 10@
Actor.SetImmunities(10@, 1, 1, 1, 1, 1)
0209: 13@ = random_int_in_ranges 0 4
if
13@ == 1
then
13@ = Audiostream.Load3D("cleo\sound\vc_dodo1.wav")
Audiostream.PerformAction(13@, PLAY)
0ABC: set_audiostream 13@ volume 4.0
Audiostream.Loop(13@, 1)
Audiostream.LinkToCar(13@, 8@)
02D4: car 8@ turn_off_engine
else
    if
    13@ == 2
    then
    13@ = Audiostream.Load3D("cleo\sound\vc_dodo2.wav")
    Audiostream.PerformAction(13@, PLAY)
    0ABC: set_audiostream 13@ volume 4.0
    Audiostream.Loop(13@, 1)
    Audiostream.LinkToCar(13@, 8@)
    02D4: car 8@ turn_off_engine
    end
end
jump @Variable

:Variable
wait 0
0004: 19@ = 0
0208: 3@ = random_float_in_ranges -0.1 0.1
if or
-0.05 > 3@
3@ > 0.05
jf @Variable
jump @If

:Fly
wait 0
0407: store_coords_to 0@ 1@ 32@ from_car 8@ with_offset 0.0 0.15 0.0
0407: store_coords_to 14@ 15@ 16@ from_car 8@ with_offset 6.0 -0.25 1.0
0407: store_coords_to 17@ 18@ 16@ from_car 8@ with_offset -6.0 -0.25 1.0
if
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 0@ 1@ 2@ radius 60.0 60.0 60.0
then
04D5: create_corona_at 14@ 15@ 16@ radius 1.0 type 1 flare 2 RGB 255 255 255
04D5: create_corona_at 17@ 18@ 16@ radius 1.0 type 1 flare 2 RGB 255 255 255
end
0008: 19@ += 1
if
not 19@ > 45
then
0407: store_coords_to 20@ 21@ 22@ from_car 8@ with_offset 0.0 -6.6 1.9
    if
    00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 0@ 1@ 2@ radius 60.0 60.0 60.0
    then
    04D5: create_corona_at 20@ 21@ 22@ radius 0.6 type 1 flare 0 RGB 255 0 0
    end
else
    if
    19@ > 90
    then
    0004: 19@ = 0
    end
end
Car.PutAt(8@, 0@, 1@, 2@)
9@ = Car.Angle(8@)
005B: 9@ += 3@
Car.Angle(8@) = 9@
jump @If

:If
if and
8495:   not car 8@ burning
not Car.Wrecked(8@)
jf @End2
if or
0202:   actor $PLAYER_ACTOR near_car 8@ radius 400.0 400.0 sphere 0
00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
jf @End
077E: get_active_interior_to $ACTIVE_INTERIOR
if or
not $ACTIVE_INTERIOR == 0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0
jf @Fly
jump @End

:End
wait 0
Audiostream.Release(13@)
Object.Destroy(12@)
Actor.RemoveReferences(10@)
Car.RemoveReferences(8@)
jump @Begin

:End2
wait 0
Car.LockInCurrentPosition(8@) = False
jump @End3

:End3
wait 0
11@ = Player.WantedLevel($PLAYER_CHAR)
if
11@ < 2
jf @End
0008: 11@ += 1
Player.WantedLevel($PLAYER_CHAR) = 11@
jump @End3
 
Последнее редактирование:
  • Нравится
Реакции: TheArtemMaps

TheArtemMaps

Новичок
27
0
Смотря какой эффект ты ожидаешь от своей работы. Если судить по коду, то каждый кадр это дело себе обновляет маршрут, и это с элементами рандома, что для стабильной работы нот гуд. Есть (как по мне) лишние проверки, а также циклы которые и могут поломать логику работы. Я бы сел да занялся его полной доработкой, но боюсь займет тонну времени :(

Я нашел похоже более хорошую версию твоего скрипта. Тут есть хороший алгоритм полета, и скорее всего более адекватный чем твой. Посмотри, может быть тебе стоит использовать базу этого скрипта в своей поделке?

CLEO:
{$CLEO .cs}

0000: NOP

:Begin
wait 0
077E: get_active_interior_to $ACTIVE_INTERIOR
if or
not $ACTIVE_INTERIOR == 0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0
then
jump @Begin
else
0005: 4@ = 1374.0687
0005: 5@ = -1889.2344
0005: 6@ = 612.8045
0005: 7@ = -1295.6091
    if and
    0154:   actor $PLAYER_ACTOR in_zone 'LA'
    00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
    then
    Model.Load(#DODO)
    Model.Load(1573)
    038B: load_requested_models
    jump @Create
    else
    0005: 4@ = -2697.0837
    0005: 5@ = 374.9268
    0005: 6@ = -2114.3589
    0005: 7@ = 1189.8759
        if and
        0154:   actor $PLAYER_ACTOR in_zone 'SF'
        00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
        then
        Model.Load(#DODO)
        Model.Load(1573)
        038B: load_requested_models
        jump @Create
        else
        0005: 4@ = 1574.1027
        0005: 5@ = 2159.2104
        0005: 6@ = 2486.0554
        0005: 7@ = 1407.873
            if and
            0154:   actor $PLAYER_ACTOR in_zone 'VE'
            00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
            jf @Begin
            Model.Load(#DODO)
            Model.Load(1573)
            038B: load_requested_models
            jump @Create
        end
    end
end

:Create
wait 0
if and
Model.Available(#DODO)
Model.Available(1573)
jf @Create
0208: 0@ = random_float_in_ranges 4@ 6@
0208: 1@ = random_float_in_ranges 5@ 7@
02CE: 2@ = ground_z_at 0@ 1@ 1000.0
0009: 2@ += 100.0
0208: 3@ = random_float_in_ranges 0.0 360.0
Car.Create(8@, #DODO, 0@, 1@, 2@)
Car.Angle(8@) = 3@
Car.LockInCurrentPosition(8@) = True
Object.Init(12@, 1573, 0.0, 0.0, 0.0)
Object.Angle(12@) = 3@
0681: attach_object 12@ to_car 8@ with_offset 0.0 -1.0 -1.9 rotation 0.0 0.0 0.0
Model.Destroy(#DODO)
Model.Destroy(1573)
0560: create_random_actor_in_car 8@ handle_as 10@
Actor.SetImmunities(10@, 1, 1, 1, 1, 1)
0209: 13@ = random_int_in_ranges 0 4
if
13@ == 1
then
13@ = Audiostream.Load3D("cleo\sound\vc_dodo1.wav")
Audiostream.PerformAction(13@, PLAY)
0ABC: set_audiostream 13@ volume 4.0
Audiostream.Loop(13@, 1)
Audiostream.LinkToCar(13@, 8@)
02D4: car 8@ turn_off_engine
else
    if
    13@ == 2
    then
    13@ = Audiostream.Load3D("cleo\sound\vc_dodo2.wav")
    Audiostream.PerformAction(13@, PLAY)
    0ABC: set_audiostream 13@ volume 4.0
    Audiostream.Loop(13@, 1)
    Audiostream.LinkToCar(13@, 8@)
    02D4: car 8@ turn_off_engine
    end
end
jump @Variable

:Variable
wait 0
0004: 19@ = 0
0208: 3@ = random_float_in_ranges -0.1 0.1
if or
-0.05 > 3@
3@ > 0.05
jf @Variable
jump @If

:Fly
wait 0
0407: store_coords_to 0@ 1@ 32@ from_car 8@ with_offset 0.0 0.15 0.0
0407: store_coords_to 14@ 15@ 16@ from_car 8@ with_offset 6.0 -0.25 1.0
0407: store_coords_to 17@ 18@ 16@ from_car 8@ with_offset -6.0 -0.25 1.0
if
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 0@ 1@ 2@ radius 60.0 60.0 60.0
then
04D5: create_corona_at 14@ 15@ 16@ radius 1.0 type 1 flare 2 RGB 255 255 255
04D5: create_corona_at 17@ 18@ 16@ radius 1.0 type 1 flare 2 RGB 255 255 255
end
0008: 19@ += 1
if
not 19@ > 45
then
0407: store_coords_to 20@ 21@ 22@ from_car 8@ with_offset 0.0 -6.6 1.9
    if
    00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 0@ 1@ 2@ radius 60.0 60.0 60.0
    then
    04D5: create_corona_at 20@ 21@ 22@ radius 0.6 type 1 flare 0 RGB 255 0 0
    end
else
    if
    19@ > 90
    then
    0004: 19@ = 0
    end
end
Car.PutAt(8@, 0@, 1@, 2@)
9@ = Car.Angle(8@)
005B: 9@ += 3@
Car.Angle(8@) = 9@
jump @If

:If
if and
8495:   not car 8@ burning
not Car.Wrecked(8@)
jf @End2
if or
0202:   actor $PLAYER_ACTOR near_car 8@ radius 400.0 400.0 sphere 0
00A3:   actor $PLAYER_ACTOR sphere 0 in_rectangle_cornerA 4@ 5@ cornerB 6@ 7@
jf @End
077E: get_active_interior_to $ACTIVE_INTERIOR
if or
not $ACTIVE_INTERIOR == 0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 877.9877 -28.3817 63.1953 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere 2025.451 997.5287 10.8203 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -694.6745 956.7463 12.2547 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2025.7168 157.9236 29.0391 radius 60.0 60.0 60.0
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2037.8574 -2525.165 30.625 radius 60.0 60.0 60.0
jf @Fly
jump @End

:End
wait 0
Audiostream.Release(13@)
Object.Destroy(12@)
Actor.RemoveReferences(10@)
Car.RemoveReferences(8@)
jump @Begin

:End2
wait 0
Car.LockInCurrentPosition(8@) = False
jump @End3

:End3
wait 0
11@ = Player.WantedLevel($PLAYER_CHAR)
if
11@ < 2
jf @End
0008: 11@ += 1
Player.WantedLevel($PLAYER_CHAR) = 11@
jump @End3
Спасибо огромное!!! Теперь он плавный!!! Скажи пожалуйста, где тут стрчоки кода, которые отвечают за скорост передвижения, и координаты передвижения.
 

Lobber

Известный
178
57
Коорды это с 18 по 21 строку и соответствующие им же ниже. За плавность тут отвечает 108я строка, но могу ошибаться.
 

TheArtemMaps

Новичок
27
0
Коорды это с 18 по 21 строку и соответствующие им же ниже. За плавность тут отвечает 108я строка, но могу ошибаться.
Да, ты прав.

Коорды это с 18 по 21 строку и соответствующие им же ниже. За плавность тут отвечает 108я строка, но могу ошибаться.
Кстати, не знаешь, есть ли скрипт, который записывает координаты передвижения в файл? Либо как по другому сделать свои координаты для DODO?
 
Последнее редактирование:

Lobber

Известный
178
57
Кстати, не знаешь, есть ли скрипт, который записывает координаты передвижения в файл?
Нужно самому клепать файл, который выводит на экран коорды в реальном времени. Ну и затем уже записывать их в свой скрипт, наверно.
 
  • Нравится
Реакции: TheArtemMaps