Neverwinter Wiki
мНет описания правки
мНет описания правки
 
(не показаны 152 промежуточные версии этого же участника)
Строка 1: Строка 1:
  +
local itemIcon = require('Модуль:Item_icon')
  +
local attributes = mw.loadData('Модуль:Item/Attributes') -- База данных параметров предметов
 
local p = {}
 
local p = {}
  +
-- Боевое умение
 
  +
-- Функция для разделения чисел запятой
local powers = {
 
  +
function commaValue(amount)
['Взрывной уравнитель'] = 'Наносит урон ближайшим врагам.<br><span class="green">Значение:</span> 260',
 
  +
local formatted = amount
['Выброс кристаллов'] = 'Мощный выброс кристаллов, которые наносят урон вашей цели и ближайшим врагам.<br><span class="green">Значение:</span> 650',
 
  +
while true do
['Золотое прикосновение'] = 'Призывает золотого боевого коня, который атакует вашу цель.<br><span class="green">Значение:</span> 1,950',
 
  +
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
['Живительная милость'] = 'Лечение от вашего истового скакуна<br><span class="green">Применяемый эффект:</span> отложенное лечение<br><span class="green">Значение:</span> 5.2<br><span class="green">Длительность:</span> 10 сек.',
 
  +
if (k==0) then
['Туннельное зрение'] = 'Сильная атака по одной цели<br><span class="green">Значение:</span> 780',
 
  +
break
['Огонь шагателя'] = 'Призывает бронированного громадного шагателя, который атакует вашу цель и ближайшим врагам.<br><span class="green">Значение:</span> 650',
 
 
end
['Улитка-цеповка'] = 'Призывает улитку-цеповку, которая разбрасывает врагов.<br><span class="green">Значение:</span> 650',
 
  +
end
['Вулканическая улитка-цеповка'] = 'Призывает улитку-цеповку, которая разбрасывает врагов.<br><span class="green">Значение:</span> 650',
 
  +
return formatted
['Круговой удар топором'] = 'Призывает бронированного топороклюва, который атакует ближайших врагов круговым ударом.<br><span class="green">Значение:</span> 650',
 
  +
end
['Властный топот'] = 'Призывает личного императорского жука, который обрушивается на землю.<br><span class="green">Значение:</span> 520<br><span class="green">Применяемый эффект:</span> оглушение<br><span class="green">Длительность:</span> 2 сек.',
 
['Пронзительный визг'] = 'Призывает грифона в доспехах, который испускает оглушительный визг.<br><span class="green">Применяемый эффект:</span> снижает наносимый целью урона 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Дополнительный эффект:</span> оглушение<br><span class="green">Длительность:</span> 1 сек.<br><span class="green">Дополнительный эффект:</span> повышает ваши интеллект, мудрость и обаяние 1<br><span class="green">Длительность:</span> 10 сек.',
 
['Удар языком гигантской жабы'] = 'Призывает гигантскую жабу, которая бьет по цели языком.<br><span class="green">Значение:</span> 1,950<br><span class="green">Дополнительный эффект:</span> Пожирание прислужников',
 
['Осадный волшебный залп'] = 'Призывает осадного медведя, который стреляет залпом из пушки по выбранному месту раз в секунду в течение следующих 10 секунд<br><span class="green">Значение:</span> 75 за каждый залп',
 
['Тропа огня'] = 'Вы призываете имперского яростного дракона, который устремляется вперед, нанося урон огнем.<br><span class="green">Значение:</span> 650',
 
['Тензерово преобразование'] = 'Вы превращаетесь в истинную боевую машину, становясь сильнее, крепче, быстрее и искуснее в бою.<br><span class="green">Применяемый эффект:</span> повышает ваш урон на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Применяемый эффект:</span> повышает вашу скорость на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Применяемый эффект:</span> повышает ваши силу, ловкость и выносливость на 1<br><span class="green">Длительность:</span> 10 сек.',
 
['Дезинтеграционный луч'] = 'Призывает личного бехолдера-танка, который поражает врагов дезинтеграционными лучами на линии.<br><span class="green">Значение:</span> 650',
 
['Аурэльское снаряжение'] = 'Призывает небесного льва, который отбрасывает ближайших врагов.<br><span class="green">Применяемый эффект:</span> щит составляет 20% от максимума хитов участников группы<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Применяемый эффект:</span> спустя 10 секунд участники группы получают умение Лучистое оружие, которое суммируется до 3 раз в зависимости от оставшегося щита.<br>Лучистое оружие 12 секунд наносит дополнительные 2% урона излучением. Умение не может складываться более 8 раз (независимо от источника).',
 
['Магический водоворот'] = 'Призывает Магический смерч, который несется вперед, нанося урон ближайшим врагам и отбрасывая в сторону врагов, с которыми сталкивается.<br><span class="green">Значение:</span> 217<br><span class="green">Применяемый эффект:</span> столкновение<br><span class="green">Значение:</span> 433',
 
['Зов звезд'] = 'Вы призываете небесного оленя, который обрушивает на врагов звездопад.<br><span class="green">Применяемый эффект:</span> отложенный урон<br><span class="green">Значение:</span> 65<br><span class="green">Длительность:</span> 8 сек.<br><span class="green">Применяемый эффект:</span> замедляет цель на 39%<br><span class="green">Длительность:</span> 8 сек.',
 
['Ад на Фаэруне'] = 'Призывает машину адского пламени, которая обрушивает из своей пасти всепоглощающее пламя.<br><span class="green">Значение:</span> 325<br><span class="green">Применяемый эффект:</span> отложенный урон<br><span class="green">Значение:</span> 72<br><span class="green">Длительность:</span> 5 сек.',
 
['Божественное вмешательство'] = 'Вы призываете небесное существо, которое отбрасывает назад всех врагов поблизости.<br><span class="green">Значение:</span> 650<br><span class="green">Применяемый эффект:</span> дополнительный урон всем дьяволам и демонам<br><span class="green">Значение:</span> 65',
 
['Подкашивание'] = 'Призывает адскую боевую машину, которая несется к ближайшим врагам.<br><span class="green">Значение:</span> 217<br><span class="green">Применяемый эффект:</span> столкновение<br><span class="green">Значение:</span> 433',
 
['Мучительный рывок'] = 'Ваш конь адского пламени оставляет огненный след, поджигая врагов перед вами.<br><span class="green">Применяемый эффект:</span> отложенный урон<br><span class="green">Значение:</span> 173<br><span class="green">Длительность:</span> 6 сек.<br><span class="green">Применяемый эффект:</span> замедляет цели на 39%<br><span class="green">Длительность:</span> 6 сек.',
 
['Свирепый рев'] = 'Призывает личную бронированную панцирницу, которая ревет на врагов впереди.<br><span class="green">Значение:</span> 520<br><span class="green">Применяемый эффект:</span> уменьшает наносимый целью урон на 9.8%<br><span class="green">Значение:</span> 10 сек.',
 
['Рывок отчаяния'] = 'Ваш костяной скакун оставляет шлейф чернейшего дыма, иссушая врагов перед вами.<br><span class="green">Применяемый эффект:</span> отложенный урон<br><span class="green">Значение:</span> 173<br><span class="green">Длительность:</span> 6 сек.<br><span class="green">Применяемый эффект:</span> замедляет цели на 39%<br><span class="green">Длительность:</span> 6 сек.',
 
['Дождь шипов'] = 'Вы призываете рунную мантикору, которая обрушивает на врагов целый поток шипов из своего хвоста.<br><span class="green">Значение:</span> 520<br><span class="green">Применяемый эффект:</span> сбивание с ног<br><span class="green">Длительность:</span> 2 сек.',
 
['Стая летучих мышей'] = 'Призывает стаю летучих мышей, которые освобождают вас от большинства эффектов контроля.<br><span class="green">Применяемый эффект:</span> повышает ваш урон на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Применяемый эффект:</span> замедляет вашу цель на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Применяемый эффект:</span> повышает получаемый целью урон на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br>Применяемый эффект уменьшает наносимый целью урон на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Применяемый эффект:</span> снижает вероятность критического удара цели на 9.8%<br><span class="green">Длительность:</span> 10 сек.',
 
['Крик глубинной вороны'] = 'Вы используете силу глубинной вороны, испуская крик и становясь сильнее в бою.<br><span class="green">Применяемый эффект:</span> повышает ваш урон на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Применяемый эффект:</span> обездвиживает врагов вокруг вас, давая боевое преимущество против них.<br><span class="green">Длительность:</span> 3.9 сек.',
 
['Удар метеора'] = 'Призывает из глубин Авернуса балгуру, который бьет кулаками по земле с невероятной мощью.<br><span class="green">Значение:</span> 520<br><span class="green">Применяемый эффект:</span> оглушение<br><span class="green">Длительность:</span> 2 сек.',
 
['Затаптывание'] = 'Призывает боевого трицератопса, который рвется в бой, отбрасывая врагов.<br><span class="green">Значение:</span> 650',
 
['Вихрь'] = 'Летающий ковер начинает летать вокруг цели, создавая вихрь, который притягивает к его центру ближайших врагов. <br><span class="green">Значение:</span> 650',
 
['Командующий тираннозавр Рекс'] = 'Призывает тираннозавра, который повергает врагов в ужас.<br><span class="green">Применяемый эффект:</span> обездвиживание<br><span class="green">Длительность:</span> 3.9 сек.<br><span class="green">Применяемый эффект:</span> повышает получаемый целью урон на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Дополнительный эффект:</span> пожирание прислужников',
 
['Мифический тираннозавр рекс'] = 'Призывает тираннозавра, который повергает врагов в ужас.<br><span class="green">Применяемый эффект:</span> обездвиживание<br><span class="green">Длительность:</span> 3.9 сек.<br><span class="green">Применяемый эффект:</span> повышает получаемый целью урон на 9.8%<br><span class="green">Длительность:</span> 10 сек.<br><span class="green">Дополнительный эффект:</span> пожирание прислужников',
 
-- Умение экипировки
 
['Быстрая походка'] = '+2% <span class="slate">Скорость движения</span>.<br>+731 <span class="slate">Общий рейтинг</span>',
 
['Быстрая точность'] = '+3,900 <span class="slate">Точность</span><br>+1,462 <span class="slate">Общий рейтинг</span>',
 
['Быстрое действие'] = 'Использование ежедневного умения дает вам 3.9% от общего количества очков действия в течение 10 секунд. Период восстановления: 20 сек. +1,462 <span class="slate">к общему рейтингу</span>',
 
['Господствующая сила'] = '+3,900 <span class="slate">Могущество</span><br>+1,462 <span class="slate">Общий рейтинг</span>',
 
['Интенсивное сопротивление'] = '1,950 <span class="slate">Критическое уклонение</span><br>+731 <span class="slate">Общий рейтинг</span>',
 
['Неприкосновенный'] = '+1,950 <span class="slate">Уклонение</span><br>+731 <span class="slate">Общий рейтинг</span>',
 
['Восстановление'] = 'Использование ежедневного умения дает вам 7.8% от общего количества хитов в течение 10 секунд. Период восстановления: 20 сек.<br>+1,462 <span class="slate">к общему рейтингу</span>.',
 
['Рывок жизни'] = '+1,300 Максимум хитов<br>+0.33 <span class="slate">Скорость движения</span><br>+244 <span class="slate">Общий рейтинг</span>',
 
['Стойкость'] = '+39,000 Максимум хитов<br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Неразрушимый'] = '+3,900 <span class="slate">Оборона</span><br>+1,462 <span class="slate">Общий рейтинг</span>',
 
