taller claim blocks
This commit is contained in:
parent
2853a8e3bc
commit
136f47b2be
15
chat.lua
15
chat.lua
@ -32,6 +32,10 @@ local function invite_player(town,player,target)
|
|||||||
return false, "You are not in a town."
|
return false, "You are not in a town."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if not minetest.get_player_by_name(target) then
|
||||||
|
return false, "You can only invite online players to your town."
|
||||||
|
end
|
||||||
|
|
||||||
local target_town = towny:get_player_town(target)
|
local target_town = towny:get_player_town(target)
|
||||||
if target_town then
|
if target_town then
|
||||||
return false, "This player is already in a town!"
|
return false, "This player is already in a town!"
|
||||||
@ -43,11 +47,12 @@ local function invite_player(town,player,target)
|
|||||||
|
|
||||||
local tdata = towny.towns[town]
|
local tdata = towny.towns[town]
|
||||||
|
|
||||||
minetest.chat_send_player(target, "You have been invited to join town '"..tdata.name.."' by "..player)
|
minetest.chat_send_player(target, ("You have been invited to join town '%s' by %s")
|
||||||
|
:format(tdata.name, player))
|
||||||
minetest.chat_send_player(target, "You can accept this invite by typing '/town invite accept' or deny '/town invite deny'")
|
minetest.chat_send_player(target, "You can accept this invite by typing '/town invite accept' or deny '/town invite deny'")
|
||||||
|
|
||||||
towny.chat.invites[town.."-"..target] = { rejected = false, town = town, player = target, invited = player }
|
towny.chat.invites[town.."-"..target] = { rejected = false, town = town, player = target, invited = player }
|
||||||
return true, "Player "..target.." has been invited to join your town."
|
return true, ("Player %s has been invited to join your town."):format(target)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function join_town(town,player,from_invite)
|
local function join_town(town,player,from_invite)
|
||||||
@ -55,8 +60,9 @@ local function join_town(town,player,from_invite)
|
|||||||
if not tdata then return false, "No such town" end
|
if not tdata then return false, "No such town" end
|
||||||
if (not from_invite and not tdata.flags['joinable']) then return false, "You cannot join this town." end
|
if (not from_invite and not tdata.flags['joinable']) then return false, "You cannot join this town." end
|
||||||
towny.chat:announce_to_members(town, minetest.colorize("#02aacc", player.." has joined the town!"))
|
towny.chat:announce_to_members(town, minetest.colorize("#02aacc", player.." has joined the town!"))
|
||||||
minetest.chat_send_player(player, "You have successfully joined the town '"..tdata.name.."'!")
|
minetest.chat_send_player(player, ("You have successfully joined the town '%s'!"):format(tdata.name))
|
||||||
tdata.members[player] = {}
|
tdata.members[player] = {}
|
||||||
|
towny:mark_dirty(town,false)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -114,8 +120,7 @@ local function town_command (name, param)
|
|||||||
if (pr1 == "create" or pr1 == "new") and pr2 then
|
if (pr1 == "create" or pr1 == "new") and pr2 then
|
||||||
return towny:create_town(nil, name, pr2)
|
return towny:create_town(nil, name, pr2)
|
||||||
elseif (pr1 == "invite" and not minetest.get_player_by_name(pr2)) then
|
elseif (pr1 == "invite" and not minetest.get_player_by_name(pr2)) then
|
||||||
local tyes = pr2:lower()
|
return invite_respond(name, (tyes:lower() == "accept" or minetest.is_yes(tyes)))
|
||||||
return invite_respond(name, (tyes == "accept" or tyes == "yes" or tyes == "y"))
|
|
||||||
elseif pr1 == "join" and towny:get_town_by_name(pr2) and not town then
|
elseif pr1 == "join" and towny:get_town_by_name(pr2) and not town then
|
||||||
return join_town(pr2,name,false)
|
return join_town(pr2,name,false)
|
||||||
elseif pr1 == "show" or pr1 == "info" then
|
elseif pr1 == "show" or pr1 == "info" then
|
||||||
|
@ -9,6 +9,7 @@ function towny.flatfile:write_meta(town,dir,data)
|
|||||||
minetest.mkdir(directory)
|
minetest.mkdir(directory)
|
||||||
|
|
||||||
if data.dirty then data.dirty = nil end
|
if data.dirty then data.dirty = nil end
|
||||||
|
if data.level then data.level = nil end
|
||||||
|
|
||||||
local serialized
|
local serialized
|
||||||
if serialize then
|
if serialize then
|
||||||
@ -47,18 +48,17 @@ function towny.flatfile:load_meta(filepath)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function towny.flatfile:save_town_meta(town)
|
function towny.flatfile:save_town_meta(town)
|
||||||
if not towny.towns[town] then return end
|
|
||||||
local tmeta = towny.towns[town]
|
local tmeta = towny.towns[town]
|
||||||
if tmeta.dirty then
|
if tmeta and tmeta.dirty then
|
||||||
|
towny:get_town_level(town, true)
|
||||||
minetest.after(0.1, function ()
|
minetest.after(0.1, function ()
|
||||||
towny.flatfile:write_meta(town,"meta",tmeta)
|
towny.flatfile:write_meta(town,"meta",tmeta)
|
||||||
tmeta.dirty = false
|
tmeta.dirty = false
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
if not towny.regions.memloaded[town] then return end
|
|
||||||
local rmeta = towny.regions.memloaded[town]
|
local rmeta = towny.regions.memloaded[town]
|
||||||
if rmeta.dirty then
|
if rmeta and rmeta.dirty then
|
||||||
minetest.after(0.2, function ()
|
minetest.after(0.2, function ()
|
||||||
towny.flatfile:write_meta(town,"region",rmeta)
|
towny.flatfile:write_meta(town,"region",rmeta)
|
||||||
rmeta.dirty = false
|
rmeta.dirty = false
|
||||||
@ -80,6 +80,7 @@ function towny.flatfile:load_all_towns()
|
|||||||
local towndata = towny.flatfile:load_meta(metadir.."/"..file)
|
local towndata = towny.flatfile:load_meta(metadir.."/"..file)
|
||||||
if not towndata then return end
|
if not towndata then return end
|
||||||
towny.towns[town] = towndata
|
towny.towns[town] = towndata
|
||||||
|
towny:get_town_level(town, true)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
54
init.lua
54
init.lua
@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
towny = {
|
towny = {
|
||||||
claimbonus = tonumber(minetest.settings:get('towny_claim_bonus')) or 8,
|
|
||||||
regions = {
|
regions = {
|
||||||
size = tonumber(minetest.settings:get('towny_claim_size')) or 16,
|
size = tonumber(minetest.settings:get('towny_claim_size')) or 16,
|
||||||
|
height = tonumber(minetest.settings:get('towny_claim_height')) or 64,
|
||||||
maxclaims = tonumber(minetest.settings:get('towny_claim_max')) or 128,
|
maxclaims = tonumber(minetest.settings:get('towny_claim_max')) or 128,
|
||||||
distance = tonumber(minetest.settings:get('towny_distance')) or 80,
|
distance = tonumber(minetest.settings:get('towny_distance')) or 80,
|
||||||
|
|
||||||
@ -20,6 +20,54 @@ towny = {
|
|||||||
questionaire = (minetest.settings:get('towny_questionaire') == "true") or true,
|
questionaire = (minetest.settings:get('towny_questionaire') == "true") or true,
|
||||||
invites = {},
|
invites = {},
|
||||||
},
|
},
|
||||||
|
levels = {
|
||||||
|
{
|
||||||
|
members = 0,
|
||||||
|
name_tag = 'Ruins',
|
||||||
|
mayor_tag = 'Spirit',
|
||||||
|
claimblocks = 1,
|
||||||
|
}, {
|
||||||
|
members = 1,
|
||||||
|
name_tag = 'Settlement',
|
||||||
|
mayor_tag = 'Hermit',
|
||||||
|
claimblocks = 16,
|
||||||
|
}, {
|
||||||
|
members = 2,
|
||||||
|
name_tag = 'Hamlet',
|
||||||
|
mayor_tag = 'Chief',
|
||||||
|
claimblocks = 32,
|
||||||
|
}, {
|
||||||
|
members = 6,
|
||||||
|
name_tag = 'Village',
|
||||||
|
mayor_tag = 'Baron Von',
|
||||||
|
claimblocks = 96,
|
||||||
|
}, {
|
||||||
|
members = 10,
|
||||||
|
name_tag = 'Town',
|
||||||
|
mayor_tag = 'Viscount',
|
||||||
|
claimblocks = 160,
|
||||||
|
}, {
|
||||||
|
members = 14,
|
||||||
|
name_tag = 'Large Town',
|
||||||
|
mayor_tag = 'Count Von',
|
||||||
|
claimblocks = 224,
|
||||||
|
}, {
|
||||||
|
members = 20,
|
||||||
|
name_tag = 'City',
|
||||||
|
mayor_tag = 'Earl',
|
||||||
|
claimblocks = 320,
|
||||||
|
}, {
|
||||||
|
members = 24,
|
||||||
|
name_tag = 'Large City',
|
||||||
|
mayor_tag = 'Duke',
|
||||||
|
claimblocks = 384,
|
||||||
|
}, {
|
||||||
|
members = 28,
|
||||||
|
name_tag = 'Metropolis',
|
||||||
|
mayor_tag = 'Lord',
|
||||||
|
claimblocks = 448,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
-- Set to true if files need to be updated
|
-- Set to true if files need to be updated
|
||||||
dirty = false,
|
dirty = false,
|
||||||
@ -65,9 +113,9 @@ towny = {
|
|||||||
'plot_pvp' boolean default plot pvp setting. defaults to false
|
'plot_pvp' boolean default plot pvp setting. defaults to false
|
||||||
'joinable' boolean if true, anyone can join this town. defaults to false
|
'joinable' boolean if true, anyone can join this town. defaults to false
|
||||||
'greeting' string town's greeting message
|
'greeting' string town's greeting message
|
||||||
'plot_tax' float how much each plot costs each day (only with economy)
|
'tax' float how much each member has to pay each day to stay in town (only with economy)
|
||||||
'bank' float town's wealth (only with economy) (unchangeable by owner)
|
'bank' float town's wealth (only with economy) (unchangeable by owner)
|
||||||
'claim_blocks' int town's available claim blocks (unchangeable by owner)
|
'claim_blocks' int town's bonus claim blocks (unchangeable by owner)
|
||||||
'origin' position town's center position, set at town creation (unchangeable by owner)
|
'origin' position town's center position, set at town creation (unchangeable by owner)
|
||||||
]]
|
]]
|
||||||
|
|
||||||
|
23
regions.lua
23
regions.lua
@ -1,12 +1,7 @@
|
|||||||
local tr = towny.regions.size
|
local tr = towny.regions.size
|
||||||
|
local th = towny.regions.height
|
||||||
local main_is_protected = minetest.is_protected
|
local main_is_protected = minetest.is_protected
|
||||||
|
|
||||||
-- Calculate a region from the center point and radius
|
|
||||||
local function region_from_diameter(center, diameter)
|
|
||||||
local r = {x = diameter / 2, y = diameter / 2, z = diameter / 2}
|
|
||||||
return vector.subtract(center, r), vector.add(center, r)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Test to see if a position is in a region
|
-- Test to see if a position is in a region
|
||||||
local function pos_in_region(pos, p1, p2)
|
local function pos_in_region(pos, p1, p2)
|
||||||
return (pos.x <= p1.x and pos.y <= p1.y and pos.z <= p1.z) and
|
return (pos.x <= p1.x and pos.y <= p1.y and pos.z <= p1.z) and
|
||||||
@ -51,7 +46,6 @@ function towny.regions:build_perms(town, name, plotid)
|
|||||||
|
|
||||||
-- Plot build rights
|
-- Plot build rights
|
||||||
if plotid and towndata.plots[plotid] then
|
if plotid and towndata.plots[plotid] then
|
||||||
print(plotid, dump(towndata.plots[plotid]))
|
|
||||||
-- This flag dictates that this member can build in all town plots, no matter if they own it or not
|
-- This flag dictates that this member can build in all town plots, no matter if they own it or not
|
||||||
if towndata.members[name]['plot_build'] == true then return true end
|
if towndata.members[name]['plot_build'] == true then return true end
|
||||||
|
|
||||||
@ -84,7 +78,7 @@ local function single_range(p)
|
|||||||
local p1,p2
|
local p1,p2
|
||||||
if p.x then
|
if p.x then
|
||||||
p1 = p
|
p1 = p
|
||||||
p2 = vector.subtract(p, {x=towny.regions.size,y=towny.regions.size,z=towny.regions.size})
|
p2 = vector.subtract(p, {x=tr,y=th,z=tr})
|
||||||
elseif #p == 2 then
|
elseif #p == 2 then
|
||||||
p1 = p[1]
|
p1 = p[1]
|
||||||
p2 = p[2]
|
p2 = p[2]
|
||||||
@ -126,7 +120,8 @@ function towny.regions:get_closest_town(pos,name)
|
|||||||
if count and vector.distance(pos, regions.origin) <= towny.regions.size * towny.regions.maxclaims then
|
if count and vector.distance(pos, regions.origin) <= towny.regions.size * towny.regions.maxclaims then
|
||||||
for _,tc in pairs(regions.blocks) do
|
for _,tc in pairs(regions.blocks) do
|
||||||
local p1,p2 = single_range(tc)
|
local p1,p2 = single_range(tc)
|
||||||
local dist = vector.distance(pos, p1)
|
local center = vector.subtract(p1, {x=tr/2,y=th/2,z=tr/2})
|
||||||
|
local dist = vector.distance(pos, center)
|
||||||
if dist < last_distance or last_distance == 0 then
|
if dist < last_distance or last_distance == 0 then
|
||||||
last_distance = dist
|
last_distance = dist
|
||||||
in_town = town
|
in_town = town
|
||||||
@ -150,7 +145,7 @@ end
|
|||||||
function towny.regions:align_new_claim_block(pos,name)
|
function towny.regions:align_new_claim_block(pos,name)
|
||||||
local closest_town,closest_block,distance = towny.regions:get_closest_town(pos,name)
|
local closest_town,closest_block,distance = towny.regions:get_closest_town(pos,name)
|
||||||
if not closest_town then return nil end
|
if not closest_town then return nil end
|
||||||
if distance > (tr * 2) then return nil end -- Too far
|
if distance > (tr + th) then return nil end -- Too far
|
||||||
|
|
||||||
local new_pos
|
local new_pos
|
||||||
local p1,p2 = closest_block[1],closest_block[2]
|
local p1,p2 = closest_block[1],closest_block[2]
|
||||||
@ -165,9 +160,9 @@ function towny.regions:align_new_claim_block(pos,name)
|
|||||||
-- Y
|
-- 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) then
|
||||||
if pos.y > p1.y then
|
if pos.y > p1.y then
|
||||||
new_pos = vector.add(p1, {x=0,y=tr,z=0})
|
new_pos = vector.add(p1, {x=0,y=th,z=0})
|
||||||
else
|
else
|
||||||
new_pos = vector.add(p1, {x=0,y=-tr,z=0})
|
new_pos = vector.add(p1, {x=0,y=-th,z=0})
|
||||||
end
|
end
|
||||||
-- Z
|
-- Z
|
||||||
elseif (pos.x <= p1.x and pos.x >= p2.x) and (p1.y >= pos.y and p2.y <= pos.y) then
|
elseif (pos.x <= p1.x and pos.x >= p2.x) and (p1.y >= pos.y and p2.y <= pos.y) then
|
||||||
@ -186,7 +181,7 @@ function towny.regions:remove_claim(p1,town)
|
|||||||
local blocks = {}
|
local blocks = {}
|
||||||
if not towny.regions.memloaded[town] then return false, "This town does not exist anymore." end
|
if not towny.regions.memloaded[town] then return false, "This town does not exist anymore." end
|
||||||
for _,pos in pairs(towny.regions.memloaded[town].blocks) do
|
for _,pos in pairs(towny.regions.memloaded[town].blocks) do
|
||||||
if pos['plot'] and towny.towns[town].plots[pos['plot']] then
|
if region_equal(p1, pos) and pos['plot'] and towny.towns[town].plots[pos['plot']] then
|
||||||
return false, "This town claim defines a plot. Please remove the plot before removing the claim!"
|
return false, "This town claim defines a plot. Please remove the plot before removing the claim!"
|
||||||
elseif region_equal(p1, pos) and pos['origin'] == true then
|
elseif region_equal(p1, pos) and pos['origin'] == true then
|
||||||
return false, "This town claim is the origin of this town!"
|
return false, "This town claim is the origin of this town!"
|
||||||
@ -214,7 +209,7 @@ function towny.regions:visualize_town(town)
|
|||||||
if not towny.regions.memloaded[town] then return end
|
if not towny.regions.memloaded[town] then return end
|
||||||
for _,pos in pairs(towny.regions.memloaded[town].blocks) do
|
for _,pos in pairs(towny.regions.memloaded[town].blocks) do
|
||||||
towny.regions:visualize_radius(vector.subtract(pos,
|
towny.regions:visualize_radius(vector.subtract(pos,
|
||||||
{x=towny.regions.size/2,y=towny.regions.size/2,z=towny.regions.size/2}))
|
{x=tr/2,y=th/2,z=tr/2}))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
# Towny claim diameter
|
# Towny claim diameter
|
||||||
towny_claim_size (Claim size) int 16
|
towny_claim_size (Claim size) int 16
|
||||||
|
|
||||||
# Towny max claim blocks
|
# Towny claim height
|
||||||
towny_claim_max (Max town claims) int 128
|
towny_claim_size (Claim height) int 64
|
||||||
|
|
||||||
# Towny max claim blocks
|
# Towny max claim blocks
|
||||||
towny_claim_bonus (Claim blocks added per new member) int 8
|
towny_claim_max (Max town claims) int 128
|
||||||
|
|
||||||
# Minimum distance between towns (in claim blocks)
|
# Minimum distance between towns (in claim blocks)
|
||||||
towny_distance (Max town claims) int 80
|
towny_distance (Max town claims) int 80
|
||||||
@ -37,4 +37,4 @@ towny_tax (Enable taxation) bool false
|
|||||||
# Units depend on economy mod used in server
|
# Units depend on economy mod used in server
|
||||||
towny_create_cost (Town creation cost) int 10000
|
towny_create_cost (Town creation cost) int 10000
|
||||||
towny_claim_cost (Town claim block cost) int 1000
|
towny_claim_cost (Town claim block cost) int 1000
|
||||||
towny_upkeep_cost (Town upkeep cost, multiplied by member count) int 10
|
towny_upkeep_cost (Town daily upkeep cost, multiplied by member count) int 10
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 198 B |
94
town.lua
94
town.lua
@ -1,10 +1,17 @@
|
|||||||
local tr = towny.regions.size
|
local tr = towny.regions.size
|
||||||
|
local th = towny.regions.height
|
||||||
|
|
||||||
local function err_msg(player, msg)
|
local function err_msg(player, msg)
|
||||||
minetest.chat_send_player(player, minetest.colorize("#ff1111", msg))
|
minetest.chat_send_player(player, minetest.colorize("#ff1111", msg))
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function count(T)
|
||||||
|
local count = 0
|
||||||
|
for _ in pairs(T) do count = count + 1 end
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
|
||||||
function towny:get_player_town(name)
|
function towny:get_player_town(name)
|
||||||
for town,data in pairs(towny.towns) do
|
for town,data in pairs(towny.towns) do
|
||||||
if data.mayor == name then
|
if data.mayor == name then
|
||||||
@ -56,14 +63,14 @@ function towny:create_town(pos, player, name)
|
|||||||
-- TODO: Economy
|
-- TODO: Economy
|
||||||
|
|
||||||
-- New town information
|
-- New town information
|
||||||
local p1 = vector.add(pos, {x=tr / 2,y=tr - 1,z=tr / 2})
|
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})
|
local p2 = vector.subtract(pos, {x=tr / 2,y=1,z=tr / 2})
|
||||||
local id = minetest.sha1(minetest.hash_node_position(pos))
|
local id = minetest.sha1(minetest.hash_node_position(pos))
|
||||||
local data = {
|
local data = {
|
||||||
name = name,
|
name = name,
|
||||||
mayor = player,
|
mayor = player,
|
||||||
members = {
|
members = {
|
||||||
[player] = {["town_build"] = true, ["plot_build"] = true}
|
[player] = {}
|
||||||
},
|
},
|
||||||
plots = {},
|
plots = {},
|
||||||
flags = {
|
flags = {
|
||||||
@ -85,7 +92,9 @@ function towny:create_town(pos, player, name)
|
|||||||
towny:mark_dirty(id, true)
|
towny:mark_dirty(id, true)
|
||||||
|
|
||||||
minetest.chat_send_player(player, "Your town has successfully been founded!")
|
minetest.chat_send_player(player, "Your town has successfully been founded!")
|
||||||
minetest.chat_send_all(player .. " has started a new town called '" .. name .. "'!")
|
minetest.chat_send_all(("%s has started a new town called '%s'!"):format(player,name))
|
||||||
|
|
||||||
|
minetest.set_node(p1,{name="default:wood"})
|
||||||
|
|
||||||
towny.regions:visualize_area(p1,p2)
|
towny.regions:visualize_area(p1,p2)
|
||||||
|
|
||||||
@ -107,7 +116,7 @@ function towny:extend_town(pos,player)
|
|||||||
return err_msg(player, "You do not have permission to spend claim blocks in your town.")
|
return err_msg(player, "You do not have permission to spend claim blocks in your town.")
|
||||||
end
|
end
|
||||||
|
|
||||||
if data.flags["claim_blocks"] < 1 then
|
if towny:get_claims_available(town) < 1 then
|
||||||
return err_msg(player, "You do not have enough remaining claim blocks!")
|
return err_msg(player, "You do not have enough remaining claim blocks!")
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -125,11 +134,10 @@ function towny:extend_town(pos,player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
table.insert(towny.regions.memloaded[town].blocks, p1)
|
table.insert(towny.regions.memloaded[town].blocks, p1)
|
||||||
data.flags["claim_blocks"] = data.flags["claim_blocks"] - 1
|
minetest.chat_send_player(player, ("Successfully claimed this block! You have %d claim blocks left!"):format(towny:get_claims_available(town)))
|
||||||
minetest.chat_send_player(player, "Successfully claimed this block!")
|
|
||||||
towny:mark_dirty(town, true)
|
towny:mark_dirty(town, true)
|
||||||
|
|
||||||
towny.regions:visualize_radius(vector.subtract(p1, {x=tr/2,y=tr/2,z=tr/2}))
|
towny.regions:visualize_radius(vector.subtract(p1, {x=tr/2,y=th/2,z=tr/2}))
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -159,8 +167,8 @@ function towny:abridge_town(pos,player)
|
|||||||
return err_msg(player, "Failed to abandon claim block: " .. message)
|
return err_msg(player, "Failed to abandon claim block: " .. message)
|
||||||
end
|
end
|
||||||
|
|
||||||
data.flags["claim_blocks"] = data.flags["claim_blocks"] + 1
|
minetest.chat_send_player(player, ("Successfully abandoned this claim block! You now have %d claim blocks available!")
|
||||||
minetest.chat_send_player(player, "Successfully abandoned this claim block!")
|
:format(towny:get_claims_available(town)))
|
||||||
towny:mark_dirty(t, true)
|
towny:mark_dirty(t, true)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
@ -270,7 +278,7 @@ function towny:delete_town(pos,player)
|
|||||||
towny.flatfile:delete_all_meta(t)
|
towny.flatfile:delete_all_meta(t)
|
||||||
|
|
||||||
minetest.chat_send_player(player, "Successfully deleted the town!")
|
minetest.chat_send_player(player, "Successfully deleted the town!")
|
||||||
minetest.chat_send_all("The town '" .. name .. "' has fell into ruin.")
|
minetest.chat_send_all(("The town '%s' has fell into ruin."):format(name))
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -345,7 +353,7 @@ function towny:create_plot(pos,player)
|
|||||||
towny:mark_dirty(t, true)
|
towny:mark_dirty(t, true)
|
||||||
|
|
||||||
minetest.chat_send_player(player, "Successfully created a plot!")
|
minetest.chat_send_player(player, "Successfully created a plot!")
|
||||||
towny.regions:visualize_radius(vector.subtract(c[1], {x=tr/2,y=tr/2,z=tr/2}))
|
towny.regions:visualize_radius(vector.subtract(c[1], {x=tr/2,y=th/2,z=tr/2}))
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -382,7 +390,7 @@ function towny:claim_plot(pos,player)
|
|||||||
towny:mark_dirty(t, false)
|
towny:mark_dirty(t, false)
|
||||||
|
|
||||||
minetest.chat_send_player(player, "Successfully claimed the plot!")
|
minetest.chat_send_player(player, "Successfully claimed the plot!")
|
||||||
towny.regions:visualize_radius(vector.subtract(c[1], {x=tr/2,y=tr/2,z=tr/2}))
|
towny.regions:visualize_radius(vector.subtract(c[1], {x=tr/2,y=th/2,z=tr/2}))
|
||||||
|
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
@ -472,7 +480,7 @@ function towny:plot_member(pos,player,member,action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if not tdata.members[member] then
|
if not tdata.members[member] then
|
||||||
return err_msg(player, "User '"..member.."' is not part of this town.")
|
return err_msg(player, ("User '%s' is not part of this town."):format(member))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Update plot members
|
-- Update plot members
|
||||||
@ -483,11 +491,11 @@ function towny:plot_member(pos,player,member,action)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if member == pdata.owner then
|
if member == pdata.owner then
|
||||||
return err_msg(player, "You cannot "..action_desc.." from this plot.")
|
return err_msg(player, ("You cannot %s from this plot."):format(action_desc))
|
||||||
end
|
end
|
||||||
|
|
||||||
if action == 0 then
|
if action == 0 then
|
||||||
action_desc = "removed "..member.." from"
|
action_desc = ("removed %s from"):format(member)
|
||||||
for mem,dat in pairs(pdata.members) do
|
for mem,dat in pairs(pdata.members) do
|
||||||
if mem ~= member then
|
if mem ~= member then
|
||||||
-- Transfer ownership to the first other member
|
-- Transfer ownership to the first other member
|
||||||
@ -495,14 +503,14 @@ function towny:plot_member(pos,player,member,action)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
action_desc = "added "..member.." to"
|
action_desc = ("added %s to"):format(member)
|
||||||
members = pdata.members
|
members = pdata.members
|
||||||
members[member] = {}
|
members[member] = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
pdata.members = members
|
pdata.members = members
|
||||||
towny:mark_dirty(t, false)
|
towny:mark_dirty(t, false)
|
||||||
minetest.chat_send_player(player, "Successfully "..action_desc.." plot!")
|
minetest.chat_send_player(player, ("Successfully %s plot!"):format(action_desc))
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -555,7 +563,8 @@ function towny:set_plot_flags(pos,player,flag,value)
|
|||||||
return err_msg(player, "You do not have permission to modify this plot.")
|
return err_msg(player, "You do not have permission to modify this plot.")
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.chat_send_player(player, "Successfully set the plot flag '" .. flag .."' to '" .. value .. "'!")
|
minetest.chat_send_player(player, ("Successfully set the plot flag '%s' to '%s'!")
|
||||||
|
:format(flag, value))
|
||||||
plot_data.flags[flag] = flag_typeify(value,pos)
|
plot_data.flags[flag] = flag_typeify(value,pos)
|
||||||
towny:mark_dirty(t, false)
|
towny:mark_dirty(t, false)
|
||||||
end
|
end
|
||||||
@ -593,7 +602,8 @@ function towny:set_plot_member_flags(pos,player,member,flag,value)
|
|||||||
|
|
||||||
if flag == "build" then flag = "plot_build" end
|
if flag == "build" then flag = "plot_build" end
|
||||||
|
|
||||||
minetest.chat_send_player(player, "Successfully set the plot member "..member.."'s flag '" .. flag .."' to '" .. value .. "'!")
|
minetest.chat_send_player(player, ("Successfully set the plot member %s's flag '%s' to '%s'!")
|
||||||
|
:format(member, flag, value))
|
||||||
plot_data.members[member][flag] = flag_typeify(value,pos)
|
plot_data.members[member][flag] = flag_typeify(value,pos)
|
||||||
towny:mark_dirty(t, false)
|
towny:mark_dirty(t, false)
|
||||||
end
|
end
|
||||||
@ -624,12 +634,12 @@ function towny:set_town_flags(pos,player,flag,value)
|
|||||||
return err_msg(player, "You cannot change this flag.")
|
return err_msg(player, "You cannot change this flag.")
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.chat_send_player(player, "Successfully set the town flag '" .. flag .."' to '" .. value .. "'!")
|
minetest.chat_send_player(player, ("Successfully set the town flag '%s' to '%s'!"):format(flag,value))
|
||||||
data.flags[flag] = flag_typeify(value,pos)
|
data.flags[flag] = flag_typeify(value,pos)
|
||||||
towny:mark_dirty(t, false)
|
towny:mark_dirty(t, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Get flags
|
-- Getters
|
||||||
|
|
||||||
function towny:get_flags(town,plot)
|
function towny:get_flags(town,plot)
|
||||||
local tdata = towny.towns[town]
|
local tdata = towny.towns[town]
|
||||||
@ -654,7 +664,47 @@ function towny:get_plot_flags(town,pos,player)
|
|||||||
return towny:get_flags(t,p)
|
return towny:get_flags(t,p)
|
||||||
end
|
end
|
||||||
|
|
||||||
function towny:get_claims_total(town)
|
-- Get used claim blocks
|
||||||
|
function towny:get_claims_used(town)
|
||||||
if not towny.regions.memloaded[town] then return 0 end
|
if not towny.regions.memloaded[town] then return 0 end
|
||||||
return #towny.regions.memloaded[town].blocks
|
return #towny.regions.memloaded[town].blocks
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Get maximum available claim blocks, including bonuses
|
||||||
|
function towny:get_claims_max(town)
|
||||||
|
local tdata = towny.towns[town]
|
||||||
|
if not tdata then return 0 end
|
||||||
|
if not tdata.level then towny:get_town_level(town, true) end
|
||||||
|
local bonus = 0
|
||||||
|
if tdata.flags['claim_blocks'] and tdata.flags['claim_blocks'] > 0 then
|
||||||
|
bonus = tdata.flags['claim_blocks']
|
||||||
|
end
|
||||||
|
return tdata.level.claimblocks + bonus, tdata.level.claimblocks, bonus
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Get available claim blocks
|
||||||
|
function towny:get_claims_available(town)
|
||||||
|
local used = towny:get_claims_used(town)
|
||||||
|
local max = towny:get_claims_max(town)
|
||||||
|
return max - used
|
||||||
|
end
|
||||||
|
|
||||||
|
function towny:get_member_count(town)
|
||||||
|
local tdata = towny.towns[town]
|
||||||
|
if not tdata then return nil end
|
||||||
|
return count(tdata.members)
|
||||||
|
end
|
||||||
|
|
||||||
|
function towny:get_town_level(town, update)
|
||||||
|
local tdata = towny.towns[town]
|
||||||
|
if not tdata then return nil end
|
||||||
|
if tdata.level and not update then return tdata.level end
|
||||||
|
local lvl
|
||||||
|
for _,describe in pairs(towny.levels) do
|
||||||
|
if count(tdata.members) >= describe.members then
|
||||||
|
lvl = describe
|
||||||
|
end
|
||||||
|
end
|
||||||
|
tdata.level = lvl
|
||||||
|
return lvl
|
||||||
|
end
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
-- Visualize an area
|
-- Visualize an area
|
||||||
|
|
||||||
local r1 = towny.regions.size + 1
|
local r1 = towny.regions.size + 1
|
||||||
|
local r2 = towny.regions.height + 1
|
||||||
local c_obj_props = {
|
local c_obj_props = {
|
||||||
hp = 1,
|
hp = 1,
|
||||||
glow = 1,
|
glow = 1,
|
||||||
physical = false,
|
physical = false,
|
||||||
pointable = true,
|
pointable = true,
|
||||||
visual = "cube",
|
visual = "cube",
|
||||||
visual_size = {x = r1, y = r1},
|
visual_size = {x = r1, y = r2},
|
||||||
textures = {"towny_visualize.png","towny_visualize.png","towny_visualize.png",
|
textures = {"towny_visualize.png","towny_visualize.png","towny_visualize.png",
|
||||||
"towny_visualize.png","towny_visualize.png","towny_visualize.png"},
|
"towny_visualize.png","towny_visualize.png","towny_visualize.png"},
|
||||||
static_save = false,
|
static_save = false,
|
||||||
@ -33,7 +34,6 @@ function towny.regions:visualize_radius(pos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function towny.regions:visualize_area(p1,p2)
|
function towny.regions:visualize_area(p1,p2)
|
||||||
local r = towny.regions.size / 2
|
local center = {x=p2.x + r1/2,y=p2.y + r2/2,z=p2.z + r1/2}
|
||||||
local center = {x=p2.x + r,y=p2.y + r,z=p2.z + r}
|
|
||||||
local e = minetest.add_entity(center, "towny:region_visual")
|
local e = minetest.add_entity(center, "towny:region_visual")
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user