Рейтинг - 5.0 (3)

Всем хай! С вами 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

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

Вот такой неожиданный для меня урок сочинился. Надеюсь, Вам он пригодится в Ваших модах :)


Теги: Пути пешеходов, animation path, анимационные пути, scm path

Viktor_Kew   (16.07.13 02:21)
Как сделать? У меня есть 2 точки. Я нажимаю F10, и PLAYER_ACTOR идет сначало к первой точке, затем ко второй, потом опять к первой, и так по кругу, до тех пор пока я не отключю цикл клавишой F10

wmysterio   (16.07.13 16:58)
Вопросы => сюда
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Как Вы узнали о сайте?
Всего ответов: 5
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 2
Гостей: 1
Пользователей: 1
wmysterio
Сегодня нас посетили:
wmysterio, Dyabda
Реклама