@@ -303,16 +303,17 @@ }; }) -local regtech = function(id, desc, groups, recipe, qty, replacements) +local regtech = function(id, desc, groups, recipe, qty, replacements, props) minetest.register_craftitem('sorcery:' .. id,{ description = desc; inventory_image = 'sorcery_'..id..'.png'; groups = sorcery.lib.tbl.merge({ sorcery_magitech = 1; sorcery_tech_component = 1; }, groups or {}); + _sorcery = props; }) if recipe then minetest.register_craft { output = string.format('sorcery:%s %u', id, qty or 1); @@ -325,8 +326,38 @@ local regcore = function(core,name) regtech('core_'..core, name .. ' Core', {sorcery_magitech_core = 1}) end +local mprop = function(metal, amt) + local gc, gv + amt = amt or 1 + if math.floor(amt) ~= amt then + if amt < 1 then + gc = math.floor(1 / amt) + else + local n = 0 + for i = 2,10 do + if math.floor(amt * i) == amt * i then + n = i + break + end + end + if n == 0 then error "can't determine metal value for item" end + gc = i + gv = amt * i + end + else + gc = 1 + gv = amt + end + return { material = { + metal = true; id = metal; + data = sorcery.data.metals[metal]; + grindcost = gc; + grindvalue = gv; + value = amt; + }} +end regtech('field_emitter', 'Field Emitter', {metal = 1}) regtech('leyline_stabilizer', 'Leyline Stabilizer', {metal = 1}) regtech('beam_generator', 'Beam Generator', {metal = 1}) @@ -339,14 +370,14 @@ regtech('valve','Valve', {metal = 1}, { {'','default:bronze_ingot',''}; {'basic_materials:plastic_sheet','basic_materials:steel_bar','basic_materials:plastic_sheet'}; {'','default:bronze_ingot',''}; -},3) +},3,nil, mprop('bronze',2*4,1,2*4)) regtech('pipe','Pipe', {metal = 1}, { {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),'',ingot('aluminum')}; -}, 6) +}, 6, nil, mprop('aluminum', 4)) minetest.register_craft { output = 'sorcery:trough'; recipe = {