Files
External-Item-Descriptions/features/eid_synergies.lua
T
lzrdblzzrd 7585979a0d
Check Localization / Check Localization process (push) Canceled after 0s
fix: synergy block without header bullet, separated by blank line
2026-09-22 14:35:13 +03:00

72 lines
2.5 KiB
Lua

-- Personal fork: synergy notes for owned items (Russian).
-- Data comes prebuilt from dead_god_items.json, see
-- EID-localization-audit/build_synergy_table.py and features/eid_synergy_data.lua.
-- When the player owns item A and looks at item B that synergizes with A,
-- the relevant note is appended to B's description.
local MAX_SYNERGY_LINES = 3
local function synergyTableFor(desc)
if EID.SynergyDataRU == nil then return nil end
if desc.ObjType ~= EntityType.ENTITY_PICKUP then return nil end
if desc.ObjVariant == PickupVariant.PICKUP_COLLECTIBLE then
return EID.SynergyDataRU.coll[desc.ObjSubType]
elseif desc.ObjVariant == PickupVariant.PICKUP_TRINKET then
return EID.SynergyDataRU.trink[desc.ObjSubType]
end
return nil
end
local function anyPartnerOwned(entry)
for _, partner in ipairs(entry.partners) do
if EID:PlayersHaveCollectible(partner) then
return true
end
end
return false
end
local function synergyCondition(desc)
if EID:getLanguage() ~= "ru" then return false end
if EID.Config["DisplaySynergies"] == false then return false end
local list = synergyTableFor(desc)
if not list then return false end
for _, entry in ipairs(list) do
if anyPartnerOwned(entry) then
return true
end
end
return false
end
local function synergyCallback(desc)
local list = synergyTableFor(desc)
if not list then return desc end
-- collect (partner, text) pairs for owned partners only
local lines = {}
for _, entry in ipairs(list) do
for _, partner in ipairs(entry.partners) do
if EID:PlayersHaveCollectible(partner) then
lines[#lines + 1] = { partner = partner, text = entry.text }
break
end
end
end
if #lines == 0 then return desc end
-- NOTE: a line starting with "{{Blank}} " gets an invisible bullet (= no dot),
-- and a line containing only "{{Blank}} " renders as an empty paragraph
-- (printBulletPoints advances one lineHeight per #-segment unconditionally)
desc.Description = desc.Description .. "#{{Blank}} #{{Blank}} Синергии:"
for i = 1, math.min(#lines, MAX_SYNERGY_LINES) do
-- NOTE: {{CollectibleID}} already renders the item's icon AND its name,
-- so no explicit name is added here
desc.Description = desc.Description .. "#{{Collectible" .. lines[i].partner .. "}}: " .. lines[i].text
end
if #lines > MAX_SYNERGY_LINES then
desc.Description = desc.Description .. "#…и ещё синергий: " .. (#lines - MAX_SYNERGY_LINES)
end
return desc
end
EID:addDescriptionModifier("EID Personal Synergy Notes", synergyCondition, synergyCallback)