Ещё не начинал, но тем не менее PS.
Все скрипты и другое делалось минут за 20, только для просмотра. Поэтому не ругать за нефункциональность.
==========================================================================================
Установка необходимых компонентов :
1. Для испытания эффектов я, лично для себя, установил рестриктор.
Можете спавнить его скриптом, а можете (как и я) установить его в all.spawn
Например у меня так (на Кордоне) :
============================================================================================
Код:
[880]
; cse_abstract properties
section_name = space_restrictor
name = test_ppe_anm
position = -91.203,-26.343,-452.424 ; Координаты свои
direction = 0,0,0
; cse_alife_object properties
game_vertex_id = 12 ; И вертексы тоже
distance = 0
level_vertex_id = 172428 ; И вертексы тоже
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\test.ltx ; Обратить внимание
END
; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 10
; cse_alife_space_restrictor properties
restrictor_type = 3
===========================================================================================
Далее, в директории "config\scripts\" я создал файл "test.ltx", в котором записал следующее :
Код:
[logic]
active = sr_idle
[sr_idle]
; Это для файлов анимации. Для просмотра файлов постэффектов изменить %=enable_present_anm% на %=enable_present_ppe%
on_actor_inside = sr_idle1 %=enable_present_anm%
[sr_idle1]
;Это для файлов анимации. Для просмотра файлов постэффектов изменить %=disable_present_anm% на %=disable_present_ppe%
on_actor_outside = sr_idle %=disable_present_anm%
=============================================================================================
В файл xr_effects.script добавьте следующий код (это для патча 1.0004, в других могут быть и удалены перечисленные файлы, что приведёт к вылету):
================================================================================================
--
Код:
##########################################################################################
-- Для анимаций
--##########################################################################################
local tab_anm = {['camera_effects\\'] = { 'agroprom_demo.anm',
'agroprom_demo_nah.anm',
'agroprom_demo_nah1.anm',
'agroprom_doctor_cam.anm',
'arena.anm',
'bar_fly.anm',
'cut_scene1.anm',
'dis_consciousness.anm',
'dream.anm','drunk.anm',
'earthquake.anm',
'fatigue.anm',
'fusker.anm',
'head_shot.anm',
'hit_back.anm',
'hit_back_left.anm',
'hit_back_right.anm',
'hit_front.anm',
'hit_front_left.anm',
'hit_front_right.anm',
'hit_left.anm',
'hit_right.anm',
'oso_cam.anm',
'pl_test.anm',
'pri_fly_to_aes.anm',
'prison_0.anm',
'prison_1.anm',
'radar_stop.anm',
'rostok_camera.anm',
'shell_shock.anm'
},
[''] = { 'agroprom_demo.anm',
'arena.anm',
'dx9_w.anm',
'dx9_wn.anm',
'effector_test.anm',
'garbage1.anm',
'l2.anm',
'labx18_1floor_1.anm',
'labx18_1floor_2.anm',
'labx18_1floor_3.anm',
'labx18_1floor_4.anm',
'labx18_1floor_5.anm',
'labx18_1floor_6.anm',
'labx18_1floor_6_2.anm',
'labx18_1floor_6_3.anm',
'labx18_1floor_6_4.anm',
'labx18_poltr_1.anm',
'labx18_poltr_2.anm',
'labx18_poltr_3.anm',
'mil_zharka.anm',
'particle_test.anm',
'pl_test_doc.anm',
'punch_effector.anm',
'test.anm'
},
['path\\'] = { 'agroprom_zharka.anm',
'atp_zharka.anm',
'bar_rostok_jarka.anm',
'boloto_zharka_1.anm',
'dandy_phys.anm',
'darkvalley_torrid_path.anm',
'deadcity_zharka.anm',
'garbage_zharka.anm',
'generators_torrid_path.anm',
'generators_torrid_path_2.anm',
'generators_torrid_path_3.anm',
'generators_torrid_path_4.anm',
'lestat_military1.anm',
'lestat_test.anm',
'military_fireball1.anm',
'military_torrid1.anm',
'mp_workshop_fireball.anm',
'mp_workshop_fireball1.anm',
'path.anm',
'path_111.anm',
'path_jip_test.anm',
'pripyat_zharka1.anm',
'rostok_jarka_krondor.anm',
'rostok_jarka_krondor_2.anm',
'rostok_jarka_krondor_3.anm',
'ssss.anm',
'ssss1.anm',
'test.anm',
'torid_stancia_vxod1.anm',
'torrid_anims.anm',
'yantar_torrid_path.anm',
'zone_path.anm'
},
['editor\\'] = { '8_negative.anm',
'8_positive.anm',
'eight.anm'
},
['helicopter\\'] = { 'aaa.anm',
'bbb.anm',
'vert_path.anm'
}
}
local i = 1
local tab_parent_path = {'camera_effects\\','','path\\','editor\\','helicopter\\'}
local parse_num = 1
local loop = false
local fl = 0 -- На всякий случай защита. Может и не нужно
function enable_present_anm()
if not tab_parent_path[i] then news_manager.send_tip(db.actor, 'END LIST ANIVATIONS. NEXT CIRCLE') i = 1 parse_num = 1 end
level.add_cam_effector (tab_parent_path[i]..tab_anm[tab_parent_path[i]][parse_num], 2005, loop, "")
fl = 1 -- На всякий случай защита. Может и не нужно
parse_num = parse_num + 1
if parse_num > #tab_anm[tab_parent_path[i]] then
i = i + 1
parse_num = 1
end
end
function disable_present_anm()
if fl == 1 then -- На всякий случай защита. Может и не нужно
level.remove_cam_effector(2005)
fl = 0 -- На всякий случай защита. Может и не нужно
end -- На всякий случай защита. Может и не нужно
if i > #tab_parent_path then i = 1 end
news_manager.send_tip(db.actor, "NEXT .ANM -> "..tab_parent_path[i]..tab_anm[tab_parent_path[i]][parse_num])
end
--##########################################################################################
-- Для постэффектов
--##########################################################################################
local tab_ppe = { 'agr_u_fade.ppe',
'alcohol.ppe',
'blink.ppe',
'controller_hit.ppe',
'dead_zone.ppe',
'deadcity_wake.ppe',
'deadcity_wake_old.ppe',
'duality_circle.ppe',
'escape.ppe',
'fire_hit.ppe',
'monolith_off.ppe',
'nightvision.ppe',
'nightvision2.ppe',
'nightvision_bad.ppe',
'nightvision_good.ppe',
-- 'p_proba.ppe', Я не юэаю, вылетает
-- 'proba.ppe', Я не юэаю, вылетает
'proba2.ppe',
'proba_gray.ppe',
'proba_test.ppe',
'psy_antenna.ppe',
'psy_antenna_indoor.ppe',
'radar_psi.ppe',
'radar_stop.ppe',
'radar_wake.ppe',
'radiation.ppe',
'snd_shock.ppe',
'teleport.ppe',
'total_recall.ppe',
'vibros.ppe',
'vibros_p.ppe',
'yantar_underground_psi.ppe'
}
local j = 1
local loop = false
local fl_ppe = 0 -- На всякий случай защита. Может и не нужно
function enable_present_ppe()
if j > #tab_ppe then news_manager.send_tip(db.actor, 'END LIST POSTEFFECTS. NEXT CIRCLE') j = 1 end
level.add_pp_effector(tab_ppe[j], 2006, loop)
fl_ppe = 1 -- На всякий случай защита. Может и не нужно
j = j + 1
end
function disable_present_ppe()
if fl_ppe == 1 then -- На всякий случай защита. Может и не нужно
level.remove_pp_effector(2006)
if j > #tab_ppe then j = 1 end
news_manager.send_tip(db.actor, "NEXT .PPE -> "..tab_ppe[j])
-- end
fl_ppe = 0 -- На всякий случай защита. Может и не нужно
end -- На всякий случай защита. Может и не нужно
end
======================================================================================================================================
Ну а теперь, когда всю эту байду добавили - сохранить. Если создавали рестриктор через all.spawn, то скомпилировать all.spawn.
======================================================================================================================================
Получиться следующее :
При входе в рестриктор Вы увидете постэффект(или анимацию, если установили в файле "test.ltx")
При выходе выскочит сообщение о том, какой следующий эффект будет проигран.
Всё настроено циклически. Т.е. после проигрывания последнего в списке эффекта, будет проигрываться первый и т.д.
========================================================================================================================================
P.S.
Анимации камеры до конца не проверены, поэтому может получиться ситуация, как у меня с постэффектами. Вылетало с проигрыванием файлов 'p_proba.ppe' и 'proba.ppe'.
В этом случае просто закомментируйте их. (см. в коде). И начните сначала.
Скажу ещё раз - ничего не настроено для удобного использования,
поэтому если выйдете (вылетите) из игры, начнётся всё сначала.
Чтобы не смотреть все просмотренные эффекты (для прокрутки) просто заходите, и тут же выходите из рестриктора.
И наблюдайте за мессинджами о том, какой эффект будет проигран следующим.