Модуль:ShopData: различия между версиями
Нет описания правки |
Нет описания правки |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 4: | Строка 4: | ||
local libItem = require('Module:ItemData') | local libItem = require('Module:ItemData') | ||
local libHero = require('Module:HeroData') | local libHero = require('Module:HeroData') | ||
local libUnit = require('Module:UnitData') | |||
function p.get(frame) | function p.get(frame) | ||
Строка 130: | Строка 131: | ||
v[k2][1] == "Уильям Вейн" or | v[k2][1] == "Уильям Вейн" or | ||
v[k2][1] == "Тразк" or | v[k2][1] == "Тразк" or | ||
v[k2][1] == "Джамис" | v[k2][1] == "Джамис" or | ||
v[k2][1] == "Фалвиетх Кхазирзие" | |||
then | then | ||
divNode | divNode | ||
:tag('div') | :tag('div') | ||
:addClass('loot-item') | :addClass('loot-item') | ||
:wikitext(mw.ustring.format('%s', libHero.getHeroIcon(v[k2][1], "60px"))) | :wikitext(mw.ustring.format('%s', libHero.getHeroIcon(v[k2][1], "60px", true))) | ||
:done() | :done() | ||
elseif | elseif | ||
Строка 156: | Строка 158: | ||
:tag('div') | :tag('div') | ||
:addClass('loot-item') | :addClass('loot-item') | ||
:wikitext(mw.ustring.format('%s', libUnit.getUnitIcon(v[k2][1], "60px", v[k2][2]))) | :wikitext(mw.ustring.format('%s', libUnit.getUnitIcon(v[k2][1], "60px", v[k2][2], true))) | ||
:done() | :done() | ||
else | else | ||
Строка 162: | Строка 164: | ||
:tag('div') | :tag('div') | ||
:addClass('loot-item') | :addClass('loot-item') | ||
:wikitext(mw.ustring.format('%s', libItem.getItemIcon(v[k2][1], "60px", v[k2][2]))) | :wikitext(mw.ustring.format('%s', libItem.getItemIcon(v[k2][1], "60px", v[k2][2], true))) | ||
:done() | :done() | ||
end | end | ||
Строка 224: | Строка 226: | ||
return frame:preprocess(tostring(str)) | 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 | end | ||
return p | return p |
Текущая версия от 07:26, 25 июня 2023
Данная группа модулей хранит информацию о магазинных товарах из Крушителей подземелий. Перечень модулей:
- Модуль:ShopData - основные функции
- Модуль:ShopData/data - массив данных о товарах
- Модуль:ShopData/getter - сборщик данных о товарах
- Модуль:ShopData/types - массив данных c типами валют
- Модуль:ShopData/lots - массив данных с содержанием товаров
- Модуль:ShopData/source - массив данных с типами источника получения товара
Информация из Модуль: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