Модуль:ShopData

Данная группа модулей хранит информацию о магазинных товарах из Крушителей подземелий. Перечень модулей:

Информация из Модуль:ShopData/doc


local p = {}

local lib     = require('Module:Feature')
local libItem   = require('Module:ItemData')
local libHero   = require('Module:HeroData')
local libUnit   = require('Module:UnitData')

function p.get(frame)
	local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
	
	local get      = require ('Module:ShopData/getter')
    local lot      = args['lot'] or args[1]
    local datatype = args['datatype'] or args[2]
    local output   = args['output'] or args[3] or nil
    
    local result = get[datatype](lot)
    
    if output ~= nil and type(result) == "table" then
        if output == "csv" then
            return lib.tbl_concat{result}
        elseif output == "custom" then 
            return frame:preprocess(lib.tbl_concat({result, prepend = args['prepend'], append = args['append'], separator = args['separator'], index = args["index"]}))
        elseif output == "template" then 
            return frame:preprocess(lib.tbl_concat{result, prepend = "{{" .. args['t_name'] .. "|", append = "}}", separator = args['separator']})
        end
    elseif result == nil then
        return ""
    else
        return result
    end
end

function p.getLots(frame)
	local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
		
	local get       = require ('Module:ShopData/getter')
	local lot       = args['lot'] or args[1]
	local str       = ""

	str = mw.ustring.format('{{Lot|%s}}', lot)
    
    return frame:preprocess(tostring(str))
end

function p.getLotsPack(frame)
	local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
		
	local get       = require ('Module:ShopData/getter')
	local lot       = args['lot'] or args[1]
	local count

	local result = get["lot_data"](lot)
	for k, v in ipairs(result) do
    	if tonumber(args['index']) == k then
			count = mw.ustring.format('%d', v[2])
		end
    end
    
    return tonumber(count)
end

function p.getLotType(frame)
	local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
		
	local get       = require ('Module:ShopData/getter')
	local loot_type = require ('Module:ItemData/loot/types')
	local lot       = args['lot'] or args[1]
	local type      = ""

	local result = get["lot_data"](lot)
	for k, v in ipairs(result) do
    	if tonumber(args['index']) == k then
			type = mw.ustring.format('%s', loot_type[v[3]])
		end
    end
    
    return tostring(type)
end

function p.getLotItems(frame)
	local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
		
	local get     = require ('Module:ShopData/getter')
	local libHero = require('Module:HeroData')
    local libUnit = require('Module:UnitData')
	local lot     = args['lot'] or args[1]
	local divNode = mw.html.create('div')
	
	divNode
		:cssText('display: flex; flex-flow: row wrap; justify-content: center;')
		:newline()

	local result = get["lots"](lot)
	for k, v in ipairs(result) do
    	if tonumber(args['index']) == k then
			for k2, v2 in ipairs(v) do
                if v[k2][1] == "Сквил" or
                   v[k2][1] == "Денди" or
                   v[k2][1] == "Справедливость" or
                   v[k2][1] == "Альберт" or
				   v[k2][1] == "Ангмарс" or
				   v[k2][1] == "МакКлиф" or
				   v[k2][1] == "Сэра, Королева Воров" or
				   v[k2][1] == "Повелительница мух" or
				   v[k2][1] == "Тикола Несла" or
                   v[k2][1] == "Анндралгон Черный" or
				   v[k2][1] == "Мехарион" or
                   v[k2][1] == "Владыка Драадор" or
				   v[k2][1] == "Кузнечик" or
                   v[k2][1] == "Ледяная Эльга" or
                   v[k2][1] == "Аврора, Ангел Надежды" or
                   v[k2][1] == "Разиэль, Ангел Отчаяния" or
                   v[k2][1] == "Элтор, Ангел Равновесия" or
                   v[k2][1] == "Зевс Громовержец" or
                   v[k2][1] == "Владыка Миктлана" or
                   v[k2][1] == "Инпу" or
                   v[k2][1] == "Арбитр" or
                   v[k2][1] == "Судья" or
                   v[k2][1] == "Пренакс Обманщик" or
                   v[k2][1] == "Коммандор Вед'ахен" or
                   v[k2][1] == "Альммахарет" or
                   v[k2][1] == "Кертхрорааз" or
                   v[k2][1] == "Космический солдат" or
                   v[k2][1] == "Звездный охотник" or
                   v[k2][1] == "Пожиратель душ" or
                   v[k2][1] == "Августин" or
                   v[k2][1] == "Аилред" or
                   v[k2][1] == "Офаниель" or
                   v[k2][1] == "Дидгур" or
                   v[k2][1] == "Воин ягуара" or
                   v[k2][1] == "Уильям Вейн" or
                   v[k2][1] == "Тразк" or
                   v[k2][1] == "Джамис" or
                   v[k2][1] == "Фалвиетх Кхазирзие"
				then
					divNode
		    			:tag('div')
		    				:addClass('loot-item')
				    		:wikitext(mw.ustring.format('%s', libHero.getHeroIcon(v[k2][1], "60px", true)))
				    		:done()
				elseif 
					v[k2][1] == "ЛтА-7" or
					v[k2][1] == "Ледяная пушка" or
					v[k2][1] == "Баллиста" or
					v[k2][1] == "Огненный лев" or
					v[k2][1] == "Пушка-орел" or
					v[k2][1] == "Большой гарпун" or
					v[k2][1] == "Потрошитель" or
					v[k2][1] == "Пушка тайн" or
            	    v[k2][1] == "Лучники" or
                    v[k2][1] == "Волшебники" or
                    v[k2][1] == "Воины/1" or
                    v[k2][1] == "Грифоны" or
                    v[k2][1] == "Черные рыцари" or
                    v[k2][1] == "Сторожевая башня пустоты/1"
                then
                    divNode
		    			:tag('div')
		    				:addClass('loot-item')
				    		:wikitext(mw.ustring.format('%s', libUnit.getUnitIcon(v[k2][1], "60px", v[k2][2], true)))
				    		:done()
				else
	    			divNode
		    			:tag('div')
		    				:addClass('loot-item')
				    		:wikitext(mw.ustring.format('%s', libItem.getItemIcon(v[k2][1], "60px", v[k2][2], true)))
				    		:done()
				end
		    end
		end
    end
    
    return frame:preprocess(tostring(divNode))
