Path of Exile Wiki

Подумайте над тем, чтобы помочь в обновлении Wiki.

ПОДРОБНЕЕ

Path of Exile Wiki
Path of Exile Wiki
50 386
страниц
Первая страница
Вторая страница
 
RheingoldRiver (обсуждение | вклад)
(Новая страница: «-- Item table -- -- Creates various item tables from cargo queries. -- -- -- Todo list -- --------- -- * Handle table columns that can have multiple cargo rows, p...»)
 
Строка 1: Строка 1:
  +
-- Item table
-------------------------------------------------------------------------------
 
--
+
--
  +
-- Creates various item tables from cargo queries.
-- Module:Item table
 
--
+
--
  +
--
-- This module implements Template:Item table and other templates that query
 
-- and display lists of items.
 
-------------------------------------------------------------------------------
 
 
 
-- Todo list
 
-- Todo list
 
-- ---------
 
-- ---------
Строка 16: Строка 13:
 
-- hoverboxes, to avoid running into template expansion size issues.
 
-- hoverboxes, to avoid running into template expansion size issues.
   
  +
require('Module:No globals')
 
 
-- ----------------------------------------------------------------------------
local getArgs = require('Module:Arguments').getArgs
 
  +
-- Imports
 
-- ----------------------------------------------------------------------------
 
local m_util = require('Module:Util')
 
local m_util = require('Module:Util')
 
local getArgs = require('Module:Arguments').getArgs
 
local m_game = require('Module:Game')
 
local f_item_link = require('Module:Item link').item_link
 
local f_skill_link = require('Module:Skill link').skill_link
 
local m_cargo = require('Module:Cargo')
 
local m_cargo = require('Module:Cargo')
   
  +
-- ----------------------------------------------------------------------------
local m_game = mw.loadData('Module:Game')
 
  +
-- Globals
  +
-- ----------------------------------------------------------------------------
   
 
local c = {}
-- Should we use the sandbox version of our submodules?
 
  +
c.query_default = 50
local use_sandbox = m_util.misc.maybe_sandbox('Item table')
 
  +
c.query_max = 300
   
  +
-- ----------------------------------------------------------------------------
-- Lazy loading
 
  +
-- Strings
local f_item_link -- require('Module:Item link').item_link
 
  +
-- ----------------------------------------------------------------------------
local f_skill_link -- require('Module:Skill link').skill_link
 
  +
-- This section contains strings used by this module.
  +
-- Add new strings here instead of in-code directly, this will help other
  +
-- people to correct spelling mistakes easier and help with translation to
  +
-- other PoE wikis.
   
  +
