Module:Weapon: Difference between revisions

From Veloren Wiki
Content added Content deleted
No edit summary
(fix get_info)
 
(5 intermediate revisions by the same user not shown)
Line 13: Line 13:


function choose(var, default)
function choose(var, default)
if var == nil then
if var ~= nil then
return default
return var
end
end
return var
return default
end
end


Line 22: Line 22:
for k, v in pairs(weapons_table) do
for k, v in pairs(weapons_table) do
if v['name'] == weapon_name then
if v['name'] == weapon_name then
return v[field]
return choose(v[field], default)
end
end
end
end
Line 36: Line 36:


p.getWeaponImage = function(frame)
p.getWeaponImage = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
return "Veloren_" .. name .. ".png"
return "Veloren_" .. weapon_name .. ".png"
end
end


p.getWeaponName = function(frame)
p.getWeaponName = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
return name
return weapon_name
end
end


p.getWeaponPath = function(frame)
p.getWeaponPath = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'path', nil)
local value = get_info(weapon_name, 'path', nil)
return value
return value
end
end


p.getWeaponQuality = function(frame)
p.getWeaponQuality = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'quality', 'Common')
local value = get_info(weapon_name, 'quality', 'Common')
return frame:expandTemplate{ title = value }
return frame:expandTemplate{ title = value }
end
end


p.getWeaponDesc = function(frame)
p.getWeaponDesc = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'desc', nil)
local value = get_info(weapon_name, 'desc', nil)
return value
return value
end
end
Line 66: Line 66:


p.getWeaponDamage = function(frame)
p.getWeaponDamage = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'power', 0)
local value = get_info(weapon_name, 'power', 0)
return value * 10
return value * 10
end
end


p.getWeaponRating = function(frame)
p.getWeaponRating = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local rating = get_info(name, 'rating', 0)
local value = get_info(weapon_name, 'rating', 0)
return round(rating, 2) * 10
return round(value, 2) * 10
end
end


p.getWeaponCritChance = function(frame)
p.getWeaponCritChance = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'critchance', 0)
local value = get_info(weapon_name, 'critchance', 0)
return round(value * 100, 2) .. "%"
return round(value * 100, 2) .. "%"
end
end
Line 86: Line 86:


p.getWeaponSpeed = function(frame)
p.getWeaponSpeed = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'speed', 1)
local value = get_info(weapon_name, 'speed', 1)
return percent(value)
return percent(value)
end
end


p.getWeaponPoise = function(frame)
p.getWeaponPoise = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local poise = get_info(name, 'poise', 1)
local poise = get_info(weapon_name, 'poise', 1)
return percent(poise)
return percent(poise)
end
end


p.getWeaponRange = function(frame)
p.getWeaponRange = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'range', 1)
local value = get_info(weapon_name, 'range', 1)
return percent(value)
return percent(value)
end
end


p.getWeaponEnergy = function(frame)
p.getWeaponEnergy = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'energy', 1)
local value = get_info(weapon_name, 'energy', 1)
return percent(value)
return percent(value)
end
end


p.getWeaponBuff = function(frame)
p.getWeaponBuff = function(frame)
local name = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(name, 'buff', 1)
local value = get_info(weapon_name, 'buff', 1)
return percent(value)
return percent(value)
end
end
Line 121: Line 121:
p.getWeapon = function(frame)
p.getWeapon = function(frame)
local name = frame.args[1]
local name = frame.args[1]
for k, v in pairs(weapons_table) do
for k, v in pairs(weapons_table) do
if v['name'] == name then
if v['name'] == name then
Line 128: Line 129:
desc = choose(v['desc'], nil)
desc = choose(v['desc'], nil)
damage = choose(v['damage'] * 10, 0)
damage = choose(v['damage'], 0)
rating = choose(v['rating'], 0)
rating = choose(v['rating'], 0)
critchance = choose(v['critchance'], 0)
critchance = choose(v['critchance'], 0)
Line 139: Line 140:
end
end
end
end
txt = frame:expandTemplate{ title = 'Infobox weapon', args = {
txt = frame:expandTemplate{ title = 'Infobox weapon', args = {
image = image .. '.png',
image = image .. '.png',
Line 145: Line 147:
quality = quality,
quality = quality,
power = damage,
power = damage*10,
rating = rating,
rating = rating,
critchance = critchance*10 .. '%',
critchance = critchance*10 .. '%',

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
Cookies help us deliver our services. By using our services, you agree to our use of cookies.