Neverwinter Wiki
мНет описания правки
мНет описания правки
 
(не показано 46 промежуточных версий этого же участника)
Строка 1: Строка 1:
local itemIcon = require('Модуль:Item_icon')
+
local get_args = require('Модуль:Arguments').getArgs
  +
local item_icon = require('Модуль:Item_icon') -- Модуль для создания ссылок на предметы с качеством предмета и иконкой
  +
local companion = require('Модуль:Companion') -- Основной модуль спутников
  +
local data = mw.loadData( 'Module:Companion/Powers' ) -- База данных умений спутников
  +
local item_acquisition = require('Модуль:Item/Item acquisition') -- Модуль для вывода информации про способы получения предмета
   
 
local p = {}
 
local p = {}
   
  +
-- Таблица качеств предмета
  +
local quality = {
  +
["common"] = 'common',
  +
["обычный"] = 'common',
  +
["uncommon"] = 'uncommon',
  +
["необычный"] = 'uncommon',
  +
["rare"] = 'rare',
  +
["редкий"] = 'rare',
  +
["epic"] = 'epic',
  +
["эпический"] = 'epic',
  +
["legendary"] = 'legendary',
  +
["легендарный"] = 'legendary',
  +
["mythic"] = 'mythic',
  +
["мифический"] = 'mythic',
  +
}
  +
  +
-- Основная функция для создания таблицы со спутниками (1. Название спуника, 2. Умения спуникаб, 3. Способы получения спуника)
 
function p.Main( frame )
 
function p.Main( frame )
 
local cargo = mw.ext.cargo
 
local cargo = mw.ext.cargo
tables = 'Items'
+
local tables = 'Items'
fields = '_pageName,name,icon,enhancement_power,player_bonus_power,type'
+
local fields = 'name, icon, quality, enhancement_power, player_bonus_power, categories'
 
local args = {
 
local args = {
where='type HOLDS "Спутник"',
+
where='categories HOLDS "Спутник"',
orderBy = '_pageName',
+
orderBy = 'name',
  +
limit = '500',
 
}
 
}
 
local result = cargo.query( tables, fields, args )
 
local result = cargo.query( tables, fields, args )
 
local r = result[1]
 
local r = result[1]
   
--Start the table
 
 
local tbl = mw.html.create('table')
 
local tbl = mw.html.create('table')
 
tbl:addClass('wikitable')
 
tbl:addClass('wikitable')
tbl:tag("th"):attr('style', 'width: 15%'):wikitext("Спутник"):done()
+
tbl:tag("th"):wikitext("Спутник"):done()
tbl:tag("th"):attr('style', 'width: 12%'):wikitext("Умение усиления"):done()
+
tbl:tag("th"):wikitext("Умение усиления"):done()
tbl:tag("th"):attr('style', 'width: 20%'):wikitext("Боевое умение игрока"):done()
+
tbl:tag("th"):wikitext("Боевое умение игрока"):done()
  +
tbl:tag("th"):wikitext("Получение"):done()
tbl:done()
+
tbl:done()
--Construct the rows in the table
 
  +
for _,row in ipairs(result) do
 
  +
for _, row in ipairs(result) do
tr = tbl:tag("tr")
 
tr:tag("td"):wikitext(itemIcon.Main({args={row._pageName,""}})):done()
+
tr = tbl:tag("tr")
  +
tr:tag("td"):wikitext(row.enhancement_power):done()
 
tr:tag("td"):wikitext(row.player_bonus_power):done()
+
tr:tag("td"):wikitext(item_icon.Main({args={row.name,""}})):done()
  +
  +
if row.enhancement_power then
  +
local tables = 'Powers'
  +
local fields = 'name, icon, item_ui_equip_power'
  +
local args = {
  +
where = 'name = "' .. row.enhancement_power .. '"',
  +
}
  +
local result = cargo.query( tables, fields, args )
  +
local r = result[1]
  +
  +
tr:tag("td"):wikitext('[[File:' .. r['icon'] .. '|20px|link=]] [[' .. row.enhancement_power .. ']]<br>' .. r['item_ui_equip_power']):done()
  +
end
  +
  +
