SoC. Не бесконечные болты — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
Dj Ultor (обсуждение | вклад) м |
|||
(не показаны 10 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
− | + | Итак, тут я опишу как реализовать болты которые будут заканчиваться. Сразу пишу о том, что будем делать основываясь на гранатах, то есть не исключено, что болт может рвануть (не нанеся урон и только через продолжительный участок времени, так что гг навряд ли будет по близости.), а также, если бросим болт под ноги НПСу, он шуганётся, как от грены (это на самом деле не плохо, если отключены глаза на затылке, можно попробовать их таким образом отвлечь). | |
− | + | ||
− | + | ||
− | + | ||
− | + | Итак, приступим.<br> | |
− | + | Нам потребуются такие файлы:<br> | |
'''gamedata\config\weapons\w_rgd5.ltx'''<br> | '''gamedata\config\weapons\w_rgd5.ltx'''<br> | ||
'''gamedata\config\weapons\w_bolt.ltx'''<br> | '''gamedata\config\weapons\w_bolt.ltx'''<br> | ||
Строка 12: | Строка 9: | ||
'''gamedata\scripts\bind_stalker.script'''<br> | '''gamedata\scripts\bind_stalker.script'''<br> | ||
− | + | В первую очередь лезем в файл w_bolt.ltx, там самая первая строка, которая за что-то отвечает: | |
<code> | <code> | ||
[bolt]:identity_immunities | [bolt]:identity_immunities | ||
</code> | </code> | ||
− | + | Меняем её вот так: | |
<code> | <code> | ||
[old_bolt]:identity_immunities | [old_bolt]:identity_immunities | ||
</code> | </code> | ||
− | + | Сохраняем и закрываем. Затем, открываем файл w_rgd5.ltx, спускаемся в самый низ и пишем это: | |
− | + | ||
<ini> | <ini> | ||
[bolt]:grenade_rgd5 | [bolt]:grenade_rgd5 | ||
visual = weapons\bolt\wpn_bolt.ogf | visual = weapons\bolt\wpn_bolt.ogf | ||
− | inv_name = " | + | inv_name = "Болт" |
− | inv_name_short = " | + | inv_name_short = "Болт" |
inv_weight = 0.05 | inv_weight = 0.05 | ||
cost = 1 | cost = 1 | ||
Строка 33: | Строка 29: | ||
hud = bolt_hud2 | hud = bolt_hud2 | ||
ef_weapon_type = 1 | ef_weapon_type = 1 | ||
− | description = " | + | description = "Обычный металлический болт" |
destroy_time = 5000000;3500 | destroy_time = 5000000;3500 | ||
Строка 51: | Строка 47: | ||
frag_hit_impulse = 0 | frag_hit_impulse = 0 | ||
− | ; | + | ;звуки |
snd_explode = monsters\biting\def_0 ;rgd5_explode | snd_explode = monsters\biting\def_0 ;rgd5_explode | ||
snd_checkout = monsters\biting\def_0 | snd_checkout = monsters\biting\def_0 | ||
Строка 85: | Строка 81: | ||
</ini> | </ini> | ||
− | + | Подробно: | |
<ini> | <ini> | ||
− | [bolt]:grenade_rgd5 ;-- | + | [bolt]:grenade_rgd5 ;--секция с отсылкой на секцию grenade_rgd5 |
− | visual = weapons\bolt\wpn_bolt.ogf ;-- | + | visual = weapons\bolt\wpn_bolt.ogf ;--визуал, в данном случае модель болта |
− | inv_name = " | + | inv_name = "Болт" ;--название |
− | inv_name_short = " | + | inv_name_short = "Болт" ;--название болта лежащего на земле |
− | inv_weight = 0.05 ; | + | inv_weight = 0.05 ;вес |
− | cost = 1 ; | + | cost = 1 ;цена за штуку |
− | slot = 5 ;-- | + | slot = 5 ;--слот для болта |
− | hud = bolt_hud2 ;-- | + | hud = bolt_hud2 ;--ссылка на худ |
− | ef_weapon_type = 1 ; | + | ef_weapon_type = 1 ; тип оружия (не менять ни в коем случае, можно сломать двигло) |
− | description = " | + | description = "Обычный металлический болт" ;--описание предмета |
− | destroy_time = 5000000;3500 ; | + | destroy_time = 5000000;3500 ; лучше оставить как есть, а так это время через которое болт пропадёт |
attach_position_offset = -0.021,-0.075,0.0 | attach_position_offset = -0.021,-0.075,0.0 | ||
Строка 104: | Строка 100: | ||
attach_bone_name = | attach_bone_name = | ||
− | blast = 0 ; | + | blast = 0 ; мощность взрыва, так как это болт, пусть будет 0 |
− | blast_r = 0 ; | + | blast_r = 0 ; радиус взрыва |
− | blast_impulse = 0 ; | + | blast_impulse = 0 ; импульс от взрыва (отражается на дальности отлёта туши от места взрыва) |
;delete | ;delete | ||
blast_impulse_factor = 1 | blast_impulse_factor = 1 | ||
− | frags = 0 ; | + | frags = 0 ; кол-во осколков |
− | frags_r = 0 ; | + | frags_r = 0 ; радиус разлёта осколков |
− | frag_hit = 0 ; | + | frag_hit = 0 ; урон от 1 попавшего осколка |
− | frag_hit_impulse = 0 ; | + | frag_hit_impulse = 0 ; импульс от 1 попавшего осколка |
− | ; | + | ;звуки |
− | snd_explode = monsters\biting\def_0 ;rgd5_explode | + | snd_explode = monsters\biting\def_0 ;rgd5_explode звук взрыва |
− | snd_checkout = monsters\biting\def_0 ; | + | snd_checkout = monsters\biting\def_0 ;звук броска |
− | explode_particles = weapons\wg-hit-ground ; | + | explode_particles = weapons\wg-hit-ground ; партикл взрыва (в данном случае поставлен партикл ничего не показывающий) |
inv_grid_width = 1 | inv_grid_width = 1 | ||
Строка 125: | Строка 121: | ||
inv_grid_y = 6 | inv_grid_y = 6 | ||
− | light_color = 0.0,0.0,0.0 ; | + | light_color = 0.0,0.0,0.0 ;цвет освещения во время взрыва по RGB |
− | light_range = 0.0 ; | + | light_range = 0.0 ;насыщенность на сколько я понимаю |
− | light_time = 0.0 ; | + | light_time = 0.0 ;время подсветки |
− | [bolt_hud2] ; | + | [bolt_hud2] ;секция худа |
fire_point = 0.05, 0.0, 0.1 | fire_point = 0.05, 0.0, 0.1 | ||
fire_bone = bolt_0 | fire_bone = bolt_0 | ||
orientation = 0,0,0 | orientation = 0,0,0 | ||
position = 0,0,0 | position = 0,0,0 | ||
− | visual = weapons\bolt\wpn_bolt_hud.ogf ; | + | visual = weapons\bolt\wpn_bolt_hud.ogf ;Визуал болта в руках гг |
throw_point = 0,0.4,0.3 | throw_point = 0,0.4,0.3 | ||
Строка 149: | Строка 145: | ||
</ini> | </ini> | ||
− | + | Всё, сохраняем, закрываем. Этот файл нам больше не нужен. Теперь лезем в файл items.ltx и в конец пишем: | |
− | + | ||
− | + | ||
<ini> | <ini> | ||
[bolt_box]:identity_immunities | [bolt_box]:identity_immunities | ||
Строка 164: | Строка 158: | ||
;script_binding = escape_dialog.use_snd | ;script_binding = escape_dialog.use_snd | ||
− | inv_name = " | + | inv_name = "Коробка болтов" |
− | inv_name_short = " | + | inv_name_short = "Коробка болтов" |
− | description = " | + | description = "Коробка с болтами, содержит в себе 25 болтов." |
inv_weight = 1.35 | inv_weight = 1.35 | ||
can_trade = on | can_trade = on | ||
Строка 201: | Строка 195: | ||
</ini> | </ini> | ||
− | + | Сохраняем, закрываем. Дальше мы должны открыть файл escape_dialog.script В конец файла внесём свою функцию: | |
− | + | ||
− | + | ||
− | + | ||
<lua> | <lua> | ||
function use_bolt_box_oz(obj) | function use_bolt_box_oz(obj) | ||
if obj ~= nil then | if obj ~= nil then | ||
if obj:section() == "bolt_box" then | if obj:section() == "bolt_box" then | ||
− | for i = 1, 25 do -- | + | for i = 1, 25 do --Совершаем спавн 25 раз |
alife():create("bolt", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | alife():create("bolt", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) | ||
end | end | ||
Строка 217: | Строка 208: | ||
</lua> | </lua> | ||
− | + | Подробно: | |
<lua> | <lua> | ||
− | function use_bolt_box_oz(obj) -- | + | function use_bolt_box_oz(obj) --функция с названием use_bolt_box_oz(obj) |
if obj ~= nil then | if obj ~= nil then | ||
− | if obj:section() == "bolt_box" then -- | + | if obj:section() == "bolt_box" then -- объект который должны мы использовать (коробка болтов) |
− | for i = 1, 25 do -- | + | for i = 1, 25 do --Совершаем спавн 25 раз |
− | alife():create("bolt", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) -- | + | alife():create("bolt", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) --спавн болта в инвентарь гг |
− | end -- | + | end -- окончание цикла for i =... |
− | end -- | + | end --окончание if |
− | end -- | + | end --окончание if |
− | end -- | + | end --окончание функции |
</lua> | </lua> | ||
− | + | В этом же файле находим функцию give_weapon_to_actor и вносим такие строчки перед end: | |
<code> | <code> | ||
Строка 238: | Строка 229: | ||
</code> | </code> | ||
− | + | В этом файле тоже всё. Теперь ломимся в bind_stalker.script Пишем в функцию function actor_binder:net_destroy() это: | |
− | + | ||
− | + | ||
<code> | <code> | ||
Строка 246: | Строка 235: | ||
</code> | </code> | ||
− | + | И в функцию actor_binder:reinit() это: | |
<code> | <code> | ||
Строка 252: | Строка 241: | ||
</code> | </code> | ||
− | + | В конец файла добавляем нашу функцию: | |
<lua> | <lua> | ||
Строка 260: | Строка 249: | ||
</lua> | </lua> | ||
− | + | Подробно: | |
<lua> | <lua> | ||
− | function actor_binder:use_object(obj) -- function | + | function actor_binder:use_object(obj) -- function название нашей функции |
− | escape_dialog.use_bolt_box_oz(obj) -- | + | escape_dialog.use_bolt_box_oz(obj) --вызов функции use_bolt_box_oz(obj) из файла escape_dialog.script |
− | end -- | + | end --окончание функции |
</lua> | </lua> | ||
− | + | Ну вот и всё, сохраняем и закрываем данный файл. Заходим в игру, и, если я нигде не ошибся, наблюдаем не бесконечный болт в начале игры. Чтобы болт был не один, идите к Волку, он даст вам ещё 1 болт и целую коробку болтов. Чтобы изъять болты из коробки, просто воспользуйтесь ей, кликните по ней 2 раза. Надеюсь, что статья оказалась вам полезна. | |
− | + | ||
− | + | == Автор == | |
+ | |||
+ | == [[IGN]] == | ||
− | + | [[Sergey:]] | |
+ | Приношу свои извинения за испорченную станицу. На деюсь восстановил всё как было ранее. Отдельно приношу извинения IGN за доставленные неудобства. | ||
− | [[ | + | [[Категория: Скрипты]] |
Текущая версия на 20:27, 30 октября 2019
Итак, тут я опишу как реализовать болты которые будут заканчиваться. Сразу пишу о том, что будем делать основываясь на гранатах, то есть не исключено, что болт может рвануть (не нанеся урон и только через продолжительный участок времени, так что гг навряд ли будет по близости.), а также, если бросим болт под ноги НПСу, он шуганётся, как от грены (это на самом деле не плохо, если отключены глаза на затылке, можно попробовать их таким образом отвлечь).
Итак, приступим.
Нам потребуются такие файлы:
gamedata\config\weapons\w_rgd5.ltx
gamedata\config\weapons\w_bolt.ltx
gamedata\config\misc\items.ltx
gamedata\scripts\escape_dialog.script
gamedata\scripts\bind_stalker.script
В первую очередь лезем в файл w_bolt.ltx, там самая первая строка, которая за что-то отвечает:
[bolt]:identity_immunities
Меняем её вот так:
[old_bolt]:identity_immunities
Сохраняем и закрываем. Затем, открываем файл w_rgd5.ltx, спускаемся в самый низ и пишем это:
[bolt]:grenade_rgd5 visual = weapons\bolt\wpn_bolt.ogf inv_name = "Болт" inv_name_short = "Болт" inv_weight = 0.05 cost = 1 slot = 5 hud = bolt_hud2 ef_weapon_type = 1 description = "Обычный металлический болт" destroy_time = 5000000;3500 attach_position_offset = -0.021,-0.075,0.0 attach_angle_offset = 0,0,0 attach_bone_name = blast = 0 blast_r = 0 blast_impulse = 0 ;delete blast_impulse_factor = 1 frags = 0 frags_r = 0 frag_hit = 0 frag_hit_impulse = 0 ;звуки snd_explode = monsters\biting\def_0 ;rgd5_explode snd_checkout = monsters\biting\def_0 explode_particles = weapons\wg-hit-ground inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 22 inv_grid_y = 6 light_color = 0.0,0.0,0.0 light_range = 0.0 light_time = 0.0 [bolt_hud2] fire_point = 0.05, 0.0, 0.1 fire_bone = bolt_0 orientation = 0,0,0 position = 0,0,0 visual = weapons\bolt\wpn_bolt_hud.ogf throw_point = 0,0.4,0.3 throw_dir = 0,0,0 anim_show = draw3 anim_hide = holster_0 anim_idle = idle_0 anim_playing = idle_01 anim_throw_begin = attack_0_begin anim_throw_idle = attack_0_idle anim_throw_act = attack_0_act anim_throw_end = attack_0_end
Подробно:
[bolt]:grenade_rgd5 ;--секция с отсылкой на секцию grenade_rgd5 visual = weapons\bolt\wpn_bolt.ogf ;--визуал, в данном случае модель болта inv_name = "Болт" ;--название inv_name_short = "Болт" ;--название болта лежащего на земле inv_weight = 0.05 ;вес cost = 1 ;цена за штуку slot = 5 ;--слот для болта hud = bolt_hud2 ;--ссылка на худ ef_weapon_type = 1 ; тип оружия (не менять ни в коем случае, можно сломать двигло) description = "Обычный металлический болт" ;--описание предмета destroy_time = 5000000;3500 ; лучше оставить как есть, а так это время через которое болт пропадёт attach_position_offset = -0.021,-0.075,0.0 attach_angle_offset = 0,0,0 attach_bone_name = blast = 0 ; мощность взрыва, так как это болт, пусть будет 0 blast_r = 0 ; радиус взрыва blast_impulse = 0 ; импульс от взрыва (отражается на дальности отлёта туши от места взрыва) ;delete blast_impulse_factor = 1 frags = 0 ; кол-во осколков frags_r = 0 ; радиус разлёта осколков frag_hit = 0 ; урон от 1 попавшего осколка frag_hit_impulse = 0 ; импульс от 1 попавшего осколка ;звуки snd_explode = monsters\biting\def_0 ;rgd5_explode звук взрыва snd_checkout = monsters\biting\def_0 ;звук броска explode_particles = weapons\wg-hit-ground ; партикл взрыва (в данном случае поставлен партикл ничего не показывающий) inv_grid_width = 1 inv_grid_height = 1 inv_grid_x = 22 inv_grid_y = 6 light_color = 0.0,0.0,0.0 ;цвет освещения во время взрыва по RGB light_range = 0.0 ;насыщенность на сколько я понимаю light_time = 0.0 ;время подсветки [bolt_hud2] ;секция худа fire_point = 0.05, 0.0, 0.1 fire_bone = bolt_0 orientation = 0,0,0 position = 0,0,0 visual = weapons\bolt\wpn_bolt_hud.ogf ;Визуал болта в руках гг throw_point = 0,0.4,0.3 throw_dir = 0,0,0 anim_show = draw3 anim_hide = holster_0 anim_idle = idle_0 anim_playing = idle_01 anim_throw_begin = attack_0_begin anim_throw_idle = attack_0_idle anim_throw_act = attack_0_act anim_throw_end = attack_0_end
Всё, сохраняем, закрываем. Этот файл нам больше не нужен. Теперь лезем в файл items.ltx и в конец пишем:
[bolt_box]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "food and drugs\kolbasa" ;$prefetch = 32 class = II_FOOD cform = skeleton visual = physics\box\box_metall_01.ogf radius = 1 ;script_binding = escape_dialog.use_snd inv_name = "Коробка болтов" inv_name_short = "Коробка болтов" description = "Коробка с болтами, содержит в себе 25 болтов." inv_weight = 1.35 can_trade = on inv_grid_width = 2 inv_grid_height = 1 inv_grid_x = 8 inv_grid_y = 18 cost = 30 ; eatable item eat_health = 0 eat_satiety = 0 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 attach_angle_offset = 0.440521, 1.378287, -0.644026 attach_position_offset = 0.104196, -0.010821, 0.076969 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
Сохраняем, закрываем. Дальше мы должны открыть файл escape_dialog.script В конец файла внесём свою функцию:
function use_bolt_box_oz(obj) if obj ~= nil then if obj:section() == "bolt_box" then for i = 1, 25 do --Совершаем спавн 25 раз alife():create("bolt", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end end end end
Подробно:
function use_bolt_box_oz(obj) --функция с названием use_bolt_box_oz(obj) if obj ~= nil then if obj:section() == "bolt_box" then -- объект который должны мы использовать (коробка болтов) for i = 1, 25 do --Совершаем спавн 25 раз alife():create("bolt", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) --спавн болта в инвентарь гг end -- окончание цикла for i =... end --окончание if end --окончание if end --окончание функции
В этом же файле находим функцию give_weapon_to_actor и вносим такие строчки перед end:
dialogs.relocate_item_section(trader, "bolt_box", "in")
dialogs.relocate_item_section(trader, "bolt", "in")
В этом файле тоже всё. Теперь ломимся в 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_bolt_box_oz(obj) end
Подробно:
function actor_binder:use_object(obj) -- function название нашей функции escape_dialog.use_bolt_box_oz(obj) --вызов функции use_bolt_box_oz(obj) из файла escape_dialog.script end --окончание функции
Ну вот и всё, сохраняем и закрываем данный файл. Заходим в игру, и, если я нигде не ошибся, наблюдаем не бесконечный болт в начале игры. Чтобы болт был не один, идите к Волку, он даст вам ещё 1 болт и целую коробку болтов. Чтобы изъять болты из коробки, просто воспользуйтесь ей, кликните по ней 2 раза. Надеюсь, что статья оказалась вам полезна.
Автор
IGN
Sergey: Приношу свои извинения за испорченную станицу. На деюсь восстановил всё как было ранее. Отдельно приношу извинения IGN за доставленные неудобства.