removed
This commit is contained in:
parent
a51bc04b6f
commit
d6e525223c
161
robot.lua
161
robot.lua
@ -1,161 +0,0 @@
|
|||||||
--[[
|
|
||||||
|
|
||||||
Hyperloop Mod
|
|
||||||
=============
|
|
||||||
|
|
||||||
Copyright (C) 2017 Joachim Stolberg
|
|
||||||
|
|
||||||
LGPLv2.1+
|
|
||||||
See LICENSE.txt for more information
|
|
||||||
|
|
||||||
History:
|
|
||||||
see init.lua
|
|
||||||
|
|
||||||
]]--
|
|
||||||
|
|
||||||
local function get_inventory_item(inv)
|
|
||||||
local stack = ItemStack("hyperloop:tube0")
|
|
||||||
local taken = inv:remove_item("src", stack)
|
|
||||||
return taken:get_count() == 1
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_inventory(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local stack = ItemStack("hyperloop:tube0 99")
|
|
||||||
return inv:remove_item("src", stack)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function set_inventory(pos, stack)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:add_item("src", stack)
|
|
||||||
return inv
|
|
||||||
end
|
|
||||||
|
|
||||||
local function allow_metadata_inventory(pos, listname, index, stack, player)
|
|
||||||
if minetest.is_protected(pos, player:get_player_name()) then
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
return stack:get_count()
|
|
||||||
end
|
|
||||||
|
|
||||||
local function place_tube(pos, name, facedir, placer)
|
|
||||||
if minetest.is_protected(pos, placer:get_player_name()) then
|
|
||||||
hyperloop.chat(placer, "Area is protected!")
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
node = minetest.get_node(pos)
|
|
||||||
if node.name ~= "air" and node.name ~= "default:water_source" and node.name ~= "default:water_flowing" then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
if hyperloop.scan_neighbours(pos) ~= 1 then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
minetest.add_node(pos, {name=name, param2=facedir})
|
|
||||||
minetest.registered_nodes[name].after_place_node(pos, placer, nil, nil)
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
local function move_robot(pos, inv, facedir, placer)
|
|
||||||
if minetest.get_meta(pos):get_int("stopped") ~= 1 then
|
|
||||||
if get_inventory_item(inv) then
|
|
||||||
-- remve robot and replace through tube
|
|
||||||
local stack = get_inventory(pos)
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
place_tube(pos, "hyperloop:tube1", facedir, placer)
|
|
||||||
-- place robot on the new position
|
|
||||||
pos = hyperloop.new_pos(pos, facedir, "1F", 0)
|
|
||||||
if place_tube(pos, "hyperloop:robot", facedir, placer) then
|
|
||||||
inv = set_inventory(pos, stack)
|
|
||||||
minetest.after(1, move_robot, pos, inv, facedir, placer)
|
|
||||||
else
|
|
||||||
pos = hyperloop.new_pos(pos, facedir, "1B", 0)
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
place_tube(pos, "hyperloop:robot", facedir, placer)
|
|
||||||
stack:add_item("src", ItemStack("hyperloop:tube0"))
|
|
||||||
set_inventory(pos, stack)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local station_formspec =
|
|
||||||
"size[8,8]"..
|
|
||||||
"label[3,0;Hyperloop Tube Robot]" ..
|
|
||||||
"label[1,1.3;Hyperloop Tubes]" ..
|
|
||||||
"list[context;src;3,1;1,1;]"..
|
|
||||||
"button_exit[4,1;1,1;button;Start]"..
|
|
||||||
"list[current_player;main;0,4;8,4;]"..
|
|
||||||
"listring[context;src]"..
|
|
||||||
"listring[current_player;main]"
|
|
||||||
|
|
||||||
minetest.register_node("hyperloop:robot", {
|
|
||||||
description = "Hyperloop Tube Robot",
|
|
||||||
tiles = {
|
|
||||||
-- up, down, right, left, back, front
|
|
||||||
"hyperloop_robot.png",
|
|
||||||
"hyperloop_robot.png",
|
|
||||||
"hyperloop_robot2.png",
|
|
||||||
"hyperloop_robot2.png",
|
|
||||||
"hyperloop_robot2.png",
|
|
||||||
"hyperloop_robot2.png",
|
|
||||||
},
|
|
||||||
|
|
||||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
|
||||||
local res, nodes = hyperloop.scan_neighbours(pos)
|
|
||||||
if res == 1 then -- one neighbor available?
|
|
||||||
local dir = vector.subtract(pos, nodes[1].pos)
|
|
||||||
local facedir = minetest.dir_to_facedir(dir)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_int("facedir", facedir)
|
|
||||||
meta:set_string("formspec", station_formspec)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size('src', 1)
|
|
||||||
else
|
|
||||||
hyperloop.chat(player, "You can't start with a Robot block!")
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
hyperloop.remove_node(pos, node)
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_receive_fields = function(pos, formname, fields, player)
|
|
||||||
if fields.button == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local facedir = meta:get_int("facedir")
|
|
||||||
meta:set_int("stopped", 0)
|
|
||||||
minetest.after(1, move_robot, pos, inv, facedir, player)
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_punch = function(pos, node, puncher, pointed_thing)
|
|
||||||
if minetest.is_protected(pos, puncher:get_player_name()) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_int("stopped", 1)
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_dig = function(pos, node, puncher, pointed_thing)
|
|
||||||
if minetest.is_protected(pos, puncher:get_player_name()) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
meta:set_int("stopped", 1)
|
|
||||||
if inv:is_empty("src") then
|
|
||||||
minetest.node_dig(pos, node, puncher, pointed_thing)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
allow_metadata_inventory_put = allow_metadata_inventory,
|
|
||||||
allow_metadata_inventory_take = allow_metadata_inventory,
|
|
||||||
|
|
||||||
on_rotate = screwdriver.disallow,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=1},
|
|
||||||
is_ground_content = false,
|
|
||||||
})
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB |
Loading…
x
Reference in New Issue
Block a user