258 lines
8.6 KiB
Lua
258 lines
8.6 KiB
Lua
minetest.register_node("maggems_landmark:home", {
|
|
description = "Misi Home",
|
|
tiles = {"maggems_landmark_home_side.png"},
|
|
is_ground_content = false,
|
|
paramtype = "light",
|
|
light_source = 3,
|
|
groups = {cracky = 1, level = 1},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
on_construct = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner", "")
|
|
end,
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("owner", placer:get_player_name() or "")
|
|
meta:set_string("maggems_landmark:name", "Home")
|
|
meta:set_string("infotext", meta:get_string("maggems_landmark:name") ..
|
|
" (" .. meta:get_string("owner") .. ")")
|
|
local pos1 = {x=pos.x-3,y=pos.y-3,z=pos.z-3}
|
|
local pos2 = {x=pos.x+3,y=pos.y+3,z=pos.z+3}
|
|
meta:set_string("maggems_landmark:pos1", minetest.serialize(pos1))
|
|
meta:set_string("maggems_landmark:pos2", minetest.serialize(pos2))
|
|
maggems_landmark.update_formspec(pos)
|
|
local homes = maggems_landmark.homes
|
|
local id = homes:insert_area(pos1, pos2, minetest.serialize(pos))
|
|
assert(id ~= nil)
|
|
maggems_landmark.save_homes()
|
|
end,
|
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
local homes = maggems_landmark.homes
|
|
for id in pairs(homes:get_areas_for_pos(pos)) do
|
|
homes:remove_area(id)
|
|
end
|
|
maggems_landmark.save_homes()
|
|
end,
|
|
on_receive_fields = function(pos, formname, fields, sender)
|
|
minetest.debug(dump(fields))
|
|
local meta = minetest.get_meta(pos)
|
|
if (sender:get_player_name() ~= meta:get_string("owner")) then
|
|
minetest.chat_send_player(sender:get_player_name(), "This is not your beautiful home...")
|
|
return false
|
|
end
|
|
if (fields.name) then
|
|
meta:set_string("maggems_landmark:name", fields.name)
|
|
meta:set_string("infotext", meta:get_string("maggems_landmark:name") ..
|
|
" (" .. meta:get_string("owner") .. ")")
|
|
local pos1 = {
|
|
x = pos.x + tonumber(fields.minx),
|
|
y = pos.y + tonumber(fields.miny),
|
|
z = pos.z + tonumber(fields.minz)
|
|
}
|
|
local pos2 = {
|
|
x = pos.x + tonumber(fields.maxx),
|
|
y = pos.y + tonumber(fields.maxy),
|
|
z = pos.z + tonumber(fields.maxz)
|
|
}
|
|
if (pos1.x-pos.x > 0) or (pos1.y-pos.y > 0) or (pos1.z-pos.z > 0) or
|
|
(pos2.x-pos.x < 0) or (pos2.y-pos.y < 0) or (pos2.z-pos.z < 0) then
|
|
minetest.chat_send_player(sender:get_player_name(), "Invalid corners!")
|
|
return false
|
|
end
|
|
local maxvol = meta:get_int("maggems_landmark:maxvol")
|
|
if (maxvol == 0) then maxvol = 7*7*7 end
|
|
if ((1+pos2.x-pos1.x) * (1+pos2.y-pos1.y) * (1+pos2.z-pos1.z) > maxvol) then
|
|
minetest.chat_send_player(sender:get_player_name(), "Space too big!")
|
|
return false
|
|
end
|
|
local old_pos1 = minetest.deserialize(meta:get_string("maggems_landmark:pos1"))
|
|
local old_pos2 = minetest.deserialize(meta:get_string("maggems_landmark:pos2"))
|
|
if (pos1.x~=old_pos1.x or pos1.y~=old_pos1.y or pos1.z~=old_pos1.z or
|
|
pos2.x~=old_pos2.x or pos2.y~=old_pos2.y or pos2.z~=old_pos2.z) then
|
|
minetest.debug("different!", dump(pos1), dump(old_pos1), dump(pos2), dump(old_pos2))
|
|
-- replace the area
|
|
local homes = maggems_landmark.homes
|
|
for id, area in pairs(homes:get_areas_for_pos(pos)) do
|
|
local newid = homes:insert_area(pos1, pos2, minetest.serialize(pos))
|
|
if (newid == nil) then --[[do something]] end
|
|
homes:remove_area(id)
|
|
end
|
|
meta:set_string("maggems_landmark:pos1", minetest.serialize(pos1))
|
|
meta:set_string("maggems_landmark:pos2", minetest.serialize(pos2))
|
|
maggems_landmark.update_formspec(pos)
|
|
maggems_landmark.save_homes()
|
|
end
|
|
end
|
|
return true
|
|
end,
|
|
on_blast = function() end,
|
|
--[[
|
|
-- TODO: proper home features
|
|
can_dig = function(pos,player)
|
|
local meta = minetest.get_meta(pos);
|
|
return default.can_interact_with_node(player, pos)
|
|
end,
|
|
--]]
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = 'maggems_landmark:home',
|
|
recipe = {
|
|
{'maggems:misi'},
|
|
{'default:mese_crystal_fragment'},
|
|
}
|
|
})
|
|
|
|
minetest.register_node("maggems_landmark:statsym_iron", {
|
|
description = "Iron Status Symbol",
|
|
tiles = {"maggems_landmark_statsym.png^maggems_landmark_border_iron.png"},
|
|
is_ground_content = false,
|
|
paramtype = "light",
|
|
light_source = 3,
|
|
groups = {cracky = 1, level = 1},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
after_place_node = function(pos, player)
|
|
for id, area in pairs(maggems_landmark.homes:get_areas_for_pos(pos, true, true)) do
|
|
maggems_landmark.update_amenities(area)
|
|
end
|
|
end,
|
|
after_dig_node = function(pos, oldnode, oldmetadata, player)
|
|
for id, area in pairs(maggems_landmark.homes:get_areas_for_pos(pos, true, true)) do
|
|
maggems_landmark.update_amenities(area)
|
|
end
|
|
end,
|
|
on_blast = function() end,
|
|
})
|
|
|
|
local function get_maxvol(rank)
|
|
if (rank >= 4) then -- 0100
|
|
return 21*21*21
|
|
elseif (rank >= 2) then -- 0010
|
|
return 15*15*15
|
|
elseif (rank >= 1) then
|
|
return 11*11*11
|
|
else
|
|
return 7*7*7
|
|
end
|
|
end
|
|
|
|
maggems_landmark.register_amenity("maggems_landmark:statsym_iron",
|
|
function(meta)
|
|
-- add amenity
|
|
local rank = meta:get_int("maggems_landmark:statsym_rank")
|
|
rank = rank + 1
|
|
meta:set_int("maggems_landmark:maxvol", get_maxvol(rank))
|
|
meta:set_int("maggems_landmark:statsym_rank", rank)
|
|
end,
|
|
function(meta)
|
|
-- remove amenity
|
|
local rank = meta:get_int("maggems_landmark:statsym_rank")
|
|
rank = rank - 1
|
|
meta:set_int("maggems_landmark:maxvol", get_maxvol(rank))
|
|
meta:set_int("maggems_landmark:statsym_rank", rank)
|
|
end
|
|
)
|
|
|
|
minetest.register_craft({
|
|
output = "maggems_landmark:statsym_iron",
|
|
recipe = {
|
|
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
|
{"default:steel_ingot", "default:mese", "default:steel_ingot"},
|
|
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}
|
|
}
|
|
})
|
|
|
|
minetest.register_node("maggems_landmark:statsym_gold", {
|
|
description = "Gold Status Symbol",
|
|
tiles = {"maggems_landmark_statsym.png^maggems_landmark_border_gold.png"},
|
|
is_ground_content = false,
|
|
paramtype = "light",
|
|
light_source = 3,
|
|
groups = {cracky = 1, level = 1},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
after_place_node = function(pos, player)
|
|
for id, area in pairs(maggems_landmark.homes:get_areas_for_pos(pos, true, true)) do
|
|
maggems_landmark.update_amenities(area)
|
|
end
|
|
end,
|
|
after_dig_node = function(pos, oldnode, oldmetadata, player)
|
|
for id, area in pairs(maggems_landmark.homes:get_areas_for_pos(pos, true, true)) do
|
|
maggems_landmark.update_amenities(area)
|
|
end
|
|
end,
|
|
on_blast = function() end,
|
|
})
|
|
|
|
maggems_landmark.register_amenity("maggems_landmark:statsym_gold",
|
|
function(meta)
|
|
-- add amenity
|
|
local rank = meta:get_int("maggems_landmark:statsym_rank")
|
|
rank = rank + 2
|
|
meta:set_int("maggems_landmark:maxvol", get_maxvol(rank))
|
|
meta:set_int("maggems_landmark:statsym_rank", rank)
|
|
end,
|
|
function(meta)
|
|
-- remove amenity
|
|
local rank = meta:get_int("maggems_landmark:statsym_rank")
|
|
rank = rank - 2
|
|
meta:set_int("maggems_landmark:maxvol", get_maxvol(rank))
|
|
meta:set_int("maggems_landmark:statsym_rank", rank)
|
|
end
|
|
)
|
|
|
|
minetest.register_craft({
|
|
output = "maggems_landmark:statsym_gold",
|
|
recipe = {
|
|
{"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"},
|
|
{"default:gold_ingot", "default:mese", "default:gold_ingot"},
|
|
{"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"}
|
|
}
|
|
})
|
|
|
|
minetest.register_node("maggems_landmark:statsym_diamond", {
|
|
description = "Diamond Status Symbol",
|
|
tiles = {"maggems_landmark_statsym.png^maggems_landmark_border_diamond.png"},
|
|
is_ground_content = false,
|
|
paramtype = "light",
|
|
light_source = 3,
|
|
groups = {cracky = 1, level = 1},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
after_place_node = function(pos, player)
|
|
for id, area in pairs(maggems_landmark.homes:get_areas_for_pos(pos, true, true)) do
|
|
maggems_landmark.update_amenities(area)
|
|
end
|
|
end,
|
|
after_dig_node = function(pos, oldnode, oldmetadata, player)
|
|
for id, area in pairs(maggems_landmark.homes:get_areas_for_pos(pos, true, true)) do
|
|
maggems_landmark.update_amenities(area)
|
|
end
|
|
end,
|
|
on_blast = function() end,
|
|
})
|
|
|
|
maggems_landmark.register_amenity("maggems_landmark:statsym_diamond",
|
|
function(meta)
|
|
-- add amenity
|
|
local rank = meta:get_int("maggems_landmark:statsym_rank")
|
|
rank = rank + 4
|
|
meta:set_int("maggems_landmark:maxvol", get_maxvol(rank))
|
|
meta:set_int("maggems_landmark:statsym_rank", rank)
|
|
end,
|
|
function(meta)
|
|
-- remove amenity
|
|
local rank = meta:get_int("maggems_landmark:statsym_rank")
|
|
rank = rank - 4
|
|
meta:set_int("maggems_landmark:maxvol", get_maxvol(rank))
|
|
meta:set_int("maggems_landmark:statsym_rank", rank)
|
|
end
|
|
)
|
|
|
|
minetest.register_craft({
|
|
output = "maggems_landmark:statsym_diamond",
|
|
recipe = {
|
|
{"default:diamond", "default:diamond", "default:diamond"},
|
|
{"default:diamond", "default:mese", "default:diamond"},
|
|
{"default:diamond", "default:diamond", "default:diamond"}
|
|
}
|
|
})
|