Для документации этого модуля может быть создана страница Модуль:Mount/doc
local itemIcon = require('Модуль:Item_icon')
local attributes = mw.loadData('Модуль:Item/Attributes') -- База данных параметров предметов
local p = {}
-- Функция для разделения чисел запятой
function commaValue(amount)
local formatted = amount
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if (k==0) then
break
end
end
return formatted
end
function p.Main( frame )
local powersData = mw.loadData( 'Module:Mount/Powers' )
text = powersData[frame.args[1]]
return text
end
function p.mountBonuses(frame)
local cargo = mw.ext.cargo
local tablesI = 'Items'
local fieldsI = 'Items.name, Items.quality, Items.categories, Items.slot1, Items.slot2, Items.slot3, Items.slot4, Items.insignia_bonuses, Items.combat_power_name, Items.equip_power_name,'
local argsI = {
where = 'Items.categories HOLDS "Скакун" AND Items.name = "' .. frame.args[1] .. '"',
orderBy = 'Items._pageName',
}
local result = cargo.query( tablesI, fieldsI, argsI )
local r = result[1]
local function queryPower(power_type, power_name)
local tables = 'Powers'
local fields = 'name, type, power_use, item_ui_equip_power, hit_points, power, accuracy, combat_advantage, critical_strike, critical_severity, critical_avoidance, forte, stamina_regen, deflect, awareness, movement_speed, defense, stat_universal'
local args_power = {
where = 'type = "' .. power_type .. '" AND name = "' .. power_name .. '"'
}
return cargo.query(tables, fields, args_power)[1]
end
-- Боевое умение
local r_combat_power_name = queryPower("боевое умение", r['Items.combat_power_name'])
-- Умение экипировки
local r_equip_power = queryPower("умение экипировки", r['Items.equip_power_name'])
local formatted_wikitext = {}
for _, attrib in ipairs(attributes) do
if r_equip_power[attrib.fields_cargo] ~= nil then
table.insert(formatted_wikitext, '+' .. commaValue(r_equip_power[attrib.fields_cargo]) .. ' [[' .. attrib.name[1] .. '|<span class="slate">'.. attrib.name[1] .. '</span>]]')
end
end
local text = '<b>Умение экипировки:</b> [[' .. r['Items.equip_power_name'] .. ']]<dl><dd>'.. (#formatted_wikitext == 0 and (r_equip_power['power_use'] ~= '' and r_equip_power['power_use'] or r_equip_power['item_ui_equip_power']) or table.concat(formatted_wikitext, '<br>')) .. '</dd></dl><b>Боевое умение:</b> [[' .. r['Items.combat_power_name'] .. ']]<dl><dd>'.. r_combat_power_name["power_use"] .. '</dd></dl>'
return text .. '<b>Список бонусов знака:</b>' .. frame:expandTemplate{title = 'Список бонусов знака', args = args}
end
function p.mountPowerTable(frame)
local cargo = mw.ext.cargo
local tables = 'Powers'
local fields = 'Powers._pageName, Powers.name, Powers.icon, Powers.item_level, Powers.type, Powers.power_use, item_ui_equip_power, hit_points, power, accuracy, combat_advantage, critical_strike, critical_severity, critical_avoidance, forte, stamina_regen, deflect, awareness, movement_speed, defense, stat_universal'
local args = {
where = 'Powers.type = "' .. frame.args[1] .. '"',
orderBy = 'Powers.item_level, Powers._pageName',
}
local result = cargo.query( tables, fields, args )
local tbl = mw.html.create('table')
tbl:addClass('wikitable sortable jquery-tablesorter')
tbl:tag("th"):wikitext("Умение"):done()
tbl:tag("th"):wikitext("Уровень предмета"):done()
tbl:tag("th"):wikitext("Эффект"):done()
tbl:tag("th"):wikitext("Доступно на<br>следующих скакунах"):done()
tbl:done()
for _, power in ipairs(result) do
local item_stats = {}
local item_ui_equip_power_value = {
{ name = 'На себе', value = power.item_ui_equip_power },
}
for _, attrib in ipairs(attributes) do
if power[attrib.fields_cargo] ~= nil then
table.insert(item_stats, attrib.name[1])
end
end
tr = tbl:tag("tr"):attr("data-stats", table.concat(item_stats, ", "))
tr:tag("td"):wikitext('[[File:' .. power["Powers.icon"] .. '|32px|link=' .. power["Powers._pageName"] ..']] [[' .. power["Powers._pageName"] .. ']]'):done()
tr:tag("td"):wikitext(power["Powers.item_level"]):done()
if mw.ustring.lower(frame.args[1]) == 'боевое умение' then
tr:tag("td"):wikitext(power["Powers.power_use"]):done()
elseif mw.ustring.lower(frame.args[1]) == 'умение экипировки' then
local formatted_wikitext = {}
for _, attrib in ipairs(attributes) do
if power[attrib.fields_cargo] ~= nil then
table.insert(formatted_wikitext, '+' .. commaValue(power[attrib.fields_cargo]) .. ' [[' .. attrib.name[1] .. '|<span class="slate">'.. attrib.name[1] .. '</span>]]')
end
end
for _, stat in ipairs(item_ui_equip_power_value) do
if stat.value then
table.insert(formatted_wikitext, '<span class="green">'.. stat.name .. ': </span>' .. commaValue(stat.value))
end
end
tr:tag("td"):wikitext(table.concat(formatted_wikitext, '<br>')):done()
end
local tables_items = 'Items'
local fields_items = 'Items._pageName, Items.quality, Items.combat_power_name, Items.equip_power_name'
local args_items = {
where = 'Items.equip_power_name = "' .. power["Powers.name"] .. '" OR Items.combat_power_name = "' .. power["Powers.name"] .. '"',
orderBy = 'Items.name, Items.quality',
}
local result_items = cargo.query( tables_items, fields_items, args_items )
local mounts = {}
for _, item in ipairs(result_items) do
table.insert(mounts, itemIcon.Main({args={item["Items._pageName"],""}}))
end
if #result_items > 4 then
tr:tag("td"):tag("div"):attr('style', 'height: 150px; overflow-y: scroll;'):wikitext(table.concat(mounts, "<br>")):done()
else
tr:tag("td"):wikitext(table.concat(mounts, "<br>")):done()
end
end
return tbl
end
return p