Refactor village namegen

This commit is contained in:
Wuzzy 2022-05-09 19:59:05 +02:00
parent f87b82b670
commit 87e44a1cd8
3 changed files with 26 additions and 19 deletions

View File

@ -6,9 +6,9 @@ minetest.register_chatcommand("villages", {
privs = { debug = true }, privs = { debug = true },
func = function(name, param) func = function(name, param)
local list = {} local list = {}
for _, village in pairs(village.villages) do for _, vill in pairs(village.villages) do
-- <Village name>: Coordinates> -- <Village name>: Coordinates>
table.insert(list, "" .. S("@1: @2", village.name, minetest.pos_to_string(village.pos))) table.insert(list, "" .. S("@1: @2", vill.name, minetest.pos_to_string(vill.pos)))
end end
if #list == 0 then if #list == 0 then
return true, S("No villages.") return true, S("No villages.")
@ -29,10 +29,10 @@ minetest.register_chatcommand("find_village", {
return false, S("No player.") return false, S("No player.")
end end
local pos = player:get_pos() local pos = player:get_pos()
local village = village.get_nearest_village(pos) local vill = village.get_nearest_village(pos)
if not village then if not vill then
return true, S("No villages.") return true, S("No villages.")
end end
return true, S("Nearest village is @1 at @2.", village.fname, minetest.pos_to_string(village.pos)) return true, S("Nearest village is @1 at @2.", vill.fname, minetest.pos_to_string(vill.pos))
end, end,
}) })

View File

@ -553,7 +553,7 @@ function after_village_area_emerged(blockpos, action, calls_remaining, params)
minetest.log("info", "[rp_village] Village area emerged at startpos = "..minetest.pos_to_string(pos)) minetest.log("info", "[rp_village] Village area emerged at startpos = "..minetest.pos_to_string(pos))
local name = village.name.generate(pr) local name = village.name.generate(pr, village.name.used)
local depth = pr:next(village.min_size, village.max_size) local depth = pr:next(village.min_size, village.max_size)

View File

@ -10,7 +10,12 @@ village.name.disambiguators = {"nova", "vino", "gemo", "bira", "leno", "gata"}
-- value = true if village name is used -- value = true if village name is used
village.name.used = {} village.name.used = {}
function village.name.generate(pr) -- Generates and returns a random village name.
-- * pr: PseudoRandom object
-- * used_names: Optional. If a table, is a name-index list of used names
--
-- Returns a village name. Sets used_names[<village name>] to true
function village.name.generate(pr, used_names)
local prefix = "" local prefix = ""
local middle = "" local middle = ""
local postfix = "" local postfix = ""
@ -39,19 +44,21 @@ function village.name.generate(pr)
name = name:gsub("^%l", string.upper) name = name:gsub("^%l", string.upper)
-- If name is already taken, append random disambiguators if used_names then
-- (extra suffixes) until the name is unique -- If name is already taken, append random disambiguators
-- Name will be of the form "<Old name>-<Disambiguator>", -- (extra suffixes) until the name is unique
-- e.g. "Iner" will become "Iner-Nova". -- Name will be of the form "<Old name>-<Disambiguator>",
while village.name.used[name] do -- e.g. "Iner" will become "Iner-Nova".
local rnd = pr:next(1, #village.name.disambiguators) while village.name.used[name] do
local disambiguator = village.name.disambiguators[rnd] local rnd = pr:next(1, #village.name.disambiguators)
disambiguator = disambiguator:gsub("^%l", string.upper) local disambiguator = village.name.disambiguators[rnd]
local append = "-" .. disambiguator disambiguator = disambiguator:gsub("^%l", string.upper)
name = name .. append local append = "-" .. disambiguator
end name = name .. append
end
village.name.used[name] = true used_names[name] = true
end
return name return name
end end