if data[row.player_bonus_power] then
  +
if data[row.player_bonus_power].quality then
  +
tr:tag("td"):wikitext('<b>' .. row.player_bonus_power .. '</b><br>' .. frame:expandTemplate{title = 'Подсветка параметров', args = {data[row.player_bonus_power].quality[quality[row.quality]]}}):done()
  +
else
  +
tr:tag("td"):wikitext('<b>' .. row.player_bonus_power .. '</b><br>' .. frame:expandTemplate{title = 'Подсветка параметров', args = {data[row.player_bonus_power]}}):done()
  +
end
  +
else
  +
tr:tag("td"):wikitext(frame:expandTemplate{title = 'Подсветка параметров', args = {row.player_bonus_power}}):done()
  +
end
  +
  +
tr:tag("td"):wikitext(item_acquisition.itemAcquisition({args={row.name,""}})):done()
  +
end
  +
return tbl
  +
end
  +
  +
function p.companions_list( frame )
  +
local args = get_args(frame, {parentFirst = true})
  +
local cargo = mw.ext.cargo
  +
local tables = 'Items'
  +
local fields = '_pageName, quality, powers, enhancement_power, player_bonus_power, categories'
  +
local items_table_args = {
  +
where = 'categories HOLDS "Спутник"',
  +
orderBy = 'quality, _pageName',
  +
}
  +
  +
if args['качество'] then
  +
items_table_args.where = items_table_args.where .. ' AND quality = "' .. args['качество'] .. '"'
  +
end
  +
if args['умение'] then
  +
items_table_args.where = items_table_args.where .. ' AND powers HOLDS "' .. args['умение'] .. '"'
  +
end
  +
if args['умение усиления'] then
  +
items_table_args.where = items_table_args.where .. ' AND enhancement_power = "' .. args['умение усиления'] .. '"'
  +
end
  +
if args['бонусное умение игрока'] then
  +
items_table_args.where = items_table_args.where .. ' AND player_bonus_power = "' .. args['бонусное умение игрока'] .. '"'
  +
end
  +
  +
local result = cargo.query( tables, fields, items_table_args )
  +
  +
local text = {}
  +
  +
local countResults = 0
  +
for _ in pairs(result) do countResults = countResults + 1 end
  +
  +
if frame.args['содержится в'] then
  +
for i,v in ipairs(result) do
  +
text[i] = '<li>'.. frame:expandTemplate{title = 'Содержит', args = {v._pageName}} ..'</li>'
 
end
 
end
  +
else
 
for i,v in ipairs(result) do
  +
text[i] = '<li>' .. item_icon.Main({args={v._pageName,""}}) .. '</li>'
  +
end
  +
end
  +
if countResults < 10 then
  +
return '<ul>'..table.concat(text)..'</ul>'
  +
else
  +
return '<ul style="-webkit-column-width: 305px; -moz-column-width: 305px; column-width: 305px;">'..table.concat(text)..'</ul>'
  +
end
  +
  +
end
  +
  +
function p.companionPowerTable(frame)
  +
local cargo = mw.ext.cargo
  +
local tables = 'Powers'
  +
local fields = 'Powers._pageName, Powers.name, Powers.icon, Powers.type, Powers.item_ui_equip_power'
  +
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"):attr('style', 'width: 17%;'):wikitext("Умение"):done()
  +
tbl:tag("th"):wikitext("Эффект"):done()
  +
tbl:tag("th"):attr('style', 'width: 27%;'):wikitext("Доступно на<br>следующих спутниках"):done()
  +
tbl:done()
  +
  +
for _, power in ipairs(result) do
 
tr = tbl:tag("tr")
  +
tr:tag("td"):wikitext('[[File:' .. power["Powers.icon"] .. '|32px|link=' .. power["Powers._pageName"] ..']] [[' .. power["Powers._pageName"] .. ']]'):done()
  +
  +
if mw.ustring.lower(power["Powers.type"]) == 'усиление' then
  +
tr:tag("td"):wikitext(power["Powers.item_ui_equip_power"]):done()
  +
elseif mw.ustring.lower(power["Powers.type"]) == 'бонусное умение игрока' then
 
