forked from github/server
91 lines
1.7 KiB
Lua
91 lines
1.7 KiB
Lua
local function get_markets(r, result)
|
|
local n = 0
|
|
result = result or {}
|
|
|
|
for b in r.buildings do
|
|
if b.type=="market" then
|
|
u = b.owner
|
|
if u~=nil then
|
|
table.insert(result, u)
|
|
n = n + 1
|
|
end
|
|
end
|
|
end
|
|
return n, result
|
|
end
|
|
|
|
local function collect_markets(r, result)
|
|
local result = result or {}
|
|
local n = 0
|
|
n, result = get_markets(r, result)
|
|
for i, r in ipairs(r.adj) do
|
|
if r then
|
|
local x, result = get_markets(r, result)
|
|
n = n + x
|
|
end
|
|
end
|
|
return n, result
|
|
end
|
|
|
|
local function market_action(r)
|
|
local f = r.owner
|
|
local trade = 1000
|
|
if f~=nil and f.race=="halfling" then
|
|
trade = 600
|
|
end
|
|
|
|
local p = r:get_resource("peasant")
|
|
if p > 500 then
|
|
local n, markets = collect_markets(r)
|
|
|
|
if n>0 then
|
|
local give
|
|
if r.luxury~=nil then
|
|
give = {}
|
|
local numlux = p / trade
|
|
for x = 1, numlux do
|
|
local m = 1+math.fmod(rng_int(), n)
|
|
u = markets[m]
|
|
if give[u] then
|
|
give[u] = give[u] + 1
|
|
else
|
|
give[u] = 1
|
|
end
|
|
end
|
|
|
|
for u, v in pairs(give) do
|
|
u:add_item(r.luxury, v)
|
|
end
|
|
end
|
|
|
|
if r.herb~=nil then
|
|
give = {}
|
|
local numherb = p / 500
|
|
for x = 1, numherb do
|
|
local m = 1+math.fmod(rng_int(), n)
|
|
u = markets[m]
|
|
if give[u] then
|
|
give[u] = give[u] + 1
|
|
else
|
|
give[u] = 1
|
|
end
|
|
end
|
|
|
|
for u, v in pairs(give) do
|
|
u:add_item(r.herb, v)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local markets = {}
|
|
local function markets.update()
|
|
local r
|
|
for r in regions() do
|
|
market_action(r)
|
|
end
|
|
end
|
|
|
|
return markets
|