['Смертельное разложение'] = '+19,500 Максимум хитов<br>+4,875 <span class="slate">Критическое уклонение</span><br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Свирепость'] = 'Когда вы или участник вашей группы получаете удар от противника, вы можете получить эффект Свирепость, на 10 секунд дающий вам дополнительный урон в 0.52%. Эффект может суммироваться до 3 раз. +731 <span class="slate">к общему рейтингу</span>',
 
['Разбиватель доспехов'] = '+3,900 <span class="slate">Проникающий урон</span><br>+1,462 <span class="slate">Общий рейтинг</span>',
 
['Извлечение выгоды'] = 'При использовании артефактного умения период восстановления всех ваших умений уменьшается на 20%. Период восстановления: 20 сек. +3,656 <span class="slate">к общему рейтингу</span>',
 
['Предприимчивость'] = '+650 <span class="slate">Боевое преимущество</span><br>+244 <span class="slate">Общий рейтинг</span>',
 
['Несломленный'] = '+1,950 <span class="slate">Оборона</span><br>+1,950 <span class="slate">Уклонение</span><br>+1,462 <span class="slate">Общий рейтинг</span>',
 
['Руническая аура'] = '+1,950 к <span class="green">могуществу</span> и <span class="green">обороны</span> у вас и игроков вашей группы в радиусе 80 футов. Несколько единиц одной и той же ауры не суммируются.<br>+1,462 <span class="slate">к общему рейтингу</span>',
 
