SoC. Постэффекты при использовании предмета. — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Dj Ultor (обсуждение | вклад) |
FantomICW (обсуждение | вклад) |
||
Строка 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''', спускаемся в самый низ и пишем это: |
− | < | + | <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 | ||
− | </ | + | </ini> |
Теперь подробнее: | Теперь подробнее: | ||
− | < | + | <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 ;Не менять | ||
− | </ | + | </ini> |
Получится булка. Все параметры остаются прежними, то есть 2 одинаковые булки, но нас интересуют не параметры, а вызов постэффекта. | Получится булка. Все параметры остаются прежними, то есть 2 одинаковые булки, но нас интересуют не параметры, а вызов постэффекта. | ||
Сохраняем, закрываем. | Сохраняем, закрываем. | ||
− | 2) Открываем файл escape_dialog.script | + | 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() | ||
Строка 116: | Строка 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" вставляем строку: | + | Перед ''"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: | ||
И в конец файла пишем вот такую функцию: | И в конец файла пишем вот такую функцию: | ||
− | < | + | <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 | ||
− | </ | + | </lua> |
Подробно: | Подробно: | ||
− | < | + | <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 -- окончание функции | ||
− | </ | + | </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