server/scripts/eressea/xmasitems.lua
2015-12-31 14:43:38 +01:00

103 lines
2.8 KiB
Lua

local function get_direction(locale, token)
local dir = eressea.locale.direction(locale, token)
if dir and dir>=0 then
return dir
end
return nil
end
local function error_message(msg, u, ord)
local msg = message.create(msg)
msg:set_unit("unit", u)
msg:set_region("region", u.region)
msg:set_order("command", ord)
msg:send_faction(u.faction)
return -1
end
function use_snowglobe(u, amount, token, ord)
local transform = {
ocean = "glacier",
firewall = "volcano",
volcano = "mountain",
desert = "plain"
}
local direction = get_direction(u.faction.locale, token)
if direction then
local r = u.region:next(direction)
if r.units() then
return error_message('target_region_not_empty', u, ord)
end
if r then
local trans = transform[r.terrain]
if trans then
r.terrain = trans
return 1
else
return error_message('target_region_invalid', u, ord)
end
else
return error_message('target_region_invalid', u, ord)
end
end
return error_message('missing_direction', u, ord)
end
function use_snowman(u, amount)
if amount>0 and u.region.terrain == "glacier" then
local man = unit.create(u.faction, u.region)
man.race = "snowman"
man.number = amount
return amount
end
return -4
end
function use_xmastree(u, amount)
if u.region.herb~=nil then
-- TODO: else?
local trees = u.region:get_resource("tree")
u.region:set_key("xm06", true)
u.region:set_resource("tree", 10+trees)
local msg = message.create("usepotion")
msg:set_unit("unit", u)
msg:set_resource("potion", "xmastree")
msg:send_region(u.region)
return amount
end
return 0
end
local self = {}
function self.update()
local turn = get_turn()
local season = get_season(turn)
if season == "calendar::winter" then
eressea.log.debug("it is " .. season .. ", the christmas trees do their magic")
local msg = message.create("xmastree_effect")
for r in regions() do
if r:get_key("xm06") then
trees = r:get_resource("tree")
if trees*0.1>=1 then
r:set_resource("tree", trees * 1.1)
msg:send_region(r)
end
if clear then
end
end
end
else
local prevseason = get_season(turn-1)
if prevseason == "calendar::winter" then
-- we celebrate knut and kick out the trees.
for r in regions() do
if r:get_key("xm06") then
r:set_key("xm06", false)
end
end
end
end
end
return self