['Плавная езда'] = '+4.9% <span class="slate">Скорость движения</span><br>+4,875 <span class="slate">Оборона</span><br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Освежающий бриз'] = '+9.8% <span class="slate">к восстановлению бодрости</span><br>+3,656 <span class="slate">к общему рейтингу</span>',
 
['Беспощадная эффективность'] = '+3,900 <span class="slate">Вероятность критического удара</span><br>+1,462 <span class="slate">Общий рейтинг</span>',
 
['Всемогущество'] = '+9,750 <span class="slate">Осведомленность</span><br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Провидение'] = 'Когда вы или участник вашей группы получаете удар от противника, есть возможность излечения на 10% от максимума хитов. Тогда же вы получаете умение Лучистое оружие. Эффект возможен раз в 10 секунд.<br>Лучистое оружие, получаемое таким образом, может суммироваться не более 3 раз. Лучистое оружие 12 секунд наносит дополнительные 2% урона излучением. Умение не может суммироваться более 8 раз (независимо от источника).',
 
['Свирепый хищник'] = '+4,875 <span class="slate">Могущество</span><br>+4,875 <span class="slate">Проникающий урон</span><br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Небесное спокойствие'] = '+4,875 <span class="slate">Осведомленность</span><br>+4,875 <span class="slate">Точность</span><br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Божественное постановление'] = '+4.9% <span class="slate">Скорость движения</span><br>+4,875 <span class="slate">Могущество</span><br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Точность'] = '+4,875 <span class="slate">Вероятность критического удара</span><br>+4,875 <span class="slate">Проникающий урон</span><br>+3,656 <span class="slate">Общий рейтинг</span>',
 
