join_monsters merge conflict

This commit is contained in:
Enno Rehling 2020-05-23 10:19:39 +02:00
commit dc466fef5d
76 changed files with 883 additions and 549 deletions

View File

@ -48,8 +48,12 @@ endif()
find_package(EXPAT REQUIRED) find_package(EXPAT REQUIRED)
find_package (ToLua REQUIRED) find_package (ToLua REQUIRED)
if (TOLUA_FOUND) if (TOLUA_FOUND)
if (${TOLUA_VERSION_STRING} VERSION_EQUAL "5.2") if (${TOLUA_VERSION_STRING} VERSION_EQUAL "5.3")
find_package (Lua 5.3 REQUIRED)
elseif (${TOLUA_VERSION_STRING} VERSION_EQUAL "5.2")
find_package (Lua 5.2 REQUIRED) find_package (Lua 5.2 REQUIRED)
elseif (${TOLUA_VERSION_STRING} VERSION_EQUAL "5.3")
find_package ( Lua 5.3 REQUIRED)
else () else ()
find_package (Lua51 REQUIRED) find_package (Lua51 REQUIRED)
endif() endif()

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
ROOT=$(git rev-parse --show-toplevel) ROOT=$(git rev-parse --show-toplevel)
eval $(luarocks path)
[ -z "$BUILD" ] && BUILD=Debug [ -z "$BUILD" ] && BUILD=Debug
if [ -z "$JOBS" ] ; then if [ -z "$JOBS" ] ; then
if [ -e /usr/sbin/sysctl ]; then if [ -e /usr/sbin/sysctl ]; then

View File

@ -6,6 +6,7 @@ pkg-config --exists sqlite3 && ERESSEA_DB=sqlite
GETOPT=getopt GETOPT=getopt
GETOPT_LONG=1 GETOPT_LONG=1
luarocks install lunitx --local
if [ "Darwin" = "$(uname)" ] ; then if [ "Darwin" = "$(uname)" ] ; then
if [ -x "/usr/local/opt/gnu-getopt/bin/getopt" ] ; then if [ -x "/usr/local/opt/gnu-getopt/bin/getopt" ] ; then
GETOPT="/usr/local/opt/gnu-getopt/bin/getopt" GETOPT="/usr/local/opt/gnu-getopt/bin/getopt"
@ -74,18 +75,19 @@ fi
DEST=$(dirname $ROOT)/server DEST=$(dirname $ROOT)/server
git submodule update --init
LUA_VERSION="5.2" LUA_VERSION="5.2"
LUA_INCLUDE=/usr/include LUA_INCLUDE=/usr/include
LUA_DIR=/usr LUA_DIR=/usr
if [ -d /usr/include/lua5.1 ]; then if [ -d /usr/local/include/lua5.3 ]; then
LUA_VERSION="5.1" LUA_VERSION="5.3"
LUA_INCLUDE=/usr/include/lua5.1 LUA_INCLUDE=/usr/local/include/lua5.3
elif [ -d /usr/include/lua5.2 ]; then elif [ -d /usr/include/lua5.2 ]; then
export LUA_DIR=/usr export LUA_DIR=/usr
LUA_VERSION="5.2" LUA_VERSION="5.2"
LUA_INCLUDE=/usr/include/lua5.2 LUA_INCLUDE=/usr/include/lua5.2
elif [ -d /usr/include/lua5.1 ]; then
LUA_VERSION="5.1"
LUA_INCLUDE=/usr/include/lua5.1
elif [ -d /usr/local/include/lua5.1 ]; then elif [ -d /usr/local/include/lua5.1 ]; then
export LUA_DIR=/usr/local export LUA_DIR=/usr/local
LUA_VERSION="5.1" LUA_VERSION="5.1"

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
set -e set -e
eval $(luarocks path) eval $(luarocks path)
ROOT=$(git rev-parse --show-toplevel) ROOT=$(git rev-parse --show-toplevel)
[ -z $BUILD ] && BUILD=Debug ; export BUILD [ -z $BUILD ] && BUILD=Debug ; export BUILD

View File

