diff --git a/scripts/newplayer.lua b/scripts/newplayer.lua index f554239a2..7fa0827ff 100644 --- a/scripts/newplayer.lua +++ b/scripts/newplayer.lua @@ -1,4 +1,20 @@ -function seed(r, email, race, lang) +dofile("config.lua") +p = require("populate") + +local function read_players() +-- return {{ email = "noreply@mailinator.com", race = "dwarf", lang = "de" }} + local players = {} + local input = open("players.txt", "r") + while input do + local str = input:read("*line") + if str==nil then break end + local email, race, lang = str:match("([^ ]*) ([^ ]*) ([^ ]*)") + table.insert(players, { race = race, lang = lang, email = email }) + end + return players +end + +local function seed(r, email, race, lang) local f = faction.create(email, race, lang) local u = unit.create(f, r) u:set_skill("perception", 30) @@ -17,7 +33,6 @@ function seed(r, email, race, lang) u = nil skills ={ "crossbow", - "mining", "bow", "building", "trade", @@ -32,7 +47,6 @@ function seed(r, email, race, lang) "sailing", "polearm", "espionage", - "quarrying", "roadwork", "tactics", "stealth", @@ -42,6 +56,8 @@ function seed(r, email, race, lang) "stamina" } unit.create(f, r, 50):set_skill("entertainment", 15) + unit.create(f, r, 5):set_skill("mining", 30) + unit.create(f, r, 5):set_skill("quarrying", 30) for _, sk in ipairs(skills) do u = u or unit.create(f, r, 5) if u:set_skill(sk, 15)>0 then u=nil end @@ -49,41 +65,62 @@ function seed(r, email, race, lang) return f end -turn = 923 -dofile("config.lua") -p = require("populate") -eressea.read_game(("%d.dat"):format(turn)) -best = { score = 0, r = nil } -limit = 30000 -sel = p.select(regions(), limit) -for _, r in ipairs(sel) do - score = p.score(r) - if score > best.score then - best.r = r - best.score = score +local function dump_selection(sel) + local best = { score = 0, r = nil } + local r, score + for _, r in ipairs(sel) do + score = p.score(r) + if score > best.score then + best.r = r + best.score = score + end + print(score, r, r.terrain) + end + return best +end + +players = read_players() +local limit = 30000 +local turn = get_turn() +local sel +if #players > 0 then + read_game(turn) + eressea.read_game(("%d.dat"):format(turn)) + sel = p.select(regions(), limit) + if #sel > 0 then + local best = dump_selection(sel) + print("finest region, " .. best.score .. " points: " .. tostring(best.r)) end - print(score, r, r.terrain) end --- print(best.r, best.score) math.randomseed(os.time()) -print(#sel, limit) - -players = { -{ email = "noreply@mailinator.com", race = "dwarf", lang = "de" } -} - +local newbs = {} for _, p in ipairs(players) do local index = math.random(#sel) local start = nil while not start or start.units() do start = sel[index] end - f = seed(start, p.email, p.race or "human", p.lang or "de") - print(f, start) - init_reports() - write_report(f) + local dupe = false + for f in factions() do + if f.email==p.email then + print("seed: duplicate email " .. p.email .. " already used by faction " .. tostring(f)) + dupe = true + break + end + end + if not dupe then + f = seed(start, p.email, p.race or "human", p.lang or "de") + print("new faction ".. tostring(f) .. " starts in ".. tostring(start)) + table.insert(newbs, f) + end end -eressea.write_game(("%d.dat.new"):format(turn)) +if #newbs > 0 then + init_reports() + for _, f in ipairs(newbs) do + write_report(f) + end + eressea.write_game(("%d.dat.new"):format(turn)) +end