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

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

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

Перейти к: навигация, поиск
(Мы платим за лайки! - Оплата по требованию!)
м (Откат правок 5.228.2.203 (обсуждение) к версии 82.145.210.174)
Строка 1: Строка 1:
Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.  
+
[[Категория:Скрипты]]Этим методом можно добавить в '''Сталкер ТЧ''' тайник, который вы сами сможете заложить там, где вам угодно.
+
 
Именно для этого мы и набираем удалённых сотрудников, которые будут выполнять работу, то есть ставить лайки и получить за это деньги.  
+
'''Итак, приступим: '''
   
+
Нам потребуются:
Чтобы стать нашим удалённым сотрудником и начать ставить лайки, зарабатывая при этом 45 рублей за 1 поставленный лайк,  
+
Два файла для добавления функции установки тайника (эти файлы обязательны):
+
1. '''bind_stalker.SCRIPT''' ('''gamedata/scripts''')
достаточно просто зарегистрироваться на нашем сервисе. > www.like.zarplatt.ru <
+
2. '''devices.LTX''' ('''gamedata/config/misc''')
 +
Один файл, чтобы получить рюкзак в игре (в моём случае, Сидорович торгует такими рюкзаками):
 +
'''Trade_trader.LTX''' ('''gamedata/config/misc''')
 +
 
 +
'''Первым делом откройте файл bind_stalker.SCRIPT и найдите следующие строки:'''
 +
 
 +
<lua>
 +
function actor_binder:on_item_drop (obj)
 +
    level_tasks.proceed(self.object)
 +
    --game_stats.update_drop_item (obj, self.object)
 +
end</lua>
 +
 
 +
 
 +
После строк
 +
 
 +
<code>--game_stats.update_drop_item (obj, self.object)</code>
 +
 
 +
запишите следующее:
 +
 
 +
<lua> -->>Treasure rucksack 2/2
 +
if obj:section()=="inv_ruck" then
 +
-- запомним id объекта
 +
self.rr_id=obj:id()
 +
end
 +
--<<</lua>
 +
 
 +
Итог:
 +
 
 +
<lua>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</lua>
 +
 
 +
Далее найдите строки
 +
 
 +
<code> game_stats.update (delta, self.object)</code>
 +
 
 +
И после них запишите
 +
 
 +
<lua> -->>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
 +
--<<</lua>
 +
 
 +
Итог:
 +
 
 +
<lua>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
 +
--<<</lua>
 +
 
 +
Всё! На это работа с '''bind_stalker.SCRIPT''' завершена.
 +
 
 +
Переходим к файлу '''devices.LTX'''.
 +
В самом конце файла напишите следующее:
 +
 
 +
<ini>[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</ini>
 +
 
 +
Обратите внимание на строку cost = 800. Это цена. Вы можете поставить какую угодно.
 +
 
 +
Всё. Осталось прописать рюкзак в ассортимент Сидоровича.
 +
Откройте файл '''Trade_trader.LTX'''. Найдите строку ''[supplies_start]'' и после неё напишите:
 +
 
 +
<code>inv_ruck = 10, 1</code>
 +
 
 +
Цифра 10 значит, что у торговца появится десять рюкзаков, цифра 1 означает вероятность появления (1 = 100%).
 +
Готово! Заходим в игру, тестируем.
 +
 
 +
'''ПРИМЕЧАНИЕ. Иконка рюкзака, название и описание в инвентаре будет отображаться некорректно. Редактируйте текстуру в файле ui_icon_equipment.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) и в самом её начале добавляем такой код:
 +
<lua>-- если это наш тайник и он пустой, т.е. мы забрали из него последний предмет, то...
 +
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</lua>
 +
Всё. Теперь, когда мы забираем все вещи из рюкзака-тайника, то он перемещается к ГГ в инвентарь.
 +
 
 +
 
 +
Были использованы материалы из мода FreeplayStart.
 +
 
 +
Статья написана Sanyok_Shevcov, Самара.
 +
 
 +
Дополнил: naxac

Версия 21:58, 28 декабря 2016

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

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