<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stalkerin.gameru.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DanilPankovski</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DanilPankovski"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/DanilPankovski"/>
		<updated>2026-06-14T09:49:16Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T21:40:41Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: /* Текстуры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, сделать их видимыми и юзабельными, а так же, добавить новые.&lt;br /&gt;
&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь. &amp;lt;br /&amp;gt;&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты и конфиги за это отвечают. &amp;lt;br /&amp;gt;&lt;br /&gt;
Ну что-же, приступим к работе.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы будут редактироваться. &amp;lt;br /&amp;gt;&lt;br /&gt;
'''scripts\bind_stalker.script''' &amp;lt;br /&amp;gt;&lt;br /&gt;
'''scripts\hidden_slots.script''' - новый файл! &amp;lt;br /&amp;gt;&lt;br /&gt;
'''config\misc\items.ltx''' &amp;lt;br /&amp;gt;&lt;br /&gt;
'''textures\ui\ui_inventory.dds''' - по желанию .&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл '''hidden_slots.script''', в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{825,300},{825,390},{825,480}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно указать наш файл в bind_stalker. После&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_info(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Чтобы получилось&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
        hidden_slots.on_info(info_id)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Далее после&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_item_drop(obj)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
чтобы получилось так&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
    hidden_slots.on_item_drop(obj)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ну и последняя вписка после &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вот такая&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.update()&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
И выходит&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end		&lt;br /&gt;
   hidden_slots.update()&lt;br /&gt;
end		&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Со скриптами закончили, осталось за малым.&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Перейдем к созданию так называемых &amp;quot;фейковых&amp;quot; предметов, которвые указаны в строчках нашего скрипта&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, в конфиге и скрипте предметы должны называться одинаково, так-как скрипт отсылается к именно этим айтемам.&lt;br /&gt;
Добавляем ниже написанное в '''config\misc\items.ltx''' в самый конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти предметы отличаются от оригинала, они служат лишь для того, чтобы отметить, лежит у нас бинокль или нож в слоте, или нет, и являются обыкновенными айтемами.&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Если у вас стоят оригинальные текстуры, наши слоты находятся немного левее ГГ в костюме, сверху вниз.&lt;br /&gt;
&lt;br /&gt;
===Авторы===&lt;br /&gt;
'''DanilPankovski''' - Создатель статьи, подробный разбор. &amp;lt;br /&amp;gt;&lt;br /&gt;
'''Charsi''' - Создатель скрипта.&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T21:38:29Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, сделать их видимыми и юзабельными, а так же, добавить новые.&lt;br /&gt;
&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь. &amp;lt;br /&amp;gt;&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты и конфиги за это отвечают. &amp;lt;br /&amp;gt;&lt;br /&gt;
Ну что-же, приступим к работе.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы будут редактироваться. &amp;lt;br /&amp;gt;&lt;br /&gt;
'''scripts\bind_stalker.script''' &amp;lt;br /&amp;gt;&lt;br /&gt;
'''scripts\hidden_slots.script''' - новый файл! &amp;lt;br /&amp;gt;&lt;br /&gt;
'''config\misc\items.ltx''' &amp;lt;br /&amp;gt;&lt;br /&gt;
'''textures\ui\ui_inventory.dds''' - по желанию .&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл '''hidden_slots.script''', в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{825,300},{825,390},{825,480}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно указать наш файл в bind_stalker. После&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_info(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Чтобы получилось&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
        hidden_slots.on_info(info_id)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Далее после&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_item_drop(obj)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
чтобы получилось так&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
    hidden_slots.on_item_drop(obj)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ну и последняя вписка после &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вот такая&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.update()&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
И выходит&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end		&lt;br /&gt;
   hidden_slots.update()&lt;br /&gt;
end		&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Со скриптами закончили, осталось за малым.&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Перейдем к созданию так называемых &amp;quot;фейковых&amp;quot; предметов, которвые указаны в строчках нашего скрипта&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, в конфиге и скрипте предметы должны называться одинаково, так-как скрипт отсылается к именно этим айтемам.&lt;br /&gt;
Добавляем ниже написанное в '''config\misc\items.ltx''' в самый конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти предметы отличаются от оригинала, они служат лишь для того, чтобы отметить, лежит у нас бинокль или нож в слоте, или нет, и являются обыкновенными айтемами.&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds''' &amp;lt;br /&amp;gt;&lt;br /&gt;
Если у вас стоят оригинальные текстуры, наши слоты находятся немного левее гг в костюме, в столбик.&lt;br /&gt;
===Авторы===&lt;br /&gt;
'''DanilPankovski''' - Создатель статьи, подробный разбор. &amp;lt;br /&amp;gt;&lt;br /&gt;
'''Charsi''' - Создатель скрипта.&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T18:18:26Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: /* ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ГОТОВА НА 100%===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{825,300},{825,390},{825,480}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно указать наш файл в bind_stalker. После&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_info(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Чтобы получилось&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
        hidden_slots.on_info(info_id)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Далее после&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_item_drop(obj)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
чтобы получилось так&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
    hidden_slots.on_item_drop(obj)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ну и последняя вписка после &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вот такая&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.update()&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
И выходит&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end		&lt;br /&gt;
   hidden_slots.update()&lt;br /&gt;
end		&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Со скриптами закончили, осталось за малым.&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Перейдем к созданию так называемых &amp;quot;фейковых&amp;quot; предметов, которвые указаны в строчках нашего скрипта&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, в конфиге и скрипте предметы должны называться одинаково, так-как скрипт отсылается к именно этим айтемам.&lt;br /&gt;
Добавляем ниже написанное в '''config\misc\items.ltx''' в самый конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти предметы отличаются от оригинала, они служат лишь для того, чтобы отметить, лежит у нас бинокль или нож в слоте, или нет, и являются обыкновенными айтемами.&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds'''&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T18:15:39Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: /* Скрипты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{825,300},{825,390},{825,480}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно указать наш файл в bind_stalker. После&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_info(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Чтобы получилось&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
        hidden_slots.on_info(info_id)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Далее после&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_item_drop(obj)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
чтобы получилось так&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:on_item_drop (obj)&lt;br /&gt;
    level_tasks.proceed(self.object)&lt;br /&gt;
    --game_stats.update_drop_item (obj, self.object)&lt;br /&gt;
    hidden_slots.on_item_drop(obj)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ну и последняя вписка после &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вот такая&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.update()&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
И выходит&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
if self.bCheckStart then&lt;br /&gt;
		printf(&amp;quot;SET DEFAULT INFOS&amp;quot;)		&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;storyline_actor_start&amp;quot;) and&lt;br /&gt;
		   (level.name() == &amp;quot;l01_escape&amp;quot;)&lt;br /&gt;
		then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;storyline_actor_start&amp;quot;)&lt;br /&gt;
			_G.g_start_avi = true&lt;br /&gt;
			printf(&amp;quot;*AVI* RUN START AVI&amp;quot;)			&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
--		if not has_alife_info(&amp;quot;encyclopedy&amp;quot;) then&lt;br /&gt;
--			self.object:give_info_portion(&amp;quot;encyclopedy&amp;quot;)&lt;br /&gt;
--		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;global_dialogs&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;global_dialogs&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not has_alife_info(&amp;quot;level_changer_icons&amp;quot;) then&lt;br /&gt;
			self.object:give_info_portion(&amp;quot;level_changer_icons&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		level_tasks.add_lchanger_location()&lt;br /&gt;
&lt;br /&gt;
		self.bCheckStart = false		&lt;br /&gt;
	end		&lt;br /&gt;
   hidden_slots.update()&lt;br /&gt;
end		&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Со скриптами закончили, осталось за малым.&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Перейдем к созданию так называемых &amp;quot;фейковых&amp;quot; предметов, которвые указаны в строчках нашего скрипта&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, в конфиге и скрипте предметы должны называться одинаково, так-как скрипт отсылается к именно этим айтемам.&lt;br /&gt;
Добавляем ниже написанное в '''config\misc\items.ltx''' в самый конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти предметы отличаются от оригинала, они служат лишь для того, чтобы отметить, лежит у нас бинокль или нож в слоте, или нет, и являются обыкновенными айтемами.&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds'''&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T17:45:34Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: /* Скрипты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{825,300},{825,390},{825,480}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно указать наш файл в bind_stalker. После&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
вписываем&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
hidden_slots.on_info(info_id)&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
Чтобы получилось&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
function actor_binder:info_callback(npc, info_id)&lt;br /&gt;
	printf(&amp;quot;*INFO*: npc='%s' id='%s'&amp;quot;, npc:name(), info_id)&lt;br /&gt;
	--' Сюжет&lt;br /&gt;
	level_tasks.proceed(self.object)&lt;br /&gt;
	-- Отметки на карте&lt;br /&gt;
	level_tasks.process_info_portion(info_id)&lt;br /&gt;
        hidden_slots.on_info(info_id)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Перейдем к созданию так называемых &amp;quot;фейковых&amp;quot; предметов, которвые указаны в строчках нашего скрипта&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, в конфиге и скрипте предметы должны называться одинаково, так-как скрипт отсылается к именно этим айтемам.&lt;br /&gt;
Добавляем ниже написанное в '''config\misc\items.ltx''' в самый конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти предметы отличаются от оригинала, они служат лишь для того, чтобы отметить, лежит у нас бинокль или нож в слоте, или нет, и являются обыкновенными айтемами.&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds'''&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T14:41:47Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: /* Конфиги */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{825,300},{825,390},{825,480}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно указать наш файл в bind_stalker. После&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Перейдем к созданию так называемых &amp;quot;фейковых&amp;quot; предметов, которвые указаны в строчках нашего скрипта&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, в конфиге и скрипте предметы должны называться одинаково, так-как скрипт отсылается к именно этим айтемам.&lt;br /&gt;
Добавляем ниже написанное в '''config\misc\items.ltx''' в самый конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти предметы отличаются от оригинала, они служат лишь для того, чтобы отметить, лежит у нас бинокль или нож в слоте, или нет, и являются обыкновенными айтемами.&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds'''&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T14:28:32Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{825,300},{825,390},{825,480}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно указать наш файл в bind_stalker. После&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Теперь нужно создать так называемые &amp;quot;фейковые&amp;quot; предметы, которые появляются в инвентаре, при отсутствии предмета в слоте или при его замене. Открываем файл по адресу '''config\misc\items.ltx''' и добавляем в конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds'''&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T09:43:27Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Теперь нужно создать так называемые &amp;quot;фейковые&amp;quot; предметы, которые появляются в инвентаре, при отсутствии предмета в слоте или при его замене. Открываем файл по адресу '''config\misc\items.ltx''' и добавляем в конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Текстуры===&lt;br /&gt;
Так-как расположение предметов в инвентаре вы можете регулировать сами, изменять текстуры вы будете тоже своими руками, как захотите. Текстура инвентаря находится по адресу '''textures\ui\ui_inventory.dds'''&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T09:22:50Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Теперь нужно создать так называемые &amp;quot;фейковые&amp;quot; предметы, которые появляются в инвентаре, при отсутствии предмета в слоте или при его замене. Открываем файл items.ltx по адресу config\misc и добавляем в конец.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
 &lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T09:22:00Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T09:20:57Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Теперь нужно создать так называемые &amp;quot;фейковые&amp;quot; предметы, которые появляются в инвентаре, при отсутствии предмета в слоте или при его замене. Открываем файл items.ltx по адресу config\misc и добавляем в конец.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T09:19:30Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Теперь нужно создать так называемые &amp;quot;фейковые&amp;quot; предметы, которые появляются в инвентаре, при отсутствии предмета в слоте или при его замене. Открываем файл items.ltx по адресу config\misc и добавляем в конец.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T09:18:37Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Теперь нужно создать так называемые &amp;quot;фейковые&amp;quot; предметы, которые появляются в инвентаре, при отсутствии предмета в слоте или при его замене. Открываем файл items.ltx по адресу config\misc и добавляем в конец.&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T09:17:46Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===ВНИМАНИЕ, ДАННАЯ СТАТЬЯ ЕЩЕ НЕ ДОРАБОТАНА===&lt;br /&gt;
Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_inventory.dds - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;ini&amp;gt;&lt;br /&gt;
===Конфиги===&lt;br /&gt;
Теперь нужно создать так называемые &amp;quot;фейковые&amp;quot; предметы, которые появляются в инвентаре, при отсутствии предмета в слоте или при его замене. Открываем файл items.ltx по адресу config\misc и добавляем в конец.&lt;br /&gt;
&amp;lt;ini&amp;gt;[fake_device_torch]:antirad&lt;br /&gt;
visual				= equipments\light_night.ogf&lt;br /&gt;
description			= enc_equipment_devic_device-torch1&lt;br /&gt;
inv_name			= device-torch&lt;br /&gt;
inv_name_short		= device-torch&lt;br /&gt;
cost				= 200&lt;br /&gt;
inv_weight			= 0.2&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 12&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_binoc]:antirad&lt;br /&gt;
visual				= weapons\binoculars\wpn_binoculars.ogf&lt;br /&gt;
description			= enc_equipment_devic_binocul1&lt;br /&gt;
inv_name			= binocular&lt;br /&gt;
inv_name_short		= binocular&lt;br /&gt;
cost				= 400&lt;br /&gt;
inv_weight			= 1.0&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x			= 16&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0&lt;br /&gt;
&lt;br /&gt;
[fake_wpn_knife]:antirad&lt;br /&gt;
visual				= weapons\knife\wpn_knife.ogf&lt;br /&gt;
inv_name			= Нож&lt;br /&gt;
inv_name_short		= Нож&lt;br /&gt;
description			= enc_weapons1_wpn-knife&lt;br /&gt;
cost				= 500&lt;br /&gt;
inv_weight			= 0.3&lt;br /&gt;
inv_grid_width		= 2&lt;br /&gt;
inv_grid_height		= 1&lt;br /&gt;
inv_grid_x		    = 18&lt;br /&gt;
inv_grid_y			= 8&lt;br /&gt;
eat_health			= 0&lt;br /&gt;
eat_satiety			= 0&lt;br /&gt;
eat_power			= 0&lt;br /&gt;
eat_radiation		= 0&lt;br /&gt;
eat_alcohol			= 0&lt;br /&gt;
wounds_heal_perc	= 0 &amp;lt;ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:54:10Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts\bind_stalker.script&lt;br /&gt;
scripts\hidden_slots.script - новый файл!&lt;br /&gt;
config\misc\items.ltx&lt;br /&gt;
textures\ui\ui_icon_equipment - по желанию.&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:35:44Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:35:20Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:34:34Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ini&amp;gt;local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:33:46Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов. В папке scripts создаем файл hidden_slots.script, в котором и будут находится наши скрипты. &lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;br /&gt;
local rec_wnd      = nil&lt;br /&gt;
local initial      = false&lt;br /&gt;
local TBtn         = {}&lt;br /&gt;
local slots        = {{392,100},{492,200},{592,300}}&lt;br /&gt;
local sleep_static = 0&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;BkgrWnd&amp;quot; (CUIScriptWnd)&lt;br /&gt;
function BkgrWnd:__init(owner) super()&lt;br /&gt;
    self.sleep_time = 0&lt;br /&gt;
    self.owner = owner&lt;br /&gt;
    self:Init(0,0,1024,768)&lt;br /&gt;
    self.ClickBtn = {}&lt;br /&gt;
	self.ClickBtnSleep = function() &lt;br /&gt;
	    if self.sleep_time ~= 0 then&lt;br /&gt;
			local open_menu = true&lt;br /&gt;
            for k,v in pairs(db.storage) do&lt;br /&gt;
                local stalker = level.object_by_id(k)&lt;br /&gt;
                if stalker and (get_clsid(stalker)==clsid.script_stalker) and stalker:alive() and stalker:relation(db.actor)==game_object.enemy then&lt;br /&gt;
				    if stalker:position():distance_to(db.actor:position()) &amp;lt; 45 then&lt;br /&gt;
                        open_menu = false break&lt;br /&gt;
					end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if open_menu then&lt;br /&gt;
                level.start_stop_menu(sleep_dialog(self.sleep_time),true)&lt;br /&gt;
            else&lt;br /&gt;
			    inventory_close()&lt;br /&gt;
				get_hud():AddCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;)&lt;br /&gt;
				sleep_static = time_global() + 5000&lt;br /&gt;
            end&lt;br /&gt;
		end &lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[1] = function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_1&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[2]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_2&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
