SoC. Постэффекты при использовании предмета.
Материал из S.T.A.L.K.E.R. Inside Wiki
Всем привет, тут я опишу, как сделать постэффект при использовании определённого предмета.
Итак нам понадобятся файлы:
gamedata\config\misc\items.ltx
gamedata\scripts\escape_dialog.script
gamedata\scripts\bind_stalker.script
Приступим.
1) Открываем файл item.ltx, спускаемся в самый низ и пишем это:
[test_havka]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "food and drugs\bread" ;$prefetch = 32 class = II_FOOD cform = skeleton visual = weapons\bred\bred.ogf description = enc_equipment_food_bread1 inv_name = Bread inv_name_short = Bread inv_weight = 0.3 ;0.2 inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 11 inv_grid_y = 9 cost = 20 attach_angle_offset = -0.287979, 1.560923, 1.544060 attach_position_offset = 0.096910, -0.013594, 0.107925 attach_bone_name = bip01_r_hand auto_attach = false // should be deleted after update bone_name = bip01_r_hand position_offset = 0.0,0.0,0.0 angle_offset = 1.570790,1.570790,3.92699 ; eatable item eat_health = 0.05 eat_satiety = 0.2 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = -1 ; food item slot = 4 animation_slot = 4 ;hud item hud = wpn_vodka_hud
Теперь подробнее:
[test_havka]:identity_immunities ;Скриптовое название предмета (секция), не должна повторяться, иначе будет вылет. GroupControlSection = spawn_group ;Это не трогать discovery_dependency = ;Это не трогать $spawn = "food and drugs\bread" ;Это не трогать ;$prefetch = 32 ;Это не трогать class = II_FOOD ;Класс предмета, в данном случае "Еда" (лучше не менять) cform = skeleton ;Это не трогать visual = weapons\bred\bred.ogf ;Визуал (3d модель предмета) description = enc_equipment_food_bread1 ;Описание. Можно вписать своё, либо в соответствующий текстовый файл, либо сюда но через "". inv_name = Bread ;Название предмета. Так же, как и в описании. inv_name_short = Bread ;Укороченное название. Честно говоря, не знаю, где используется. inv_weight = 0.3 ;0.2 ;вес предмета inv_grid_width = 1 ;Параметр иконки инвентаря inv_grid_height = 1 ;Параметр иконки инвентаря inv_grid_x = 11 ;Параметр иконки инвентаря inv_grid_y = 9 ;Параметр иконки инвентаря cost = 20 ;Стоимость предмета, можно указать свою. В данном случае, предмет стоит 20 рублей. attach_angle_offset = -0.287979, 1.560923, 1.544060 ;Не менять attach_position_offset = 0.096910, -0.013594, 0.107925 ;Не менять attach_bone_name = bip01_r_hand ;Не менять auto_attach = false ;Не менять // should be deleted after update ;Не менять bone_name = bip01_r_hand ;Не менять position_offset = 0.0,0.0,0.0 ;Не менять angle_offset = 1.570790,1.570790,3.92699 ;Не менять ; eatable item eat_health = 0.05 ;восстановление здоровья при использовании eat_satiety = 0.2 ;Прибавка сытости при использовании eat_power = 0 ;Прибавка силы при использовании eat_radiation = 0 ;Прибавка радиации при использовании wounds_heal_perc = 0 eat_portions_num = -1 ;Сколько порций в 1 предмете (сколько раз можно его скушать) ; food item slot = 4 ;Не менять animation_slot = 4 ;Не менять ;hud item hud = wpn_vodka_hud ;Не менять
Получится булка. Все параметры остаются прежними, то есть 2 одинаковые булки, но нас интересуют не параметры, а вызов постэффекта. Сохраняем, закрываем.
2) Открываем файл escape_dialog.script Спускаемся в самый низ и пишем вот это:
function use_test_havka(obj) local obj_sect = obj:section() local snd if obj_sect == "test_havka" then level.add_pp_effector("alcohol.ppe", 3000, false) end end
Подробно обо всём:
function use_test_havka(obj) -- Имя функции, не должно повторяться. Элемент "function" должен присутствовать перед название функции local obj_sect = obj:section() local snd if obj_sect == "test_havka" then --если объект "test_havka" использована level.add_pp_effector("alcohol.ppe", 3000, false) --то скриптовое наложение постэффекта алкогольного опьянения на 3000 миллисекунд. end -- первая переменная "end", завершает параметр "if" end -- вторая переменная "end", завершает функцию
Далее в этом же скрипте находим строку: function give_weapon_to_actor (trader, actor)
Перед "end" вставляем строку:
dialogs.relocate_item_section(trader, "test_havka", "in")
Сохраняем, закрываем.
3) Заходим в bind_stalker.script В функцию function actor_binder:net_destroy() вписываем это:
self.object:set_callback(callback.use_object, nil)
В этом же файле в функцию actor_binder:reinit() пишем это:
self.object:set_callback(callback.use_object, self.use_object, self)
И в конец файла пишем вот такую функцию:
function actor_binder:use_object(obj) escape_dialog.use_test_havka(obj) end
Подробно:
function actor_binder:use_object(obj) --название функции escape_dialog.use_test_havka(obj) --вызов функции use_test_havka из файла escape_dialog end -- окончание функции
Сохраняем, закрываем. Всё, можете проверять. После того, как захаваете батон, получите алкогольное опьянение.
Автор: Dj_Ultor