@@ -57,8 +57,15 @@ end end return end + + local tmat = sorcery.itemclass.get(tool:get_name(),'material') + local wmat = sorcery.itemclass.get(wkpc:get_name(),'material') + -- obey level restrictions. TODO honor Rend + if (wmat and wmat.data.level or 0) > (tmat and (tmat.data.maxlevel or tmat.data.level) or 0) then + return + end local tech = sorcery.lathe.tooltech(tool) local rec = R[wkpc:get_name()][tech] tech = sorcery.lathe.techs[tech] @@ -165,13 +172,22 @@ on_metadata_inventory_put = sorcery.lathe.update; on_metadata_inventory_take = function(pos, list, idx, stack, user) if list == 'preview' then local l = sorcery.lathe.get(pos,idx,stack:get_count()) - if sorcery.lathe.techs[l.tech].consume then l.tool:take_item(l.cost) elseif sorcery.lathe.techs[l.tech].dmg then - --TODO wear down tool + local mat = sorcery.itemclass.get(l.tool,'material') + local mmat = sorcery.itemclass.get(l.wkpc,'metal') + local dur = 100 + local lfac = 1 + if mat then + local dur = mat.data.durability or dur + lfac = (mmat and mmat.data.level or 1) / + (mat.data.maxlevel or mat.data.level or 1) + end + local ch = 65535 / dur + l.tool:add_wear(4 * ch * l.cost * lfac) end l.wkpc:take_item(l.qty) l.inv:set_stack('tool', 1, l.tool) l.inv:set_stack('workpiece', 1, l.wkpc)