['Крепкая точность'] = '+325 <span class="slate">Оборона</span><br>+325 <span class="slate">Точность</span><br>+244 <span class="slate">Общий рейтинг</span>',
 
}
 
   
 
function p.Main( frame )
 
function p.Main( frame )
  +
local powersData = mw.loadData( 'Module:Mount/Powers' )
text = powers[frame.args[1]]
+
text = powersData[frame.args[1]]
 
return text
 
return text
 
end
 
end
   
function p.InsigniaBonus( frame )
+
function p.mountBonuses(frame)
 
local cargo = mw.ext.cargo
 
local cargo = mw.ext.cargo
  +
local tablesI = 'Items'
tables = 'Insignia_bonuses'
 
  +
local fieldsI = 'Items.name, Items.quality, Items.categories, Items.slot1, Items.slot2, Items.slot3, Items.slot4, Items.insignia_bonuses, Items.combat_power_name, Items.equip_power_name,'
fields = '_pageName, name, slot1, slot2, slot3, description, mounts'
 
local args = {
+
local argsI = {
  +
where = 'Items.categories HOLDS "Скакун" AND Items.name = "' .. frame.args[1] .. '"',
--where='',
 
orderBy = '_pageName',
+
orderBy = 'Items._pageName',
 
}
 
}
local result = cargo.query( tables, fields, args )
+
local result = cargo.query( tablesI, fieldsI, argsI )
 
local r = result[1]
 
local r = result[1]
  +
local text = {}
 
  +
local function queryPower(power_type, power_name)
for k, v in ipairs(result) do
 
  +
local tables = 'Powers'
if frame.args[1] == v.slot1 and frame.args[2] == v.slot2 and frame.args[3] == v.slot3 then
 
  +
local fields = 'name, type, power_use, item_ui_equip_power, hit_points, power, accuracy, combat_advantage, critical_strike, critical_severity, critical_avoidance, forte, stamina_regen, deflect, awareness, movement_speed, defense, stat_universal'
text[k] = v._pageName .. ', '
 
  +
local args_power = {
elseif frame.args[1] == v.slot1 and frame.args[2] == v.slot2 and frame.args[3] == 'Универсальная ячейка' then
 
  +
where = 'type = "' .. power_type .. '" AND name = "' .. power_name .. '"'
text[k] = v._pageName .. ', '
 
 
}
elseif frame.args[1] == v.slot1 and frame.args[2] == v.slot3 and frame.args[3] == 'Универсальная ячейка' then
 
  +
return cargo.query(tables, fields, args_power)[1]
text[k] = v._pageName .. ', '
 
