Editing Module:Sandbox/User:Artoire/1
Jump to navigation
Jump to search
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 = ' |
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 |
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.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( |
table.insert(ingots.order, ingot) |
||
end |
end |
||
return |
return ingots |
||
end |
end |
||
local function lookup_weapons( |
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 pole |
|||
for _, material in ipairs(result.materials) do |
|||
local pole |
|||
if ingots.recipes[material.name] then |
|||
assert(not ingot) |
|||
if ingots.recipes[material.name] then |
|||
ingot = material |
|||
else |
|||
ingot = material |
|||
assert(not pole) |
|||
else |
|||
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) |
||
cache.lookup_price[item] = cache.lookup_price[item] or _lookup_price_uncached(item) |
|||
return |
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) |
||
cache.lookup_pole[pole] = cache.lookup_pole[pole] or _lookup_pole_uncached(pole) |
|||
return |
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) |
||
cache.lookup_ore[ore] = cache.lookup_ore[ore] or _lookup_ore_uncached(ore) |
|||
return |
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) |
||
cache.lookup_log[log] = cache.lookup_log[log] or _lookup_log_uncached(log) |
|||
return |
return cache.lookup_log[log] |
||
end |
end |
||
Line 175: | Line 163: | ||
local p = {} |
local p = {} |
||
function p.ingots( |
function p.ingots() |
||
return table.concat(lookup_ingots( |
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 206: | Line 194: | ||
local remaining_xp = target_xp - current_xp |
local remaining_xp = target_xp - current_xp |
||
local buying_ores = args.ore_buy ~= ' |
local buying_ores = args.ore_buy ~= 'no' |
||
local buying_poles = args.pole_buy |
local buying_poles = args.pole_buy |
||
Line 213: | Line 201: | ||
buying_poles = not (buying_logs or chopping_logs) |
buying_poles = not (buying_logs or chopping_logs) |
||
local ingot = lookup_ingots( |
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( |
: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( |
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 |
'Missing XP for smelting [[' .. ingot.ingot .. ']]; Please [' .. tostring(mw.uri.fullUrl(ingot.ingot, 'action=edit§ion=1')) .. ' edit the page] to add the experience earned (after |exp =)', |
||
attr = { colspan = colspan } |
attr = { colspan = colspan } |
||
} |
} |
||
Line 342: | Line 318: | ||
:td{ '[[' .. weapon.name .. ']]', addClass = 'plinkt-link no-border' } |
:td{ '[[' .. weapon.name .. ']]', addClass = 'plinkt-link no-border' } |
||
local j = { needed_ores = needed_ores, lookup_ore = lookup_price(ingot.ore) } |
|||
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'] |
||
if chopping_logs then |
if chopping_logs then |
||
if needed_logs then |
if needed_logs then |
||
j.needed_logs = needed_logs |
|||
j.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 |
||
j.needed_logs = needed_logs |
|||
j.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 |
||
j.needed_poles = needed_poles |
|||
j.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' })) |
|||
j.cost = cost |
|||
row |
|||
:td{ mw.text.jsonEncode(j), attr = { colspan = "10" } } |
|||
else |
|||
row:node(currency._cell(cost, { html = 'yes' })) |
|||
end |
|||
end |
end |
||
end |
end |