@@ -1,6 +1,6 @@ local dagger_uses = 16 - +local log = sorcery.logger('tools') minetest.register_tool("sorcery:dagger", { description = "Sacrificial Dagger", inventory_image = "sorcery_dagger.png", tool_capabilities = { @@ -17,8 +17,27 @@ return function(stack,user,pointat) if (not minetest.is_player(pointat)) and selfharm == false then return nil + end + local trough = minetest.find_node_near(user:get_position(), 2.5, 'group:sorcery_trough', true) + if trough then + local cnn = minetest.get_node(trough).name + local ctr = minetest.registered_nodes[cnn]._sorcery + if (not ctr) or not ctr.container then + log.err('item',cnn,'is marked as a trough, but has no _sorcery.container table') + else + ctr = ctr.container + if (ctr.has == 'sorcery:blood' or not ctr.has) and + ((not ctr.charge) or ctr.charge < (ctr.max or 1)) then + trough = { + pos = trough, ctr = ctr; + def = sorcery.register.liquid.db['sorcery:blood'].containers[ctr.empty or cnn] + } + else + trough = nil + end + end end local inv = user:get_inventory() local btl = ItemStack('vessels:glass_bottle') @@ -52,10 +71,17 @@ local wear = 65535 / dagger_uses stack:add_wear(wear) - inv:remove_item('main',btl) - inv:add_item('main',blood) + if not trough then + inv:remove_item('main',btl) + inv:add_item('main',blood) + else + local amt = selfharm and math.random(1,2) or 2 + minetest.set_node(trough.pos, { + name = trough.def.make(def.res*amt+ctr.charge,1):get_name() + }) + end target:punch(user, 1.0, caps, nil) sorcery.vfx.bloodburst(pos)