local i18n = {
-- The cfg table contains all localisable strings and configuration, to make it
 
  +
categories = {
-- easier to port this module to another wiki.
 
  +
-- maintenance cats
local cfg = use_sandbox and mw.loadData('Module:Item table/config/sandbox') or mw.loadData('Module:Item table/config')
 
  +
query_limit = 'Item tables hitting query limit',
  +
query_hard_limit = 'Item tables hitting hard query limit',
  +
no_results = 'Таблицы предметов без результатов',
 
},
  +
  +
-- Used by the item table
  +
item_table = {
 
item = 'Предмет',
  +
skill_gem = 'Камень',
  +
  +
physical_dps = m_util.html.abbr('фУВС', 'физический урон в секунду'),
  +
fire_dps = m_util.html.abbr('Fire УВС', 'урона от огня в секунду'),
  +
cold_dps = m_util.html.abbr('Cold УВС', 'урона от холода в секунду'),
  +
lightning_dps = m_util.html.abbr('Light. УВС', 'урона от молнии в секунду'),
  +
chaos_dps = m_util.html.abbr('Chaos УВС', 'урона хаосом в секунду'),
  +
elemental_dps = m_util.html.abbr('сУВС', 'урон от стихий (т.е огонь/холод/молния) в секунду'),
  +
poison_dps = m_util.html.abbr('Poison УВС', 'урон от яда (т.е. физический/хаос) в секунду'),
  +
dps = m_util.html.abbr('УВС', 'общий урон (т.е. физический/огонь/холод/молния/хаос) в секунду'),
  +
base_item = 'Базовый<br>предмет',
  +
metadata_id = 'Metadata ID',
  +
item_class = 'Тип<br>предмета',
  +
rarity = 'Редкость',
  +
rarity_id = 'ID редкости',
  +
essence_level = 'Уровень<br>сущности',
  +
drop_level = 'Уровень<br>выпадения',
  +
release_version = 'Добавлено<br>в версии',
  +
removal_version = 'Удалено<br>в версии',
  +
version_link = '[[Версия %s|%s]]',
  +
drop_enabled = m_util.html.abbr('Drop<br>Enabled', 'If an item is drop disabled, it can not be normally obtained, but still may be available under specific conditions (like trading via standard league or limited time events'),
  +
drop_leagues = 'Выпадение<br>в лигах',
  +
drop_leagues_link = '[[Лига %s|%s]]',
  +
drop_areas = 'Области выпадения',
  +
drop_monsters = 'Выпадение<br>из монстров',
  +
drop_text = 'Дополнительные<br>ограничения выпадения',
  +
stack_size = 'Размер<br>стопки',
  +
stack_size_currency_tab = m_util.html.abbr('Размер<br>стопки<br>во вкладке', 'Размер стопки в валютной вкладке'),
  +
armour = m_util.html.abbr('Бр', 'Броня'),
  +
evasion = m_util.html.abbr('Укл', 'Уклонение'),
  +
energy_shield = m_util.html.abbr('Эщ', 'Энерг. щит'),
  +
block = m_util.html.abbr('Блок', 'Шанс заблокировать'),
  +
damage = m_util.html.abbr('Урон', 'Урон с цветовой кодировкой'),
  +
attacks_per_second = m_util.html.abbr('АВС', 'Атак в секунду'),
  +
local_critical_strike_chance = m_util.html.abbr('Крит', 'Локальный шанс критического удара оружием'),
  +
flask_life = m_util.html.abbr('Здоровье', 'Количество здоровья, регенерируемое за время действия флакона'),
  +
flask_life_per_second = m_util.html.abbr('Life/s', 'Life regenerated each second'),
  +
flask_life_per_charge = m_util.html.abbr('Life/c', 'Life regenerated per flask charge'),
  +
flask_mana = m_util.html.abbr('Мана', 'Количество маны, регенерируемое за время действия флакона'),
  +
flask_mana_per_second = m_util.html.abbr('Mana/s', 'Mana regenerated each second'),
  +
flask_mana_per_charge = m_util.html.abbr('Mana/c', 'Mana regenerated per flask charge'),
  +
flask_duration = 'Длительность',
  +
flask_charges_per_use = m_util.html.abbr('Расход', 'Количество зарядов, расходуемых при использовании'),
  +
flask_maximum_charges = m_util.html.abbr('Вместимость', 'Максимальное количество зарядов флакона'),
 
  +
seed_type = 'Seed Type',
  +
seed_tier = 'Seed<br>Tier',
  +
seed_growth_cycles = 'Growth<br>Cycles',
  +
seed_consumed_primal_lifeforce_percentage = m_util.html.abbr('Primal<br>Lifeforce<br>consumed', 'How much of the consumed life force is of the primal type.'),
  +
seed_consumed_vivid_lifeforce_percentage = m_util.html.abbr('Vivid<br>Lifeforce<br>consumed', 'How much of the consumed life force is of the vivid type.'),
  +
seed_consumed_wild_lifeforce_percentage = m_util.html.abbr('Wild<br>Lifeforce<br>consumed', 'How much of the consumed life force is of the wild type.'),
  +
seed_required_nearby_seed_amount = m_util.html.abbr('Nearby<br>Seeds<br>required', 'How many seeds of the same type are required for this seed.'),
  +
seed_required_nearby_seed_tier = m_util.html.abbr('Nearby<br>Seed<br>Tier', 'The minimum tier required of nearby seeds of the same type.'),
  +
seed_granted_crafting_options = 'Crafting Options',
 
  +
item_limit = 'Максимум',
  +
jewel_radius = 'Радиус',
  +
map_tier = 'Уровень<br>карты',
  +
map_level = 'Уровень<br>области',
  +
map_guild_character = m_util.html.abbr('Символ', 'Символ для тега гильдии'),
  +
atlas_tier = 'Уровень карты<br>в зависимости от [[atlas region|региона]]',
  +
atlas_level = 'Уровень области<br>в зависимости от [[atlas region|региона]]',
  +
master_level_requirement = '[[Image:Level up icon small.png‎|link=|Уровень мастера]]',
  +
master = 'Мастер',
  +
master_favour_cost = 'Цена<br>расположения',
  +
variation_count = 'Изменений',
  +
buff_effects = 'Положительный эффект',
  +
stats = 'Свойства',
  +
quality_stats = 'Свойство за 1% качества',
  +
effects = 'Эффект(-ы)',
  +
incubator_effect = 'Эффект инкубатора',
  +
flavour_text = 'Сопроводительный текст',
  +
prediction_text = 'Prediction',
  +
help_text = 'Вспомогательный текст',
  +
seal_cost = m_util.html.abbr('Стоимость<br>печати', 'Количество Серебряных монет, необходимых для запечатывания пророчества'),
  +
objective = 'Задача',
  +
reward = 'Награда',
  +
buff_icon = 'Изображение<br>эффекта',
  +
quest_name = 'Задание',
  +
quest_act = 'Quest<br>Act',
  +
purchase_costs = m_util.html.abbr('Purchase Cost', 'Cost of purchasing an item of this type at NPC vendors. This does not indicate whether NPCs actually sell the item.'),
  +
sell_price = m_util.html.abbr('Sell Price', 'Items or currency received when selling this item at NPC vendors. Certain vendor recipes may override this value.'),
  +
boss_name = 'Босс',
  +
boss_number = 'Количество боссов',
  +
legacy = m_util.html.abbr('Устаревшие свойства', 'Сравните устаревшие варианты с текущими.&#10;• Яркий текст указывает свойства, которые отличаются от последнего варианта.&#10;• Зачеркнутый текст указывает свойства, которые не существуют в устаревших вариантах.'),
  +
granted_skills = 'Даруемые умения',
  +
granted_skills_level_label = 'уровня',
  +
granted_skills_level_pattern = '(%d+)%s*{granted_skills_level_label}',
  +
granted_skills_level_format = ' {level_number} {granted_skills_level_label}',
  +
granted_skills_skill_output_format = '{sl}{level}',
  +
granted_skills_gem_output_format = '{il}{level}',
  +
alternate_art = 'Alternate<br>Arts',
  +
 
-- Skills
  +
support_gem_letter = m_util.html.abbr('L', 'Support gem letter.'),
  +
skill_icon = 'Изображение',
  +
description = 'Описание',
  +
skill_critical_strike_chance = m_util.html.abbr('Крит', 'Шанс критического удара'),
  +
cast_time = m_util.html.abbr('Время<br>применения', 'Время применения умения в секундах'),
  +
attack_speed_multiplier = m_util.html.abbr('ASPD', 'Множитель скорости атаки'),
  +
damage_effectiveness = m_util.html.abbr('Эффект.<br>добавл.<br>урона', 'Эффективность добавленного урона'),
  +
mana_cost_multiplier = m_util.html.abbr('МРМ', 'Множитель расхода маны - missing values indicate it changes on gem level'),
  +
mana_cost = m_util.html.abbr('Мана', 'Расход маны'),
  +
reserves_mana_suffix = m_util.html.abbr('У', 'маны удерживается'),
  +
vaal_souls_requirement = m_util.html.abbr('Души', 'Требуемое количество душ (1.5x in part 2, 2x in maps)'),
  +
stored_uses = m_util.html.abbr('Заряды', 'Максимальное количество встроенных применений'),
  +
primary_radius = m_util.html.abbr('Р1', 'Основной радиус'),
  +
secondary_radius = m_util.html.abbr('Р2', 'Вторичный радиус'),
  +
tertiary_radius = m_util.html.abbr('Р3', 'Третичный радиус'),
  +
vendor_rewards = m_util.html.abbr('Награда торговца', 'Можно приобрести у торговцев после выполнения заданий'),
  +
vendor_rewards_row_format = '[[Акт %s]] после выполнения [[%s]] который выдаёт [[%s]] покупка доступна: %s.',
  +
vendor_rewards_any_classes = 'любым персонажем',
  +
quest_rewards = m_util.html.abbr('Награды за задание', 'Награды после завершения задания'),
  +
quest_rewards_row_format = '[[Акт %s]] - выполните задание [[%s]].',
  +
quest_rewards_any_classes = 'любым персонажем',
 
},
  +
  +
prophecy_description = {
  +
objective = 'Задача',
  +
reward = 'Награда',
 
},
  +
  +
item_disambiguation = {
  +
original='первоначальный вариант',
  +
drop_enabled='текущий вариант,',
  +
drop_disabled='устаревший вариант,',
  +
known_release = ' который был введён в дополнении [[%s|%s]]',
  +
list_pattern='%s — %s%s.'
  +
},
  +
  +
errors = {
  +
generic_argument_parameter = 'Unrecognized %s parameter "%s"',
  +
invalid_item_table_mode = 'Invalid mode for item table',
  +
},
  +
}
   
