Module:Weapon: Difference between revisions

From Veloren Wiki
Content added Content deleted
No edit summary
(fix get_info)
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
local weapons_table = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{title='Template:Weapons.json'})
local weapons_table = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{title='Template:Weapons.json'})



local p = {}


function round(number, decimals)
function round(number, decimals)
Line 8: Line 8:
end
end


function percent(number)

return round((number - 1) * 100, 2) .. "%"
p.getWeaponImage = function(frame)
local weapon = frame.args[1]
for k, v in pairs(weapons_table) do
if v['name'] == weapon then
image = v['name']
end
end
image = "Veloren_" .. image .. ".png"
return image
end
end


function choose(var, default)

if var ~= nil then
p.getWeaponRating = function(frame)
return var
local weapon = frame.args[1]
for k, v in pairs(weapons_table) do
if v['name'] == weapon then
rating = v['rating']
end
end
end
return round(rating, 2) * 10
return default
end
end


function get_info(weapon_name, field, default)
p.getWeaponPoise = function(frame)
local weapon = frame.args[1]
for k, v in pairs(weapons_table) do
for k, v in pairs(weapons_table) do
if v['name'] == weapon then
if v['name'] == weapon_name then
return choose(v[field], default)
if v['poise'] == nil then v['poise'] = 1 end
poise = (v['poise']-1) * 100
end
end
end
end
return round(poise, 2) .. "%"
return default
end
end


p.getWeaponRange = function(frame)
local weapon = frame.args[1]
for k, v in pairs(weapons_table) do
if v['name'] == weapon then
if v['range'] == nil then v['range'] = 1 end
range = (v['range']-1) * 100
end
end
return round(range, 2) .. "%"
end


p.getWeaponEnergy = function(frame)
local weapon = frame.args[1]
for k, v in pairs(weapons_table) do
if v['name'] == weapon then
if v['energy'] == nil then v['energy'] = 1 end
energy = (v['energy']-1) * 100
end
end
return round(energy, 2) .. "%"
end


p.getWeaponBuff = function(frame)
local weapon = frame.args[1]
for k, v in pairs(weapons_table) do
if v['name'] == weapon then
if v['buff'] == nil then v['buff'] = 1 end
buff = (v['buff']-1) * 100
end
end
return round(buff, 2) .. "%"
end


local p = {}
p.getWeaponCritChance = function(frame)

local weapon = frame.args[1]

for k, v in pairs(weapons_table) do

if v['name'] == weapon then
p.getWeaponImage = function(frame)
if v['critchance'] == nil then v['critchance'] = 0 end
local weapon_name = frame.args[1]
critchance = v['critchance'] * 100
return "Veloren_" .. weapon_name .. ".png"
end
end
return round(critchance, 2) .. "%"
end
end


p.getWeaponName = function(frame)
p.getWeaponName = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
return weapon_name
for k, v in pairs(weapons_table) do
if v['name'] == weapon then
name = v['name']
end
end
return name
end
end


p.getWeaponPath = function(frame)
p.getWeaponPath = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'path', nil)
for k, v in pairs(weapons_table) do
return value
if v['name'] == weapon then
path = v['path']
end
end
return path
end
end


p.getWeaponQuality = function(frame)
p.getWeaponQuality = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'quality', 'Common')
for k, v in pairs(weapons_table) do
return frame:expandTemplate{ title = value }
if v['name'] == weapon then
quality = v['quality']
end
end
return frame:expandTemplate{ title = quality }
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(weapon_name, 'desc', nil)
for k, v in pairs(weapons_table) do
return value
if v['name'] == weapon then
desc = v['desc']
end
end
return desc
end
end




p.getWeaponDamage = function(frame)
p.getWeaponDamage = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'power', 0)
for k, v in pairs(weapons_table) do
return value * 10
if v['name'] == weapon then
end
if v['power'] == nil then v['power'] = 0 end

damage = v['power'] * 10
p.getWeaponRating = function(frame)
end
local weapon_name = frame.args[1]
end
local value = get_info(weapon_name, 'rating', 0)
return damage
return round(value, 2) * 10
end
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)
p.getWeaponSpeed = function(frame)
local weapon = frame.args[1]
local weapon_name = frame.args[1]
local value = get_info(weapon_name, 'speed', 1)
for k, v in pairs(weapons_table) do
return percent(value)
if v['name'] == weapon then
if v['speed'] == nil then v['speed'] = 1 end
speed = (v['speed']-1)*100
end
end
return round(speed, 2) .. "%"
end
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)
p.getWeapon = function(frame)
local weapon = 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'] == weapon then
if v['name'] == name then
image = v['name']
image = name
name = v['name']
path = choose(v['path'], nil)
w_type = v['type']
quality = choose(v['quality'], 'Common')
path = v['path']
desc = choose(v['desc'], nil)
quality = v['quality']
damage = v['damage'] * 10
damage = choose(v['damage'], 0)
rating = v['rating']
rating = choose(v['rating'], 0)
poise = v['poise']
critchance = choose(v['critchance'], 0)
speed = v['speed']
critchance = v['critchance']
desc = v['desc']
range = 1
poise = choose(v['poise'], 1)
energy = 1
speed = choose(v['speed'], 1)
buff = 1
range = choose(v['range'], 1)
energy = choose(v['energy'], 1)
if v['range'] ~= nil then range = v['range'] end
buff = choose(v['buff'], 1)
if v['energy'] ~= nil then energy = v['energy'] end
if v['buff'] ~= nil then buff = v['buff'] end
end
end
end
end
txt = frame:expandTemplate{ title = 'Infobox weapon', args = {
txt = frame:expandTemplate{ title = 'Infobox weapon', args = {
image = image .. '.png',
image = image .. '.png',
title = name,
title = name,
description = desc,
description = desc,
power = damage,
quality = quality,
quality = quality,
power = damage*10,
rating = rating,
rating = rating,
poise = (poise-1)*100 .. '%',
speed = (speed-1)*100 .. '%',
critchance = critchance*10 .. '%',
critchance = critchance*10 .. '%',
range = (range-1)*100 .. '%',
poise = percent(poise),
energy = (energy-1)*100 .. '%',
buff = (buff-1)*100 .. '%',
speed = percent(speed),
range = percent(range),
energy = percent(energy),
buff = percent(buff),
} }
} }
return txt
return txt

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.