Content added Content deleted
No edit summary |
(fix get_info) |
||
(25 intermediate revisions by 2 users not shown) | |||
Line 1:
local weapons_table = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{title='Template:Weapons.json'})
function round(number, decimals)
return math.floor(number * power) / power
end
function percent(number)
return round((number - 1) * 100, 2) .. "%"
end
function choose(var, default)
if var ~= nil then
return var
end
return default
end
function get_info(weapon_name, field, default)
for k, v in pairs(weapons_table) do
if v['name'] ==
return choose(v[field], default)
end
end
return default
end
local p = {}
p.getWeaponImage = function(frame)
local weapon_name = frame.args[1]
return "Veloren_" .. weapon_name .. ".png"
end
p.getWeaponName = function(frame)
local weapon_name = frame.args[1]
return weapon_name
end
p.getWeaponPath = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'path', nil)
return value
end
p.getWeaponQuality = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'quality', 'Common')
return frame:expandTemplate{ title = value }
end
p.getWeaponDesc = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'desc', nil)
return value
end
p.getWeaponDamage = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'power', 0)
return value * 10
end
p.getWeaponRating = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'rating', 0)
return round(value, 2) * 10
end
p.getWeaponCritChance = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'critchance', 0)
return round(value * 100, 2) .. "%"
end
p.getWeaponSpeed = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'speed', 1)
return percent(value)
end
p.getWeaponPoise = function(frame)
local weapon_name = frame.args[1]
local poise = get_info(weapon_name, 'poise', 1)
return percent(poise)
end
p.getWeaponRange = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'range', 1)
return percent(value)
end
p.getWeaponEnergy = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'energy', 1)
return percent(value)
end
p.getWeaponBuff = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'buff', 1)
return percent(value)
end
p.getWeapon = function(frame)
local
for k, v in pairs(weapons_table) do
if v['name'] ==
image =
damage = choose(v['damage'],
critchance = choose(v['critchance'], 0)
poise = choose(v['poise'], 1)
speed = choose(v['speed'], 1)
range = choose(v['range'], 1)
energy = choose(v['energy'], 1)
buff = choose(v['buff'], 1)
end
end
txt = frame:expandTemplate{ title = 'Infobox weapon', args = {
image = image .. '.png',
title = name,
description = desc,
quality = quality,
power = damage*10,
rating = rating,
critchance = critchance*10 .. '%',
poise = percent(poise),
speed = percent(speed),
range = percent(range),
energy = percent(energy),
buff = percent(buff),
} }
return txt
end
|
Latest revision as of 01:49, 15 September 2022
Documentation for this module may be created at Module:Weapon/doc
local weapons_table = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{title='Template:Weapons.json'})
function round(number, decimals)
local power = 10^decimals
return math.floor(number * power) / power
end
function percent(number)
return round((number - 1) * 100, 2) .. "%"
end
function choose(var, default)
if var ~= nil then
return var
end
return default
end
function get_info(weapon_name, field, default)
for k, v in pairs(weapons_table) do
if v['name'] == weapon_name then
return choose(v[field], default)
end
end
return default
end
local p = {}
p.getWeaponImage = function(frame)
local weapon_name = frame.args[1]
return "Veloren_" .. weapon_name .. ".png"
end
p.getWeaponName = function(frame)
local weapon_name = frame.args[1]
return weapon_name
end
p.getWeaponPath = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'path', nil)
return value
end
p.getWeaponQuality = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'quality', 'Common')
return frame:expandTemplate{ title = value }
end
p.getWeaponDesc = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'desc', nil)
return value
end
p.getWeaponDamage = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'power', 0)
return value * 10
end
p.getWeaponRating = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'rating', 0)
return round(value, 2) * 10
end
p.getWeaponCritChance = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'critchance', 0)
return round(value * 100, 2) .. "%"
end
p.getWeaponSpeed = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'speed', 1)
return percent(value)
end
p.getWeaponPoise = function(frame)
local weapon_name = frame.args[1]
local poise = get_info(weapon_name, 'poise', 1)
return percent(poise)
end
p.getWeaponRange = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'range', 1)
return percent(value)
end
p.getWeaponEnergy = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'energy', 1)
return percent(value)
end
p.getWeaponBuff = function(frame)
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'buff', 1)
return percent(value)
end
p.getWeapon = function(frame)
local name = frame.args[1]
for k, v in pairs(weapons_table) do
if v['name'] == name then
image = name
path = choose(v['path'], nil)
quality = choose(v['quality'], 'Common')
desc = choose(v['desc'], nil)
damage = choose(v['damage'], 0)
rating = choose(v['rating'], 0)
critchance = choose(v['critchance'], 0)
poise = choose(v['poise'], 1)
speed = choose(v['speed'], 1)
range = choose(v['range'], 1)
energy = choose(v['energy'], 1)
buff = choose(v['buff'], 1)
end
end
txt = frame:expandTemplate{ title = 'Infobox weapon', args = {
image = image .. '.png',
title = name,
description = desc,
quality = quality,
power = damage*10,
rating = rating,
critchance = critchance*10 .. '%',
poise = percent(poise),
speed = percent(speed),
range = percent(range),
energy = percent(energy),
buff = percent(buff),
} }
return txt
end
return p