2020-04-19 21:35:48 +02:00
|
|
|
local tcname = 'tests.hunger'
|
2020-05-03 16:52:40 +02:00
|
|
|
local lunit = require('lunit')
|
2020-04-19 21:35:48 +02:00
|
|
|
if _VERSION >= 'Lua 5.2' then
|
|
|
|
_ENV = module(tcname, 'seeall')
|
|
|
|
else
|
2020-05-03 16:52:40 +02:00
|
|
|
module(tcname, lunit.testcase, package.seeall)
|
2020-04-19 21:35:48 +02:00
|
|
|
end
|
2017-12-17 14:06:40 +01:00
|
|
|
|
|
|
|
function setup()
|
|
|
|
eressea.free_game()
|
|
|
|
conf = [[{
|
|
|
|
"races": {
|
|
|
|
"demon": {
|
|
|
|
"maintenance": 10,
|
|
|
|
"hp" : 50
|
|
|
|
},
|
|
|
|
"insect": {
|
|
|
|
"maintenance": 10,
|
|
|
|
"hp" : 50
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"terrains" : {
|
|
|
|
"plain": { "flags" : [ "land", "walk" ] },
|
|
|
|
"glacier": { "flags" : [ "arctic", "land", "walk" ] }
|
|
|
|
}
|
|
|
|
}]]
|
|
|
|
|
|
|
|
eressea.config.reset()
|
|
|
|
eressea.config.parse(conf)
|
|
|
|
|
|
|
|
eressea.settings.set("rules.peasants.growth.factor", "0")
|
|
|
|
eressea.settings.set("rules.peasantluck.growth.factor", "0")
|
|
|
|
eressea.settings.set("hunger.damage", "10")
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_maintenance()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create("insect")
|
|
|
|
local u = unit.create(f, r, 2)
|
|
|
|
local flags = u.flags
|
|
|
|
u:add_item('money', 100)
|
|
|
|
|
|
|
|
process_orders()
|
|
|
|
assert_equal(flags, u.flags, "should not be hungry")
|
|
|
|
assert_equal(80, u:get_item('money'), "should pay maintenance")
|
|
|
|
assert_equal(100, u.hp, "should not take damage")
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_demons_eat_peasants()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create("demon")
|
|
|
|
local u = unit.create(f, r, 10)
|
|
|
|
local flags = u.flags
|
|
|
|
u:add_item('money', 120)
|
|
|
|
|
|
|
|
r.peasants = 3
|
|
|
|
process_orders()
|
|
|
|
assert_equal(20, u:get_item('money'))
|
|
|
|
assert_equal(2, r.peasants)
|
|
|
|
assert_equal(flags, u.flags)
|
|
|
|
assert_equal(500, u.hp)
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_demons_need_peasants()
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create("demon")
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
local flags = u.flags
|
|
|
|
u:add_item('money', 100)
|
|
|
|
|
|
|
|
eressea.settings.set("hunger.demon.peasant_tolerance", "0")
|
|
|
|
r.peasants = 0
|
|
|
|
process_orders()
|
|
|
|
assert_equal(90, u:get_item('money')) -- use money even if no peasants
|
|
|
|
assert_equal(flags+2048, u.flags)
|
|
|
|
assert_equal(40, u.hp)
|
|
|
|
|
|
|
|
eressea.settings.set("hunger.demon.peasant_tolerance", "1")
|
|
|
|
u.flags = flags
|
|
|
|
u.hp = 50
|
|
|
|
process_orders()
|
|
|
|
assert_equal(80, u:get_item('money')) -- use money even if no peasants
|
|
|
|
assert_equal(flags+2048, u.flags)
|
|
|
|
assert_equal(50, u.hp)
|
|
|
|
assert_equal(0, r.peasants)
|
|
|
|
end
|
|
|
|
|
|
|
|
function test_insects_hunger_in_glacier()
|
|
|
|
-- bug 2389
|
|
|
|
local r = region.create(0, 0, "plain")
|
|
|
|
local f = faction.create("insect")
|
|
|
|
local u = unit.create(f, r, 1)
|
|
|
|
local flags = u.flags
|
|
|
|
u:add_item('money', 1000)
|
|
|
|
|
|
|
|
-- eressea.settings.set("hunger.insect.cold", "1") -- default
|
|
|
|
process_orders()
|
|
|
|
assert_equal(flags, u.flags)
|
|
|
|
assert_equal(50, u.hp)
|
|
|
|
|
|
|
|
r.terrain = 'glacier'
|
|
|
|
process_orders()
|
|
|
|
assert_equal(flags+2048, u.flags)
|
|
|
|
assert_equal(40, u.hp)
|
|
|
|
|
|
|
|
u.flags = u.flags-2048
|
|
|
|
u.hp = 50
|
|
|
|
eressea.settings.set("hunger.insect.cold", "0")
|
|
|
|
process_orders()
|
|
|
|
assert_equal(flags, u.flags)
|
|
|
|
assert_equal(50, u.hp)
|
|
|
|
end
|