end

function p.getItemIcon(item, size, count, link)
	local item_data    = require ('Module:ItemData/data')
	local rarity_data  = require ('Module:ItemData/rarities')
	local rarity, icon = ""
	
	if size == nil then
		size = "30px"
	end
	
	if count == nil then
		count = ""
	end
	
	if link == nil then
		link = ""
	end
	
	if lib.lookup(item_data, item) then
		icon = item_data[item]["icon"]
	else
		return item
	end
	
	if rarity_data[item_data[item]["rarity"]] and rarity_data[item_data[item]["rarity"]] ~= nil then
		rarity = rarity_data[item_data[item]["rarity"]]
	else
		rarity = "обычный"
	end
	
	return mw.ustring.format('{{ItemIcon|%s|%s|%s|size=%s|count=%s|link=%s}}', item, icon, rarity, size, count, link)
end

function p.getLotSource(frame)
	local args; if frame.args == nil then args = lib.arguments(frame) else args = lib.arguments(frame.args) end
		
	local get         = require ('Module:ShopData/getter')
	local lot         = args['lot'] or args[1]
	local str         = ""
	
	local result     = get["source"](lot)
	
	if (result == "Магазин") then
		str = str .. mw.ustring.format('<div class="shop" style="width:fit-content; width: -moz-fit-content">')
		str = str .. mw.ustring.format('[[Файл:icon_shop.png|x100px|ссылка=Магазин]]', "Магазин")
		str = str .. mw.ustring.format('</div>')
	elseif (result == "Квесты") then
		str = str .. mw.ustring.format('<div class="shop" style="width:fit-content; width: -moz-fit-content">')
		str = str .. mw.ustring.format('[[Файл:icon_quests.png|x100px|ссылка=Ежедневные квесты]]', "Квесты")
		str = str .. mw.ustring.format('</div>')
	end
	
	return frame:preprocess(tostring(str))
end

function p.getLotIcon(lot, size, count, link)
	local shop_data    = require ('Module:ShopData/data')
	local icon = ""
	local unit = false
	
	if size == nil then
		size = "30px"
	end
	
	if count == nil then
		count = ""
	end
	
	if link == nil then
		link = ""
	end
	
	if lib.lookup(shop_data, lot) then
		icon = shop_data[lot]["icon"]
	else
		return lot
	end
		
	return mw.ustring.format('{{LotIcon|%s|%s|size=%s|link=%s}}', lot, icon, size, link)
end

return p