Пустой рюкзак для создания своего тайника — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Пустой рюкзак для создания своего тайника — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(оформление)
м (Откат правок 77.37.156.108 (обсуждение) к версии OlegatoR)
 
(не показаны 13 промежуточные версии 10 участников)
Строка 1: Строка 1:
[[Категория:Скрипты]]Этим методом можно добавить в '''Сталкер ТЧ''' тайник, который вы сами сможете заложить там, где вам угодно.
+
Пустой рюкзак для создания своего тайника
  
'''Итак, приступим: '''
+
Этим методом можно добавить в Сталкер ТЧ тайник, который вы сами сможете заложить там, где вам угодно.
Нам потребуются:
+
Два файла для добавления функции установки тайника (эти файлы обязательны):
+
1. '''bind_stalker.SCRIPT''' ('''gamedata/scripts''')
+
2. '''devices.LTX''' ('''gamedata/config/misc''')
+
Один файл, чтобы получить рюкзак в игре (в моём случае, Сидорович торгует такими рюкзаками):
+
'''Trade_trader.LTX''' ('''gamedata/config/misc''')
+
  
'''Первым делом откройте файл bind_stalker.SCRIPT и найдите следующие строки:'''
+
Итак, приступим: Нам потребуются: Два файла для добавления функции установки тайника (эти файлы обязательны):
 +
1. bind_stalker.SCRIPT (gamedata/scripts)
 +
2. devices.LTX (gamedata/config/misc)
 +
Один файл, чтобы получить рюкзак в игре (в моём случае, Сидорович торгует такими рюкзаками): Trade_trader.LTX (gamedata/config/misc)
  
<lua>
+
Первым делом откройте файл bind_stalker.SCRIPT и найдите следующие строки:
 +
 
function actor_binder:on_item_drop (obj)
 
function actor_binder:on_item_drop (obj)
 
     level_tasks.proceed(self.object)
 
     level_tasks.proceed(self.object)
 
     --game_stats.update_drop_item (obj, self.object)
 
     --game_stats.update_drop_item (obj, self.object)
end</lua>
+
end
 
+
  
 
После строк
 
После строк
 
+
--game_stats.update_drop_item (obj, self.object)
<code>--game_stats.update_drop_item (obj, self.object)</code>
+
запишите следующее:
 
+
-->>Treasure rucksack 2/2
запишите следующее:
+
 
+
<lua> -->>Treasure rucksack 2/2
+
 
if obj:section()=="inv_ruck" then
 
if obj:section()=="inv_ruck" then
 
-- запомним id объекта
 
-- запомним id объекта
 
self.rr_id=obj:id()
 
self.rr_id=obj:id()
 
end
 
end
--<<</lua>
+
--<<
 
+
 
Итог:
 
Итог:
 
+
function actor_binder:on_item_drop (obj)
<lua>function actor_binder:on_item_drop (obj)
+
 
     level_tasks.proceed(self.object)
 
     level_tasks.proceed(self.object)
 
     --game_stats.update_drop_item (obj, self.object)
 
     --game_stats.update_drop_item (obj, self.object)
Строка 42: Строка 34:
 
end
 
end
 
--<<
 
--<<
end</lua>
+
end
 
+
 
Далее найдите строки
 
Далее найдите строки
 
+
game_stats.update (delta, self.object)
<code> game_stats.update (delta, self.object)</code>
+
 
+
 
И после них запишите
 
И после них запишите
 
+
-->>Treasure rucksack 1/2
<lua> -->>Treasure rucksack 1/2
+
 
if self.rr_id~=nil then
 
if self.rr_id~=nil then
 
-- пытаемся получить объект по id
 
-- пытаемся получить объект по id
Строка 63: Строка 51:
 
self.rr_id=nil
 
self.rr_id=nil
 
end
 
end
--<<</lua>
+
--<<
 
+
 
Итог:
 
Итог:
 
+
function actor_binder:update(delta)
<lua>function actor_binder:update(delta)
+
 
object_binder.update(self, delta)
 
object_binder.update(self, delta)
 
+
 
-- DEBUG slowdown
 
-- DEBUG slowdown
 
-- slowdown.update()
 
-- slowdown.update()
 
+
 
local time = time_global()
 
local time = time_global()
+
 
game_stats.update (delta, self.object)
 
game_stats.update (delta, self.object)
 
+
 
-->>Treasure rucksack 1/2
 
-->>Treasure rucksack 1/2
 
if self.rr_id~=nil then
 
if self.rr_id~=nil then
Строка 90: Строка 76:
 
self.rr_id=nil
 
self.rr_id=nil
 
end
 
end
--<<</lua>
+
--<<
 +
Всё! На это работа с bind_stalker.SCRIPT завершена.
  
Всё! На это работа с '''bind_stalker.SCRIPT''' завершена.
+
Переходим к файлу devices.LTX.  
 
+
Переходим к файлу '''devices.LTX'''.
+
 
В самом конце файла напишите следующее:
 
В самом конце файла напишите следующее:
 
+
[inv_ruck]:identity_immunities
<ini>[inv_ruck]:identity_immunities
+
 
GroupControlSection = spawn_group
 
GroupControlSection = spawn_group
 
discovery_dependency =
 
discovery_dependency =
Строка 106: Строка 90:
 
