[OSP] Spike Trap
Код, OSP, для создания ловушки с пиками, которые бьют по области. Не знаю, как по другому описать, лучше посмотрите видео.
Для установки ловушки нужно иметь элементарные знания по ВРС и модульной системе.
1) Прежде всего, нам необходимо определить, какой предмет будет играть роль триггера и точки удара. Откройте module_scene_props.py. Для триггера вы должны выбрать тот, который имеет столкновение, так что ti_on_scene_prop_hit действительно может работать. Как проверить, есть ли у предмета столкновение? Посмотрите на его запись, если некоторые имена в нем имеют префикс bo_ - столкновение есть. Если нет - прокрутите. Для точки удара вы должны выбрать какой-то невидимый объект и лучше убрать его столкновение (замените «bo_ ***» на «0»). Когда вы закончите выбор, продублируйте их записи и переименуйте триггерный предмет в «st_trigger», добавьте точку привязки в «st_impact_point», а также продублируйте spike_group_a и переименуйте в «st_spikes». Я выбрал bucket_a в качестве триггера и эмиссионный барьер в качестве точки воздействия, поэтому вот моя запись:
2) Добавьте это где-нибудь в module_constants.py:
Код:
slot_trap_time_left = 50
3) Добавьте эти mission triggers вверху mission_templates.py, а затем добавьте их имена в любой необходимый шаблон:
spike_trap_setup => порождает четыре группы шипов вокруг каждой точки удара, когда миссия начинается. Он спавнит их под землей, поэтому при перемещении точки удара не забудьте переместить камеру ниже и удалить все шипы из предыдущего появления
spike_trap_hide => скрывает шипы и перезагружает ловушку, подготавливая ее к следующему использованию
spike_trap_check => вид таймера, каждую секунду уменьшается время, оставшееся для следующей активации ловушки на 1
Код:
spike_trap_setup = (0, 0, ti_once, [],
[
(assign, "$trap_used", 0),
(try_for_prop_instances, ":instance_id", "spr_st_impact_point"),
(prop_instance_get_starting_position, pos2, ":instance_id"),
(position_get_x, ":x", pos2),
(position_get_y, ":y", pos2),
(position_get_z, ":z", pos2),
(position_rotate_x, pos2, 320), #spikes are tilted by default so we should rotate their X axis before spawn
(val_sub, ":z", 240),
(val_add, ":x", 120),
(position_set_z, pos2, ":z"),
(position_set_x, pos2, ":x"),
(set_spawn_position, pos2),
(spawn_scene_prop, "spr_st_spikes"),
(val_sub, ":x", 240),
(position_set_x, pos2, ":x"),
(set_spawn_position, pos2),
(spawn_scene_prop, "spr_st_spikes"),
(val_add, ":x", 120),
(val_add, ":y", 120),
(position_set_x, pos2, ":x"),
(position_set_y, pos2, ":y"),
(set_spawn_position, pos2),
(spawn_scene_prop, "spr_st_spikes"),
(val_sub, ":y", 240),
(position_set_y, pos2, ":y"),
(set_spawn_position, pos2),
(spawn_scene_prop, "spr_st_spikes"),
(try_end),
])
spike_trap_hide = (0, 2, 0, [(eq, "$trap_used", 1),],
[
(try_for_prop_instances, ":spike", "spr_st_spikes"),
(prop_instance_get_position, pos3, ":spike"),
(position_get_z, ":z2", pos3),
(val_sub, ":z2", 280),
(position_set_z, pos3, ":z2"),
(prop_instance_animate_to_position, ":spike", pos3, 300),
(try_end),
(assign, "$trap_used", 0),
])
spike_trap_check = (1, 0, 0, [],
[
(try_for_prop_instances, ":trigger", "spr_st_trigger"),
(scene_prop_get_slot, ":time_left", ":trigger", slot_trap_time_left),
(gt, ":time_left", 0),
(val_sub, ":time_left", 1),
(scene_prop_set_slot, ":trigger", slot_trap_time_left, ":time_left"),
(try_end),
])
Пример для ai_training mission, которая вызывается при входе в осаду через читы
4) Теперь нам нужно заставить наш триггерный пропс выполнять свою работу. Поместите это в эти квадратные скобки
Код:
(ti_on_scene_prop_hit,
[
(store_trigger_param_1, ":prop"),
(store_trigger_param_3, ":attacker"),
(play_sound, "snd_dummy_hit"),
(particle_system_burst, "psys_dummy_smoke", pos1, 3),
(particle_system_burst, "psys_dummy_straw", pos1, 10),
(try_begin),
(eq, "$trap_used", 0),
(scene_prop_slot_eq, ":prop", slot_trap_time_left, 0),
(try_for_prop_instances, ":spike", "spr_st_spikes"),
(prop_instance_get_position, pos3, ":spike"),
(position_get_z, ":z2", pos3),
(val_add, ":z2", 280),
(position_set_z, pos3, ":z2"),
(prop_instance_animate_to_position, ":spike", pos3, 30),
(try_end),
(play_sound, "snd_metal_hit_high_armor_high_damage"),
(try_for_prop_instances, ":instance_id", "spr_st_impact_point"),
(prop_instance_get_position, pos5, ":instance_id"),
(try_for_agents, ":agent"),
(agent_is_alive, ":agent"),
(agent_get_position, pos4, ":agent"),
(get_distance_between_positions_in_meters, ":dist", pos5, pos4),
(le, ":dist", 2.5),
(agent_deliver_damage_to_agent, ":attacker", ":agent", 300, "itm_war_spear"), #I used spear to make spikes deal piercing damage
(try_end),
(position_get_z, ":z3", pos5),
(val_sub, ":z3", 400),
(position_set_z, pos5, ":z3"),
(particle_system_burst, "psys_dummy_smoke_big", pos5, 30),
(try_end),
(assign, "$trap_used", 1),
(scene_prop_set_slot, ":prop", slot_trap_time_left, 5), #How long trap should reload. To avoid bugs, don't lower it below 5
(else_try),
(display_message, "@Trap is reloading, please wait..."),
(try_end),
]),
5) Теперь мы готовы поставить ловушку на нашей сцене в игре. Откройте редактор сцен и найдите наш реквизит:
Разместите точки воздействия где угодно, а затем установите триггер где-нибудь рядом:
Родная страница
Комментариев 2
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.