Сповіщення
Очистити все

SoC. Постефекти під час використання предмета.


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
7 місяців тому
 

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

 
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		 = bip0 _				 _ _ 
 


 
// 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 рублів.  
  
   
  
  
 
attach_angle_offset		 = -0.287979 , 1.560923 , 1.544060 ;		 Не міняти attach_position_offset	 = 0.096910 , -0.013594 , 0.107925 ; ch				 = 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,9 ;  
  
 
; eatable item 
eat_health = 0.05 ; відновлення здоров'я при використанні eat_satiety = 0.2 ;Прибавка ситості при використанні eat_power = 0 ; Набавка сили при використанні eat_radiation = 0 ; Додаток радіації при використанні wounds_heal_per ; 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 _ 
	_ _ _ _ _ _ _ _ _ скриптове накладення постефекту алкогольного сп'яніння на 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  - закінчення функції
 

Зберігаємо, закриваємо. Все, можете перевіряти. Після того, як збережете батон, отримаєте алкогольне сп'яніння.


   
Цитата