Модуль:Npcinfo
Этот модуль используется для вывода основных характеристик существ (NPC). Он должен использоваться только через шаблоны; в статьях используйте шаблон {{getNpcInfo}}.
Он может подсчитать статистику NPC для различных состояний/режимов игры (классического / режима эксперта в простом режиме / режима эксперта в сложном режиме / режима эксперта после победы над Плантерой / режима мастера в простом режиме / режима мастера в сложном режиме / режима мастера после победы над Плантерой).
Код синхронизирован с версией Terraria 1.4.3.1(Издания для ПК, консолей и мобильных устройств).
Использование
{{#invoke:Npcinfo | getInfo | id = ''<ID NPC>'' | prefix = ''<префикс для значений> ('''необязательный''')'' }}
- id
ID существа (NPC). Может быть в диапазоне от -1 до -65 или от 1 до 662. (76/146/408 не используются)
- prefix
Префикс для выводимых значений. По умолчанию — _npcinfo_
. Например, значение по умолчанию для урона — _npcinfo_damage
. Если
будет задан как $prefix
my_
, название значения будет выглядеть как my_damage
.
Характеристики
Вызов этого модуля задаёт число значений DPL, по одному для каждого. Их можно получить через {{#dplvar:<префикс><характеристика>}}
, т.е. {{#dplvar:_npcinfo_defense}}
будет характеристикой для защиты со значением
по умолчанию. Таблица, указанная ниже, содержит самые важные значения характеристик:
$prefix
dplvar (без префикса) |
Содержимое |
---|---|
aiStyle | ID ИИ, присущее NPC. |
banner | ID предмета знамени противника, который выпадает с NPC. |
boss | Внутренний флаг, который определяет, является ли NPC боссом. (<пусто> = false , 1 = true )
|
buffImmune | Список (де-)бафов через запятую, к которому NPC иммунен. |
buffImmuneAll | Иммунен ли NPC ко всем (де-)бафам. (<пусто> = false , 1 = true )
|
buffImmuneAllNotWhips | Иммунен ли NPC ко всем (де-)бафам, кроме дебафов от хлыста. (<пусто> = false , 1 = true )
|
coldDamage | Подвергается ли NPC эффекту бафа «Тепло». (<пусто> = false , 1 = true )
|
friendly | Является ли NPC дружелюбным NPC (т.е. поселенцем или живностью). (<пусто> = false , 1 = true )
|
housingCategory | , если NPC — городской питомец, — наоборот.
|
internalName | Внутреннее название NPC. |
lavaImmune | Получает ли NPC урон от лавы. (<пусто> = false , 1 = true )
|
netID | ID NPC, значение параметра .
|
noGravity | Невосприимчив ли NPC к гравитации. (<пусто> = false , 1 = true )
|
noTileCollide | Может ли NPC свободно перемещаться сквозь тайлы. (<пусто> = false , 1 = true )
|
npcSlots | Количество ячеек NPC, которое сам NPC занимает. Для более подробной информации см. Появление NPC. |
rarity | Уровень редкости NPC для анализатора форм жизни. |
townNPC | Является ли NPC городским NPC. (<пусто> = false , 1 = true )
|
trapImmune | Является ли NPC полностью невосприимчивым ко всем ловушкам. (<пусто> = false , 1 = true )
|
type | «Тип ID» NPC. Для положительных ID NPC, это значение равно . Для отрицательных значений ID NPC, это значение является ID соответствующего варианта режима мастера (т.е. 1 (синий слизень) для -3 (зелёный слизень)).
|
HitSound | Название файла (без расширения файла, но обычно это .wav ) звукового эффекта, который воспроизводится этим NPC при получении урона (или от отражающегося снаряда). Обратите внимание, что прослушиваемый звук — это основной звук; он может быть проигран с изменённым тоном и громкостью в игре.
|
DeathSound | Название файла (без расширения файла, но обычно это .wav ) звукового эффекта, который воспроизводится этим NPC при смерти. Обратите внимание, что прослушиваемый звук — это основной звук; он может быть проигран с изменённым тоном и громкостью в игре.
|
damage damage_e damage_e_hm damage_e_pp damage_m damage_m_hm damage_m_pp |
Значение урона, защиты, сопротивляемости отбрасыванию и максимальному запасу здоровья для классического режима, режима эксперта в простом режиме, режима эксперта в сложном режиме, режиме эксперта после победы над Плантерой, режима мастера в простом режиме, режима мастера в сложном режиме и режима мастера после победы над Плантерой, соответственно. Значения — это изначальные значения в том виде, в каком они даны в исходном коде игры; значение, показываемое в шаблонах {{npc infobox}} на вики — это .
|
defense defense_e defense_e_hm defense_e_pp defense_m defense_m_hm defense_m_pp | |
knockBackResist knockBackResist_e knockBackResist_e_hm knockBackResist_e_pp knockBackResist_m knockBackResist_m_hm knockBackResist_m_pp | |
lifeMax lifeMax_e lifeMax_e_hm lifeMax_e_pp lifeMax_m lifeMax_m_hm lifeMax_m_pp | |
value value_e value_e_hm value_e_pp value_m value_m_hm value_m_pp |
Монеты, выпадаемые в классическом режиме, режиме эксперта в простом режиме, режиме эксперта в сложном режиме и режиме эксперта после победы над Плантерой, соответственно. Считается в медных монетах. |
Помимо этого, также может задаваться переменная со значением
. В ней содержатся названия всех доступных характеристик.
_fields
Примеры
Характеристика{{#dplvar:_<названия значения>}} | Результат{{#invoke:Npcinfo|getInfo|id=<id>|prefix=_}} | ||
---|---|---|---|
Green Slimeid = -3 | Eye of Cthulhuid = 4 | Clothierid = 54 | |
| 1 | 4 | 7 |
| 175 | 0 | 0 |
| 2928 | 0 | 0 |
| |||
| 1 | ||
| 20 | 31 | 31 |
| |||
| |||
| 0 | 0 | 0 |
| |||
| 6 | 15 | 10 |
| 12 | 30 | 10 |
| 86 | 30 | 10 |
| 118 | 30 | 10 |
| 18 | 45 | 10 |
| 129 | 45 | 10 |
| 177 | 45 | 10 |
| NPC_Killed_1 | NPC_Killed_1 | NPC_Killed_1 |
| 0 | 12 | 15 |
| 0 | 12 | 15 |
| 0 | 12 | 15 |
| 0 | 12 | 15 |
| 0 | 12 | 15 |
| 0 | 12 | 15 |
| 0 | 12 | 15 |
| |||
| |||
| 1 | ||
| 17 | 110 | 40 |
| NPC_Hit_1 | NPC_Hit_1 | NPC_Hit_1 |
| 0 | 0 | 0 |
| GreenSlime | EyeofCthulhu | Clothier |
| 1.2 | 0 | 0.5 |
| 1.08 | 0 | 0.5 |
| 1.08 | 0 | 0.5 |
| 1.08 | 0 | 0.5 |
| 0.96 | 0 | 0.5 |
| 0.96 | 0 | 0.5 |
| 0.96 | 0 | 0.5 |
| |||
| 14 | 2800 | 250 |
| 28 | 3640 | 250 |
| 246 | 3640 | 250 |
| 338 | 3640 | 250 |
| 42 | 4641 | 250 |
| 369 | 4641 | 250 |
| 507 | 4641 | 250 |
| Green Slime | Eye of Cthulhu | Clothier |
| |||
| -3 | 4 | 54 |
| 1 | ||
| 1 | ||
| 1 | 5 | 1 |
| |||
| 0 | 0 | 0 |
| 0.9 | 1 | 1 |
| 750 | 22500 | 750 |
| 1 | ||
| |||
| 1 | 4 | 54 |
| 3 | 30000 | 0 |
| 7 | 75000 | 0 |
| 47 | 75000 | 0 |
| 65 | 75000 | 0 |
| 7 | 75000 | 0 |
| 47 | 75000 | 0 |
| 65 | 75000 | 0 |
| 21 | 100 | 18 |
local data = mw.loadData('Module:Npcinfo/data') -- loading data table.
local info = {
version = data['_terrariaversion'],
IDs = { -- min and max are both inclusive
min = -65,
max = 687,
}
}
info.IDs.isValid = function(id)
-- 76/146/408/547 are unused
return id ~= nil and type(id) == 'number' and id >= info.IDs.min and id ~= 0 and id <= info.IDs.max
end
local getArg = function(frame, key)
local value = frame.args[key]
if not value then
return nil
end
value = mw.text.trim(value)
if value == '' then
return nil
else
return value
end
end
local fields = {
'DeathSound',
'HitSound',
'Opacity',
'aiStyle',
'alpha',
'behindTiles',
'banner',
'boss',
'buffImmune',
'buffImmuneAll',
'buffImmuneAllNotWhips',
'catchItem',
'coldDamage',
'damage',
'damage_e',
'damage_e_hm',
'damage_e_pp',
'damage_m',
'damage_m_hm',
'damage_m_pp',
'defense',
'defense_e',
'defense_e_hm',
'defense_e_pp',
'defense_m',
'defense_m_hm',
'defense_m_pp',
'dontCountMe',
'dontTakeDamage',
'friendly',
'height',
'housingCategory',
'internalName',
'knockBackResist',
'knockBackResist_e',
'knockBackResist_e_hm',
'knockBackResist_e_pp',
'knockBackResist_m',
'knockBackResist_m_hm',
'knockBackResist_m_pp',
'lavaImmune',
'lifeMax',
'lifeMax_e',
'lifeMax_e_hm',
'lifeMax_e_pp',
'lifeMax_m',
'lifeMax_m_hm',
'lifeMax_m_pp',
'name',
'netAlways',
'netID',
'noGravity',
'noTileCollide',
'npcSlots',
'rarity',
'scale',
'timeLeft',
'townNPC',
'trapImmune',
'type',
'value',
'value_e',
'value_e_hm',
'value_e_pp',
'value_m',
'value_m_hm',
'value_m_pp',
'width',
}
local statname = {}
local clear = function(frame)
local prefix = getArg(frame, 'prefix') or '_npcinfo_'
local args = {}
for i,v in ipairs(fields) do
table.insert(args, prefix .. v)
table.insert(args, '')
end
frame:callParserFunction{ name = '#dplvar:set', args = args }
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,
minId = function(frame)
return info.IDs.min
end,
isValidId = function(frame)
return info.IDs.isValid(tonumber(getArg(frame, 1)) or 0) and 1 or 0
end,
-- for templates: get all stats, set them in dplvars
getInfo = function(frame)
local npcid = tonumber(getArg(frame, 'id') or 0)
local prefix = getArg(frame, 'prefix') or '_npcinfo_'
local count = tonumber(getArg(frame, 'players') or 1)
if not npcid then
return
end
if not info.IDs.isValid(npcid) then
clear(frame) -- reset all dpl vars
return
end
local result
if count > 1 then
local getinfo = require('Module:Npcinfo/datagen').getInfo
result = getinfo(npcid, count)
local buffImmune = nil
for k, v in pairs(result.buffImmune) do
if v then
if buffImmune then
buffImmune = buffImmune .. ', ' .. k
else
buffImmune = k
end
end
end
result.buffImmune = buffImmune
else
result = {}
for k,v in pairs(data[0]) do
result[k] = v
end
for k,v in pairs(data[npcid]) do
result[k] = v
end
end
local args = {}
for k,v in pairs(result) do
args[#args + 1] = prefix .. k
args[#args + 1] = v
end
args[#args + 1] = prefix .. '_fields'
args[#args + 1] = table.concat(fields, ',')
args[#args + 1] = prefix
args[#args + 1] = 'InvalidNpcinfoStatName'
frame:callParserFunction{ name = '#dplvar:set', args = args }
end,
clear = clear,
-- for templates: get a specific stat of a specific NPC
getStat = function(frame)
local npcid = tonumber(getArg('id')) or tonumber(getArg(1)) or 0
local stat = getArg('stat') or getArg(2)
stat = statname[stat] or stat
if not info.IDs.isValid(npcid) then
return
end
if not stat then
return
end
return data[npcid][stat] or data[0][stat]
end,
-- for other modules: get a specific stat of a specific NPC
stat = function(npcid, stat)
stat = statname[stat] or stat
if not info.IDs.isValid(npcid) then
return
end
if not stat then
return
end
return data[npcid][stat] or data[0][stat]
end,
}
p.getinfo = p.getInfo
p.GetInfo = p.getInfo
p.getstat = p.getStat
p.GetStat = p.getStat
return p