local i18n = cfg.i18n
 
   
 
-- ----------------------------------------------------------------------------
 
-- ----------------------------------------------------------------------------
-- Helper functions
+
-- Helper & utility functions
 
-- ----------------------------------------------------------------------------
 
-- ----------------------------------------------------------------------------
   
 
local h = {}
 
local h = {}
 
-- Lazy loading for Module:Item link
 
function h.item_link(args)
 
if not f_item_link then
 
f_item_link = require('Module:Item link').item_link
 
end
 
return f_item_link(args)
 
end
 
 
-- Lazy loading for Module:Skill link
 
function h.skill_link(args)
 
if not f_skill_link then
 
f_skill_link = require('Module:Skill link').skill_link
 
end
 
return f_skill_link(args)
 
end
 
   
 
function h.na_or_val(tr, value, func)
 
function h.na_or_val(tr, value, func)
Строка 84: Строка 220:
 
return function()
 
return function()
 
local fields = {}
 
local fields = {}
local inner = function (field)
+
function inner(field)
 
for _, partial_field in ipairs(suffixes) do
 
for _, partial_field in ipairs(suffixes) do
 
fields[#fields+1] = string.format('%s_range_%s', field, partial_field)
 
fields[#fields+1] = string.format('%s_range_%s', field, partial_field)
Строка 381: Строка 517:
 
display = h.tbl.display.factory.range{field='armours.energy_shield'},
 
display = h.tbl.display.factory.range{field='armours.energy_shield'},
 
order = 6002,
 
order = 6002,
},
 
{
 
arg = 'wd',
 
header = i18n.item_table.ward,
 
fields = h.tbl.range_fields{field='armours.ward'},
 
display = h.tbl.display.factory.range{field='armours.ward'},
 
order = 6003,
 
 
},
 
},
 
