Added New Mods and Profiles Folders

This is a complete rebuild of the modpack, with all new mods and updates for 1.5.3 of Anomaly.
This commit is contained in:
2025-01-14 05:07:53 -05:00
parent 85c665b107
commit 376b4b9689
21217 changed files with 546254 additions and 0 deletions
@@ -0,0 +1,29 @@
[valid_kind] ;adds collectables based on their config "kind"
w_melee
w_sniper
w_rifle
w_shotgun
w_pistol
w_explosive
w_smg
i_mutant_belt
i_mutant_part
i_arty
i_arty_junk
[valid_class] ;adds collectables based on their config "class"
WP_SCOPE
WP_SILEN
[valid_stash] ;valid containers for collecting
inv_backpack
placeable_case
placeable_blue_box
placeable_exo_repair_kit
placeable_weapon_rack
placeable_pistol_shelf
[exclude_section] ;excludes specific items by their section
wpn_gauss_quest
[include_section] ;includes specific items by their section
@@ -0,0 +1,92 @@
<!--
The Collector
Generated with AnomalyModCreator
-->
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<!--
Tooltips
-->
<string id="st_collector_is_collected">
<text>%c[ui_gray_1]This object is %c[d_green]in your collection</text>
</string>
<string id="st_collector_highest_quality">
<text>%c[ui_gray_2]Object quality: %c[pda_yellow]$quality%%c[ui_gray_2]. Highest quality in collection: %c[pda_yellow]$highest_quality%</text>
</string>
<string id="st_collector_not_collected">
<text>%c[ui_gray_1]This object is %c[d_red]not in your collection</text>
</string>
<string id="st_collector_current_col">
<text>%c[ui_gray_2]You have collected%c[d_green] $count %c[ui_gray_2]objects out of a total possible%c[d_blue] $total</text>
</string>
<string id="st_collector_tooltip_quality">
<text>%c[ui_gray_2]Quality of object: %c[pda_yellow]$quality%c[ui_gray_1]%</text>
</string>
<string id="st_collector_news_header">
<text>Collection Income!</text>
</string>
<string id="st_collector_news_msg">
<text>$clr_gray_1You have received $clr_yellow$income $clr_gray_1rubles from your collection of $clr_green$count $clr_gray_1objects!</text>
</string>
<!--
MCM
-->
<string id="ui_mcm_the_collector_title">
<text>The Collector</text>
</string>
<string id="ui_mcm_menu_the_collector">
<text>The Collector</text>
</string>
<string id="ui_mcm_the_collector_money_per_object">
<text>Money Per Collected Object</text>
</string>
<string id="ui_mcm_the_collector_enable_icon">
<text>Enable Collectable Item Icon</text>
</string>
<string id="ui_mcm_the_collector_enable_icon_found">
<text>Enable Collected Item Icon</text>
</string>
<string id="ui_mcm_the_collector_enable_quality_text">
<text>Enable Collected Item Quality Text</text>
</string>
<string id="ui_mcm_the_collector_enable_inventory_tooltip_text">
<text>Enable Player Item Tooltip Text</text>
</string>
<string id="ui_mcm_the_collector_enable_stash_tooltip_text">
<text>Enable Stashed Item Tooltip Text</text>
</string>
<string id="ui_mcm_the_collector_enable_income">
<text>Enable Income</text>
</string>
<string id="ui_mcm_the_collector_income_interval_minutes">
<text>Income Interval (Minutes)</text>
</string>
<string id="ui_mcm_the_collector_minimum_objects_for_income">
<text>Minimum Collected Objects For Income</text>
</string>
<string id="ui_mcm_the_collector_scale_by_quality">
<text>Scale Object Income By Quality</text>
</string>
<string id="ui_mcm_the_collector_scale_by">
<text>Scale Object Income By (Quality)</text>
</string>
<string id="ui_mcm_lst_clctr_scale_none">
<text>No Scaling</text>
</string>
<string id="ui_mcm_lst_clctr_scale_cond">
<text>Base Condition</text>
</string>
<string id="ui_mcm_lst_clctr_scale_parts">
<text>Base and Parts Condition</text>
</string>
</string_table>
@@ -0,0 +1,92 @@
<!--
The Collector
Generated with AnomalyModCreator
-->
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<!--
Tooltips
-->
<string id="st_collector_is_collected">
<text>%c[ui_gray_1]This object is %c[d_green]in your collection</text>
</string>
<string id="st_collector_highest_quality">
<text>%c[ui_gray_2]Object quality: %c[pda_yellow]$quality%%c[ui_gray_2]. Highest quality in collection: %c[pda_yellow]$highest_quality%</text>
</string>
<string id="st_collector_not_collected">
<text>%c[ui_gray_1]This object is %c[d_red]not in your collection</text>
</string>
<string id="st_collector_current_col">
<text>%c[ui_gray_2]You have collected%c[d_green] $count %c[ui_gray_2]objects out of a total possible%c[d_blue] $total</text>
</string>
<string id="st_collector_tooltip_quality">
<text>%c[ui_gray_2]Quality of object: %c[pda_yellow]$quality%c[ui_gray_1]%</text>
</string>
<string id="st_collector_news_header">
<text>Collection Income!</text>
</string>
<string id="st_collector_news_msg">
<text>$clr_gray_1You have received $clr_yellow$income $clr_gray_1rubles from your collection of $clr_green$count $clr_gray_1objects!</text>
</string>
<!--
MCM
-->
<string id="ui_mcm_the_collector_title">
<text>The Collector</text>
</string>
<string id="ui_mcm_menu_the_collector">
<text>The Collector</text>
</string>
<string id="ui_mcm_the_collector_money_per_object">
<text>Money Per Collected Object</text>
</string>
<string id="ui_mcm_the_collector_enable_icon">
<text>Enable Collectable Item Icon</text>
</string>
<string id="ui_mcm_the_collector_enable_icon_found">
<text>Enable Collected Item Icon</text>
</string>
<string id="ui_mcm_the_collector_enable_quality_text">
<text>Enable Collected Item Quality Text</text>
</string>
<string id="ui_mcm_the_collector_enable_inventory_tooltip_text">
<text>Enable Player Item Tooltip Text</text>
</string>
<string id="ui_mcm_the_collector_enable_stash_tooltip_text">
<text>Enable Stashed Item Tooltip Text</text>
</string>
<string id="ui_mcm_the_collector_enable_income">
<text>Enable Income</text>
</string>
<string id="ui_mcm_the_collector_income_interval_minutes">
<text>Income Interval (Minutes)</text>
</string>
<string id="ui_mcm_the_collector_minimum_objects_for_income">
<text>Minimum Collected Objects For Income</text>
</string>
<string id="ui_mcm_the_collector_scale_by_quality">
<text>Scale Object Income By Quality</text>
</string>
<string id="ui_mcm_the_collector_scale_by">
<text>Scale Object Income By (Quality)</text>
</string>
<string id="ui_mcm_lst_clctr_scale_none">
<text>No Scaling</text>
</string>
<string id="ui_mcm_lst_clctr_scale_cond">
<text>Base Condition</text>
</string>
<string id="ui_mcm_lst_clctr_scale_parts">
<text>Base and Parts Condition</text>
</string>
</string_table>
@@ -0,0 +1,8 @@
<w>
<file name = "ui\ui_icon_collector_magnifier2">
<texture id = "ui_icon_collector_magnifier2" x="0" y="0" width="64" height="64" />
</file>
<file name = "ui\ui_icon_checkmark">
<texture id = "ui_icon_checkmark" x="0" y="0" width="64" height="64" />
</file>
</w>
@@ -0,0 +1,5 @@
<w>
<collector_quality_text x="0" y="0" width="25" height="25" stretch="1">
<text font="arial_14" align="r" vert_align="t" a="255" r="206" g="168" b="30"/>
</collector_quality_text>
</w>
@@ -0,0 +1,191 @@
--[[
Dynamic Icon Layers for anomaly inventory. Used by SortingPlus and other mods by RavenAscendant.
4JUL2021
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
Author: RavenAscendant
--]]
function pr(txt, ...)
-- printf("RAXPH: "..txt, ...)
end
local iconor = aaa_rax_icon_override_mcm and true or false
local icon_override = iconor and aaa_rax_icon_override_mcm.icon_override
local ratio = utils_xml.screen_ratio()
local icon_layers = {}
--functor will be passed cell, obj and section
--functor should return table with the same info as an item section icon layer. {icon_layer = "tch_upgr_ico", icon_layer_x = 0, icon_layer_y = 1, icon_layer_scale = 0.75}
--functor can alternitivly return texture name/file, cords and dimesions {texture = "xxy.dds", x = 0, y = 0, w = 10, h = 10}
function register(name, functor)
if not name then return end -- need all three params and field really needs to be a string
if not icon_layers[name] then
icon_layers[name] = {}
end
table.insert(icon_layers[name], functor)
end
function refresh(mode) --safer way to refresh inventory, mode == 1 refreshes sorting.
local inventory = GetActorMenu()
inventory:UnHighlight_All()
if mode == 1 then
local sort = nil
for i=1,#inventory.sort_btn do
if inventory.sort_btn[i]:GetCheck() then
sort = i
end
end
inventory:On_Sort(sort or 1,false)
else
inventory:UpdateItems()
end
end
--add layers to what gets updated
local base_update = utils_ui.UICellItem.Update
function utils_ui.UICellItem:Update(obj)
obj = obj or (self.ID and level.object_by_id(self.ID))
if (self.showcase == 0) and (not obj) then
self:ResetToChild()
return false
end
local sec = self.section
local xml = self:GetXML()
if obj then
local clsid = obj:clsid()
self:Add_Layers(xml, obj, sec, clsid)
end
return base_update(self, obj)
end
local base_layers = utils_ui.UICellItem.Add_Layers
function utils_ui.UICellItem:Add_Layers(xml, obj, sec, clsid)
base_layers(self, xml, obj, sec, clsid)
local ii = 1
while ((iconor and icon_override:section_exist(sec) and icon_override:r_string_ex(sec,(ii).."icon_layer")) or SYS_GetParam(0, sec, (ii).."icon_layer") ~= nil) do --get ii up to next avail layer.
ii = ii + 1
end
if (not self.layer) then
self.layer = {}
end
for key, name in pairs(icon_layers) do
for _, functor in pairs(name) do
if (not self.layer[ii]) then
if (not xml) then
xml = self:GetXML()
end
self.layer[ii] = xml:InitStatic(self.path .. ":" .. self.cx .. ":pic", self.ico)
end
local tbl = functor and functor(self, obj, sec)
if tbl then
if tbl.icon_layer then
add_icon_layer(self, self.layer[ii], self.ico, sec, tbl)
ii = ii + 1
end
if tbl.texture then
add_texture_layer(self,self.layer[ii], self.ico, sec, tbl)
ii = ii + 1
end
end
end
end
end
function add_icon_layer(self,ele, base, sec_m, tbl)
local sec_l = tbl.icon_layer
local grid_size = self.grid_size
local x = tbl.icon_layer_x or 0
local y = tbl.icon_layer_y or 0
local axis = utils_xml.get_item_axis(sec_l, grid_size)
local w = axis.w
local h = axis.h
local scale = tbl.icon_layer_scale or 1
local scale_pos = scale * (grid_size/50)
local rot = ele:GetHeading() > 0
local x_s = x * ratio * scale_pos
local y_s = y * scale_pos
local w_s = w * ratio * scale
local h_s = h * scale
local w_off = (w_s/2)
local h_off = (h_s/2)
if rot then
-- despite rotation, movement for x and y stays normal!
-- Move start pos to match the one for rotated base icon
local w_b, h_b = base:GetWidth(), base:GetHeight()
local x_st = (w_b/2) - (h_b/2)
local y_st = h_b + x_st
-- On 90 rotation, x and y are inverted, y axis goes negative simulate normal x movement
x_s = x_st + (y * ratio * scale_pos)
y_s = y_st - (x * scale_pos)
w_s = w * scale
h_s = h * scale
w_off = (h_s - h_s *ratio/2)
h_off = -w_s/2
end
ele:InitTexture( utils_xml.get_icons_texture(sec_l) )
ele:SetTextureRect(Frect():set( utils_xml.get_item_axis(sec_l, nil, true) ))
ele:SetStretchTexture(true)
ele:SetWndPos(vector2():set( x_s + w_off , y_s + h_off ))
ele:SetWndSize(vector2():set( w_s , h_s ))
ele:Show(true)
end
function add_texture_layer(self,ele, base, sec_m, tbl)
local grid_size = self.grid_size
local x = tbl.x or 0
local y = tbl.y or 0
local w = tbl.w
local h = tbl.h
local scale = 1
local scale_pos = scale * (grid_size/50)
local rot = ele:GetHeading() > 0
local x_s = x * ratio * scale_pos
local y_s = y * scale_pos
local w_s = w * ratio * scale
local h_s = h * scale
local w_off = (w_s/2)
local h_off = (h_s/2)
if rot then
-- despite rotation, movement for x and y stays normal!
-- Move start pos to match the one for rotated base icon
local w_b, h_b = base:GetWidth(), base:GetHeight()
local x_st = (w_b/2) - (h_b/2)
local y_st = h_b + x_st
-- On 90 rotation, x and y are inverted, y axis goes negative simulate normal x movement
x_s = x_st + (y * ratio * scale_pos)
y_s = y_st - (x * scale_pos)
w_s = w * scale
h_s = h * scale
w_off = (h_s - h_s *ratio/2)
h_off = -w_s/2
end
ele:InitTexture( tbl.texture )
ele:SetStretchTexture(true)
ele:SetWndPos(vector2():set( x_s + w_off , y_s + h_off ))
ele:SetWndSize(vector2():set( w_s , h_s ))
ele:Show(true)
end
@@ -0,0 +1,356 @@
local gc = game.translate_string
local parse_keys = utils_data.parse_string_keys
collected_items = {} -- Key: section , Value: table with id's
local total_collectables = {}
local time_last_income = 0
local XML
collector_ini = ini_file_ex("plugins\\the_collector\\the_collector_settings.ltx")
valid_actor_bags = {
[EDDListType.iActorBag] = true,
[EDDListType.iActorSlot] = true
}
function dprint(...)
if settings.debug then
printf(...)
end
end
function base_build_desc_header(obj, sec, str) end
function on_game_start()
--MCM
RegisterScriptCallback("actor_on_first_update", load_settings)
RegisterScriptCallback("on_option_change", load_settings)
--The Collector
RegisterScriptCallback("ActorMenu_on_item_after_move", ActorMenu_on_item_after_move)
RegisterScriptCallback("save_state", save_state)
RegisterScriptCallback("load_state", load_state)
RegisterScriptCallback("actor_on_first_update", start_income_cycle)
RegisterScriptCallback("on_option_change", start_income_cycle)
--Item icon
rax_icon_layers.register("collectable", icon_collectable) --used like a callback register
base_build_desc_header = ui_item.build_desc_header
ui_item.build_desc_header = monkey_build_desc_header
XML = CScriptXmlInit()
XML:ParseFile("ui_the_collector.xml")
Base_Add_Icon = utils_ui.UICellItem.Add_Icon
utils_ui.UICellItem.Add_Icon = Monke_Add_Icon
Base_Cell_Reset = utils_ui.UICellItem.Reset
utils_ui.UICellItem.Reset = Monke_Cell_Reset
total_collectables = count_collectables()
end
function start_income_cycle()
if settings.enable_income and minimum_objects_collected() then
ResetTimeEvent("the_collector", "check_for_income", time_to_next_income()) -- Only resets if there's already an income cycle
CreateTimeEvent("the_collector", "check_for_income", time_to_next_income(), check_for_income) -- Starts income cycle if there isn't one
else
RemoveTimeEvent("the_collector", "check_for_income")
end
end
function check_for_income()
if not minimum_objects_collected() then
dprint("Not minimum_objects_collected")
return true
end
dprint("Checking for income. Last " .. time_last_income .. " Elapsed " .. get_time_elapsed())
--local income = size_table(collected_items) * settings.money_per_object --income_per_item
local income = 0
for sec, v in pairs(collected_items) do
if not settings.scale_by_quality then
income = income + settings.money_per_object
else
local highest_quality = get_highest_quality_collected_object(sec)
income = income + (settings.money_per_object * highest_quality)
end
end
--income = math.floor(income * (math.random(80, 120) / 100)) -- Apply random range
income = round(income)
db.actor:give_money(income)
show_income_news(income)
time_last_income = get_time_elapsed()
ResetTimeEvent("the_collector", "check_for_income", income_interval_seconds())
end
function time_to_next_income()
local time_to_next_income = income_interval_seconds() + time_last_income - get_time_elapsed()
time_to_next_income = math.max(0, time_to_next_income)
return time_to_next_income
end
function income_interval_seconds()
if settings.debug then
return 5
end
return settings.income_interval_minutes * 60
end
function minimum_objects_collected()
return size_table(collected_items) >= settings.minimum_objects_for_income
end
function is_collectable(sec)
if collector_ini:line_exist("valid_kind", SYS_GetParam(0, sec, "kind", "na")) then return true end
if collector_ini:line_exist("valid_class", SYS_GetParam(0, sec, "class", "na")) then return true end
if collector_ini:line_exist("include_section", sec) then return true end
if collector_ini:line_exist("exclude_section", sec) then return false end
return false
end
-- Returns number from 0 to 1
function get_object_quality(id)
local quality = 1
local obj = level.object_by_id(id)
local obj_cond = obj:condition()
local parts = item_parts.get_parts_con(obj, nil, false)
local average_con = 1
if parts and not is_empty(parts) then
local total_con = 0
local part_count = 0
for k,v in pairs(parts) do
if SYS_GetParam(1, k, "cond_part") then
dprint("Part " .. k .. " - Con " .. v)
total_con = total_con + math.max(0, v / 99)
part_count = part_count + 1
end
end
average_con = total_con / part_count
dprint("Total Parts " .. part_count .. " - Avrg con " .. average_con)
end
quality = (obj_cond + average_con) / 2
local upgrades_installed = utils_item.get_upgrades_installed(nil, id)
quality = quality + (size_table(upgrades_installed) * 0.05)
dprint("Quality " .. quality)
return quality
end
function get_highest_quality_collected_object(sec)
local highest_quality = 0
for id, quality in pairs(collected_items[sec]) do
if type(quality) == "number" and quality > highest_quality then --Check type cause old indev data
highest_quality = quality
end
end
return highest_quality
end
function show_income_news(income)
local header = gc("st_collector_news_header")
local msg = parse_keys(gc("st_collector_news_msg"), combine_tables(xml_colors, { ["count"] = size_table(collected_items), ["income"] = income}))
xr_sound.set_sound_play(AC_ID, "pda_tips")
db.actor:give_game_news(header, msg, "ui_inGame2_PD_Sostoyatelniy_klient", 0, 10000)
end
function monkey_build_desc_header(obj, sec, str)
str = str or gc(ini_sys:r_string_ex(sec,"description"))
if not str then return "" end
if not obj then return base_build_desc_header(obj, sec, str) end
if not is_collectable(sec) then return base_build_desc_header(obj, sec, str) end
local parent_section = SYS_GetParam(0, sec, "parent_section", sec)
local collected_str = ""
-- If stashed collected item
if collected_items[parent_section] and collected_items[parent_section][obj:id()] then
if settings.enable_stash_tooltip_text then
collected_str = gc("st_collector_is_collected")
collected_str = collected_str .. "\\n" .. parse_keys(gc("st_collector_current_col"), { ["count"] = size_table(collected_items), ["total"] = size_table(total_collectables)})
local quality = round(collected_items[parent_section][obj:id()] * 1000) / 10
collected_str = collected_str .. "\\n" .. parse_keys(gc("st_collector_tooltip_quality"), { ["quality"] = quality})
str = collected_str .. "\\n \\n" .. str
end
-- If non-stashed collectable item
elseif settings.enable_inventory_tooltip_text then
if collected_items[parent_section] and not collected_items[parent_section][obj:id()] then
local highest_quality = round(get_highest_quality_collected_object(parent_section) * 1000) / 10
local quality = round(get_object_quality(obj:id()) * 1000) / 10
collected_str = gc("st_collector_is_collected") .. "\\n" .. parse_keys(gc("st_collector_highest_quality"), { ["quality"] = quality, ["highest_quality"] = highest_quality})
else
collected_str = gc("st_collector_not_collected")
end
str = collected_str .. "\\n \\n" .. str
end
return base_build_desc_header(obj, sec, str)
end
function ActorMenu_on_item_after_move(case, item, mode, bag_from)
if not (case and item and mode == "loot") then return end
local case_obj = get_object_by_id(case)
if case_obj and case_obj:section() and collector_ini:line_exist("valid_stash", case_obj:section()) then
local sec = item:section()
local sec = SYS_GetParam(0, sec, "parent_section", sec)
local id = item:id()
if valid_actor_bags[bag_from] and is_collectable(sec) then
if collected_items[sec] then
collected_items[sec][id] = get_object_quality(id)
dprint("Added " .. id)
else
collected_items[sec] = { [id] = get_object_quality(id) }
dprint("New sec " .. sec .. " Added " .. id)
end
if settings.enable_income and minimum_objects_collected() then
--Only creates event if there isn't one already running
CreateTimeEvent("the_collector", "check_for_income", time_to_next_income(), check_for_income)
end
else
if collected_items[sec] then
collected_items[sec][id] = nil
dprint("Removed " .. id)
if is_empty(collected_items[sec]) then
collected_items[sec] = nil
dprint("Removed " .. sec)
end
end
end
end
end
-- Function for rax_icon_layers
function icon_collectable(cell, obj, sec)
if not sec then return end
if is_collectable(sec) then
local id = cell.ID
local sec = SYS_GetParam(0, sec, "parent_section", sec)
local axis = utils_xml.get_item_axis(sec)
if settings.enable_icon_found and collected_items[sec] and id and collected_items[sec][id] then
return {texture = "ui_icon_checkmark", x = (axis.w - 13), y = 1, w = 12, h = 12}
elseif settings.enable_icon and not collected_items[sec] and not (cell.container.ID == "actor_equ" or cell.container.ID == "actor_belt") then
return {texture = "ui_icon_collector_magnifier2", x = (axis.w - 13), y = 1, w = 12, h = 12}
end
end
end
function Monke_Add_Icon(self, sec, w, h)
Base_Add_Icon(self, sec, w, h)
if self.quality_text then
self.quality_text:Show(false)
end
if not settings.enable_quality_text then return end
local sec = SYS_GetParam(0, sec, "parent_section", sec)
local id = self.ID
if not (collected_items[sec] and id and collected_items[sec][id]) then return end
local obj = level.object_by_id(id)
local clsid = obj and obj:clsid()
local has_cond = SYS_GetParam(1,sec, "use_condition") or IsWeapon(nil,clsid) or IsOutfit(nil,clsid) or IsHeadgear(nil,clsid) or IsArtefact(nil,clsid)
if (not has_cond) then return end
if not self.quality_text then
self.quality_text = XML:InitTextWnd("collector_quality_text", self.ico)
end
self.quality_text:SetWndRect(Frect():set(0, 13, self.ico:GetWidth(), self.ico:GetHeight()))
local quality = round(collected_items[sec][id] * 100)
self.quality_text:SetText( quality .. "%")
self.quality_text:Show(true)
end
function Monke_Cell_Reset(self)
Base_Cell_Reset(self)
if self.manual then
if self.quality_text then
self.quality_text:Show(false)
end
end
end
function get_time_elapsed()
return (game.get_game_time():diffSec(level.get_start_time()) /level.get_time_factor())
end
xml_colors = {
["clr_green"] = "%" .. "%c[255,51,255,102]",
["clr_red"] = "%" .. "%c[255,204,0,51]",
["clr_yellow"] = "%" .. "%c[255,250,218,94]",
["clr_gray_1"] = "%" .. "%c[255,170,170,170]",
["clr_gray_2"] = "%" .. "%c[255,140,140,140]"
}
function count_collectables()
t = {}
ini_sys:section_for_each(function(section)
if not t[section] then
if is_collectable(section) then
local sec = section
local parent_section = SYS_GetParam(0, sec, "parent_section")
if parent_section then
sec = parent_section
end
t[sec] = true
end
end
end)
return t
end
function combine_tables(t1, t2)
z = {}
for k,v in pairs(t1) do z[k]=v end
for k,v in pairs(t2) do z[k]=v end
return z
end
function save_state(m_data)
m_data.collected_items = collected_items
m_data.time_last_income = time_last_income
end
function load_state(m_data)
collected_items = m_data.collected_items or {}
time_last_income = m_data.time_last_income or 0
end
-- MCM
function load_defaults()
local t = {}
local op = the_collector_mcm.op
for i, v in ipairs(op.gr) do
if 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
settings[k] = ui_mcm.get("the_collector/" .. k)
end
end
return settings
end
@@ -0,0 +1,23 @@
-- The Collector
op = { id= "the_collector",sh=true ,gr={
{ id= "title", type= "slide", link= "ui_options_slider_player", text="ui_mcm_the_collector_title", size= {512,50}, spacing= 20 },
{id = "enable_icon", type = "check", val = 1, def=true},
{id = "enable_icon_found", type = "check", val = 1, def=true},
{id = "enable_quality_text", type = "check", val = 1, def=true},
{id = "enable_inventory_tooltip_text", type = "check", val = 1, def=true},
{id = "enable_stash_tooltip_text", type = "check", val = 1, def=true},
{id = "enable_income", type = "check", val = 1, def=true},
{id = "money_per_object", type = "track", val = 2, min=1, max=200, step=1, def = 50},
{id = "income_interval_minutes", type = "track", val = 2, min=5, max=240, step=5, def = 30},
{id = "scale_by_quality", type = "check", val = 1, def=true},
--{id = "scale_by", type= "list", val= 0, def = "scale_parts", content= {{"scale_none","clctr_scale_none"}, {"scale_cond","clctr_scale_cond"},{"scale_parts","clctr_scale_parts"}}},
{id = "minimum_objects_for_income", type = "track", val = 2, min=1, max=50, step=1, def = 5},
{id = "debug", type = "check", val = 1, def=false},
}
}
function on_mcm_load()
return op
end
+28
View File
@@ -0,0 +1,28 @@
[General]
gameName=stalkeranomaly
modid=0
version=d2024.12.3.0
newestVersion=
category="-1,"
nexusFileStatus=1
installationFile=The_Collector-v1.0.7z
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2024-12-04T00:15:59Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1