Модуль:Iteminfo
Цей модуль використовується для отримання динамічних та достовірних характеристик предметів. Він бере дані безпосередньо з вихідного коду, спрощуючи відображення характеристик без необхідності зміни при наступних оновленнях гри.
Він також використовується для роботи шаблону {{iteminfo}}
. Як правило, у статтях замість модуля має використовуватись саме цей шаблон. У ньому містяться додаткові утиліти, такі як форматування виведення та аліасів параметрів.
Код модуля на даний момент синхронізований з версією Terraria 1.4.1.2(Видання для ПК, консолей та мобільних пристроїв).
Використання
Усі характеристики
{{#invoke:iteminfo|getInfo| id = <id предмета> | prefix = <префікс імен змінних для виведення> }}
або
{{#invoke:iteminfo|getInfo| <id предмета> | <префікс імен змінних для виведення> }}
- id
ID предмета, має бути в діапазоні від 1 до 5455. Зверніть увагу, що наступні ID застаріли і, отже, недійсні: від 2772 до 2775, від 2777 до 2780, від 2782 до 2785, 2881, 3273, від 3340 до 3346, від 3462 до 3465, 3750, від 3847 до 3851, 3861 та 3862.
- prefix (необов’язковий)
Префікс для вихідної змінної, за замовчуванням це _iteminfo_
. Наприклад, назва змінної значення за замовчуванням це _iteminfo_value
. Якщо використовуєте prefix=my_
, то ім’я змінної має бути my_value
. При використанні цього методу модуль визначає кількість змінних DPL, які потім, наприклад, можна буде отримати за допомогою {{#dplvar:_iteminfo_value}}
. Цей метод переважно використовувати для Lua-скриптів через швидкість DPL.
Одна характеристика
{{#invoke:iteminfo|getStat| id = <id предмета> | stat = <назва характеристики> }}
або
{{#invoke:iteminfo|getStat| <id предмета> | <назва характеристики> }}
- id
ID предмета, має бути в діапазоні від 1 до 5455. Зверніть увагу, що наступні ID застаріли і, отже, недійсні: від 2772 до 2775, від 2777 до 2780, від 2782 до 2785, 2881, 3273, від 3340 до 3346, від 3462 до 3465, 3750, від 3847 до 3851, 3861 та 3862.
- stat (необов’язковий)
Назва характеристики, див. таблицю нижче для можливих значень.
Якщо ви не впевнені, що вказаний вами ID коректний, перевірте його через {{#dplvar:_iteminfo_type}}
. ID відображається, якщо воно коректне, інакше значення буде порожнім.
Усі поля виведення перераховані нижче. Зверніть увагу, що не всі використовуються; див. примітку до кожного рядка. І, будь ласка, також звертайтеся до документацій з tModLoader і tConfig.
Примітка: Ви можете отримати назву предмета з ідентифікатора за допомогою {{ItemNameFromId}}.
dplvar (без префіксу) |
Значення за замовчуванням | Приклад (тут: ID = 757) |
Примітка |
---|---|---|---|
type | 0 | 757 | ID предмета. Якщо ID як аргумент заданий коректно, значення буде виведено числом. Інакше значення буде порожнім. |
internalName | TerraBlade | Внутрішня назва предмета. | |
name | Terra Blade | Назва предмета англійською. | |
DD2Summon | Якщо є, то це означає, що це зброя, що закликає сторожів, від шинкаря(Видання для ПК, консолей та мобільних пристроїв). | ||
ToolTip | Наразі завжди порожньо. Збережено для використання у майбутньому. Можете використовувати {{itemTooltip}} для виведення підказок. | ||
material | 1 | Якщо є, то цей предмет — матеріал. Ви також можете використовувати {{#invoke:Recipes|exist|ingredient=<назва предмета>}} , щоб відобразити цю інформацію.
| |
accessory | Якщо є, то цей предмет — аксесуар. | ||
alpha | 0 | 0 | |
ammo | 0 | 0 | ID боєприпасу (використовується в полі useAmmo ) і не тільки, наприклад 353, 154
|
autoReuse | 1 | Якщо є, то цей предмет має автозмах. | |
axe | 0 | 0 | Потужність сокири. 1 ≙ 5%, наприклад, axe = 23 означає, що потужність сокири цього предмета дорівнює 115%.
|
backSlot | -1 | -1 | ID осередку зі спини. Див. «Ідентифікатори броні» § «Аксесуари». |
bait | 0 | 0 | Якість наживки (у відсотках), наприклад, bait = 50 означає, що якість наживки цього предмета дорівнює 50%.
|
balloonSlot | -1 | -1 | ID осередку кульки. Див. «Ідентифікатори броні» § «Аксесуари». |
bodySlot | -1 | -1 | ID осередку тіла (груди). Див. «Ідентифікатори броні». |
buffTime | 0 | 0 | Час дії бафа, який дає цей предмет, у тиках (1 тик = 1/60 секунди та 1/3600 хвилини). Наприклад, якщо buffTime = 14400 , то це означає, що баф діятиме протягом 240 секунд (14400/60 = 240 ), що дорівнює чотирьом хвилинам (14400/3600 = 4 ).
|
buffType | 0 | 0 | ID бафа, що накладається цим предметом. |
canBePlacedInVanityRegardlessOfConditions | |||
cartTrack | Задається для рейок. | ||
channel | Якщо є, це означає, що предмет можна/потрібно використовувати постійно (тут мається на увазі не автозмах, а саме можливість утримання предмета!). Задається для кистіней та йо-йо, бензопил та бурів, чарівної ракети та її аналогів, жезла землі, піраньєвої пушкі, хлорофітового відбійного молотка, лазерного кулемету, зарядної бластер-пушкі, літаючого ножа, голови Медузи, Архалісу, портальної пушкі, «Вихрового загонича», «Фантома», «Вищого задуму», останньої призми, сонного восьмижезлу, моторошної глефи, «Примарного фенікса», «Люті небесного дракона». Також задається для деяких предметів, що закликають вихованців/для висвітлюючих вихованців/засоби пересування, тому що вони діють постійно. | ||
consumable | Задається для предметів, що витрачаються (всі вони перераховані в категорії «Витрачені предмети»). Зверніть увагу, що вони відрізняються від внутрішньоігрового поняття слова «витрачені»! Див. ясності категорію «Витрачені предмети» . Якщо цей атрибут має значення True, то один предмет зі стопки буде видалений під час використання. | ||
craftable | 1 | Якщо є, цей предмет може бути створений. Ви також можете використовувати {{#invoke:Recipes|exist|result=<назва предмета>}} , щоб відобразити цю інформацію.
| |
createTile | -1 | -1 | ID тайла цього предмета, який створюється під час розміщення. placeStyle — це підкатегорія ID тайла.
|
placeStyle | 0 | 0 | |
createWall | -1 | -1 | ID стіни цього предмета, який створюється під час розміщення. |
crit | 0 | 0 | Шанс критичного удару (у відсотках), який додається до основного шансу на 4%, наприклад, crit = 2 означає, що шанс критичного удару цього предмета дорівнює 6%; crit = 4 означає, що шанс критичного удару цього предмета дорівнює 8%.
|
damage | -1 | 85 | Базова шкода предмета. |
defense | 0 | 0 | Рівень захисту, який цей предмет дає. |
dye | 0 | 0 | Якщо значення не дорівнює нулю, то цей предмет — барвник. |
expert | Якщо є, цей предмет буде відображатися з рівнем рідкості . | ||
faceSlot | -1 | -1 | ID комірки на обличчі. Див. «Ідентифікатори броні» § «Аксесуари». |
fishingPole | 0 | 0 | Навичка риболовлі предмета (у відсотках), наприклад, fishingPole = 27 означає, що навичка риболовлі цього предмета дорівнює 27%.
|
flame | Задається для кожного виду смолоскипа, а також для водяної, мирної, платинової та звичайної свічки. Що цікаво, воно також задається для пекельного меча. | ||
frontSlot | -1 | -1 | ID комірки спереду. Див. «Ідентифікатори броні» § «Аксесуари». |
glowMask | -1 | -1 | |
hairDye | -1 | -1 | Значення рівне нулю задається для змивача фарби для волосся, а позитивні числа — для фарб для волосся. |
hammer | 0 | 0 | Потужність молота (у відсотках), наприклад, hammer = 90 означає, що потужність молота предмета дорівнює 90%.
|
handOffSlot | -1 | -1 | ID осередку вільної руки. Див. «Ідентифікатори броні» § «Аксесуари». |
handOnSlot | -1 | -1 | ID осередку зайнятої руки. Див. «Ідентифікатори броні» § «Аксесуари». |
headSlot | -1 | -1 | ID комірки голови. Див. Ідентифікатори броні. |
healLife | 0 | 0 | Кількість очок здоров’я, яку відновлює предмет під час використання. |
healMana | 0 | 0 | Кількість очок мани, яку відновлює предмет під час використання. |
holdStyle | 0 | 0 | Можливо лише у вигляді значення від 0 до 3. Значення 1 задається для кожного виду смолоскипа, а також для водяної, мирної, платинової та звичайної свічки, липкої світлопалички, стрибучої світлопалички, світлопалички спелеолога та звичайної світлопалички, елю, єдинорога на паличці, сигнальної ракетниці, маршмелоу на паличці, таїнства туманності. Значення 2 задається для дихальної трубки, парасольки. Значення 3 задається для чарівної арфи. |
knockBack | 0 | 6.5 | Значення відкидання предмета. |
legSlot | -1 | -1 | ID комірки ноги. Див. Ідентифікатори броні. |
lifeRegen | 0 | 0 | Може бути тільки 0 або 1. Значення 1 задається для браслета відновлення та амулету міфів. |
makeNPC | 0 | 0 | Якщо значення не дорівнює нулю, це означає, що предмет використовується для призову істот (NPC). Значення відповідає ID істоти, що призивається. |
mana | 0 | 0 | Кількість мани, яке предмет споживає під час використання. |
maxStack | 1 | 1 | Максимальна кількість у стопці. |
mech | Якщо є, то цей предмет є механізмом, що також означає, що він відображає дроти та активізатори, якщо у руці. | ||
melee | 1 | Якщо є, то цей предмет завдає шкоди у ближньому бою. | |
magic | Якщо є, то цей предмет завдає магічну шкоду. | ||
ranged | Якщо є, то цей предмет завдає шкоди у дальньому бою. | ||
summon | Якщо є, то цей предмет завдає шкоди від призваної істоти. | ||
thrown | Якщо є, то цей предмет завдає шкоди при кидку. | ||
mountType | -1 | -1 | ID засобу пересування, яке закликає цей предмет під час використання. |
netID | 0 | 757 | |
neckSlot | -1 | -1 | ID осередку на шиї. Див. «Ідентифікатори броні» § «Аксесуари». |
noMelee | 1 | Чи дозволено цьому предмету завдавати шкоди своїм спрайтом. Зазвичай ставиться значення true для зброї дальнього бою, яка натомість покладатиметься на свої снаряди для завдання шкоди. | |
noUseGraphic | Чи малюється спрайт цього елемента, коли він використовується. Використовується в такій метальній зброї, як динаміт, тому що його одразу кидають на землю, щоб створити ілюзію того, що його використовують. | ||
noWet | Якщо є, то предмет не можна тримати в руках/розміщувати під водою: єдиноріг на паличці, кожен вид свічки та кожен вид смолоскипа (крім проклятого та іхорного). Тим не менш, він також задається для таймерів, які можуть бути розміщені під водою. | ||
notAmmo | Задається лише для монет, елю, дротів. Крім дротів, їх поєднує ще те, що їх не можна розміщувати в осередку боєприпасів інвентарю, навіть якщо вони використовуються як боєприпаси. Однак у цей осередок можна розмістити дроти. | ||
paint | 0 | 0 | Якщо значення не дорівнює нулю, цей предмет — фарба. Це значення є чимось на зразок «ID фарби», яке знаходиться в діапазоні від 1 (червона фарба) до 30 (негативна фарба). |
pick | 0 | 0 | Потужність кирки (у відсотках), наприклад, pick = 150 означає, що потужність кирки предмета дорівнює 150%.
|
potion | Якщо є, жодні інші предмети з цим атрибутом не можна використовувати доти, доки не закінчиться час відновлення. Воно використовується для лікуючих предметів та грибів. | ||
rare | 0 | 8 | Рідкість предмета. Значення буде некоректним, якщо задано expert , оскільки це означає, що предмет має рідкість рівня .
|
reuseDelay | 0 | 0 | Час у тиках (1 тик = 1/60 секунди та 1/3600 хвилини) доки предмет можна буде використовувати знову, зазвичай зване «затримкою використання». На даний момент задається тільки для заводної штурмової гвинтівки, голови Медузи, останньої призми, «розсікача небес» та прокляття Бетсі. |
sacrifices | 0 | 1 | Необхідна кількість предметів для дослідження. |
scale | 1 | 1 | |
sentry | Якщо є, то цей предмет є закликаючим вартових. | ||
shieldSlot | -1 | -1 | ID осередку щита. Див. «Ідентифікатори броні» § «Аксесуари». |
shoeSlot | -1 | -1 | ID осередку взуття. Див. «Ідентифікатори броні» § «Аксесуари». |
shopCustomPrice | -1 | Вартість предметів армії Древніх(Видання для ПК, консолей та мобільних пристроїв), у медалях захисника. | |
shoot | 0 | 985 | Якщо значення не дорівнює нулю, то це ID снаряду, що випускається предметом. |
shootSpeed | 0 | 12 | Швидкість снаряда, що випускається предметом. |
stringColor | Колір мотузочки. | ||
tileBoost | 0 | 0 | Бонус дальності, наприклад, tileBoost = 4 означає, що дальність цього предмета збільшена до 4. Також згадується у підказках предмета як, наприклад, «+4 до дальності».
|
tileWand | -1 | -1 | ID предмета блоку, який розміщує паличка. |
questItem | Задається тільки для квестових риб. | ||
uniqueStack | Задаётся только для квестових риб. Див. Риболовля#Завдання рибалки для більш детальної інформації щодо якості цих предметів. | ||
useAmmo | 0 | 0 | Тип боєприпасів, які використовуються цим предметом. 23 для гелю, 40 для стріли, 71 для монети, 75 для впалої зірки, 97 для кулі, 169 для піску, 283 для дротика, 771 для ракети, 780 для розчину, 931 для сигнальної ракети, 949 для сніжку, 1261 для болта «Стінгера», 1783 для Кенді-корну, 1785 для світильника Джека, 1836 для кілка, 3108 для цвяха. |
useAnimation | 100 | 18 | Як довго програється анімація предмета, в тиках (1 тик = 1/60 секунди та 1/3600 хвилини). Цікава особливість полягає в тому, що якщо значення useTime нижче, ніж у useAnimation , то вона програватиметься один або кілька разів за використання (наприклад, як «Золотий дощ»). Якщо предмет є меч із автозмахом, то час використання предмета (яке відображається у грі та на вікі) буде поставлено як useAnimation = -1 .
|
UseSound | Item_1 | Назва файлу (без розширення файлу, ніж зазвичай є .wav ) звукового ефекту, який відтворюється цим предметом під час використання. Зверніть увагу, що вказаний звук є лише основним; він може бути програний зі зміненою висотою тону та гучністю у грі.
| |
useStyle | 0 | 1 | 1 = загальний помах/кидок, 2 = поїдання/використання, 3 = колотий удар, 4 = утримання, 5 = прибирання. Також див. список tConfig. |
useTime | 100 | 18 | Швидкість інструменту, (внутрішній) час використання для інших. Скільки часу потрібно для використання предмета у кадрах. Поки предмет перебуває у стані використання, ви не можете виконувати інші дії. |
useTurn | Чи гравець повертатиметься обличчям у напрямку свого руху при використанні предмета. Наприклад, меч повертає вас обличчям вліво або вправо, а от спис — немає. Якщо задати значення як useTurn = false , то це дозволить гравцеві не повертатися у бік свого руху під час використання.
| ||
value | 0 | 1000000 | Значення вартості, у мідних монетах. Вартість продажу = вартість покупки / 5. Шаблон {{Coin}} допомагає з форматуванням цього значення для коректного відображення. |
vanity | Якщо є, то цей предмет — предмет стилю. | ||
waistSlot | -1 | -1 | ID осередку тулуба. Див. «Ідентифікатори броні» § «Аксесуари». |
wingSlot | -1 | -1 | ID осередку крил. Див. «Ідентифікатори броні» § «Аксесуари». |
---Item info database
---luacache.get() is relative slow, therefore we load data from luacache only once per page.
local data = mw.loadData('Module:Iteminfo/loaddata')
local trim = mw.text.trim
local idSets = require('Module:Iteminfo/idSets')
local info = {
version = data['_terrariaversion'],
IDs = { -- min and max are both inclusive
min = 1,
max = 5455,
},
}
info.IDs.isValidWithUnused = function(id)
-- IDs marked as "unused" are still considered valid by this function
return id ~= nil and type(id) == 'number' and id >= info.IDs.min and id <= info.IDs.max
end
info.IDs.isValid = function(id)
-- IDs marked as "unused" are considered invalid by this function
return info.IDs.isValidWithUnused(id) and idSets.getValue('Unused', id) ~= true
end
-- cache
local currentFrame
-- helper function
local getArg = function(key)
local value = currentFrame.args[key]
if not value then
return nil
end
value = trim(value)
if value == '' then
return nil
else
return value
end
end
-- credit: http://richard.warburton.it
-- this version is with trim.
local function explode(div,str)
if (div=='') then return false end
local pos,arr = 0,{}
-- for each divider found
for st,sp in function() return string.find(str,div,pos,true) end do
arr[#arr + 1] = trim(string.sub(str,pos,st-1)) -- Attach chars left of current divider
pos = sp + 1 -- Jump past current divider
end
arr[#arr + 1] = trim(string.sub(str,pos)) -- Attach chars right of last divider
return arr
end
local getStat = function(itemid, stat)
return data[itemid][stat] or data[0][stat] or nil -- "or nil" will convert "false" to "nil"
end
local statname = {
["acc"] = "accessory",
["autoreuse"] = "autoReuse",
["autoswing"] = "autoReuse",
["auto"] = "autoReuse",
["axe power"] = "axe",
["axepower"] = "axe",
["bait power"] = "bait",
["baitpower"] = "bait",
["body slot"] = "bodySlot",
["bodyslot"] = "bodySlot",
["buff duration"] = "buffTime",
["buff id"] = "buffType",
["buffduration"] = "buffTime",
["buffid"] = "buffType",
["bufftime"] = "buffTime",
["bufftype"] = "buffType",
["carttrack"] = "cartTrack",
["createtile"] = "createTile",
["createwall"] = "createWall",
["critical"] = "crit",
["dd2summon"] = "DD2Summon",
["dmg"] = "damage",
["fishing power"] = "fishingPole",
["fishingpole"] = "fishingPole",
["fishingpower"] = "fishingPole",
["fishing"] = "fishingPole",
["hair dye"] = "hairDye",
["hairdye"] = "hairDye",
["hammer power"] = "hammer",
["hammerpower"] = "hammer",
["head slot"] = "headSlot",
["headslot"] = "headSlot",
["heallife"] = "healLife",
["healmana"] = "healMana",
["holdstyle"] = "holdStyle",
["id"] = "type",
["internal name"] = "internalName",
["internalname"] = "internalName",
["item id"] = "type",
["itemid"] = "type",
["kb"] = "knockBack",
["knockback"] = "knockBack",
["leg slot"] = "legSlot",
["legslot"] = "legSlot",
["liferegen"] = "lifeRegen",
["makenpc"] = "makeNPC",
["maxstack"] = "maxStack",
["mount id"] = "mountType",
["mountid"] = "mountType",
["mounttype"] = "mountType",
["mount"] = "mountType",
["nomelee"] = "noMelee",
["notammo"] = "notAmmo",
["nousegraphic"] = "noUseGraphic",
["nowet"] = "noWet",
["pick power"] = "pick",
["pickpower"] = "pick",
["pickaxe power"] = "pick",
["pickaxepower"] = "pick",
["pickaxe"] = "pick",
["placestyle"] = "placeStyle",
["projectileid"] = "shoot",
["projectile id"] = "shoot",
["questitem"] = "questItem",
["range bonus"] = "tileBoost",
["rangebonus"] = "tileBoost",
["rarity"] = "rare",
["reusedelay"] = "reuseDelay",
["shootspeed"] = "shootSpeed",
["sound"] = "UseSound",
["sounduse"] = "UseSound",
["stack"] = "maxStack",
["stringcolor"] = "stringColor",
["tile id"] = "createTile",
["tile sub id"] = "placeStyle",
["tile subid"] = "placeStyle",
["tilesubid"] = "placeStyle",
["tile wand"] = "tileWand",
["tileboost"] = "tileBoost",
["tileid"] = "createTile",
["tilewand"] = "tileWand",
["tile"] = "createTile",
["tool speed"] = "useTime",
["toolspeed"] = "useTime",
["tooltip"] = "ToolTip",
["uniquestack"] = "uniqueStack",
["use delay"] = "reuseDelay",
["use sound"] = "UseSound",
["use style"] = "useStyle",
["use time"] = "useAnimation",
["useammo"] = "useAmmo",
["useanimation"] = "useAnimation",
["usedelay"] = "reuseDelay",
["usesound"] = "UseSound",
["usestyle"] = "useStyle",
["usetime"] = "useAnimation",
["useturn"] = "useTurn",
["use"] = "useAnimation",
["velocity"] = "shootSpeed",
["wall id"] = "createWall",
["wallid"] = "createWall",
["wall"] = "createWall",
["sell"] = "value",
--non-native stats:
["buy"] = "buyValue",
["price"] = "buyValue",
["buffname"] = "buffName",
["buff name"] = "buffName",
["buff"] = "buffName",
["research"] = "sacrifices"
}
local proc = {}
proc.axe = function(value)
return currentFrame:expandTemplate{ title = 'percent', args = { tostring((value or 0) * 5) .. '%' } }
end
proc.bodySlot = function(value)
return (value == -1) and "" or value
end
proc.createTile = proc.bodySlot
proc.createWall = proc.bodySlot
proc.damage = proc.bodySlot
proc.hairDye = proc.bodySlot
proc.headSlot = proc.bodySlot
proc.legSlot = proc.bodySlot
proc.mountType = proc.bodySlot
proc.tileWand = proc.bodySlot
proc.bait = function(value)
return currentFrame:expandTemplate{ title = 'percent', args = { tostring(value) .. '%' } }
end
proc.fishingPole = proc.bait
proc.hammer = proc.bait
proc.pick = proc.bait
proc.buffTime = function(value)
return currentFrame:expandTemplate{ title = 'duration', args = { (value or 0)/60 } }
end
proc.buffName = function(value, id)
return currentFrame:expandTemplate{ title = 'GetBuffInfo', args = { getStat(id, 'buffType'), 'ename' } }
end
proc.crit = function(value, id)
if getStat(id, 'damage') == -1 then
return currentFrame:expandTemplate{ title = 'percent', args = { tostring(value) .. '%' } } -- no damage value
else
return currentFrame:expandTemplate{ title = 'percent', args = { tostring(value+4) .. '%' } } -- has damage value
end
end
proc.damagetype = function(value, id)
if getStat(id, 'melee') then
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'damagetype_melee' } }
end
if getStat(id, 'ranged') then
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'damagetype_ranged' } }
end
if getStat(id, 'magic') then
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'damagetype_magic' } }
end
if getStat(id, 'summon') then
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'damagetype_summon' } }
end
if getStat(id, 'thrown') then
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'damagetype_thrown' } }
end
end
proc.rare = function(value)
return currentFrame:expandTemplate{ title = 'rare', args = { (value or 0), cate=getArg('cate') or getArg('category') or getArg('cat') or 'no' } }
end
proc.tileBoost= function(value)
if value ~= 0 then
if value > 0 then
value = '+' .. tostring(value)
else
value = tostring(value)
end
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'tileBoost', ['$tiles$'] = value } }
end
end
proc.useAmmo = function(value)
if value == 40 or value == 71 or value == 97 or value == 283 or value == 771 or value == 931 then
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'ammo'..tostring(value) } }
end
return currentFrame:expandTemplate{ title = 'itemNameFromId', args = { value } }
end
proc.UseSound = function(value)
local str = ''
for _,v in pairs(explode(',', value)) do
str = str .. currentFrame:expandTemplate{ title = 'sound', args = { '', v..'.wav' } }
end
return str
end
proc.useStyle = function(value)
if value == 0 then
return
end
if value >= 1 and value <= 5 then
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'usestyle'..tostring(value) } }
end
return value
end
proc.buyValue = function(value, id)
local t=getStat(id, 'shopCustomPrice')
if t then
return currentFrame:expandTemplate{ title = 'dm', args = { t } }
else
return currentFrame:expandTemplate{ title = 'coin', args = { tostring(getStat(id, 'value'))..'cc' } }
end
end
proc.value = function(value)
value = tonumber(value or 0)
if value > 0 then
if value < 5 then
-- items with value<5 have a sell value of 1, not 0 (contrary to regular rounding)
return currentFrame:expandTemplate{ title = 'coin', args = { '1cc' } }
else
return currentFrame:expandTemplate{ title = 'coin', args = { tostring(math.floor(value/5))..'cc' } }
end
else
return currentFrame:expandTemplate{ title = 'l10n', args = { 'GetItemInfo', 'noValue' } }
end
end
---------------------------
local p = {
-- info table for other modules
info = info,
-- info table data for templates
v = function(frame)
return info.version
end,
maxId = function(frame)
return info.IDs.max
end,
isValidId = function(frame)
currentFrame = frame -- cache
if getArg('includeUnused') then
return info.IDs.isValidWithUnused(tonumber(getArg(1)) or 0) and 1 or 0
end
return info.IDs.isValid(tonumber(getArg(1)) or 0) and 1 or 0
end,
-- for other modules: get all stats, return them as a table
getItemInfo = function(itemid)
if not data[itemid] then
itemid = 0
end
local result = {['type'] = itemid}
for k,v in pairs(data[0]) do
result[k] = v
end
for k,v in pairs(data[itemid]) do
result[k] = v
end
return result
end,
-- for templates: get all stats, set them in dplvars
getInfo = function(frame)
currentFrame = frame -- cache
local itemid = tonumber(getArg('id')) or tonumber(getArg(1)) or 0
local prefix = getArg('prefix') or getArg(2) or '_iteminfo_'
if not data[itemid] then
itemid = 0
end
local result = {['type'] = itemid}
for k,v in pairs(data[0]) do
result[k] = v
end
for k,v in pairs(data[itemid]) do
result[k] = v
end
local args = {}
local fields = {}
for k,v in pairs(result) do
args[#args + 1] = prefix .. k
args[#args + 1] = v
fields[#fields + 1] = k
end
args[#args + 1] = prefix .. '_fields'
args[#args + 1] = table.concat(fields, '/')
frame:callParserFunction{ name = '#dplvar:set', args = args }
end,
-- for other modules: get a single stat, return it directly
getItemStat = function(itemid, stat)
if stat == 'count' then
-- this is deprecated, p.info.IDs.max should be used directly
return info.IDs.max
end
if not data[itemid] then
itemid = 0
end
if stat == 'type' then
return itemid
end
return data[itemid][stat] or data[0][stat]
end,
-- for templates: get a single stat, return it directly
getStat = function(frame)
currentFrame = frame -- cache
local itemid = tonumber(getArg('id')) or tonumber(getArg(1)) or 0
local stat = getArg('stat') or getArg(2)
stat = statname[stat] or stat
if not stat then
return
end
if not data[itemid] then
itemid = 0
end
local result
if stat == 'type' then
return itemid
end
if stat == 'count' then
-- this is deprecated, {{iteminfo/maxId}} should be used
return info.IDs.max
end
result = getStat(itemid, stat)
if not getArg('raw') and proc[stat] then
result = proc[stat](result, itemid)
end
if getArg('format') then
result = frame:callParserFunction('formatnum', result)
end
return result
end,
}
--alias
p.getinfo = p.getInfo
p.GetInfo = p.getInfo
p.getstat = p.getStat
p.GetStat = p.getStat
return p