Added New Mods; Swapped Mods and Removed Some

Removed EGUI in favor of UI Rework by Sota

Added in GTR Optimized for higher res textures, over Zone Reality Remade and removed all files that conflicted from ZRR to save storage space.
This commit is contained in:
2024-03-30 06:43:01 -04:00
parent 48d440e14c
commit 255081e1ee
2883 changed files with 39223 additions and 61569 deletions
@@ -0,0 +1,947 @@
bar_list = {
["condition_progess_bar"] = { min= {255,196,18,18,0}, mid= {255,255,255,118,0.5}, max= {255,107,207,119,1}, background= true},
["power_progess_bar"] = { def= GetARGB(255,86,196,209), background= true },
["uses_progess_bar"] = { def= GetARGB(255,255,255,255), background= false },
}
local lerp_color = utils_xml.lerp_color
local gc = game.translate_string
local string_find = string.find
utjan_xml = nil
base_init = utils_ui.UICellItem.InitControls
function utils_ui.UICellItem:InitControls(path, st)
self.disable_bar_og = self.disable_bar -- save original game setting for disabling bar in case user toggles bar visibility
base_init(self, path, st)
end
base_pbar = utils_ui.UICellItem.Add_ProgressBar
function utils_ui.UICellItem:Add_ProgressBar(xml, obj, sec, clsid)
local hide_non_equipped = settings.cond_text.hide_bar and not (self.path == "equipment:cont_equ")
local hide_on_magazine = settings.mag_info.hide_bar and magazine_binder and magazine_binder.is_magazine(sec)
if not IsItem("multiuse", sec) and (hide_non_equipped or hide_on_magazine) then
self.disable_bar = true
else
self.disable_bar = self.disable_bar_og
end
base_pbar(self, xml, obj, sec, clsid)
Add_Parts_Bars(self, xml, obj, sec, clsid)
Add_Mag_Icon_Text(self, xml, obj, sec, clsid)
Add_Condition_Text(self, xml, obj, sec, clsid)
end
base_counter = utils_ui.UICellItem.Add_Counter
function utils_ui.UICellItem:Add_Counter(xml, obj, sec)
base_counter(self, xml, obj, sec)
Add_Ammo_Short_Name_Text(self, xml, obj, sec)
Add_Money_Text(self, xml, obj, sec)
Add_Recipe_Icon_Text(self, xml, obj, sec)
Add_Weapon_Name(self, xml, obj, sec)
Add_Repair_Icon(self, xml, obj, sec)
end
base_reset = utils_ui.UICellItem.Reset
function utils_ui.UICellItem:Reset()
base_reset(self)
if (self.manual) then
if self.parts_indicators then
for k,v in pairs(self.parts_indicators) do
self.parts_indicators[k]:Show(false)
end
end
if self.cond_text then
self.cond_text:Show(false)
end
if self.cond_text_bg then
self.cond_text_bg:Show(false)
end
if self.wpn_name then
self.wpn_name:Show(false)
end
if self.gun_repair_icon then
self.gun_repair_icon:Show(false)
end
end
end
valid_wpn_kinds = {
["w_rifle"] = true,
["w_smg"] = true,
["w_pistol"] = true,
["w_shotgun"] = true,
["w_sniper"] = true,
["w_explosive"] = true,
["w_melee"] = true,
}
grenade_classes = {
["G_F1"] = true,
["G_F1_S"] = true,
["G_RGD5_S"] = true,
}
main_slot_indexes = {
[2] = true,
[3] = true,
}
-- AlphaLion wpn name
function Add_Weapon_Name(self, xml, obj, sec)
if self.wpn_name then
self.wpn_name:Show(false)
end
if not settings.wpn_info.show_wpn_name then return end
local class = SYS_GetParam(0, sec, "class")
if not settings.wpn_info.show_grenade_name and grenade_classes[class] then return end
local kind = SYS_GetParam(0, sec, "kind")
if not valid_wpn_kinds[kind] then return end
if not settings.wpn_info.show_melee and kind == "w_melee" then return end
local wpn_name_short = SYS_GetParam(0, sec, "inv_name_short")
if not wpn_name_short then return end
local is_equipped = self.path == "equipment:cont_equ"
if settings.wpn_info.main_slots_only and is_equipped and not main_slot_indexes[self.indx] then return end
self.wpn_name = self.wpn_name or utjan_xml:InitTextWnd("counter_text", self.cell)
self.wpn_name:SetEllipsis(true)
local name = game.translate_string(wpn_name_short)
self.wpn_name:SetText(name)
self.wpn_name:AdjustHeightToText()
self.wpn_name:AdjustWidthToText()
local x_offset = self.bar and self.bar:IsShown() and self.bar:GetWndPos().x + self.bar:GetWidth() or 0
if self.parts_indicators then
for k,v in pairs(self.parts_indicators) do
local part_x_edge = self.parts_indicators[k]:IsShown() and self.parts_indicators[k]:GetWndPos().x + self.parts_indicators[k]:GetWidth() or 0
if part_x_edge > x_offset then
x_offset = part_x_edge
end
end
end
if self.cond_text and self.cond_text:IsShown() then
local cond_text_x_edge = self.cond_text:GetWndPos().x + self.cond_text:GetWidth()
if cond_text_x_edge > x_offset then
x_offset = cond_text_x_edge
end
end
local cell_h = self.cell:GetHeight()
local cell_w = self.cell:GetWidth()
if not is_equipped then
self.wpn_name:SetTextAlignment(1)
self.wpn_name:SetWndRect(Frect():set(0, 0, cell_w - (x_offset + 2),self.wpn_name:GetHeight() + 2))
self.wpn_name:SetWndPos(vector2():set(x_offset, cell_h - self.wpn_name:GetHeight()))
else
self.wpn_name:SetTextAlignment(2)
self.wpn_name:SetWndRect(Frect():set(0, 0, cell_w, self.wpn_name:GetHeight() + 2))
self.wpn_name:SetWndPos(vector2():set(0, 3))
end
self.wpn_name:Show(true)
end
function set_text_rect(ele, padding_w, padding_h, text)
if text then
ele:SetText(text)
end
ele:AdjustHeightToText()
ele:AdjustWidthToText()
local width = ele:GetWidth()
local height = ele:GetHeight()
ele:SetWndRect(Frect():set(0, 0, width + padding_w, height + padding_h))
end
-- MONEY TEXT
function Add_Money_Text(self, xml, obj, sec)
if self.money_text then
self.money_text:Show(false)
end
if self.money_text_bg then
self.money_text_bg:Show(false)
end
if not settings.money_text.enable then return end
local money_amount = IsItem("money", sec) or parse_list(ini_sys, sec, "money_value") -- money_value is used for Lootboxes cash stacks
if not (money_amount and money_amount[1]) then return end
local show_bg = not settings.money_text.hide_bg
if show_bg then
self.money_text_bg = self.money_text_bg or utjan_xml:InitStatic("background", self.cell)
end
self.money_text = self.money_text or utjan_xml:InitTextWnd("counter_text", self.cell)
local text
if money_amount[2] then
text = gc("ui_utjan_ruble") .. ((money_amount[1] + money_amount[2]) / 2) .. "~"
else
text = gc("ui_utjan_ruble") .. money_amount[1]
end
local text_padding_w = settings.money_text.padding + 1
local text_padding_h = settings.money_text.padding
set_text_rect(self.money_text, text_padding_w, text_padding_h, text)
local text_height = self.money_text:GetHeight()
local cell_h = self.cell:GetHeight()
self.money_text:SetWndPos( vector2():set( 0 , cell_h - text_height) )
if show_bg then
self.money_text_bg:SetWndRect(Frect():set(0, 0, self.money_text:GetWidth(), self.money_text:GetHeight()))
self.money_text_bg:SetWndPos( self.money_text:GetWndPos() )
self.money_text_bg:Show(true)
end
self.money_text:Show(true)
end
-- MONEY TEXT END
-- ADD CONDITION TEXT
arty_table = {
["i_arty_junk"] = true,
["i_arty"] = true,
["i_arty_cont"] = true,
}
function Add_Condition_Text(self, xml, obj, sec, clsid)
if self.cond_text then
self.cond_text:Show(false)
end
if self.cond_text_bg then
self.cond_text_bg:Show(false)
end
if not settings.cond_text.enable then return end
if self.disable_bar_og then return end -- dont show condition when the vanilla scripts hide the condition bar
local is_equipped = self.path == "equipment:cont_equ"
if not settings.cond_text.enable_equipped and is_equipped then return end
if IsItem("multiuse",sec) then return end
local has_cond = utils_item.is_degradable(obj, sec) or IsWeapon(nil,clsid) or IsOutfit(nil,clsid) or IsHeadgear(nil,clsid)
if (not has_cond) then return end
if magazine_binder and magazine_binder.is_magazine(sec) then return end
local show_bg = not settings.cond_text.hide_bg
if show_bg and not is_equipped then
self.cond_text_bg = self.cond_text_bg or utjan_xml:InitStatic("background", self.cell)
end
self.cond_text = self.cond_text or utjan_xml:InitTextWnd("counter_text", self.cell)
local cond = obj:condition()
local str = SYS_GetParam(0,sec, "condition_bar","condition_progess_bar")
local props = bar_list[str]
local color = props.def or lerp_color( cond , props.min , props.mid , props.max )
if color then
self.cond_text:SetTextColor( color )
end
local text = math.ceil(cond * 100) .. "%"
local text_padding_w = is_equipped and 0 or settings.cond_text.padding + 1
local text_padding_h = is_equipped and 0 or settings.cond_text.padding
set_text_rect(self.cond_text, text_padding_w, text_padding_h, text)
local text_height = self.cond_text:GetHeight()
local kind = SYS_GetParam(0, sec, "kind", "na")
if arty_table[kind] then
local alt_artefact_pos = settings.cond_text.alt_artefact_pos
if alt_artefact_pos == 0 then
self.cond_text:SetWndPos( vector2():set( 0 , self.cell:GetHeight() - text_height) )
elseif alt_artefact_pos == 1 then
self.cond_text:SetWndPos( vector2():set( self.cell:GetWidth() - self.cond_text:GetWidth() , self.cell:GetHeight() - text_height) )
elseif alt_artefact_pos == 2 then
self.cond_text:SetWndPos( vector2():set( self.cell:GetWidth() - self.cond_text:GetWidth() , 0) )
end
elseif is_equipped and settings.cond_text.enable_equipped then
local pos_adjusted = false
local bar_pos = self.bar and self.bar:IsShown() and self.bar:GetWndPos()
if self.parts_indicators then -- Adjust position if part dots are shown
for k,v in pairs(self.parts_indicators) do
if self.parts_indicators[k]:IsShown() then
self.cond_text:SetWndPos( vector2():set( bar_pos.x , self.parts_indicators[k]:GetWndPos().y - text_height) )
pos_adjusted = true
break
end
end
end
if not pos_adjusted then
self.cond_text:SetWndPos( vector2():set( bar_pos.x , bar_pos.y - text_height) )
end
elseif settings.part_dots.enable and (settings.part_dots.position == 1 or (settings.part_dots.position == 2 and is_short_gun(obj, clsid, sec))) then
local part_y = self.cell:GetHeight()
if self.parts_indicators then
for k,v in pairs(self.parts_indicators) do
if self.parts_indicators[k]:IsShown() then
part_y = self.parts_indicators[k]:GetWndPos().y
break
end
end
end
self.cond_text:SetWndPos( vector2():set( 0 , part_y - text_height) )
else
local bar_h = self.bar and self.bar:IsShown() and self.bar:GetHeight() or 0
self.cond_text:SetWndPos( vector2():set( 0 , self.cell:GetHeight() - bar_h - text_height) )
end
if show_bg and not is_equipped then
self.cond_text_bg:SetWndRect(Frect():set(0, 0, self.cond_text:GetWidth(), self.cond_text:GetHeight()))
self.cond_text_bg:SetWndPos( self.cond_text:GetWndPos() )
self.cond_text_bg:Show(true)
end
self.cond_text:Show(true)
end
-- END ADD CONDITION TEXT
-- ADD PART CONDITION BARS
function is_short_gun(obj, clsid, sec)
if IsWeapon(obj, clsid) and SYS_GetParam(2, sec, "inv_grid_width") == 2 then
return true
end
end
-- WPO colors
clr_r = GetARGB(255,196,18,18)
clr_o = utils_xml.get_color("d_orange", true)
clr_y = GetARGB(255,255,255,118)
clr_g = GetARGB(255,107,207,119)
clr_missing = GetARGB(255,70,60,60) -- Missing part color
local ini_parts = itms_manager.ini_parts
function has_parts(obj)
if not obj then return end
local sec = SYS_GetParam(0, obj:section(), "parent_section") or obj:section()
local parts = ini_parts:r_string_ex("con_parts_list", sec)
return parts ~= nil
end
function Add_Parts_Bars(self, xml, obj, sec, clsid)
if self.parts_indicators then
for k,v in pairs(self.parts_indicators) do
self.parts_indicators[k]:Show(false)
end
end
if not settings.part_dots.enable then return end
if not has_parts(obj) then return end
local is_equipped = self.path == "equipment:cont_equ"
if not settings.part_dots.show_on_equipped and is_equipped then return end
if not settings.part_dots.show_on_wpn and IsWeapon(nil, clsid) then return end
if not settings.part_dots.show_on_armor and (IsHeadgear(nil, clsid) or IsOutfit(nil, clsid)) then return end
local se_parts = item_parts.get_parts_con(obj, nil, true)
if is_empty(se_parts) then return end
local parts = dup_table(se_parts)
self.parts_indicators = self.parts_indicators or {}
for part, v in pairs(parts) do
if SYS_GetParam(1, part, "cond_part") then
self.parts_indicators[part] = self.parts_indicators[part] or utjan_xml:InitStatic("cond_dot", self.cell)
else
parts[part] = nil
end
end
-- Added by Sota
local ratio = utils_xml.screen_ratio()
local bar_shown = self.bar and self.bar:IsShown()
local bar_h = bar_shown and self.bar:GetHeight() or 0
local bar_w = bar_shown and self.bar:GetWidth() or 0
local props = bar_list.condition_progess_bar
local i = 0
for part, condition in spairs(parts, parts_sort) do
local bar_pos = bar_shown and self.bar:GetWndPos()
local cond_dot_h = 4 --self.parts_indicators[part]:GetHeight()
-- Edited by Sota
--local cond_dot_w = cond_dot_h * 0.75
local cond_dot_w = cond_dot_h * ratio
cond_dot_h = cond_dot_h * settings.part_dots.size_mult
cond_dot_w = cond_dot_w * settings.part_dots.size_mult
local cond_text_w = self.cond_text and self.cond_text:GetWidth() or 0
local separator_width = settings.part_dots.separator_width
self.parts_indicators[part]:SetWndRect( Frect():set(0, 0, cond_dot_w, cond_dot_h) )
if is_equipped then
self.parts_indicators[part]:SetWndPos( vector2():set( bar_pos.x + (cond_dot_w + separator_width) * i, bar_pos.y - cond_dot_h * 1.5))
else
if settings.part_dots.position == 1 or (settings.part_dots.position == 2 and is_short_gun(obj, clsid, sec)) then
if bar_shown then
self.parts_indicators[part]:SetWndPos( vector2():set( (cond_dot_w + separator_width) * i, self.cell:GetHeight() - bar_h - cond_dot_h * 1.5))
else
self.parts_indicators[part]:SetWndPos( vector2():set( 1 + (cond_dot_w + separator_width) * i, self.cell:GetHeight() - cond_dot_h * 1.5))
end
else
if bar_shown then
self.parts_indicators[part]:SetWndPos( vector2():set( bar_w + 1 + (cond_dot_w + separator_width) * i, self.cell:GetHeight() - cond_dot_h * 1.5))
else
self.parts_indicators[part]:SetWndPos( vector2():set( cond_text_w + 1 + (cond_dot_w + separator_width) * i, self.cell:GetHeight() - cond_dot_h * 1.5))
end
end
end
local color
if settings.part_dots.wpo_mode and IsWeapon(nil, clsid) then -- Weapon Parts Overhaul Colors
color = clr_missing
if condition >= settings.part_dots.wpo_green then color = clr_g
elseif condition >= settings.part_dots.wpo_yellow then color = clr_y
elseif condition >= settings.part_dots.wpo_orange then color = clr_o
elseif condition > -1 then color = clr_r end
else
if condition >= 0 then
local cond = clamp(condition / 99, 0, 1)
color = props.def or lerp_color( cond , props.min , props.mid , props.max )
else
color = clr_missing
end
end
if color then
self.parts_indicators[part]:SetTextureColor( color )
end
self.parts_indicators[part]:Show(true)
i = i + 1
end
end
unique_mapping = {
["prt_w_gas_tube_9"] = "extractor",
["prt_w_gas_tube_10"] = "extractor",
["prt_w_gas_tube_8"] = "ejector",
["prt_w_gas_tube_2"] = "pump",
["prt_w_bolt_11"] = "hammers",
["prt_w_bolt_12"] = "hammers",
["prt_w_bolt_carrier_8"] = "chock",
["prt_w_bolt_carrier_9"] = "chock",
}
name_mapping = {
["barrel"] = 1,
["trigger"] = 2,
["bolt"] = 3,
["bolt_carrier"] = 4,
["chock"] = 5,
["ejector"] = 6,
["extractor"] = 7,
["gas_tube"] = 8,
["hammers"] = 9,
["pump"] = 10,
["spring"] = 11,
}
function parts_sort(t, a, b)
if not (a and b) then return false end
local a_map
if unique_mapping[a] then
a_map = name_mapping[unique_mapping[a]]
else
for k,v in pairs(name_mapping) do
if string_find(a, k) then
a_map = v
break
end
end
end
local b_map
if unique_mapping[b] then
b_map = name_mapping[unique_mapping[b]]
else
for k,v in pairs(name_mapping) do
if string_find(b, k) then
b_map = v
break
end
end
end
if not (a_map and b_map) then return false end
return a_map < b_map
end
-- ADD PART CONDITION BARS END
-- ADD AMMO ITEM SHORT NAME TEXT
valid_ammo_class = {
["AMMO"] = true,
["AMMO_S"] = true,
}
valid_exlosive_ammo = {
["S_M209"] = true,
["S_VOG25"] = true,
["S_OG7B"] = true,
}
function Add_Ammo_Short_Name_Text(self, xml, obj, sec)
if self.ammo_name_bg then
for k,v in pairs(self.ammo_name_bg)do
self.ammo_name_bg[k]:Show(false)
end
end
if self.ammo_name then
for k,v in pairs(self.ammo_name)do
self.ammo_name[k]:Show(false)
end
end
local class = SYS_GetParam(0, sec, "class")
if not (valid_ammo_class[class] or valid_exlosive_ammo[class]) then return end
if not settings.ammo_name.enable and valid_ammo_class[class] then return end
if not settings.ammo_name.show_expl and valid_exlosive_ammo[class] then return end
local is_component = SYS_GetParam(1, sec, "is_component")
if is_component then return end -- Ammo maker compat
local ammo_name_short = SYS_GetParam(0, sec, "inv_name_short")
if not ammo_name_short then return end
self.ammo_name = {}
self.ammo_name_bg = {}
local gc_name = gc(ammo_name_short)
local i = 1
local name_cutoff = ""
while i > 0 do
self.ammo_name_bg[i] = self.ammo_name_bg[i] or utjan_xml:InitStatic("background", self.cell)
self.ammo_name[i] = self.ammo_name[i] or utjan_xml:InitTextWnd("counter_text", self.cell)
local text_padding = settings.ammo_name.padding
set_text_rect(self.ammo_name[i], text_padding, text_padding, gc_name)
local incr_i = false
while (self.ammo_name[i]:GetWidth() > self.cell:GetWidth()) do
local str_table = str_explode(gc_name, " ")
if #str_table == 1 then
break
end
if name_cutoff == "" then
name_cutoff = str_table[1]
else
name_cutoff = name_cutoff .. " " .. str_table[1]
end
gc_name = ""
for i = 2, #str_table do
gc_name = gc_name .. str_table[i]
if #str_table > i then
gc_name = gc_name .. " "
end
end
set_text_rect(self.ammo_name[i], text_padding, text_padding, gc_name)
incr_i = true
end
local name_h = self.ammo_name[i]:GetHeight()
local name_w = self.ammo_name[i]:GetWidth()
self.ammo_name[i]:SetWndPos( vector2():set( 0 , self.H - (name_h * i)) )
-- Edited by Sota
--local bg_padding = name_w * 0.08
local bg_padding = name_w * 0.025
self.ammo_name_bg[i]:SetWndRect(Frect():set(0, 0, name_w + (bg_padding * 2), name_h))
local name_pos = self.ammo_name[i]:GetWndPos()
self.ammo_name_bg[i]:SetWndPos( vector2():set(name_pos.x - bg_padding , name_pos.y ) )
if valid_ammo_class[class] and settings.ammo_name.bad_color or
valid_exlosive_ammo[class] and settings.ammo_name.expl_bad_color then
if string.find(sec, "_verybad") then
self.ammo_name[i]:SetTextColor( clr_r )
elseif string.find(sec, "_bad") then
self.ammo_name[i]:SetTextColor( clr_o )
else
self.ammo_name[i]:SetTextColor( clr_g )
end
end
-- Check if ammo icon is dimmed in crafting list
local craft_gui = ui_workshop.GUI and ui_workshop.GUI:IsShown() and ui_workshop.GUI.dlg_craft
if craft_gui then
local menu = craft_gui.list_menu:GetSelectedItem()
local last_type = menu and menu.idx
local r = last_type and craft_gui.recipes[last_type] or {}
local rsp_sec
for k,v in pairs(r) do
if r[k].sec == sec then
rsp_sec = r[k].rsp
break
end
end
if rsp_sec and not craft_gui.recipes_items[rsp_sec] then
local txt_clr = self.ammo_name[i]:GetTextColor()
self.ammo_name[i]:SetTextColor( change_alpha(txt_clr, 140) )
local bg_clr = self.ammo_name_bg[i]:GetTextureColor()
self.ammo_name_bg[i]:SetTextureColor( change_alpha(bg_clr, 140) )
end
end
self.ammo_name_bg[i]:Show(true)
self.ammo_name[i]:Show(true)
if incr_i then
i = i + 1
gc_name = name_cutoff
name_cutoff = ""
else
i = 0
end
end
end
function change_alpha(clr, a)
if not clr and a ~= nil then return end
local b = bit.band(clr, 255)
local g = bit.band(bit.rshift(clr, 8), 255)
local r = bit.band(bit.rshift(clr, 16), 255)
return GetARGB(a, r, g, b)
end
-- ADD AMMO ITEM SHORT NAME TEXT END
-- ADD RECIPE READ/UNREAD TEXT
one_use_recipes = {
recipe_cooking_1 = true,
}
workshop_autoinject_known_recipes = {}
functor_table_readable = {
["item_recipe.func_recipe"] = true,
["item_recipe.func_letter"] = true,
}
function Add_Recipe_Icon_Text(self, xml, obj, sec)
if self.recipe_text then
self.recipe_text:Show(false)
end
if self.recipe_text_bg then
self.recipe_text_bg:Show(false)
end
if not settings.recipe_text.enable then return end
if not sec then return end
local use_map = SYS_GetParam(0, sec, "use_map")
local functor = SYS_GetParam(0, sec, "use1_action_functor", "na")
local has_encyclopedia = functor_table_readable[functor]
local is_pda = functor == "ui_pda_npc_tab.use_view"
if not (has_encyclopedia or is_pda or use_map or one_use_recipes[sec]) then return end
if not settings.recipe_text.show_on_pda and is_pda then return end
local has_stash
if is_pda and obj then
local pda_info = se_load_var(obj:id(), obj:name(), "info")
if pda_info and pda_info.msg then
for k,v in pairs(pda_info.msg) do
if pda_info.msg[k].stash and not pda_info.msg[k].stash_read then
has_stash = true
break
end
end
end
end
if is_pda and not has_stash then return end
local recipe_is_known
if use_map then
local maps = game_statistics.actor_anomaly_maps or {}
recipe_is_known = maps[use_map] or false
else
workshop_autoinject_known_recipes = workshop_autoinject and workshop_autoinject.known_recipe or workshop_autoinject_known_recipes
recipe_is_known = workshop_autoinject_known_recipes[sec] or ui_pda_encyclopedia_tab.is_unlocked_note("encyclopedia__notes_" .. sec)
end
self.recipe_text_bg = self.recipe_text_bg or utjan_xml:InitStatic("background", self.cell)
self.recipe_text = self.recipe_text or utjan_xml:InitTextWnd("counter_text", self.cell)
local text
if recipe_is_known then
text = gc("ui_utjan_recipe_read")
self.recipe_text:SetTextColor( GetARGB(255, 185, 162, 138))
elseif has_stash then
text = "(???)"
self.recipe_text:SetTextColor( GetARGB(255, 255, 232, 208))
else
text = gc("ui_utjan_recipe_unread")
self.recipe_text:SetTextColor( GetARGB(255, 255, 232, 208))
end
local text_padding = settings.recipe_text.padding
set_text_rect(self.recipe_text, text_padding + 1, text_padding, text)
local name_h = self.recipe_text:GetHeight()
local name_w = self.recipe_text:GetWidth()
if has_stash then
local bar_h = self.bar and self.bar:IsShown() and self.bar:GetHeight() or 0
local cond_text_h = self.cond_text and self.cond_text:IsShown() and self.cond_text:GetHeight() or 0
self.recipe_text:SetWndPos( vector2():set( 0 , self.H - bar_h - cond_text_h - name_h) )
else
self.recipe_text:SetWndPos( vector2():set( 0 , self.H - name_h) )
end
-- Edited by Sota
--local bg_padding = name_w * 0.08
local bg_padding = name_w * 0.025
self.recipe_text_bg:SetWndRect(Frect():set(0, 0, name_w + (bg_padding * 2), name_h))
local name_pos = self.recipe_text:GetWndPos()
self.recipe_text_bg:SetWndPos( vector2():set(name_pos.x - bg_padding , name_pos.y ) )
self.recipe_text_bg:Show(true)
self.recipe_text:Show(true)
end
if workshop_autoinject and not workshop_autoinject.known_recipe then
base_wai_load = workshop_autoinject.load_state
function workshop_autoinject.load_state(mdata)
base_wai_load(mdata)
workshop_autoinject_known_recipes = mdata.known_recipe or {}
end
end
-- ADD RECIPE READ/UNREAD TEXT END
-- ADD MAGS REDUX ITEM TEXT
function Add_Mag_Icon_Text(self, xml, obj, sec, clsid)
if not magazine_binder then return end
if self.mag_ammo_count then
self.mag_ammo_count:Show(false)
end
if self.mag_ammo_count_bg then
self.mag_ammo_count_bg:Show(false)
end
if self.mag_ammo_name_bg then
for k,v in pairs(self.mag_ammo_name_bg)do
self.mag_ammo_name_bg[k]:Show(false)
end
end
if self.mag_ammo_name then
for k,v in pairs(self.mag_ammo_name)do
self.mag_ammo_name[k]:Show(false)
end
end
if not settings.mag_info.enable then return end
if not magazine_binder.is_magazine(sec) then return end
if (not self.ID) or self.manual then return end
local mag_data = magazine_binder.get_data(self.ID)
if not mag_data then return end
if self.cond_text then
self.cond_text:Show(false)
end
if self.cond_text_bg then
self.cond_text_bg:Show(false)
end
local count_h
local bar_h = self.bar and self.bar:IsShown() and self.bar:GetHeight() or 0
if settings.mag_info.show_ammo_count then
self.mag_ammo_count_bg = self.mag_ammo_count_bg or utjan_xml:InitStatic("background", self.cell)
self.mag_ammo_count = self.mag_ammo_count or utjan_xml:InitTextWnd("condition_text", self.cell)
local mag_capacity = SYS_GetParam(2, sec, "max_mag_size")
local text = #mag_data.loaded .. "/" .. mag_capacity
local text_padding = settings.mag_info.padding
set_text_rect(self.mag_ammo_count, text_padding + 1, text_padding, text)
count_h = self.mag_ammo_count:GetHeight() + bar_h
local count_w = self.mag_ammo_count:GetWidth()
self.mag_ammo_count:SetWndPos( vector2():set( 0 , self.H - count_h) )
self.mag_ammo_count_bg:SetWndRect(Frect():set(0, 0, count_w, count_h))
self.mag_ammo_count_bg:SetWndPos( self.mag_ammo_count:GetWndPos() )
local props = bar_list["condition_progess_bar"]
local cond = #mag_data.loaded / mag_capacity
local color = props.def or lerp_color( cond , props.min , props.mid , props.max )
if color then
self.mag_ammo_count:SetTextColor( color )
end
self.mag_ammo_count_bg:Show(true)
self.mag_ammo_count:Show(true)
else
count_h = 0
end
if not settings.mag_info.show_ammo_name then return end
if not (#mag_data.loaded > 0) then return end
self.mag_ammo_name = {}
self.mag_ammo_name_bg = {}
local last_bullet_sec
for k,v in pairs(mag_data.loaded) do
last_bullet_sec = v
end
local inv_short_name = SYS_GetParam(0, last_bullet_sec, "inv_name_short", "Bullet?")
local gc_name = gc(inv_short_name)
local i = 1
local name_cutoff = ""
while i > 0 do
self.mag_ammo_name_bg[i] = self.mag_ammo_name_bg[i] or utjan_xml:InitStatic("background", self.cell)
self.mag_ammo_name[i] = self.mag_ammo_name[i] or utjan_xml:InitTextWnd("counter_text", self.cell)
local text_padding = settings.mag_info.padding
set_text_rect(self.mag_ammo_name[i], text_padding, text_padding, gc_name)
local incr_i = false
while (self.mag_ammo_name[i]:GetWidth() > self.cell:GetWidth()) do
local str_table = str_explode(gc_name, " ")
if #str_table == 1 then
break
end
if name_cutoff == "" then
name_cutoff = str_table[1]
else
name_cutoff = name_cutoff .. " " .. str_table[1]
end
gc_name = ""
for i = 2, #str_table do
gc_name = gc_name .. str_table[i]
if #str_table > i then
gc_name = gc_name .. " "
end
end
set_text_rect(self.mag_ammo_name[i], text_padding, text_padding, gc_name)
incr_i = true
end
local name_h = self.mag_ammo_name[i]:GetHeight()
local name_w = self.mag_ammo_name[i]:GetWidth()
self.mag_ammo_name[i]:SetWndPos( vector2():set( 0 , self.H - count_h - (name_h * i)) )
-- Edited by Sota
--local bg_padding = name_w * 0.08
local bg_padding = name_w * 0.025
self.mag_ammo_name_bg[i]:SetWndRect(Frect():set(0, 0, name_w + (bg_padding * 2), name_h))
local name_pos = self.mag_ammo_name[i]:GetWndPos()
self.mag_ammo_name_bg[i]:SetWndPos( vector2():set(name_pos.x - bg_padding , name_pos.y ) )
self.mag_ammo_name_bg[i]:Show(true)
self.mag_ammo_name[i]:Show(true)
if incr_i then
i = i + 1
gc_name = name_cutoff
name_cutoff = ""
else
i = 0
end
end
end
-- ADD MAGS REDUX ITEM TEXT END
function Add_Repair_Icon(self, xml, obj, sec)
if self.gun_repair_icon then
self.gun_repair_icon:Show(false)
end
if not settings.wpn_info.show_gun_repair_type then return end
local repair_type = SYS_GetParam(0, sec, "repair_type")
if not repair_type then return end
local icon_texture = repair_type_texture_tbl[repair_type]
if not icon_texture then return end
local is_equipped = self.path == "equipment:cont_equ"
self.gun_repair_icon = self.gun_repair_icon or utjan_xml:InitStatic("gun_repair_icon", self.cell)
self.gun_repair_icon:InitTexture(icon_texture)
local y_offset = (not is_equipped) and self.wpn_name and self.wpn_name:IsShown() and self.wpn_name:GetHeight() or 2
local x_offset = is_equipped and -4 or -1
self.gun_repair_icon:SetWndPos(vector2():set(self.cell:GetWidth() - self.gun_repair_icon:GetWidth() + x_offset, self.cell:GetHeight() - self.gun_repair_icon:GetHeight() - y_offset))
self.gun_repair_icon:Show(true)
end
repair_type_texture_tbl = {
pistol = "ui_dyn_eq_repair_blue",
shotgun = "ui_dyn_eq_repair_green",
rifle_5 = "ui_dyn_eq_repair_red",
rifle_7 = "ui_dyn_eq_repair_yellow",
}
-- MCM
function load_defaults()
local t = {}
local op = item_icon_info_mcm.op
for i, v in ipairs(op.gr) do
if v.gr then
t[v.id] = {}
for ii, vv in ipairs(v.gr) do
if vv.def ~= nil then
t[v.id][vv.id] = vv.def
end
end
elseif v.def ~= nil then
t[v.id] = v.def
end
end
return t
end
settings = load_defaults()
function load_settings()
settings = load_defaults()
if ui_mcm then
for k, v in pairs(settings) do
if type(settings[k]) == "table" then
for kk, vv in pairs(settings[k]) do
settings[k][kk] = ui_mcm.get("item_icon_info/" .. k .. "/" .. kk)
end
else
settings[k] = ui_mcm.get("item_icon_info/" .. k)
end
end
end
return settings
end
function on_game_start()
RegisterScriptCallback("actor_on_first_update", load_settings)
RegisterScriptCallback("on_option_change", load_settings)
utjan_xml = CScriptXmlInit()
utjan_xml:ParseFile("ui_utjan_icon_info.xml")
end