visual          = equipments\item_rukzak
 
visual          = equipments\item_rukzak
 
description  = enc_tre_ruck
 
description  = enc_tre_ruck
 
+
 
inv_weight  = 0.3
 
inv_weight  = 0.3
 
inv_name  = tre_ruck
 
inv_name  = tre_ruck
 
inv_name_short  = tre_ruck_s
 
inv_name_short  = tre_ruck_s
 
+
 
inv_grid_width = 2
 
inv_grid_width = 2
 
inv_grid_height = 2
 
inv_grid_height = 2
Строка 116: Строка 100:
 
inv_grid_y = 0
 
inv_grid_y = 0
 
cost = 500
 
cost = 500
 
+
 
;eatable item
 
;eatable item
 
eat_health = 0
 
eat_health = 0
Строка 125: Строка 109:
 
wounds_heal_perc = 0
 
wounds_heal_perc = 0
 
eat_portions_num = 1
 
eat_portions_num = 1
 
+
 
;food item
 
;food item
 
animation_slot  = 4
 
animation_slot  = 4
 
+
 
;hud item
 
;hud item
 
hud = wpn_vodka_hud
 
hud = wpn_vodka_hud
 
+
 
[active_ruck]:inventory_box
 
[active_ruck]:inventory_box
 
visual          = equipments\item_rukzak
 
visual          = equipments\item_rukzak
 
custom_data    = scripts\treasure_inventory_box.ltx
 
custom_data    = scripts\treasure_inventory_box.ltx
radius = 1</ini>
+
radius = 1
 
+
 
Обратите внимание на строку cost = 800. Это цена. Вы можете поставить какую угодно.
 
Обратите внимание на строку cost = 800. Это цена. Вы можете поставить какую угодно.
  
Всё. Осталось прописать рюкзак в ассортимент Сидоровича.
+
Всё. Осталось прописать рюкзак в ассортимент Сидоровича.  
Откройте файл '''Trade_trader.LTX'''. Найдите строку ''[supplies_start]'' и после неё напишите:
+
Откройте файл Trade_trader.LTX. Найдите строку [supplies_start] и после неё напишите:
 +
inv_ruck = 10, 1
 +
Цифра 10 значит, что у торговца появится десять рюкзаков, цифра 1 означает вероятность появления (1 = 100%). Готово! Заходим в игру, тестируем.
 +
ПРИМЕЧАНИЕ. Иконка рюкзака, название и описание в инвентаре будет отображаться некорректно. Редактируйте текстуру в файле ui_inventory.dds (gamedata/textures/ui), координаты x,y в devices.LTX, описание в файле string_table_enc_equipment (gamedata/config/text/rus).
  
<code>inv_ruck = 10, 1</code>
+
Как забрать рюкзак назад в инвентарь, если тайник нам больше не нужен?
 
+
Открываем файл bind_stalker.script, находим функцию actor_binder:take_item_from_box(box, item) и в самом её начале добавляем такой код:
Цифра 10 значит, что у торговца появится десять рюкзаков, цифра 1 означает вероятность появления (1 = 100%).
+
-- если это наш тайник и он пустой, т.е. мы забрали из него последний предмет, то...
Готово! Заходим в игру, тестируем.
+
if box:section() == "active_ruck" and box:is_inv_box_empty() then
 
+
    level.start_stop_menu(level.main_input_receiver(), true)  -- закрываем окно "обыскивания тайника"
'''ПРИМЕЧАНИЕ. Иконка рюкзака, название и описание в инвентаре будет отображаться некорректно. Редактируйте текстуру в файле ui_inventory.dds (gamedata/textures/ui), координаты x,y в devices.LTX, описание в файле string_table_enc_equipment (gamedata/config/text/rus).'''
+
    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
 +
Всё. Теперь, когда мы забираем все вещи из рюкзака-тайника, то он перемещается к ГГ в инвентарь.
  
 
Были использованы материалы из мода FreeplayStart.
 
Были использованы материалы из мода FreeplayStart.
 
 
Статья написана Sanyok_Shevcov, Самара.
 
Статья написана Sanyok_Shevcov, Самара.
 +
Дополнил: naxac

Текущая версия на 21:39, 29 января 2017

Пустой рюкзак для создания своего тайника

Этим методом можно добавить в Сталкер ТЧ тайник, который вы сами сможете заложить там, где вам угодно.

Итак, приступим: Нам потребуются: Два файла для добавления функции установки тайника (эти файлы обязательны): 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. Это цена. Вы можете поставить какую угодно.

Всё. Осталось прописать рюкзак в ассортимент Сидоровича. Откройте файл Trade_trader.LTX. Найдите строку [supplies_start] и после неё напишите: inv_ruck = 10, 1 Цифра 10 значит, что у торговца появится десять рюкзаков, цифра 1 означает вероятность появления (1 = 100%). Готово! Заходим в игру, тестируем. ПРИМЕЧАНИЕ. Иконка рюкзака, название и описание в инвентаре будет отображаться некорректно. Редактируйте текстуру в файле 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 Всё. Теперь, когда мы забираем все вещи из рюкзака-тайника, то он перемещается к ГГ в инвентарь.

Были использованы материалы из мода FreeplayStart. Статья написана Sanyok_Shevcov, Самара. Дополнил: naxac

Другие места
LANGUAGE