Модуль:Prototypes/Роль/Лодаут: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
local gearRoleLoadout | local gearRoleLoadout = mw.loadData("Модуль:IanComradeBot/roleLoadout.json/data") | ||
local gearloadoutGroup | local gearloadoutGroup = mw.loadData("Модуль:IanComradeBot/loadoutGroup.json/data") | ||
local gearloadout | local gearloadout = mw.loadData("Модуль:IanComradeBot/loadout.json/data") | ||
function p.main(frame) | function p.main(frame) | ||
| Строка 13: | Строка 13: | ||
end | end | ||
local roleId = "Job" .. roleParam | local roleId = "Job" .. roleParam | ||
local modeTrinkets = (searchKey == "trinkets") | |||
local results = {} | local results = {} | ||
local role = nil | local role = nil | ||
for _, r in ipairs(gearRoleLoadout) do | for _, r in ipairs(gearRoleLoadout) do | ||
if r.id == roleId then | if r.id == roleId then | ||
| Строка 22: | Строка 22: | ||
end | end | ||
end | end | ||
if not role then | if not role then | ||
return 'Роль с id "' .. roleId .. '" не найдена' | return 'Роль с id "' .. roleId .. '" не найдена' | ||
end | end | ||
for _, groupId in ipairs(role.groups or {}) do | for _, groupId in ipairs(role.groups or {}) do | ||
local group = nil | if (modeTrinkets and groupId == "Trinkets") or ((not modeTrinkets) and groupId ~= "Trinkets") then | ||
local group = nil | |||
for _, g in ipairs(gearloadoutGroup) do | |||
if g.id == groupId then | |||
group = g | |||
break | |||
end | end | ||
end | end | ||
if group then | |||
local loadouts = group.loadouts or {} | |||
local | if type(loadouts) == "string" then | ||
local success, decoded = pcall(mw.text.jsonDecode, loadouts) | |||
if | if success and type(decoded) == "table" then | ||
loadouts = decoded | |||
else | |||
loadouts = {} | |||
end | end | ||
end | end | ||
if loadout | for _, loadoutId in ipairs(loadouts) do | ||
local loadout = nil | |||
for _, l in ipairs(gearloadout) do | |||
if l.id == loadoutId then | |||
loadout = l | |||
break | |||
end | |||
end | |||
if loadout then | |||
local skipLoadout = false | |||
if loadout.effects then | |||
for _, effect in ipairs(loadout.effects) do | |||
if effect.proto == "EffectSpeciesVox" then | |||
skipLoadout = true | |||
break | |||
end | |||
end | end | ||
end | end | ||
if not skipLoadout then | |||
if modeTrinkets then | |||
if loadout.storage and loadout.storage.back then | |||
for _, item in ipairs(loadout.storage.back) do | |||
table.insert(results, '<div class="Trinkets">' .. item .. '</div>') | |||
end | |||
elseif loadout.equipment then | |||
for _, eqValue in pairs(loadout.equipment) do | |||
table.insert(results, '<div class="Trinkets">' .. eqValue .. '</div>') | |||
break | |||
end | |||
end | |||
else | |||
if loadout.equipment then | |||
local eqValue = loadout.equipment[searchKey] | |||
if eqValue then | |||
local extraInfo = "" | |||
if loadout.effects then | |||
for _, effect in ipairs(loadout.effects) do | |||
if effect["!type"] == "GroupLoadoutEffect" then | |||
local proto = effect.proto | |||
if proto then | |||
for _, candidate in ipairs(gearloadout) do | |||
if candidate.id == proto then | |||
if candidate.effects then | |||
for _, eff in ipairs(candidate.effects) do | |||
if eff["!type"] == "JobRequirementLoadoutEffect" and eff.requirement then | |||
local req = eff.requirement | |||
if req["!type"] == "DepartmentTimeRequirement" and req.department and req.time then | |||
extraInfo = extraInfo .. "<b>{{ucfirst:{{#invoke:Ftl|main|translation|department-" .. req.department .. "}}}}</b>: " .. req.time .. "<br>" | |||
elseif req["!type"] == "RoleTimeRequirement" and req.role and req.time then | |||
extraInfo = extraInfo .. "<b>{{ucfirst:{{#invoke:Ftl|main|translation|" .. req.role .. "}}}}</b>: " .. req.time .. "<br>" | |||
end | |||
end | |||
end | |||
end | end | ||
break | |||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
local infoOutput = "" | |||
if extraInfo ~= "" then | |||
infoOutput = '<div class="роль-лодаут__time">{{AltTooltip|[[Файл:Small_watch.png|link=]]|' .. extraInfo .. '}}</div>' | |||
end | |||
table.insert(results, infoOutput .. '{{#invoke:Prototypes/Предмет/Содержание|image|' .. eqValue .. '}} [[File:Slot.png|64px|link=]]') | |||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
| Строка 105: | Строка 119: | ||
end | end | ||
end | end | ||
local output = {} | local output = {} | ||
for _, eq in ipairs(results) do | if modeTrinkets then | ||
table.insert(output, '<div class="роль-лодаут__item">' .. eq .. '</div>') | for _, eq in ipairs(results) do | ||
table.insert(output, eq) | |||
end | |||
else | |||
for _, eq in ipairs(results) do | |||
table.insert(output, '<div class="роль-лодаут__item">' .. eq .. '</div>') | |||
end | |||
end | end | ||
return frame:preprocess(table.concat(output)) | return frame:preprocess(table.concat(output)) | ||
end | end | ||
return p | return p | ||