elseif frame.args[1] == v.slot2 and frame.args[2] == v.slot1 and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
elseif frame.args[1] == v.slot2 and frame.args[2] == v.slot3 and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
elseif frame.args[3] == v.slot3 and frame.args[2] == v.slot1 and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
elseif frame.args[3] == v.slot2 and frame.args[2] == v.slot1 and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
elseif frame.args[1] == v.slot1 and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
elseif frame.args[1] == v.slot2 and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
elseif frame.args[1] == v.slot3 and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
elseif frame.args[1] == 'Универсальная ячейка' and frame.args[2] == 'Универсальная ячейка' and frame.args[3] == 'Универсальная ячейка' then
 
text[k] = v._pageName .. ', '
 
else
 
text[k] = ''
 
end
 
 
end
 
end
  +
return table.concat(text)
 
 
-- Боевое умение
  +
local r_combat_power_name = queryPower("боевое умение", r['Items.combat_power_name'])
  +
 
-- Умение экипировки
  +
local r_equip_power = queryPower("умение экипировки", r['Items.equip_power_name'])
  +
  +
local formatted_wikitext = {}
  +
for _, attrib in ipairs(attributes) do
  +
if r_equip_power[attrib.fields_cargo] ~= nil then
  +
table.insert(formatted_wikitext, '+' .. commaValue(r_equip_power[attrib.fields_cargo]) .. ' [[' .. attrib.name[1] .. '|<span class="slate">'.. attrib.name[1] .. '</span>]]')
  +
end
  +
end
  +
  +
