Модуль:Песочница/Pok: различия между версиями
Pok (обсуждение | вклад) мНет описания правки Метка: отменено |
Pok (обсуждение | вклад) мНет описания правки Метка: отменено |
||
| Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
local plantData = mw.loadData("Модуль:IanComradeBot/prototypes/chem/plant.json/data") | |||
local | local chemData = mw.loadData("Модуль:IanComradeBot/chem prototypes.json/data") | ||
-- Шаблоны описания эффектов | |||
local EFFECT_TEMPLATES = { | local EFFECT_TEMPLATES = { | ||
PlantAdjustPotency = "Изменяет [[#Потенция|потенцию]] на %s.", | |||
PlantAdjustHealth = "Изменяет [[#Здоровье|здоровье]] на %s.", | PlantAdjustHealth = "Изменяет [[#Здоровье|здоровье]] на %s.", | ||
PlantAdjustNutrition = "Изменяет [[#Потребление нутриентов|нутриенты]] на %s.", | |||
PlantAdjustToxins = " | PlantAdjustWater = "Изменяет [[#Потребление воды|воду]] на %s.", | ||
PlantAdjustPests = " | PlantAdjustToxins = "Изменяет [[#Устойчивость к токсинам|токсины]] на %s.", | ||
PlantAdjustWeeds = " | PlantAdjustPests = "Изменяет [[#Защита от вредителей|вредителей]] на %s.", | ||
PlantAdjustWeeds = "Изменяет [[#Защита от сорняков|сорняки]] на %s.", | |||
PlantAdjustMutationMod = "Изменяет '''модификатор мутации''' на %s.", | |||
PlantAdjustMutationLevel = "Изменяет '''уровень мутации''' на %s.", | |||
PlantAffectGrowth = "Изменяет [[#Возраст|возраст]] на %s.", | |||
-- | -- более сложные эффекты, которые находятся в коде | ||
PlantRestoreSeeds = "Восстанавливает семена (делает растение не [[#Бесплодное|бесплодным]], если оно было таковым).", | PlantRestoreSeeds = "Восстанавливает семена (делает растение не [[#Бесплодное|бесплодным]], если оно было таковым).", | ||
PlantDestroySeeds = "Уничтожает семена (делает растение [[#Бесплодное|бесплодным]]).", | |||
PlantPhalanximine = "Делает растение жизнеспособным (если оно было нежизнеспособным).", | PlantPhalanximine = "Делает растение жизнеспособным (если оно было нежизнеспособным).", | ||
PlantCryoxadone = "Уменьшает возраст растения.", | PlantCryoxadone = "Уменьшает возраст растения.", | ||
RobustHarvest = " | RobustHarvest = "Специфический эффект:<ul>" .. | ||
PlantDiethylamine = " | "<li>Если [[#Потенция|потенция]] растения меньше 50, она увеличивается на {{цвет|text|good|c='''3'''}} (до максимума 50).</li>" .. | ||
"<li>Если [[#Потенция|потенция]] превышает 30, растение становится [[#Бесплодное|бесплодным]].</li>" .. | |||
"<li>Если [[#Потенция|потенция]] достигла 50 и [[#Урожайность|урожайность]] больше 1, то с шансом '''10 %''' [[#Урожайность|урожайность]] уменьшается на {{цвет|text|bad|c='''1'''}}.</li>" .. | |||
"</ul>", | |||
PlantDiethylamine = "Специфический эффект:<ul>" .. | |||
"<li>С шансом '''10 %''' увеличивает [[#Срок жизни|срок жизни]] на {{цвет|text|good|c='''1'''}}.</li>" .. | |||
"<li>С шансом '''10 %''' увеличивает [[#Выносливость|выносливость]] на {{цвет|text|good|c='''1'''}}.</li>" .. | |||
"</ul>", | |||
} | } | ||
-- Вспомогательные функции | -- Вспомогательные функции | ||
local function | local function formatEffect(effect) | ||
local | local rawType = effect['!type'] | ||
if not rawType then return "<li>Ошибка: не найден тип эффекта.</li>" end | |||
local effectType = rawType:gsub("%s*%b{}", "") | |||
local template = EFFECT_TEMPLATES[effectType] | local template = EFFECT_TEMPLATES[effectType] | ||
local description | local description | ||
if effect.amount then | if template then | ||
if effect.amount then | |||
local num = tonumber(effect.amount) | |||
local color = num and (num > 0 and "good" or "bad") or "text" | |||
local amt = num and tostring(num) or tostring(effect.amount) | |||
description = string.format(template, string.format("{{цвет|text|%s|c='''%s'''}}", color, amt)) | |||
else | |||
description = template | |||
end | |||
else | else | ||
description = string.format( | description = string.format("<code>Неизвестный эффект: %s</code>", effectType) | ||
end | end | ||
if effect.probability and effect.probability < 1 then | if effect.probability and effect.probability < 1 then | ||
local | local pct = tostring(effect.probability * 100) | ||
description = string.format("С шансом '''%s %%''' %s", | description = string.format("С шансом '''%s %%:''' %s", pct, description:sub(1,1):lower() .. description:sub(2)) | ||
end | end | ||
| Строка 54: | Строка 61: | ||
end | end | ||
-- Основная функция | |||
function p.reagentRow(frame) | function p.reagentRow(frame) | ||
local args = frame | local args = frame.args | ||
local reagentId = args.id | local reagentId = args.id or "" | ||
if reagentId == "" then | |||
if | return [[<tr><td colspan="2">'''Ошибка: не указан ID реагента.'''</td></tr>]] | ||
return | |||
end | end | ||
local | local reagentEntry | ||
for _, r in ipairs(plantData) do | |||
if r.id == reagentId then reagentEntry = r; break end | |||
end | end | ||
local | local chemEntry | ||
for _, c in ipairs(chemData) do | |||
if c.id == reagentId then chemEntry = c; break end | |||
end | end | ||
local reagentName = | local entry = chemData[reagentId] | ||
local reagentName = entry and entry.name or reagentId | |||
local reagentCell = string.format("! [[Химия#chem_%s|%s]]", reagentId, reagentName) | local reagentCell = string.format("! [[Химия#chem_%s|%s]]", reagentId, reagentName) | ||
local | local fragments = {} | ||
if | |||
for _, | if reagentEntry and type(reagentEntry.plantMetabolism) == 'table' then | ||
table.insert( | for _, eff in ipairs(reagentEntry.plantMetabolism) do | ||
table.insert(fragments, formatEffect(eff)) | |||
end | end | ||
end | end | ||
-- Ручное описание при вызове параметром "manualEffects" | |||
if manualEffects and manualEffects ~= | if args.manualEffects and args.manualEffects ~= "" then | ||
table.insert(fragments, args.manualEffects) | |||
end | |||
if reagentEntry and reagentEntry.chemicals then | |||
table.insert(fragments, formatChemicals(reagentEntry)) | |||
end | end | ||
local | local allItems = table.concat(fragments) | ||
local effectsCell = string.format("| <ul>%s</ul>", allItems) | |||
return "|-\n | return frame:preprocess(string.format("|-\n%s\n%s", reagentCell, effectsCell)) | ||
end | end | ||
return p | return p | ||