000120. Пути пешеходов и анимационные пути

Пути пешеходов и анимационные пути|Всем хай! С вами wmysterio! Относительно недавно мне удалось разобраться в путях пешеходов и научить актёров ходить по нужным точкам.|wmysterio|wmysterio||||Как я понял, есть несколько вариантов это организовать. Во-первых, через scm-пути. Следующие опкоды делают это:

05D6: clear_scmpath // Очищает ранее созданные scm-пути
05D7: add_point_to_scmpath 372.0 -120.1 1000.5 // Добавляет новую точку в scm-путь
05D8: AS_assign_scmpath to_actor 0@ flags 6 0 // Заставляет актёра двигаться по маршруту
07E7: AS_assign_scmpath_to_actor -1 in_car 0@ speed 25.0 flags 1 0 1 // Заставляет актёра двигаться по маршруту в транспорте

Как правило, указывают несколько точек, чтобы построить маршрут. Флаги для опкодов 05D8 и 07E7 мне пока не известны.

Во-вторых: через анимационные пути. Это вариант мне понравился больше, так как предыдущий как-то некорректно работает ( актёры двигаются стразу в последнюю точку, игнорируя остальные, во всяком случаи это было так раньше ). Давайте знакомится! Первый опкод создаёт новый анимационный путь, очищая все остальные:

0754: define_new_animation_path

Дальше идёт перечисление точек маршрута и анимации воспроизведения:

0755: add_animation_path_3D_coord -2699.4812 92.5335 4.3359 animation "NONE" IFP_file "NONE"

Здесь: -2699.4812 92.5335 4.3359 - координаты новой точки "NONE" - название IFP-файла и имени анимации. Если нам не нужно ничего воспроизводить, то оставляем "NONE"

Чтобы заставить актёра идти по этому пути, нужно использовать следующий опкод:

0817: assign_actor 0@ to_animation_path_with_walk_mode 4 route_mode 3

Здесь: 0@ - хэндл актёра 4 - режим походки актёра 3 - режим маршрута

Я не вникал в параметры режимов, поэтому оставляю те, что были. Особенность этих параметров в том, что они заставляют актёра идти по кругу. Как только актёр достиг последней точки, он возвращается в первую и начинает маршрут сначала. Таким образом, можно использовать это в миссиях: актёры могут выступают в качестве охранников территории. Вот простой пример:

{$CLEO}
0000: NOP
actor.PutAt($PLAYER_ACTOR, -2706.4333, 101.8569, 4.1797)
Model.Load(#WBDYG1)
038B: load_requested_models
01EB: set_traffic_density_multiplier_to 0.0
03DE: set_pedestrians_density_multiplier_to 0.0
0395: clear_area 0 at -2699.7943 116.97724.336 radius 300.0
3@ = Actor.Create(Mission1, #WBDYG1, -2699.4812, 92.5335, 4.3359)
model.Destroy(#WBDYG1)
Actor.Angle(3@) = 358.83
0754: define_new_animation_path
0755: add_animation_path_3D_coord -2699.4812 92.5335 4.3359 animation "NONE" IFP_file "NONE"
0755: add_animation_path_3D_coord -2712.856 92.3864 4.3359 animation "NONE" IFP_file "NONE" 
0755: add_animation_path_3D_coord -2712.6179 116.1146 4.3359 animation "NONE" IFP_file "NONE"
0755: add_animation_path_3D_coord -2699.7942 116.9771 4.3359 animation "NONE" IFP_file "NONE" 
0817: assign_actor 3@ to_animation_path_with_walk_mode 4 route_mode 3
0A93: end_custom_thread

Результат: актёр двигается по нужным координатам:

Вот такой неожиданный для меня урок сочинился. Надеюсь, Вам он пригодится в Ваших модах :)|1944|1|0|04086996png600337400`224``||puti_peshekhodov|1504589559

Last updated