Neverwinter Wiki
Регистрация
Advertisement

Для документации этого модуля может быть создана страница Модуль: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
Advertisement