https://station14.ru/>Morty м (Защитил страницу Модуль:Chemistry Lookup: Скрипты ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))) |
Dante (обсуждение | вклад) Нет описания правки |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 55: | Строка 55: | ||
local out = "" | local out = "" | ||
for k in pairs(p.react) do | for k in pairs(p.react) do | ||
if tablelength(p.react[k].effects) ~= 0 then | if p.react[k] and tablelength(p.react[k].effects) ~= 0 then | ||
out = out .. frame:expandTemplate{ title = "Reactionbox", args = { reaction = k }} | out = out .. frame:expandTemplate{ title = "Reactionbox", args = { reaction = k }} | ||
end | end | ||
Строка 78: | Строка 78: | ||
function p.buildreaction(frame, react) | function p.buildreaction(frame, react) | ||
local data = p.react[react] | local data = p.react[react] | ||
if data == nil then | |||
return "Error: reaction data is nil for " .. tostring(react) | |||
end | |||
local dest = "Chemistry" | local dest = "Chemistry" | ||
local args = {} | local args = {} | ||
local i = 0 | local i = 0 | ||
for k,v in pairs(data.reactants) do | |||
if data.reactants then | |||
for k, v in pairs(data.reactants) do | |||
i = i + 1 | |||
local dest = "Chemistry" | |||
if p.groupDirection[p.chem[k].group] ~= nil then | |||
dest = p.groupDirection[p.chem[k].group] | |||
end | |||
args["component-" .. i] = frame:expandTemplate{ title = "Chem Recipe Component", args = { reagent = k, amount = v.amount, dest = dest }} | |||
end | end | ||
end | end | ||
i = 0 | i = 0 | ||
for k,v in pairs(data.products) do | if data.products then | ||
for k, v in pairs(data.products) do | |||
i = i + 1 | |||
local dest = "Chemistry" | |||
if p.groupDirection[p.chem[k].group] ~= nil then | |||
dest = p.groupDirection[p.chem[k].group] | |||
end | |||
args["result-" .. i] = frame:expandTemplate{ title = "Chem Recipe Component", args = { reagent = k, amount = v, dest = dest }} | |||
end | end | ||
end | end | ||
Строка 231: | Строка 241: | ||
end | end | ||
function p.genflammablereaction( | function p.genflammablereaction(w, frame) | ||
return frame:expandTemplate{ title = "FlammableReaction", args = { prob = w.probability }} | |||
return frame:expandTemplate{ title = "FlammableReaction", args = { | |||
end | end | ||
function p. | function p.genadjustreagent(r, rate, frame) | ||
local conds = "" | |||
if r.conditions ~= nil then | if r.conditions ~= nil then | ||
conds = p.genconds(r.conditions, frame) | conds = p.genconds(r.conditions, frame) | ||
end | end | ||
local amount = r.Amount | |||
if r.ScaleWithRate == 1 then | |||
amount = rate * r.Amount | |||
if r. | |||
end | end | ||
return frame:expandTemplate{ title = "AdjustReagent", args = { | return frame:expandTemplate{ title = "AdjustReagent", args = { name = r.Name, amount = amount, when = conds, prob = r.probability }} | ||
end | end | ||
function p. | function p.genhealthchange(r, rate, frame) | ||
local conds = "" | |||
if r.conditions ~= nil then | if r.conditions ~= nil then | ||
conds = p.genconds(r.conditions, frame) | conds = p.genconds(r.conditions, frame) | ||
end | end | ||
local amount = r.Amount | |||
if r.ScaleWithRate == 1 then | |||
amount = rate * r.Amount | |||
end | end | ||
return frame:expandTemplate{ title = "HealthChange", args = { | return frame:expandTemplate{ title = "HealthChange", args = { amount = amount, when = conds, prob = r.probability }} | ||
end | end | ||
function | function p.genconds(c, frame) | ||
if c.TimeIngested then | |||
return frame:expandTemplate{ title = "TimeIngested", args = { min = c.TimeIngested.min, max = c.TimeIngested.max }} | |||
elseif c.BloodAmount then | |||
return frame:expandTemplate{ title = "BloodAmount", args = { min = c.BloodAmount.min, max = c.BloodAmount.max }} | |||
elseif c.TimeInBlood then | |||
return frame:expandTemplate{ title = "TimeInBlood", args = { min = c.TimeInBlood.min, max = c.TimeInBlood.max }} | |||
elseif c.OverallChemicalAmount then | |||
return frame:expandTemplate{ title = "OverallChemicalAmount", args = { min = c.OverallChemicalAmount.min, max = c.OverallChemicalAmount.max, chem = c.OverallChemicalAmount.chemical }} | |||
elseif c.ChemicalAmount then | |||
return frame:expandTemplate{ title = "ChemicalAmount", args = { min = c.ChemicalAmount.min, max = c.ChemicalAmount.max, chem = c.ChemicalAmount.chemical }} | |||
else | |||
return "" | |||
end | end | ||
end | end | ||
function tablelength(T) | |||
local count = 0 | |||
for _ in pairs(T) do | |||
count = count + 1 | |||
function | |||
local | |||
for | |||
end | end | ||
return | return count | ||
end | end | ||
return p | return p |
Текущая версия от 22:36, 29 июня 2024
Для документации этого модуля может быть создана страница Модуль:Chemistry Lookup/doc
local prototypes = mw.loadData("Module:Chemistry Lookup/data") local p = {} p.chem = prototypes.chem p.react = prototypes.react p.groupDirection = prototypes.groupDirection function p.readscalar(frame) return mw.text.nowiki(p.chem[frame.args[1]][frame.args[2]]) end function p.readscalarreact(frame) if p.react[frame.args[1]][frame.args[2]] ~= nil then return mw.text.nowiki(p.react[frame.args[1]][frame.args[2]]) else return "" end end function p.getcolor(frame) return mw.text.nowiki(p.chem[frame.args[1]].color:sub(1, 7)) end function p.gettextcolor(frame) local basecol = p.chem[frame.args[1]].color local red = tonumber(basecol:sub(2, 3), 16) local grn = tonumber(basecol:sub(4, 5), 16) local blu = tonumber(basecol:sub(6, 7), 16) local luminance = math.sqrt(0.241*red*red + 0.691*grn*grn + 0.068*blu*blu) if luminance > 100 then return mw.text.nowiki("#000") else return mw.text.nowiki("#FFF") end end function p.hasrecipe(frame) return p.chem[frame.args[1]]["recipes"][1] ~= nil end function p.buildboxes(frame) local out = "" local group = frame.args[1] for k in pairs(p.chem) do if p.chem[k].group == group then out = out .. frame:expandTemplate{ title = "Chembox", args = { prototype = k }} elseif group == nil then out = out .. frame:expandTemplate{ title = "Chembox", args = { prototype = k }} end end return out end function p.buildreactboxes(frame) local out = "" for k in pairs(p.react) do if p.react[k] and tablelength(p.react[k].effects) ~= 0 then out = out .. frame:expandTemplate{ title = "Reactionbox", args = { reaction = k }} end end return out end function p.buildrecipes(frame) local chem = frame.args[1] local out = "" for id, recipe in pairs(p.chem[chem].recipes) do out = out .. p.buildreaction(frame, recipe) end return out end function p.buildreactionext(frame) local react = frame.args[1] return p.buildreaction(frame, react) end function p.buildreaction(frame, react) local data = p.react[react] if data == nil then return "Error: reaction data is nil for " .. tostring(react) end local dest = "Chemistry" local args = {} local i = 0 if data.reactants then for k, v in pairs(data.reactants) do i = i + 1 local dest = "Chemistry" if p.groupDirection[p.chem[k].group] ~= nil then dest = p.groupDirection[p.chem[k].group] end args["component-" .. i] = frame:expandTemplate{ title = "Chem Recipe Component", args = { reagent = k, amount = v.amount, dest = dest }} end end i = 0 if data.products then for k, v in pairs(data.products) do i = i + 1 local dest = "Chemistry" if p.groupDirection[p.chem[k].group] ~= nil then dest = p.groupDirection[p.chem[k].group] end args["result-" .. i] = frame:expandTemplate{ title = "Chem Recipe Component", args = { reagent = k, amount = v, dest = dest }} end end if data.effects ~= nil then args.effects = p.geneffectlist(data.effects, frame, 1) end return frame:expandTemplate{ title = "Chem Box Recipe", args = args } end function p.checksatiatesthirst(frame) local chem = frame.args[1] local met = p.chem[chem].metabolisms if met == nil then return "" end for k, v in pairs(met) do for l, w in pairs(v.effects) do if w.id == "SatiateThirst" then return "1" end end end return "" end function p.checksatiateshunger(frame) local chem = frame.args[1] local met = p.chem[chem].metabolisms if met == nil then return "" end for k, v in pairs(met) do for l, w in pairs(v.effects) do if w.id == "SatiateHunger" then return "1" end end end return "" end function p.haseffects(frame) local chem = frame.args[1] local met = p.chem[chem].metabolisms if met == nil then return "" end for k, v in pairs(met) do for l, w in pairs(v.effects) do if w.id ~= "SatiateHunger" and w.id ~= "SatiateThirst" then return "1" end end end return "" end function p.geneffects(frame, chem) if chem == nil then chem = frame.args[1] end local met = p.chem[chem].metabolisms if met == nil then return "" end local out = "" for k, v in pairs(met) do out = out .. "<b>" .. k .. "</b> (" .. v.rate .. " единиц в секунду)\n" .. p.geneffectlist(v.effects, frame, v.rate) end return out end function p.geneffectlist(effects, frame, rate) local out = "" for l, w in pairs(effects) do -- Popup Message is ignored on purpose if w.id == "HealthChange" then out = out .. ":" .. p.genhealthchange(w, rate, frame) .. "\n" elseif w.id == "AdjustReagent" then out = out .. ":" .. p.genadjustreagent(w, rate, frame) .. "\n" elseif w.id == "FlammableReaction" then out = out .. ":" .. p.genflammablereaction(w, frame) .. "\n" elseif w.id == "AdjustTemperature" then out = out .. ":" .. p.genadjusttemperature(w, frame) .. "\n" elseif w.id == "GenericStatusEffect" then out = out .. ":" .. p.gengenericstatuseffect(w, frame) .. "\n" elseif w.id == "ExplosionReactionEffect" then out = out .. ":" .. p.genexplosionreactioneffect(w, frame) .. "\n" elseif w.id == "FoamAreaReactionEffect" then out = out .. ":" .. p.genfoamareareactioneffect(w, frame) .. "\n" elseif w.id == "SmokeAreaReactionEffect" then out = out .. ":" .. p.gensmokeareareactioneffect(w, frame) .. "\n" elseif w.id == "ModifyBleedAmount" then out = out .. ":" .. p.genmodifybleedamount(w, frame) .. "\n" end end return out end function p.gensmokeareareactioneffect(r, frame) if r.conditions ~= nil then conds = p.genconds(r.conditions, frame) end return frame:expandTemplate{ title = "SmokeAreaReactionEffect", args = { when = conds, prob = r.probability }} end function p.genfoamareareactioneffect(r, frame) if r.conditions ~= nil then conds = p.genconds(r.conditions, frame) end return frame:expandTemplate{ title = "FoamAreaReactionEffect", args = { when = conds, prob = r.probability }} end function p.genexplosionreactioneffect(r, frame) if r.conditions ~= nil then conds = p.genconds(r.conditions, frame) end return frame:expandTemplate{ title = "ExplosionReactionEffect", args = { when = conds, prob = r.probability }} end function p.gengenericstatuseffect(r, frame) if r.conditions ~= nil then conds = p.genconds(r.conditions, frame) end return frame:expandTemplate{ title = "GenericStatusEffect", args = { key = r.Key, type = r.Type, time = r.Time, refresh = r.Refresh, when = conds, prob = r.probability }} end function p.genadjusttemperature(r, frame) if r.conditions ~= nil then conds = p.genconds(r.conditions, frame) end return frame:expandTemplate{ title = "AdjustTemperature", args = { amount = r.Amount, when = conds, prob = r.probability }} end function p.genflammablereaction(w, frame) return frame:expandTemplate{ title = "FlammableReaction", args = { prob = w.probability }} end function p.genadjustreagent(r, rate, frame) local conds = "" if r.conditions ~= nil then conds = p.genconds(r.conditions, frame) end local amount = r.Amount if r.ScaleWithRate == 1 then amount = rate * r.Amount end return frame:expandTemplate{ title = "AdjustReagent", args = { name = r.Name, amount = amount, when = conds, prob = r.probability }} end function p.genhealthchange(r, rate, frame) local conds = "" if r.conditions ~= nil then conds = p.genconds(r.conditions, frame) end local amount = r.Amount if r.ScaleWithRate == 1 then amount = rate * r.Amount end return frame:expandTemplate{ title = "HealthChange", args = { amount = amount, when = conds, prob = r.probability }} end function p.genconds(c, frame) if c.TimeIngested then return frame:expandTemplate{ title = "TimeIngested", args = { min = c.TimeIngested.min, max = c.TimeIngested.max }} elseif c.BloodAmount then return frame:expandTemplate{ title = "BloodAmount", args = { min = c.BloodAmount.min, max = c.BloodAmount.max }} elseif c.TimeInBlood then return frame:expandTemplate{ title = "TimeInBlood", args = { min = c.TimeInBlood.min, max = c.TimeInBlood.max }} elseif c.OverallChemicalAmount then return frame:expandTemplate{ title = "OverallChemicalAmount", args = { min = c.OverallChemicalAmount.min, max = c.OverallChemicalAmount.max, chem = c.OverallChemicalAmount.chemical }} elseif c.ChemicalAmount then return frame:expandTemplate{ title = "ChemicalAmount", args = { min = c.ChemicalAmount.min, max = c.ChemicalAmount.max, chem = c.ChemicalAmount.chemical }} else return "" end end function tablelength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end return p