From ea08c52b0192d1997977c1cbb51a203ba6e80201 Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Sun, 20 Jan 2019 16:45:50 +0200 Subject: [PATCH] static vertical size setting --- towny/init.lua | 11 ++++++++--- towny/regions.lua | 19 +++++++++++++++++-- towny/settingtypes.txt | 12 ++++++++---- towny/town.lua | 15 ++++++++++----- towny/visualize.lua | 7 ++++++- 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/towny/init.lua b/towny/init.lua index 067cfb4..bb897de 100644 --- a/towny/init.lua +++ b/towny/init.lua @@ -9,9 +9,14 @@ local modpath = minetest.get_modpath(minetest.get_current_modname()) towny = { modpath = modpath, regions = { - size = tonumber(minetest.settings:get('towny_claim_size')) or 16, - height = tonumber(minetest.settings:get('towny_claim_height')) or 64, - distance = tonumber(minetest.settings:get('towny_distance')) or 80, + size = tonumber(minetest.settings:get('towny_claim_size')) or 16, + height = tonumber(minetest.settings:get('towny_claim_height')) or 64, + distance = tonumber(minetest.settings:get('towny_distance')) or 80, + vertical = { + static = minetest.settings:get_bool('towny_static_height', false), + miny = tonumber(minetest.settings:get('towny_static_miny')) or -32000, + maxy = tonumber(minetest.settings:get('towny_static_maxy')) or 32000, + }, -- Regions loaded into memory cache, see "Town regions data structure" memloaded = {}, diff --git a/towny/regions.lua b/towny/regions.lua index fa060f5..3a537c9 100644 --- a/towny/regions.lua +++ b/towny/regions.lua @@ -102,6 +102,12 @@ function towny.regions.ensure_range(p) p1 = p[1] p2 = p[2] end + + if towny.regions.vertical.static then + p1.y = towny.regions.vertical.maxy + p2.y = towny.regions.vertical.miny + end + return p1,p2 end @@ -140,6 +146,11 @@ function towny.regions.get_closest_town(pos,name) for _,tc in pairs(regions.blocks) do local p1,p2 = towny.regions.ensure_range(tc) local center = vector.subtract(p1, {x=tr/2,y=th/2,z=tr/2}) + + if towny.regions.vertical.static then + center.y = pos.y - th/2 + end + local dist = vector.distance(pos, center) if dist < last_distance or last_distance == 0 then last_distance = dist @@ -177,7 +188,7 @@ function towny.regions.align_new_claim_block(pos,name) new_pos = vector.add(p1, {x=-tr,y=0,z=0}) end -- Y - elseif (pos.x <= p1.x and pos.x >= p2.x) and (pos.z <= p1.z and pos.z >= p2.z) then + elseif (pos.x <= p1.x and pos.x >= p2.x) and (pos.z <= p1.z and pos.z >= p2.z) and not towny.regions.vertical.static then if pos.y > p1.y then new_pos = vector.add(p1, {x=0,y=th,z=0}) elseif pos.y < p2.y then @@ -192,6 +203,10 @@ function towny.regions.align_new_claim_block(pos,name) end end + if towny.regions.vertical.static and new_pos then + new_pos.y = towny.regions.vertical.maxy + end + if new_pos == nil then return nil end -- Impossible position return new_pos,closest_town end @@ -228,7 +243,7 @@ function towny.regions.visualize_town(town) if not towny.regions.memloaded[town] then return end for _,pos in pairs(towny.regions.memloaded[town].blocks) do local p1,p2 = towny.regions.ensure_range(pos) - towny.regions.visualize_area(p1,p2) + towny.regions.visualize_area(p1,p2,towny.towns[town].flags['origin']) end end diff --git a/towny/settingtypes.txt b/towny/settingtypes.txt index dd3d5bf..4f38e64 100644 --- a/towny/settingtypes.txt +++ b/towny/settingtypes.txt @@ -13,13 +13,17 @@ towny_storage_engine (Storage engine) enum modstorage modstorage,flatfile towny_claim_size (Claim size) int 16 # Towny claim height -towny_claim_size (Claim height) int 64 +towny_claim_height (Claim height) int 64 + +# Use static height claim blocks +towny_static_height (Use static height claims) bool false +towny_static_miny (Static claim: minimum Y) int -32000 +towny_static_maxy (Static claim: maximum Y) int 32000 # Minimum distance between towns (in claim blocks) towny_distance (Max town claims) int 80 -# Prevent protectors from being placed in a town -# Towns provide their own protection +# Prevent protectors from being placed in a town, as towns provide their own protection # Recommended to be kept as true, may cause issues with claims otherwise towny_prevent_protector (Prevent protectors from being placed in a town) bool true @@ -38,4 +42,4 @@ towny_tax (Allow taxation) bool true # Units depend on economy mod used in server towny_create_cost (Town creation cost) int 10000 towny_claim_cost (Town claim block cost) int 1000 -towny_upkeep_cost (Town daily upkeep cost, multiplied by member count) int 10 +towny_upkeep_cost (Town daily upkeep cost, multiplied by member count) int 0 diff --git a/towny/town.lua b/towny/town.lua index 855a29b..85feb5f 100644 --- a/towny/town.lua +++ b/towny/town.lua @@ -95,7 +95,7 @@ function towny.create_town(pos, player, name) end local _,__,distance = towny.regions.get_closest_town(pos) - if distance > towny.regions.distance * towny.regions.size and not towny_admin then + if distance < towny.regions.distance * towny.regions.size and not towny_admin then return err_msg(player, "This location is too close to another town!") end @@ -109,6 +109,11 @@ function towny.create_town(pos, player, name) local p1 = vector.add(pos, {x=tr / 2,y=th - 1,z=tr / 2}) local p2 = vector.subtract(pos, {x=tr / 2,y=1,z=tr / 2}) + if towny.regions.vertical.static then + p1.y = towny.regions.vertical.maxy + p2.y = towny.regions.vertical.miny + end + if towny.regions.protection_mod(p1,p2) then return err_msg(player, "This area is protected by another protection mod! Please ensure that this is not the case.") end @@ -142,7 +147,7 @@ function towny.create_town(pos, player, name) minetest.chat_send_player(player, "Your town has successfully been founded!") minetest.chat_send_all(("%s has started a new town called '%s'!"):format(player,name)) - towny.regions.visualize_area(p1,p2) + towny.regions.visualize_area(p1,p2,pos) return true end @@ -188,7 +193,7 @@ function towny.extend_town(pos,player) minetest.chat_send_player(player, ("Successfully claimed this block! You have %d claim blocks left!"):format(towny.get_claims_available(town))) towny.mark_dirty(town, true) - towny.regions.visualize_area(p1,p2) + towny.regions.visualize_area(p1,p2,pos) return true end @@ -419,7 +424,7 @@ function towny.create_plot(pos,player) towny.mark_dirty(t, true) minetest.chat_send_player(player, "Successfully created a plot!") - towny.regions.visualize_area(c[1], c[2]) + towny.regions.visualize_area(c[1], c[2], pos) return true end @@ -456,7 +461,7 @@ function towny.claim_plot(pos,player) towny.mark_dirty(t, false) minetest.chat_send_player(player, "Successfully claimed the plot!") - towny.regions.visualize_area(c[1], c[2]) + towny.regions.visualize_area(c[1], c[2], pos) return true else diff --git a/towny/visualize.lua b/towny/visualize.lua index 96d04c1..96c497c 100644 --- a/towny/visualize.lua +++ b/towny/visualize.lua @@ -34,7 +34,12 @@ local function fl(x) return math.floor(x) end -function towny.regions.visualize_area(p1,p2) +function towny.regions.visualize_area(p1,p2,pos) local center = {x=fl(p2.x + r1/2)+0.5,y=fl(p2.y + r2/2)+0.5,z=fl(p2.z + r1/2)+0.5} + + if towny.regions.vertical.static then + center.y = pos.y + end + local e = minetest.add_entity(center, "towny:region_visual") end