tr:tag("td"):wikitext(power["Powers.item_ui_equip_power"]):done()
  +
end
  +
  +
local tables_items = 'Items'
  +
local fields_items = 'Items._pageName, Items.quality, Items.enhancement_power, Items.player_bonus_power'
  +
local args_items = {
  +
where = 'Items.enhancement_power = "' .. power["Powers.name"] .. '" OR Items.player_bonus_power = "' .. power["Powers.name"] .. '"',
  +
orderBy = 'Items.name, Items.quality',
  +
}
  +
local result_items = cargo.query( tables_items, fields_items, args_items )
  +
  +
local countResults = 0
  +
for _ in pairs(result_items) do countResults = countResults + 1 end
  +
  +
local mounts = {}
  +
for _, item in ipairs(result_items) do
  +
table.insert(mounts, item_icon.Main({args={item["Items._pageName"],""}}))
  +
end
  +
if countResults > 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
 
return tbl
 
end
 
end
  +
 
return p
 
return p

Текущая версия от 15:56, 28 января 2024

Для документации этого модуля может быть создана страница Модуль:Companion table/doc

local get_args = require('Модуль:Arguments').getArgs
local item_icon = require('Модуль:Item_icon') -- Модуль для создания ссылок на предметы с качеством предмета и иконкой
local companion = require('Модуль:Companion') -- Основной модуль спутников
local data = mw.loadData( 'Module:Companion/Powers' ) -- База данных умений спутников
local item_acquisition = require('Модуль:Item/Item acquisition') -- Модуль для вывода информации про способы получения предмета

local p = {}

-- Таблица качеств предмета
local quality = {
	["common"] = 'common',
	["обычный"] = 'common',
	["uncommon"] = 'uncommon',
	["необычный"] = 'uncommon',
	["rare"] = 'rare',
	["редкий"] = 'rare',
	["epic"] = 'epic',
	["эпический"] = 'epic',
	["legendary"] = 'legendary',
	["легендарный"] = 'legendary',
	["mythic"] = 'mythic',
	["мифический"] = 'mythic',
}

-- Основная функция для создания таблицы со спутниками (1. Название спуника, 2. Умения спуникаб, 3. Способы получения спуника)
function p.Main( frame )
    local cargo = mw.ext.cargo
    local tables = 'Items'
    local fields = 'name, icon, quality, enhancement_power, player_bonus_power, categories'
    local args = {
        where='categories HOLDS "Спутник"',
        orderBy = 'name',
        limit = '500',        
    }
    local result = cargo.query( tables, fields, args )
    local r = result[1]

	local tbl = mw.html.create('table')
	tbl:addClass('wikitable')
	tbl:tag("th"):wikitext("Спутник"):done()
	tbl:tag("th"):wikitext("Умение усиления"):done()
	tbl:tag("th"):wikitext("Боевое умение игрока"):done()
	tbl:tag("th"):wikitext("Получение"):done()
	tbl:done()

	for _, row in ipairs(result) do
        tr = tbl:tag("tr")

        tr:tag("td"):wikitext(item_icon.Main({args={row.name,""}})):done()

        if row.enhancement_power then
			local tables = 'Powers'
			local fields = 'name, icon, item_ui_equip_power'
			local args = {
				where = 'name = "' .. row.enhancement_power .. '"',   
			}
			local result = cargo.query( tables, fields, args )
			local r = result[1]

        	tr:tag("td"):wikitext('[[File:' .. r['icon'] .. '|20px|link=]] [[' .. row.enhancement_power .. ']]<br>' .. r['item_ui_equip_power']):done()
        end

		if data[row.player_bonus_power] then
			if data[row.player_bonus_power].quality then
				tr:tag("td"):wikitext('<b>' .. row.player_bonus_power .. '</b><br>' .. frame:expandTemplate{title = 'Подсветка параметров', args = {data[row.player_bonus_power].quality[quality[row.quality]]}}):done()
			else
				tr:tag("td"):wikitext('<b>' .. row.player_bonus_power .. '</b><br>' .. frame:expandTemplate{title = 'Подсветка параметров', args = {data[row.player_bonus_power]}}):done()
			end
		else
			tr:tag("td"):wikitext(frame:expandTemplate{title = 'Подсветка параметров', args = {row.player_bonus_power}}):done()
		end

		tr:tag("td"):wikitext(item_acquisition.itemAcquisition({args={row.name,""}})):done()
	end
	return tbl
