feat(kæde): advarsel når en fabrik gården er afhængig af slukkes
Slukker spilleren en produktion, hvis vare et tændt flow kører (manuel vare eller målet tager den i auto), en stald æder eller en aktiv kæde bruger, kommer én besked pr. slukning med brugere og lagerdage, og en rød post 'Slukket men nødvendig' i Kræver handling og statusvinduet så længe den er slukket og nødvendig. Ingen advarsel når en anden tændt produktion dækker, lageret rækker over 60 dage, kæden selv slukkede den eller den var slukket ved indlæsning. Tjekket kører i kædens tick også uden kæder; ren logik i adDependency.lua.
This commit is contained in:
@@ -4,6 +4,14 @@
|
||||
-- siges det at et flow ikke hjælper (producér/køb). Afgørelsen er ADStorageStats.flowAdvice (testet).
|
||||
-- Funktionerne lægges på SmartPickupFrame (indlæses efter SmartPickupFrame.lua).
|
||||
|
||||
-- Lagerfanen for en bygningstype (TAB_KINDS), fx "factory" -> fanen Fabrikker.
|
||||
function SmartPickupFrame.tabOfKind(kind)
|
||||
for tab, tabKind in pairs(SmartPickupFrame.TAB_KINDS or {}) do
|
||||
if tabKind == kind then return tab end
|
||||
end
|
||||
return SmartPickupFrame.TAB_OVERVIEW
|
||||
end
|
||||
|
||||
local function fillTypeName(fillType)
|
||||
return g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType)
|
||||
end
|
||||
@@ -64,6 +72,8 @@ end
|
||||
function SmartPickupFrame:attentionAdvice(entry)
|
||||
-- kæde-forslag og manglende led har ingen vare (stat): klik fører til fanen Kæder
|
||||
if entry ~= nil and (entry.kind == "chainSuggest" or entry.kind == "chainProblem") then return "chain", nil end
|
||||
-- slukket men nødvendig: fanen Fabrikker (Kæder når kun en kæde bruger varen)
|
||||
if entry ~= nil and entry.kind == "dependencyOff" then return entry.onlyChain and "chain" or "factories", nil end
|
||||
if entry ~= nil and entry.kind == "sell" and entry.stat ~= nil then return sellAdviceFor(entry.stat) end
|
||||
if entry == nil or entry.kind ~= "empty" or entry.stat == nil then return "none", nil end
|
||||
local stat = entry.stat
|
||||
@@ -86,6 +96,7 @@ end
|
||||
|
||||
function SmartPickupFrame:attentionHint(advice, info)
|
||||
if advice == "chain" then return self.i18n:getText("spu_attention_hintChain") end
|
||||
if advice == "factories" then return self.i18n:getText("spu_attention_hintFactories") end
|
||||
if advice == "open" then return string.format(self.i18n:getText("spu_attention_hintOpen"), tostring(info.run.name)) end
|
||||
if advice == "flow" then return self.i18n:getText(info.sell and "spu_attention_hintSellFlow" or "spu_attention_hintFlow") end
|
||||
if advice == "produce" then return self.i18n:getText("spu_attention_hintProduce") end
|
||||
@@ -103,6 +114,10 @@ function SmartPickupFrame:onAttentionClick(entry)
|
||||
frame:switchTab(SmartPickupFrame.TAB_CHAINS)
|
||||
return
|
||||
end
|
||||
if entry ~= nil and entry.kind == "dependencyOff" then
|
||||
frame:switchTab(entry.onlyChain and SmartPickupFrame.TAB_CHAINS or SmartPickupFrame.tabOfKind("factory"))
|
||||
return
|
||||
end
|
||||
local adEnv = frame.getAdEnv()
|
||||
local advice, info = frame:attentionAdvice(entry)
|
||||
if adEnv == nil or advice == "none" then return end
|
||||
|
||||
@@ -183,10 +183,15 @@ function SmartPickupFrame:addKpiRow(stats)
|
||||
return row
|
||||
end
|
||||
|
||||
-- Varepunkterne + kædens punkter (røde manglende led, højst 2, og ét samlet punkt for afgrødeforslag; ADChain.last,
|
||||
-- ingen evaluering her), samme loft MAX_ATTENTION.
|
||||
-- Varepunkterne + kædens punkter (røde manglende led, højst 2, røde "Slukket men nødvendig", højst 2, og ét samlet
|
||||
-- punkt for afgrødeforslag), samme loft MAX_ATTENTION. ADChain.last genbruges; er det ældre end CHAIN_MAX_AGE_MS,
|
||||
-- evalueres der (visning, handler ikke), så en slukket nødvendig fabrik ses straks.
|
||||
function SmartPickupFrame:attentionFor(stats)
|
||||
local attention = ADStorageStats.attentionList(stats, SmartPickupFrame.MAX_ATTENTION)
|
||||
if ADChain ~= nil and ADChain.evaluate ~= nil and self.chainLast ~= nil and self.getAdEnv ~= nil then
|
||||
local okEnv, adEnv = pcall(self.getAdEnv)
|
||||
if okEnv and adEnv ~= nil then pcall(self.chainLast, self, adEnv) end
|
||||
end
|
||||
if ADChain == nil or ADChain.last == nil then return attention end
|
||||
return ADStorageStats.mergeAttention(attention, ADStorageStats.chainEntries(ADChain.last), SmartPickupFrame.MAX_ATTENTION)
|
||||
end
|
||||
@@ -201,6 +206,11 @@ function SmartPickupFrame:alertText(entry)
|
||||
if (entry.more or 0) > 0 then text = text .. string.format(" (+%d)", entry.more) end
|
||||
return text
|
||||
end
|
||||
if entry.kind == "dependencyOff" then
|
||||
local text = string.format(i18n:getText("spu_attention_depOff"), tostring(entry.buildingName))
|
||||
if (entry.more or 0) > 0 then text = text .. string.format(" (+%d)", entry.more) end
|
||||
return text
|
||||
end
|
||||
if entry.kind == "empty" then
|
||||
return string.format(i18n:getText("spu_alert_empty"), stat.title, self:formatDays(stat.days), fc(stat.farmLevel or 0), fc(math.abs(stat.net or 0)))
|
||||
elseif entry.kind == "full" then
|
||||
|
||||
Reference in New Issue
Block a user