По аналогии с этим кодом: https://www.blast.hk/threads/14252/Приветствую всех. Как сделать так, чтобы скрипт нашёл в зоне прорисовки пикап, и сразу же телепортировался на него?
Если честно, не нашел ничего что могло бы вызвать рывки или кривое передвижение. Со стороны кода не вижу особых изъянов или костылей, хоть он и собран судя по всему под cleo 3. Можешь подробнее рассказать, что происходит?Скажите мне пожалуйста как сделать плавное движение самолета? А то он дергается как хрен знает что. И какая часть скрипта отвечает за его перемещение? Вот скрипт:
Самолёт летает по всем трём городам, но проблема в том что он не плавно передвигается, а рывками. Хотелось бы что бы он плавно летел. Кдео 3? Не думаю. У меня все скрипты под 4 только. Бывает он долетает до гаража у сан фиерро, потом пошел сбой и он начинает плавно лететь вверх без остановки.Если честно, не нашел ничего что могло бы вызвать рывки или кривое передвижение. Со стороны кода не вижу особых изъянов или костылей, хоть он и собран судя по всему под cleo 3. Можешь подробнее рассказать, что происходит?
Такой синтаксис я видел только в 3-м клео...Кдео 3? Не думаю. У меня все скрипты под 4 только
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)
Через Carrec, можно это как то сделать?Такой синтаксис я видел только в 3-м клео...
Ну да ни суть. Я проверил в одиночке твои слова, не совсем тоже самое наблюдаю. Но принципиальных отличий нет, передвигается он у меня тоже странно. Советую проверить логику построения маршрута, особенно Z-координаты, ибо у тебя точки отсчета статика а z вычисляется динамически. Также у тебя некоторые переменные сами себя перезаписывают, стоило бы для каждого действия иметь свои личные выделенные переменные. Возможно в этом и ошибка, нужно тестить.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)
Не самый хороший способЧерез Carrec, можно это как то сделать?
Хорошо, тогда как по другому?Не самый хороший способ
Смотря какой эффект ты ожидаешь от своей работы. Если судить по коду, то каждый кадр это дело себе обновляет маршрут, и это с элементами рандома, что для стабильной работы нот гуд. Есть (как по мне) лишние проверки, а также циклы которые и могут поломать логику работы. Я бы сел да занялся его полной доработкой, но боюсь займет тонну времени :(Хорошо, тогда как по другому?
{$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
Спасибо огромное!!! Теперь он плавный!!! Скажи пожалуйста, где тут стрчоки кода, которые отвечают за скорост передвижения, и координаты передвижения.Смотря какой эффект ты ожидаешь от своей работы. Если судить по коду, то каждый кадр это дело себе обновляет маршрут, и это с элементами рандома, что для стабильной работы нот гуд. Есть (как по мне) лишние проверки, а также циклы которые и могут поломать логику работы. Я бы сел да занялся его полной доработкой, но боюсь займет тонну времени :(
Я нашел похоже более хорошую версию твоего скрипта. Тут есть хороший алгоритм полета, и скорее всего более адекватный чем твой. Посмотри, может быть тебе стоит использовать базу этого скрипта в своей поделке?
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
Да, ты прав.Коорды это с 18 по 21 строку и соответствующие им же ниже. За плавность тут отвечает 108я строка, но могу ошибаться.
Кстати, не знаешь, есть ли скрипт, который записывает координаты передвижения в файл? Либо как по другому сделать свои координаты для DODO?Коорды это с 18 по 21 строку и соответствующие им же ниже. За плавность тут отвечает 108я строка, но могу ошибаться.
Нужно самому клепать файл, который выводит на экран коорды в реальном времени. Ну и затем уже записывать их в свой скрипт, наверно.Кстати, не знаешь, есть ли скрипт, который записывает координаты передвижения в файл?