SoC. Постэффекты при использовании предмета. — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Dj Ultor (обсуждение | вклад) (Новая страница: «<big>Постэффект при использовании предмета.</big> Всем привет, тут я опишу как сделать постэ…») |
FantomICW (обсуждение | вклад) |
||
(не показаны 2 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | Всем привет, тут я опишу, как сделать постэффект при использовании определённого предмета.<br> | |
+ | Итак нам понадобятся файлы:<br> | ||
+ | '''gamedata\config\misc\items.ltx'''<br> | ||
+ | '''gamedata\scripts\escape_dialog.script'''<br> | ||
+ | '''gamedata\scripts\bind_stalker.script'''<br> | ||
− | + | Приступим.<br> | |
− | + | 1) Открываем файл '''item.ltx''', спускаемся в самый низ и пишем это: | |
− | + | <ini> | |
− | + | ||
− | + | ||
− | Приступим. | + | |
− | 1) Открываем файл item.ltx, спускаемся в самый низ и пишем это: | + | |
− | < | + | |
[test_havka]:identity_immunities | [test_havka]:identity_immunities | ||
GroupControlSection = spawn_group | GroupControlSection = spawn_group | ||
Строка 18: | Строка 17: | ||
visual = weapons\bred\bred.ogf | visual = weapons\bred\bred.ogf | ||
description = enc_equipment_food_bread1 | description = enc_equipment_food_bread1 | ||
− | |||
inv_name = Bread | inv_name = Bread | ||
Строка 54: | Строка 52: | ||
;hud item | ;hud item | ||
hud = wpn_vodka_hud | hud = wpn_vodka_hud | ||
− | </ | + | </ini> |
Теперь подробнее: | Теперь подробнее: | ||
− | < | + | <ini> |
− | [test_havka]:identity_immunities ;Скриптовое название предмета (секция), не должна повторяться иначе будет вылет. | + | [test_havka]:identity_immunities ;Скриптовое название предмета (секция), не должна повторяться, иначе будет вылет. |
GroupControlSection = spawn_group ;Это не трогать | GroupControlSection = spawn_group ;Это не трогать | ||
discovery_dependency = ;Это не трогать | discovery_dependency = ;Это не трогать | ||
Строка 66: | Строка 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 ;вес предмета | ||
Строка 77: | Строка 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 ;Не менять | ||
Строка 103: | Строка 100: | ||
;hud item | ;hud item | ||
hud = wpn_vodka_hud ;Не менять | hud = wpn_vodka_hud ;Не менять | ||
− | </ | + | </ini> |
Получится булка. Все параметры остаются прежними, то есть 2 одинаковые булки, но нас интересуют не параметры, а вызов постэффекта. | Получится булка. Все параметры остаются прежними, то есть 2 одинаковые булки, но нас интересуют не параметры, а вызов постэффекта. | ||
Сохраняем, закрываем. | Сохраняем, закрываем. | ||
− | + | ||
+ | 2) Открываем файл '''escape_dialog.script''' | ||
Спускаемся в самый низ и пишем вот это: | Спускаемся в самый низ и пишем вот это: | ||
− | < | + | <lua> |
function use_test_havka(obj) | function use_test_havka(obj) | ||
local obj_sect = obj:section() | local obj_sect = obj:section() | ||
Строка 118: | Строка 116: | ||
end | end | ||
end | end | ||
− | </ | + | </lua> |
Подробно обо всём: | Подробно обо всём: | ||
− | < | + | <lua> |
− | function use_test_havka(obj) -- Имя функции, не должно повторяться. | + | 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", завершает функцию | ||
− | </ | + | </lua> |
+ | |||
Далее в этом же скрипте находим строку: | Далее в этом же скрипте находим строку: | ||
− | function give_weapon_to_actor (trader, actor) | + | ''function give_weapon_to_actor (trader, actor)'' |
− | + | Перед ''"end"'' вставляем строку: | |
− | dialogs.relocate_item_section(trader, "test_havka", "in") | + | <code>dialogs.relocate_item_section(trader, "test_havka", "in")</code> |
+ | |||
+ | Сохраняем, закрываем. | ||
+ | |||
+ | 3) Заходим в '''bind_stalker.script''' | ||
+ | В функцию ''function actor_binder:net_destroy()'' | ||
+ | вписываем это: | ||
+ | <code> | ||
+ | self.object:set_callback(callback.use_object, nil) | ||
+ | </code> | ||
+ | В этом же файле в функцию ''actor_binder:reinit()'' | ||
+ | пишем это: | ||
+ | <code> | ||
+ | self.object:set_callback(callback.use_object, self.use_object, self) | ||
+ | </code> | ||
+ | |||
+ | И в конец файла пишем вот такую функцию: | ||
+ | <lua> | ||
+ | function actor_binder:use_object(obj) | ||
+ | escape_dialog.use_test_havka(obj) | ||
+ | end | ||
+ | </lua> | ||
+ | |||
+ | Подробно: | ||
+ | |||
+ | <lua> | ||
+ | function actor_binder:use_object(obj) --название функции | ||
+ | escape_dialog.use_test_havka(obj) --вызов функции use_test_havka из файла escape_dialog | ||
+ | end -- окончание функции | ||
+ | </lua> | ||
+ | |||
+ | Сохраняем, закрываем. | ||
+ | Всё, можете проверять. После того, как захаваете батон, получите алкогольное опьянение. | ||
− | + | '''Автор:''' ''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