techage/tools/repairkit.lua
2020-02-17 22:46:29 +01:00

161 lines
5.4 KiB
Lua

--[[
TechAge
=======
Copyright (C) 2017-2019 Joachim Stolberg
GPL v3
See LICENSE.txt for more information
repairkit.lua:
]]--
-- for lazy programmers
local M = minetest.get_meta
local S = techage.S
local Cable1 = techage.ElectricCable
local Cable2 = techage.TA4_Cable
local Pipe2 = techage.LiquidPipe
local networks = techage.networks
local function network_check(start_pos, Cable, player_name)
local ndef = techage.networks.net_def(start_pos, Cable.tube_type)
local outdir = nil
if ndef and ndef.ntype ~= "junc" then
outdir = M(start_pos):get_int("outdir")
end
networks.connection_walk(start_pos, outdir, Cable, function(pos, indir, node)
local distance = vector.distance(start_pos, pos)
if distance < 50 then
techage.mark_position(player_name, pos, "check", "#ff0000", 6)
end
end)
end
local function read_state(itemstack, user, pointed_thing)
local pos = pointed_thing.under
if pos and user then
local time = math.floor(minetest.get_timeofday() * 24 * 6)
local hours = math.floor(time / 6)
local mins = (time % 6) * 10
if mins < 10 then mins = "00" end
minetest.chat_send_player(user:get_player_name(), S("Time")..": "..hours..":"..mins.." ")
local data = minetest.get_biome_data(pos)
if data then
local name = minetest.get_biome_name(data.biome)
minetest.chat_send_player(user:get_player_name(), S("Biome")..": "..name..", "..S("Position temperature")..": "..math.floor(data.heat).." ")
end
local number = techage.get_node_number(pos)
local node = minetest.get_node(pos)
local ndef = minetest.registered_nodes[node.name]
if ndef.networks then
local player_name = user:get_player_name()
if ndef.networks.ele1 then
network_check(pos, Cable1, player_name)
elseif ndef.networks.ele2 then
network_check(pos, Cable2, player_name)
elseif ndef.networks.pipe2 then
network_check(pos, Pipe2, player_name)
end
end
if number then
if ndef and ndef.description then
local info = techage.send_single("0", number, "info", nil)
if info and info ~= "" and info ~= "unsupported" then
info = dump(info)
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": Supported Commands:\n"..info.." ")
end
local state = techage.send_single("0", number, "state", nil)
if state and state ~= "" and state ~= "unsupported" then
state = dump(state)
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": state = "..state.." ")
end
local fuel = techage.send_single("0", number, "fuel", nil)
if fuel and fuel ~= "" and fuel ~= "unsupported" then
fuel = dump(fuel)
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": fuel = "..fuel.." ")
end
local counter = techage.send_single("0", number, "counter", nil)
if counter and counter ~= "" and counter ~= "unsupported" then
counter = dump(counter)
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": counter = "..counter.." ")
end
local load = techage.send_single("0", number, "load", nil)
if load and load ~= "" and load ~= "unsupported" then
load = dump(load)
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": load = "..load.." % ")
end
local size = techage.send_single("0", number, "size", nil)
if size and size ~= "" and size ~= "unsupported" then
size = dump(size)
minetest.chat_send_player(user:get_player_name(), ndef.description.." "..number..": size = "..size.." units ")
end
local owner = M(pos):get_string("owner") or ""
if owner ~= "" then
minetest.chat_send_player(user:get_player_name(), S("Node owner")..": "..owner.." ")
end
minetest.chat_send_player(user:get_player_name(), S("Position")..": "..minetest.pos_to_string(pos).." ")
itemstack:add_wear(65636/200)
return itemstack
end
elseif ndef and ndef.description then
if ndef.techage_info then
local info = ndef.techage_info(pos) or ""
minetest.chat_send_player(user:get_player_name(), ndef.description..":\n"..info)
end
local owner = M(pos):get_string("owner") or ""
if owner ~= "" then
minetest.chat_send_player(user:get_player_name(), S("Node owner")..": "..owner.." ")
end
minetest.chat_send_player(user:get_player_name(), S("Position")..": "..minetest.pos_to_string(pos).." ")
itemstack:add_wear(65636/200)
return itemstack
end
end
end
minetest.register_tool("techage:repairkit", {
description = S("TechAge Repair Kit"),
inventory_image = "techage_repairkit.png",
wield_image = "techage_repairkit.png^[transformR270",
groups = {cracky=1, book=1},
on_use = read_state,
node_placement_prediction = "",
stack_max = 1,
})
minetest.register_tool("techage:end_wrench", {
description = S("TechAge Info Tool (use = read status info)"),
inventory_image = "techage_end_wrench.png",
wield_image = "techage_end_wrench.png",
groups = {cracky=1, book=1},
on_use = read_state,
on_place = read_state,
node_placement_prediction = "",
stack_max = 1,
})
--minetest.register_craft({
-- output = "techage:repairkit",
-- recipe = {
-- {"", "basic_materials:gear_steel", ""},
-- {"", "techage:end_wrench", ""},
-- {"", "basic_materials:oil_extract", ""},
-- },
--})
minetest.register_craft({
output = "techage:end_wrench",
recipe = {
{"", "", "default:steel_ingot"},
{"", "techage:iron_ingot", ""},
{"default:steel_ingot", "", ""},
},
})