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

SoC. Постэффекты при использовании предмета. — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
 
Строка 1: Строка 1:
Всем привет, тут я опишу как сделать постэффект при использовании определённого предмета.
+
Всем привет, тут я опишу, как сделать постэффект при использовании определённого предмета.<br>
Итак нам понадобятся файлы:
+
Итак нам понадобятся файлы:<br>
gamedata\config\misc\items.ltx
+
'''gamedata\config\misc\items.ltx'''<br>
gamedata\scripts\escape_dialog.script
+
'''gamedata\scripts\escape_dialog.script'''<br>
gamedata\scripts\bind_stalker.script
+
'''gamedata\scripts\bind_stalker.script'''<br>
  
Приступим.
+
Приступим.<br>
1) Открываем файл item.ltx, спускаемся в самый низ и пишем это:
+
1) Открываем файл '''item.ltx''', спускаемся в самый низ и пишем это:
<code>
+
<ini>
 
[test_havka]:identity_immunities
 
[test_havka]:identity_immunities
 
GroupControlSection = spawn_group
 
GroupControlSection = spawn_group
Строка 52: Строка 52:
 
;hud item
 
;hud item
 
hud = wpn_vodka_hud
 
hud = wpn_vodka_hud
</code>
+
</ini>
  
 
Теперь подробнее:
 
Теперь подробнее:
<code>
+
<ini>
[test_havka]:identity_immunities ;Скриптовое название предмета (секция), не должна повторяться иначе будет вылет.
+
[test_havka]:identity_immunities ;Скриптовое название предмета (секция), не должна повторяться, иначе будет вылет.
 
GroupControlSection = spawn_group ;Это не трогать
 
GroupControlSection = spawn_group ;Это не трогать
 
discovery_dependency = ;Это не трогать
 
discovery_dependency = ;Это не трогать
Строка 64: Строка 64:
 
cform = skeleton ;Это не трогать
 
cform = skeleton ;Это не трогать
 
visual = weapons\bred\bred.ogf ;Визуал (3d модель предмета)
 
visual = weapons\bred\bred.ogf ;Визуал (3d модель предмета)
description = enc_equipment_food_bread1 ;Описание. Можно вписать своё, либо в соответствующий текстовый ффайл либо сюда но через "".
+
description = enc_equipment_food_bread1 ;Описание. Можно вписать своё, либо в соответствующий текстовый файл, либо сюда но через "".
  
inv_name = Bread ;Название предмета. Также как и в описании.
+
inv_name = Bread ;Название предмета. Так же, как и в описании.
inv_name_short = Bread ;Укороченое название. Честно говоря не знаю где используется.
+
inv_name_short = Bread ;Укороченное название. Честно говоря, не знаю, где используется.
 
inv_weight = 0.3 ;0.2 ;вес предмета
 
inv_weight = 0.3 ;0.2 ;вес предмета
  
Строка 74: Строка 74:
 
inv_grid_x = 11  ;Параметр иконки инвентаря
 
inv_grid_x = 11  ;Параметр иконки инвентаря
 
inv_grid_y = 9 ;Параметр иконки инвентаря
 
inv_grid_y = 9 ;Параметр иконки инвентаря
cost = 20 ;Стоимость предмета, можно указать свою. В данном случае предмет стоит 20 рублей.
+
cost = 20 ;Стоимость предмета, можно указать свою. В данном случае, предмет стоит 20 рублей.
  
 
attach_angle_offset = -0.287979, 1.560923, 1.544060 ;Не менять
 
attach_angle_offset = -0.287979, 1.560923, 1.544060 ;Не менять
Строка 100: Строка 100:
 
;hud item
 
;hud item
 
hud = wpn_vodka_hud ;Не менять
 
hud = wpn_vodka_hud ;Не менять
</code>
+
</ini>
  
 
Получится булка. Все параметры остаются прежними, то есть 2 одинаковые булки, но нас интересуют не параметры, а вызов постэффекта.
 
Получится булка. Все параметры остаются прежними, то есть 2 одинаковые булки, но нас интересуют не параметры, а вызов постэффекта.
 
Сохраняем, закрываем.
 
Сохраняем, закрываем.
  
2) Открываем файл escape_dialog.script
+
2) Открываем файл '''escape_dialog.script'''
 