{
 
{
Строка 394: Строка 523:
 
fields = h.tbl.range_fields{field='shields.block'},
 
fields = h.tbl.range_fields{field='shields.block'},
 
display = h.tbl.display.factory.range{field='shields.block'},
 
display = h.tbl.display.factory.range{field='shields.block'},
order = 6004,
+
order = 6003,
 
},
 
},
 
--[[{
 
--[[{
Строка 549: Строка 678:
 
order = 9030,
 
order = 9030,
 
},
 
},
  +
 
{
 
{
 
arg = 'flask',
 
arg = 'flask',
Строка 966: Строка 1096:
 
end
 
end
   
local value = table.concat(tbl, '<br>')
+
value = table.concat(tbl, '<br>')
 
if value == nil or value == '' then
 
if value == nil or value == '' then
 
tr:wikitext(m_util.html.td.na())
 
tr:wikitext(m_util.html.td.na())
Строка 1026: Строка 1156:
 
end
 
end
   
local value = table.concat(tbl, '<br>')
+
value = table.concat(tbl, '<br>')
 
if value == nil or value == '' then
 
if value == nil or value == '' then
 
tr:wikitext(m_util.html.td.na())
 
tr:wikitext(m_util.html.td.na())
Строка 1051: Строка 1181:
 
'%sx %s',
 
'%sx %s',
 
data['item_purchase_costs.amount'],
 
data['item_purchase_costs.amount'],
h.item_link{data['item_purchase_costs.name']}
+
f_item_link{data['item_purchase_costs.name']}
 
)
 
)
 
end
 
end
Строка 1093: Строка 1223:
 
'%sx %s',
 
'%sx %s',
 
v['item_sell_prices.amount'],
 
v['item_sell_prices.amount'],
h.item_link{v['item_sell_prices.name']}
+
f_item_link{v['item_sell_prices.name']}
 
)
 
)
 
end
 
end
Строка 1370: Строка 1500:
 
{
 
{
 
level = level,
 
level = level,
sl = h.skill_link{
+
sl = f_skill_link{
 
skip_query=true,
 
skip_query=true,
 
page = v['skill.active_skill_name']
 
page = v['skill.active_skill_name']
Строка 1401: Строка 1531:
 
{
 
{
 
level = level,
 
level = level,
il = h.item_link(il_args),
+
il = f_item_link(il_args),
 
}
 
}
 
)
 
)
Строка 1918: Строка 2048:
 
query[string.sub(key, 3)] = value
 
query[string.sub(key, 3)] = value
 
end
 
end
end
 
 
-- Namespace condition
 
-- This is mainly to prevent items from user pages or other testing pages
 
-- from being returned in the query results.
 
if tpl_args.namespace ~= 'any' then
 
local namespace = tonumber(tpl_args.namespace) or cfg.primary_namespace
 
query.where = string.format('%s AND items._pageNamespace = %i', query.where, namespace)
 
 
end
 
end
   
Строка 2114: Строка 2236:
 
tr
 
tr
 
:tag('td')
 
:tag('td')
:wikitext(h.item_link(il_args))
+
:wikitext(f_item_link(il_args))
 
:done()
 
:done()
   
Строка 2140: Строка 2262:
 
end
 
end
   
local cats = {}
+
cats = {}
 
if #results == query.limit then
 
if #results == query.limit then
 
cats[#cats+1] = i18n.categories.query_limit
 
cats[#cats+1] = i18n.categories.query_limit
Строка 2151: Строка 2273:
 
mw.logObject({os.clock() - t, query})
 
mw.logObject({os.clock() - t, query})
   
return tostring(tbl) .. m_util.misc.add_category(cats, {ignore_blacklist=tpl_args.debug})
+
return tostring(tbl) .. m_util.misc.add_category(cats, {ingore_blacklist=tpl_args.debug})
 
end
 
end
   
Строка 2259: Строка 2381:
 
local where_tbl = {}
 
local where_tbl = {}
 
for _, item_name in ipairs(tpl_args.name_list) do
 
for _, item_name in ipairs(tpl_args.name_list) do
for _, prefix in ipairs({'', 'Изменённая '}) do
+
for _, prefix in ipairs({'', 'Shaped '}) do
 
where_tbl[#where_tbl+1] = string.format(
 
where_tbl[#where_tbl+1] = string.format(
 
'items__name_list._value = "%s%s"',
 
'items__name_list._value = "%s%s"',
Строка 2270: Строка 2392:
   
 
results = m_cargo.query(
 
results = m_cargo.query(
+
-- explicitly join to the child list table so that we don't need a REGEXP
+
-- explicitly join to the child list table so that we don't need a REGEXP
 
{ 'items__name_list', 'items', 'maps'},
 
{ 'items__name_list', 'items', 'maps'},
 
{
 
{
Строка 2384: Строка 2506:
 
string.format(
 
string.format(
 
i18n.item_disambiguation.list_pattern,
 
i18n.item_disambiguation.list_pattern,
h.item_link{page=v['items._pageName']},
+
f_item_link{page=v['items._pageName']},
 
drop_enabled,
 
drop_enabled,
 
known_release
 
known_release
Строка 2477: Строка 2599:
 
end
 
end
   
local link = h.item_link{
+
local link = f_item_link{
 
page=page,
 
page=page,
 
name=row['items.name'],
 
name=row['items.name'],