luxury_decor/living_room.lua

824 lines
38 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

dofile(minetest.get_modpath("luxury_decor") .. "/chairs.lua")
local flowers_list = {
name = {"rose", "tulip_black", "tulip", "geranium"},
desc = {"Rose", "Tulip Black", "Tulip", "Geranium"}
}
minetest.register_node("luxury_decor:glass_vase", {
description = "Glass Vase",
visual_scale = 0.5,
drawtype = "mesh",
mesh = "glass_vase1.b3d",
use_texture_alpha = true,
tiles = {"glass_vase.png"},
inventory_image = "glass_vase_inv.png",
sunlight_propagates = true,
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 1.5},
collision_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2},
--[[{-0.65, -0.3, -1.46, 0.65, 1.4, -1.66},
{-0.65, -0.3, 0.46, 0.65, 1.4, 0.66}]]
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}
}
},
sounds = default.node_sound_glass_defaults(),
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
for _, flower in ipairs(flowers_list.name) do
if "flowers:" .. flower == itemstack:get_name() then
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:glass_vase_with_"..flower})
end
end
end
})
--[[function set_x_or_y_for_pos(player, node, value, y) -- Finish writing!!!
local signs = {
["z"] = "0",
["x"], = "1",
["-z"], = "2",
["-x"] = "3"
}
local new_pos = {x=nil, y=y, z=nil}
for val, sign in pairs(signs) do
if value == sign then
new_pos[tonumber(string.gmatch(val, string.find(val, "-") or "") or val)] = ]]
for ind, f in pairs(flowers_list.name) do
minetest.register_node("luxury_decor:glass_vase_with_"..f, {
description = "Glass Vase With " .. flowers_list.desc[ind],
visual_scale = 0.5,
inventory_image = "glass_vase_inv.png",
mesh = "glass_vase1.b3d",
tiles = {"glass_vase.png^flowers_"..f..".png"},
paramtype = "light",
paramtype2 = "facedir",
drop = {"luxury_decor:glass_vase", "luxury_decor:glass_vase_with_"..f},
groups = {choppy = 1.5, not_in_creative_inventory=1},
use_texture_alpha = true,
drawtype = "mesh",
collision_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2},
--[[{-0.65, -0.3, -1.46, 0.65, 1.4, -1.66},
{-0.65, -0.3, 0.46, 0.65, 1.4, 0.66}]]
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, 0.5, 0.2}
}
},
sounds = default.node_sound_glass_defaults(),
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
for _, flower in ipairs(flowers_list.name) do
if "flowers:" .. flower == itemstack:get_name() then
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:glass_vase_with_"..flower})
itemstack:add_item("luxury_decor:glass_vase")
itemstack:add_item("flowers:" .. string.sub(node.name, 30))
return itemstack
end
end
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:glass_vase"})
itemstack:add_item("flowers:" .. string.sub(node.name, 30))
end
})
end
local sofas_rgb_colors = {
["black"] = "#000000",
["red"] = "#FF0000",
["green"] = "#00FF00",
["white"] = "#FFFFFF",
["blue"] = "#0000FF",
["yellow"] = "#FFFF00",
["magenta"] = "#FF00FF",
["cyan"] = "#00FFFF",
["dark_green"] = "#008000",
["dark_grey"] = "#808080",
["grey"] = "#C0C0C0",
["brown"] = "#A52A2A",
["orange"] = "#FF4500",
["pink"] = "#F08080",
["violet"] = "#4B0082"
}
local sofas_collision_boxes = {
["1"] = {
{-0.34, -0.45, -0.4, 0.34, 0.05, 0.35}, -- Lower box
{-0.34, -0.45, 0.35, 0.34, 0.55, 0.49}, -- Back box
{-0.34, -0.45, -0.4, -0.51, 0.3, 0.49}, -- Right box
{0.34, -0.45, -0.4, 0.51, 0.3, 0.49} -- Left box
},
["2"] = {
{-0.34, -0.45, -0.4, 0.51, 0.05, 0.35},
{-0.34, -0.45, 0.35, 0.51, 0.55, 0.49},
{-0.34, -0.45, -0.4, -0.51, 0.3, 0.49}
},
["3"] = {
{-0.34, -0.45, -0.4, 0.51, 0.05, 0.35},
{-0.34, -0.45, 0.35, 0.51, 0.55, 0.49},
{0.34, -0.45, -0.4, 0.51, 0.3, 0.49}
},
["4"] = {
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
["5"] = {
{-0.34, -0.45, -0.4, 0.51, 0.05, 0.35},
{-0.34, -0.45, 0.35, 0.51, 0.55, 0.49},
}
}
local footstools_collision_boxes = {
["small"] = {{-0.35, -0.5, -0.35, 0.35, 0.05, 0.35}},
["middle"] = {{-0.35, -0.5, 0.23, 0.35, 0.05, -1.23}},
["long"] = {{-0.35, -0.5, 0.1, 0.35, 0.05, -2.1}}
}
function is_same_nums_sign(num1, num2)
if num1 < 0 and num2 < 0 or num1 > 0 and num2 >0 then
return true
else
return false
end
end
--"node1" contains: {name, param1, param2, pointed_thing, pos}
sofas = {}
sofas.define_needed_sofa_part = function (player, sofa, sofa2, replace_sofa1, replace_sofa2, pos, pointed_thing)
local ordered_axises_table = {"-x", "-z", "x", "z"}
pointed_axis = nil
node_vector = nil
local surface_pos = minetest.pointed_thing_to_face_pos(player, pointed_thing)
for axis, val in pairs(pointed_thing.above) do
if pointed_thing.under[axis] ~= val then
if surface_pos[axis] < 0 and surface_pos[axis] < pos[axis] then
pointed_axis = "-" .. tostring(axis)
elseif surface_pos[axis] < 0 and surface_pos[axis] > pos[axis] then
pointed_axis = tostring(axis)
elseif surface_pos[axis] > 0 and surface_pos[axis] < pos[axis] then
pointed_axis = "-" .. tostring(axis)
elseif surface_pos[axis] > 0 and surface_pos[axis] > pos[axis] then
pointed_axis = tostring(axis)
end
end
end
for axis2, vector in pairs(minetest.facedir_to_dir(sofa.param2)) do
if vector ~= 0 then
if vector < 0 then
node_vector = "-" .. tostring(axis2)
elseif vector > 0 then
node_vector = tostring(axis2)
end
end
end
for num, axis in pairs(ordered_axises_table) do
if axis == pointed_axis then
pointed_axis_ind = num
end
if axis == node_vector then
node_vector_ind = num
end
end
if pointed_axis_ind > node_vector_ind then
return {replace_sofa1, replace_sofa2}
elseif pointed_axis_ind < node_vector_ind then
return {replace_sofa2, replace_sofa1}
end
end
sofas.define_needed_sofa_pos = function (player, sofa, pointed_thing)
local surface_pos = minetest.pointed_thing_to_face_pos(player, pointed_thing)
local new_pos = sofa.pos
for axis, val in pairs(pointed_thing.above) do
if val ~= pointed_thing.under[axis] then
if surface_pos[axis] < sofa.pos[axis] then
new_pos[axis] = new_pos[axis] - 1
return new_pos
elseif surface_pos[axis] > sofa.pos[axis] then
new_pos[axis] = new_pos[axis] + 1
return new_pos
end
end
end
end
sofas.connect_sofas = function (player, node1, node2, pos, pointed_thing)
local node_color1 = string.sub(node1.name, 22, -6)
local node_color2 = string.sub(node2, 22, -6)
local surface_pos = minetest.pointed_thing_to_face_pos(player, pointed_thing)
-- Определяет ось, по которой грань была кликнута
for axis, val in pairs(pointed_thing.above) do
if val ~= pointed_thing.under[axis] then
used_pt_axis = {axis=axis, val=surface_pos[axis]}
end
end
for axis, vector in pairs(minetest.facedir_to_dir(node1.param2)) do
if vector ~= 0 then
node_vector = {axis=axis, vector=vector}
end
end
-- Проверяет, цвет подушки у new_name1 такой же, как и у node2
if node_color1 == node_color2 then
-- Проверяет, node2 - полный ли диван, затем находит от позиции кликнутого дивана в радиусе 1 другие диваны
if string.find(node2, "_1_") then
if string.find(node1.name, "_1_") then
if used_pt_axis.axis ~= node_vector.axis then
local node1_table = {name=node1.name, param1=node1.param1, param2=node1.param2}
local needed_sofa_parts = sofas.define_needed_sofa_part(player, node1_table, node2, string.gsub(node1.name, "1", "2"), string.gsub(node2, "1", "3"), pos, pointed_thing)
local needed_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
minetest.remove_node(pos)
minetest.set_node(needed_pos, {name = needed_sofa_parts[2], param1=node1.param1, param2=node1.param2})
minetest.set_node(pos, {name = needed_sofa_parts[1], param1=node1.param1, param2=node1.param2})
else
return
end
elseif string.find(node1.name, "_2_") or string.find(node1.name, "_3_") then
if used_pt_axis.axis ~= node_vector.axis then
local ordered_axles = {"-x", "-z", "x", "z"}
for num, axle in pairs(ordered_axles) do
local axis = string.sub(axle, -1, -1)
local executed1 = false
local executed2 = false
if used_pt_axis.val < pos[axis] and executed1 ~= true and tonumber(axis) == used_pt_axis.axis then
local used_pt_axle = "-" .. tostring(used_pt_axis.axis)
executed1 = true
else
local used_pt_axle = tostring(used_pt_axis.axis)
executed1 = true
end
if node_vector.vector < 0 and executed2 ~= true then
minetest.debug("CCCC")
local node_vect = "-" .. tostring(node_vector.axis)
executed2 = true
else
minetest.debug("DDDD")
local node_vect = tostring(node_vector.axis)
executed2 = true
end
--minetest.debug(used_pt_axle)
--minetest.debug(node_vect)
if axle == used_pt_axle then
minetest.debug("AAA")
local num1 = num
end
if axle == node_vect then
minetest.debug("BBB")
local num2 = num
if num1 < num2 and string.find(node1.name, "_3_") then
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
local rep = string.gsub(node2, "1", "5")
local rep2 = string.gsub(node2, "1", "3")
minetest.set_node(pos, {name=rep[1], param1=node1.param1, param2=node1.param2})
minetest.set_node(needed_sofa_pos, {name=rep2[1], param1=node1.param1, param2=node1.param2})
return true
elseif num1 > num2 and string.find(node1.name, "_2_") then
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
local rep = string.gsub(node2, "1", "5")
local rep2 = string.gsub(node2, "1", "2")
minetest.set_node(pos, {name=rep[1], param1=node1.param1, param2=node1.param2})
minetest.set_node(needed_sofa_pos, {name=rep2[1], param1=node1.param1, param2=node1.param2})
return true
end
end
end
elseif used_pt_axis.axis == node_vector.axis then
if is_same_nums_sign(used_pt_axis.val, node_vector.vector) then
if string.find(node1.name, "_2_") then
local ordered_axles = {"-x", "-z", "x", "z"}
for num, axle in pairs(ordered_axles) do
if used_pt_axis.val < 0 then
local used_pt_axle = "-" .. tostring(used_pt_axis.axis)
else
local used_pt_axle = tostring(used_pt_axis.axis)
end
if used_pt_axle == axle then
if #ordered_axles == num then
local needed_axis = ordered_axles[1]
local needed_axis2 = ordered_axles[2]
else
local needed_axis = ordered_axles[num+1]
if needed_axis == axle then
needed_axis2 = ordered_axles[1]
else
needed_axis2 = ordered_axles[num+2]
end
end
local new_vector = node_vector
if string.find(needed_axis, "-") then
new_vector[tonumber(string.sub(needed_axis, -1))] = -1
else
new_vector[tostring(needed_axis)] = 1
end
if string.find(needed_axis2, "-") then
new_vector[tonumber(string.sub(needed_axis2, -1))] = -1
else
new_vector[tostring(needed_axis)] = 1
end
local rep = string.gsub(node2, "1", "4")
local rep2 = string.gsub(node2, "1", "2")
minetest.set_node(pos, {name=rep[1], param1=node1.param1, param2=minetest.dir_to_facedir(new_vector)})
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
minetest.set_node(needed_sofa_pos, {name=rep2[1], param1=node1.param1, param2=minetest.dir_to_facedir(needed_axis2)})
end
end
elseif string.find(node1.name, "_3_") then
local ordered_axles = {"-x", "-z", "x", "z"}
for num, axle in pairs(ordered_axles) do
if used_pt_axis.val < 0 then
local used_pt_axle = "-" .. tostring(used_pt_axis.axis)
else
local used_pt_axle = tostring(used_pt_axis.axis)
end
if used_pt_axle == axle then
if num == 1 then
local needed_axis = ordered_axles[#ordered_axles]
else
local needed_axis = ordered_axles[num-1]
end
local new_vector = node_vector
if string.find(needed_axis, "-") then
new_vector[tonumber(string.sub(needed_axis, -1))] = -1
else
new_vector[tostring(needed_axis)] = 1
end
local rep = string.gsub(node2, "1", "4")
local rep2 = string.gsub(node2, "1", "3")
minetest.set_node(pos, {name=rep[1], param1=node1.param1, param2=node1.param2})
local needed_sofa_pos = sofas.define_needed_sofa_pos(player, {name=node1.name, param1=node1.param1, param2=node1.param2, pos=pos}, pointed_thing)
minetest.set_node(needed_sofa_pos, {name=rep2[1], param1=node1.param1, param2=minetest.dir_to_facedir(needed_axis)})
end
end
end
end
end
else
return
end
else
return
end
else
return
end
end
--[[local surface_pos = minetest.pointed_thing_to_face_pos(player, pointed_thing)
local nearby_sofas = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y, z=pos.z-1}, {x=pos.x+1, y=pos.y, z=pos.z+1}, {"luxury_decor:simple_sofa_5"})
if nearby_sofas then
for _, sofa_pos in ipairs(nearby_sofas) do
local node = minetest.get_node(sofa_pos)
for axis, vector in pairs(minetest.facedir_to_dir(node.param2)) do
if vector ~= 0 then
local node2_vector = {axis=axis, vector=vector}
end
end
if node.name == "luxury_decor:simple_sofa_5" and node2_vector.axis == node_vector.axis then
for axis, val in pairs(sofa_pos) do
if val ~= used_pt_axis.val then
local p = node1.pos
local sofas = minetest.find_nodes_in_area({x=p.x-1, y=p.y, z=p.z-1}, {x=p.x+1, y=p.y, z=p.z+1},
{"luxury_decor:simple_sofa_2", "luxury_decor:simple_sofa_3", "luxury_decor:simple_sofa_4", "luxury_decor:simple_sofa_5"})
for _, sofa_pos in ipairs(sofas) do
local sofa_itemstr = minetest.get_node(sofa_pos).name
if sofa_itemstr == "luxury_decor:simple_sofa_5" then
for axis, val in pairs(sofa_pos) do
if
if minetest.get_node(sofa_pos).param2 == node1.param2 and node1.pos[axis] ==
if not string.find(node1.name, "_4_") then
for axis, val in pairs(node1.pointed_thing.above) do
if val ~= node1.pointed_thing.under[axis] and axis ~= y then
local new_pos = node1.pos
local player_dir = player:get_look_dir()
if player_dir[axis] < 0 then
new_pos[axis] = new_pos[axis] + 1
minetest.set_node(new_pos, {name=node2, param1=node1.param1, param2=node2.param2})
elseif player_dir[axis] > 0 then
new_pos[axis] = new_pos[axis] - 1
minetest.set_node(new_pos, {name=node2, param1=node1.param1, param2=node2.param2})
end
return true
end
end
else
local node_dir = node1.param2
local directed_axis
for axis, val in pairs(node_dir) do
if val ~= 0 and axis ~= y then
directed_axis = {axis, val}
elseif axis == y then
return
end
end
for axis, val in pairs(node1.pointed_thing.above) do
if val ~= node1.pointed_thing.under[axis] and axis ~= y then
local new_pos = node1.pos
local player_dir = player:get_look_dir()
if player_dir[axis] < 0 then
new_pos[axis] = new_pos[axis] + 1
if axis == directed_axis.axis and directed_axis.val ~= player_dir[axis] then
minetest.set_node(new_pos, {name=node2, param1=node1.param1, param2=node2.param2})
elseif axis ~= directed_axis.axis and directed_axis.val ~= player_dir[axis] then
local new_dir = minetest.facedir_to_dir(node1.param2)
new_dir[axis] = 1
minetest.set_node(new_pos, {name=node2, param1=node1.param1, param2= minetest.dir_to_facedir(new_dir)})
end
elseif player_dir[axis] > 0 then
new_pos[axis] = new_pos[axis] - 1
if axis == directed_axis.axis and directed_axis.val ~= player_dir[axis] then
minetest.set_node(new_pos, {name=node2, param1=node1.param1, param2=node2.param2})
elseif axis ~= directed_axis.axis and directed_axis.val ~= player_dir[axis] then
local new_dir = minetest.facedir_to_dir(node1.param2)
new_dir[axis] = -1
minetest.set_node(new_pos, {name=node2, param1=node1.param1, param2= minetest.dir_to_facedir(new_dir)})
end
end
return true
end
end
end
else
return
end
else
return
end
end
local dir = player:get_look_dir()
local new_pos = node1.pos
for axis, num in pairs(dir) do
if num < 0 then
new_pos[axis] = node1.pos[axis] - 1
minetest.set_node(new_pos, {name=node2, param1 = node1.param1, param2 = node2.param2})
return true
elseif num > 0 then
new_pos[axis] = node1.pos[axis] + 1
minetest.set_node(new_pos, {name=node2, param1 = node1.param1, param2 = node2.param2})
return true
end
end
else
return
end
end
if string.find(name1, "_4") then
local dir = node1.param2
if dir.x ~= 0 then
minetest.set_node(node2, {x=node1.pos.x, y=pos})]]
for color, rgb_color in pairs(sofas_rgb_colors) do
for _, pillow_color in ipairs({"red", "green" , "blue", "yellow", "violet"}) do
minetest.register_node("luxury_decor:simple_" .. color .. "_armchair_with_" .. pillow_color .. "_pillow", {
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " Armchair With " .. string.upper(pillow_color) .. " Pillow" ),
visual_scale = 0.5,
mesh = "simple_armchair.obj",
tiles = {"simple_armchair.png^(simple_armchair_2_1.png^[colorize:" .. rgb_color .. "^simple_armchair_2.png)^(simple_armchair_3.png^[colorize:" .. pillow_color .. ")"},
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2.5, },
drawtype = "mesh",
collision_box = {
type = "fixed",
fixed = {
{-0.31, -0.5, -0.45, 0.33, 0.15, 0.5},
{-0.5, -0.5, -0.45, -0.31, 0.36, 0.3},
{0.53, -0.5, -0.45, 0.33, 0.36, 0.3},
{-0.42, 0.15, 0.3, 0.44, 0.9, 0.5}
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.31, -0.5, -0.45, 0.33, 0.15, 0.5},
{-0.5, -0.5, -0.45, -0.31, 0.36, 0.3},
{0.53, -0.5, -0.45, 0.33, 0.36, 0.3},
{-0.42, 0.15, 0.3, 0.44, 0.9, 0.5}
}
},
sounds = default.node_sound_wood_defaults(),
on_construct = function (pos)
local meta = minetest.get_meta(pos)
meta:set_string("seats_range", minetest.serialize({[1] = {is_busy={bool=false, player=nil}, pos = {x = pos.x, y = pos.y+0.2, z = pos.z}}}))
end,
after_dig_node = function (pos, oldnode, oldmetadata, digger)
local seats = minetest.deserialize(oldmetadata.fields.seats_range)
if seats ~= nil then
for seat_num, seat_data in pairs(seats) do
if seat_data.is_busy.player ~= nil then
local player = minetest.get_player_by_name(seat_data.is_busy.player)
chairs.standup_player(player, pos, seats)
end
end
end
end,
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
if string.find(itemstack:get_name(), "dye:") then
local get_player_contr = clicker:get_player_control()
if get_player_contr.sneak then
for _, p_color in ipairs({"red", "green", "blue", "yellow", "violet"}) do
if itemstack:get_name() == "dye:" .. p_color then
itemstack:take_item()
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_" .. sofa_count .. "_sofa_with_" .. p_color .. "_pillow"})
end
end
else
for color2, rgb_code in pairs(sofas_rgb_colors) do
if "dye:" .. color2 == itemstack:get_name() then
itemstack:take_item()
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:simple_" .. color2 .. "_" .. sofa_count .. "_sofa_with_" .. pillow_color .. "_pillow"})
end
end
end
else
local meta = clicker:get_meta()
local is_attached = minetest.deserialize(meta:get_string("is_attached"))
if is_attached == nil or is_attached == "" then
chairs.sit_player(clicker, node, pos, {{{x=81, y=81}, frame_speed=15, frame_blend=0}})
elseif is_attached ~= nil or is_attached ~= "" then
chairs.standup_player(clicker, pos)
end
end
return itemstack
end
})
end
end
for ind, sofa_count in pairs({"1", "2", "3", "4", "5"}) do
local not_in_cinv = 0
for color, rgb_color in pairs(sofas_rgb_colors) do
--for _, pillow_color in ipairs({"red", "green" , "blue", "yellow", "violet"}) do
if sofa_count ~= "1" then
not_in_cinv = 1
end
minetest.register_node("luxury_decor:simple_".. sofa_count .. "_" .. color .. "_sofa", {
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " Sofa"),
visual_scale = 0.5,
mesh = "simple_sofa_" .. sofa_count .. ".obj",
tiles = {"simple_sofa.png^(simple_sofa_2.png^[colorize:" .. rgb_color.. ")"},
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2.5, not_in_creative_inventory = not_in_cinv},
drawtype = "mesh",
collision_box = {
type = "fixed",
fixed = sofas_collision_boxes[sofa_count]
},
selection_box = {
type = "fixed",
fixed = sofas_collision_boxes[sofa_count]
},
sounds = default.node_sound_wood_defaults(),
on_construct = function (pos)
local meta = minetest.get_meta(pos)
meta:set_string("seats_range", minetest.serialize({[1] = {is_busy={bool=false, player=nil}, pos = {x = pos.x, y = pos.y+0.2, z = pos.z}}}))
end,
after_dig_node = function (pos, oldnode, oldmetadata, digger)
local seats = minetest.deserialize(oldmetadata.fields.seats_range)
if seats ~= nil then
for seat_num, seat_data in pairs(seats) do
if seat_data.is_busy.player ~= nil then
local player = minetest.get_player_by_name(seat_data.is_busy.player)
chairs.standup_player(player, pos, seats)
end
end
end
end,
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
if string.find(itemstack:get_name(), "dye:") then
local get_player_contr = clicker:get_player_control()
--[[if get_player_contr.sneak then
for _, p_color in ipairs({"red", "green", "blue", "yellow", "violet"}) do
if itemstack:get_name() == "dye:" .. p_color then
itemstack:take_item()
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:simple_" .. sofa_count .. "_" .. color .. "_sofa_with_" .. p_color .. "_pillow"})
end
end]]
for color2, rgb_code in pairs(sofas_rgb_colors) do
if "dye:" .. color2 == itemstack:get_name() then
itemstack:take_item()
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:simple_" .. sofa_count .. "_" .. color2 .. "_sofa"})
end
end
elseif string.find(itemstack:get_name(), "luxury_decor:simple_") and string.find(itemstack:get_name(), "_sofa") then
sofas.connect_sofas(clicker, {name=node.name, param1=node.param1, param2=node.param2}, itemstack:get_name(), pos, pointed_thing)
else
local meta = clicker:get_meta()
local is_attached = minetest.deserialize(meta:get_string("is_attached"))
if is_attached == nil or is_attached == "" then
chairs.sit_player(clicker, node, pos, {{{x=81, y=81}, frame_speed=15, frame_blend=0}})
elseif is_attached ~= nil or is_attached ~= "" then
chairs.standup_player(clicker, pos)
end
end
end
})
end
end
for ind, footstool_type in pairs({"small", "middle", "long"}) do
for color, rgb_code in pairs(sofas_rgb_colors) do
minetest.register_node("luxury_decor:simple_" .. color .. "_" .. footstool_type .. "_footstool", {
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " " .. string.upper(footstool_type) .. " Footstool"),
visual_scale = 0.5,
mesh = "simple_"..footstool_type.."_footstool.b3d",
tiles = {"simple_sofa.png^(simple_sofa_2.png^[colorize:" .. rgb_code .. ")"},
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2},
drawtype = "mesh",
collision_box = {
type = "fixed",
fixed = footstools_collision_boxes[footstool_type]
},
selection_box = {
type = "fixed",
fixed = footstools_collision_boxes[footstool_type]
},
sounds = default.node_sound_wood_defaults(),
on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
if string.find(itemstack:get_name(), "dye:") then
local get_player_contr = clicker:get_player_control()
for color2, rgb_code in pairs(sofas_rgb_colors) do
if "dye:" .. color2 == itemstack:get_name() then
itemstack:take_item()
minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:simple_" .. color2 .. "_" .. footstool_type .. "_footstool", param1=node.param1, param2=node.param2})
end
end
elseif string.find(itemstack:get_name(), "luxury_decor:simple_" .. color .. "_small_footstool") then
local node_dir = minetest.facedir_to_dir(node.param2)
local footstools_types_list = {"small", "middle", "long"}
local new_pos = pos
local new_vector = node_dir
if string.find(node.name, footstools_types_list[1]) then
for axle, val in pairs(pointed_thing.above) do
if new_vector[axle] ~= 0 then new_vector[axle] = 0 end
if val ~= pointed_thing.under[axle] and axle ~= y then
if val > pos[axle] then
new_vector[axle] = -1
elseif val < pos[axle] then
new_vector[axle] = 1
end
itemstack:take_item()
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_middle_footstool", param1=node.param1, param2=minetest.dir_to_facedir(new_vector)})
end
end
elseif string.find(node.name, footstools_types_list[2]) then
for axle, val in pairs(pointed_thing.above) do
if val ~= pointed_thing.under[axle] and axle ~= y then
if node_dir[axle] > 0 then
new_pos[axle] = new_pos[axle] - 1
itemstack:take_item()
minetest.remove_node(pos)
minetest.set_node(new_pos, {name="luxury_decor:simple_" .. color .. "_long_footstool", param1=node.param1, param2=node.param2})
elseif node_dir[axle] < 0 then
itemstack:take_item()
--minetest.remove_node(pos)
minetest.set_node(pos, {name="luxury_decor:simple_" .. color .. "_long_footstool", param1=node.param1, param2=node.param2})
end
end
end
end
end
end
})
end
end
minetest.register_node("luxury_decor:simple_wooden_wall_clock", {
description = "Simple Wooden Wall Clock",
visual_scale = 0.5,
mesh = "simple_wooden_wall_clock.b3d",
tiles = {
{
name = "simple_wooden_wall_clock_animated.png",
animation = {type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 60.0}
}
},
inventory_image = "simple_wooden_wall_clock_inv.png",
wield_image = "simple_wooden_wall_clock_inv.png",
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy = 2},
drawtype = "mesh",
collision_box = {
type = "fixed",
fixed = {
{-0.3, -0.5, 0.1, 0.3, 0.4, 0.5},
--[[{-0.65, -0.3, -1.46, 0.65, 1.4, -1.66},
{-0.65, -0.3, 0.46, 0.65, 1.4, 0.66}]]
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.3, -0.5, 0.15, 0.3, 0.35, 0.5}
}
},
sounds = default.node_sound_wood_defaults()
})
--[[for _, color in ipairs(sofas_rgb_colors) do
if color == "red" or color == "green" or color == "blue" or color == "yellow" or color == "violet" then
for _, sofa_type in ipairs({"small", "middle", "long", "corner1", "corner2"}) do
for _, pillow_color in ipairs({"red", "green", "blue", "yellow", "violet"}) do
minetest.register_node("luxury_decor:simple_".. color .. "_" .. sofa_type .. "_sofa", {
description = minetest.colorize(sofas_rgb_colors[color], "Simple " .. string.upper(color) .. " " .. string.upper(sofa_type) .. " Sofa",
visual_scale = 0.5,
mesh = "simple_"..sofa_type.."_sofa.obj",
tiles = {""})
})]]