Merge branch 'statussymbols'
commit
5c973aad3b
|
@ -0,0 +1,35 @@
|
|||
maggems_landmark.amenity_names = {}
|
||||
maggems_landmark.amenity_add = {}
|
||||
maggems_landmark.amenity_remove = {}
|
||||
|
||||
function maggems_landmark.register_amenity(name, func_add, func_remove)
|
||||
maggems_landmark.amenity_names[#maggems_landmark.amenity_names + 1] = name
|
||||
maggems_landmark.amenity_add[name] = func_add
|
||||
maggems_landmark.amenity_remove[name] = func_remove
|
||||
end
|
||||
|
||||
function maggems_landmark.find_amenities(area)
|
||||
local _, amenities = minetest.find_nodes_in_area(area.min, area.max, maggems_landmark.amenity_names)
|
||||
for amen, count in pairs(amenities) do
|
||||
if (count == 0) then
|
||||
amenities[amen] = nil
|
||||
end
|
||||
end
|
||||
return amenities
|
||||
end
|
||||
|
||||
function maggems_landmark.update_amenities(area)
|
||||
local pos = minetest.deserialize(area.data)
|
||||
if (minetest.get_node(pos).name ~= "maggems_landmark:home") then return false end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local had_amenities = minetest.deserialize(meta:get("maggems_landmark:amenities"))
|
||||
had_amenities = had_amenities or {}
|
||||
local found_amenities = maggems_landmark.find_amenities(area)
|
||||
for amen in pairs(found_amenities) do
|
||||
if (had_amenities[amen] == nil) then maggems_landmark.amenity_add[amen](meta) end
|
||||
end
|
||||
for amen in pairs(had_amenities) do
|
||||
if (found_amenities[amen] == nil) then maggems_landmark.amenity_remove[amen](meta) end
|
||||
end
|
||||
meta:set_string("maggems_landmark:amenities", minetest.serialize(found_amenities))
|
||||
end
|
1
init.lua
1
init.lua
|
@ -56,4 +56,5 @@ function maggems_landmark.update_formspec(pos)
|
|||
meta:set_string("formspec", formspec)
|
||||
end
|
||||
|
||||
dofile(minetest.get_modpath("maggems_landmark").."/amenities.lua")
|
||||
dofile(minetest.get_modpath("maggems_landmark").."/nodes.lua")
|
||||
|
|
156
nodes.lua
156
nodes.lua
|
@ -59,7 +59,9 @@ minetest.register_node("maggems_landmark:home", {
|
|||
minetest.chat_send_player(sender:get_player_name(), "Invalid corners!")
|
||||
return false
|
||||
end
|
||||
if ((1+pos2.x-pos1.x) * (1+pos2.y-pos1.y) * (1+pos2.z-pos1.z) > 343) then
|
||||
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
|
||||
|
@ -101,3 +103,155 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
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"}
|
||||
}
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue