Merge branch 'statussymbols'

master
codefairy 2019-09-04 21:08:20 -04:00
commit 5c973aad3b
3 changed files with 191 additions and 1 deletions

35
amenities.lua Normal file
View File

@ -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

View File

@ -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
View File

@ -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"}
}
})