local text = '<b>Умение экипировки:</b> [[' .. r['Items.equip_power_name'] .. ']]<dl><dd>'.. (#formatted_wikitext == 0 and (r_equip_power['power_use'] ~= '' and r_equip_power['power_use'] or r_equip_power['item_ui_equip_power']) or table.concat(formatted_wikitext, '<br>')) .. '</dd></dl><b>Боевое умение:</b> [[' .. r['Items.combat_power_name'] .. ']]<dl><dd>'.. r_combat_power_name["power_use"] .. '</dd></dl>'
  +
  +
return text .. '<b>Список бонусов знака:</b>' .. frame:expandTemplate{title = 'Список бонусов знака', args = args}
  +
 
end
 
end
  +
  +
function p.mountPowerTable(frame)
  +
local cargo = mw.ext.cargo
  +
local tables = 'Powers'
  +
local fields = 'Powers._pageName, Powers.name, Powers.icon, Powers.item_level, Powers.type, Powers.power_use, item_ui_equip_power, hit_points, power, accuracy, combat_advantage, critical_strike, critical_severity, critical_avoidance, forte, stamina_regen, deflect, awareness, movement_speed, defense, stat_universal'
 
local args = {
  +
where = 'Powers.type = "' .. frame.args[1] .. '"',
  +
orderBy = 'Powers.item_level, Powers._pageName',
  +
}
  +
local result = cargo.query( tables, fields, args )
  +
  +
local tbl = mw.html.create('table')
  +
tbl:addClass('wikitable sortable jquery-tablesorter')
  +
tbl:tag("th"):wikitext("Умение"):done()
  +
tbl:tag("th"):wikitext("Уровень предмета"):done()
  +
tbl:tag("th"):wikitext("Эффект"):done()
  +
tbl:tag("th"):wikitext("Доступно на<br>следующих скакунах"):done()
  +
tbl:done()
  +
 
for _, power in ipairs(result) do
  +
local item_stats = {}
  +
local item_ui_equip_power_value = {
  +
{ name = 'На себе', value = power.item_ui_equip_power },
  +
}
  +
for _, attrib in ipairs(attributes) do
  +
if power[attrib.fields_cargo] ~= nil then
  +
table.insert(item_stats, attrib.name[1])
  +
end
  +
end
  +
tr = tbl:tag("tr"):attr("data-stats", table.concat(item_stats, ", "))
  +
tr:tag("td"):wikitext('[[File:' .. power["Powers.icon"] .. '|32px|link=' .. power["Powers._pageName"] ..']] [[' .. power["Powers._pageName"] .. ']]'):done()
  +
tr:tag("td"):wikitext(power["Powers.item_level"]):done()
  +
  +
if mw.ustring.lower(frame.args[1]) == 'боевое умение' then
  +
tr:tag("td"):wikitext(power["Powers.power_use"]):done()
  +
elseif mw.ustring.lower(frame.args[1]) == 'умение экипировки' then
  +
local formatted_wikitext = {}
  +
for _, attrib in ipairs(attributes) do
  +
if power[attrib.fields_cargo] ~= nil then
  +
table.insert(formatted_wikitext, '+' .. commaValue(power[attrib.fields_cargo]) .. ' [[' .. attrib.name[1] .. '|<span class="slate">'.. attrib.name[1] .. '</span>]]')
  +
end
  +
end
  +
for _, stat in ipairs(item_ui_equip_power_value) do
  +
if stat.value then
  +
table.insert(formatted_wikitext, '<span class="green">'.. stat.name .. ': </span>' .. commaValue(stat.value))
  +
end
  +
end
  +
tr:tag("td"):wikitext(table.concat(formatted_wikitext, '<br>')):done()
  +
end
  +
  +
local tables_items = 'Items'
  +
local fields_items = 'Items._pageName, Items.quality, Items.combat_power_name, Items.equip_power_name'
  +
local args_items = {
  +
where = 'Items.equip_power_name = "' .. power["Powers.name"] .. '" OR Items.combat_power_name = "' .. power["Powers.name"] .. '"',
  +
orderBy = 'Items.name, Items.quality',
  +
}
  +
local result_items = cargo.query( tables_items, fields_items, args_items )
  +
 
local mounts = {}
  +
for _, item in ipairs(result_items) do
  +
table.insert(mounts, itemIcon.Main({args={item["Items._pageName"],""}}))
  +
end
  +
if #result_items > 4 then
  +
tr:tag("td"):tag("div"):attr('style', 'height: 150px; overflow-y: scroll;'):wikitext(table.concat(mounts, "<br>")):done()
 
else
  +
tr:tag("td"):wikitext(table.concat(mounts, "<br>")):done()
  +
end
  +
end
  +
return tbl
  +
end
   
 
return p
 
return p

Текущая версия от 13:09, 20 января 2024

Для документации этого модуля может быть создана страница Модуль:Mount/doc

local itemIcon = require('Модуль:Item_icon')
local attributes = mw.loadData('Модуль:Item/Attributes') -- База данных параметров предметов
local p = {}

-- Функция для разделения чисел запятой
function commaValue(amount)
	local formatted = amount
	while true do  
	  formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
		if (k==0) then
			break
		end
	end
	return formatted
end

function p.Main( frame )
	local powersData = mw.loadData( 'Module:Mount/Powers' )
    text = powersData[frame.args[1]]
    return text
end

function p.mountBonuses(frame)
	local cargo = mw.ext.cargo
	local tablesI = 'Items'
    local fieldsI = 'Items.name, Items.quality, Items.categories, Items.slot1, Items.slot2, Items.slot3, Items.slot4, Items.insignia_bonuses, Items.combat_power_name, Items.equip_power_name,'
    local argsI = {
    	where = 'Items.categories HOLDS "Скакун" AND Items.name = "' .. frame.args[1] .. '"',
    	orderBy = 'Items._pageName',
    }
    local result = cargo.query( tablesI, fieldsI, argsI )
    local r = result[1]

    local function queryPower(power_type, power_name)
        local tables = 'Powers'
        local fields = 'name, type, power_use, item_ui_equip_power, hit_points, power, accuracy, combat_advantage, critical_strike, critical_severity, critical_avoidance, forte, stamina_regen, deflect, awareness, movement_speed, defense, stat_universal'
        local args_power = {
            where = 'type = "' .. power_type .. '" AND name = "' .. power_name .. '"'
        }
        return cargo.query(tables, fields, args_power)[1]
    end
    
    -- Боевое умение
    local r_combat_power_name = queryPower("боевое умение", r['Items.combat_power_name'])
    
    -- Умение экипировки
    local r_equip_power = queryPower("умение экипировки", r['Items.equip_power_name'])

	local formatted_wikitext = {}
	for _, attrib in ipairs(attributes) do
		if r_equip_power[attrib.fields_cargo] ~= nil then
			table.insert(formatted_wikitext, '+' .. commaValue(r_equip_power[attrib.fields_cargo]) .. ' [[' .. attrib.name[1] .. '|<span class="slate">'.. attrib.name[1] .. '</span>]]')
		end
	end

	local text = '<b>Умение экипировки:</b> [[' .. r['Items.equip_power_name'] .. ']]<dl><dd>'.. (#formatted_wikitext == 0 and (r_equip_power['power_use'] ~= '' and r_equip_power['power_use'] or r_equip_power['item_ui_equip_power']) or table.concat(formatted_wikitext, '<br>')) .. '</dd></dl><b>Боевое умение:</b> [[' .. r['Items.combat_power_name'] .. ']]<dl><dd>'.. r_combat_power_name["power_use"] .. '</dd></dl>'

    return text .. '<b>Список бонусов знака:</b>' .. frame:expandTemplate{title = 'Список бонусов знака', args = args}

end

function p.mountPowerTable(frame)
	local cargo = mw.ext.cargo
	local tables = 'Powers'
    local fields = 'Powers._pageName, Powers.name, Powers.icon, Powers.item_level, Powers.type, Powers.power_use, item_ui_equip_power, hit_points, power, accuracy, combat_advantage, critical_strike, critical_severity, critical_avoidance, forte, stamina_regen, deflect, awareness, movement_speed, defense, stat_universal'
    local args = {
        where = 'Powers.type = "' .. frame.args[1] .. '"',
        orderBy = 'Powers.item_level, Powers._pageName',
    }
	local result = cargo.query( tables, fields, args )
	
	local tbl = mw.html.create('table')
	tbl:addClass('wikitable sortable jquery-tablesorter')
		tbl:tag("th"):wikitext("Умение"):done()
		tbl:tag("th"):wikitext("Уровень предмета"):done()	
		tbl:tag("th"):wikitext("Эффект"):done()
		tbl:tag("th"):wikitext("Доступно на<br>следующих скакунах"):done()
	tbl:done()
	
	for _, power in ipairs(result) do
        local item_stats = {}
		local item_ui_equip_power_value = {
			{ name = 'На себе', value = power.item_ui_equip_power },
		}
        for _, attrib in ipairs(attributes) do
            if power[attrib.fields_cargo] ~= nil then
				table.insert(item_stats, attrib.name[1])
			end
		end
        tr = tbl:tag("tr"):attr("data-stats", table.concat(item_stats, ", "))
		tr:tag("td"):wikitext('[[File:' .. power["Powers.icon"] .. '|32px|link=' .. power["Powers._pageName"] ..']] [[' .. power["Powers._pageName"] .. ']]'):done()
		tr:tag("td"):wikitext(power["Powers.item_level"]):done()
		
		if mw.ustring.lower(frame.args[1]) == 'боевое умение' then
			tr:tag("td"):wikitext(power["Powers.power_use"]):done()
		elseif mw.ustring.lower(frame.args[1]) == 'умение экипировки' then
            local formatted_wikitext = {}
			for _, attrib in ipairs(attributes) do
				if power[attrib.fields_cargo] ~= nil then
                    table.insert(formatted_wikitext, '+' .. commaValue(power[attrib.fields_cargo]) .. ' [[' .. attrib.name[1] .. '|<span class="slate">'.. attrib.name[1] .. '</span>]]')
                end
            end
            for _, stat in ipairs(item_ui_equip_power_value) do            
                if stat.value then
					table.insert(formatted_wikitext, '<span class="green">'.. stat.name .. ': </span>' .. commaValue(stat.value))
				end
			end            
            tr:tag("td"):wikitext(table.concat(formatted_wikitext, '<br>')):done() 
		end
		
		local tables_items = 'Items'
	    local fields_items = 'Items._pageName, Items.quality, Items.combat_power_name, Items.equip_power_name'
	    local args_items = {
	    	where = 'Items.equip_power_name = "' .. power["Powers.name"] .. '" OR Items.combat_power_name = "' .. power["Powers.name"] .. '"',
	        orderBy = 'Items.name, Items.quality',
	    }
		local result_items = cargo.query( tables_items, fields_items, args_items )	
		
		local mounts = {}
		for _, item in ipairs(result_items) do
			table.insert(mounts, itemIcon.Main({args={item["Items._pageName"],""}}))	
		end
		if #result_items > 4 then
			tr:tag("td"):tag("div"):attr('style', 'height: 150px; overflow-y: scroll;'):wikitext(table.concat(mounts, "<br>")):done()
		else
			tr:tag("td"):wikitext(table.concat(mounts, "<br>")):done()			
		end
	end
	return tbl
end	

return p