Refactor village namegen

master
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 },
func = function(name, param)
local list = {}
for _, village in pairs(village.villages) do
for _, vill in pairs(village.villages) do
-- <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
if #list == 0 then
return true, S("No villages.")
@ -29,10 +29,10 @@ minetest.register_chatcommand("find_village", {
return false, S("No player.")
end
local pos = player:get_pos()
local village = village.get_nearest_village(pos)
if not village then
local vill = village.get_nearest_village(pos)
if not vill then
return true, S("No villages.")
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,
})

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

View File

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