end

function p.companions_list( frame )
	local args = get_args(frame, {parentFirst = true})
	local cargo = mw.ext.cargo
	local tables = 'Items'
    local fields = '_pageName, quality, powers, enhancement_power, player_bonus_power, categories'
    local items_table_args = {
        where = 'categories HOLDS "Спутник"',
        orderBy = 'quality, _pageName',
    }

	if args['качество'] then
        items_table_args.where = items_table_args.where .. ' AND quality = "' .. args['качество'] .. '"'
	end
	if args['умение'] then
        items_table_args.where = items_table_args.where .. ' AND powers HOLDS "' .. args['умение'] .. '"'
    end
    if args['умение усиления'] then 
    	items_table_args.where = items_table_args.where .. ' AND enhancement_power = "' .. args['умение усиления'] .. '"'
    end
	if args['бонусное умение игрока'] then 
    	items_table_args.where = items_table_args.where .. ' AND player_bonus_power = "' .. args['бонусное умение игрока'] .. '"'
    end

    local result = cargo.query( tables, fields, items_table_args )

    local text = {}
    
	local countResults = 0
	for _ in pairs(result) do countResults = countResults + 1 end
	
	if frame.args['содержится в'] then 
		for i,v in ipairs(result) do
	        text[i] = '<li>'.. frame:expandTemplate{title = 'Содержит', args = {v._pageName}} ..'</li>'
	    end
	else
	    for i,v in ipairs(result) do
	        text[i] = '<li>' .. item_icon.Main({args={v._pageName,""}}) .. '</li>'
	    end
	end
	if countResults < 10 then
		return '<ul>'..table.concat(text)..'</ul>'
	else
		return '<ul style="-webkit-column-width: 305px; -moz-column-width: 305px; column-width: 305px;">'..table.concat(text)..'</ul>'
	end	
	
end

function p.companionPowerTable(frame)
	local cargo = mw.ext.cargo
	local tables = 'Powers'
    local fields = 'Powers._pageName, Powers.name, Powers.icon, Powers.type, Powers.item_ui_equip_power'
        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"):attr('style', 'width: 17%;'):wikitext("Умение"):done()
		tbl:tag("th"):wikitext("Эффект"):done()
		tbl:tag("th"):attr('style', 'width: 27%;'):wikitext("Доступно на<br>следующих спутниках"):done()
	tbl:done()
	
	for _, power in ipairs(result) do
		tr = tbl:tag("tr")
		tr:tag("td"):wikitext('[[File:' .. power["Powers.icon"] .. '|32px|link=' .. power["Powers._pageName"] ..']] [[' .. power["Powers._pageName"] .. ']]'):done()
        
        if mw.ustring.lower(power["Powers.type"]) == 'усиление' then
			tr:tag("td"):wikitext(power["Powers.item_ui_equip_power"]):done()
        elseif mw.ustring.lower(power["Powers.type"]) == 'бонусное умение игрока' then
            tr:tag("td"):wikitext(power["Powers.item_ui_equip_power"]):done()
        end
		
		local tables_items = 'Items'
	    local fields_items = 'Items._pageName, Items.quality, Items.enhancement_power, Items.player_bonus_power'
	    local args_items = {
	    	where = 'Items.enhancement_power = "' .. power["Powers.name"] .. '" OR Items.player_bonus_power = "' .. power["Powers.name"] .. '"',
	        orderBy = 'Items.name, Items.quality',
	    }
		local result_items = cargo.query( tables_items, fields_items, args_items )	
		
		local countResults = 0
		for _ in pairs(result_items) do countResults = countResults + 1 end
		
		local mounts = {}
		for _, item in ipairs(result_items) do
			table.insert(mounts, item_icon.Main({args={item["Items._pageName"],""}}))	
		end
		if countResults > 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