-- ====================================================================== --[[ Show All Faction Relations in PDA -- ====================================================================== MCM initialization script Author: dEmergence (dEmergence @ ModDB) Source: https://www.moddb.com/mods/stalker-anomaly/addons/show-all-faction-relation-in-pda-except-monolith Version: 6.2 Updated: 20231220 Credits for code that I found helpful and reused: TheMrDemonized, DoctorX for MCM Preset Selection Code As found in "[1.5.2/1.5.1] DYNAMIC ANOMALIES OVERHAUL (DAO)" https://www.moddb.com/mods/stalker-anomaly/addons/dynamic-anomalies-overhaul-dao-read-description-please ravenascendant for MCM table insert Code As found in "REPUTATION EDITOR (ANOMALY 1.5.1/1.5.2)" https://www.moddb.com/mods/stalker-anomaly/addons/reputation-editor This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License -- ===================================================================--]] -- Reused Code from DAO op_id = "dmg_safr_pda" op_preset_id = "user_preset" presets = { [0] = {}, [1] = {}, [2] = {} } function Set(t,set_value) local s = {} for _,v in pairs(t) do s[v] = set_value end return s end op = {id = "dmg_safr_pda", sh = true, gr = {}} -- Reused Code from DAO if ui_mcm and ui_mcm.UIMCM and ui_mcm.UIMCM.Callback_List then MCM_Callback_List = ui_mcm.UIMCM.Callback_List ui_mcm.UIMCM.Callback_List = function(self, ctrl, path, opt, v) MCM_Callback_List(self, ctrl, path, opt, v) if path ~= op_id then return end if opt == op_preset_id then local value = self:GetValue(path, opt, v) set_preset(self, value) end end end function on_mcm_load() -- Populate Presets -- Anomaly Default Extended -- Set 'Do not show' for all then overwrite with default values presets[0] = Set(game_relations.factions_table,0) presets[0]["stalker"] = 2 presets[0]["bandit"] = 2 presets[0]["csky"] = 2 presets[0]["dolg"] = 2 presets[0]["freedom"] = 2 presets[0]["killer"] = 2 presets[0]["army"] = 2 presets[0]["ecolog"] = 2 presets[0]["monolith"] = 2 if level.present and db.actor then local actor_comm = string.gsub( character_community(db.actor), "actor_", "" ) printf("SAFR: Actor community = '"..actor_comm) presets[0][actor_comm] = 2 end presets[1] = Set(game_relations.factions_table,2) presets[2] = Set(game_relations.factions_table,1) -- mcm menu code t = { {id = "title", type = "slide", link = "ui_options_slider_player", text = "ui_mcm_dmg_safr_pda_title", size = { 512, 50 }, spacing = 20 }, {id = "show_eliminated", type = "check", val = 1, def = true}, {id = "disable_squad_count", type = "check", val = 1, def = true}, {id = "show_local_squad_count", type = "check", val = 1, def = false}, {id = "obscure_enemy_squad_count", type = "check", val = 1, def = true}, {id = "divider", type="line" }, {id = "use_encyclopedia_discovery", type = "check", val = 1, def = false}, {id = "debug_log", type = "check", val = 1, def = false}, {id = "show_mutant_faction", type = "check", val = 1, def = false}, {id = "divider", type="line" }, {id = "user_preset", type = "list", val = 2, def = 1, content= { {0,"SAFR_default_anomaly"}, {1,"SAFR_all_always"}, {2,"SAFR_all_when_discovered"}, {3,"SAFR_user_defined"} } }, {id = "user_defined_desc", type = "desc", text = "ui_mcm_dmg_safr_pda_user_defined_desc_text"} } for i=1, #game_relations.factions_table do table.insert(t, {id = game_relations.factions_table[i], hint = "dcommontxt_factions_"..game_relations.factions_table[i], type = "radio_h", val = 2, def = 1, content = { { 0, "SAFR_Never_show_faction" }, { 1, "SAFR_Show_faction_by_progression" }, { 2, "SAFR_Always_show_faction" } }}) end op.gr = t return op end -- Reused Code from DAO function set_preset(self, p) if not presets[p] then printf("DRX DA preset %s not found", p) return end -- Pre-build available MCM values local t = {} for _, v in ipairs(op.gr) do if v.def ~= nil then t[v.id] = v.def end end for k, value in pairs(presets[p]) do if t[k] then -- Validate option local v = ui_mcm.get_opt_table(op_id .. "/" .. k) if v and v.type then -- Get proper value if v.val == 0 then -- Pass input value as is elseif v.val == 1 then value = (value == "true") and true or false elseif v.val == 2 then value = clamp(tonumber(value), v.min or 0, v.max or 100) end -- Extract path and opt local t = ui_mcm.str_opt_explode(op_id .. "/" .. k) local opt = t[#t] local path = t[1] for i=2,#t-1 do path = ui_mcm.cc(path , t[i]) end -- Cache changes self:CacheValue(path, opt, value, v) end end end -- Update XML elements self:Reset_opt(self.last_curr_tree, self.last_path) -- Update state self:UpdatePending() end