Editing Module:Sandbox/User:Artoire/1

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 3: Line 3:
current_xp = 24,
current_xp = 24,
target_xp = 37,
target_xp = 37,
ingot = 'Coarse Deathstone (Etched)',
ingot = 'Maloic Adathril Ingot',
profession = 'Stonemason', -- 'Bonewright'/'Stonemason'/'Blacksmith'
ore_buy = 'true',
pole_buy = 'none', -- 'none'/'logs'/'pole'
})
})
]]
]]
Line 13: Line 10:
require('Module:Mw.html extension')
require('Module:Mw.html extension')
local xp = require('Module:Experience')
local xp = require('Module:Experience')
local cache = require('Module:Break Isolation').get_module_store('Module:Sandbox/User:Artoire/1')
local currency = require('Module:Currency')
local currency = require('Module:Currency')
local lang = mw.language.getContentLanguage()
local lang = mw.language.getContentLanguage()


local _ingots = {}
local function lookup_ingots()
if cache.ingots then return cache.ingots end
local function lookup_ingots(profession)
local ingots = {
if _ingots[profession] then
return _ingots[profession]
end
_ingots[profession] = {
recipes = {},
recipes = {},
order = {}
order = {}
}
}
cache.ingots = ingots
for _, result in ipairs(mw.smw.ask{
for _, result in ipairs(mw.smw.ask{
'[[Uses facility::Goblin Smelter||Gnome Smelter]]',
({
Blacksmith = '[[Uses facility::Goblin Smelter||Gnome Smelter]]',
Stonemason = '[[Uses facility::T.E.A. Machine]]',
Bonewright = '[[Uses facility::B.R.E.W.S. Vat]]'
})[profession],
['?Recipe JSON'] = '',
['?Recipe JSON'] = '',
mainlabel = '-',
mainlabel = '-',
Line 38: Line 30:
result = mw.text.jsonDecode(result[1])
result = mw.text.jsonDecode(result[1])
local ingot = result.output[1].name
local ingot = result.output[1].name
_ingots[profession].recipes[ingot] = {
ingots.recipes[ingot] = {
xp = result.xp,
xp = result.xp,
facility = result.facility,
facility = result.facility,
Line 45: Line 37:
level = result.level
level = result.level
}
}
table.insert(_ingots[profession].order, ingot)
table.insert(ingots.order, ingot)
end
end
return _ingots[profession]
return ingots
end
end


local function lookup_weapons(profession)
local function lookup_weapons()
if cache.weapons then return cache.weapons end
local ingots = lookup_ingots(profession)
local ingots = lookup_ingots()
local weapons = {}
local weapons = {}
cache.weapons = weapons
for _, result in ipairs(mw.smw.ask{
for _, result in ipairs(mw.smw.ask{
'[[Uses facility::Goblin Forge||Gnome Forge]]',
({
Blacksmith = '[[Uses facility::Goblin Forge||Gnome Forge]]',
Stonemason = '[[Category:Stonemason]][[Category:Pages with recipes]][[Uses facility::!T.E.A. Machine]]',
Bonewright = '[[Category:Bonewright]][[Category:Pages with recipes]][[Uses facility::!B.R.E.W.S. Vat]]'
})[profession],
['?Recipe JSON'] = '',
['?Recipe JSON'] = '',
mainlabel = '-',
mainlabel = '-',
Line 66: Line 56:
local lvl = result['Profession Level A']
local lvl = result['Profession Level A']
result = mw.text.jsonDecode(result[1])
result = mw.text.jsonDecode(result[1])
local ingot
if not result.passive and result.profession == profession then
local ingot
local pole
for _, material in ipairs(result.materials) do
local pole
for _, material in ipairs(result.materials) do
if ingots.recipes[material.name] then
assert(not ingot)
if ingots.recipes[material.name] then
assert(not ingot)
ingot = material
else
ingot = material
assert(not pole)
else
assert(not pole)
pole = material
pole = material
end
end
end
weapons[ingot.name] = weapons[ingot.name] or {}
table.insert(weapons[ingot.name], {
facility = result.facility,
level = result.level,
ingot = ingot,
pole = pole,
name = result.output[1].name,
xp = result.xp
})
end
end
weapons[ingot.name] = weapons[ingot.name] or {}
table.insert(weapons[ingot.name], {
facility = result.facility,
level = result.level,
ingot = ingot,
pole = pole,
name = result.output[1].name,
xp = result.xp
})
end
end
return weapons
return weapons
Line 105: Line 93:
end
end


cache.lookup_price = cache.lookup_price or {}
local _lookup_price_cache = {}
local function lookup_price(item)
local function lookup_price(item)
_lookup_price_cache[item] = _lookup_price_cache[item] or _lookup_price_uncached(item)
cache.lookup_price[item] = cache.lookup_price[item] or _lookup_price_uncached(item)
return _lookup_price_cache[item]
return cache.lookup_price[item]
end
end


Line 131: Line 119:
end
end


cache.lookup_pole = cache.lookup_pole or {}
local _lookup_pole_cache = {}
local function lookup_pole(pole)
local function lookup_pole(pole)
_lookup_pole_cache[pole] = _lookup_pole_cache[pole] or _lookup_pole_uncached(pole)
cache.lookup_pole[pole] = cache.lookup_pole[pole] or _lookup_pole_uncached(pole)
return _lookup_pole_cache[pole]
return cache.lookup_pole[pole]
end
end


Line 148: Line 136:
end
end


cache.lookup_ore = cache.lookup_ore or {}
local _lookup_ore_cache = {}
local function lookup_ore(ore)
local function lookup_ore(ore)
_lookup_ore_cache[ore] = _lookup_ore_cache[ore] or _lookup_ore_uncached(ore)
cache.lookup_ore[ore] = cache.lookup_ore[ore] or _lookup_ore_uncached(ore)
return _lookup_ore_cache[ore]
return cache.lookup_ore[ore]
end
end


Line 165: Line 153:
end
end


cache.lookup_log = cache.lookup_log or {}
local _lookup_log_cache = {}
local function lookup_log(log)
local function lookup_log(log)
_lookup_log_cache[log] = _lookup_log_cache[log] or _lookup_log_uncached(log)
cache.lookup_log[log] = cache.lookup_log[log] or _lookup_log_uncached(log)
return _lookup_log_cache[log]
return cache.lookup_log[log]
end
end


Line 175: Line 163:
local p = {}
local p = {}


function p.ingots(frame)
function p.ingots()
return table.concat(lookup_ingots(frame.args.profession).order, ',')
return table.concat(lookup_ingots().order, ',')
end
end


Line 183: Line 171:
end
end


p.w = lookup_weapons
function p._main(args)
local profession = args.profession


function p._main(args)
local current_xp = tonumber(args.current_xp) or 0
local current_xp = tonumber(args.current_xp) or 0
local current_lvl
local current_lvl
Line 213: Line 201:
buying_poles = not (buying_logs or chopping_logs)
buying_poles = not (buying_logs or chopping_logs)


local ingot = lookup_ingots(profession).recipes[args.ingot]
local ingot = lookup_ingots().recipes[args.ingot]


local result = mw.html.create()
local result = mw.html.create()
Line 236: Line 224:
tbl
tbl
:tag('tr')
:tag('tr')
:th(skillclickpic(({
:th(skillclickpic('Miner')):done()
:th{ 'Ore', attr = { colspan = '3' } }:done()
Blacksmith = 'Miner',
:th{ 'Ingot', attr = { colspan = '2' } }:done()
Stonemason = 'Miner',
Bonewright = 'Gatherer'
})[profession])):done()
:th{ ({
Blacksmith = 'Ore',
Stonemason = 'Rock',
Bonewright = 'Bone'
})[profession], attr = { colspan = '3' } }:done()
:th{ ({
Blacksmith = 'Ingot',
Stonemason = 'Etched',
Bonewright = 'Brewed'
})[profession], attr = { colspan = '2' } }:done()
:IF(chopping_logs)
:IF(chopping_logs)
:th(skillclickpic('Woodcutter')):done()
:th(skillclickpic('Woodcutter')):done()
Line 259: Line 235:
:END()
:END()
:th{ 'Pole', attr = { colspan = '3' } }:done()
:th{ 'Pole', attr = { colspan = '3' } }:done()
:th(skillclickpic(profession)):done()
:th(skillclickpic('Blacksmith')):done()
:th{ 'Product', attr = { colspan = '3' } }:done()
:th{ 'Product', attr = { colspan = '3' } }:done()
:th{ 'Cost', attr = { colspan = '10' } }:done()
:th{ 'Cost', attr = { colspan = '10' } }:done()
:done()
:done()


for _, weapon in ipairs(lookup_weapons(profession)[ingot.ingot]) do
for _, weapon in ipairs(lookup_weapons()[ingot.ingot]) do
if not ingot.xp then
if not ingot.xp then
tbl
tbl
:tr()
:tr()
:td{
:td{
'Missing XP for preparing [[' .. ingot.ingot .. ']]; Please [' .. tostring(mw.uri.fullUrl(ingot.ingot, 'action=edit&section=1')) .. ' edit the page] to add the experience earned (after |exp =)',
'Missing XP for smelting [[' .. ingot.ingot .. ']]; Please [' .. tostring(mw.uri.fullUrl(ingot.ingot, 'action=edit&section=1')) .. ' edit the page] to add the experience earned (after |exp =)',
attr = { colspan = colspan }
attr = { colspan = colspan }
}
}
Line 343: Line 319:


local cost = needed_ores * lookup_price(ingot.ore)[buying_ores and 'buy' or 'sell']
local cost = needed_ores * lookup_price(ingot.ore)[buying_ores and 'buy' or 'sell']
local dbg = { args = args, needed_ores = needed_ores, lookup_ore = lookup_price(ingot.ore) }
if chopping_logs then
if chopping_logs then
if needed_logs then
if needed_logs then
dbg.needed_logs = needed_logs
dbg.lookup_chop_log = lookup_price(pole_info.log)
cost = cost + needed_logs * lookup_price(pole_info.log).sell
cost = cost + needed_logs * lookup_price(pole_info.log).sell
end
end
elseif buying_logs then
elseif buying_logs then
if needed_logs then
if needed_logs then
dbg.needed_logs = needed_logs
dbg.lookup_buy_log = lookup_price(pole_info.log)
cost = cost + needed_logs * lookup_price(pole_info.log).buy
cost = cost + needed_logs * lookup_price(pole_info.log).buy
end
end
else
else
if weapon.pole then
if weapon.pole then
dbg.needed_poles = needed_poles
dbg.lookup_buy_poles = lookup_price(weapon.pole.name)
cost = cost + needed_poles * lookup_price(weapon.pole.name).buy
cost = cost + needed_poles * lookup_price(weapon.pole.name).buy
end
end
end
end


if args.debug then
row:node(currency._cell(cost, { html = 'yes' }))
dbg.cost = cost
row
:td{ mw.text.jsonEncode(dbg), attr = { colspan = "10" } }
else
row:node(currency._cell(cost, { html = 'yes' }))
end
end
end
end
end
Please note that all contributions to Brighter Shores Wiki are considered to be released under the CC BY-NC-SA 3.0 (see Brighter Shores:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)
Preview page with this template

Template used on this page: