Maciej Kasatkin
2012-09-13 80b5f39b63a68ca61113c4266fa56e3368763a33
Added NodeBreaker, Fixes to screwdrivers, added mesecons dep
9 files added
3 files modified
183 ■■■■ changed files
depends.txt 4 ●●●● patch | view | raw | blame | history
node_breaker.lua 69 ●●●●● patch | view | raw | blame | history
screwdriver.lua 41 ●●●●● patch | view | raw | blame | history
sonic_screwdriver.lua 69 ●●●●● patch | view | raw | blame | history
textures/technic_nodebreaker_back.png patch | view | raw | blame | history
textures/technic_nodebreaker_bottom.png patch | view | raw | blame | history
textures/technic_nodebreaker_front_off.png patch | view | raw | blame | history
textures/technic_nodebreaker_front_on.png patch | view | raw | blame | history
textures/technic_nodebreaker_side.png patch | view | raw | blame | history
textures/technic_nodebreaker_side1.png patch | view | raw | blame | history
textures/technic_nodebreaker_side2.png patch | view | raw | blame | history
textures/technic_nodebreaker_top.png patch | view | raw | blame | history
depends.txt
@@ -3,5 +3,5 @@
stairs
flowers
dye
pipeworks
mesecons
node_breaker.lua
New file
@@ -0,0 +1,69 @@
minetest.register_node("technic:nodebreaker_off", {
    description = "Node Breaker",
    tile_images = {"technic_nodebreaker_top.png","technic_nodebreaker_bottom.png","technic_nodebreaker_side2.png","technic_nodebreaker_side1.png",
            "technic_nodebreaker_back.png","technic_nodebreaker_front_off.png"},
    is_ground_content = true,
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2},
    sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("technic:nodebreaker_on", {
    description = "Node Breaker",
    tile_images = {"technic_nodebreaker_top.png","technic_nodebreaker_bottom.png","technic_nodebreaker_side2.png","technic_nodebreaker_side1.png",
            "technic_nodebreaker_back.png","technic_nodebreaker_front_on.png"},
    is_ground_content = true,
    paramtype2 = "facedir",
    groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, mesecon_receptor_off = 1, mesecon_effector_off = 1, mesecon = 2},
    sounds = default.node_sound_stone_defaults(),
})
mesecon:register_on_signal_on(function(pos, node)
    if node.name == "technic:nodebreaker_off" then
        minetest.env:add_node(pos, {name="technic:nodebreaker_on", param2 = node.param2})
        break_node (pos,node.param2)
        nodeupdate(pos)
    end
end)
mesecon:register_on_signal_off(function(pos, node)
    if node.name == "technic:nodebreaker_on" then
        minetest.env:add_node(pos, {name="technic:nodebreaker_off", param2 = node.param2})
        nodeupdate(pos)
    end
end)
mesecon:register_effector("technic:nodebreaker_on", "technic:nodebreaker_off")
function break_node (pos,n_param)
    local pos1={}
    local pos2={}
    pos1.x=pos.x
    pos1.y=pos.y
    pos1.z=pos.z
    pos2.x=pos.x
    pos2.y=pos.y
    pos2.z=pos.z
    --param2 3=x+ 1=x- 2=z+ 0=z-
    if n_param==3 then print ("sru") pos2.x=pos2.x+1 pos1.x=pos1.x-1 end
    if n_param==2 then pos2.z=pos2.z+1 pos1.z=pos1.z-1 end
    if n_param==1 then pos2.x=pos2.x-1 pos1.x=pos1.x+1 end
    if n_param==0 then pos2.z=pos2.z-1 pos1.x=pos1.z+1 end
    local node=minetest.env:get_node(pos2)
    if node.name == "air" then return nil end
    if node.name == "default:lava_source" then return nil end
    if node.name == "default:lava_flowing" then return nil end
    if node.name == "default:water_source" then minetest.env:remove_node(pos2) return nil end
    if node.name == "default:water_flowing" then minetest.env:remove_node(pos2) return nil end
    if node.name == "ignore" then minetest.env:remove_node(pos2) return nil end
    local drops = minetest.get_node_drops(node.name, "default:pick_mese")
        local _, dropped_item
        for _, dropped_item in ipairs(drops) do
            minetest.item_drop(dropped_item, "", pos1)
        end
    minetest.env:remove_node(pos2)
end
screwdriver.lua
@@ -1,34 +1,43 @@
    minetest.register_tool("technic:screwdriver", {
 minetest.register_tool("technic:screwdriver", {
            description = "Screwdriver",
            inventory_image = "technic_screwdriver.png",
            on_use = function(itemstack, user, pointed_thing)
                    -- Must be pointing to facedir applicable node
                    if pointed_thing.type~="node" then return end
            local pos=minetest.get_pointed_thing_position(pointed_thing,above)
            local node=minetest.env:get_node(pos)
            local node_name=node.name
            if node.param2==nil  then return end
                 -- Get ready to set the param2
                    local pos=minetest.get_pointed_thing_position(pointed_thing,above)
                    local node=minetest.env:get_node(pos)
                    local node_name=node.name
                        if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then
                    if node.param2==nil  then return end
                    -- Get ready to set the param2
                    local n = node.param2
                                        if minetest.registered_nodes[node_name].paramtype2 == "facedir" then
                    n = n+1
                    if n == 4 then n = 0 end
                                        else
                                        n = n+1
                                        if n == 6 then n = 0 end
                                        end
                    -- hacky_swap_node, unforunatly.
                    local meta = minetest.env:get_meta(pos)
                    local meta0 = meta:to_table()
                    node.param2 = n
                   minetest.env:set_node(pos,node)
                    minetest.env:set_node(pos,node)
                    meta = minetest.env:get_meta(pos)
                    meta:from_table(meta0)
            local item=itemstack:to_table()
            local item_wear=tonumber((item["wear"]))
            item_wear=item_wear+819
            if item_wear>65535 then itemstack:clear() return itemstack end
            item["wear"]=tostring(item_wear)
            itemstack:replace(item)
            return itemstack
        end,
                    local item=itemstack:to_table()
                    local item_wear=tonumber((item["wear"]))
                    item_wear=item_wear+819
                    if item_wear>65535 then itemstack:clear() return itemstack end
                    item["wear"]=tostring(item_wear)
                    itemstack:replace(item)
                    return itemstack
                        else
                        return itemstack
                        end
            end,
    })
    minetest.register_craft({
            output = "technic:screwdriver",
            recipe = {
sonic_screwdriver.lua
@@ -1,40 +1,49 @@
sonic_screwdriver_max_charge=15000
    minetest.register_tool("technic:sonic_screwdriver", {
       minetest.register_tool("technic:sonic_screwdriver", {
            description = "Sonic Screwdriver",
            inventory_image = "technic_sonic_screwdriver.png",
            on_use = function(itemstack, user, pointed_thing)
                    -- Must be pointing to facedir applicable node
                    if pointed_thing.type~="node" then return end
            local pos=minetest.get_pointed_thing_position(pointed_thing,above)
            local node=minetest.env:get_node(pos)
            local node_name=node.name
            if node.param2==nil  then return end
                    local pos=minetest.get_pointed_thing_position(pointed_thing,above)
                    local node=minetest.env:get_node(pos)
                    local node_name=node.name
                        if minetest.registered_nodes[node_name].paramtype2 == "facedir" or minetest.registered_nodes[node_name].paramtype2 == "wallmounted" then
                    if node.param2==nil  then return end
                    item=itemstack:to_table()
            local charge=tonumber((item["wear"]))
            if charge ==0 then charge =65535 end
            charge=get_RE_item_load(charge,sonic_screwdriver_max_charge)
            if charge-100>0 then
                  minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.5, max_hear_distance = 10,})
               local n = node.param2
               n = n+1
                       if n == 4 then n = 0 end
                        -- hacky_swap_node, unforunatly.
                    local meta = minetest.env:get_meta(pos)
                local meta0 = meta:to_table()
                        node.param2 = n
                minetest.env:set_node(pos,node)
                        meta = minetest.env:get_meta(pos)
                    meta:from_table(meta0)
              charge =charge-100;
              charge=set_RE_item_load(charge,sonic_screwdriver_max_charge)
              item["wear"]=tostring(charge)
              itemstack:replace(item)
              end
            return itemstack
            end,
                        local charge=tonumber((item["wear"]))
                        if charge ==0 then charge =65535 end
                        charge=get_RE_item_load(charge,sonic_screwdriver_max_charge)
                        if charge-100>0 then
                                minetest.sound_play("technic_sonic_screwdriver", {pos = pos, gain = 0.5, max_hear_distance = 10,})
                           local n = node.param2
                           if minetest.registered_nodes[node_name].paramtype2 == "facedir" then
                           n = n+1
                   if n == 4 then n = 0 end
                           else
                           n = n+1
                           if n == 6 then n = 0 end
                           end
                            -- hacky_swap_node, unforunatly.
                            local meta = minetest.env:get_meta(pos)
                            local meta0 = meta:to_table()
                            node.param2 = n
                            minetest.env:set_node(pos,node)
                            meta = minetest.env:get_meta(pos)
                            meta:from_table(meta0)
                          charge =charge-100;
                          charge=set_RE_item_load(charge,sonic_screwdriver_max_charge)
                          item["wear"]=tostring(charge)
                          itemstack:replace(item)
                          end
                        return itemstack
                        else
                        return itemstack
                        end
                        end,
    })
     
    minetest.register_craft({
textures/technic_nodebreaker_back.png
textures/technic_nodebreaker_bottom.png
textures/technic_nodebreaker_front_off.png
textures/technic_nodebreaker_front_on.png
textures/technic_nodebreaker_side.png
textures/technic_nodebreaker_side1.png
textures/technic_nodebreaker_side2.png
textures/technic_nodebreaker_top.png