maggems_landmark/nodes.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"}
}
})