394 lines
13 KiB
Lua
394 lines
13 KiB
Lua
--Computer panels and stuff
|
|
|
|
minetest.register_node("warzone:computer_panel", {
|
|
description = "Computer Panel",
|
|
tiles = {"warzone_computer_panel.png"},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_node("warzone:computer_panel_half", {
|
|
description = "Computer Panel",
|
|
tiles = { "warzone_computer_panel_quarter.png",
|
|
"warzone_computer_panel_quarter.png",
|
|
"warzone_computer_panel_half.png",
|
|
"warzone_computer_panel_half.png",
|
|
"warzone_computer_panel_half.png",
|
|
"warzone_computer_panel_half.png",
|
|
|
|
},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_node("warzone:computer_panel_quarter", {
|
|
description = "Computer Panel",
|
|
tiles = {"warzone_computer_panel_quarter.png"},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
stairsplus:register_all("warzone", "computer_panel_quarter" , "warzone:computer_panel_quarter", {
|
|
description = "Computer Panel",
|
|
tiles = {"warzone_computer_panel_quarter.png"},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_node("warzone:computer_panel_tech", {
|
|
description = "Computer Panel With Some Electrical Instalations Inside",
|
|
tiles = {"warzone_computer_panel_tech.png"},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_node("warzone:computer_panel_vent", {
|
|
description = "Computer Panel With Ventilation Aperture",
|
|
tiles = {"warzone_computer_panel_vent.png"},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_node("warzone:computer_circuits", {
|
|
description = "Computer Circuits",
|
|
tiles = {"warzone_computer_circuits.png"},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
stairsplus:register_all("warzone", "computer_circuits" , "warzone:computer_circuits", {
|
|
description = "Computer Circuits",
|
|
tiles = {"warzone_computer_circuits.png"},
|
|
groups = {cracky = 3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
--Animated Computer Screen
|
|
|
|
minetest.register_node("warzone:computer_screen_animated", {
|
|
description = "Animated Computer Screen",
|
|
tiles = {
|
|
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel_vent.png",
|
|
{
|
|
name = "warzone_computer_screen_animated.png",
|
|
animation = {
|
|
type = "vertical_frames",
|
|
aspect_w = 16,
|
|
aspect_h = 16,
|
|
length = 1.5,
|
|
},
|
|
},
|
|
|
|
},
|
|
paramtype2 = "facedir",
|
|
light_source = 4,
|
|
groups = {cracky = 3},
|
|
})
|
|
|
|
---Lamp
|
|
|
|
minetest.register_node("warzone:tech_lamp", {
|
|
tiles = {
|
|
"warzone_lamp_top.png",
|
|
"warzone_lamp_bottom.png",
|
|
"warzone_lamp_side_bottom.png",
|
|
"warzone_lamp_side_bottom.png",
|
|
"warzone_lamp_side_bottom.png",
|
|
"warzone_lamp_side_bottom.png"
|
|
},
|
|
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
groups = {cracky = 3},
|
|
light_source = 8,
|
|
description = "Tech Lamp",
|
|
on_rotate = screwdriver.disallow,
|
|
inventory_image = "warzone_tech_lamp.png",
|
|
wield_image = "warzone_tech_lamp.png",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.25, -0.5, -0.3125, 0.25, -0.4375, 0.3125}, -- NodeBox1
|
|
{-0.3125, -0.5, -0.25, 0.3125, -0.4375, 0.25}, -- NodeBox2
|
|
{-0.1875, -0.5, -0.375, 0.1875, -0.4375, 0.375}, -- NodeBox3
|
|
{-0.375, -0.5, -0.1875, 0.375, -0.4375, 0.1875}, -- NodeBox4
|
|
{-0.3125, -0.4375, -0.1875, 0.3125, -0.375, 0.1875}, -- NodeBox5
|
|
{-0.1875, -0.4375, -0.3125, 0.1875, -0.375, 0.3125}, -- NodeBox6
|
|
{-0.25, -0.4375, -0.25, 0.25, -0.375, 0.25}, -- NodeBox7
|
|
{-0.1875, -0.375, -0.1875, 0.1875, -0.25, 0.1875}, -- NodeBox8
|
|
{-0.25, -0.375, -0.125, 0.25, -0.25, 0.125}, -- NodeBox9
|
|
{-0.125, -0.375, -0.25, 0.125, -0.25, 0.25}, -- NodeBox10
|
|
{-0.125, -0.25, -0.125, 0.125, 0.5, 0.125}, -- high_base
|
|
{-0.0625, -0.25, -0.1875, 0.0625, 0.5, 0.1875}, -- sides1
|
|
{-0.1875, -0.25, -0.0625, 0.1875, 0.5, 0.0625}, -- sides2
|
|
{-0.1875, -0.1875, -0.1875, 0.1875, -0.125, 0.1875}, -- NodeBox14
|
|
{-0.25, -0.1875, -0.125, 0.25, -0.125, 0.125}, -- NodeBox15
|
|
{-0.125, -0.1875, -0.25, 0.125, -0.125, 0.25}, -- NodeBox16
|
|
{-0.1875, -0.0625, -0.1875, 0.1875, 0, 0.1875}, -- NodeBox17
|
|
{-0.25, -0.0625, -0.125, 0.25, 0, 0.125}, -- NodeBox18
|
|
{-0.125, -0.0625, -0.25, 0.125, 0, 0.25}, -- NodeBox19
|
|
{-0.0625, -0.5, -0.0625, 0.0625, 0.5, 0.0625}, -- top_thingy
|
|
}
|
|
},
|
|
|
|
after_place_node = function(pos, placer, itemstack)
|
|
local pos_up = {x = pos.x, y = pos.y+1, z = pos.z}
|
|
local node_up = minetest.get_node(pos_up)
|
|
if node_up and node_up.name == "air" then
|
|
minetest.set_node(pos_up, {name="warzone:tech_lamp_top"})
|
|
else
|
|
minetest.chat_send_player(placer:get_player_name(), "No room to place the lamp!")
|
|
minetest.set_node(pos, {name="air"})
|
|
return itemstack
|
|
end
|
|
end,
|
|
|
|
after_dig_node = function(pos)
|
|
local pos_up = {x = pos.x, y = pos.y+1, z = pos.z}
|
|
local node_up = minetest.get_node(pos_up)
|
|
if node_up and node_up.name == "warzone:tech_lamp_top" then
|
|
minetest.remove_node(pos_up)
|
|
else
|
|
minetest.chat_send_player(placer:get_player_name(), "It seems that your lamp was not complete...")
|
|
end
|
|
end
|
|
})
|
|
|
|
--top
|
|
|
|
|
|
minetest.register_node("warzone:tech_lamp_top", {
|
|
tiles = {
|
|
"warzone_lamp_top.png",
|
|
"warzone_lamp_bottom.png",
|
|
"warzone_lamp_side_top.png",
|
|
"warzone_lamp_side_top.png",
|
|
"warzone_lamp_side_top.png",
|
|
"warzone_lamp_side_top.png"
|
|
},
|
|
drawtype = "nodebox",
|
|
groups = {cracky = 3, not_in_creative_inventory = 1},
|
|
pointable = false,
|
|
diggable = false,
|
|
description = "Tech Lamp",
|
|
light_source = 14,
|
|
paramtype = "light",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.125, -0.5, -0.125, 0.125, -0.0625, 0.125}, -- NodeBox1
|
|
{-0.0625, -0.5, -0.1875, 0.0625, -0.0625, 0.1875}, -- NodeBox2
|
|
{-0.1875, -0.5, -0.0625, 0.1875, -0.0625, 0.0625}, -- NodeBox3
|
|
{-0.0625, -0.5, -0.0625, 0.0625, 0, 0.0625}, -- NodeBox4
|
|
}
|
|
}
|
|
})
|
|
|
|
|
|
|
|
|
|
--[[
|
|
minetest.register_node("warzone:tech_lamp", {
|
|
description = "Tech Lamp",
|
|
tiles = {"warzone_tech_lamp.png"},
|
|
groups = {cracky = 3},
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
light_source = 14,
|
|
visual_scale = 1.25
|
|
})
|
|
]]--
|
|
--Display Glass Stuff
|
|
|
|
minetest.register_node("warzone:display_glass", {
|
|
description = "Empty Display Glass",
|
|
tiles = {"warzone_display_empty.png"},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
use_texture_alpha = true,
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, 0.4375, 0.5, 0.5, 0.5},
|
|
}
|
|
},
|
|
groups = {cracky = 3, oddly_breakable_by_hand = 3},
|
|
sounds = default.node_sound_glass_defaults(),
|
|
})
|
|
|
|
|
|
--Transition panels
|
|
local materials = {
|
|
{"default", "cobble", "Cobblestone"},
|
|
{"default", "stone", "Stone"},
|
|
{"default", "stone_brick", "Stone Brick"},
|
|
{"default", "stone_block", "Stone Block"},
|
|
{"default", "mossycobble", "Mossy Cobblestone"},
|
|
|
|
{"default", "desert_stone", "Desert Stone"},
|
|
{"default", "desert_cobble", "Desert Cobble"},
|
|
{"default", "desert_stone_brick", "Desert Stone Brick"},
|
|
{"default", "desert_stone_block", "Desert Stone Block"},
|
|
|
|
{"default", "sandstone", "Sandstone"},
|
|
{"default", "sandstone_brick", "Sandstone Brick"},
|
|
{"default", "sandstone_block", "Snadstone Block"},
|
|
|
|
{"default", "obsidian", "Obsidian"},
|
|
{"default", "obsidian_brick", "Obsidian Brick"},
|
|
{"default", "obsidian_block", "Obsidian Block"},
|
|
|
|
{"default", "brick", "Brick"},
|
|
|
|
{"warzone", "concrete", "Concrete"},
|
|
{"warzone", "plastcrete", "Plastcrete"},
|
|
{"warzone", "hardcrete", "Hardcrete"},
|
|
|
|
{"warzone", "computer_circuits", "Computer Circuits"},
|
|
}
|
|
|
|
for _, rowc in ipairs(materials) do
|
|
local modname = rowc[1]
|
|
local nodename = rowc[2]
|
|
local node_real_name = rowc[3]
|
|
minetest.register_node("warzone:computer_transition_" .. modname .. "_" .. nodename, {
|
|
description = "Computer Panel Transition to " .. node_real_name,
|
|
tiles = {
|
|
modname .. "_" .. nodename .. ".png^(warzone_computer_panel_transition.png^[transformR270)",
|
|
modname .. "_" .. nodename .. ".png^(warzone_computer_panel_transition.png^[transformR90)",
|
|
modname .. "_" .. nodename .. ".png^(warzone_computer_panel_transition.png^[transformFX)",
|
|
modname .. "_" .. nodename .. ".png^warzone_computer_panel_transition.png",
|
|
"warzone_computer_panel.png",
|
|
modname .. "_" .. nodename .. ".png",
|
|
},
|
|
groups = {cracky = 3},
|
|
paramtype2 = "facedir",
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "warzone:computer_transition_" .. modname .. "_" .. nodename .. " 2",
|
|
recipe = {
|
|
{"", "", ""},
|
|
{"", modname .. ":" .. nodename, "warzone:computer_panel"},
|
|
{"", "", ""}
|
|
}
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
--Locked Computer Storage
|
|
|
|
local function get_locked_computer_storage_formspec(pos)
|
|
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
|
local formspec =
|
|
"size[8,9]" ..
|
|
default.gui_bg ..
|
|
default.gui_bg_img ..
|
|
default.gui_slots ..
|
|
"list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
|
|
"list[current_player;main;0,4.85;8,1;]" ..
|
|
"list[current_player;main;0,6.08;8,3;8]" ..
|
|
"listring[nodemeta:" .. spos .. ";main]" ..
|
|
"listring[current_player;main]" ..
|
|
default.get_hotbar_bg(0,4.85)
|
|
return formspec
|
|
end
|
|
|
|
local function has_locked_storage_privilege(meta, player)
|
|
local name = ""
|
|
if player then
|
|
if minetest.check_player_privs(player, "protection_bypass") then
|
|
return true
|
|
end
|
|
name = player:get_player_name()
|
|
end
|
|
if name ~= meta:get_string("owner") then
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
|
|
minetest.register_node("warzone:computer_storage", {
|
|
description = "Locked Computer Storage",
|
|
tiles = {"warzone_computer_panel.png",
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel.png",
|
|
"warzone_computer_panel_warning_lock.png"},
|
|
paramtype2 = "facedir",
|
|
groups = {cracky=3},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner", placer:get_player_name() or "")
|
|
meta:set_string("infotext", "Locked Computer Storage (owned by " ..
|
|
meta:get_string("owner") .. ")")
|
|
end,
|
|
on_construct = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner", "")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("main", 8 * 4)
|
|
end,
|
|
can_dig = function(pos,player)
|
|
local meta = minetest.get_meta(pos);
|
|
local inv = meta:get_inventory()
|
|
return inv:is_empty("main") and has_locked_storage_privilege(meta, player)
|
|
end,
|
|
allow_metadata_inventory_move = function(pos, from_list, from_index,
|
|
to_list, to_index, count, player)
|
|
local meta = minetest.get_meta(pos)
|
|
if not has_locked_storage_privilege(meta, player) then
|
|
return 0
|
|
end
|
|
return count
|
|
end,
|
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
local meta = minetest.get_meta(pos)
|
|
if not has_locked_storage_privilege(meta, player) then
|
|
return 0
|
|
end
|
|
return stack:get_count()
|
|
end,
|
|
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
|
local meta = minetest.get_meta(pos)
|
|
if not has_locked_storage_privilege(meta, player) then
|
|
return 0
|
|
end
|
|
return stack:get_count()
|
|
end,
|
|
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
minetest.log("action", player:get_player_name() ..
|
|
" moves " .. stack:get_name() ..
|
|
" to locked computer storage at " .. minetest.pos_to_string(pos))
|
|
end,
|
|
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
|
minetest.log("action", player:get_player_name() ..
|
|
" takes " .. stack:get_name() ..
|
|
" from locked computer storage at " .. minetest.pos_to_string(pos))
|
|
end,
|
|
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
if has_locked_storage_privilege(meta, clicker) then
|
|
minetest.show_formspec(
|
|
clicker:get_player_name(),
|
|
"warzone:computer_storage",
|
|
get_locked_computer_storage_formspec(pos)
|
|
)
|
|
end
|
|
return itemstack
|
|
end,
|
|
on_blast = function() end,
|
|
})
|