Neverwinter Wiki
Advertisement

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

local itemIcon = require('Модуль:Item_icon')
local p = {}

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.insignia_bonuses, Items.combat_power, Items.equip_power,'
    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 tables = 'Powers'
    local fields = 'Powers.name, Powers.type, Powers.item_level, Powers.power_use, item_ui_equip_power, stat_hit_points_max, stat_accuracy, stat_critical_severity, stat_awareness, stat_combat_advantage, stat_crit_chance, stat_crit_resist, stat_defense, stat_deflection, stat_movement, stat_power, stat_universal'
	local args_combat_power = {
		where = 'Powers.type = "Боевое умение" AND Powers.name = "'.. r['Items.combat_power'] .. '"'
	}
    local args_equip_power  = {
		where = 'Powers.type = "Умение экипировки" AND Powers.name = "'.. r['Items.equip_power'] .. '"'
	}	
	local result_combat_power = cargo.query( tables, fields, args_combat_power )
    local r_combat_power = result_combat_power[1]
    local result_equip_power = cargo.query( tables, fields, args_equip_power )
    local r_equip_power = result_equip_power[1]   

    local mount_stats_value = {
		{ name = 'Максимум хитов', value = r_equip_power['stat_hit_points_max'] },
		{ name = 'Точность', value = r_equip_power['stat_accuracy'] },
		{ name = 'Крит. урон', value = r_equip_power['stat_critical_severity'] },
		{ name = 'Осведомленность', value = r_equip_power['stat_awareness'] },
		{ name = 'Боевое преимущество', value = r_equip_power['stat_combat_advantage'] },
		{ name = 'Вер. крит. удара', value = r_equip_power['stat_crit_chance'] },
		{ name = 'Крит. уклонение', value = r_equip_power['stat_crit_resist'] },
		{ name = 'Оборона', value = r_equip_power['stat_defense'] },
		{ name = 'Уклонение', value = r_equip_power['stat_deflection'] },
		{ name = 'Скорость движения', value = r_equip_power['stat_movement'] },
        { name = 'Могущество', value = r_equip_power['stat_power'] },
		{ name = 'Общий рейтинг', value = r_equip_power['stat_universal'] },
    }
    local item_ui_equip_power_value = {
        { name = '', value = r_equip_power['item_ui_equip_power'] },
    }

    local formatted_wikitext = {}
    for _, stat in ipairs(item_ui_equip_power_value) do      
        if stat.value ~= '' then
            table.insert(formatted_wikitext, '<span class="green">'.. stat.name .. '</span>' .. stat.value)
        end
    end
    for _, stat in ipairs(mount_stats_value) do
        if stat.value ~= '' then
            table.insert(formatted_wikitext, '+' .. stat.value .. ' <span class="slate">'.. stat.name .. '</span>')
        end
    end

	local text = '<li><b>Умение экипировки:</b> ' .. table.concat(formatted_wikitext, '<br>') ..'</li>\n<li><b>Боевое умение:</b> '.. r_combat_power["Powers.power_use"] ..'</li> '

    return '<ul>'.. text ..'</ul>' .. 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, stat_hit_points_max, stat_accuracy, stat_critical_severity, stat_awareness, stat_combat_advantage, stat_crit_chance, stat_crit_resist, stat_defense, stat_deflection, stat_movement, stat_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"):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 = {}

        if power.stat_hit_points_max ~= '' then
            table.insert(item_stats, "Максимум хитов")
        end
        if power.stat_accuracy ~= '' then
            table.insert(item_stats, "Точность")
        end
        if power.stat_critical_severity ~= '' then
            table.insert(item_stats, "Критический урон")
        end
        if power.stat_awareness ~= '' then
            table.insert(item_stats, "Осведомленность")
        end
        if power.stat_combat_advantage ~= '' then
            table.insert(item_stats, "Боевое преимущество")
        end
        if power.stat_crit_chance ~= '' then
            table.insert(item_stats, "Вероятность критического удара")
        end
        if power.stat_crit_resist ~= '' then
            table.insert(item_stats, "Критическое уклонение")
        end
        if power.stat_defense ~= '' then
            table.insert(item_stats, "Оборона")
        end
        if power.stat_deflection ~= '' then
            table.insert(item_stats, "Уклонение")
        end
        if power.stat_movement ~= '' then
            table.insert(item_stats, "Скорость движения")
        end
        if power.stat_power ~= '' then
            table.insert(item_stats, "Могущество")
        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 mount_stats_value = {
	            { name = 'Максимум хитов', value = power.stat_hit_points_max },
	            { name = 'Точность', value = power.stat_accuracy },
	            { name = 'Крит. урон', value = power.stat_critical_severity },
	            { name = 'Осведомленность', value = power.stat_awareness },
	            { name = 'Боевое преимущество', value = power.stat_combat_advantage },
	            { name = 'Вер. крит. удара', value = power.stat_crit_chance },
	            { name = 'Крит. уклонение', value = power.stat_crit_resist },
	            { name = 'Оборона', value = power.stat_defense },
	            { name = 'Уклонение', value = power.stat_deflection },
	            { name = 'Скорость движения', value = power.stat_movement},
	            { name = 'Могущество', value = power.stat_power },
	        }
			local item_ui_equip_power_value = {
				{ name = 'На себе', value = power.item_ui_equip_power },
	        }
            local formatted_wikitext = {}
            for _, stat in ipairs(mount_stats_value) do
                if stat.value ~= '' then
                    table.insert(formatted_wikitext, '+' .. stat.value .. ' <span class="slate">'.. stat.name .. '</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>' .. 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, Items.equip_power'
	    local args_items = {
	    	where = 'Items.equip_power = "' .. power["Powers.name"] .. '" OR Items.combat_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, itemIcon.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	

function p.InsigniaBonus( frame )
	local cargo = mw.ext.cargo
	tables = 'Insignia_bonuses'
    fields = '_pageName, name, slot1, slot2, slot3, description'
    local args = {
        --where='',
        orderBy = '_pageName',
    }
    local result = cargo.query( tables, fields, args )
    local r = result[1]
    local text = {}
	for k, v in ipairs(result) do
		if frame.args[1] == v.slot1 and frame.args[2] == v.slot2 and frame.args[3] == v.slot3 then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot2 and frame.args[2] == v.slot1 and frame.args[3] == v.slot3 then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot1 and frame.args[2] == v.slot3 and frame.args[3] == v.slot2 then
			text[k] = v._pageName .. ', '	
		elseif frame.args[1] == v.slot3 and frame.args[2] == v.slot1 and frame.args[3] == v.slot2 then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot3 and frame.args[2] == v.slot2 and frame.args[3] == v.slot1 then
			text[k] = v._pageName .. ', '			
		elseif frame.args[1] == v.slot1 and frame.args[2] == v.slot2 and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot1 and frame.args[2] == v.slot3 and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '			
		elseif frame.args[1] == v.slot2 and frame.args[2] == v.slot1 and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot2 and frame.args[2] == v.slot3 and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot3 and frame.args[2] == v.slot2 and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '		
		elseif frame.args[1] == v.slot3 and frame.args[2] == v.slot1 and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot1 and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot2 and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == v.slot3 and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		elseif frame.args[1] == 'Универсальная ячейка' and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
			text[k] = v._pageName .. ', '
		else
			text[k] = ''
		end
    end
    return table.concat(text)
end

return p
Advertisement