(SoC)
Этим методом можно добавить в Сталкер ТЧ тайник, который вы сами сможете заложить там, где вам угодно.
Итак, приступим: Нам потребуются: Два файла для добавления функции установки тайника (эти файлы обязательны): 1. bind_stalker.SCRIPT (gamedata/scripts) 2. devices.LTX (gamedata/config/misc) Один файл, чтобы получить рюкзак в игре (в моём случае, Сидорович торгует такими рюкзаками): Trade_trader.LTX (gamedata/config/misc)
Первым делом откройте файл bind_stalker.SCRIPT и найдите следующие строки:
function actor_binder:on_item_drop (obj)
level_tasks.proceed(self.object)
--game_stats.update_drop_item (obj, self.object)
end
После строк
--game_stats.update_drop_item (obj, self.object)
запишите следующее:
-->>Treasure rucksack 2/2
if obj:section()=="inv_ruck" then
-- запомним id объекта
self.rr_id=obj:id()
end
--<<
Итог:
function actor_binder:on_item_drop (obj)
level_tasks.proceed(self.object)
--game_stats.update_drop_item (obj, self.object)
-->>Treasure rucksack 2/2
if obj:section()=="inv_ruck" then
-- запомним id объекта
self.rr_id=obj:id()
end
--<<
end
Далее найдите строки
game_stats.update (delta, self.object)
И после них запишите
-->>Treasure rucksack 1/2
if self.rr_id~=nil then
-- пытаемся получить объект по id
local se_obj=alife():object(self.rr_id)
-- проверяем, что объекта нет
if se_obj==nil or se_obj:section_name()~="inv_ruck" then
local ruck=alife():create("active_ruck", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
level.map_add_object_spot_ser( ruck.id , "red_location", "%c[255,238,155,23]Моя нычка для хабара")
news_manager.send_tip(db.actor, "Тайник заложен.", nil, nil, 5000)
end
-- сбросим переменную
self.rr_id=nil
end
--<<
Итог:
function actor_binder:update(delta)
object_binder.update(self, delta)
-- DEBUG slowdown
-- slowdown.update()
local time = time_global()
game_stats.update (delta, self.object)
-->>Treasure rucksack 1/2
if self.rr_id~=nil then
-- пытаемся получить объект по id
local se_obj=alife():object(self.rr_id)
-- проверяем, что объекта нет
if se_obj==nil or se_obj:section_name()~="inv_ruck" then
local ruck=alife():create("active_ruck", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
level.map_add_object_spot_ser( ruck.id , "red_location", "%c[255,238,155,23]Моя нычка для хабара")
news_manager.send_tip(db.actor, "Тайник заложен.", nil, nil, 5000)
end
-- сбросим переменную
self.rr_id=nil
end
--<<
Всё! На это работа с bind_stalker.SCRIPT завершена.
Переходим к файлу devices.LTX. В самом конце файла напишите следующее:
[inv_ruck]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "food and drugs\antirad"
$prefetch = 32
class = II_ANTIR
cform = skeleton
visual = equipments\item_rukzak
description = enc_tre_ruck
inv_weight = 0.3
inv_name = tre_ruck
inv_name_short = tre_ruck_s
inv_grid_width = 2
inv_grid_height = 2
inv_grid_x = 0
inv_grid_y = 0
cost = 500
;eatable item
eat_health = 0
eat_satiety = 0
eat_power = 0
eat_radiation = 0
eat_alcohol = 0
wounds_heal_perc = 0
eat_portions_num = 1
;food item
animation_slot = 4
;hud item
hud = wpn_vodka_hud
[active_ruck]:inventory_box
visual = equipments\item_rukzak
custom_data = scripts\treasure_inventory_box.ltx
radius = 1
Обратите внимание на строку cost = 800. Это цена. Вы можете поставить какую угодно.
ПРИМЕЧАНИЕ. Иконка рюкзака, название и описание в инвентаре будет отображаться некорректно. Редактируйте текстуру в файле ui_inventory.dds (gamedata/textures/ui), координаты x,y в devices.LTX, описание в файле string_table_enc_equipment (gamedata/config/text/rus).
Как забрать рюкзак назад в инвентарь, если тайник нам больше не нужен? Открываем файл bind_stalker.script, находим функцию actor_binder:take_item_from_box(box, item) и в самом её начале добавляем такой код:
-- если это наш тайник и он пустой, т.е. мы забрали из него последний предмет, то...
if box:section() == "active_ruck" and box:is_inv_box_empty() then
level.start_stop_menu(level.main_input_receiver(), true) -- закрываем окно "обыскивания тайника"
level.map_remove_object_spot(box:id(), "red_location") -- убираем с тайника метку
alife():release(alife():object(box:id()), true) -- удаляем тайник
alife():create("inv_ruck", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) -- спавним рюкзак в инвентарь
end
Всё. Теперь, когда мы забираем все вещи из рюкзака-тайника, то он перемещается к ГГ в инвентарь.
(Если что то не так, сильно не ругайте, сделал всё что мог. Ну или вы что то не так сделали.)
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Комментарии 4