SoC. Постэффекты при использовании предмета. — S.T.A.L.K.E.R. Inside Wiki

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

Другие места
LANGUAGE