Из SGM мода понадобятся следующие файлы:
o | configs\ui\ui_mod_elements.xml |
o | configs\ui\ui_mod_elements_16.xml |
o | configs\ui\textures_descr\ui_mod_wnds.xml |
o | meshes\dynamics\mod_items\mp3_player.ogf |
o | textures\new\new_mp3.dds |
o | textures\ui\ui_mod_wnds_1.dds |
o | scripts\sgm_functions.script |
o | scripts\sgm_variables.script |
o | scripts\ui_mod_elements.script |
Если переносите в другой мод, а не в чистую игру из файла _g.script придется по отдельности перенести недостающие функции.
Из Оригинальной игры (или мода) нужны файлы:
o | scripts\bind_stalker.script |
Теперь в добавим объект МП3 плеер в игру, для этого добавим секцию в файл items.ltx
[mp3_player]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "devices\quest_items\mp3_player"
$prefetch = 32
class = II_ANTIR
cform = skeleton
visual = dynamics\mod_items\mp3_player.ogf
description = st_player_descr
inv_name = st_player
inv_name_short = st_player
inv_weight = 0.05
inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 14
inv_grid_y = 34
cost = 3200
eat_health = 0
eat_satiety = 0
eat_power = 0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = 1
animation_slot = 4
hud = wpn_vodka_hud
Добавим обработку использования предмета в bind_stalker.script после строк:
if(obj) then
local s_obj = alife():object(obj:id())
if(s_obj) and (s_obj:section_name()=="drug_anabiotic") then
xr_effects.disable_ui_only(db.actor, nil)
level.add_cam_effector("camera_effects\\surge_02.anm", 10, false, "bind_stalker.anabiotic_callback")
level.add_pp_effector("surge_fade.ppe", 11, false)
give_info("anabiotic_in_process")
_G.mus_vol = get_console():get_float("snd_volume_music")
_G.amb_vol = get_console():get_float("snd_volume_eff")
get_console():execute("snd_volume_music 0")
get_console():execute("snd_volume_eff 0")
end
end
добавим:
if obj~=nil then
callbacks.on_use_item(obj)
end
Создадим файл скрипта callbacks.script следующего содержания:
function on_use_item(sect)
local item_name=sect:section()
if item_name=="mp3_player" then
give_info("mp3_player_active")
-- Добавлена начальная установка уровня громкости
sgm_functions.write_variable("mp3_currert_volume",0.6)
run_dynamic_element(ui_mod_elements.mp3_player(),true)
end
end
Для того чтобы работал таймер в плеере нужно в файле ui_mod_elements.script в функции mp3_update() добавить в начало:
if mp3_plays~=nil then
mp3_length_position=string.format(math.floor(time_global()/1000))-mp3_last_position
end
И в файле bind_stalker.script в функции actor_binder:update(delta) добавить в начало:
ui_mod_elements.mp3_update()
Для ограничения на уровни громкости нужно в файле ui_mod_elements.script в функции mp3_player:btn_volume_minus() после:
sgm_functions.write_variable("mp3_currert_volume",sgm_functions.read_variable("mp3_currert_volume")-mp3_add_value)
добавить:
if sgm_functions.read_variable("mp3_currert_volume")~=nil and sgm_functions.read_variable("mp3_currert_volume")<0.0 then
sgm_functions.write_variable("mp3_currert_volume",0.0)
elseif sgm_functions.read_variable("mp3_currert_volume")~=nil and sgm_functions.read_variable("mp3_currert_volume")>1.0 then
sgm_functions.write_variable("mp3_currert_volume",1.0)
end
И в функции mp3_player:btn_volume_plus() после:
sgm_functions.write_variable("mp3_currert_volume",sgm_functions.read_variable("mp3_currert_volume")+mp3_add_value)
добавить:
if sgm_functions.read_variable("mp3_currert_volume")~=nil and sgm_functions.read_variable("mp3_currert_volume")<0.0 then
sgm_functions.write_variable("mp3_currert_volume",0.0)
elseif sgm_functions.read_variable("mp3_currert_volume")~=nil and sgm_functions.read_variable("mp3_currert_volume")>1.0 then
sgm_functions.write_variable("mp3_currert_volume",1.0)
end
Для того, чтобы все работало как следует нужно:
1. Начальную установку уровня громкости нужно перенести в какой либо скипт выполняющийся один раз при старте игры.
2. Описать в xml все текстовые переменные: название предмета, описание, названия кнопок и подсказки.
3. Сделать иконку плеера и зарегистрировать ее.
|