Спускаемся в самый низ и пишем вот это:
 
Спускаемся в самый низ и пишем вот это:
  
<code>
+
<lua>
 
function use_test_havka(obj)  
 
function use_test_havka(obj)  
 
local obj_sect = obj:section()  
 
local obj_sect = obj:section()  
Строка 116: Строка 116:
 
end
 
end
 
end
 
end
</code>
+
</lua>
  
 
Подробно обо всём:
 
Подробно обо всём:
  
<code>
+
<lua>
function use_test_havka(obj) -- Имя функции, не должно повторяться. Переменная "function" должна присутствовать перед название функции
+
function use_test_havka(obj) -- Имя функции, не должно повторяться. Элемент "function" должен присутствовать перед название функции
 
local obj_sect = obj:section()  
 
local obj_sect = obj:section()  
 
local snd  
 
local snd  
 
if obj_sect == "test_havka" then --если объект "test_havka" использована
 
if obj_sect == "test_havka" then --если объект "test_havka" использована
level.add_pp_effector("alcohol.ppe", 3000, false) --то скриптовое наложение постэффекта алкогольного опьянения на 3000 милисекунд.
+
level.add_pp_effector("alcohol.ppe", 3000, false) --то скриптовое наложение постэффекта алкогольного опьянения на 3000 миллисекунд.
 
end -- первая переменная "end", завершает параметр "if"
 
end -- первая переменная "end", завершает параметр "if"
 
end -- вторая переменная "end", завершает функцию
 
end -- вторая переменная "end", завершает функцию
</code>
+
</lua>
  
 
Далее в этом же скрипте находим строку:
 
Далее в этом же скрипте находим строку:
function give_weapon_to_actor (trader, actor)
+
''function give_weapon_to_actor (trader, actor)''
  
Перед "end" вставляем строку:
+
Перед ''"end"'' вставляем строку:
  
     dialogs.relocate_item_section(trader, "test_havka", "in")  
+
     <code>dialogs.relocate_item_section(trader, "test_havka", "in")</code>
  
 
Сохраняем, закрываем.  
 
Сохраняем, закрываем.  
  
3) Заходим в bind_stalker.script
+
3) Заходим в '''bind_stalker.script'''
В функцию function actor_binder:net_destroy()
+
В функцию ''function actor_binder:net_destroy()''
 
вписываем это:
 
вписываем это:
 
<code>
 
<code>
 
self.object:set_callback(callback.use_object, nil)
 
self.object:set_callback(callback.use_object, nil)
 
</code>
 
</code>
В этом же файле в функцию actor_binder:reinit()
+
В этом же файле в функцию ''actor_binder:reinit()''
 
пишем это:
 
пишем это:
 
<code>
 
<code>
Строка 152: Строка 152:
  
 
И в конец файла пишем вот такую функцию:
 
И в конец файла пишем вот такую функцию:
<code>
+
<lua>
 
function actor_binder:use_object(obj)
 
function actor_binder:use_object(obj)
 
     escape_dialog.use_test_havka(obj)
 
     escape_dialog.use_test_havka(obj)
 
end
 
end
</code>
+
</lua>
  
 
Подробно:
 
Подробно:
  
<code>
+
<lua>
 
function actor_binder:use_object(obj) --название функции
 
function actor_binder:use_object(obj) --название функции
 
     escape_dialog.use_test_havka(obj) --вызов функции use_test_havka из файла escape_dialog
 
     escape_dialog.use_test_havka(obj) --вызов функции use_test_havka из файла escape_dialog
 
end -- окончание функции
 
end -- окончание функции
</code>
+
</lua>
  
 
Сохраняем, закрываем.
 
Сохраняем, закрываем.
 
Всё, можете проверять. После того, как захаваете батон, получите алкогольное опьянение.  
 
Всё, можете проверять. После того, как захаваете батон, получите алкогольное опьянение.  
  
Автор: Dj_Ultor
+
'''Автор:''' ''Dj_Ultor''
  
 
[[Категория:Скрипты]]
 
[[Категория:Скрипты]]

Текущая версия на 14:58, 2 декабря 2014

Всем привет, тут я опишу, как сделать постэффект при использовании определённого предмета.
Итак нам понадобятся файлы:
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