-- Параметры local posX, posY = 0.995, 0.02 local textPosX, textPosY = 0.968, 0.0085 local dpi = 1 local item_scale = 0.75 local columns, rows = 9, 3 local base_slot_size = 24 local base_border = 1 local rarity_border = 1 local base_slot_gap = -1 -- ← НАСТРАИВАЕМЫЙ ПРОМЕЖУТОК МЕЖДУ ЯЧЕЙКАМИ (в пикселях) local padding = 0 -- Внешний отступ панели (от краёв до первого слота) local player = require("player") -- Округлённые размеры local slot_size = math.floor(base_slot_size * item_scale * dpi + 0.5) local border_thickness = math.floor(base_border * dpi + 0.5) local rarity_border_thickness = math.floor(rarity_border * dpi + 0.5) local slot_gap = math.floor(base_slot_gap * dpi + 0.5) -- Промежуток с учётом DPI local itemIconSize = 16 local slots_dynamic = {} registerClientTick(function() for idx = 0, 9 + columns * rows - 1 do if not slots_dynamic[idx] then slots_dynamic[idx] = {} end local item = player.inventory.getStack(idx) or nil slots_dynamic[idx].item = item slots_dynamic[idx].rarity = nil if item then local value = item.lore[#item.lore] if value:find("UNCOMMON") then slots_dynamic[idx].rarity = { red = 0, green = 255, blue = 0, alpha = 255 } elseif value:find("COMMON") then slots_dynamic[idx].rarity = { red = 87, green = 87, blue = 87, alpha = 255 } elseif value:find("RARE") then slots_dynamic[idx].rarity = { red = 0, green = 0, blue = 255, alpha = 255 } elseif value:find("EPIC") then slots_dynamic[idx].rarity = { red = 170, green = 0, blue = 255, alpha = 255 } elseif value:find("LEGENDARY") then slots_dynamic[idx].rarity = { red = 255, green = 170, blue = 0, alpha = 255 } elseif value:find("MYTHIC") then slots_dynamic[idx].rarity = { red = 255, green = 0, blue = 170, alpha = 255 } elseif value:find("DIVINE") then slots_dynamic[idx].rarity = { red = 60, green = 220, blue = 220, alpha = 255 } elseif value:find("SPECIAL") then slots_dynamic[idx].rarity = { red = 255, green = 0, blue = 0, alpha = 255 } end end end end) register2DRenderer(function(context) local size = context.getWindowScale() local W, H = size.width, size.height -- Размер панели с учётом промежутков МЕЖДУ ячейками и внешнего отступа local panelW = columns * slot_size + (columns - 1) * slot_gap + padding * 2 local panelH = rows * slot_size + (rows - 1) * slot_gap + padding * 2 -- Позиция панели local panelX = math.floor((W - panelW) * posX + 0.5) local panelY = math.floor((H - panelH) * posY + 0.5) -- Фон панели context.renderRect( panelX, panelY, panelW, panelH, 20, 20, 20, 40 ) -- Заголовок local textX = math.floor(W * textPosX + 0.5) local textY = math.floor(H * textPosY + 0.5) context.renderText( textX, textY, "Inventory", 255, 255, 255, 255, true, 0.5 * dpi ) -- Отрисовка слотов for row = 0, rows - 1 do for col = 0, columns - 1 do local idx = row * columns + col + 9 -- Позиция слота с учётом промежутков между ячейками local x = panelX + padding + col * (slot_size + slot_gap) local y = panelY + padding + row * (slot_size + slot_gap) -- Бордюр слота context.renderRect(x, y, slot_size, border_thickness, 60, 60, 60, 255) context.renderRect(x, y + slot_size - border_thickness, slot_size, border_thickness, 60, 60, 60, 255) context.renderRect(x, y, border_thickness, slot_size, 60, 60, 60, 255) context.renderRect(x + slot_size - border_thickness, y, border_thickness, slot_size, 60, 60, 60, 255) -- Фон редкости local rarity = slots_dynamic[idx] and slots_dynamic[idx].rarity if rarity then local bx = x + 1 local by = y + 1 local bw = slot_size - 2 local bh = slot_size - 2 context.renderRect(bx, by, bw, bh, rarity.red, rarity.green, rarity.blue, 70) context.renderPolygon({ { x = bx, y = by }, { x = bx + bw, y = by }, { x = bx + bw, y = by + bh }, { x = bx, y = by + bh } }, rarity.red, rarity.green, rarity.blue, rarity.alpha) -- Обводка редкости context.renderRect(bx, by, bw, rarity_border_thickness, rarity.red, rarity.green, rarity.blue, rarity.alpha) context.renderRect(bx, by + bh - rarity_border_thickness, bw, rarity_border_thickness, rarity.red, rarity.green, rarity.blue, rarity.alpha) context.renderRect(bx, by, rarity_border_thickness, bh, rarity.red, rarity.green, rarity.blue, rarity.alpha) context.renderRect(bx + bw - rarity_border_thickness, by, rarity_border_thickness, bh, rarity.red, rarity.green, rarity.blue, rarity.alpha) end -- Иконка предмета local stack = slots_dynamic[idx].item if stack then local iconScale = item_scale * dpi local iconSize = itemIconSize * iconScale local off = math.floor((slot_size - iconSize) / 2 + 0.5) context.renderItemStack( x + off, y + off, stack, iconScale ) if stack.count and stack.count > 1 then if stack.count <= 9 then x = x + 3 end context.renderText( x + off + 6 * dpi, y + off + 8 * dpi, tostring(stack.count), 255, 255, 255, 255, true, 0.5 * dpi ) end end end end end)