self.ClickBtn[3]=function()&lt;br /&gt;
	local item = db.actor:object(&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
	if item then spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;) remove_item(item:id()) end TBtn[&amp;quot;check_button_3&amp;quot;]:Show(false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
    self:InitControls()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:__finalize() end&lt;br /&gt;
function BkgrWnd:InitControls()&lt;br /&gt;
    clear_table(TBtn)&lt;br /&gt;
    self.bkgr_static=CUIStatic()&lt;br /&gt;
    self.bkgr_static:Init(&amp;quot;ui\\ui_disk_io&amp;quot;,10,0,1024,100)&lt;br /&gt;
    self.bkgr_static:SetStretchTexture(true)&lt;br /&gt;
    self.bkgr_static:SetOriginalRect(0,0,1024,100)&lt;br /&gt;
    self.owner:AttachChild(self.bkgr_static)&lt;br /&gt;
    self.stat = CUIStatic()&lt;br /&gt;
    self.stat:Init(0, 0, 1024, 768)&lt;br /&gt;
    self.owner:AttachChild(self.stat) &lt;br /&gt;
    for k,v in pairs (slots) do&lt;br /&gt;
        local name=&amp;quot;check_button_&amp;quot;..k&lt;br /&gt;
        self.btn = CUIButton()&lt;br /&gt;
        self.btn:SetAutoDelete(false)&lt;br /&gt;
        self.btn:SetWindowName(name) &lt;br /&gt;
        self:Register(self.btn)&lt;br /&gt;
        self.stat:AttachChild(self.btn)&lt;br /&gt;
        TBtn[name]= self.btn&lt;br /&gt;
        init_btn(k)&lt;br /&gt;
        self:AddCallback(name,ui_events.WINDOW_LBUTTON_DB_CLICK,self.ClickBtn[k],self)&lt;br /&gt;
    end&lt;br /&gt;
	local ctrl&lt;br /&gt;
	local xml = CScriptXmlInit()&lt;br /&gt;
	xml:ParseFile(&amp;quot;ui_addon.xml&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- инициализация с учетом размеров иконки статика&lt;br /&gt;
function init_btn(num,sec)&lt;br /&gt;
    local function sections(num)&lt;br /&gt;
        if num==1 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(0)&lt;br /&gt;
	        if item then return &amp;quot;wpn_knife&amp;quot; else return end&lt;br /&gt;
        elseif num==2 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(4)&lt;br /&gt;
	        if item then return &amp;quot;wpn_binoc&amp;quot; else return end&lt;br /&gt;
        elseif num==3 then&lt;br /&gt;
	        local item = db.actor:item_in_slot(9)&lt;br /&gt;
	        if item then return &amp;quot;device_torch&amp;quot; else return end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    local btn=TBtn[&amp;quot;check_button_&amp;quot;..num]&lt;br /&gt;
    local sect = sec or sections(num)&lt;br /&gt;
    if sect then&lt;br /&gt;
	    local ini=system_ini()&lt;br /&gt;
	    local x=ini:r_u32(sect, &amp;quot;inv_grid_x&amp;quot;)*50	&lt;br /&gt;
 	    local y=ini:r_u32(sect, &amp;quot;inv_grid_y&amp;quot;)*50	&lt;br /&gt;
	    local width=ini:r_u32(sect, &amp;quot;inv_grid_width&amp;quot;)*50&lt;br /&gt;
 	    local height=ini:r_u32(sect, &amp;quot;inv_grid_height&amp;quot;)*50&lt;br /&gt;
	    btn:InitTexture(&amp;quot;ui\\ui_icon_equipment&amp;quot;)&lt;br /&gt;
	    btn:SetOriginalRect(x,y,width,height)&lt;br /&gt;
	    btn:Init(slots[num][1]-width/2,slots[num][2]-height/2,width,height)&lt;br /&gt;
	    btn:Show(true)&lt;br /&gt;
    else&lt;br /&gt;
	    btn:Init(slots[num][1],slots[num][2],0,0)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:ShowWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(true) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:HideWnd()&lt;br /&gt;
    if initial and rec_wnd.stat~= nil then rec_wnd.stat:Show(false) end&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function BkgrWnd:DetachWnd()&lt;br /&gt;
	self.owner:DetachChild(self.stat) initial = false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function on_eat(sect)&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_knife&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_knife&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_knife&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_knife&amp;quot;) init_btn(1,&amp;quot;wpn_knife&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_wpn_binoc&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;wpn_binoc&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_wpn_binoc&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;wpn_binoc&amp;quot;) init_btn(2,&amp;quot;wpn_binoc&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if sect==&amp;quot;fake_device_torch&amp;quot; then&lt;br /&gt;
		if db.actor:object(&amp;quot;device_torch&amp;quot;) then&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;fake_device_torch&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			spawn_item_in_inv(&amp;quot;device_torch&amp;quot;) init_btn(3,&amp;quot;device_torch&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function spawn_item_in_inv(sect)&lt;br /&gt;
	alife():create(sect,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function remove_item(id)&lt;br /&gt;
	if id then&lt;br /&gt;
		local sobj = alife():object(id)&lt;br /&gt;
		if sobj then alife():release(sobj,true) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inv_window&lt;br /&gt;
function on_info(info_id)&lt;br /&gt;
	if info_id==&amp;quot;ui_inventory&amp;quot; then&lt;br /&gt;
	    inv_window = level.main_input_receiver()&lt;br /&gt;
        if not initial then	&lt;br /&gt;
            rec_wnd = BkgrWnd(level.main_input_receiver())&lt;br /&gt;
		end  &lt;br /&gt;
    	if not rec_wnd.stat:IsShown() then&lt;br /&gt;
			rec_wnd:ShowWnd()&lt;br /&gt;
		end &lt;br /&gt;
	elseif info_id==&amp;quot;ui_inventory_hide&amp;quot; then&lt;br /&gt;
		if rec_wnd then&lt;br /&gt;
       	    rec_wnd:DetachWnd()&lt;br /&gt;
		end&lt;br /&gt;
 	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function inventory_close()&lt;br /&gt;
    if inv_window and inv_window:IsShown() then&lt;br /&gt;
        level.start_stop_menu(inv_window,true)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local id,sect&lt;br /&gt;
function on_item_drop(obj)&lt;br /&gt;
	sect = obj:section()&lt;br /&gt;
	if string.sub(sect,1,5)==&amp;quot;fake_&amp;quot; then id = obj:id() end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function update()&lt;br /&gt;
	if id and not level.object_by_id(id) then&lt;br /&gt;
		on_eat(sect)&lt;br /&gt;
		id = nil&lt;br /&gt;
		sect = nil&lt;br /&gt;
	end&lt;br /&gt;
	if get_hud():GetCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) ~= nil then &lt;br /&gt;
	    if sleep_static &amp;lt; time_global() then get_hud():RemoveCustomStatic(&amp;quot;cant_sleep_near_enemies&amp;quot;) end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/ini&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:30:32Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&amp;lt;/ini&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов.&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:29:33Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
Мне вдруг стало интересно, как реализовать скрытые и сделать новые слоты в Тенях Чернобыля. Порыскав по просторам интернета, я нашел подобную реализацию у инвентаря от АМК, где в слоты можно было класть нож, бинокль и фонарь.&lt;br /&gt;
Методом проб и ошибок, я нашел, какие скрипты за это отвечают.&lt;br /&gt;
===Файлы===&lt;br /&gt;
Данные ниже файлы понадобятся нам в работе.&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&lt;br /&gt;
&lt;br /&gt;
===Скрипты===&lt;br /&gt;
Начнем со скриптов.&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:12:57Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
-&lt;br /&gt;
===Файлы===&lt;br /&gt;
&amp;lt;ini&amp;gt;scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:09:43Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;br /&gt;
===Предыстория===&lt;br /&gt;
-&lt;br /&gt;
===Файлы===&lt;br /&gt;
scripts/bind_stalker.script&lt;br /&gt;
scripts/hidden_slots.script - новый файл!&lt;br /&gt;
config/misc/items.ltx&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A</id>
		<title>Эмуляция новых слотов в ТЧ по скриптам от АМК</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%AD%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2_%D0%B2_%D0%A2%D0%A7_%D0%BF%D0%BE_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0%D0%BC_%D0%BE%D1%82_%D0%90%D0%9C%D0%9A"/>
				<updated>2017-08-05T07:03:31Z</updated>
		
		<summary type="html">&lt;p&gt;DanilPankovski: Новая страница: «Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дози…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Многие хотят узнать, как добавить сделать видимыми слоты, для бинокля, ножа, фонаря, дозиметра.&lt;br /&gt;
Сегодня в этой статье, вы узнаете, как эмулировать эти слоты, а так же, добавить новые.&lt;/div&gt;</summary>
		<author><name>DanilPankovski</name></author>	</entry>

	</feed>