From d3510645cab5e26684cd7b9809dcebcf5621be25 Mon Sep 17 00:00:00 2001 From: codefairy Date: Mon, 2 Sep 2019 14:12:16 -0400 Subject: [PATCH 1/8] Add in basic groundwork for home amenities Amenities are nodes that are placed within the home's area and offer some kind of benefit to the area or the homeowner (while within the area). An example would be one which expands the maximum area volume, or one which provides healing while inside the home. --- amenities.lua | 35 +++++++++++++++++++++++++++++++++++ init.lua | 1 + 2 files changed, 36 insertions(+) create mode 100644 amenities.lua diff --git a/amenities.lua b/amenities.lua new file mode 100644 index 0000000..e5c1075 --- /dev/null +++ b/amenities.lua @@ -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 diff --git a/init.lua b/init.lua index bd65840..3d90a5c 100644 --- a/init.lua +++ b/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") From 9b52d5a182c3d94923e13eefb96c259d8171e8a1 Mon Sep 17 00:00:00 2001 From: codefairy Date: Mon, 2 Sep 2019 14:27:20 -0400 Subject: [PATCH 2/8] Fix formatting --- amenities.lua | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/amenities.lua b/amenities.lua index e5c1075..a7c861f 100644 --- a/amenities.lua +++ b/amenities.lua @@ -3,33 +3,33 @@ 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 + 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 + 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)) + 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 From 616e3b4e2d54e53d85332bd6b875fd862a453fa1 Mon Sep 17 00:00:00 2001 From: codefairy Date: Mon, 2 Sep 2019 15:24:58 -0400 Subject: [PATCH 3/8] Fix off-by-one error --- amenities.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/amenities.lua b/amenities.lua index a7c861f..e8f13a0 100644 --- a/amenities.lua +++ b/amenities.lua @@ -11,7 +11,7 @@ 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 + if (count == 0) then amenities[amen] = nil end end From 864dc7e4db90eea1b526843a1885810abbccf9d4 Mon Sep 17 00:00:00 2001 From: codefairy Date: Mon, 2 Sep 2019 15:42:19 -0400 Subject: [PATCH 4/8] Add the first status symbol amenity that increases maximum area volume --- nodes.lua | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/nodes.lua b/nodes.lua index c1df2ac..eaf752d 100644 --- a/nodes.lua +++ b/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 @@ -100,3 +102,37 @@ 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, +}) + +maggems_landmark.register_amenity("maggems_landmark:statsym_iron", + function(meta) meta:set_int("maggems_landmark:maxvol", 11*11*11) end, + function(meta) meta:set_int("maggems_landmark:maxvol", 7*7*7) 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"} + } +}) From f4683f5c7607422eeb998bd930d51c5374a5f35c Mon Sep 17 00:00:00 2001 From: codefairy Date: Mon, 2 Sep 2019 20:42:18 -0400 Subject: [PATCH 5/8] Fix formatting Eventually, I will figure out how to configure vim again. --- nodes.lua | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/nodes.lua b/nodes.lua index eaf752d..f7750f8 100644 --- a/nodes.lua +++ b/nodes.lua @@ -59,8 +59,8 @@ minetest.register_node("maggems_landmark:home", { 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 + 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 @@ -111,28 +111,32 @@ minetest.register_node("maggems_landmark:statsym_iron", { 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, + 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_iron", - function(meta) meta:set_int("maggems_landmark:maxvol", 11*11*11) end, - function(meta) meta:set_int("maggems_landmark:maxvol", 7*7*7) end + function(meta) + meta:set_int("maggems_landmark:maxvol", 11*11*11) + end, + function(meta) + meta:set_int("maggems_landmark:maxvol", 7*7*7) + 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"} - } + {"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"} + } }) From 2073cd0fccac1860e7c6f829c2ec87dacb4750e4 Mon Sep 17 00:00:00 2001 From: codefairy Date: Mon, 2 Sep 2019 21:06:04 -0400 Subject: [PATCH 6/8] Add support for various ranks of status symbols --- nodes.lua | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/nodes.lua b/nodes.lua index f7750f8..a0d4de5 100644 --- a/nodes.lua +++ b/nodes.lua @@ -123,12 +123,32 @@ minetest.register_node("maggems_landmark:statsym_iron", { 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) - meta:set_int("maggems_landmark:maxvol", 11*11*11) + -- 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) - meta:set_int("maggems_landmark:maxvol", 7*7*7) + -- 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 ) From 9322882582bcbe37039425ae9bcc32430f516f56 Mon Sep 17 00:00:00 2001 From: codefairy Date: Mon, 2 Sep 2019 21:47:28 -0400 Subject: [PATCH 7/8] Add gold status symbol --- nodes.lua | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/nodes.lua b/nodes.lua index a0d4de5..7fa245e 100644 --- a/nodes.lua +++ b/nodes.lua @@ -160,3 +160,50 @@ minetest.register_craft({ {"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"} + } +}) From 6747b712e4325bdc41cb29c8e44fd0ea8e109d8a Mon Sep 17 00:00:00 2001 From: codefairy Date: Wed, 4 Sep 2019 21:00:53 -0400 Subject: [PATCH 8/8] Add diamond status symbol --- nodes.lua | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/nodes.lua b/nodes.lua index 7fa245e..ff20bc0 100644 --- a/nodes.lua +++ b/nodes.lua @@ -207,3 +207,50 @@ minetest.register_craft({ {"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"} + } +})