@@ -36,8 +36,13 @@ on_timer = function(pos,elapse) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() if inv:is_empty('charge') then return false end + + local put_in_hopper = sorcery.lib.node.discharger(pos) + local discharge = function(item,idx) + inv:set_stack('charge',put_in_hopper(item)) + end local ley = sorcery.ley.estimate(pos) local charged = false for i=1,inv:get_size('charge') do @@ -53,8 +58,9 @@ local aff = sorcery.data.spells[spell].leytype if aff == ley.aff[1] or aff == ley.aff[2] then repair_per_tick = repair_per_tick * 2 end item:set_wear(math.max(0,item:get_wear() - repair_per_tick * (elapse / 60))) + if item:get_wear() == 0 then item = put_in_hopper(item) end else local e = sorcery.enchant.get(item) if #e.spells == 0 then goto skip end -- item is not magical local mat = sorcery.enchant.getsubj(item) @@ -61,9 +67,9 @@ if e.energy < mat.data.maxenergy then local energy_per_tick = (100 * curve(ley.force)) + ((mat.data.energysource or 0)*2) e.energy = math.min(e.energy + energy_per_tick, mat.data.maxenergy) sorcery.enchant.set(item,e,true) - else goto skip end -- already fully charged + else discharge(item,i) goto skip end -- already fully charged end -- print('repair cycle! repairing item'..item:get_name()..' by',repair_per_tick * (elapse / 60)) inv:set_stack('charge',i,item) charged = true