Модуль:Iteminfo
Этот модуль используется для получения динамических и достоверных характеристик предметов. Он берёт данные напрямую из исходного кода, упрощая отображение характеристик без необходимости их изменения при последующих обновлениях игры.
Он также используется для работы шаблона {{iteminfo}}
. Как правило, в статьях вместо модуля должен использоваться именно этот шаблон. В нём содержатся дополнительные утилиты, такие как форматирование вывода и алиасов параметров.
Код модуля на данный момент синхронизирован с версией Terraria 1.4.4.9(Издания для ПК, консолей и мобильных устройств).
Использование
Все характеристики
{{#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 | Название предмета на английском языке. | |
lname | Переведённое название предмета. | ||
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