@ -6,10 +6,6 @@ local function equip_first(u)
equip_unit(u, name, 255) equip_unit(u, name, 255)
end end
local function equip_demon(u)
u.race_name = 'human'
end
local mysets = { local mysets = {
['first_unit'] = { ['first_unit'] = {
['items'] = { ['items'] = {
@ -82,7 +78,6 @@ local mysets = {
['skills'] = { ['skills'] = {
['stamina'] = 15 ['stamina'] = 15
}, },
['callback'] = equip_demon
}, },
['seed_insect'] = { ['seed_insect'] = {
['items'] = { ['items'] = {

View File

@ -1,6 +1,11 @@
-- Tests that work in all games. With game config of E2. -- Tests that work in all games. With game config of E2.
-- Tests are under scripts/test/e2 and all files must be in scripts/test/e2/init.lua -- Tests are under scripts/test/e2 and all files must be in scripts/test/e2/init.lua
lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
module = lunit.module
end
path = 'scripts' path = 'scripts'
if config.install then if config.install then
path = config.install .. '/' .. path path = config.install .. '/' .. path
@ -9,7 +14,6 @@ package.path = package.path .. ';' .. path .. '/?.lua;' .. path .. '/?/init.lua'
config.rules = 'e2' config.rules = 'e2'
lunit = require 'lunit'
require 'eressea' require 'eressea'
require 'eressea.xmlconf' require 'eressea.xmlconf'
require 'eressea.path' require 'eressea.path'

View File

@ -1,6 +1,11 @@
-- Tests that work in E3. With game config of E3. -- Tests that work in E3. With game config of E3.
-- Tests are under scripts/test/e3 and all files must be in scripts/test/e3/init.lua -- Tests are under scripts/test/e3 and all files must be in scripts/test/e3/init.lua
lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
module = lunit.module
end
path = 'scripts' path = 'scripts'
if config.install then if config.install then
path = config.install .. '/' .. path path = config.install .. '/' .. path
@ -9,7 +14,6 @@ package.path = package.path .. ';' .. path .. '/?.lua;' .. path .. '/?/init.lua'
config.rules = 'e3' config.rules = 'e3'
lunit = require 'lunit'
require 'eressea' require 'eressea'
require 'eressea.path' require 'eressea.path'
require 'eressea.xmlconf' require 'eressea.xmlconf'

View File

@ -1,13 +1,17 @@
-- Basic test without loading XML Config. Test care about needed settings. -- Basic test without loading XML Config. Test care about needed settings.
-- Tests are under scripts/test/ and all files must be in scripts/test/init.lua -- Tests are under scripts/test/ and all files must be in scripts/test/init.lua
lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
module = lunit.module
end
path = 'scripts' path = 'scripts'
if config.install then if config.install then
path = config.install .. '/' .. path path = config.install .. '/' .. path
end end
package.path = package.path .. ';' .. path .. '/?.lua;' .. path .. '/?/init.lua' package.path = package.path .. ';' .. path .. '/?.lua;' .. path .. '/?/init.lua'
lunit = require 'lunit'
require 'eressea' require 'eressea'
require 'eressea.path' require 'eressea.path'
require 'tests' require 'tests'

View File

@ -1,10 +1,13 @@
require "lunit" local tcname = 'tests.bindings'
local lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local eressea = eressea
local _G = _G local _G = _G
module("tests.bindings", lunit.testcase)
function test_eressea() function test_eressea()
assert_equal("function", _G.type(eressea.free_game)) assert_equal("function", _G.type(eressea.free_game))
assert_equal("function", _G.type(eressea.read_game)) assert_equal("function", _G.type(eressea.read_game))

View File

@ -1,4 +1,10 @@
require "lunit" local tcname = 'tests.shared.common'
local lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local function _test_create_ship(r) local function _test_create_ship(r)
local s = ship.create(r, config.ships[1]) local s = ship.create(r, config.ships[1])
@ -26,8 +32,6 @@ local function two_factions()
return f1, f2 return f1, f2
end end
module("tests.common", package.seeall, lunit.testcase)
function setup() function setup()
eressea.free_game() eressea.free_game()
eressea.settings.set("nmr.timeout", "0") eressea.settings.set("nmr.timeout", "0")
@ -894,307 +898,3 @@ function test_walk_and_carry_the_cart()
process_orders() process_orders()
assert_equal(1, u.region.x) assert_equal(1, u.region.x)
end end
module("tests.recruit", package.seeall, lunit.testcase)
function setup()
eressea.free_game()
eressea.settings.set("rules.food.flags", "4")
eressea.settings.set("rules.peasants.growth", "0")
end
function test_bug_1795_limit()
local r = region.create(0, 0, "plain")
local f = create_faction('human')
local u1 = one_unit(r,f)
u1:add_item("money", 100000000)
u1:add_order("REKRUTIEREN 9999")
r:set_resource("peasant", 2000) -- no fractional growth!
local peasants = r:get_resource("peasant")
local limit,frac = math.modf(peasants/40) -- one day this should be a parameter
process_orders()
assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1))
assert_equal(peasants-limit, r:get_resource("peasant"))
end
function test_bug_1795_demons()
local r = region.create(0, 0, "plain")
local f = create_faction('demon')
local u1 = one_unit(r,f)
r:set_resource("peasant", 2000)
local peasants = r:get_resource("peasant")
local limit,frac = math.modf(peasants/40)
u1:add_item("money", 100000000)
u1:add_order("REKRUTIEREN 9999")
process_orders()
assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1))
assert_equal(peasants, r:get_resource("peasant"))
end
module("tests.parser", package.seeall, lunit.testcase)
function setup()
eressea.free_game()
eressea.settings.set("rules.food.flags", "4") -- FOOD_IS_FREE
eressea.settings.set("rules.move.owner_leave", "0")
end
function test_parser()
local r = region.create(0, 0, "mountain")
local f = create_faction('human')
local u = unit.create(f, r, 1)
local filename = "orders.txt"
local file = io.open(filename, "w")
assert_not_nil(file)
f.password = 'Hodor'
file:write('ERESSEA ' .. itoa36(f.id) .. ' "Hodor"\n')
file:write('EINHEIT ' .. itoa36(u.id) .. "\n")
file:write("BENENNEN EINHEIT 'Goldene Herde'\n")
file:close()
eressea.read_orders(filename)
process_orders()
os.remove(filename)
assert_equal("Goldene Herde", u.name)
end
local function set_order(u, str)
u:clear_orders()
u:add_order(str)
end
function test_prefix()
local r0 = region.create(0, 0, "plain")
local f1 = create_faction('human')
local u1 = unit.create(f1, r0, 1)
set_order(u1, "PRAEFIX See")
process_orders()
assert_not_nil(u1:show():find("Seemensch"))
u1.race = "elf"
assert_not_nil(u1:show():find("Seeelf"))
set_order(u1, "PRAEFIX Mond")
process_orders()
assert_not_nil(u1:show():find("Mondelf"))
set_order(u1, "PRAEFIX")
process_orders()
assert_not_nil(u1:show():find("Elf"))
set_order(u1, "PRAEFIX Erz")
process_orders()
assert_not_nil(u1:show():find("Erzelf"))
u1.faction.locale = "en"
assert_not_nil(u1:show():find("archelf"))
end
function test_recruit()
local r = region.create(0, 0, "plain")
local f = create_faction('human')
local u = unit.create(f, r, 1)
u:add_item("money", 1000)
set_order(u, "REKRUTIERE 5")
process_orders()
for u in f.units do
assert_equal(6, u.number)
end
end
function test_give_horses()
local r = region.create(0, 0, "plain")
local f = faction.create("human", "noreply@eressea.de", "de")
local u = unit.create(f, r, 1)
r:set_resource("horse", 0)
u:add_item("horse", 21)
u:add_item("dolphin", 10)
u:add_order("GIB 0 7 PFERD")
u:add_order("GIB 0 5 DELPHIN")
process_orders()
assert_equal(7, r:get_resource("horse"))
assert_equal(5, u:get_item("dolphin"))
assert_equal(14, u:get_item("horse"))
end
function test_give_silver()
local r = region.create(0, 0, "plain")
local f = faction.create("human", "noreply@eressea.de", "de")
local u = unit.create(f, r, 1)
r:set_resource("peasant", 0)
r:set_resource("money", 11)
u:clear_orders()
u:add_item("money", 20)
u:add_order("GIB 0 10 SILBER")
process_orders()
assert_equal(21, r:get_resource("money"))
assert_equal(10, u:get_item("money"))
end
function test_give_horses()
local r = region.create(0, 0, "plain")
local f = create_faction('human')
local u = unit.create(f, r, 1)
r:set_resource("horse", 0)
u:add_item("horse", 21)
u:add_item("dolphin", 10)
u:add_order("GIB 0 7 PFERD")
u:add_order("GIB 0 5 DELPHIN")
process_orders()
assert_equal(7, r:get_resource("horse"))
assert_equal(5, u:get_item("dolphin"))
assert_equal(14, u:get_item("horse"))
end
function test_give_silver()
local r = region.create(0, 0, "plain")
local f = create_faction('human')
local u = unit.create(f, r, 1)
r:set_resource("peasant", 0)
r:set_resource("money", 11)
u:clear_orders()
u:add_item("money", 20)
u:add_order("GIB 0 10 SILBER")
process_orders()
assert_equal(21, r:get_resource("money"))
assert_equal(10, u:get_item("money"))
end
function test_build_castle_one_stage()
local r = region.create(0, 0, 'plain')
local f = faction.create('human')
local u = unit.create(f, r, 2)
u:add_item('stone', 4)
u:set_skill('building', 1)
u:add_order('MACHE BURG')
process_orders()
assert_equal(2, u.building.size)
assert_equal(2, u:get_item('stone'))
end
function test_build_castle()
local r = region.create(0, 0, "plain")
local f = create_faction('human')
local u = unit.create(f, r, 1)
u:add_item('stone', 1)
u:set_skill('building', 1)
u:add_order("MACHE BURG")
process_orders()
assert_not_nil(u.building)
assert_equal(1, u.building.size)
assert_equal(u.building.name, "Burg")
end
function test_route()
local r1 = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")
local f = faction.create("human", "route@example.com")
local u = unit.create(f, r1, 1)
u:add_order("ROUTE O W P")
process_orders()
assert_equal("ROUTE West PAUSE Ost", u:get_order(0))
assert_equal(r2, u.region)
end
function test_route_horse()
local r1 = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")
local f = faction.create("human", "route@example.com")
local u = unit.create(f, r1, 1)
u:add_order("ROUTE O P W P")
u:add_item('horse', 1)
u:set_skill('riding', 1)
process_orders()
assert_equal("ROUTE West PAUSE Ost PAUSE", u:get_order(0))
assert_equal(r2, u.region)
end
function test_route_pause()
local r1 = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")
local f = faction.create("human", "route@example.com")
local u = unit.create(f, r1, 1)
u:add_order("ROUTE P O W")
process_orders()
assert_equal("ROUTE P O W", u:get_order(0))
assert_equal(r1, u.region)
end
function test_immunity_stops_guard()
eressea.settings.set("NewbieImmunity", 2)
local f = faction.create('human')
local r = region.create(0, 0, 'plain')
local u = unit.create(f, r)
u:set_skill('polearm', 2)
u:add_item('lance', 1)
u:add_order('BEWACHE')
process_orders()
assert_equal(f.age, 1)
assert_true(not u.guard)
process_orders()
assert_equal(f.age, 2)
assert_true(u.guard)
end
function test_region_keys()
local r = region.create(0, 0, 'plain')
assert_nil(r:get_key('test'))
assert_nil(r:get_key('more'))
r:set_key('test', 42)
r:set_key('more') -- default is 1
assert_equal(42, r:get_key('test'))
assert_equal(1, r:get_key('more'))
end
function test_faction_keys()
local f = faction.create('human')
assert_nil(f:get_key('test'))
assert_nil(f:get_key('more'))
f:set_key('test', 42)
f:set_key('more') -- default is 1
assert_equal(42, f:get_key('test'))
assert_equal(1, f:get_key('more'))
end
function test_cartmaking()
local f = faction.create('human')
local r = region.create(0, 0, 'plain')
local u = unit.create(f, r)
u:set_skill('cartmaking', 1)
u:add_item('log', 10)
u:add_order('MACHE Wagen')
process_orders()
assert_equal(1, u:get_item('cart'))
assert_equal(5, u:get_item('log'))
end
function test_promote_after_recruit()
local f = faction.create('human')
local r1 = region.create(0, 0, 'plain')
local r2 = region.create(1, 0, 'plain')
local u1 = unit.create(f, r1, 1)
local u2 = unit.create(f, r2, 55)
u2:add_order('REKRUTIERE 1')
u1:add_order('BEFOERDERE')
u1:add_item('money', 57)
u2:add_item('money', 150)
local fl = u1.flags
process_orders()
assert_equal(56, u2.number)
assert_equal(fl + 128, u1.flags) -- UFL_HERO
assert_equal(0, u1:get_item('money'))
end

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.config'
local lunit = require('lunit')
module("tests.eressea.config", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.adamantium'
local lunit = require('lunit')
module("tests.e2.adamantium", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.allies'
local lunit = require('lunit')
module("tests.e2.allies", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.astral'
local lunit = require('lunit')
module("tests.e2.astral", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()
@ -17,7 +21,7 @@ function test_fetch_astral()
local r = region.create(0, 0, "plain") local r = region.create(0, 0, "plain")
local ra = r:get_astral('fog') local ra = r:get_astral('fog')
local rb = region.create(ra.x + 1, ra.y, 'fog') local rb = region.create(ra.x + 1, ra.y, 'fog')
local f = faction.create("human") local f = faction.create("human");
local u1 = unit.create(f, r, 1) local u1 = unit.create(f, r, 1)
local u2 = unit.create(f, r, 1) local u2 = unit.create(f, r, 1)
local u3 = unit.create(f, rb, 1) local u3 = unit.create(f, rb, 1)

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.buildings'
local lunit = require('lunit')
module("tests.e2.buildings", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.carts'
local lunit = require('lunit')
module("tests.e2.carts", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.destroy'
local lunit = require('lunit')
module("tests.e2.destroy", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.features'
local lunit = require('lunit')
module("tests.e2.e2features", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.guard'
local lunit = require('lunit')
module("tests.e2.guard", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -3,7 +3,6 @@ require 'tests.e2.trees'
require 'tests.e2.buildings' require 'tests.e2.buildings'
require 'tests.e2.movement' require 'tests.e2.movement'
require 'tests.e2.carts' require 'tests.e2.carts'
require 'tests.e2.quit'
require 'tests.e2.astral' require 'tests.e2.astral'
require 'tests.e2.spells' require 'tests.e2.spells'
require 'tests.e2.e2features' require 'tests.e2.e2features'
@ -23,6 +22,8 @@ require 'tests.items'
require 'tests.economy' require 'tests.economy'
require 'tests.orders' require 'tests.orders'
require 'tests.common' require 'tests.common'
require 'tests.recruit'
require 'tests.parser'
require 'tests.report' require 'tests.report'
require 'tests.storage' require 'tests.storage'
require 'tests.magicbag' require 'tests.magicbag'
@ -31,3 +32,4 @@ require 'tests.xmas'
require 'tests.production' require 'tests.production'
require 'tests.spells' require 'tests.spells'
require 'tests.undead' require 'tests.undead'

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.insects'
local lunit = require('lunit')
module("tests.e2.insects", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.items'
local lunit = require('lunit')
module("tests.e2.items", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.movement'
local lunit = require('lunit')
module("tests.e2.movement", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.production'
local lunit = require('lunit')
module("tests.e2.production", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.quit'
local lunit = require('lunit')
module("tests.e2.quit", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function test_quit_faction() function test_quit_faction()
local r = region.create(47, 0, "plain") local r = region.create(47, 0, "plain")

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.shiplanding'
local lunit = require('lunit')
module("tests.e2.shiplanding", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.ships'
local lunit = require('lunit')
module("tests.e2.ships", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.spells'
local lunit = require('lunit')
module("tests.e2.spells", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.stealth'
local lunit = require('lunit')
module('tests.e2.stealth', package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local f local f
local u local u

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.trees'
local lunit = require('lunit')
module("tests.e2.trees", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.trolls'
local lunit = require('lunit')
module("tests.e2.trolls", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e2.undead'
local lunit = require('lunit')
module("tests.e2.undead", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.buildings'
local lunit = require('lunit')
module("tests.e3.buildings", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -10,6 +10,8 @@ require 'tests.spells'
require 'tests.economy' require 'tests.economy'
require 'tests.orders' require 'tests.orders'
require 'tests.common' require 'tests.common'
require 'tests.recruit'
require 'tests.parser'
require 'tests.items' require 'tests.items'
require 'tests.magicbag' require 'tests.magicbag'
require 'tests.process' require 'tests.process'

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.items'
local lunit = require('lunit')
module("tests.e3.items", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.morale'
local lunit = require('lunit')
module("tests.e3.morale", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()
@ -171,7 +175,7 @@ function test_morale_change()
run_a_turn() run_a_turn()
assert_equal(4, r.morale) assert_equal(4, r.morale)
-- regel: ohne herrscher fällt die moral jede woche um 1 punkt, bis sie 1 erreicht -- regel: ohne herrscher fällt die moral jede woche um 1 punkt, bis sie 1 erreicht
assert_false(r.is_mourning) assert_false(r.is_mourning)
u1.building = nil u1.building = nil
update_owners() update_owners()
@ -186,7 +190,7 @@ function test_morale_change()
run_a_turn() run_a_turn()
assert_equal(1, r.morale) assert_equal(1, r.morale)
-- ohne herrscher ändert sich auch beschissene Moral nicht: -- ohne herrscher ändert sich auch beschissene Moral nicht:
r.morale = 0 r.morale = 0
run_a_turn() run_a_turn()
assert_equal(0, r.morale) assert_equal(0, r.morale)

View File

@ -1,6 +1,10 @@
require 'lunit' local tcname = 'tests.e3.parser'
local lunit = require('lunit')
module('tests.e3.parser', package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.production'
local lunit = require('lunit')
module("tests.e3.production", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.rules'
local lunit = require('lunit')
module("tests.e3.e3features", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local settings local settings

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.e2spells'
local lunit = require('lunit')
module("tests.e3.spells-e2", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local r, f, u local r, f, u

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.spells'
local lunit = require('lunit')
module("tests.e3.spells", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.e3.stealth'
local lunit = require('lunit')
module("tests.e3.stealth", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local f local f
local u local u

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.economy'
local lunit = require('lunit')
module("tests.economy", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.faction'
local lunit = require('lunit')
module ('tests.eressea.faction', package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local f local f

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.hunger'
local lunit = require('lunit')
module("tests.hunger", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.items'
local lunit = require("lunit")
module("tests.items", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.laws'
local lunit = require('lunit')
module("tests.laws", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()
@ -115,3 +119,4 @@ function test_force_leave_postcombat()
assert_equal(nil, u3.building) assert_equal(nil, u3.building)
assert_equal(1, u3.number) assert_equal(1, u3.number)
end end

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.locale'
local lunit = require('lunit')
module("tests.eressea.locale", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.magicbag'
local lunit = require('lunit')
module("tests.magicbag", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local u local u

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.movement'
local lunit = require("lunit")
module("tests.movement", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname , 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,12 +1,14 @@
require "lunit" local tcname = 'tests.shared.orders'
local lunit = require("lunit")
if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname , 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local _G = _G local _G = _G
local eressea = eressea
local default_ship = config.ships[1] local default_ship = config.ships[1]
local default_building = config.buildings[1] local default_building = config.buildings[1]
module('tests.eressea.orders', package.seeall, lunit.testcase)
local r, f, u local r, f, u
function setup() function setup()

270
scripts/tests/parser.lua Normal file
View File

@ -0,0 +1,270 @@
local tcname = 'tests.shared.parser'
local lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup()
eressea.free_game()
eressea.settings.set("rules.food.flags", "4") -- FOOD_IS_FREE
eressea.settings.set("rules.move.owner_leave", "0")
end
function test_parser()
local r = region.create(0, 0, "mountain")
local f = faction.create('human')
local u = unit.create(f, r, 1)
local filename = "orders.txt"
local file = io.open(filename, "w")
assert_not_nil(file)
f.password = 'Hodor'
file:write('ERESSEA ' .. itoa36(f.id) .. ' "Hodor"\n')
file:write('EINHEIT ' .. itoa36(u.id) .. "\n")
file:write("BENENNEN EINHEIT 'Goldene Herde'\n")
file:close()
eressea.read_orders(filename)
process_orders()
os.remove(filename)
assert_equal("Goldene Herde", u.name)
end
local function set_order(u, str)
u:clear_orders()
u:add_order(str)
end
function test_prefix()
local r0 = region.create(0, 0, "plain")
local f1 = faction.create('human')
local u1 = unit.create(f1, r0, 1)
set_order(u1, "PRAEFIX See")
process_orders()
assert_not_nil(u1:show():find("Seemensch"))
u1.race = "elf"
assert_not_nil(u1:show():find("Seeelf"))
set_order(u1, "PRAEFIX Mond")
process_orders()
assert_not_nil(u1:show():find("Mondelf"))
set_order(u1, "PRAEFIX")
process_orders()
assert_not_nil(u1:show():find("Elf"))
set_order(u1, "PRAEFIX Erz")
process_orders()
assert_not_nil(u1:show():find("Erzelf"))
u1.faction.locale = "en"
assert_not_nil(u1:show():find("archelf"))
end
function test_recruit()
local r = region.create(0, 0, "plain")
local f = faction.create('human')
local u = unit.create(f, r, 1)
u:add_item("money", 1000)
set_order(u, "REKRUTIERE 5")
process_orders()
for u in f.units do
assert_equal(6, u.number)
end
end
function test_give_horses()
local r = region.create(0, 0, "plain")
local f = faction.create("human", "noreply@eressea.de", "de")
local u = unit.create(f, r, 1)
r:set_resource("horse", 0)
u:add_item("horse", 21)
u:add_item("dolphin", 10)
u:add_order("GIB 0 7 PFERD")
u:add_order("GIB 0 5 DELPHIN")
process_orders()
assert_equal(7, r:get_resource("horse"))
assert_equal(5, u:get_item("dolphin"))
assert_equal(14, u:get_item("horse"))
end
function test_give_silver()
local r = region.create(0, 0, "plain")
local f = faction.create("human", "noreply@eressea.de", "de")
local u = unit.create(f, r, 1)
r:set_resource("peasant", 0)
r:set_resource("money", 11)
u:clear_orders()
u:add_item("money", 20)
u:add_order("GIB 0 10 SILBER")
process_orders()
assert_equal(21, r:get_resource("money"))
assert_equal(10, u:get_item("money"))
end
function test_give_horses()
local r = region.create(0, 0, "plain")
local f = faction.create('human')
local u = unit.create(f, r, 1)
r:set_resource("horse", 0)
u:add_item("horse", 21)
u:add_item("dolphin", 10)
u:add_order("GIB 0 7 PFERD")
u:add_order("GIB 0 5 DELPHIN")
process_orders()
assert_equal(7, r:get_resource("horse"))
assert_equal(5, u:get_item("dolphin"))
assert_equal(14, u:get_item("horse"))
end
function test_give_silver()
local r = region.create(0, 0, "plain")
local f = faction.create('human')
local u = unit.create(f, r, 1)
r:set_resource("peasant", 0)
r:set_resource("money", 11)
u:clear_orders()
u:add_item("money", 20)
u:add_order("GIB 0 10 SILBER")
process_orders()
assert_equal(21, r:get_resource("money"))
assert_equal(10, u:get_item("money"))
end
function test_build_castle_one_stage()
local r = region.create(0, 0, 'plain')
local f = faction.create('human')
local u = unit.create(f, r, 2)
u:add_item('stone', 4)
u:set_skill('building', 1)
u:add_order('MACHE BURG')
process_orders()
assert_equal(2, u.building.size)
assert_equal(2, u:get_item('stone'))
end
function test_build_castle()
local r = region.create(0, 0, "plain")
local f = faction.create('human')
local u = unit.create(f, r, 1)
u:add_item('stone', 1)
u:set_skill('building', 1)
u:add_order("MACHE BURG")
process_orders()
assert_not_nil(u.building)
assert_equal(1, u.building.size)
assert_equal(u.building.name, "Burg")
end
function test_route()
local r1 = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")
local f = faction.create("human", "route@example.com")
local u = unit.create(f, r1, 1)
u:add_order("ROUTE O W P")
process_orders()
assert_equal("ROUTE West PAUSE Ost", u:get_order(0))
assert_equal(r2, u.region)
end
function test_route_horse()
local r1 = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")
local f = faction.create("human", "route@example.com")
local u = unit.create(f, r1, 1)
u:add_order("ROUTE O P W P")
u:add_item('horse', 1)
u:set_skill('riding', 1)
process_orders()
assert_equal("ROUTE West PAUSE Ost PAUSE", u:get_order(0))
assert_equal(r2, u.region)
end
function test_route_pause()
local r1 = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")
local f = faction.create("human", "route@example.com")
local u = unit.create(f, r1, 1)
u:add_order("ROUTE P O W")
process_orders()
assert_equal("ROUTE P O W", u:get_order(0))
assert_equal(r1, u.region)
end
function test_immunity_stops_guard()
eressea.settings.set("NewbieImmunity", 2)
local f = faction.create('human')
local r = region.create(0, 0, 'plain')
local u = unit.create(f, r)
u:set_skill('polearm', 2)
u:add_item('lance', 1)
u:add_order('BEWACHE')
process_orders()
assert_equal(f.age, 1)
assert_true(not u.guard)
process_orders()
assert_equal(f.age, 2)
assert_true(u.guard)
end
function test_region_keys()
local r = region.create(0, 0, 'plain')
assert_nil(r:get_key('test'))
assert_nil(r:get_key('more'))
r:set_key('test', 42)
r:set_key('more') -- default is 1
assert_equal(42, r:get_key('test'))
assert_equal(1, r:get_key('more'))
end
function test_faction_keys()
local f = faction.create('human')
assert_nil(f:get_key('test'))
assert_nil(f:get_key('more'))
f:set_key('test', 42)
f:set_key('more') -- default is 1
assert_equal(42, f:get_key('test'))
assert_equal(1, f:get_key('more'))
end
function test_cartmaking()
local f = faction.create('human')
local r = region.create(0, 0, 'plain')
local u = unit.create(f, r)
u:set_skill('cartmaking', 1)
u:add_item('log', 10)
u:add_order('MACHE Wagen')
process_orders()
assert_equal(1, u:get_item('cart'))
assert_equal(5, u:get_item('log'))
end
function test_promote_after_recruit()
local f = faction.create('human')
local r1 = region.create(0, 0, 'plain')
local r2 = region.create(1, 0, 'plain')
local u1 = unit.create(f, r1, 1)
u1.name = 'Xolgrim'
local u2 = unit.create(f, r2, 55)
u2:add_order('REKRUTIERE 1')
u1:add_order('BEFOERDERE')
u1:add_item('money', 57)
u2:add_item('money', 150)
local fl = u1.flags
process_orders()
assert_equal(56, u2.number)
assert_equal(fl + 128, u1.flags) -- UFL_HERO
assert_equal(0, u1:get_item('money'))
end

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.pool'
local lunit = require('lunit')
module("tests.eressea.pool", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.process'
local lunit = require('lunit')
module("tests.process", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
local u, r, f local u, r, f

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.production'
local lunit = require('lunit')
module("tests.production", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

46
scripts/tests/recruit.lua Normal file
View File

@ -0,0 +1,46 @@
local tcname = 'tests.shared.recruit'
local lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup()
eressea.free_game()
eressea.settings.set("rules.food.flags", "4")
eressea.settings.set("rules.peasants.growth", "0")
end
function test_bug_1795_limit()
local r = region.create(0, 0, "plain")
local f = faction.create('human')
local u1 = unit.create(f, r, 1)
u1:add_item("money", 100000000)
u1:add_order("REKRUTIEREN 9999")
r:set_resource("peasant", 2000) -- no fractional growth!
local peasants = r:get_resource("peasant")
local limit,frac = math.modf(peasants/40) -- one day this should be a parameter
process_orders()
assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1))
local np = r:get_resource("peasant")
assert_equal(peasants-limit, np)
end
function test_bug_1795_demons()
local r = region.create(0, 0, "plain")
local f = faction.create('demon')
local u1 = unit.create(f, r, 1)
r:set_resource("peasant", 2000)
local peasants = r:get_resource("peasant")
local limit,frac = math.modf(peasants/40)
u1:add_item("money", 100000000)
u1:add_order("REKRUTIEREN 9999")
process_orders()
assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1))
assert_equal(peasants, r:get_resource("peasant"))
end

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.regions'
local lunit = require('lunit')
module("tests.regions", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.game.reset() eressea.game.reset()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.report'
local lunit = require('lunit')
module("tests.report", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require 'lunit' local tcname = 'tests.settings'
local lunit = require('lunit')
module('tests.eressea.settings', package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,5 +1,10 @@
require 'lunit' local tcname = 'tests.shared.spells'
module("tests.spells", package.seeall, lunit.testcase) local lunit = require('lunit')
if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.storage'
local lunit = require('lunit')
module("tests.storage", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.study'
local lunit = require('lunit')
module("tests.eressea.study", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
conf = [[{ conf = [[{

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.undead'
local lunit = require('lunit')
module("tests.undead", package.seeall, lunit.testcase) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -1,6 +1,10 @@
require "lunit" local tcname = 'tests.shared.xmas'
local lunit = require('lunit')
module("tests.xmas", package.seeall, lunit.testcase ) if _VERSION >= 'Lua 5.2' then
_ENV = module(tcname, 'seeall')
else
module(tcname, lunit.testcase, package.seeall)
end
function setup() function setup()
eressea.free_game() eressea.free_game()

View File

@ -300,9 +300,9 @@ fighter *select_corpse(battle * b, fighter * af)
/* Geflohene haben auch 0 hp, duerfen hier aber nicht ausgewaehlt /* Geflohene haben auch 0 hp, duerfen hier aber nicht ausgewaehlt
* werden! */ * werden! */
int dead = dead_fighters(df); int dead = dead_fighters(df);
if (!playerrace(u_race(df->unit))) const race *rc = u_race(df->unit);
continue; /* Untote sinc für immer tot */
if (!undeadrace(rc)) {
if (af && !helping(af->side, df->side)) if (af && !helping(af->side, df->side))
continue; continue;
if (di < dead) { if (di < dead) {
@ -312,6 +312,7 @@ fighter *select_corpse(battle * b, fighter * af)
} }
} }
} }
}
return NULL; return NULL;
} }
@ -2076,9 +2077,6 @@ static void make_heroes(battle * b)
unit *u = fig->unit; unit *u = fig->unit;
if (fval(u, UFL_HERO)) { if (fval(u, UFL_HERO)) {
int i; int i;
if (!playerrace(u_race(u))) {
log_error("Hero %s is a %s.\n", unitname(u), u_race(u)->_name);
}
for (i = 0; i != u->number; ++i) { for (i = 0; i != u->number; ++i) {
fig->person[i].speed += (rule_hero_speed - 1); fig->person[i].speed += (rule_hero_speed - 1);
} }
@ -2609,11 +2607,12 @@ static void aftermath(battle * b)
for (df = s->fighters; df; df = df->next) { for (df = s->fighters; df; df = df->next) {
unit *du = df->unit; unit *du = df->unit;
int dead = dead_fighters(df); int dead = dead_fighters(df);
const race *rc = u_race(du);
/* tote insgesamt: */ /* tote insgesamt: */
s->dead += dead; s->dead += dead;
/* Tote, die wiederbelebt werde koennen: */ /* Tote, die wiederbelebt werde koennen: */
if (playerrace(u_race(df->unit))) { if (!undeadrace(rc)) {
s->casualties += dead; s->casualties += dead;
} }
if (df->hits + df->kills) { if (df->hits + df->kills) {
@ -2640,6 +2639,7 @@ static void aftermath(battle * b)
for (df = s->fighters; df; df = df->next) { for (df = s->fighters; df; df = df->next) {
unit *du = df->unit; unit *du = df->unit;
const race *rc = u_race(du);
int dead = dead_fighters(df); int dead = dead_fighters(df);
int sum_hp = 0; int sum_hp = 0;
int n; int n;
@ -2732,7 +2732,7 @@ static void aftermath(battle * b)
} }
s->flee += df->run.number; s->flee += df->run.number;
if (playerrace(u_race(du))) { if (!undeadrace(rc)) {
/* tote im kampf werden zu regionsuntoten: /* tote im kampf werden zu regionsuntoten:
* for each of them, a peasant will die as well */ * for each of them, a peasant will die as well */
dead_players += dead; dead_players += dead;
@ -3102,7 +3102,7 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack)
} }
else { else {
building *bld = u->building; building *bld = u->building;
if (bld && bld->sizeleft >= u->number && playerrace(u_race(u))) { if (bld && bld->sizeleft >= u->number && humanoidrace(u_race(u))) {
fig->building = bld; fig->building = bld;
fig->building->sizeleft -= u->number; fig->building->sizeleft -= u->number;
} }

View File

@ -83,7 +83,7 @@ static void chaos(region * r)
case 0: /* Untote */ case 0: /* Untote */
if (!(r->terrain->flags & SEA_REGION)) { if (!(r->terrain->flags & SEA_REGION)) {
unit *u = random_unit(r); unit *u = random_unit(r);
if (u && playerrace(u_race(u))) { if (u && !undeadrace(u_race(u))) {
if (join_monsters(u)) { if (join_monsters(u)) {
ADDMSG(&u->faction->msgs, msg_message("chaos_disease", "unit", u)); ADDMSG(&u->faction->msgs, msg_message("chaos_disease", "unit", u));
u_setrace(u, get_race(RC_GHOUL)); u_setrace(u, get_race(RC_GHOUL));

View File

@ -724,6 +724,7 @@ static void cr_output_spells(stream *out, const unit * u, int maxlevel)
void cr_output_unit(stream *out, const faction * f, void cr_output_unit(stream *out, const faction * f,
const unit * u, seen_mode mode) const unit * u, seen_mode mode)
{ {
const struct locale *lang = crtag_locale();
/* Race attributes are always plural and item attributes always /* Race attributes are always plural and item attributes always
* singular */ * singular */
const char *str; const char *str;
@ -736,7 +737,6 @@ void cr_output_unit(stream *out, const faction * f,
const faction *fother; const faction *fother;
const char *prefix; const char *prefix;
bool allied; bool allied;
const struct locale *lang = f->locale;
assert(u && u->number); assert(u && u->number);
@ -796,17 +796,16 @@ void cr_output_unit(stream *out, const faction * f,
pzTmp = get_racename(u->attribs); pzTmp = get_racename(u->attribs);
if (pzTmp) { if (pzTmp) {
const char *pzRace = locale_string(lang, mkname("race", pzTmp), false); const char *pzRace = pzTmp;
if (pzRace) { const struct race *rc = rc_find(pzTmp);
pzTmp = pzRace; if (rc) {
pzRace = rc_name_s(rc, NAME_PLURAL);
} }
pzRace = translate(pzTmp, locale_string(lang, pzTmp, false)); pzTmp = translate(pzRace, locale_string(lang, pzRace, false));
if (!pzRace) { stream_printf(out, "\"%s\";Typ\n", pzTmp);
pzRace = pzTmp; rc = u_race(u);
} if (u->faction == f && fval(rc, RCF_SHAPESHIFTANY)) {
stream_printf(out, "\"%s\";Typ\n", pzRace); pzRace = rc_name_s(rc, NAME_PLURAL);
if (u->faction == f && fval(u_race(u), RCF_SHAPESHIFTANY)) {
pzRace = rc_name_s(u_race(u), NAME_PLURAL);
stream_printf(out, "\"%s\";wahrerTyp\n", pzRace); stream_printf(out, "\"%s\";wahrerTyp\n", pzRace);
} }
} }
@ -1514,7 +1513,7 @@ static void report_itemtype(FILE *F, faction *f, const item_type *itype) {
static int static int
report_computer(const char *filename, report_context * ctx, const char *bom) report_computer(const char *filename, report_context * ctx, const char *bom)
{ {
static int era = -1; const struct locale *lang = crtag_locale();
int i; int i;
faction *f = ctx->f; faction *f = ctx->f;
const char *prefix, *str; const char *prefix, *str;
@ -1524,6 +1523,7 @@ report_computer(const char *filename, report_context * ctx, const char *bom)
FILE *F = fopen(filename, "w"); FILE *F = fopen(filename, "w");
static const race *rc_human; static const race *rc_human;
static int rc_cache; static int rc_cache;
static int era = -1;
if (era < 0) { if (era < 0) {
era = config_get_int("game.era", 1); era = config_get_int("game.era", 1);
@ -1578,13 +1578,13 @@ report_computer(const char *filename, report_context * ctx, const char *bom)
} }
{ {
const char *zRace = rc_name_s(f->race, NAME_PLURAL); const char *zRace = rc_name_s(f->race, NAME_PLURAL);
fprintf(F, "\"%s\";Typ\n", translate(zRace, LOC(f->locale, zRace))); fprintf(F, "\"%s\";Typ\n", translate(zRace, LOC(lang, zRace)));
} }
prefix = get_prefix(f->attribs); prefix = get_prefix(f->attribs);
if (prefix != NULL) { if (prefix != NULL) {
prefix = mkname("prefix", prefix); prefix = mkname("prefix", prefix);
fprintf(F, "\"%s\";typprefix\n", fprintf(F, "\"%s\";typprefix\n",
translate(prefix, LOC(f->locale, prefix))); translate(prefix, LOC(lang, prefix)));
} }
fprintf(F, "%d;Rekrutierungskosten\n", f->race->recruitcost); fprintf(F, "%d;Rekrutierungskosten\n", f->race->recruitcost);
fprintf(F, "%d;Anzahl Personen\n", f->num_people); fprintf(F, "%d;Anzahl Personen\n", f->num_people);
@ -1637,7 +1637,7 @@ report_computer(const char *filename, report_context * ctx, const char *bom)
if (prefix != NULL) { if (prefix != NULL) {
prefix = mkname("prefix", prefix); prefix = mkname("prefix", prefix);
fprintf(F, "\"%s\";typprefix\n", fprintf(F, "\"%s\";typprefix\n",
translate(prefix, LOC(f->locale, prefix))); translate(prefix, LOC(lang, prefix)));
} }
show_allies_cr(F, f, g); show_allies_cr(F, f, g);
} }

View File

@ -4,6 +4,13 @@
#include "spy.h" #include "spy.h"
#include "travelthru.h" #include "travelthru.h"
#include "attributes/racename.h"
#include "util/keyword.h"
#include <util/language.h>
#include <util/lists.h>
#include <util/message.h>
#include <kernel/ally.h> #include <kernel/ally.h>
#include <kernel/building.h> #include <kernel/building.h>
#include <kernel/faction.h> #include <kernel/faction.h>
@ -16,11 +23,6 @@
#include <kernel/spell.h> #include <kernel/spell.h>
#include <kernel/spellbook.h> #include <kernel/spellbook.h>
#include "util/keyword.h"
#include <util/language.h>
#include <util/lists.h>
#include <util/message.h>
#include <stream.h> #include <stream.h>
#include <memstream.h> #include <memstream.h>
@ -222,6 +224,96 @@ static int cr_get_int(stream *strm, const char *match, int def)
return def; return def;
} }
static bool cr_find_string(stream *strm, const char *match, const char *value)
{
char line[1024];
size_t len = strlen(match);
strm->api->rewind(strm->handle);
while (strm->api->readln(strm->handle, line, sizeof(line))==0) {
if (line[0] == '\"') {
const char * pos = strstr(line + 1, match);
if (pos && pos[len] == '\0') {
size_t vlen = strlen(value);
if (value != NULL && strncmp(line + 1, value, vlen) == 0) {
return (line[vlen + 1] == '\"');
}
return false;
}
}
}
return value == NULL;
}
static void test_cr_hiderace(CuTest *tc) {
stream strm;
faction *f1, *f2;
region *r;
unit *u;
struct locale * lang;
test_setup();
default_locale = test_create_locale();
locale_setstring(default_locale, "race::elf_p", "Elfen");
locale_setstring(default_locale, "race::elf", "elf");
locale_setstring(default_locale, "race::human_p", "Menschen");
locale_setstring(default_locale, "race::human", "Mensch");
lang = get_or_create_locale("en");
locale_setstring(lang, "race::human_p", "humans");
locale_setstring(lang, "race::human", "human");
locale_setstring(lang, "race::elf_p", "elves");
locale_setstring(lang, "race::elf", "elf");
f1 = test_create_faction(NULL);
f2 = test_create_faction(NULL);
r = test_create_region(0, 0, NULL);
u = test_create_unit(f1, r);
mstream_init(&strm);
CuAssertPtrEquals(tc, default_locale, (struct locale *)f1->locale);
CuAssertPtrEquals(tc, default_locale, (struct locale *)f2->locale);
cr_output_unit(&strm, f1, u, seen_unit);
CuAssertTrue(tc, cr_find_string(&strm, ";Typ", "Menschen"));
CuAssertTrue(tc, cr_find_string(&strm, ";wahrerTyp", NULL));
mstream_done(&strm);
mstream_init(&strm);
CuAssertPtrEquals(tc, default_locale, (struct locale *)f1->locale);
CuAssertPtrEquals(tc, default_locale, (struct locale *)f2->locale);
cr_output_unit(&strm, f2, u, seen_unit);
CuAssertTrue(tc, cr_find_string(&strm, ";Typ", "Menschen"));
CuAssertTrue(tc, cr_find_string(&strm, ";wahrerTyp", NULL));
mstream_done(&strm);
/* when we use irace, the owner can see the true race */
f1->locale = lang;
u->irace = test_create_race("elf");
mstream_init(&strm);
cr_output_unit(&strm, f1, u, seen_unit);
CuAssertTrue(tc, cr_find_string(&strm, ";Typ", "Elfen"));
CuAssertTrue(tc, cr_find_string(&strm, ";wahrerTyp", "Menschen"));
mstream_done(&strm);
mstream_init(&strm);
cr_output_unit(&strm, f2, u, seen_unit);
CuAssertTrue(tc, cr_find_string(&strm, ";Typ", "Elfen"));
CuAssertTrue(tc, cr_find_string(&strm, ";wahrerTyp", NULL));
mstream_done(&strm);
/* when we use racename, nobody can tell it's not the real deal */
u->irace = NULL;
set_racename(&u->attribs, "Zwerge");
mstream_init(&strm);
cr_output_unit(&strm, f1, u, seen_unit);
CuAssertTrue(tc, cr_find_string(&strm, ";Typ", "Zwerge"));
CuAssertTrue(tc, cr_find_string(&strm, ";wahrerTyp", NULL));
mstream_done(&strm);
mstream_init(&strm);
cr_output_unit(&strm, f2, u, seen_unit);
CuAssertTrue(tc, cr_find_string(&strm, ";Typ", "Zwerge"));
CuAssertTrue(tc, cr_find_string(&strm, ";wahrerTyp", NULL));
mstream_done(&strm);
test_teardown();
}
static void test_cr_factionstealth(CuTest *tc) { static void test_cr_factionstealth(CuTest *tc) {
stream strm; stream strm;
faction *f1, *f2; faction *f1, *f2;
@ -326,6 +418,7 @@ CuSuite *get_creport_suite(void)
SUITE_ADD_TEST(suite, test_cr_unit); SUITE_ADD_TEST(suite, test_cr_unit);
SUITE_ADD_TEST(suite, test_cr_resources); SUITE_ADD_TEST(suite, test_cr_resources);
SUITE_ADD_TEST(suite, test_cr_mallorn); SUITE_ADD_TEST(suite, test_cr_mallorn);
SUITE_ADD_TEST(suite, test_cr_hiderace);
SUITE_ADD_TEST(suite, test_cr_factionstealth); SUITE_ADD_TEST(suite, test_cr_factionstealth);
return suite; return suite;
} }

View File

@ -385,6 +385,9 @@ message * give_ship(unit *u1, unit *u2, int n, order *ord)
} }
} }
else { else {
if (u2->building) {
leave_building(u2);
}
if (n < u1->ship->number) { if (n < u1->ship->number) {
ship * sh = new_ship(u1->ship->type, u1->region, u1->faction->locale); ship * sh = new_ship(u1->ship->type, u1->region, u1->faction->locale);
scale_ship(sh, 0); scale_ship(sh, 0);

View File

@ -279,12 +279,10 @@ unit *addplayer(region * r, faction * f)
u->hp = unit_max_hp(u) * u->number; u->hp = unit_max_hp(u) * u->number;
fset(u, UFL_ISNEW); fset(u, UFL_ISNEW);
if (f->race == get_race(RC_DAEMON)) { if (f->race == get_race(RC_DAEMON)) {
race_t urc;
const race *rc; const race *rc;
do { int urc = (race_t)(rng_int() % MAX_START_RACE);
urc = (race_t)(rng_int() % MAXRACES); if (urc >= RC_DAEMON) ++urc;
rc = get_race(urc); rc = get_race(urc);
} while (rc == NULL || urc == RC_DAEMON || !playerrace(rc));
u->irace = rc; u->irace = rc;
} }
f->lastorders = turn; f->lastorders = turn;

View File

@ -48,16 +48,14 @@ int num_races = 0;
static int rc_changes = 1; static int rc_changes = 1;
const char *racenames[MAXRACES] = { const char *racenames[MAXRACES] = {
"dwarf", "elf", NULL, "goblin", "human", "troll", "demon", "insect", "dwarf", "elf", "goblin", "human", "troll", "demon", "insect",
"halfling", "cat", "aquarian", "orc", "snotling", "undead", NULL, "halfling", "cat", "aquarian", "orc", "snotling", "undead",
"youngdragon", "dragon", "wyrm", "ent", "catdragon", "dracoid", "youngdragon", "dragon", "wyrm", "ent", "catdragon", "dracoid",
NULL, NULL, "irongolem", "stonegolem", "shadowdemon", "irongolem", "stonegolem", "shadowdemon",
"shadowmaster", "mountainguard", "alp", "toad", "braineater", "peasant", "shadowmaster", "mountainguard", "alp", "toad", "braineater", "peasant",
"wolf", NULL, NULL, NULL, NULL, "songdragon", NULL, "wolf", "songdragon", "seaserpent",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, "shadowknight", "skeleton", "skeletonlord", "zombie",
NULL, NULL, NULL, NULL, NULL, "seaserpent", "juju", "ghoul", "ghast", "template",
"shadowknight", NULL, "skeleton", "skeletonlord", "zombie",
"juju", "ghoul", "ghast", NULL, NULL, "template",
"clone" "clone"
}; };

View File

@ -35,7 +35,7 @@ extern "C" {
typedef enum { typedef enum {
RC_DWARF, /* 0 - Zwerg */ RC_DWARF, /* 0 - Zwerg */
RC_ELF, RC_ELF,
RC_GOBLIN = 3, RC_GOBLIN,
RC_HUMAN, RC_HUMAN,
RC_TROLL, RC_TROLL,
RC_DAEMON, RC_DAEMON,
@ -44,17 +44,19 @@ extern "C" {
RC_CAT, RC_CAT,
RC_AQUARIAN, RC_AQUARIAN,
RC_ORC, RC_ORC,
/* last of the addplayer races */
RC_SNOTLING, RC_SNOTLING,
RC_UNDEAD, RC_UNDEAD,
RC_FIREDRAGON = 15, RC_FIREDRAGON,
RC_DRAGON, RC_DRAGON,
RC_WYRM, RC_WYRM,
RC_TREEMAN, RC_TREEMAN,
RC_BIRTHDAYDRAGON, RC_BIRTHDAYDRAGON,
RC_DRACOID, RC_DRACOID,
RC_IRONGOLEM = 23, RC_IRONGOLEM,
RC_STONEGOLEM, RC_STONEGOLEM,
RC_SHADOW, RC_SHADOW,
RC_SHADOWLORD, RC_SHADOWLORD,
@ -63,25 +65,27 @@ extern "C" {
RC_TOAD, RC_TOAD,
RC_HIRNTOETER, RC_HIRNTOETER,
RC_PEASANT, RC_PEASANT,
RC_WOLF = 32, RC_WOLF,
RC_SONGDRAGON = 37, RC_SONGDRAGON,
RC_SEASERPENT = 51, RC_SEASERPENT,
RC_SHADOWKNIGHT, RC_SHADOWKNIGHT,
RC_SKELETON = 54, RC_SKELETON,
RC_SKELETON_LORD, RC_SKELETON_LORD,
RC_ZOMBIE, RC_ZOMBIE,
RC_ZOMBIE_LORD, RC_ZOMBIE_LORD,
RC_GHOUL, RC_GHOUL,
RC_GHOUL_LORD, RC_GHOUL_LORD,
RC_TEMPLATE = 62, RC_TEMPLATE,
RC_CLONE, RC_CLONE,
MAXRACES, MAXRACES,
NORACE = -1 NORACE = -1
} race_t; } race_t;
#define MAX_START_RACE RC_ORC
extern int num_races; extern int num_races;
extern const char *racenames[MAXRACES]; extern const char *racenames[MAXRACES];
@ -241,6 +245,7 @@ extern "C" {
#define playerrace(rc) ((rc)->flags & RCF_PLAYABLE) #define playerrace(rc) ((rc)->flags & RCF_PLAYABLE)
#define dragonrace(rc) ((rc)->flags & RCF_DRAGON) #define dragonrace(rc) ((rc)->flags & RCF_DRAGON)
#define humanoidrace(rc) (((rc)->flags & RCF_UNDEAD) || (rc)==get_race(RC_DRACOID) || playerrace(rc)) #define humanoidrace(rc) (((rc)->flags & RCF_UNDEAD) || (rc)==get_race(RC_DRACOID) || playerrace(rc))
#define undeadrace(rc) (((rc)->flags & RCF_UNDEAD) || (rc)==get_race(RC_DRACOID))
#define illusionaryrace(rc) ((rc)->flags & RCF_ILLUSIONARY) #define illusionaryrace(rc) ((rc)->flags & RCF_ILLUSIONARY)
bool allowed_dragon(const struct region *src, bool allowed_dragon(const struct region *src,

View File

@ -376,7 +376,7 @@ unit *read_unit(gamedata *data)
{ {
unit *u; unit *u;
const race *rc; const race *rc;
int number, n, p; int number, n, p, bn, sn;
order **orderp; order **orderp;
char obuf[DISPLAYSIZE]; char obuf[DISPLAYSIZE];
faction *f; faction *f;
@ -443,9 +443,10 @@ unit *read_unit(gamedata *data)
else else
u->irace = NULL; u->irace = NULL;
READ_INT(data->store, &n); READ_INT(data->store, &bn);
if (n > 0) { READ_INT(data->store, &sn);
building * b = findbuilding(n); if (sn <= 0 && bn > 0) {
building * b = findbuilding(bn);
if (b) { if (b) {
u_set_building(u, b); u_set_building(u, b);
if (fval(u, UFL_OWNER)) { if (fval(u, UFL_OWNER)) {
@ -453,13 +454,12 @@ unit *read_unit(gamedata *data)
} }
} }
else { else {
log_error("read_unit: unit in unkown building '%s'", itoa36(n)); log_error("read_unit: unit in unkown building '%s'", itoa36(bn));
} }
} }
READ_INT(data->store, &n); if (sn > 0) {
if (n > 0) { ship * sh = findship(sn);
ship * sh = findship(n);
if (sh) { if (sh) {
u_set_ship(u, sh); u_set_ship(u, sh);
if (fval(u, UFL_OWNER)) { if (fval(u, UFL_OWNER)) {
@ -467,7 +467,7 @@ unit *read_unit(gamedata *data)
} }
} }
else { else {
log_error("read_unit: unit in unkown ship '%s'", itoa36(n)); log_error("read_unit: unit in unkown ship '%s'", itoa36(sn));
} }
} }

View File

@ -635,7 +635,7 @@ void leave_ship(unit * u)
{ {
struct ship *sh = u->ship; struct ship *sh = u->ship;
u->ship = 0; u->ship = NULL;
if (sh->_owner == u) { if (sh->_owner == u) {
ship_update_owner(sh); ship_update_owner(sh);
sh->_owner = ship_owner(sh); sh->_owner = ship_owner(sh);

View File

@ -684,7 +684,7 @@ growing_trees(region * r, const season_t current_season, const season_t last_wee
a->data.sa[0] = (short)cap_int(rtrees(r, 0), 0, SHRT_MAX); a->data.sa[0] = (short)cap_int(rtrees(r, 0), 0, SHRT_MAX);
a->data.sa[1] = (short)cap_int(rtrees(r, 1), 0, SHRT_MAX); a->data.sa[1] = (short)cap_int(rtrees(r, 1), 0, SHRT_MAX);
} }
else if (a->data.sa[0] < 0 || a->data.sa[1] << 0) { else if (a->data.sa[0] < 0 || a->data.sa[1] < 0) {
a->data.sa[0] = (short)cap_int(a->data.sa[0], 0, SHRT_MAX); a->data.sa[0] = (short)cap_int(a->data.sa[0], 0, SHRT_MAX);
a->data.sa[1] = (short)cap_int(a->data.sa[1], 0, SHRT_MAX); a->data.sa[1] = (short)cap_int(a->data.sa[1], 0, SHRT_MAX);
} }

View File

@ -1399,7 +1399,7 @@ static int heal_fighters(selist * fgs, int *power, bool heal_monsters)
continue; continue;
/* wir heilen erstmal keine Monster */ /* wir heilen erstmal keine Monster */
if (heal_monsters || playerrace(u_race(df->unit))) { if (heal_monsters || !undeadrace(u_race(df->unit))) {
int n, hp = df->unit->hp / df->unit->number; int n, hp = df->unit->hp / df->unit->number;
int rest = df->unit->hp % df->unit->number; int rest = df->unit->hp % df->unit->number;