forked from github/server
Merge remote-tracking branch 'upstream/develop'
This commit is contained in:
commit
300608586f
|
@ -1,3 +1,4 @@
|
||||||
|
*.orig
|
||||||
eressea.ini
|
eressea.ini
|
||||||
Debug
|
Debug
|
||||||
Release
|
Release
|
||||||
|
@ -18,7 +19,6 @@ ipch/
|
||||||
*.opensdf
|
*.opensdf
|
||||||
*.pdb
|
*.pdb
|
||||||
*.sdf
|
*.sdf
|
||||||
*.sh
|
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
|
|
||||||
|
@ -37,3 +37,9 @@ game-e3/reports/
|
||||||
tags
|
tags
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
.gdb_history
|
.gdb_history
|
||||||
|
*.cfg
|
||||||
|
*.cmd
|
||||||
|
tmp/
|
||||||
|
tests/config.lua
|
||||||
|
tests/reports/
|
||||||
|
tests/data/185.dat
|
||||||
|
|
|
@ -1,31 +1,34 @@
|
||||||
[submodule "lunit"]
|
[submodule "lunit"]
|
||||||
path = lunit
|
path = lunit
|
||||||
url = git://github.com/badgerman/lunit.git
|
url = git://github.com/ennorehling/lunit.git
|
||||||
[submodule "crypto"]
|
[submodule "crypto"]
|
||||||
path = crypto
|
path = crypto
|
||||||
url = git://github.com/badgerman/crypto.git
|
url = git://github.com/ennorehling/crypto.git
|
||||||
[submodule "cmake"]
|
[submodule "cmake"]
|
||||||
path = cmake
|
path = cmake
|
||||||
url = git://github.com/badgerman/cmake.git
|
url = git://github.com/ennorehling/cmake.git
|
||||||
[submodule "quicklist"]
|
[submodule "quicklist"]
|
||||||
path = quicklist
|
path = quicklist
|
||||||
url = git://github.com/badgerman/quicklist.git
|
url = git://github.com/ennorehling/quicklist.git
|
||||||
[submodule "critbit"]
|
[submodule "critbit"]
|
||||||
path = critbit
|
path = critbit
|
||||||
url = git://github.com/badgerman/critbit.git
|
url = git://github.com/ennorehling/critbit.git
|
||||||
[submodule "dlmalloc"]
|
[submodule "dlmalloc"]
|
||||||
path = dlmalloc
|
path = dlmalloc
|
||||||
url = git://github.com/badgerman/dlmalloc.git
|
url = git://github.com/ennorehling/dlmalloc.git
|
||||||
[submodule "cutest"]
|
[submodule "cutest"]
|
||||||
path = cutest
|
path = cutest
|
||||||
url = git://github.com/badgerman/cutest.git
|
url = git://github.com/ennorehling/cutest.git
|
||||||
[submodule "iniparser"]
|
[submodule "iniparser"]
|
||||||
path = iniparser
|
path = iniparser
|
||||||
url = git://github.com/badgerman/iniparser.git
|
url = git://github.com/ennorehling/iniparser.git
|
||||||
[submodule "cJSON"]
|
[submodule "cJSON"]
|
||||||
path = cJSON
|
path = cJSON
|
||||||
url = git://github.com/badgerman/cJSON.git
|
url = git://github.com/ennorehling/cJSON.git
|
||||||
[submodule "storage"]
|
[submodule "storage"]
|
||||||
path = storage
|
path = storage
|
||||||
url = git://github.com/badgerman/storage.git
|
url = git://github.com/ennorehling/storage.git
|
||||||
branch = master
|
branch = master
|
||||||
|
[submodule "tolua"]
|
||||||
|
path = tolua
|
||||||
|
url = git://github.com/ennorehling/tolua.git
|
||||||
|
|
16
.travis.yml
16
.travis.yml
|
@ -1,11 +1,19 @@
|
||||||
|
sudo: false
|
||||||
language: c
|
language: c
|
||||||
compiler:
|
compiler:
|
||||||
- gcc
|
- gcc
|
||||||
- clang
|
- clang
|
||||||
script: s/travis-build
|
script: s/travis-build
|
||||||
before_install:
|
addons:
|
||||||
- sudo apt-get update -qq
|
apt:
|
||||||
- sudo apt-get install -qq zlib1g-dev libtolua-dev liblua5.1-dev libncurses5-dev libsqlite3-dev libxml2-dev valgrind
|
packages:
|
||||||
|
- liblua5.2-dev
|
||||||
|
- libncurses5-dev
|
||||||
|
- libsqlite3-dev
|
||||||
|
- libxml2-dev
|
||||||
|
- valgrind
|
||||||
os:
|
os:
|
||||||
- linux
|
- linux
|
||||||
- osx
|
notifications:
|
||||||
|
slack:
|
||||||
|
secure: F89aXLWaE125PaJIlETv12jT4EfH6wLXJmGCPZzrN3OcLn2ahDWqjwuzR7lOEDf2nAISmeMPyDZMhEHXLNHAE5qP6lg9yliYQw5hzGmDK9m1xUq/pPEne/b2Y7K3my1mkRZ6n3asbHgSmBWAfCIk1JN8R5Rv+rmbLuWLc+zofts=
|
||||||
|
|
|
@ -8,6 +8,11 @@ project (eressea-server C)
|
||||||
|
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
find_package (LibXml2)
|
||||||
|
find_package (SQLite3)
|
||||||
|
find_package (Curses)
|
||||||
|
find_package (Lua REQUIRED)
|
||||||
|
find_package (ToLua REQUIRED)
|
||||||
|
|
||||||
INCLUDE (CheckIncludeFiles)
|
INCLUDE (CheckIncludeFiles)
|
||||||
INCLUDE (CheckSymbolExists)
|
INCLUDE (CheckSymbolExists)
|
||||||
|
@ -57,13 +62,6 @@ CONFIGURE_FILE (
|
||||||
INCLUDE_DIRECTORIES (${CMAKE_BINARY_DIR}/include)
|
INCLUDE_DIRECTORIES (${CMAKE_BINARY_DIR}/include)
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_AUTOCONF")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_AUTOCONF")
|
||||||
|
|
||||||
|
|
||||||
find_package (LibXml2)
|
|
||||||
find_package (SQLite3)
|
|
||||||
find_package (Curses)
|
|
||||||
find_package (Lua REQUIRED)
|
|
||||||
find_package (ToLua REQUIRED)
|
|
||||||
|
|
||||||
add_subdirectory (cutest)
|
add_subdirectory (cutest)
|
||||||
add_subdirectory (crypto)
|
add_subdirectory (crypto)
|
||||||
add_subdirectory (cJSON)
|
add_subdirectory (cJSON)
|
||||||
|
@ -75,4 +73,4 @@ add_subdirectory (src eressea)
|
||||||
install(DIRECTORY res conf DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.xml")
|
install(DIRECTORY res conf DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.xml")
|
||||||
install(DIRECTORY res conf DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.json")
|
install(DIRECTORY res conf DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.json")
|
||||||
install(DIRECTORY scripts DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.lua")
|
install(DIRECTORY scripts DESTINATION ${CMAKE_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.lua")
|
||||||
|
install(DIRECTORY share DESTINATION ${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -1,5 +1,9 @@
|
||||||
all:
|
all:
|
||||||
@echo "Please use the cmake build system by running configure"
|
s/build
|
||||||
|
|
||||||
|
test:
|
||||||
|
s/runtests
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
@rm -f *.log.*
|
||||||
@find . -name "*~" | xargs rm -f
|
@find . -name "*~" | xargs rm -f
|
||||||
|
|
2
cmake
2
cmake
|
@ -1 +1 @@
|
||||||
Subproject commit cd779ba36efb4045a040af170588a8dfe496d7b9
|
Subproject commit f1fb3943ace59994d90d71a891b80033dc2700a2
|
|
@ -1,5 +1,40 @@
|
||||||
{
|
{
|
||||||
"include": [
|
"include": [
|
||||||
"keywords.json"
|
"keywords.json",
|
||||||
]
|
"prefixes.json",
|
||||||
|
"e2/terrains.json"
|
||||||
|
],
|
||||||
|
"disabled": [
|
||||||
|
"pay",
|
||||||
|
"jsreport"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"game.id": 2,
|
||||||
|
"game.name": "Eressea",
|
||||||
|
"NewbieImmunity": 8,
|
||||||
|
"modules.wormholes": true,
|
||||||
|
"entertain.base": 0,
|
||||||
|
"entertain.perlevel": 20,
|
||||||
|
"nmr.timeout": 5,
|
||||||
|
"nmr.removenewbie": 0,
|
||||||
|
"GiveRestriction": 3,
|
||||||
|
"hunger.long": true,
|
||||||
|
"init_spells": 0,
|
||||||
|
"world.era": 2,
|
||||||
|
"seed.population.min": 8,
|
||||||
|
"seed.population.max": 8,
|
||||||
|
"rules.ship.damage_drift": 0.00,
|
||||||
|
"rules.reserve.twophase": true,
|
||||||
|
"rules.give.max_men": -1,
|
||||||
|
"rules.check_overload": false,
|
||||||
|
"rules.limit.faction": 2500,
|
||||||
|
"rules.maxskills.magic": 5,
|
||||||
|
"rules.guard.base_stop_prob": 0.30,
|
||||||
|
"rules.guard.skill_stop_prob": 0.05,
|
||||||
|
"rules.guard.amulet_stop_prob": 0.10,
|
||||||
|
"rules.guard.guard_number_stop_prob": 0.001,
|
||||||
|
"rules.guard.castle_stop_prob": 0.05,
|
||||||
|
"rules.guard.region_type_stop_prob": 0.05,
|
||||||
|
"rules.economy.repopulate_maximum": 500
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,12 +16,9 @@
|
||||||
<xi:include href="config://core/common/potions.xml" />
|
<xi:include href="config://core/common/potions.xml" />
|
||||||
<xi:include href="config://core/spoils.xml"/>
|
<xi:include href="config://core/spoils.xml"/>
|
||||||
<xi:include href="config://game/races.xml"/>
|
<xi:include href="config://game/races.xml"/>
|
||||||
<xi:include href="config://core/prefixes.xml"/>
|
|
||||||
<xi:include href="config://core/ships.xml"/>
|
<xi:include href="config://core/ships.xml"/>
|
||||||
<xi:include href="config://core/common/buildings.xml"/>
|
<xi:include href="config://core/common/buildings.xml"/>
|
||||||
<xi:include href="config://game/familiars.xml"/>
|
<xi:include href="config://game/familiars.xml"/>
|
||||||
<xi:include href="config://core/terrains.xml"/>
|
|
||||||
<xi:include href="config://game/terrains.xml"/>
|
|
||||||
<xi:include href="config://game/artrewards.xml"/>
|
<xi:include href="config://game/artrewards.xml"/>
|
||||||
<xi:include href="config://game/buildings.xml"/>
|
<xi:include href="config://game/buildings.xml"/>
|
||||||
<xi:include href="config://core/calendar.xml"/>
|
<xi:include href="config://core/calendar.xml"/>
|
||||||
|
@ -33,10 +30,17 @@
|
||||||
<xi:include href="config://default/adamantium.xml"/>
|
<xi:include href="config://default/adamantium.xml"/>
|
||||||
<equipment>
|
<equipment>
|
||||||
<set name="first_unit">
|
<set name="first_unit">
|
||||||
<item name="conquesttoken" amount="1"/>
|
<item name="log" amount="50"/>
|
||||||
<item name="log" amount="30"/>
|
<item name="stone" amount="50"/>
|
||||||
<item name="stone" amount="30"/>
|
<item name="iron" amount="50"/>
|
||||||
<item name="money" amount="4200"/>
|
<item name="laen" amount="10"/>
|
||||||
|
<item name="sword" amount="1"/>
|
||||||
|
<item name="mallorn" amount="10"/>
|
||||||
|
<item name="skillpotion" amount="5"/>
|
||||||
|
<item name="p2" amount="5"/>
|
||||||
|
<item name="money" amount="20000"/>
|
||||||
|
<skill name="perception" level="30"/>
|
||||||
|
<skill name="melee" level="1"/>
|
||||||
</set>
|
</set>
|
||||||
<set name="new_faction">
|
<set name="new_faction">
|
||||||
<item name="adamantium" amount="1"/>
|
<item name="adamantium" amount="1"/>
|
||||||
|
@ -48,70 +52,6 @@
|
||||||
<xi:include href="config://default/names-zombies.xml"/>
|
<xi:include href="config://default/names-zombies.xml"/>
|
||||||
<xi:include href="config://default/names-ghouls.xml"/>
|
<xi:include href="config://default/names-ghouls.xml"/>
|
||||||
<xi:include href="config://default/names-dragons.xml"/>
|
<xi:include href="config://default/names-dragons.xml"/>
|
||||||
|
|
||||||
<game name="Eressea">
|
|
||||||
<!-- Game specific settings -->
|
|
||||||
|
|
||||||
<order name="pay" disable="yes"/>
|
|
||||||
|
|
||||||
<skill name="alchemy" enable="true"/>
|
|
||||||
<skill name="crossbow" enable="true"/>
|
|
||||||
<skill name="mining" enable="true"/>
|
|
||||||
<skill name="bow" enable="true"/>
|
|
||||||
<skill name="building" enable="true"/>
|
|
||||||
<skill name="trade" enable="true"/>
|
|
||||||
<skill name="forestry" enable="true"/>
|
|
||||||
<skill name="catapult" enable="true"/>
|
|
||||||
<skill name="herbalism" enable="true"/>
|
|
||||||
<skill name="magic" enable="true"/>
|
|
||||||
<skill name="training" enable="true"/>
|
|
||||||
<skill name="riding" enable="true"/>
|
|
||||||
<skill name="armorer" enable="true"/>
|
|
||||||
<skill name="shipcraft" enable="true"/>
|
|
||||||
<skill name="melee" enable="true"/>
|
|
||||||
<skill name="sailing" enable="true"/>
|
|
||||||
<skill name="polearm" enable="true"/>
|
|
||||||
<skill name="espionage" enable="true"/>
|
|
||||||
<skill name="quarrying" enable="true"/>
|
|
||||||
<skill name="roadwork" enable="true"/>
|
|
||||||
<skill name="tactics" enable="true"/>
|
|
||||||
<skill name="stealth" enable="true"/>
|
|
||||||
<skill name="entertainment" enable="true"/>
|
|
||||||
<skill name="weaponsmithing" enable="true"/>
|
|
||||||
<skill name="cartmaking" enable="true"/>
|
|
||||||
<skill name="perception" enable="true"/>
|
|
||||||
<skill name="taxation" enable="true"/>
|
|
||||||
<skill name="stamina" enable="true"/>
|
|
||||||
<skill name="unarmed" enable="true"/>
|
|
||||||
|
|
||||||
<param name="NewbieImmunity" value="8"/>
|
|
||||||
<param name="modules.wormholes" value="1"/>
|
|
||||||
<param name="entertain.base" value="0"/>
|
|
||||||
<param name="entertain.perlevel" value="20"/>
|
|
||||||
<param name="nmr.timeout" value="5"/>
|
|
||||||
<param name="nmr.removenewbie" value="10"/>
|
|
||||||
<param name="GiveRestriction" value="3"/>
|
|
||||||
<param name="hunger.long" value="1"/>
|
|
||||||
<param name="init_spells" value="0"/>
|
|
||||||
<param name="world.era" value="2"/>
|
|
||||||
<param name="seed.population.min" value="8"/>
|
|
||||||
<param name="seed.population.max" value="8"/>
|
|
||||||
<param name="rules.reserve.twophase" value="1"/>
|
|
||||||
<param name="rules.owners.force_leave" value="1"/>
|
|
||||||
<param name="rules.give.max_men" value="-1"/>
|
|
||||||
<param name="rules.check_overload" value="0"/>
|
|
||||||
<param name="rules.limit.faction" value="2500"/>
|
|
||||||
<param name="rules.maxskills.magic" value="5"/>
|
|
||||||
<param name="rules.guard.base_stop_prob" value="0.30"/>
|
|
||||||
<param name="rules.guard.skill_stop_prob" value="0.05"/>
|
|
||||||
<param name="rules.guard.amulet_stop_prob" value="0.10"/>
|
|
||||||
<param name="rules.guard.guard_number_stop_prob" value="0.001"/>
|
|
||||||
<param name="rules.guard.castle_stop_prob" value="0.05"/>
|
|
||||||
<param name="rules.guard.region_type_stop_prob" value="0.05"/>
|
|
||||||
<param name="rules.economy.repopulate_maximum" value="500"/>
|
|
||||||
<param name="game.id" value="2"/>
|
|
||||||
<param name="game.name" value="Eressea"/>
|
|
||||||
</game>
|
|
||||||
<strings>
|
<strings>
|
||||||
<string name="mailto">
|
<string name="mailto">
|
||||||
<text locale="de">eressea-server@eressea.de</text>
|
<text locale="de">eressea-server@eressea.de</text>
|
||||||
|
|
|
@ -0,0 +1,296 @@
|
||||||
|
{
|
||||||
|
"terrains": {
|
||||||
|
"ocean": {
|
||||||
|
"size": 100,
|
||||||
|
"flags": [ "swim", "sea", "sail", "fly" ]
|
||||||
|
},
|
||||||
|
"plain": {
|
||||||
|
"size": 10000,
|
||||||
|
"herbs": [ "h0", "h1", "h2", "h3", "h4", "h5" ],
|
||||||
|
"seed": 3,
|
||||||
|
"road": 50,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.1,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10",
|
||||||
|
"level": "2d4-1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.15,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20",
|
||||||
|
"level": "1d4"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.01,
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50",
|
||||||
|
"level": "1d4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"swamp": {
|
||||||
|
"size": 2000,
|
||||||
|
"herbs": [ "h6", "h7", "h8" ],
|
||||||
|
"seed": 2,
|
||||||
|
"road": 75,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.02,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10",
|
||||||
|
"level": "2d4-1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.02,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20",
|
||||||
|
"level": "1d4"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.02,
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50",
|
||||||
|
"level": "1d4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"desert": {
|
||||||
|
"size": 500,
|
||||||
|
"herbs": [ "h9", "h10", "h11" ],
|
||||||
|
"seed": 2,
|
||||||
|
"road": 100,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly", "cavalry" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.15,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10",
|
||||||
|
"level": "2d4-1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.25,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20",
|
||||||
|
"level": "1d4"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.025,
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50",
|
||||||
|
"level": "1d4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"highland": {
|
||||||
|
"size": 4000,
|
||||||
|
"herbs": [ "h12", "h13", "h14" ],
|
||||||
|
"seed": 2,
|
||||||
|
"road": 100,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly", "cavalry" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.15,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10",
|
||||||
|
"level": "2d4-1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.25,
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20",
|
||||||
|
"level": "1d4"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.025,
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50",
|
||||||
|
"level": "1d4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mountain": {
|
||||||
|
"size": 1000,
|
||||||
|
"herbs": [ "h15", "h16", "h17" ],
|
||||||
|
"seed": 2,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"base": "50",
|
||||||
|
"div": "50",
|
||||||
|
"level": "1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"base": "100",
|
||||||
|
"div": "100",
|
||||||
|
"level": "1"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.05,
|
||||||
|
"base": "4",
|
||||||
|
"div": "100",
|
||||||
|
"level": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glacier": {
|
||||||
|
"size": 100,
|
||||||
|
"herbs": [ "h15", "h16", "h17" ],
|
||||||
|
"seed": 2,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "arctic", "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"base": "3",
|
||||||
|
"div": "50",
|
||||||
|
"level": "1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"base": "2",
|
||||||
|
"div": "100",
|
||||||
|
"level": "1"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.05,
|
||||||
|
"base": "4",
|
||||||
|
"div": "100",
|
||||||
|
"level": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"iceberg": {
|
||||||
|
"size": 100,
|
||||||
|
"herbs": [ "h18", "h19", "h20" ],
|
||||||
|
"flags": [ "arctic", "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.9,
|
||||||
|
"base": "3",
|
||||||
|
"div": "50",
|
||||||
|
"level": "1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.9,
|
||||||
|
"base": "2",
|
||||||
|
"div": "100",
|
||||||
|
"level": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"iceberg_sleep": {
|
||||||
|
"size": 100,
|
||||||
|
"herbs": [ "h18", "h19", "h20" ],
|
||||||
|
"flags": [ "arctic", "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.9,
|
||||||
|
"base": "3",
|
||||||
|
"div": "50",
|
||||||
|
"level": "1"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.9,
|
||||||
|
"base": "2",
|
||||||
|
"div": "100",
|
||||||
|
"level": "1"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.05,
|
||||||
|
"base": "4",
|
||||||
|
"div": "100",
|
||||||
|
"level": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"firewall": {
|
||||||
|
"size": 100,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "forbidden" ]
|
||||||
|
},
|
||||||
|
"fog": {
|
||||||
|
"flags": [ "walk", "fly" ]
|
||||||
|
},
|
||||||
|
"thickfog": {
|
||||||
|
"flags": [ "forbidden" ]
|
||||||
|
},
|
||||||
|
"volcano": {
|
||||||
|
"size": 500,
|
||||||
|
"road": 250,
|
||||||
|
"seed": 1,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "50",
|
||||||
|
"div": "50"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "100",
|
||||||
|
"div": "100"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.075,
|
||||||
|
"level": "1",
|
||||||
|
"base": "4",
|
||||||
|
"div": "100"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"activevolcano": {
|
||||||
|
"size": 500,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "50",
|
||||||
|
"div": "50"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "100",
|
||||||
|
"div": "100"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.075,
|
||||||
|
"level": "1",
|
||||||
|
"base": "4",
|
||||||
|
"div": "100"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hell": {
|
||||||
|
"flags": [ "walk" ]
|
||||||
|
},
|
||||||
|
"hall1": {
|
||||||
|
"flags": [ "land", "walk", "sail" ]
|
||||||
|
},
|
||||||
|
"corridor1": {
|
||||||
|
"flags": [ "land", "walk", "sail" ]
|
||||||
|
},
|
||||||
|
"wall1": {
|
||||||
|
"flags": [ "forbidden", "land" ]
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"size": 0,
|
||||||
|
"herbs": [],
|
||||||
|
"seed": 0,
|
||||||
|
"road": 0,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,98 @@
|
||||||
{
|
{
|
||||||
"include": [
|
"include": [
|
||||||
"keywords.json"
|
"keywords.json",
|
||||||
]
|
"prefixes.json",
|
||||||
|
"e3/terrains.json"
|
||||||
|
],
|
||||||
|
"disabled": [
|
||||||
|
"herbalism",
|
||||||
|
"alchemy",
|
||||||
|
"entertainment",
|
||||||
|
"espionage",
|
||||||
|
"perception",
|
||||||
|
"stealth",
|
||||||
|
"taxation",
|
||||||
|
"trade",
|
||||||
|
"besiege",
|
||||||
|
"steal",
|
||||||
|
"buy",
|
||||||
|
"teach",
|
||||||
|
"sabotage",
|
||||||
|
"spy",
|
||||||
|
"tax",
|
||||||
|
"entertain",
|
||||||
|
"sell",
|
||||||
|
"jsreport"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"game.id": 3,
|
||||||
|
"game.name": "E3",
|
||||||
|
"database.gameid": 7,
|
||||||
|
"NewbieImmunity": 4,
|
||||||
|
"modules.astralspace": false,
|
||||||
|
"modules.wormholes": false,
|
||||||
|
"modules.markets": true,
|
||||||
|
"magic.regeneration": 0.75,
|
||||||
|
"magic.power": 0.5,
|
||||||
|
"resource.factor": 0.25,
|
||||||
|
"skills.cost.tactics": 500,
|
||||||
|
"entertain.base": 0,
|
||||||
|
"entertain.perlevel": 20,
|
||||||
|
"nmr.timeout": 5,
|
||||||
|
"nmr.removenewbie": 0,
|
||||||
|
"GiveRestriction": 3,
|
||||||
|
"hunger.long": false,
|
||||||
|
"hunger.demon.skill": true,
|
||||||
|
"hunger.damage": "1d9+9",
|
||||||
|
"hunger.demons": true,
|
||||||
|
"init_spells": 0,
|
||||||
|
"recruit.allow_merge": true,
|
||||||
|
"study.expensivemigrants": true,
|
||||||
|
"study.speedup": 2,
|
||||||
|
"world.era": 3,
|
||||||
|
"seed.population.min": 8,
|
||||||
|
"seed.population.max": 8,
|
||||||
|
"rules.migrants.max": 0,
|
||||||
|
"rules.reserve.twophase": true,
|
||||||
|
"rules.owners.force_leave": false,
|
||||||
|
"rules.monsters.attack_chance": 0.1,
|
||||||
|
"rules.transfermen": false,
|
||||||
|
"rules.stealth.faction": true,
|
||||||
|
"rules.stealth.anon_battle": false,
|
||||||
|
"rules.check_overload": false,
|
||||||
|
"rules.combat.goblinbonus": 3,
|
||||||
|
"rules.ship.damage_drift": 0.00,
|
||||||
|
"rules.alliances": true,
|
||||||
|
"rules.combat.herospeed": 3,
|
||||||
|
"rules.combat.demon_vampire": 5,
|
||||||
|
"rules.combat.skill_bonus": 0,
|
||||||
|
"rules.combat.nat_armor": 1,
|
||||||
|
"rules.items.loot_divisor": 2,
|
||||||
|
"rules.items.give_divisor": 2,
|
||||||
|
"rules.move.owner_leave": true,
|
||||||
|
"rules.region_owners": true,
|
||||||
|
"rules.cavalry.skill": 2,
|
||||||
|
"rules.cavalry.mode": 1,
|
||||||
|
"rules.magic.multipotion": 1,
|
||||||
|
"rules.magic.wol_effect": 5,
|
||||||
|
"rules.magic.factionlist": 1,
|
||||||
|
"rules.magic.wol_type": 2,
|
||||||
|
"rules.blessed_harvest.flags": 1,
|
||||||
|
"rules.magic.elfpower": true,
|
||||||
|
"rules.magic.playerschools": "gwyrrd illaun draig cerddor",
|
||||||
|
"rules.build.other_buildings": true,
|
||||||
|
"rules.economy.taxation": 1,
|
||||||
|
"rules.food.flags": 2,
|
||||||
|
"rules.economy.roqf": 5,
|
||||||
|
"rules.economy.herbrot": 0,
|
||||||
|
"rules.region_owner_pay_building": "market harbour lighthouse",
|
||||||
|
"rules.dwarf_castles": true,
|
||||||
|
"rules.limit.faction": 250,
|
||||||
|
"rules.grow.formula": 1,
|
||||||
|
"rules.tactics.formula": 1,
|
||||||
|
"rules.help.mask": "fight guard money give",
|
||||||
|
"movement.shipspeed.skillbonus": 6,
|
||||||
|
"alliance.auto": "fight",
|
||||||
|
"alliance.restricted": "fight"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
<xi:include href="config://core/common/items.xml"/>
|
<xi:include href="config://core/common/items.xml"/>
|
||||||
<xi:include href="config://core/common/herbs.xml" />
|
<xi:include href="config://core/common/herbs.xml" />
|
||||||
<xi:include href="config://core/spoils.xml"/>
|
<xi:include href="config://core/spoils.xml"/>
|
||||||
<xi:include href="config://core/prefixes.xml"/>
|
|
||||||
<xi:include href="config://core/common/buildings.xml"/>
|
<xi:include href="config://core/common/buildings.xml"/>
|
||||||
<xi:include href="config://game/familiars.xml"/>
|
<xi:include href="config://game/familiars.xml"/>
|
||||||
|
|
||||||
|
@ -14,7 +13,6 @@
|
||||||
|
|
||||||
<xi:include href="config://game/ships.xml"/>
|
<xi:include href="config://game/ships.xml"/>
|
||||||
<xi:include href="config://game/shipnames.xml"/>
|
<xi:include href="config://game/shipnames.xml"/>
|
||||||
<xi:include href="config://game/terrains.xml"/>
|
|
||||||
<xi:include href="config://core/calendar.xml"/>
|
<xi:include href="config://core/calendar.xml"/>
|
||||||
<xi:include href="config://game/items.xml" />
|
<xi:include href="config://game/items.xml" />
|
||||||
<xi:include href="config://game/strings.xml"/>
|
<xi:include href="config://game/strings.xml"/>
|
||||||
|
@ -32,7 +30,6 @@
|
||||||
|
|
||||||
<equipment>
|
<equipment>
|
||||||
<set name="first_unit">
|
<set name="first_unit">
|
||||||
<item name="conquesttoken" amount="1"/>
|
|
||||||
<item name="log" amount="10"/>
|
<item name="log" amount="10"/>
|
||||||
<item name="stone" amount="10"/>
|
<item name="stone" amount="10"/>
|
||||||
<item name="money" amount="5000"/>
|
<item name="money" amount="5000"/>
|
||||||
|
@ -44,129 +41,6 @@
|
||||||
<xi:include href="config://default/names-zombies.xml"/>
|
<xi:include href="config://default/names-zombies.xml"/>
|
||||||
<xi:include href="config://default/names-ghouls.xml"/>
|
<xi:include href="config://default/names-ghouls.xml"/>
|
||||||
<xi:include href="config://default/names-dragons.xml"/>
|
<xi:include href="config://default/names-dragons.xml"/>
|
||||||
|
|
||||||
<game name="E3">
|
|
||||||
<!-- Game specific settings -->
|
|
||||||
<param name="database.gameid" value="7"></param>
|
|
||||||
|
|
||||||
<order name="besiege" disable="yes"/>
|
|
||||||
<order name="steal" disable="yes"/>
|
|
||||||
<order name="buy" disable="yes"/>
|
|
||||||
<order name="teach" disable="yes"/>
|
|
||||||
<order name="sabotage" disable="yes"/>
|
|
||||||
<order name="spy" disable="yes"/>
|
|
||||||
<order name="tax" disable="yes"/>
|
|
||||||
<order name="entertain" disable="yes"/>
|
|
||||||
<order name="sell" disable="yes"/>
|
|
||||||
|
|
||||||
<skill name="armorer" enable="true"/>
|
|
||||||
<skill name="bow" enable="true"/>
|
|
||||||
<skill name="building" enable="true"/>
|
|
||||||
<skill name="cartmaking" enable="true"/>
|
|
||||||
<skill name="catapult" enable="true"/>
|
|
||||||
<skill name="crossbow" enable="true"/>
|
|
||||||
<skill name="forestry" enable="true"/>
|
|
||||||
<skill name="magic" enable="true"/>
|
|
||||||
<skill name="melee" enable="true"/>
|
|
||||||
<skill name="mining" enable="true"/>
|
|
||||||
<skill name="polearm" enable="true"/>
|
|
||||||
<skill name="quarrying" enable="true"/>
|
|
||||||
<skill name="riding" enable="true"/>
|
|
||||||
<skill name="roadwork" enable="true"/>
|
|
||||||
<skill name="sailing" enable="true"/>
|
|
||||||
<skill name="shipcraft" enable="true"/>
|
|
||||||
<skill name="stamina" enable="true"/>
|
|
||||||
<skill name="tactics" enable="true"/>
|
|
||||||
<skill name="training" enable="true"/>
|
|
||||||
<skill name="unarmed" enable="true"/>
|
|
||||||
<skill name="weaponsmithing" enable="true"/>
|
|
||||||
|
|
||||||
<skill name="herbalism" enable="false"/>
|
|
||||||
|
|
||||||
<skill name="alchemy" enable="false"/>
|
|
||||||
<skill name="entertainment" enable="false"/>
|
|
||||||
<skill name="espionage" enable="false"/>
|
|
||||||
<skill name="perception" enable="false"/>
|
|
||||||
<skill name="stealth" enable="false"/>
|
|
||||||
<skill name="taxation" enable="false"/>
|
|
||||||
<skill name="trade" enable="false"/>
|
|
||||||
|
|
||||||
<param name="NewbieImmunity" value="4"/>-
|
|
||||||
<param name="modules.astralspace" value="0"/>
|
|
||||||
<param name="modules.wormholes" value="0"/>
|
|
||||||
<param name="modules.markets" value="1"/>
|
|
||||||
|
|
||||||
<!-- resource limitations -->
|
|
||||||
<param name="magic.regeneration" value="0.75"/>
|
|
||||||
<param name="magic.power" value="0.5"/>
|
|
||||||
<param name="resource.factor" value="0.25"/>
|
|
||||||
|
|
||||||
<param name="skills.cost.tactics" value="500"/>
|
|
||||||
<param name="entertain.base" value="0"/>
|
|
||||||
<param name="entertain.perlevel" value="20"/>
|
|
||||||
<param name="nmr.timeout" value="5"/>
|
|
||||||
<param name="nmr.removenewbie" value="0"/>
|
|
||||||
<param name="GiveRestriction" value="3"/>
|
|
||||||
<param name="hunger.long" value="0"/>
|
|
||||||
<param name="hunger.demon.skill" value="1"/>
|
|
||||||
<param name="hunger.damage" value="1d9+9"/>
|
|
||||||
<param name="hunger.demons" value="1"/>
|
|
||||||
<param name="init_spells" value="0"/>
|
|
||||||
<param name="recruit.allow_merge" value="1"/>
|
|
||||||
<param name="study.expensivemigrants" value="1"/>
|
|
||||||
<param name="study.speedup" value="2"/>
|
|
||||||
<param name="world.era" value="3"/>
|
|
||||||
<param name="seed.population.min" value="8"/>
|
|
||||||
<param name="seed.population.max" value="8"/>
|
|
||||||
<param name="rules.migrants" value="0"/>
|
|
||||||
<param name="rules.reserve.twophase" value="1"/>
|
|
||||||
<param name="rules.owners.force_leave" value="1"/>
|
|
||||||
<param name="rules.monsters.attack_chance" value="0.0"/>
|
|
||||||
<param name="rules.transfermen" value="0"/>
|
|
||||||
<param name="rules.stealth.faction" value="1"/>
|
|
||||||
<param name="rules.stealth.anon_battle" value="0"/>
|
|
||||||
<param name="rules.check_overload" value="0"/>
|
|
||||||
<param name="rules.combat.goblinbonus" value="3"/>
|
|
||||||
<param name="rules.ship.damage_drift" value="0.00"/> <!-- percent damage from drifting-->
|
|
||||||
<param name="rules.alliances" value="1"/>
|
|
||||||
<param name="rules.combat.herospeed" value="3"/>
|
|
||||||
<param name="rules.combat.demon_vampire" value="5"/> <!-- regen 1 hp per X points of damage done -->
|
|
||||||
<param name="rules.combat.skill_bonus" value="0"/>
|
|
||||||
<param name="rules.combat.nat_armor" value="1"/>
|
|
||||||
<!--param name="rules.combat.loot" value="5"/--> <!-- only self + others - keeploot -->
|
|
||||||
<param name="rules.items.loot_divisor" value="2"/> <!-- damage skims off 1/2 of goods transfers -->
|
|
||||||
<param name="rules.items.give_divisor" value="2"/> <!-- corruption skims off 1/2 of goods transfers -->
|
|
||||||
<param name="rules.move.owner_leave" value="1"/> <!-- owner must leave before moving -->
|
|
||||||
<param name="rules.region_owners" value="1"/>
|
|
||||||
<param name="rules.cavalry.skill" value="2"/>
|
|
||||||
<param name="rules.cavalry.mode" value="1"/>
|
|
||||||
<param name="rules.magic.multipotion" value="1"/>
|
|
||||||
<param name="rules.magic.wol_effect" value="5"/>
|
|
||||||
<param name="rules.magic.factionlist" value="1"/>
|
|
||||||
<param name="rules.magic.wol_type" value="2"/>
|
|
||||||
<param name="rules.magic.blessed_harvest" value="1"/>
|
|
||||||
<param name="rules.magic.elfpower" value="1"/> <!-- elves get ring-of-power bonus in a forest -->
|
|
||||||
<param name="rules.magic.playerschools" value="gwyrrd illaun draig cerddor"/>
|
|
||||||
<param name="rules.build.other_buildings" value="1"/>
|
|
||||||
<param name="rules.economy.taxation" value="1"/>
|
|
||||||
<param name="rules.economy.food" value="2"/>
|
|
||||||
<param name="rules.economy.wages" value="1"/>
|
|
||||||
<param name="rules.economy.roqf" value="5"/>
|
|
||||||
<param name="rules.economy.herbrot" value="0"/>
|
|
||||||
<param name="rules.region_owner_pay_building" value="market harbour lighthouse"/>
|
|
||||||
<param name="rules.dwarf_castles" value="1"/>
|
|
||||||
<!-- param name="rules.nmr.destroy" value="1"/ -->
|
|
||||||
<param name="rules.limit.faction" value="250"/>
|
|
||||||
<!--param name="rules.give" value="15"/ --> <!-- self + peasants + herbs + lux - goods -->
|
|
||||||
<param name="rules.economy.grow" value="1"/>
|
|
||||||
<param name="rules.tactics.formula" value="1"/> <!-- 10% per skilldiff -->
|
|
||||||
<param name="rules.help.mask" value="fight guard money give"/>
|
|
||||||
<param name="movement.shipspeed.skillbonus" value="6"/>
|
|
||||||
<param name="alliance.auto" value="fight"/>
|
|
||||||
<param name="alliance.restricted" value="fight"/>
|
|
||||||
<param name="game.id" value="3"/>
|
|
||||||
<param name="game.name" value="E3"/>
|
|
||||||
</game>
|
|
||||||
<rules>
|
<rules>
|
||||||
<function name="wage" value="minimum_wage"/>
|
<function name="wage" value="minimum_wage"/>
|
||||||
</rules>
|
</rules>
|
||||||
|
|
|
@ -0,0 +1,235 @@
|
||||||
|
{
|
||||||
|
"terrains": {
|
||||||
|
"ocean": {
|
||||||
|
"size": 100,
|
||||||
|
"flags": [ "sea", "swim", "sail", "fly" ]
|
||||||
|
},
|
||||||
|
"plain": {
|
||||||
|
"size": 4000,
|
||||||
|
"herbs": [ "h0", "h4" ],
|
||||||
|
"seed": 3,
|
||||||
|
"road": 50,
|
||||||
|
"flags": [ "forest", "cavalry", "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.1,
|
||||||
|
"level": "2d4-1",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.15,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.01,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"swamp": {
|
||||||
|
"size": 1200,
|
||||||
|
"herbs": [ "h6", "h8" ],
|
||||||
|
"seed": 2,
|
||||||
|
"road": 75,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.02,
|
||||||
|
"level": "2d4-1",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.02,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.02,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"desert": {
|
||||||
|
"size": 400,
|
||||||
|
"seed": 2,
|
||||||
|
"road": 75,
|
||||||
|
"flags": [ "cavalry", "land", "walk", "sail", "fly" ],
|
||||||
|
"herbs": [ "h9", "h11" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.15,
|
||||||
|
"level": "2d4-1",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.25,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.025,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"highland": {
|
||||||
|
"size": 2300,
|
||||||
|
"seed": 2,
|
||||||
|
"road": 100,
|
||||||
|
"flags": [ "cavalry", "land", "walk", "sail", "fly" ],
|
||||||
|
"herbs": [ "h12", "h14" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.15,
|
||||||
|
"level": "2d4-1",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d20+10"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.25,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "5d8",
|
||||||
|
"div": "2d30+20"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.025,
|
||||||
|
"level": "1d4",
|
||||||
|
"base": "1d4",
|
||||||
|
"div": "2d20+50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mountain": {
|
||||||
|
"size": 600,
|
||||||
|
"seed": 2,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"herbs": [ "h15", "h17" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"level": "1",
|
||||||
|
"base": "50",
|
||||||
|
"div": "50"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"level": "1",
|
||||||
|
"base": "100",
|
||||||
|
"div": "100"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.05,
|
||||||
|
"level": "1",
|
||||||
|
"base": "4",
|
||||||
|
"div": "100"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"glacier": {
|
||||||
|
"size": 150,
|
||||||
|
"seed": 2,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "arctic", "land", "walk", "sail", "fly" ],
|
||||||
|
"herbs": [ "h18", "h20" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"level": "1",
|
||||||
|
"base": "3",
|
||||||
|
"div": "50"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 1.0,
|
||||||
|
"level": "1",
|
||||||
|
"base": "2",
|
||||||
|
"div": "100"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.05,
|
||||||
|
"level": "1",
|
||||||
|
"base": "4",
|
||||||
|
"div": "100"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packice": {
|
||||||
|
"flags": [ "arctic", "swim", "walk", "sail", "fly" ]
|
||||||
|
},
|
||||||
|
"firewall": {
|
||||||
|
"flags": [ "forbidden" ]
|
||||||
|
},
|
||||||
|
"volcano": {
|
||||||
|
"size": 400,
|
||||||
|
"seed": 1,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "50",
|
||||||
|
"div": "50"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "100",
|
||||||
|
"div": "100"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.075,
|
||||||
|
"level": "1",
|
||||||
|
"base": "4",
|
||||||
|
"div": "100"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"activevolcano": {
|
||||||
|
"size": 400,
|
||||||
|
"road": 250,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {
|
||||||
|
"iron": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "50",
|
||||||
|
"div": "50"
|
||||||
|
},
|
||||||
|
"stone": {
|
||||||
|
"chance": 0.5,
|
||||||
|
"level": "1",
|
||||||
|
"base": "100",
|
||||||
|
"div": "100"
|
||||||
|
},
|
||||||
|
"laen": {
|
||||||
|
"chance": 0.075,
|
||||||
|
"level": "1",
|
||||||
|
"base": "4",
|
||||||
|
"div": "100"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"size": 0,
|
||||||
|
"herbs": [],
|
||||||
|
"seed": 0,
|
||||||
|
"road": 0,
|
||||||
|
"flags": [ "land", "walk", "sail", "fly" ],
|
||||||
|
"production": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,96 @@
|
||||||
{
|
{
|
||||||
"include": [
|
"include": [
|
||||||
"keywords.json"
|
"keywords.json",
|
||||||
]
|
"prefixes.json",
|
||||||
|
"e3/terrains.json"
|
||||||
|
],
|
||||||
|
"disabled": [
|
||||||
|
"herbalism",
|
||||||
|
"alchemy",
|
||||||
|
"entertainment",
|
||||||
|
"espionage",
|
||||||
|
"perception",
|
||||||
|
"stealth",
|
||||||
|
"taxation",
|
||||||
|
"trade",
|
||||||
|
"besiege",
|
||||||
|
"steal",
|
||||||
|
"buy",
|
||||||
|
"teach",
|
||||||
|
"sabotage",
|
||||||
|
"spy",
|
||||||
|
"tax",
|
||||||
|
"entertain",
|
||||||
|
"sell",
|
||||||
|
"jsreport"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"game.id": 4,
|
||||||
|
"game.name": "Deveron",
|
||||||
|
"database.gameid": 7,
|
||||||
|
"NewbieImmunity": 4,
|
||||||
|
"modules.astralspace": false,
|
||||||
|
"modules.wormholes": false,
|
||||||
|
"modules.markets": true,
|
||||||
|
"magic.regeneration": 0.75,
|
||||||
|
"magic.power": 0.5,
|
||||||
|
"resource.factor": 0.25,
|
||||||
|
"skills.cost.tactics": 500,
|
||||||
|
"entertain.base": 0,
|
||||||
|
"entertain.perlevel": 20,
|
||||||
|
"nmr.timeout": 5,
|
||||||
|
"nmr.removenewbie": 0,
|
||||||
|
"GiveRestriction": 3,
|
||||||
|
"hunger.long": false,
|
||||||
|
"hunger.demon.skill": true,
|
||||||
|
"hunger.damage": "1d9+9",
|
||||||
|
"hunger.demons": true,
|
||||||
|
"init_spells": 0,
|
||||||
|
"recruit.allow_merge": true,
|
||||||
|
"study.expensivemigrants": true,
|
||||||
|
"study.speedup": 2,
|
||||||
|
"study.from_use": 0.4,
|
||||||
|
"world.era": 3,
|
||||||
|
"rules.migrants.max": 0,
|
||||||
|
"rules.reserve.twophase": true,
|
||||||
|
"rules.owners.force_leave": false,
|
||||||
|
"rules.transfermen": false,
|
||||||
|
"rules.stealth.faction": true,
|
||||||
|
"rules.stealth.anon_battle": false,
|
||||||
|
"rules.check_overload": false,
|
||||||
|
"rules.combat.goblinbonus": 3,
|
||||||
|
"rules.ship.damage_drift": 0.00,
|
||||||
|
"rules.alliances": true,
|
||||||
|
"rules.combat.herospeed": 3,
|
||||||
|
"rules.combat.demon_vampire": 5,
|
||||||
|
"rules.combat.skill_bonus": 0,
|
||||||
|
"rules.combat.nat_armor": true,
|
||||||
|
"rules.items.loot_divisor": 2,
|
||||||
|
"rules.items.give_divisor": 2,
|
||||||
|
"rules.move.owner_leave": true,
|
||||||
|
"rules.region_owners": true,
|
||||||
|
"rules.cavalry.skill": 2,
|
||||||
|
"rules.cavalry.mode": 1,
|
||||||
|
"rules.magic.multipotion": true,
|
||||||
|
"rules.magic.wol_effect": 5,
|
||||||
|
"rules.magic.factionlist": true,
|
||||||
|
"rules.magic.wol_type": 2,
|
||||||
|
"rules.blessed_harvest.flags": 1,
|
||||||
|
"rules.magic.elfpower": true,
|
||||||
|
"rules.magic.playerschools": "gwyrrd illaun draig cerddor",
|
||||||
|
"rules.build.other_buildings": 1,
|
||||||
|
"rules.economy.taxation": 1,
|
||||||
|
"rules.food.flags": 2,
|
||||||
|
"rules.economy.roqf": 5,
|
||||||
|
"rules.economy.herbrot": 0,
|
||||||
|
"rules.region_owner_pay_building": "market harbour lighthouse",
|
||||||
|
"rules.dwarf_castles": true,
|
||||||
|
"rules.limit.faction": 250,
|
||||||
|
"rules.grow.formula": 1,
|
||||||
|
"rules.tactics.formula": 1,
|
||||||
|
"rules.help.mask": "fight guard money give",
|
||||||
|
"movement.shipspeed.skillbonus": 6,
|
||||||
|
"alliance.auto": "fight",
|
||||||
|
"alliance.restricted": "fight"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
<xi:include href="config://core/common/items.xml"/>
|
<xi:include href="config://core/common/items.xml"/>
|
||||||
<xi:include href="config://core/common/herbs.xml" />
|
<xi:include href="config://core/common/herbs.xml" />
|
||||||
<xi:include href="config://core/spoils.xml"/>
|
<xi:include href="config://core/spoils.xml"/>
|
||||||
<xi:include href="config://core/prefixes.xml"/>
|
|
||||||
<xi:include href="config://core/common/buildings.xml"/>
|
<xi:include href="config://core/common/buildings.xml"/>
|
||||||
<xi:include href="config://game/familiars.xml"/>
|
<xi:include href="config://game/familiars.xml"/>
|
||||||
|
|
||||||
|
@ -14,7 +13,6 @@
|
||||||
|
|
||||||
<xi:include href="config://game/ships.xml"/>
|
<xi:include href="config://game/ships.xml"/>
|
||||||
<xi:include href="config://game/shipnames.xml"/>
|
<xi:include href="config://game/shipnames.xml"/>
|
||||||
<xi:include href="config://game/terrains.xml"/>
|
|
||||||
<xi:include href="config://core/calendar.xml"/>
|
<xi:include href="config://core/calendar.xml"/>
|
||||||
<xi:include href="config://game/items.xml" />
|
<xi:include href="config://game/items.xml" />
|
||||||
<xi:include href="config://game/strings.xml"/>
|
<xi:include href="config://game/strings.xml"/>
|
||||||
|
@ -32,7 +30,6 @@
|
||||||
|
|
||||||
<equipment>
|
<equipment>
|
||||||
<set name="first_unit">
|
<set name="first_unit">
|
||||||
<item name="conquesttoken" amount="1"/>
|
|
||||||
<item name="log" amount="10"/>
|
<item name="log" amount="10"/>
|
||||||
<item name="stone" amount="10"/>
|
<item name="stone" amount="10"/>
|
||||||
<item name="money" amount="5000"/>
|
<item name="money" amount="5000"/>
|
||||||
|
@ -45,125 +42,6 @@
|
||||||
<xi:include href="config://default/names-ghouls.xml"/>
|
<xi:include href="config://default/names-ghouls.xml"/>
|
||||||
<xi:include href="config://default/names-dragons.xml"/>
|
<xi:include href="config://default/names-dragons.xml"/>
|
||||||
|
|
||||||
<game name="Deveron">
|
|
||||||
<!-- Game specific settings -->
|
|
||||||
<param name="database.gameid" value="7"></param>
|
|
||||||
|
|
||||||
<order name="besiege" disable="yes"/>
|
|
||||||
<order name="steal" disable="yes"/>
|
|
||||||
<order name="buy" disable="yes"/>
|
|
||||||
<order name="teach" disable="yes"/>
|
|
||||||
<order name="sabotage" disable="yes"/>
|
|
||||||
<order name="spy" disable="yes"/>
|
|
||||||
<order name="tax" disable="yes"/>
|
|
||||||
<order name="entertain" disable="yes"/>
|
|
||||||
<order name="sell" disable="yes"/>
|
|
||||||
|
|
||||||
<skill name="armorer" enable="true"/>
|
|
||||||
<skill name="bow" enable="true"/>
|
|
||||||
<skill name="building" enable="true"/>
|
|
||||||
<skill name="cartmaking" enable="true"/>
|
|
||||||
<skill name="catapult" enable="true"/>
|
|
||||||
<skill name="crossbow" enable="true"/>
|
|
||||||
<skill name="forestry" enable="true"/>
|
|
||||||
<skill name="magic" enable="true"/>
|
|
||||||
<skill name="melee" enable="true"/>
|
|
||||||
<skill name="mining" enable="true"/>
|
|
||||||
<skill name="polearm" enable="true"/>
|
|
||||||
<skill name="quarrying" enable="true"/>
|
|
||||||
<skill name="riding" enable="true"/>
|
|
||||||
<skill name="roadwork" enable="true"/>
|
|
||||||
<skill name="sailing" enable="true"/>
|
|
||||||
<skill name="shipcraft" enable="true"/>
|
|
||||||
<skill name="stamina" enable="true"/>
|
|
||||||
<skill name="tactics" enable="true"/>
|
|
||||||
<skill name="training" enable="true"/>
|
|
||||||
<skill name="unarmed" enable="true"/>
|
|
||||||
<skill name="weaponsmithing" enable="true"/>
|
|
||||||
|
|
||||||
<skill name="herbalism" enable="false"/>
|
|
||||||
|
|
||||||
<skill name="alchemy" enable="false"/>
|
|
||||||
<skill name="entertainment" enable="false"/>
|
|
||||||
<skill name="espionage" enable="false"/>
|
|
||||||
<skill name="perception" enable="false"/>
|
|
||||||
<skill name="stealth" enable="false"/>
|
|
||||||
<skill name="taxation" enable="false"/>
|
|
||||||
<skill name="trade" enable="false"/>
|
|
||||||
|
|
||||||
<param name="NewbieImmunity" value="4"/>
|
|
||||||
<param name="modules.astralspace" value="0"/>
|
|
||||||
<param name="modules.wormholes" value="0"/>
|
|
||||||
<param name="modules.markets" value="1"/>
|
|
||||||
|
|
||||||
<!-- resource limitations -->
|
|
||||||
<param name="magic.regeneration" value="0.75"/>
|
|
||||||
<param name="magic.power" value="0.5"/>
|
|
||||||
<param name="resource.factor" value="0.25"/>
|
|
||||||
|
|
||||||
<param name="skills.cost.tactics" value="500"/>
|
|
||||||
<param name="entertain.base" value="0"/>
|
|
||||||
<param name="entertain.perlevel" value="20"/>
|
|
||||||
<param name="nmr.timeout" value="5"/>
|
|
||||||
<param name="nmr.removenewbie" value="0"/>
|
|
||||||
<param name="GiveRestriction" value="3"/>
|
|
||||||
<param name="hunger.long" value="0"/>
|
|
||||||
<param name="hunger.demon.skill" value="1"/>
|
|
||||||
<param name="hunger.damage" value="1d9+9"/>
|
|
||||||
<param name="hunger.demons" value="1"/>
|
|
||||||
<param name="init_spells" value="0"/>
|
|
||||||
<param name="recruit.allow_merge" value="1"/>
|
|
||||||
<param name="study.expensivemigrants" value="1"/>
|
|
||||||
<param name="study.speedup" value="2"/>
|
|
||||||
<param name="world.era" value="3"/>
|
|
||||||
<param name="rules.migrants" value="0"/>
|
|
||||||
<param name="rules.reserve.twophase" value="1"/>
|
|
||||||
<param name="rules.owners.force_leave" value="1"/>
|
|
||||||
<param name="rules.transfermen" value="0"/>
|
|
||||||
<param name="rules.stealth.faction" value="1"/>
|
|
||||||
<param name="rules.stealth.anon_battle" value="0"/>
|
|
||||||
<param name="rules.check_overload" value="0"/>
|
|
||||||
<param name="rules.combat.goblinbonus" value="3"/>
|
|
||||||
<param name="rules.ship.damage_drift" value="0.00"/> <!-- percent damage from drifting-->
|
|
||||||
<param name="rules.alliances" value="1"/>
|
|
||||||
<param name="rules.combat.herospeed" value="3"/>
|
|
||||||
<param name="rules.combat.demon_vampire" value="5"/> <!-- regen 1 hp per X points of damage done -->
|
|
||||||
<param name="rules.combat.skill_bonus" value="0"/>
|
|
||||||
<param name="rules.combat.nat_armor" value="1"/>
|
|
||||||
<!--param name="rules.combat.loot" value="5"/--> <!-- only self + others - keeploot -->
|
|
||||||
<param name="rules.items.loot_divisor" value="2"/> <!-- damage skims off 1/2 of goods transfers -->
|
|
||||||
<param name="rules.items.give_divisor" value="2"/> <!-- corruption skims off 1/2 of goods transfers -->
|
|
||||||
<param name="rules.move.owner_leave" value="1"/> <!-- owner must leave before moving -->
|
|
||||||
<param name="rules.region_owners" value="1"/>
|
|
||||||
<param name="rules.cavalry.skill" value="2"/>
|
|
||||||
<param name="rules.cavalry.mode" value="1"/>
|
|
||||||
<param name="rules.magic.multipotion" value="1"/>
|
|
||||||
<param name="rules.magic.wol_effect" value="5"/>
|
|
||||||
<param name="rules.magic.factionlist" value="1"/>
|
|
||||||
<param name="rules.magic.wol_type" value="2"/>
|
|
||||||
<param name="rules.magic.blessed_harvest" value="1"/>
|
|
||||||
<param name="rules.magic.elfpower" value="1"/> <!-- elves get ring-of-power bonus in a forest -->
|
|
||||||
<param name="rules.magic.playerschools" value="gwyrrd illaun draig cerddor"/>
|
|
||||||
<param name="rules.build.other_buildings" value="1"/>
|
|
||||||
<param name="rules.economy.taxation" value="1"/>
|
|
||||||
<param name="rules.economy.food" value="2"/>
|
|
||||||
<param name="rules.economy.wages" value="1"/>
|
|
||||||
<param name="rules.economy.roqf" value="5"/>
|
|
||||||
<param name="rules.economy.herbrot" value="0"/>
|
|
||||||
<param name="rules.region_owner_pay_building" value="market harbour lighthouse"/>
|
|
||||||
<param name="rules.dwarf_castles" value="1"/>
|
|
||||||
<!-- param name="rules.nmr.destroy" value="1"/ -->
|
|
||||||
<param name="rules.limit.faction" value="250"/>
|
|
||||||
<!--param name="rules.give" value="15"/ --> <!-- self + peasants + herbs + lux - goods -->
|
|
||||||
<param name="rules.economy.grow" value="1"/>
|
|
||||||
<param name="rules.tactics.formula" value="1"/> <!-- 10% per skilldiff -->
|
|
||||||
<param name="rules.help.mask" value="fight guard money give"/>
|
|
||||||
<param name="movement.shipspeed.skillbonus" value="6"/>
|
|
||||||
<param name="alliance.auto" value="fight"/>
|
|
||||||
<param name="alliance.restricted" value="fight"/>
|
|
||||||
<param name="game.id" value="4"/>
|
|
||||||
<param name="game.name" value="Deveron"/>
|
|
||||||
</game>
|
|
||||||
<rules>
|
<rules>
|
||||||
<function name="wage" value="minimum_wage"/>
|
<function name="wage" value="minimum_wage"/>
|
||||||
</rules>
|
</rules>
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"prefixes": [
|
||||||
|
"Dunkel",
|
||||||
|
"Licht",
|
||||||
|
"Klein",
|
||||||
|
"Hoch",
|
||||||
|
"Huegel",
|
||||||
|
"Berg",
|
||||||
|
"Wald",
|
||||||
|
"Sumpf",
|
||||||
|
"Schnee",
|
||||||
|
"Sonnen",
|
||||||
|
"Mond",
|
||||||
|
"See",
|
||||||
|
"Tal",
|
||||||
|
"Schatten",
|
||||||
|
"Hoehlen",
|
||||||
|
"Blut",
|
||||||
|
"Wild",
|
||||||
|
"Chaos",
|
||||||
|
"Nacht",
|
||||||
|
"Nebel",
|
||||||
|
"Grau",
|
||||||
|
"Frost",
|
||||||
|
"Finster",
|
||||||
|
"Duester",
|
||||||
|
"flame",
|
||||||
|
"ice",
|
||||||
|
"star",
|
||||||
|
"black",
|
||||||
|
"arch"
|
||||||
|
]
|
||||||
|
}
|
2
critbit
2
critbit
|
@ -1 +1 @@
|
||||||
Subproject commit b38f6f8acdc2ce5b0613a4bb2ff8082051a25ac3
|
Subproject commit e538739b38593b90312831a5e52d2e3bd731069b
|
2
cutest
2
cutest
|
@ -1 +1 @@
|
||||||
Subproject commit 788659594ef87e9f497b8039da764182adfd2943
|
Subproject commit 6e268687dbf6ae55afb63210c3753530d216a622
|
2
dlmalloc
2
dlmalloc
|
@ -1 +1 @@
|
||||||
Subproject commit 4292cd5e81395d09a7457ab93659ea3b7784e958
|
Subproject commit f1446c47ca1774ae84bf86a28502e91daf6b421a
|
|
@ -1 +1 @@
|
||||||
Subproject commit f84066fb7d3254bdd9e89694acc4c1c20d001eed
|
Subproject commit ecf956b9808c28c2db52e6b73930f57876dbb258
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
from sys import argv, exit
|
from sys import argv, exit
|
||||||
from string import join
|
from string import join
|
||||||
from os import access, R_OK
|
import os
|
||||||
from os import system
|
import os.path
|
||||||
|
|
||||||
gamename='Eressea'
|
gamename='Eressea'
|
||||||
|
|
||||||
|
@ -38,35 +38,33 @@ for line in infile.readlines():
|
||||||
if not options.has_key("reports"):
|
if not options.has_key("reports"):
|
||||||
continue
|
continue
|
||||||
reports = options["reports"].split(",")
|
reports = options["reports"].split(",")
|
||||||
|
# reports = reports + [ "iso.cr" ]
|
||||||
prefix = "%(turn)s-%(faction)s." % options
|
prefix = "%(turn)s-%(faction)s." % options
|
||||||
files=[]
|
|
||||||
times="../parteien"
|
|
||||||
if os.path.isfile(times):
|
|
||||||
files = files + [ times ]
|
|
||||||
if options["compression"]=="zip":
|
if options["compression"]=="zip":
|
||||||
output = prefix+"zip"
|
output = prefix+"zip"
|
||||||
files = [output]
|
files = [output]
|
||||||
if (access(output, R_OK)):
|
if not os.path.isfile(output):
|
||||||
pass
|
|
||||||
else:
|
|
||||||
parameters = []
|
parameters = []
|
||||||
for extension in reports:
|
for extension in reports:
|
||||||
filename = "%s%s" % (prefix, extension)
|
filename = "%s%s" % (prefix, extension)
|
||||||
if (access(filename, R_OK)):
|
if os.path.isfile(filename):
|
||||||
parameters = parameters + [ filename ]
|
parameters = parameters + [ filename ]
|
||||||
system("zip %s -q -m -j -1 %s" % (output, join(parameters," ")))
|
os.system("zip %s -q -m -j %s" % (output, join(parameters," ")))
|
||||||
else:
|
else:
|
||||||
|
files = []
|
||||||
for extension in reports:
|
for extension in reports:
|
||||||
if extension!='':
|
if extension!='':
|
||||||
filename = "%s%s" % (prefix, extension)
|
filename = "%s%s" % (prefix, extension)
|
||||||
output = "%s%s.bz2" % (prefix, extension)
|
output = "%s%s.bz2" % (prefix, extension)
|
||||||
files = files+[output]
|
files = files+[output]
|
||||||
if access(filename, R_OK):
|
if os.path.isfile(filename):
|
||||||
if (access(output, R_OK)):
|
if os.path.isfile(output):
|
||||||
#print output, "exists, skipping"
|
|
||||||
continue
|
continue
|
||||||
system("bzip2 %s" % filename)
|
os.system("bzip2 %s" % filename)
|
||||||
#print files
|
extras = [ '../wochenbericht.txt', '../express.txt' ]
|
||||||
|
for extra in extras:
|
||||||
|
if os.path.isfile(extra):
|
||||||
|
files = files + [extra]
|
||||||
options["files"] = join(files, " ")
|
options["files"] = join(files, " ")
|
||||||
batch = file("%s.sh" % options["faction"], "w")
|
batch = file("%s.sh" % options["faction"], "w")
|
||||||
batch.write(template % options)
|
batch.write(template % options)
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ -z $ERESSEA ]; then
|
||||||
|
echo "You need to define the \$ERESSEA environment variable to run $0"
|
||||||
|
exit -2
|
||||||
|
fi
|
||||||
|
|
||||||
|
GAME=$ERESSEA/game-$1
|
||||||
|
GAME_NAME=$(grep name $GAME/eressea.ini | sed 's/.*=\s*//')
|
||||||
|
|
||||||
|
TURN=$2
|
||||||
|
if [ -z $TURN ]
|
||||||
|
then
|
||||||
|
TURN=`cat $GAME/turn`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d $GAME/reports ]; then
|
||||||
|
echo "cannot find reports directory in $GAME"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $GAME/reports
|
||||||
|
$HOME/bin/compress.py $TURN "$GAME_NAME"
|
||||||
|
cd -
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
PATH=/home/eressea/bin:/opt/bin:/usr/local/bin:/usr/bin:/bin
|
PATH=/home/eressea/bin:/opt/bin:/usr/local/bin:/usr/bin:/bin
|
||||||
ERESSEA=/home/eressea/eressea
|
ERESSEA=/home/eressea/eressea
|
||||||
ATLANTIS=/home/eressea/atlantis
|
|
||||||
ENABLED=yes
|
ENABLED=yes
|
||||||
PREVIEW=yes
|
PREVIEW=yes
|
||||||
CONFIRM=yes
|
CONFIRM=yes
|
||||||
|
@ -14,5 +13,5 @@ CONFIRM=yes
|
||||||
15 21 * * Sat [ "$ENABLED" = "yes" ] && $ERESSEA/server/bin/run-eressea.cron 3
|
15 21 * * Sat [ "$ENABLED" = "yes" ] && $ERESSEA/server/bin/run-eressea.cron 3
|
||||||
25 21 * * Sat [ "$ENABLED" = "yes" ] && $ERESSEA/server/bin/run-eressea.cron 4
|
25 21 * * Sat [ "$ENABLED" = "yes" ] && $ERESSEA/server/bin/run-eressea.cron 4
|
||||||
35 21 * * Sat [ "$ENABLED" = "yes" ] && $ERESSEA/server/bin/run-eressea.cron 2
|
35 21 * * Sat [ "$ENABLED" = "yes" ] && $ERESSEA/server/bin/run-eressea.cron 2
|
||||||
39 08 * * Sun [ "$PREVIEW" = "yes" ] && $ERESSEA/server/bin/preview.cron
|
30 07 * * Sun [ "$PREVIEW" = "yes" ] && $ERESSEA/server/bin/preview.cron
|
||||||
*/5 * * * * [ "$CONFIRM" = "yes" ] && $ERESSEA/server/bin/orders.cron 2 3 4
|
*/5 * * * * [ "$CONFIRM" = "yes" ] && $ERESSEA/server/bin/orders.cron 2 3 4
|
||||||
|
|
|
@ -40,6 +40,5 @@ fi
|
||||||
echo "sending reports for game $GAME, turn $TURN"
|
echo "sending reports for game $GAME, turn $TURN"
|
||||||
$BIN/compress.sh $GAME $TURN
|
$BIN/compress.sh $GAME $TURN
|
||||||
$BIN/sendreports.sh $GAME
|
$BIN/sendreports.sh $GAME
|
||||||
[ $GAME -lt 4 ] && $BIN/send-summary $GAME
|
|
||||||
$BIN/backup-eressea $GAME $TURN
|
$BIN/backup-eressea $GAME $TURN
|
||||||
rm -f test/execute.lock
|
rm -f test/execute.lock
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
PATH=$ERESSEA/bin:$PATH
|
||||||
|
|
||||||
|
function abort() {
|
||||||
|
if [ $# -gt 0 ]; then
|
||||||
|
echo $@
|
||||||
|
fi
|
||||||
|
exit -1
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
ls -1 orders.dir/turn* | sed -e 's/.*turn-\(.*\),gruenbaer.*/\1/' | sort -u
|
|
@ -0,0 +1 @@
|
||||||
|
grep -hiw ERESSEA orders.dir/turn-* | cut -d\ -f2 | sort -u
|
|
@ -9,6 +9,6 @@ fi
|
||||||
cd $ERESSEA/game-$GAME
|
cd $ERESSEA/game-$GAME
|
||||||
|
|
||||||
echo "running turn $TURN, game $GAME"
|
echo "running turn $TURN, game $GAME"
|
||||||
$ERESSEA/server/bin/eressea -v1 -t $TURN run-turn.lua
|
$ERESSEA/server/bin/eressea -v3 -t $TURN run-turn.lua
|
||||||
mkdir -p log
|
mkdir -p log
|
||||||
ln -f eressea.log log/eressea.log.$TURN
|
ln -f eressea.log log/eressea.log.$TURN
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
GAME=$1
|
||||||
|
TURN=$2
|
||||||
|
|
||||||
|
if [ ! -d $ERESSEA/game-$GAME ] ; then
|
||||||
|
echo "No such game: $GAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $ERESSEA/game-$GAME
|
||||||
|
if [ -z $TURN ]; then
|
||||||
|
TURN=$(cat turn)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "running turn $TURN, game $GAME"
|
||||||
|
if [ -d orders.dir.$TURN ]; then
|
||||||
|
echo "orders.dir.$TURN already exists"
|
||||||
|
else
|
||||||
|
mv orders.dir orders.dir.$TURN
|
||||||
|
mkdir -p orders.dir
|
||||||
|
fi
|
||||||
|
ls -1rt orders.dir.$TURN/turn-* | xargs cat > orders.$TURN
|
||||||
|
$ERESSEA/bin/eressea -t $TURN run-turn.lua
|
|
@ -1,6 +1,10 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
if [ -z $ERESSEA ]; then
|
if [ -z $ERESSEA ]; then
|
||||||
echo "You have to define the \$ERESSEA environment variable to run $0"
|
ERESSEA=`echo $PWD |sed -e 's/\/game.*//'`
|
||||||
|
echo "Assuming that ERESSEA=$ERESSEA"
|
||||||
|
fi
|
||||||
|
if [ ! -f reports.txt ]; then
|
||||||
|
echo "need to run $0 from the report direcory"
|
||||||
exit -2
|
exit -2
|
||||||
fi
|
fi
|
||||||
source $HOME/bin/functions.sh
|
source $HOME/bin/functions.sh
|
||||||
|
@ -19,17 +23,8 @@ then
|
||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
|
|
||||||
EMAIL=$1
|
addr=$1
|
||||||
SUBJECT=$2
|
subj=$2
|
||||||
shift 2
|
shift 2
|
||||||
|
|
||||||
ATTACHMENTS=""
|
cat $ERESSEA/etc/$TEMPLATE | mutt -F $ERESSEA/etc/muttrc -s "$subj" -a $* -- $addr
|
||||||
while [ $# -gt 0 ]
|
|
||||||
do
|
|
||||||
if [ -e "$1" ]; then
|
|
||||||
ATTACHMENTS="-a $1 $ATTACHMENTS"
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
cat $ERESSEA/etc/$TEMPLATE | mutt -F $ERESSEA/etc/muttrc -s "$SUBJECT" $ATTACHMENTS -- $EMAIL
|
|
||||||
|
|
|
@ -39,7 +39,10 @@ while [ -e /tmp/.stopped ] ; do
|
||||||
echo "waiting 2 minutes for lockfile in /tmp/.stopped to clear"
|
echo "waiting 2 minutes for lockfile in /tmp/.stopped to clear"
|
||||||
sleep 120
|
sleep 120
|
||||||
done
|
done
|
||||||
mutt -F $ERESSEA/etc/muttrc -s "$2" -a "$3" -- $1 < $TEMPLATE
|
addr=$1
|
||||||
|
subject=$2
|
||||||
|
shift 2
|
||||||
|
mutt -F $ERESSEA/etc/muttrc -s "$subject" -a $* -- $addr < $TEMPLATE
|
||||||
|
|
||||||
if [ $? -ne 0 ] ; then
|
if [ $? -ne 0 ] ; then
|
||||||
echo "Sending failed for email/report: $2/$3"
|
echo "Sending failed for email/report: $2/$3"
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
##
|
||||||
|
## Prepare the report
|
||||||
|
|
||||||
|
if [ -z $ERESSEA ]; then
|
||||||
|
echo "You have to define the \$ERESSEA environment variable to run $0"
|
||||||
|
exit -2
|
||||||
|
fi
|
||||||
|
source $HOME/bin/functions.sh
|
||||||
|
source $ERESSEA/etc/eressea.conf
|
||||||
|
|
||||||
|
if [ ! -z $1 ]; then
|
||||||
|
GAME=$ERESSEA/game-$1
|
||||||
|
else
|
||||||
|
GAME=$ERESSEA
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $GAME/reports || abort "could not chdir to reports directory"
|
||||||
|
for REPORT in *.sh
|
||||||
|
do
|
||||||
|
echo -n "Sending "
|
||||||
|
basename $REPORT .sh
|
||||||
|
bash $REPORT
|
||||||
|
done
|
||||||
|
cd -
|
||||||
|
|
||||||
|
if [ -e $GAME/ages.sh ]; then
|
||||||
|
cd $GAME
|
||||||
|
./ages.sh
|
||||||
|
cd -
|
||||||
|
fi
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 40ae383100a8f012393ab29bc3d98e182fe57c19
|
Subproject commit 45f4577b8205d87b78d2b1f30b5c9baa25c86779
|
|
@ -2212,12 +2212,6 @@
|
||||||
<text locale="de">Schaden</text>
|
<text locale="de">Schaden</text>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<!--report newbie info -->
|
|
||||||
<string name="nr_nmr">
|
|
||||||
<text locale="de">Deine Partei hat letzte Runde keinen Zug
|
|
||||||
abgegeben!</text>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
<namespace name="race">
|
<namespace name="race">
|
||||||
<string name="snowman">
|
<string name="snowman">
|
||||||
<text locale="de">Schneemann</text>
|
<text locale="de">Schneemann</text>
|
||||||
|
@ -3604,11 +3598,11 @@
|
||||||
</string>
|
</string>
|
||||||
<string name="p2">
|
<string name="p2">
|
||||||
<text locale="en">The "Water of Life" allows living trees to be created from logs. A Knotroot and Elvendear are heated until one can just still keep one's finger in. This is then poured into a jar and allowed to cool slowly. The extract is sufficient for 10 pieces of wood.</text>
|
<text locale="en">The "Water of Life" allows living trees to be created from logs. A Knotroot and Elvendear are heated until one can just still keep one's finger in. This is then poured into a jar and allowed to cool slowly. The extract is sufficient for 10 pieces of wood.</text>
|
||||||
<text locale="de">Das 'Wasser des Lebens' ist in der Lage, aus gefällten Baumstämmen wieder lebende Bäume zu machen. Dazu wird ein knotiger Saugwurz zusammen mit einem Elfenlieb erwärmt, so daß man gerade noch den Finger reinhalten kann. Dies gieße man in ein Gefäß und lasse es langsam abkühlen. Der Extrakt reicht für 10 Holzstämme.</text>
|
<text locale="de">Das 'Wasser des Lebens' ist in der Lage, aus gefällten Baumstämmen wieder lebende Bäume zu machen. Dazu wird ein knotiger Saugwurz zusammen mit einem Elfenlieb erwärmt, so dass man gerade noch den Finger reinhalten kann. Dies gieße man in ein Gefäß und lasse es langsam abkühlen. Der Extrakt reicht für 10 Holzstämme.</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="p3">
|
<string name="p3">
|
||||||
<text locale="en">Allow a Tangy Temerity to simmer for three hours in a litre of water, then add a grated Mandrake, and sprinkle in a Gapgrowth harvested at full moon. The whole brew should then be allowed to stew for three days in a warm place. This potion increases the strength and endurance of ten men so that they can achieve twice as much in a week.</text>
|
<text locale="en">Allow a Tangy Temerity to simmer for three hours in a litre of water, then add a grated Mandrake, and sprinkle in a Gapgrowth harvested at full moon. The whole brew should then be allowed to stew for three days in a warm place. This potion increases the strength and endurance of ten men so that they can achieve twice as much in a week.</text>
|
||||||
<text locale="de">Man lasse einen Würzigen Wagemut drei Stunden lang in einem Liter Wasser köcheln. Dann gebe man eine geriebene Alraune dazu und bestreue das ganze mit bei Vollmond geerntetem Spaltwachs. Nun lasse man den Sud drei Tage an einem dunklen und warmen Ort ziehen und seie dann die Flüssigkeit ab. Dieser Schaffenstrunk erhöht die Kraft und Ausdauer von zehn Männern, so daß sie doppelt soviel schaffen können wie sonst.</text>
|
<text locale="de">Man lasse einen Würzigen Wagemut drei Stunden lang in einem Liter Wasser köcheln. Dann gebe man eine geriebene Alraune dazu und bestreue das ganze mit bei Vollmond geerntetem Spaltwachs. Nun lasse man den Sud drei Tage an einem dunklen und warmen Ort ziehen und seie dann die Flüssigkeit ab. Dieser Schaffenstrunk erhöht die Kraft und Ausdauer von zehn Männern, so dass sie doppelt soviel schaffen können wie sonst.</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="ointment">
|
<string name="ointment">
|
||||||
<text locale="en">When one is severely wounded after a hard battle it is advisable to have some Ointment to hand. Applied to wounds, this magical paste closes them in the blink of an eye. For the preparation the alchemist requires a cobalt fungus, tangy temerity, and white hemlock. A dose of the potion heals up to 400 hitpoints.</text>
|
<text locale="en">When one is severely wounded after a hard battle it is advisable to have some Ointment to hand. Applied to wounds, this magical paste closes them in the blink of an eye. For the preparation the alchemist requires a cobalt fungus, tangy temerity, and white hemlock. A dose of the potion heals up to 400 hitpoints.</text>
|
||||||
|
@ -3632,7 +3626,7 @@
|
||||||
</string>
|
</string>
|
||||||
<string name="p9">
|
<string name="p9">
|
||||||
<text locale="en">To make a horsepower potion, chop a peyote, a cobalt fungus and some knotroot, and boil it in a bucketful of water. Then add some sand reeker and let the mixture steep for three days. Finally one gives this to the horses to drink, to double their procreation.</text>
|
<text locale="en">To make a horsepower potion, chop a peyote, a cobalt fungus and some knotroot, and boil it in a bucketful of water. Then add some sand reeker and let the mixture steep for three days. Finally one gives this to the horses to drink, to double their procreation.</text>
|
||||||
<text locale="de">Für das Pferdeglück zerhacke man einen Kakteenschwitz, einen blauen Baumringel und etwas knotigen Saugwurz und koche das ganze mit einem Eimer Wasser auf. Dann füge man etwas Sandfäule dazu und lasse diesen Sud drei Tage lang ziehen. Letztlich gebe man es den Pferden zu trinken, auf daß sie sich doppelt so schnell vermehren.</text>
|
<text locale="de">Für das Pferdeglück zerhacke man einen Kakteenschwitz, einen blauen Baumringel und etwas knotigen Saugwurz und koche das ganze mit einem Eimer Wasser auf. Dann füge man etwas Sandfäule dazu und lasse diesen Sud drei Tage lang ziehen. Letztlich gebe man es den Pferden zu trinken, auf dass sie sich doppelt so schnell vermehren.</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="p10">
|
<string name="p10">
|
||||||
<text locale="en">The use of the berserkers blood potion is advised to increase one's warriors abilities to new heights. To create this, one needs a white hemlock, some flatroot, sand reeker and a mandrake. All ingredients have to be sliced as finely as possible, after which it is boiled for two hours. The cooled brew is strained through a cloth. The resulting juice is enough to improve up to ten warriors.</text>
|
<text locale="en">The use of the berserkers blood potion is advised to increase one's warriors abilities to new heights. To create this, one needs a white hemlock, some flatroot, sand reeker and a mandrake. All ingredients have to be sliced as finely as possible, after which it is boiled for two hours. The cooled brew is strained through a cloth. The resulting juice is enough to improve up to ten warriors.</text>
|
||||||
|
@ -3644,7 +3638,7 @@
|
||||||
</string>
|
</string>
|
||||||
<string name="truthpotion">
|
<string name="truthpotion">
|
||||||
<text locale="en">This simple but very potent brew sharpens the senses of anyone that drinks of it and makes him able to see through even the most complex illusions for one week.</text>
|
<text locale="en">This simple but very potent brew sharpens the senses of anyone that drinks of it and makes him able to see through even the most complex illusions for one week.</text>
|
||||||
<text locale="de">Dieses wirkungsvolle einfache Gebräu schärft die Sinne des Trinkenden derart, daß er in der Lage ist, eine Woche lang auch die komplexesten Illusionen zu durchschauen.</text>
|
<text locale="de">Dieses wirkungsvolle einfache Gebräu schärft die Sinne des Trinkenden derart, dass er in der Lage ist, eine Woche lang auch die komplexesten Illusionen zu durchschauen.</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="p13">
|
<string name="p13">
|
||||||
<text locale="en">One of the most rare and prized of all alchemist elixers, this potion grants the user a dragon's power for a few weeks. The potion increases the life-energy of a maximum of ten people fivefold. The effect is strongest right after drinking and slowly decreases over time. To brew this potion the alchemist needs an elvendear, a windbag, a piece of waterfinder and a spider ivy. Finally he dusts it with some minced bubblemorel and stirrs the powder into some dragon's blood. </text>
|
<text locale="en">One of the most rare and prized of all alchemist elixers, this potion grants the user a dragon's power for a few weeks. The potion increases the life-energy of a maximum of ten people fivefold. The effect is strongest right after drinking and slowly decreases over time. To brew this potion the alchemist needs an elvendear, a windbag, a piece of waterfinder and a spider ivy. Finally he dusts it with some minced bubblemorel and stirrs the powder into some dragon's blood. </text>
|
||||||
|
@ -3928,7 +3922,7 @@
|
||||||
<text locale="de">Gesang des Lebens analysieren</text>
|
<text locale="de">Gesang des Lebens analysieren</text>
|
||||||
<text locale="en">Analyze Song of Life</text>
|
<text locale="en">Analyze Song of Life</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="cerrdorfumbleshield">
|
<string name="cerddorfumbleshield">
|
||||||
<text locale="de">Bannlied</text>
|
<text locale="de">Bannlied</text>
|
||||||
<text locale="en">Countersong</text>
|
<text locale="en">Countersong</text>
|
||||||
</string>
|
</string>
|
||||||
|
@ -4330,7 +4324,7 @@
|
||||||
<text locale="de">Kraft der Natur</text>
|
<text locale="de">Kraft der Natur</text>
|
||||||
<text locale="en">force of nature</text>
|
<text locale="en">force of nature</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="wdwpyramid_cerrdor">
|
<string name="wdwpyramid_cerddor">
|
||||||
<text locale="de">Gesang der Götter</text>
|
<text locale="de">Gesang der Götter</text>
|
||||||
<text locale="en">Song of the Gods</text>
|
<text locale="en">Song of the Gods</text>
|
||||||
</string>
|
</string>
|
||||||
|
@ -4908,7 +4902,7 @@
|
||||||
<string name="shockwave">
|
<string name="shockwave">
|
||||||
<text locale="de">Dieser Zauber läßt eine Welle aus purer Kraft über die
|
<text locale="de">Dieser Zauber läßt eine Welle aus purer Kraft über die
|
||||||
gegnerischen Reihen hinwegfegen. Viele Kämpfer wird der Schock so
|
gegnerischen Reihen hinwegfegen. Viele Kämpfer wird der Schock so
|
||||||
benommen machen, daß sie für einen kurzen Moment nicht angreifen
|
benommen machen, dass sie für einen kurzen Moment nicht angreifen
|
||||||
können.</text>
|
können.</text>
|
||||||
<text locale="en">A wave of pure force spreads out from the magician,
|
<text locale="en">A wave of pure force spreads out from the magician,
|
||||||
crashing into the enemy ranks. Many warriors are thrown off balance and
|
crashing into the enemy ranks. Many warriors are thrown off balance and
|
||||||
|
@ -5132,7 +5126,7 @@
|
||||||
able to decipher all enchantments or spells, which
|
able to decipher all enchantments or spells, which
|
||||||
aren't disguised beyond your capability.</text>
|
aren't disguised beyond your capability.</text>
|
||||||
</string>
|
</string>
|
||||||
<string name="cerrdorfumbleshield">
|
<string name="cerddorfumbleshield">
|
||||||
<text locale="de">Dieser schrille Gesang hallt über das
|
<text locale="de">Dieser schrille Gesang hallt über das
|
||||||
ganze Schlachtfeld. Die besonderen Dissonanzen in den
|
ganze Schlachtfeld. Die besonderen Dissonanzen in den
|
||||||
Melodien machen es Magiern fast unmöglich, sich auf ihre
|
Melodien machen es Magiern fast unmöglich, sich auf ihre
|
||||||
|
@ -5860,11 +5854,10 @@
|
||||||
das 50fache und auch im Kampf werden sich die
|
das 50fache und auch im Kampf werden sich die
|
||||||
erhöhte Kraft und die trollisch zähe Haut
|
erhöhte Kraft und die trollisch zähe Haut
|
||||||
positiv auswirken.</text>
|
positiv auswirken.</text>
|
||||||
<text locale="en">This artifact gives the one wearing it
|
<text locale="en">This artifact gives the wearer
|
||||||
the strength of a cavetroll. He will be able to
|
the strength of a cavetroll. He will be able to
|
||||||
carry fifty times as much as normal and also in
|
carry fifty times his normal load, as well as
|
||||||
combat his enhanced strength and tough troll
|
gain strength and tough troll skin in combat.</text>
|
||||||
skin will serve him well.</text>
|
|
||||||
</string>
|
</string>
|
||||||
<string name="auraleak">
|
<string name="auraleak">
|
||||||
<text locale="de">Der Schwarzmagier kann mit diesem
|
<text locale="de">Der Schwarzmagier kann mit diesem
|
||||||
|
@ -5874,7 +5867,7 @@
|
||||||
Region werden einen Großteil ihrer Aura
|
Region werden einen Großteil ihrer Aura
|
||||||
verlieren.</text>
|
verlieren.</text>
|
||||||
<text locale="en">With this dark ritual the
|
<text locale="en">With this dark ritual the
|
||||||
chaossorcerer causes a deep rift to appear in
|
chaos sorcerer causes a deep rift to appear in
|
||||||
the astral balance that will tear all magical
|
the astral balance that will tear all magical
|
||||||
power from a region. All spellcasters in that
|
power from a region. All spellcasters in that
|
||||||
region will lose most of their aura.</text>
|
region will lose most of their aura.</text>
|
||||||
|
@ -6840,6 +6833,11 @@
|
||||||
<text locale="en">black </text>
|
<text locale="en">black </text>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
|
<string name="arch">
|
||||||
|
<text locale="de">Erz</text>
|
||||||
|
<text locale="en">arch</text>
|
||||||
|
</string>
|
||||||
|
|
||||||
<string name="star">
|
<string name="star">
|
||||||
<text locale="de">Sternen</text>
|
<text locale="de">Sternen</text>
|
||||||
<text locale="en">star </text>
|
<text locale="en">star </text>
|
||||||
|
@ -6954,14 +6952,9 @@
|
||||||
<text locale="en">is helping</text>
|
<text locale="en">is helping</text>
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<string name="has_moved_one">
|
<string name="travelthru_header">
|
||||||
<text locale="de">hat die Region durchquert.</text>
|
<text locale="de">Die Region wurde durchquert von </text>
|
||||||
<text locale="en">passed through the region.</text>
|
<text locale="en">The region was crossed by </text>
|
||||||
</string>
|
|
||||||
|
|
||||||
<string name="has_moved_many">
|
|
||||||
<text locale="de">haben die Region durchquert.</text>
|
|
||||||
<text locale="en">passed through the region.</text>
|
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<string name="see_travel">
|
<string name="see_travel">
|
||||||
|
|
|
@ -1660,10 +1660,6 @@
|
||||||
</string>
|
</string>
|
||||||
</namespace>
|
</namespace>
|
||||||
|
|
||||||
<string name="nr_nmr">
|
|
||||||
<text locale="en">No orders were received for your faction!</text>
|
|
||||||
</string>
|
|
||||||
|
|
||||||
<!-- resources -->
|
<!-- resources -->
|
||||||
<string name="mistletoe">
|
<string name="mistletoe">
|
||||||
<text locale="de">Mistelzweig</text>
|
<text locale="de">Mistelzweig</text>
|
||||||
|
|
|
@ -2051,7 +2051,4 @@
|
||||||
<text locale="fr">côte ouest</text>
|
<text locale="fr">côte ouest</text>
|
||||||
</string>
|
</string>
|
||||||
</namespace>
|
</namespace>
|
||||||
<string name="nr_nmr">
|
|
||||||
<text locale="fr">Aucun ordre reçu pour votre faction !</text>
|
|
||||||
</string>
|
|
||||||
</strings>
|
</strings>
|
||||||
|
|
|
@ -390,8 +390,17 @@
|
||||||
<text locale="de">"Die Ausrüstung von $unit($unit) scheint unsichtbar. ($int36($id))"</text>
|
<text locale="de">"Die Ausrüstung von $unit($unit) scheint unsichtbar. ($int36($id))"</text>
|
||||||
<text locale="en">"$unit($unit)'s equipment is invisible. ($int36($id))"</text>
|
<text locale="en">"$unit($unit)'s equipment is invisible. ($int36($id))"</text>
|
||||||
</message>
|
</message>
|
||||||
<message name="curseinfo::magicresistance" section="events">
|
<message name="curseinfo::magicresistance_unit" section="events">
|
||||||
<type>
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="id" type="int"/>
|
||||||
|
</type>
|
||||||
|
<text locale="de">"Die natürliche Widerstandskraft gegen Verzauberung ist gestärkt. ($int36($id))"</text>
|
||||||
|
<text locale="en">"The magical resistance has been strengthened. ($int36($id))"</text>
|
||||||
|
</message>
|
||||||
|
<message name="curseinfo::magicresistance_building" section="events">
|
||||||
|
<type>
|
||||||
|
<arg name="building" type="building"/>
|
||||||
<arg name="id" type="int"/>
|
<arg name="id" type="int"/>
|
||||||
</type>
|
</type>
|
||||||
<text locale="de">"Die natürliche Widerstandskraft gegen Verzauberung ist gestärkt. ($int36($id))"</text>
|
<text locale="de">"Die natürliche Widerstandskraft gegen Verzauberung ist gestärkt. ($int36($id))"</text>
|
||||||
|
@ -413,6 +422,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message name="curseinfo::magicwalls" section="events">
|
<message name="curseinfo::magicwalls" section="events">
|
||||||
<type>
|
<type>
|
||||||
|
<arg name="building" type="building"/>
|
||||||
<arg name="id" type="int"/>
|
<arg name="id" type="int"/>
|
||||||
</type>
|
</type>
|
||||||
<text locale="de">"Diese Mauern wirken, als wären sie direkt aus der Erde gewachsen und nicht erbaut. ($int36($id))"</text>
|
<text locale="de">"Diese Mauern wirken, als wären sie direkt aus der Erde gewachsen und nicht erbaut. ($int36($id))"</text>
|
||||||
|
@ -420,6 +430,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message name="curseinfo::buildingunknown" section="events">
|
<message name="curseinfo::buildingunknown" section="events">
|
||||||
<type>
|
<type>
|
||||||
|
<arg name="building" type="building"/>
|
||||||
<arg name="id" type="int"/>
|
<arg name="id" type="int"/>
|
||||||
</type>
|
</type>
|
||||||
<text locale="de">"Ein magischer Schimmer liegt auf diesen Mauern. ($int36($id))"</text>
|
<text locale="de">"Ein magischer Schimmer liegt auf diesen Mauern. ($int36($id))"</text>
|
||||||
|
@ -540,6 +551,7 @@
|
||||||
<message name="curseinfo::nocostbuilding" section="events">
|
<message name="curseinfo::nocostbuilding" section="events">
|
||||||
<type>
|
<type>
|
||||||
<arg name="id" type="int"/>
|
<arg name="id" type="int"/>
|
||||||
|
<arg name="building" type="building"/>
|
||||||
</type>
|
</type>
|
||||||
<text locale="de">"Der Zahn der Zeit kann diesen Mauern nichts anhaben. ($int36($id))"</text>
|
<text locale="de">"Der Zahn der Zeit kann diesen Mauern nichts anhaben. ($int36($id))"</text>
|
||||||
<text locale="en">"Time cannot touch these walls. ($int36($id))"</text>
|
<text locale="en">"Time cannot touch these walls. ($int36($id))"</text>
|
||||||
|
@ -829,11 +841,11 @@
|
||||||
</message>
|
</message>
|
||||||
<message name="nr_score" section="nr">
|
<message name="nr_score" section="nr">
|
||||||
<type>
|
<type>
|
||||||
<arg name="score" type="int"/>
|
<arg name="score" type="string"/>
|
||||||
<arg name="average" type="int"/>
|
<arg name="average" type="string"/>
|
||||||
</type>
|
</type>
|
||||||
<text locale="de">"Deine Partei hat $int($score) Punkte. Der Durchschnitt für Parteien ähnlichen Alters ist $int($average) Punkte."</text>
|
<text locale="de">"Deine Partei hat ${score} Punkte. Der Durchschnitt für Parteien ähnlichen Alters ist ${average} Punkte."</text>
|
||||||
<text locale="en">"Your faction has a score of $int($score). The average score for similar factions is $int($average)."</text>
|
<text locale="en">"Your faction has a score of ${score}. The average score for similar factions is ${average}."</text>
|
||||||
</message>
|
</message>
|
||||||
<message name="nr_header_date" section="nr">
|
<message name="nr_header_date" section="nr">
|
||||||
<type>
|
<type>
|
||||||
|
@ -902,7 +914,7 @@
|
||||||
<arg name="transparent" type="int"/>
|
<arg name="transparent" type="int"/>
|
||||||
<arg name="object" type="string"/>
|
<arg name="object" type="string"/>
|
||||||
</type>
|
</type>
|
||||||
<text locale="de">"$if($transparent," befindet sich"," versperrt") ${object} $if($transparent,""," die Sicht")."</text>
|
<text locale="de">"$if($transparent," befindet sich"," versperrt") ${object}$if($transparent,""," die Sicht")."</text>
|
||||||
<text locale="en">"$if($transparent," there is"," sight is blocked by ") ${object}."</text>
|
<text locale="en">"$if($transparent," there is"," sight is blocked by ") ${object}."</text>
|
||||||
</message>
|
</message>
|
||||||
<message name="nr_building_besieged" section="nr">
|
<message name="nr_building_besieged" section="nr">
|
||||||
|
@ -1182,7 +1194,25 @@
|
||||||
<text locale="en">"$unit($unit) drowns in $region($region)."</text>
|
<text locale="en">"$unit($unit) drowns in $region($region)."</text>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
<message name="drown_amphibian_dead" section="events">
|
<message name="poison_damage" section="events">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
</type>
|
||||||
|
<text locale="de">"$unit($unit) nimmt Schaden durch den Giftelementar in $region($region)."</text>
|
||||||
|
<text locale="en">"$unit($unit) is taking poison damage in $region($region)."</text>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="poison_death" section="events">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
</type>
|
||||||
|
<text locale="de">"$unit($unit) stirbt am Schaden durch den Giftelementar in $region($region)."</text>
|
||||||
|
<text locale="en">"$unit($unit) dies from poison damage taken in $region($region)."</text>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="drown_amphibian_dead" section="events">
|
||||||
<type>
|
<type>
|
||||||
<arg name="amount" type="int"/>
|
<arg name="amount" type="int"/>
|
||||||
<arg name="unit" type="unit"/>
|
<arg name="unit" type="unit"/>
|
||||||
|
@ -2800,17 +2830,6 @@
|
||||||
<text locale="de">"$unit($unit) in $region($region) produziert $int($amount)$if($eq($wanted,$amount),""," von $int($wanted)") $resource($resource,$wanted)."</text>
|
<text locale="de">"$unit($unit) in $region($region) produziert $int($amount)$if($eq($wanted,$amount),""," von $int($wanted)") $resource($resource,$wanted)."</text>
|
||||||
<text locale="en">"$unit($unit) in $region($region) produces $int($amount)$if($eq($wanted,$amount),""," of $int($wanted)") $resource($resource,$amount)."</text>
|
<text locale="en">"$unit($unit) in $region($region) produces $int($amount)$if($eq($wanted,$amount),""," of $int($wanted)") $resource($resource,$amount)."</text>
|
||||||
</message>
|
</message>
|
||||||
<message name="manufacture" section="production">
|
|
||||||
<type>
|
|
||||||
<arg name="unit" type="unit"/>
|
|
||||||
<arg name="region" type="region"/>
|
|
||||||
<arg name="amount" type="int"/>
|
|
||||||
<arg name="wanted" type="int"/>
|
|
||||||
<arg name="resource" type="resource"/>
|
|
||||||
</type>
|
|
||||||
<text locale="de">"$unit($unit) in $region($region) produziert $int($amount)$if($eq($wanted,$amount),""," von $int($wanted)") $resource($resource,$wanted)."</text>
|
|
||||||
<text locale="en">"$unit($unit) in $region($region) produces $int($amount)$if($eq($wanted,$amount),""," of $int($wanted)") $resource($resource,$amount)."</text>
|
|
||||||
</message>
|
|
||||||
<message name="buildbuilding" section="production">
|
<message name="buildbuilding" section="production">
|
||||||
<type>
|
<type>
|
||||||
<arg name="unit" type="unit"/>
|
<arg name="unit" type="unit"/>
|
||||||
|
@ -6406,7 +6425,7 @@
|
||||||
<arg name="region" type="region"/>
|
<arg name="region" type="region"/>
|
||||||
<arg name="command" type="order"/>
|
<arg name="command" type="order"/>
|
||||||
</type>
|
</type>
|
||||||
<text locale="de">"$unit($unit) in $region($region): '$order($command)' - Die Einheit hat soetwas nicht."</text>
|
<text locale="de">"$unit($unit) in $region($region): '$order($command)' - Die Einheit hat so etwas nicht."</text>
|
||||||
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - The unit does not have this."</text>
|
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - The unit does not have this."</text>
|
||||||
</message>
|
</message>
|
||||||
<message name="error42" section="errors">
|
<message name="error42" section="errors">
|
||||||
|
@ -7100,9 +7119,16 @@
|
||||||
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - Your faction must be at least $int($turns) weeks old to give something to another faction."</text>
|
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - Your faction must be at least $int($turns) weeks old to give something to another faction."</text>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
<message name="turnreminder" section="errors">
|
<message name="nmr_warning" section="errors">
|
||||||
<type>
|
<type/>
|
||||||
</type>
|
<text locale="de">Deine Partei hat letzte Runde keinen Zug
|
||||||
|
abgegeben!</text>
|
||||||
|
<text locale="en">No orders were received for your faction!</text>
|
||||||
|
<text locale="fr">Aucun ordre reçu pour votre faction !</text>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="nmr_warning_final" section="errors">
|
||||||
|
<type/>
|
||||||
<text locale="de">"Bitte sende die Befehle nächste Runde ein, wenn du weiterspielen möchtest."</text>
|
<text locale="de">"Bitte sende die Befehle nächste Runde ein, wenn du weiterspielen möchtest."</text>
|
||||||
<text locale="en">"Please send in orders for the next turn if you want to continue playing."</text>
|
<text locale="en">"Please send in orders for the next turn if you want to continue playing."</text>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<resource name="cart" big="true">
|
<resource name="cart">
|
||||||
<item capacity="14000" weight="4000" score="60" vehicle="yes">
|
<item capacity="14000" weight="4000" score="60" vehicle="yes" big="yes">
|
||||||
<construction skill="cartmaking" minskill="1" reqsize="1">
|
<construction skill="cartmaking" minskill="1" reqsize="1">
|
||||||
<requirement type="log" quantity="5"/>
|
<requirement type="log" quantity="5"/>
|
||||||
</construction>
|
</construction>
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
||||||
<terrains>
|
|
||||||
<!-- defaults: walk="yes" sail="yes" fly="yes" swim="no" forest="no" sea="no" land="yes" forbidden="no" arctic="no" cavalry="no" -->
|
|
||||||
<terrain name="ocean" size="100" walk="no" swim="yes" land="no" sea="yes" />
|
|
||||||
<terrain name="plain" size="10000" road="50" forest="yes" cavalry="yes" seed="3">
|
|
||||||
<herb name="h0" />
|
|
||||||
<herb name="h1" />
|
|
||||||
<herb name="h2" />
|
|
||||||
<herb name="h3" />
|
|
||||||
<herb name="h4" />
|
|
||||||
<herb name="h5" />
|
|
||||||
<resource name="iron" chance="0.1" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.15" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.01" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="swamp" size="2000" road="75" seed="2">
|
|
||||||
<herb name="h6" />
|
|
||||||
<herb name="h7" />
|
|
||||||
<herb name="h8" />
|
|
||||||
<resource name="iron" chance="0.02" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.02" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.02" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="desert" size="500" road="100" cavalry="yes" seed="2">
|
|
||||||
<herb name="h9" />
|
|
||||||
<herb name="h10" />
|
|
||||||
<herb name="h11" />
|
|
||||||
<resource name="iron" chance="0.15" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="highland" size="4000" road="100" cavalry="yes" seed="2">
|
|
||||||
<herb name="h12" />
|
|
||||||
<herb name="h13" />
|
|
||||||
<herb name="h14" />
|
|
||||||
<resource name="iron" chance="0.15" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="mountain" size="1000" road="250" seed="2">
|
|
||||||
<herb name="h15" />
|
|
||||||
<herb name="h16" />
|
|
||||||
<herb name="h17" />
|
|
||||||
<resource name="iron" chance="1.0" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="1.0" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="glacier" size="100" road="250" arctic="yes" seed="2">
|
|
||||||
<herb name="h18" />
|
|
||||||
<herb name="h19" />
|
|
||||||
<herb name="h20" />
|
|
||||||
<resource name="iron" chance="1.0" level="1" base="3" div="50" />
|
|
||||||
<resource name="stone" chance="1.0" level="1" base="2" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="iceberg_sleep" size="100" road="250" arctic="yes">
|
|
||||||
<herb name="h18" />
|
|
||||||
<herb name="h19" />
|
|
||||||
<herb name="h20" />
|
|
||||||
<resource name="iron" chance="0.9" level="1" base="3" div="50" />
|
|
||||||
<resource name="stone" chance="0.9" level="1" base="2" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="iceberg" size="100" arctic="yes">
|
|
||||||
<herb name="h18" />
|
|
||||||
<herb name="h19" />
|
|
||||||
<herb name="h20" />
|
|
||||||
<resource name="iron" chance="0.9" level="1" base="3" div="50" />
|
|
||||||
<resource name="stone" chance="0.9" level="1" base="2" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="firewall" size="100" road="250" land="no" walk="no" sail="no" fly="no" forbidden="yes" />
|
|
||||||
<terrain name="fog" sail="no" land="no" size="0" />
|
|
||||||
<terrain name="thickfog" forbidden="yes" sail="no" walk="no" fly="no" land="no" size="0" />
|
|
||||||
<terrain name="volcano" size="500" road="250" seed="1">
|
|
||||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="activevolcano" size="500" road="250">
|
|
||||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
</terrains>
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<resource name="catapult">
|
<resource name="catapult">
|
||||||
<item weight="10000">
|
<item weight="10000" big="yes">
|
||||||
<construction skill="cartmaking" minskill="5" reqsize="1">
|
<construction skill="cartmaking" minskill="5" reqsize="1">
|
||||||
<requirement type="log" quantity="10"/>
|
<requirement type="log" quantity="10"/>
|
||||||
</construction>
|
</construction>
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
<entry spell="summon_familiar" level="9" />
|
<entry spell="summon_familiar" level="9" />
|
||||||
<entry spell="draigfumbleshield" level="9" />
|
<entry spell="draigfumbleshield" level="9" />
|
||||||
<entry spell="gwyrrdfumbleshield" level="5" />
|
<entry spell="gwyrrdfumbleshield" level="5" />
|
||||||
<entry spell="cerrdorfumbleshield" level="5" />
|
<entry spell="cerddorfumbleshield" level="5" />
|
||||||
<entry spell="tybiedfumbleshield" level="2" />
|
<entry spell="tybiedfumbleshield" level="2" />
|
||||||
<entry spell="concealing_aura" level="1" />
|
<entry spell="concealing_aura" level="1" />
|
||||||
<entry spell="shockwave" level="5" />
|
<entry spell="shockwave" level="5" />
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<entry spell="calm_monster" level="6" />
|
<entry spell="calm_monster" level="6" />
|
||||||
<entry spell="calm_riot" level="14" />
|
<entry spell="calm_riot" level="14" />
|
||||||
<entry spell="cerddor_destroymagic" level="8" />
|
<entry spell="cerddor_destroymagic" level="8" />
|
||||||
<entry spell="cerrdorfumbleshield" level="5" />
|
<entry spell="cerddorfumbleshield" level="5" />
|
||||||
<entry spell="chaosrow" level="8" />
|
<entry spell="chaosrow" level="8" />
|
||||||
<entry spell="clone" level="9" />
|
<entry spell="clone" level="9" />
|
||||||
<entry spell="coldfront" level="8" />
|
<entry spell="coldfront" level="8" />
|
||||||
|
|
|
@ -619,7 +619,7 @@
|
||||||
<spell name="gwyrrdfumbleshield" rank="2" index="144" variable="true" combat="1">
|
<spell name="gwyrrdfumbleshield" rank="2" index="144" variable="true" combat="1">
|
||||||
<resource name="aura" amount="5" cost="level"/>
|
<resource name="aura" amount="5" cost="level"/>
|
||||||
</spell>
|
</spell>
|
||||||
<spell name="cerrdorfumbleshield" rank="2" index="145" variable="true" combat="1">
|
<spell name="cerddorfumbleshield" rank="2" index="145" variable="true" combat="1">
|
||||||
<resource name="aura" amount="5" cost="level"/>
|
<resource name="aura" amount="5" cost="level"/>
|
||||||
</spell>
|
</spell>
|
||||||
<spell name="tybiedfumbleshield" rank="2" index="146" variable="true" combat="1">
|
<spell name="tybiedfumbleshield" rank="2" index="146" variable="true" combat="1">
|
||||||
|
|
|
@ -207,6 +207,17 @@
|
||||||
</namespace>
|
</namespace>
|
||||||
|
|
||||||
<namespace name="spellinfo">
|
<namespace name="spellinfo">
|
||||||
|
<string name="concealing_aura">
|
||||||
|
<text locale="de">Dieser Zauber wird die gesamte Ausrüstung der
|
||||||
|
Zieleinheit für
|
||||||
|
einige Zeit vor den Blicken anderer verschleiern. Der
|
||||||
|
Zauber
|
||||||
|
schützt nicht vor Dieben und Spionen.</text>
|
||||||
|
<text locale="en">This spell will hide the whole equipment of a target
|
||||||
|
unit from the
|
||||||
|
looks of others. It will not protect against thieves or
|
||||||
|
spies.</text>
|
||||||
|
</string>
|
||||||
<string name="raindance">
|
<string name="raindance">
|
||||||
<text locale="de">Durch dieses uralte Tanzritual ruft der Zauberkundige
|
<text locale="de">Durch dieses uralte Tanzritual ruft der Zauberkundige
|
||||||
die Kräfte des Lebens und der Fruchtbarkeit an. Die darauf folgenden
|
die Kräfte des Lebens und der Fruchtbarkeit an. Die darauf folgenden
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<terrains>
|
|
||||||
<!-- defaults: build="yes" walk="yes" sail="yes" fly="yes" swim="no" forest="no" sea="no" land="yes" forbidden="no" arctic="no" cavalry="no" size="0" -->
|
|
||||||
<terrain name="ocean" size="100" walk="no" swim="yes" land="no" sea="yes" />
|
|
||||||
<terrain name="plain" size="4000" road="50" forest="yes" cavalry="yes" seed="3">
|
|
||||||
<herb name="h0" />
|
|
||||||
<herb name="h4" />
|
|
||||||
<resource name="iron" chance="0.1" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.15" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.01" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="swamp" size="1200" road="75" seed="2">
|
|
||||||
<herb name="h6" />
|
|
||||||
<herb name="h8" />
|
|
||||||
<resource name="iron" chance="0.02" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.02" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.02" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="desert" size="400" road="100" cavalry="yes" seed="2">
|
|
||||||
<herb name="h9" />
|
|
||||||
<herb name="h11" />
|
|
||||||
<resource name="iron" chance="0.15" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="highland" size="2300" road="100" cavalry="yes" seed="2">
|
|
||||||
<herb name="h12" />
|
|
||||||
<herb name="h14" />
|
|
||||||
<resource name="iron" chance="0.15" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="mountain" size="600" road="250" seed="2">
|
|
||||||
<herb name="h15" />
|
|
||||||
<herb name="h17" />
|
|
||||||
<resource name="iron" chance="1.0" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="1.0" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="glacier" size="150" road="250" arctic="yes" seed="2">
|
|
||||||
<herb name="h18" />
|
|
||||||
<herb name="h20" />
|
|
||||||
<resource name="iron" chance="1.0" level="1" base="3" div="50" />
|
|
||||||
<resource name="stone" chance="1.0" level="1" base="2" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="packice" land="no" arctic="yes" swim="yes"/>
|
|
||||||
<terrain name="firewall" road="250" land="no" walk="no" sail="no" fly="no" forbidden="yes" />
|
|
||||||
<terrain name="fog" sail="no" land="no" />
|
|
||||||
<terrain name="thickfog" forbidden="yes" sail="no" walk="no" fly="no" land="no" />
|
|
||||||
<terrain name="volcano" size="400" road="250" seed="1">
|
|
||||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="activevolcano" size="400" road="250">
|
|
||||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
</terrains>
|
|
|
@ -430,7 +430,7 @@
|
||||||
<attack type="1" damage="1d4"/>
|
<attack type="1" damage="1d4"/>
|
||||||
<attack type="2" damage="2d20"/>
|
<attack type="2" damage="2d20"/>
|
||||||
</race>
|
</race>
|
||||||
<race name="songdragon" magres="0.990000" maxaura="1.000000" regaura="1.000000" recruitcost="50" weight="1000" capacity="600" speed="1.500000" hp="40" ac="1" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" fly="yes" walk="yes" teach="no" getitem="yes">
|
<race name="songdragon" magres="0.990000" maxaura="1.000000" regaura="1.000000" recruitcost="50" weight="1000" capacity="600" speed="1.500000" hp="40" ac="1" damage="2d4" unarmedattack="0" unarmeddefense="0" attackmodifier="3" defensemodifier="1" fly="yes" walk="yes" teach="no" getitem="yes" unarmedguard="yes">
|
||||||
<ai splitsize="9999"/>
|
<ai splitsize="9999"/>
|
||||||
<function name="initfamiliar" value="oldfamiliars"/>
|
<function name="initfamiliar" value="oldfamiliars"/>
|
||||||
<skill name="alchemy" modifier="-99"/>
|
<skill name="alchemy" modifier="-99"/>
|
||||||
|
@ -733,7 +733,7 @@
|
||||||
<attack type="4" damage="2d12"/>
|
<attack type="4" damage="2d12"/>
|
||||||
<attack type="4" damage="2d12"/>
|
<attack type="4" damage="2d12"/>
|
||||||
</race>
|
</race>
|
||||||
<race name="wyrm" magres="0.900000" maxaura="1.000000" regaura="3.000000" recruitcost="250000" weight="18000" capacity="1000000" speed="1.000000" hp="2700" ac="8" damage="2d60" unarmedattack="0" unarmeddefense="0" attackmodifier="10" defensemodifier="10" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes">
|
<race name="wyrm" magres="0.900000" maxaura="1.000000" regaura="3.000000" recruitcost="250000" weight="18000" capacity="1000000" speed="1.000000" hp="2700" ac="8" damage="2d60" unarmedattack="0" unarmeddefense="0" attackmodifier="10" defensemodifier="10" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes">
|
||||||
<ai splitsize="1" killpeasants="yes" learn="yes"/>
|
<ai splitsize="1" killpeasants="yes" learn="yes"/>
|
||||||
<function name="name" value="namedragon"/>
|
<function name="name" value="namedragon"/>
|
||||||
<function name="move" value="movedragon"/>
|
<function name="move" value="movedragon"/>
|
||||||
|
@ -745,7 +745,7 @@
|
||||||
<attack type="4" damage="5d30"/>
|
<attack type="4" damage="5d30"/>
|
||||||
<attack type="6" spell="powerful_dragonbreath" level="12" />
|
<attack type="6" spell="powerful_dragonbreath" level="12" />
|
||||||
</race>
|
</race>
|
||||||
<race name="dragon" magres="0.700000" maxaura="1.000000" regaura="2.000000" recruitcost="50000" weight="10000" capacity="1000000" speed="1.500000" hp="900" ac="6" damage="2d30" unarmedattack="0" unarmeddefense="0" attackmodifier="7" defensemodifier="7" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes">
|
<race name="dragon" magres="0.700000" maxaura="1.000000" regaura="2.000000" recruitcost="50000" weight="10000" capacity="1000000" speed="1.500000" hp="900" ac="6" damage="2d30" unarmedattack="0" unarmeddefense="0" attackmodifier="7" defensemodifier="7" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes">
|
||||||
<ai splitsize="2" killpeasants="yes" learn="yes"/>
|
<ai splitsize="2" killpeasants="yes" learn="yes"/>
|
||||||
<function name="name" value="namedragon"/>
|
<function name="name" value="namedragon"/>
|
||||||
<function name="age" value="agedragon"/>
|
<function name="age" value="agedragon"/>
|
||||||
|
@ -758,7 +758,7 @@
|
||||||
<attack type="4" damage="3d30"/>
|
<attack type="4" damage="3d30"/>
|
||||||
<attack type="6" spell="icy_dragonbreath" level="6" />
|
<attack type="6" spell="icy_dragonbreath" level="6" />
|
||||||
</race>
|
</race>
|
||||||
<race name="youngdragon" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="10000" weight="20000" capacity="10000" speed="1.000000" hp="300" ac="4" damage="2d15" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="4" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes">
|
<race name="youngdragon" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="10000" weight="20000" capacity="10000" speed="1.000000" hp="300" ac="4" damage="2d15" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="4" scarepeasants="yes" fly="yes" walk="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes">
|
||||||
<ai splitsize="6" killpeasants="yes" learn="yes"/>
|
<ai splitsize="6" killpeasants="yes" learn="yes"/>
|
||||||
<function name="name" value="namedragon"/>
|
<function name="name" value="namedragon"/>
|
||||||
<function name="age" value="agefiredragon"/>
|
<function name="age" value="agefiredragon"/>
|
||||||
|
@ -1170,7 +1170,7 @@
|
||||||
<function name="name" value="namegeneric"/>
|
<function name="name" value="namegeneric"/>
|
||||||
<attack type="1" damage="1d1"/>
|
<attack type="1" damage="1d1"/>
|
||||||
</race>
|
</race>
|
||||||
<race name="seaserpent" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="5000" weight="20000" capacity="5000" speed="1.000000" hp="600" ac="3" damage="2d15" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="4" scarepeasants="yes" swim="yes" teach="no" getitem="yes" resistbash="yes">
|
<race name="seaserpent" magres="0.500000" maxaura="1.000000" regaura="1.000000" recruitcost="5000" weight="20000" capacity="5000" speed="1.000000" hp="600" ac="3" damage="2d15" unarmedattack="0" unarmeddefense="0" attackmodifier="4" defensemodifier="4" scarepeasants="yes" swim="yes" teach="no" getitem="yes" resistbash="yes" unarmedguard="yes">
|
||||||
<ai splitsize="6" killpeasants="yes" moverandom="yes" learn="yes"/>
|
<ai splitsize="6" killpeasants="yes" moverandom="yes" learn="yes"/>
|
||||||
<function name="name" value="namegeneric"/>
|
<function name="name" value="namegeneric"/>
|
||||||
<function name="move" value="moveswimming"/>
|
<function name="move" value="moveswimming"/>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<entry spell="summon_familiar" level="9" />
|
<entry spell="summon_familiar" level="9" />
|
||||||
<entry spell="song_of_slavery" level="13" />
|
<entry spell="song_of_slavery" level="13" />
|
||||||
<entry spell="cerddor_destroymagic" level="8" />
|
<entry spell="cerddor_destroymagic" level="8" />
|
||||||
<entry spell="cerrdorfumbleshield" level="5" />
|
<entry spell="cerddorfumbleshield" level="5" />
|
||||||
<entry spell="big_recruit" level="14" />
|
<entry spell="big_recruit" level="14" />
|
||||||
<entry spell="raindance" level="3" />
|
<entry spell="raindance" level="3" />
|
||||||
<entry spell="create_roi" level="6" />
|
<entry spell="create_roi" level="6" />
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<entry spell="calm_monster" level="6" />
|
<entry spell="calm_monster" level="6" />
|
||||||
<entry spell="calm_riot" level="15" />
|
<entry spell="calm_riot" level="15" />
|
||||||
<entry spell="cerddor_destroymagic" level="8" />
|
<entry spell="cerddor_destroymagic" level="8" />
|
||||||
<entry spell="cerrdorfumbleshield" level="5" />
|
<entry spell="cerddorfumbleshield" level="5" />
|
||||||
<entry spell="chaosrow" level="8" />
|
<entry spell="chaosrow" level="8" />
|
||||||
<entry spell="chaossuction" level="14" />
|
<entry spell="chaossuction" level="14" />
|
||||||
<entry spell="clone" level="9" />
|
<entry spell="clone" level="9" />
|
||||||
|
|
|
@ -304,6 +304,9 @@
|
||||||
<spell name="wolfhowl" rank="5" index="94" variable="true" combat="1">
|
<spell name="wolfhowl" rank="5" index="94" variable="true" combat="1">
|
||||||
<resource name="aura" amount="2" cost="level"/>
|
<resource name="aura" amount="2" cost="level"/>
|
||||||
</spell>
|
</spell>
|
||||||
|
<spell name="igjarjuk" rank="5" index="94" variable="true" combat="1">
|
||||||
|
<function name="cast" value="igjarjuk"/>
|
||||||
|
</spell>
|
||||||
<spell name="resist_magic" rank="2" index="97" parameters="u+" los="true" ship="true" variable="true">
|
<spell name="resist_magic" rank="2" index="97" parameters="u+" los="true" ship="true" variable="true">
|
||||||
<resource name="aura" amount="5" cost="level"/>
|
<resource name="aura" amount="5" cost="level"/>
|
||||||
</spell>
|
</spell>
|
||||||
|
@ -402,7 +405,7 @@
|
||||||
<spell name="gwyrrdfumbleshield" rank="2" index="144" variable="true" combat="1">
|
<spell name="gwyrrdfumbleshield" rank="2" index="144" variable="true" combat="1">
|
||||||
<resource name="aura" amount="5" cost="level"/>
|
<resource name="aura" amount="5" cost="level"/>
|
||||||
</spell>
|
</spell>
|
||||||
<spell name="cerrdorfumbleshield" rank="2" index="145" variable="true" combat="1">
|
<spell name="cerddorfumbleshield" rank="2" index="145" variable="true" combat="1">
|
||||||
<resource name="aura" amount="5" cost="level"/>
|
<resource name="aura" amount="5" cost="level"/>
|
||||||
</spell>
|
</spell>
|
||||||
<spell name="tybiedfumbleshield" rank="2" index="146" variable="true" combat="1">
|
<spell name="tybiedfumbleshield" rank="2" index="146" variable="true" combat="1">
|
||||||
|
|
|
@ -1,17 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
<strings>
|
<strings>
|
||||||
<namespace name="spellinfo">
|
<namespace name="spellinfo">
|
||||||
<string name="concealing_aura">
|
|
||||||
<text locale="de">Dieser Zauber wird die gesamte Ausrüstung der
|
|
||||||
Zieleinheit für
|
|
||||||
einige Zeit vor den Blicken anderer verschleiern. Der
|
|
||||||
Zauber
|
|
||||||
schützt nicht vor Dieben und Spionen.</text>
|
|
||||||
<text locale="en">This spell will hide the whole equipment of a target
|
|
||||||
unit from the
|
|
||||||
looks of others. It will not protect against thieves or
|
|
||||||
spies.</text>
|
|
||||||
</string>
|
|
||||||
<string name="headache">
|
<string name="headache">
|
||||||
<text locale="de">
|
<text locale="de">
|
||||||
Aufzeichung des Vortrags von Selen Ard'Ragorn in Bar'Glingal:
|
Aufzeichung des Vortrags von Selen Ard'Ragorn in Bar'Glingal:
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<terrains>
|
|
||||||
<!-- used by the experimental dungeon -->
|
|
||||||
<terrain name="hell" fly="no" sail="no" size="0" land="no"/>
|
|
||||||
|
|
||||||
<!-- used for the museum only -->
|
|
||||||
<terrain name="hall1" fly="no" size="0" />
|
|
||||||
<terrain name="corridor1" fly="no" size="0" />
|
|
||||||
<terrain name="wall1" sail="no" walk="no" fly="no" forbidden="yes" size="0" />
|
|
||||||
</terrains>
|
|
|
@ -1,57 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<terrains>
|
|
||||||
<!-- defaults: walk="yes" sail="yes" fly="yes" swim="no" forest="no" sea="no" land="yes" forbidden="no" arctic="no" cavalry="no" size="0" -->
|
|
||||||
<terrain name="ocean" size="100" walk="no" swim="yes" land="no" sea="yes" />
|
|
||||||
<terrain name="plain" size="4000" road="50" forest="yes" cavalry="yes" seed="3">
|
|
||||||
<resource name="iron" chance="0.1" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.15" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.01" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="swamp" size="1200" road="75" seed="2">
|
|
||||||
<resource name="iron" chance="0.02" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.02" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.02" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="desert" size="400" road="100" cavalry="yes" seed="2">
|
|
||||||
<resource name="iron" chance="0.15" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="highland" size="2300" road="100" cavalry="yes" seed="2">
|
|
||||||
<resource name="iron" chance="0.15" level="2d4-1" base="5d8" div="2d20+10" />
|
|
||||||
<resource name="stone" chance="0.25" level="1d4" base="5d8" div="2d30+20" />
|
|
||||||
<resource name="laen" chance="0.025" level="1d4" base="1d4" div="2d20+50" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="mountain" size="600" road="250" seed="2">
|
|
||||||
<resource name="iron" chance="1.0" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="1.0" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="glacier" size="150" road="250" arctic="yes" seed="2">
|
|
||||||
<resource name="iron" chance="1.0" level="1" base="3" div="50" />
|
|
||||||
<resource name="stone" chance="1.0" level="1" base="2" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="iceberg_sleep" size="150" road="250" arctic="yes">
|
|
||||||
<resource name="iron" chance="0.9" level="1" base="3" div="50" />
|
|
||||||
<resource name="stone" chance="0.9" level="1" base="2" div="100" />
|
|
||||||
<resource name="laen" chance="0.05" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="iceberg" size="150" arctic="yes">
|
|
||||||
<resource name="iron" chance="0.9" level="1" base="3" div="50" />
|
|
||||||
<resource name="stone" chance="0.9" level="1" base="2" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="firewall" road="250" land="no" walk="no" sail="no" fly="no" forbidden="yes" />
|
|
||||||
<terrain name="fog" sail="no" land="no" />
|
|
||||||
<terrain name="thickfog" forbidden="yes" sail="no" walk="no" fly="no" land="no" />
|
|
||||||
<terrain name="volcano" size="400" road="250" seed="1">
|
|
||||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
<terrain name="activevolcano" size="400" road="250">
|
|
||||||
<resource name="iron" chance="0.5" level="1" base="50" div="50" />
|
|
||||||
<resource name="stone" chance="0.5" level="1" base="100" div="100" />
|
|
||||||
<resource name="laen" chance="0.075" level="1" base="4" div="100" />
|
|
||||||
</terrain>
|
|
||||||
</terrains>
|
|
24
s/build
24
s/build
|
@ -4,12 +4,8 @@ while [ ! -d $ROOT/.git ]; do
|
||||||
ROOT=`dirname $ROOT`
|
ROOT=`dirname $ROOT`
|
||||||
done
|
done
|
||||||
|
|
||||||
[ -z $BUILD ] && BUILD=Debug
|
[ -z "$CC" ] && CC=clang
|
||||||
MACHINE=`uname -m`
|
[ -z "$BUILD" ] && BUILD=Debug
|
||||||
[ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc"
|
|
||||||
[ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc"
|
|
||||||
[ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc"
|
|
||||||
BIN_DIR="build-$MACHINE-$CC-$BUILD"
|
|
||||||
|
|
||||||
[ -z "$JOBS" ] && [ "" != "which nproc" ] && JOBS=`nproc`
|
[ -z "$JOBS" ] && [ "" != "which nproc" ] && JOBS=`nproc`
|
||||||
DISTCC=`which distcc`
|
DISTCC=`which distcc`
|
||||||
|
@ -22,13 +18,21 @@ CC="$DISTCC $CC"
|
||||||
MAKEOPTS=-j$JOBS
|
MAKEOPTS=-j$JOBS
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo "Building with $CC and $JOBS jobs"
|
echo "Building with CC=$CC and $JOBS jobs"
|
||||||
|
|
||||||
if [ ! -d $ROOT/$BIN_DIR ]; then
|
if [ ! -d $ROOT/$BUILD ]; then
|
||||||
echo "cannot find build directory $BIN_DIR in $ROOT. did you run cmake-init?"
|
echo "cannot find build directory $BUILD in $ROOT. did you run cmake-init?"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd $ROOT/$BIN_DIR
|
git submodule update
|
||||||
|
|
||||||
|
if [ -z `which tolua` ]; then
|
||||||
|
echo "build tolua"
|
||||||
|
cd $ROOT/tolua ; make
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "build eressea"
|
||||||
|
cd $ROOT/$BUILD
|
||||||
make $MAKEOPTS && make test
|
make $MAKEOPTS && make test
|
||||||
cd $OLDPWD
|
cd $OLDPWD
|
||||||
|
|
24
s/cmake-init
24
s/cmake-init
|
@ -10,13 +10,13 @@ done
|
||||||
|
|
||||||
[ -z $BUILD ] && BUILD=Debug
|
[ -z $BUILD ] && BUILD=Debug
|
||||||
MACHINE=`uname -m`
|
MACHINE=`uname -m`
|
||||||
|
[ -z "$CC" ] && [ ! -z `which gcc` ] && CC="clang"
|
||||||
[ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc"
|
[ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc"
|
||||||
[ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc"
|
[ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc"
|
||||||
[ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc"
|
[ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc"
|
||||||
BIN_DIR="build-$MACHINE-$CC-$BUILD"
|
BIN_DIR="$ROOT/build-$MACHINE-$CC-$BUILD"
|
||||||
mkdir -p $BIN_DIR
|
mkdir -p $BIN_DIR
|
||||||
ln -sf $BIN_DIR $BUILD
|
ln -sf $BIN_DIR $BUILD
|
||||||
cd $BIN_DIR
|
|
||||||
|
|
||||||
MACHINE=$(gcc -dumpmachine)
|
MACHINE=$(gcc -dumpmachine)
|
||||||
rm -f CMakeCache.txt
|
rm -f CMakeCache.txt
|
||||||
|
@ -33,12 +33,26 @@ if [ -d $HOME/usr ]; then
|
||||||
PREFIX_PATH=$HOME/usr:$HOME/usr/local:$PREFIX_PATH
|
PREFIX_PATH=$HOME/usr:$HOME/usr/local:$PREFIX_PATH
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cmake .. \
|
ARGS=" -DCMAKE_MODULE_PATH=$ROOT/cmake/Modules \
|
||||||
-DCMAKE_MODULE_PATH=$PWD/../cmake/Modules \
|
|
||||||
-DCMAKE_BUILD_TYPE=$BUILD \
|
-DCMAKE_BUILD_TYPE=$BUILD \
|
||||||
-DCMAKE_LIBRARY_PATH=$LIBRARY_PATH \
|
-DCMAKE_LIBRARY_PATH=$LIBRARY_PATH \
|
||||||
-DCMAKE_INCLUDE_PATH=$INCLUDE_PATH \
|
-DCMAKE_INCLUDE_PATH=$INCLUDE_PATH \
|
||||||
-DCMAKE_PREFIX_PATH=$PREFIX_PATH \
|
-DCMAKE_PREFIX_PATH=$PREFIX_PATH \
|
||||||
-DCMAKE_INSTALL_PREFIX=$HOME/eressea/server $*
|
-DCMAKE_INSTALL_PREFIX=$HOME/eressea/server"
|
||||||
|
|
||||||
|
path="$(which tolua)"
|
||||||
|
if [ "$HAVE_TOLUA" = "0" ] || [ -z $path ] ; then
|
||||||
|
echo "tolua is not installed, building from source"
|
||||||
|
cd $ROOT/tolua ; make
|
||||||
|
ARGS="$ARGS -DPC_TOLUA_DIR=$ROOT/tolua"
|
||||||
|
else
|
||||||
|
echo "tolua is $path"
|
||||||
|
fi
|
||||||
|
unset path
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd $BIN_DIR
|
||||||
|
cmake .. $ARGS $*
|
||||||
cd $OLDPWD
|
cd $OLDPWD
|
||||||
|
|
||||||
|
|
10
s/install
10
s/install
|
@ -2,7 +2,7 @@
|
||||||
ROOT=$(pwd)
|
ROOT=$(pwd)
|
||||||
while [ ! -d $ROOT/.git ]; do
|
while [ ! -d $ROOT/.git ]; do
|
||||||
ROOT=$(dirname $ROOT)
|
ROOT=$(dirname $ROOT)
|
||||||
if [ "$ROOT" == "/" ; then
|
if [ "/" = "$ROOT" ]; then
|
||||||
echo "could not find root, are you in the git repository?"
|
echo "could not find root, are you in the git repository?"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
@ -21,8 +21,12 @@ make install
|
||||||
|
|
||||||
[ -d $DEST/bin ] || mkdir -p $DEST/bin
|
[ -d $DEST/bin ] || mkdir -p $DEST/bin
|
||||||
install -v $ROOT/process/cron/*.cron $DEST/bin/
|
install -v $ROOT/process/cron/*.cron $DEST/bin/
|
||||||
programs="create-orders backup-eressea run-turn"
|
programs="create-orders backup-eressea run-turn send-zip-report send-bz2-report compress.py compress.sh"
|
||||||
for prg in ${programs} ; do
|
for prg in ${programs} ; do
|
||||||
install -v $ROOT/process/$prg $DEST/bin/
|
install -v $ROOT/process/$prg $DEST/bin/
|
||||||
done
|
done
|
||||||
crontab $ROOT/process/cron/crontab
|
|
||||||
|
# install crontab, but only on the eressea server:
|
||||||
|
# in fact, never do this, because it overwrites hand-edits
|
||||||
|
#WHOAMI=`whoami`@`hostname`
|
||||||
|
#[ "eressea@gruenbaer" = "$WHOAMI" ] && crontab $ROOT/process/cron/crontab
|
||||||
|
|
|
@ -24,6 +24,7 @@ assert_dir $SOURCE
|
||||||
cd $SOURCE
|
cd $SOURCE
|
||||||
git fetch || abort "failed to update source. do you have local changes?"
|
git fetch || abort "failed to update source. do you have local changes?"
|
||||||
[ -z $1 ] || git checkout $1
|
[ -z $1 ] || git checkout $1
|
||||||
|
git pull
|
||||||
git submodule update
|
git submodule update
|
||||||
s/build || abort "build failed."
|
s/build || abort "build failed."
|
||||||
}
|
}
|
||||||
|
@ -80,10 +81,11 @@ ln -f $LIVE/data/$turn.dat data/
|
||||||
rm -rf reports
|
rm -rf reports
|
||||||
mkdir -p reports
|
mkdir -p reports
|
||||||
|
|
||||||
SERVER="$SOURCE/build-x86_64-gcc-Debug/eressea/eressea"
|
SUPP="$SOURCE/share/ubuntu-12_04.supp"
|
||||||
|
SERVER="$SOURCE/Debug/eressea/eressea"
|
||||||
VALGRIND=$(which valgrind)
|
VALGRIND=$(which valgrind)
|
||||||
if [ ! -z $VALGRIND ]; then
|
if [ ! -z $VALGRIND ]; then
|
||||||
SERVER="$VALGRIND --leak-check=no $SERVER"
|
SERVER="$VALGRIND --suppressions=$SUPP --error-exitcode=1 --leak-check=no $SERVER"
|
||||||
fi
|
fi
|
||||||
$SERVER -v$verbose -t$turn -re$game $SOURCE/scripts/run-turn.lua
|
$SERVER -v$verbose -t$turn -re$game $SOURCE/scripts/run-turn.lua
|
||||||
let turn=$turn+1
|
let turn=$turn+1
|
||||||
|
@ -147,7 +149,7 @@ case "$1" in
|
||||||
;;
|
;;
|
||||||
"run")
|
"run")
|
||||||
if [ $turn -eq 0 ]; then
|
if [ $turn -eq 0 ]; then
|
||||||
[ -f $LIVE/turn ] || abort "missing turn file, and no turn specified"
|
[ -f $LIVE/turn ] || abort "missing turn file in $LIVE, and no turn specified"
|
||||||
let turn=$(cat $LIVE/turn)-1
|
let turn=$(cat $LIVE/turn)-1
|
||||||
fi
|
fi
|
||||||
run
|
run
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
template="""#define VERSION_MAJOR %s
|
||||||
|
#define VERSION_MINOR %s
|
||||||
|
#define VERSION_BUILD %s
|
||||||
|
"""
|
||||||
|
|
||||||
|
def new_version(ver):
|
||||||
|
sp = ver.split(".")
|
||||||
|
sp = (sp[0], sp[1], sp[2])
|
||||||
|
file = open("src/buildno.h", "w")
|
||||||
|
file.write(template % sp)
|
||||||
|
file.close()
|
||||||
|
os.system("git add src/buildno.h")
|
||||||
|
os.system("git commit -m 'release version %s'" % ver)
|
||||||
|
os.system("git tag -f v%s" % ver)
|
||||||
|
|
||||||
|
new_version(sys.argv[1])
|
20
s/runtests
20
s/runtests
|
@ -6,22 +6,20 @@ while [ ! -d $ROOT/.git ]; do
|
||||||
ROOT=$(dirname $ROOT)
|
ROOT=$(dirname $ROOT)
|
||||||
done
|
done
|
||||||
|
|
||||||
MACHINE=`uname -m`
|
[ -z $BUILD ] && BUILD=Debug ; export BUILD
|
||||||
[ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc"
|
|
||||||
[ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc"
|
|
||||||
[ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc"
|
|
||||||
BIN_DIR="build-$MACHINE-$CC-Debug"
|
|
||||||
|
|
||||||
if [ ! -d $ROOT/$BIN_DIR ]; then
|
if [ ! -e $ROOT/$BUILD ]; then
|
||||||
echo "cannot find build directory $BIN_DIR in $ROOT. did you run cmake-init?"
|
echo "cannot find build directory $BUILD in $ROOT. did you run cmake-init?"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$ROOT/$BIN_DIR/eressea/test_eressea
|
$ROOT/$BUILD/eressea/test_eressea
|
||||||
cd $ROOT
|
cd $ROOT
|
||||||
[ -e eressea.ini ] || ln -sf conf/eressea.ini
|
[ -e eressea.ini ] || ln -sf conf/eressea.ini
|
||||||
$ROOT/$BIN_DIR/eressea/eressea -v0 scripts/run-tests.lua
|
$ROOT/$BUILD/eressea/eressea -v0 scripts/run-tests.lua
|
||||||
$ROOT/$BIN_DIR/eressea/eressea -v0 scripts/run-tests-e2.lua
|
$ROOT/$BUILD/eressea/eressea -v0 scripts/run-tests-e2.lua
|
||||||
$ROOT/$BIN_DIR/eressea/eressea -v0 scripts/run-tests-e3.lua
|
$ROOT/$BUILD/eressea/eressea -v0 scripts/run-tests-e3.lua
|
||||||
|
$ROOT/$BUILD/eressea/eressea -v0 scripts/run-tests-e4.lua
|
||||||
|
rm -rf data reports orders.txt
|
||||||
|
|
||||||
cd $OLDWPD
|
cd $OLDWPD
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
set -e
|
|
||||||
ROOT=`pwd`
|
ROOT=`pwd`
|
||||||
MACHINE=`uname -m`
|
|
||||||
[ -z "$CC" ] && [ ! -z `which gcc` ] && CC="gcc"
|
|
||||||
[ -z "$CC" ] && [ ! -z `which tcc` ] && CC="tcc"
|
|
||||||
[ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc"
|
|
||||||
BUILD="$ROOT/build-$MACHINE-$CC-Debug"
|
|
||||||
|
|
||||||
inifile() {
|
inifile() {
|
||||||
cd $ROOT
|
cd $ROOT
|
||||||
|
@ -16,48 +10,13 @@ $BUILD/iniparser/inifile eressea.ini add lua:paths lunit:scripts
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
set -e
|
||||||
cd $BUILD
|
[ -z $BUILD ] && BUILD=Debug ; export BUILD
|
||||||
cmake -DCMAKE_MODULE_PATH=$ROOT/cmake/Modules -DCMAKE_BUILD_TYPE=Debug ..
|
s/cmake-init
|
||||||
make
|
s/build
|
||||||
}
|
|
||||||
|
|
||||||
test_valgrind_report () {
|
|
||||||
cd tests
|
|
||||||
ln -sf ../scripts/config.lua
|
|
||||||
valgrind --suppressions=ubuntu-12_04.supp --error-exitcode=1 $BUILD/eressea/eressea -v0 -t184 ../scripts/reports.lua
|
|
||||||
}
|
|
||||||
|
|
||||||
test_unittests() {
|
|
||||||
$BUILD/eressea/test_eressea
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup() {
|
|
||||||
cd $ROOT/tests
|
|
||||||
rm -rf reports score eressea.log* config.lua
|
|
||||||
}
|
|
||||||
|
|
||||||
test_server() {
|
|
||||||
cd $ROOT
|
cd $ROOT
|
||||||
inifile
|
inifile
|
||||||
$BUILD/eressea/eressea -v0 scripts/run-tests.lua
|
s/runtests
|
||||||
$BUILD/eressea/eressea -v0 scripts/run-tests-e2.lua
|
cd tests
|
||||||
$BUILD/eressea/eressea -v0 scripts/run-tests-e3.lua
|
./write-reports.sh
|
||||||
}
|
./run-turn.sh
|
||||||
# information
|
|
||||||
echo "* base directory: $ROOT"
|
|
||||||
echo "* build directory: $BUILD"
|
|
||||||
echo "* lsb_release:"
|
|
||||||
lsb_release -a
|
|
||||||
echo "* zlib1g-dev package:"
|
|
||||||
dpkg -l zlib1g-dev
|
|
||||||
echo
|
|
||||||
|
|
||||||
# build the code
|
|
||||||
[ -d $BUILD ] || mkdir $BUILD
|
|
||||||
build
|
|
||||||
test_unittests
|
|
||||||
test_server
|
|
||||||
test_valgrind_report
|
|
||||||
|
|
||||||
cleanup
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
local function bitset(flags, bit)
|
||||||
|
-- TODO: use bit32 when we no longer have to consider lua 5.1 compatibility
|
||||||
|
local x = flags % (bit*2)
|
||||||
|
return x >= bit
|
||||||
|
end
|
||||||
|
|
||||||
|
local function curse(file)
|
||||||
|
for line in file:lines() do
|
||||||
|
f = get_faction(line)
|
||||||
|
if not f then
|
||||||
|
print("no such faction: " .. line)
|
||||||
|
elseif not bitset(f.flags, 16) then
|
||||||
|
print("cursing " .. tostring(f))
|
||||||
|
f.flags = f.flags + 16
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local cursed = {}
|
||||||
|
|
||||||
|
function cursed.init()
|
||||||
|
local f = io.open("cursed.txt", "r")
|
||||||
|
if f then
|
||||||
|
print("found cursed.txt")
|
||||||
|
curse(f)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return cursed
|
|
@ -14,5 +14,6 @@ return {
|
||||||
require('eressea.astral'),
|
require('eressea.astral'),
|
||||||
require('eressea.locales'),
|
require('eressea.locales'),
|
||||||
require('eressea.jsreport'),
|
require('eressea.jsreport'),
|
||||||
require('eressea.ents')
|
require('eressea.ents'),
|
||||||
|
require('eressea.cursed')
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ end
|
||||||
local function repair_ents(r)
|
local function repair_ents(r)
|
||||||
for u in r.units do
|
for u in r.units do
|
||||||
if u.faction.id==666 and u.race == "undead" and u.name == "Wütende Ents" then
|
if u.faction.id==666 and u.race == "undead" and u.name == "Wütende Ents" then
|
||||||
print("ent repair", u)
|
eressea.log.info("ent repair: " .. tostring(u))
|
||||||
u.race = "ent"
|
u.race = "ent"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
local pkg = {}
|
local pkg = {}
|
||||||
|
|
||||||
print("loading jsreport module")
|
|
||||||
|
|
||||||
function pkg.init()
|
function pkg.init()
|
||||||
eressea.settings.set("feature.jsreport.enable", "1")
|
eressea.settings.set("jsreport.enabled", "1")
|
||||||
end
|
end
|
||||||
|
|
||||||
function pkg.update()
|
function pkg.update()
|
||||||
|
|
|
@ -1,53 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("tests.eressea.attrib", package.seeall, lunit.testcase)
|
|
||||||
|
|
||||||
function has_attrib(u, value)
|
|
||||||
for a in u.attribs do
|
|
||||||
if (a.data==value) then return true end
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_attrib_global()
|
|
||||||
a = attrib.create('global', {})
|
|
||||||
eressea.write_game('attrib.dat')
|
|
||||||
eressea.free_game()
|
|
||||||
eressea.read_game('attrib.dat')
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_attrib()
|
|
||||||
local r = region.create(0,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
local u2 = unit.create(f, r, 1)
|
|
||||||
data = { arr = { 'a', 'b', 'c' }, name = 'familiar', events = { die = 'familiar_died' }, data = { mage = u2 } }
|
|
||||||
a = { 'a' }
|
|
||||||
b = { 'a' }
|
|
||||||
uno = u.id
|
|
||||||
u2no = u2.id
|
|
||||||
a = attrib.create(u, 12)
|
|
||||||
a = attrib.create(u, "enno")
|
|
||||||
a = attrib.create(u, u2)
|
|
||||||
a = attrib.create(u, data)
|
|
||||||
eressea.write_game("attrib.dat")
|
|
||||||
eressea.free_game()
|
|
||||||
eressea.read_game("attrib.dat")
|
|
||||||
u = get_unit(uno)
|
|
||||||
u2 = get_unit(u2no)
|
|
||||||
assert_false(has_attrib(u, 42))
|
|
||||||
assert_true(has_attrib(u, "enno"))
|
|
||||||
assert_true(has_attrib(u, 12))
|
|
||||||
|
|
||||||
for a in u.attribs do
|
|
||||||
x = a.data
|
|
||||||
if (type(x)=="table") then
|
|
||||||
assert_equal('a', x.arr[1])
|
|
||||||
assert_equal('familiar', x.name)
|
|
||||||
assert_equal('familiar_died', x.events.die)
|
|
||||||
assert_equal(u2, x.data.mage)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("tests.eressea.bson", package.seeall, lunit.testcase)
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.free_game()
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_bson_create()
|
|
||||||
local a = attrib.create("global", 12)
|
|
||||||
assert_not_equal(nil, a)
|
|
||||||
for a in attrib.get("global") do
|
|
||||||
assert_equal(a.data, 12)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_illegal_arg()
|
|
||||||
local a = attrib.create(nil, 42)
|
|
||||||
assert_equal(nil, a)
|
|
||||||
a = attrib.create("fred", 42)
|
|
||||||
assert_equal(nil, a)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_bson_readwrite()
|
|
||||||
local i, r = region.create(0, 0, "mountain")
|
|
||||||
attrib.create(r, 42)
|
|
||||||
i = eressea.write_game("test_read_write.dat")
|
|
||||||
assert_equal(0, i)
|
|
||||||
eressea.free_game()
|
|
||||||
r = get_region(0, 0)
|
|
||||||
assert_equal(nil, r)
|
|
||||||
i = eressea.read_game("test_read_write.dat")
|
|
||||||
assert_equal(0, i)
|
|
||||||
r = get_region(0, 0)
|
|
||||||
assert_not_equal(nil, r)
|
|
||||||
for a in attrib.get(r) do
|
|
||||||
assert_equal(a.data, 42)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_bson()
|
|
||||||
local r = region.create(0, 0, "mountain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
assert_not_equal(nil, u)
|
|
||||||
assert_not_equal(nil, r)
|
|
||||||
assert_not_equal(nil, f)
|
|
||||||
attrib.create(r, 1)
|
|
||||||
assert_equal(attrib.get(r)().data, 1)
|
|
||||||
attrib.create(u, 3)
|
|
||||||
assert_equal(attrib.get(u)().data, 3)
|
|
||||||
attrib.create(f, 5)
|
|
||||||
assert_equal(attrib.get(f)().data, 5)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_bson_with_multiple_attribs()
|
|
||||||
local r = region.create(0, 0, "mountain")
|
|
||||||
attrib.create(r, { a=1})
|
|
||||||
attrib.create(r, { a=5})
|
|
||||||
local total = 0
|
|
||||||
for a in attrib.get(r) do
|
|
||||||
total = total + a.data.a;
|
|
||||||
end
|
|
||||||
assert_equal(6, total)
|
|
||||||
end
|
|
|
@ -1,27 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module('tests.eressea.castles', package.seeall, lunit.testcase )
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.free_game()
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_small_castles()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "halfling", "de")
|
|
||||||
local u2 = unit.create(f2, r, 1)
|
|
||||||
u1:add_item("money", 10000)
|
|
||||||
|
|
||||||
local b = building.create(r, "castle")
|
|
||||||
u2.building = b
|
|
||||||
u1.building = b
|
|
||||||
|
|
||||||
b.owner = u2
|
|
||||||
assert_equal("site", b:get_typename(7))
|
|
||||||
assert_equal("fortification", b:get_typename(8))
|
|
||||||
b.owner = u1
|
|
||||||
assert_equal("site", b:get_typename(9))
|
|
||||||
assert_equal("fortification", b:get_typename(10))
|
|
||||||
end
|
|
|
@ -1,39 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("tests.eressea.config", package.seeall, lunit.testcase )
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.free_game()
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_read_race()
|
|
||||||
local f
|
|
||||||
eressea.free_game()
|
|
||||||
f = faction.create("orc@example.com", "orc", "en")
|
|
||||||
assert_equal(nil, f)
|
|
||||||
assert_not_nil(eressea.config)
|
|
||||||
eressea.config.parse('{ "races": { "orc" : {}}}')
|
|
||||||
f = faction.create("orc@example.com", "orc", "en")
|
|
||||||
assert_not_nil(f)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_read_ship()
|
|
||||||
local s
|
|
||||||
eressea.free_game()
|
|
||||||
s = ship.create(nil, "boat")
|
|
||||||
assert_equal(nil, s)
|
|
||||||
assert_not_nil(eressea.config)
|
|
||||||
conf = [[{
|
|
||||||
"ships": {
|
|
||||||
"boat" : {
|
|
||||||
"construction" : {
|
|
||||||
"maxsize" : 20
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}]]
|
|
||||||
eressea.config.parse(conf);
|
|
||||||
s = ship.create(nil, "boat")
|
|
||||||
assert_not_nil(s)
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,735 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("tests.e3.e3features", package.seeall, lunit.testcase)
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.free_game()
|
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_no_stealth()
|
|
||||||
local r = region.create(0,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
|
|
||||||
u:set_skill("stealth", 1)
|
|
||||||
assert_equal(-1, u:get_skill("stealth"))
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("LERNEN TARNUNG")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(-1, u:get_skill("stealth"))
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[
|
|
||||||
function test_analyze_magic()
|
|
||||||
local r1 = region.create(0,0, "plain")
|
|
||||||
local r2 = region.create(1,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
|
|
||||||
local u = unit.create(f, r2, 1)
|
|
||||||
|
|
||||||
u.race = "elf"
|
|
||||||
u:set_skill("magic", 6)
|
|
||||||
u.magic = "gwyrrd"
|
|
||||||
u.aura = 60
|
|
||||||
u:add_spell("analyze_magic")
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("Zaubere stufe 2 'Magie analysieren' REGION 1,0")
|
|
||||||
process_orders()
|
|
||||||
end
|
|
||||||
]]--
|
|
||||||
|
|
||||||
function test_seecast()
|
|
||||||
local r = region.create(0,0, "plain")
|
|
||||||
for i = 1,10 do
|
|
||||||
-- this prevents storms (only high seas have storms)
|
|
||||||
region.create(i, 1, "plain")
|
|
||||||
end
|
|
||||||
for i = 1,10 do
|
|
||||||
region.create(i, 0, "ocean")
|
|
||||||
end
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local s1 = ship.create(r, "cutter")
|
|
||||||
local u1 = unit.create(f, r, 2)
|
|
||||||
u1:set_skill("sailing", 3)
|
|
||||||
u1:add_item("money", 1000)
|
|
||||||
u1.ship = s1
|
|
||||||
local u2 = unit.create(f, r, 1)
|
|
||||||
u2.race = "elf"
|
|
||||||
u2:set_skill("magic", 6)
|
|
||||||
u2.magic = "gwyrrd"
|
|
||||||
u2.aura = 60
|
|
||||||
u2.ship = s1
|
|
||||||
u2:add_spell("stormwinds")
|
|
||||||
update_owners()
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("Zaubere stufe 2 'Beschwoere einen Sturmelementar' " .. itoa36(s1.id))
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("NACH O O O O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(4, u2.region.x)
|
|
||||||
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("Zaubere stufe 2 'Beschwoere einen Sturmelementar' " .. itoa36(s1.id))
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("NACH O O O O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(8, u2.region.x)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function use_tree(terrain)
|
|
||||||
local r = region.create(0,0, terrain)
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f, r, 5)
|
|
||||||
r:set_resource("tree", 0)
|
|
||||||
u1:add_item("xmastree", 1)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("BENUTZEN 1 Weihnachtsbaum")
|
|
||||||
process_orders()
|
|
||||||
return r
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_xmas2009()
|
|
||||||
local r = region.create(0,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f, r, 1)
|
|
||||||
process_orders()
|
|
||||||
xmas2009()
|
|
||||||
assert_equal("xmastree", f.items())
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_xmastree()
|
|
||||||
local r
|
|
||||||
r = use_tree("ocean")
|
|
||||||
assert_equal(0, r:get_resource("tree"))
|
|
||||||
eressea.free_game()
|
|
||||||
r = use_tree("plain")
|
|
||||||
assert_equal(10, r:get_resource("tree"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_fishing()
|
|
||||||
eressea.settings.set("rules.economy.food", "0")
|
|
||||||
local r = region.create(0,0, "ocean")
|
|
||||||
local r2 = region.create(1,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local s1 = ship.create(r, "cutter")
|
|
||||||
local u1 = unit.create(f, r, 3)
|
|
||||||
u1.ship = s1
|
|
||||||
u1:set_skill("sailing", 10)
|
|
||||||
u1:add_item("money", 100)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("NACH O")
|
|
||||||
update_owners()
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
assert_equal(r2, u1.region)
|
|
||||||
assert_equal(90, u1:get_item("money"))
|
|
||||||
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("NACH W")
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
assert_equal(r, u1.region)
|
|
||||||
assert_equal(60, u1:get_item("money"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_ship_capacity()
|
|
||||||
eressea.settings.set("rules.ship.drifting", "0")
|
|
||||||
eressea.settings.set("rules.ship.storms", "0")
|
|
||||||
local r = region.create(0,0, "ocean")
|
|
||||||
region.create(1,0, "ocean")
|
|
||||||
local r2 = region.create(2,0, "ocean")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "goblin", "de")
|
|
||||||
|
|
||||||
-- u1 is at the limit and moves
|
|
||||||
local s1 = ship.create(r, "cutter")
|
|
||||||
local u1 = unit.create(f, r, 5)
|
|
||||||
u1.ship = s1
|
|
||||||
u1:set_skill("sailing", 10)
|
|
||||||
u1:add_item("sword", 55)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("NACH O O")
|
|
||||||
|
|
||||||
-- u2 has too many people
|
|
||||||
local s2 = ship.create(r, "cutter")
|
|
||||||
local u2 = unit.create(f, r, 6)
|
|
||||||
u2.ship = s2
|
|
||||||
u2:set_skill("sailing", 10)
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("NACH O O")
|
|
||||||
|
|
||||||
-- u3 has goblins, they weigh 40% less
|
|
||||||
local s3 = ship.create(r, "cutter")
|
|
||||||
local u3 = unit.create(f2, r, 8)
|
|
||||||
u3.ship = s3
|
|
||||||
u3:set_skill("sailing", 10)
|
|
||||||
u3:add_item("sword", 55)
|
|
||||||
u3:clear_orders()
|
|
||||||
u3:add_order("NACH O O")
|
|
||||||
|
|
||||||
-- u4 has too much stuff
|
|
||||||
local s4 = ship.create(r, "cutter")
|
|
||||||
local u4 = unit.create(f, r, 5)
|
|
||||||
u4.ship = s4
|
|
||||||
u4:set_skill("sailing", 10)
|
|
||||||
u4:add_item("sword", 56)
|
|
||||||
u4:clear_orders()
|
|
||||||
u4:add_order("NACH O O")
|
|
||||||
|
|
||||||
update_owners()
|
|
||||||
process_orders()
|
|
||||||
if r2~=u1.region then
|
|
||||||
print(get_turn(), u1, u1.faction)
|
|
||||||
write_reports()
|
|
||||||
end
|
|
||||||
assert_equal(r2, u1.region)
|
|
||||||
assert_not_equal(r2.id, u2.region.id)
|
|
||||||
if r2~=u3.region then
|
|
||||||
print(get_turn(), u3, u3.faction)
|
|
||||||
write_reports()
|
|
||||||
end
|
|
||||||
assert_equal(r2, u3.region)
|
|
||||||
assert_not_equal(r2.id, u4.region.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_owners()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u2 = unit.create(f2, r, 1)
|
|
||||||
local u3 = unit.create(f2, r, 1)
|
|
||||||
|
|
||||||
local b3 = building.create(r, "castle")
|
|
||||||
b3.size = 2
|
|
||||||
u3.building = b3
|
|
||||||
local b1 = building.create(r, "castle")
|
|
||||||
b1.size = 1
|
|
||||||
u1.building = b1
|
|
||||||
local b2 = building.create(r, "castle")
|
|
||||||
b2.size = 2
|
|
||||||
u2.building = b2
|
|
||||||
|
|
||||||
update_owners()
|
|
||||||
assert(r.owner==u3.faction)
|
|
||||||
b1.size=3
|
|
||||||
b2.size=3
|
|
||||||
update_owners()
|
|
||||||
assert(r.owner==u2.faction)
|
|
||||||
b1.size=4
|
|
||||||
update_owners()
|
|
||||||
assert(r.owner==u1.faction)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_taxes()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
r:set_resource("peasant", 1000)
|
|
||||||
r:set_resource("money", 5000)
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("LERNE Holzfaellen") -- do not work
|
|
||||||
local b = building.create(r, "watch")
|
|
||||||
b.size = 10
|
|
||||||
u.building = b
|
|
||||||
update_owners()
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
assert_equal(25, u:get_item("money"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_region_owner_cannot_leave_castle()
|
|
||||||
eressea.settings.set("rules.move.owner_leave", "1")
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
f.id = 42
|
|
||||||
local b1 = building.create(r, "castle")
|
|
||||||
b1.size = 10
|
|
||||||
local b2 = building.create(r, "lighthouse")
|
|
||||||
b2.size = 10
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
u.building = b1
|
|
||||||
u:add_item("money", u.number * 100)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("BETRETE BURG " .. itoa36(b2.id))
|
|
||||||
process_orders()
|
|
||||||
init_reports()
|
|
||||||
write_report(u.faction)
|
|
||||||
assert_equal(b1, u.building, "region owner has left the building") -- region owners may not leave
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_market()
|
|
||||||
-- if i am the only trader around, i should be getting all the herbs from all 7 regions
|
|
||||||
local herb_multi = 500 -- from rc_herb_trade()
|
|
||||||
local r, idx
|
|
||||||
local herbnames = { 'h0', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7', 'h8' }
|
|
||||||
idx = 1
|
|
||||||
for x = -1, 1 do for y = -1, 1 do
|
|
||||||
r = region.create(x, y, "plain")
|
|
||||||
r:set_resource("peasant", herb_multi * 9 + 50) -- 10 herbs per region
|
|
||||||
r.herb = herbnames[idx]
|
|
||||||
idx = idx+1
|
|
||||||
end end
|
|
||||||
r = get_region(0, 0)
|
|
||||||
local b = building.create(r, "market")
|
|
||||||
b.size = 10
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
f.id = 42
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
u.building = b
|
|
||||||
u:add_item("money", u.number * 10000)
|
|
||||||
for i = 0, 5 do
|
|
||||||
local rn = r:next(i)
|
|
||||||
end
|
|
||||||
b.working = true
|
|
||||||
eressea.process.markets()
|
|
||||||
u:add_item("money", -u:get_item("money")) -- now we only have herbs
|
|
||||||
local len = 0
|
|
||||||
for i in u.items do
|
|
||||||
len = len + 1
|
|
||||||
end
|
|
||||||
assert_not_equal(0, len, "trader did not get any herbs")
|
|
||||||
for idx, name in pairs(herbnames) do
|
|
||||||
local n = u:get_item(name)
|
|
||||||
if n>0 then
|
|
||||||
assert_equal(10, n, 'trader did not get exaxtly 10 herbs')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_market_gives_items()
|
|
||||||
local r
|
|
||||||
for x = -1, 1 do for y = -1, 1 do
|
|
||||||
r = region.create(x, y, "plain")
|
|
||||||
r:set_resource("peasant", 5000)
|
|
||||||
end end
|
|
||||||
r = get_region(0, 0)
|
|
||||||
local b = building.create(r, "market")
|
|
||||||
b.size = 10
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
f.id = 42
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
u.building = b
|
|
||||||
u:add_item("money", u.number * 10000)
|
|
||||||
for i = 0, 5 do
|
|
||||||
local rn = r:next(i)
|
|
||||||
end
|
|
||||||
process_orders()
|
|
||||||
local len = 0
|
|
||||||
for i in u.items do
|
|
||||||
len = len + 1
|
|
||||||
end
|
|
||||||
assert(len>1)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_spells()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
u.race = "elf"
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_item("money", 10000)
|
|
||||||
u:set_skill("magic", 5)
|
|
||||||
u:add_order("LERNE MAGIE Illaun")
|
|
||||||
process_orders()
|
|
||||||
local sp
|
|
||||||
local nums = 0
|
|
||||||
if f.spells~=nil then
|
|
||||||
for sp in f.spells do
|
|
||||||
nums = nums + 1
|
|
||||||
end
|
|
||||||
assert(nums>0)
|
|
||||||
for sp in u.spells do
|
|
||||||
nums = nums - 1
|
|
||||||
end
|
|
||||||
assert(nums==0)
|
|
||||||
elseif u.spells~=nil then
|
|
||||||
for sp in u.spells do
|
|
||||||
nums = nums + 1
|
|
||||||
end
|
|
||||||
assert(nums>0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_alliance()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
u1:add_item("money", u1.number * 100)
|
|
||||||
local f2 = faction.create("info@eressea.de", "human", "de")
|
|
||||||
local u2 = unit.create(f2, r, 1)
|
|
||||||
u2:add_item("money", u2.number * 100)
|
|
||||||
assert(f1.alliance==nil)
|
|
||||||
assert(f2.alliance==nil)
|
|
||||||
u1:clear_orders()
|
|
||||||
u2:clear_orders()
|
|
||||||
u1:add_order("ALLIANZ NEU pink")
|
|
||||||
u1:add_order("ALLIANZ EINLADEN " .. itoa36(f2.id))
|
|
||||||
u2:add_order("ALLIANZ BEITRETEN pink")
|
|
||||||
process_orders()
|
|
||||||
assert(f1.alliance~=nil)
|
|
||||||
assert(f2.alliance~=nil)
|
|
||||||
assert(f2.alliance==f1.alliance)
|
|
||||||
u1:clear_orders()
|
|
||||||
u2:clear_orders()
|
|
||||||
u1:add_order("ALLIANZ KOMMANDO " .. itoa36(f2.id))
|
|
||||||
process_orders()
|
|
||||||
assert(f1.alliance~=nil)
|
|
||||||
assert(f2.alliance~=nil)
|
|
||||||
assert(f2.alliance==f1.alliance)
|
|
||||||
for f in f1.alliance.factions do
|
|
||||||
assert_true(f.id==f1.id or f.id==f2.id)
|
|
||||||
end
|
|
||||||
u1:clear_orders()
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("ALLIANZ AUSSTOSSEN " .. itoa36(f1.id))
|
|
||||||
process_orders()
|
|
||||||
assert(f1.alliance==nil)
|
|
||||||
assert(f2.alliance~=nil)
|
|
||||||
u1:clear_orders()
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("ALLIANZ NEU zing")
|
|
||||||
u1:add_order("ALLIANZ BEITRETEN zing") -- no invite!
|
|
||||||
process_orders()
|
|
||||||
assert(f1.alliance==nil)
|
|
||||||
assert(f2.alliance~=nil)
|
|
||||||
u1:clear_orders()
|
|
||||||
u2:clear_orders()
|
|
||||||
u1:add_order("ALLIANZ NEU zack")
|
|
||||||
u1:add_order("ALLIANZ EINLADEN " .. itoa36(f2.id))
|
|
||||||
u2:add_order("ALLIANZ BEITRETEN zack")
|
|
||||||
process_orders()
|
|
||||||
assert(f1.alliance==f2.alliance)
|
|
||||||
assert(f2.alliance~=nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_canoe_passes_through_land()
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local src = region.create(0, 0, "ocean")
|
|
||||||
local land = region.create(1, 0, "plain")
|
|
||||||
region.create(2, 0, "ocean")
|
|
||||||
local dst = region.create(3, 0, "ocean")
|
|
||||||
local sh = ship.create(src, "canoe")
|
|
||||||
local u1 = unit.create(f, src, 1)
|
|
||||||
local u2 = unit.create(f, src, 1)
|
|
||||||
u1.ship = sh
|
|
||||||
u2.ship = sh
|
|
||||||
u1:set_skill("sailing", 10)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("NACH O O O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(land, u2.region, "canoe did not stop at coast")
|
|
||||||
u1:add_order("NACH O O O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(dst, sh.region, "canoe could not leave coast")
|
|
||||||
assert_equal(dst, u1.region, "canoe could not leave coast")
|
|
||||||
assert_equal(dst, u2.region, "canoe could not leave coast")
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_give_50_percent_of_money()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local u1 = unit.create(faction.create("noreply@eressea.de", "human", "de"), r, 1)
|
|
||||||
local u2 = unit.create(faction.create("noreply@eressea.de", "orc", "de"), r, 1)
|
|
||||||
u1.faction.age = 10
|
|
||||||
u2.faction.age = 10
|
|
||||||
u1:add_item("money", 500)
|
|
||||||
u2:add_item("money", 500)
|
|
||||||
local m1, m2 = u1:get_item("money"), u2:get_item("money")
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("GIB " .. itoa36(u2.id) .. " 221 Silber")
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("LERNEN Hiebwaffen")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(m1, u1:get_item("money"))
|
|
||||||
assert_equal(m2, u2:get_item("money"))
|
|
||||||
|
|
||||||
m1, m2 = u1:get_item("money"), u2:get_item("money")
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("GIB " .. itoa36(u2.id) .. " 221 Silber")
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("HELFEN " .. itoa36(u1.faction.id) .. " GIB")
|
|
||||||
u2:add_item("horse", 100)
|
|
||||||
u2:add_order("GIB 0 ALLES PFERD")
|
|
||||||
local h = r:get_resource("horse")
|
|
||||||
process_orders()
|
|
||||||
assert_true(r:get_resource("horse")>=h+100)
|
|
||||||
assert_equal(m1-221, u1:get_item("money"))
|
|
||||||
assert_equal(m2+110, u2:get_item("money"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_give_100_percent_of_items()
|
|
||||||
r = region.create(0, 0, "plain")
|
|
||||||
local u1 = unit.create(faction.create("noreply@eressea.de", "human", "de"), r, 1)
|
|
||||||
local u2 = unit.create(faction.create("noreply@eressea.de", "orc", "de"), r, 1)
|
|
||||||
u1.faction.age = 10
|
|
||||||
u2.faction.age = 10
|
|
||||||
u1:add_item("money", 500)
|
|
||||||
u1:add_item("log", 500)
|
|
||||||
local m1, m2 = u1:get_item("log"), u2:get_item("log")
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("GIB " .. itoa36(u2.id) .. " 332 Holz")
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("LERNEN Hiebwaffen")
|
|
||||||
u2:add_order("HELFEN " .. itoa36(u1.faction.id) .. " GIB")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(m1-332, u1:get_item("log"))
|
|
||||||
assert_equal(m2+332, u2:get_item("log"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_cannot_give_person()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 10)
|
|
||||||
local u2 = unit.create(f2, r, 10)
|
|
||||||
u1.faction.age = 10
|
|
||||||
u2.faction.age = 10
|
|
||||||
u1:add_item("money", 500)
|
|
||||||
u2:add_item("money", 500)
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("GIB ".. itoa36(u1.id) .. " 1 PERSON")
|
|
||||||
u2:add_order("HELFE ".. itoa36(f1.id) .. " GIB")
|
|
||||||
u1:add_order("HELFE ".. itoa36(f2.id) .. " GIB")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(10, u2.number)
|
|
||||||
assert_equal(10, u1.number)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_cannot_give_unit()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 10)
|
|
||||||
local u2 = unit.create(f2, r, 10)
|
|
||||||
u1.faction.age = 10
|
|
||||||
u2.faction.age = 10
|
|
||||||
u1:add_item("money", 500)
|
|
||||||
u2:add_item("money", 500)
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("GIB ".. itoa36(u1.id) .. " EINHEIT")
|
|
||||||
u2:add_order("HELFE ".. itoa36(f1.id) .. " GIB")
|
|
||||||
u1:add_order("HELFE ".. itoa36(f2.id) .. " GIB")
|
|
||||||
process_orders()
|
|
||||||
assert_not_equal(u2.faction.id, u1.faction.id)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_guard_by_owners()
|
|
||||||
-- http://bugs.eressea.de/view.php?id=1756
|
|
||||||
local r = region.create(0,0, "mountain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
f1.age=20
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
f2.age=20
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
local b = building.create(r, "castle")
|
|
||||||
b.size = 10
|
|
||||||
u1.building = b
|
|
||||||
u1:add_item("money", 100)
|
|
||||||
|
|
||||||
local u2 = unit.create(f2, r, 1)
|
|
||||||
u2:add_item("money", 100)
|
|
||||||
u2:set_skill("mining", 3)
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("MACHEN EISEN")
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
local iron = u2:get_item("iron")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(iron, u2:get_item("iron"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_market_action()
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local x, y, r
|
|
||||||
for x=0,2 do
|
|
||||||
for y=0,2 do
|
|
||||||
r = region.create(x, y, "plain")
|
|
||||||
r.luxury = "balm"
|
|
||||||
r.herb = "h2"
|
|
||||||
r:set_resource("peasant", 5000)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
r = get_region(1, 1)
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
b = building.create(r, "market")
|
|
||||||
b.size = 10
|
|
||||||
u.building = b
|
|
||||||
update_owners()
|
|
||||||
for r in regions() do
|
|
||||||
market_action(r)
|
|
||||||
end
|
|
||||||
assert_equal(35, u:get_item("balm"))
|
|
||||||
assert_equal(70, u:get_item("h2"))
|
|
||||||
end
|
|
||||||
|
|
||||||
local function setup_packice(x, onfoot)
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local plain = region.create(0,0, "plain")
|
|
||||||
local ice = region.create(1,0, "packice")
|
|
||||||
local ocean = region.create(2,0, "ocean")
|
|
||||||
local u = unit.create(f, get_region(x, 0), 2)
|
|
||||||
if not onfoot then
|
|
||||||
local s = ship.create(u.region, "cutter")
|
|
||||||
u:set_skill("sailing", 3)
|
|
||||||
u.ship = s
|
|
||||||
end
|
|
||||||
u:add_item("money", 400)
|
|
||||||
|
|
||||||
return u
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_no_sailing_through_packice()
|
|
||||||
local u = setup_packice(0)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH O O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(0, u.region.x)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_can_sail_from_packice_to_ocean()
|
|
||||||
local u = setup_packice(1)
|
|
||||||
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH W")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u.region.x)
|
|
||||||
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(2, u.region.x)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_can_sail_into_packice()
|
|
||||||
local u = setup_packice(2)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH W W")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u.region.x)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_can_walk_into_packice()
|
|
||||||
local u = setup_packice(0, true)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u.region.x)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_cannot_walk_into_ocean()
|
|
||||||
local u = setup_packice(1, true)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH O")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u.region.x)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_p2()
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
r:set_resource("tree", 0)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("BENUTZE 'Wasser des Lebens'")
|
|
||||||
u:add_item("p2", 1)
|
|
||||||
u:add_item("log", 10)
|
|
||||||
u:add_item("mallorn", 10)
|
|
||||||
process_orders()
|
|
||||||
assert_equal(5, r:get_resource("tree"))
|
|
||||||
assert_equal(0, u:get_item("p2"))
|
|
||||||
assert_equal(15, u:get_item("log") + u:get_item("mallorn"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_p2_move()
|
|
||||||
-- http://bugs.eressea.de/view.php?id=1855
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
region.create(1, 0, "plain")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
r:set_resource("tree", 0)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("BENUTZE 'Wasser des Lebens'")
|
|
||||||
u:add_order("NACH OST")
|
|
||||||
u:add_item("horse", 1)
|
|
||||||
u:add_item("p2", 1)
|
|
||||||
u:add_item("log", 1)
|
|
||||||
u:add_item("mallorn", 1)
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u.region.x)
|
|
||||||
assert_equal(1, r:get_resource("tree"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function disabled_test_bug_1738_build_castle_e3()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("bug_1738@eressea.de", "human", "de")
|
|
||||||
|
|
||||||
local c = building.create(r, "castle")
|
|
||||||
c.size = 228
|
|
||||||
|
|
||||||
local u1 = unit.create(f, r, 1)
|
|
||||||
u1:set_skill("building", 5)
|
|
||||||
u1:add_item("stone", 10000)
|
|
||||||
|
|
||||||
local u2 = unit.create(f, r, 32)
|
|
||||||
u2:set_skill("building", 3)
|
|
||||||
u2:add_item("stone", 10000)
|
|
||||||
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("MACHE BURG " .. itoa36(c.id))
|
|
||||||
-- castle now has size 229.
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("MACHE BURG " .. itoa36(c.id))
|
|
||||||
-- 32 * 3 makes 96 skill points.
|
|
||||||
-- from size 229 to size 250 needs 21 * 3 = 63 points, rest 33.
|
|
||||||
-- 33/4 makes 8 points, resulting size is 258.
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
--[[
|
|
||||||
init_reports()
|
|
||||||
write_report(f)
|
|
||||||
]]--
|
|
||||||
-- resulting size should be 250 because unit 2
|
|
||||||
-- does not have the needed minimum skill.
|
|
||||||
assert_equal(c.size, 250)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_golem_use_four_iron()
|
|
||||||
local r0 = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "halfling", "de")
|
|
||||||
local u1 = unit.create(f1, r0, 3)
|
|
||||||
u1.race = "irongolem"
|
|
||||||
u1:set_skill("weaponsmithing", 1)
|
|
||||||
u1:set_skill("armorer", 1)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("Mache 4 Turmschild")
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
|
|
||||||
assert_equal(2, u1.number)
|
|
||||||
assert_equal(4, u1:get_item("towershield"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_building_owner_can_enter_ship()
|
|
||||||
local r1 = region.create(1, 2, "plain")
|
|
||||||
local f1 = faction.create("noreply@tteessttiinngg.de", "human", "de")
|
|
||||||
local b1 = building.create(r1, "castle")
|
|
||||||
b1.size = 10
|
|
||||||
local s1 = ship.create(r1, "cutter")
|
|
||||||
|
|
||||||
local u1 = unit.create(f1, r1, 10)
|
|
||||||
u1.building = b1
|
|
||||||
u1:add_item("money", u1.number * 100)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("VERLASSEN")
|
|
||||||
u1:add_order("BETRETE SCHIFF " .. itoa36(s1.id))
|
|
||||||
|
|
||||||
local u2 = unit.create(f1, r1, 10)
|
|
||||||
u2.ship = s1
|
|
||||||
u2:add_item("money", u1.number * 100)
|
|
||||||
u2:clear_orders()
|
|
||||||
process_orders()
|
|
||||||
assert_equal(s1, u1.ship)
|
|
||||||
assert_equal(null, u1.building, "owner of the building can not go into a ship")
|
|
||||||
end
|
|
|
@ -1,360 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("tests.e3.e2features", package.seeall, lunit.testcase )
|
|
||||||
|
|
||||||
local function one_unit(r, f)
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
u:add_item("money", u.number * 100)
|
|
||||||
u:clear_orders()
|
|
||||||
return u
|
|
||||||
end
|
|
||||||
|
|
||||||
local function two_factions()
|
|
||||||
local f1 = faction.create("one@eressea.de", "human", "de")
|
|
||||||
local f2 = faction.create("two@eressea.de", "human", "de")
|
|
||||||
return f1, f2
|
|
||||||
end
|
|
||||||
|
|
||||||
local function two_units(r, f1, f2)
|
|
||||||
return one_unit(r, f1), one_unit(r, f2)
|
|
||||||
end
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.free_game()
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_learn()
|
|
||||||
eressea.settings.set("study.random_progress", "0")
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
f.age = 20
|
|
||||||
local u = unit.create(f, r)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("@LERNEN Reiten")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u:get_skill("riding"))
|
|
||||||
process_orders()
|
|
||||||
process_orders()
|
|
||||||
assert_equal(2, u:get_skill("riding"))
|
|
||||||
process_orders()
|
|
||||||
process_orders()
|
|
||||||
process_orders()
|
|
||||||
assert_equal(3, u:get_skill("riding"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_teach()
|
|
||||||
eressea.settings.set("study.random_progress", "0")
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
f.age = 20
|
|
||||||
local u = unit.create(f, r, 10)
|
|
||||||
local u2 = unit.create(f, r)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("@LERNEN reiten")
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("LEHREN " .. itoa36(u.id))
|
|
||||||
u2:set_skill("riding", 4)
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u:get_skill("riding"))
|
|
||||||
process_orders()
|
|
||||||
assert_equal(2, u:get_skill("riding"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_rename()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r)
|
|
||||||
u:add_item("aoh", 1)
|
|
||||||
assert_equal(u:get_item("ao_healing"), 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
function DISABLE_test_alp()
|
|
||||||
local r = region.create(0,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
local u2 = unit.create(f, r, 1)
|
|
||||||
u.race = "elf"
|
|
||||||
u:set_skill("magic", 10)
|
|
||||||
u:add_item("money", 3010)
|
|
||||||
u.magic = "illaun"
|
|
||||||
u.aura = 200
|
|
||||||
u.ship = s1
|
|
||||||
u:add_spell("summon_alp")
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("ZAUBERE 'Alp' " .. itoa36(u2.id))
|
|
||||||
process_orders()
|
|
||||||
print(get_turn(), f)
|
|
||||||
write_reports()
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_unit_limit_is_1500()
|
|
||||||
local r = region.create(0,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
for i = 1,1500 do
|
|
||||||
unit.create(f, r, 1)
|
|
||||||
end
|
|
||||||
local u = unit.create(f, r, 0)
|
|
||||||
u:add_item("money", 20000)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("REKRUTIEREN 1")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(1, u.number)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_ship_capacity()
|
|
||||||
local r = region.create(0,0, "ocean")
|
|
||||||
region.create(1,0, "ocean")
|
|
||||||
local r2 = region.create(2,0, "ocean")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
|
|
||||||
-- u1 is at the limit and moves
|
|
||||||
local s1 = ship.create(r, "boat")
|
|
||||||
local u1 = unit.create(f, r, 5)
|
|
||||||
u1.ship = s1
|
|
||||||
u1:set_skill("sailing", 10)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("NACH O O")
|
|
||||||
|
|
||||||
-- u2 has too many people
|
|
||||||
local s2 = ship.create(r, "boat")
|
|
||||||
local u2 = unit.create(f, r, 6)
|
|
||||||
u2.ship = s2
|
|
||||||
u2:set_skill("sailing", 10)
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("NACH O O")
|
|
||||||
|
|
||||||
-- u4 has too much stuff
|
|
||||||
local s4 = ship.create(r, "boat")
|
|
||||||
local u4 = unit.create(f, r, 5)
|
|
||||||
u4.ship = s4
|
|
||||||
u4:set_skill("sailing", 10)
|
|
||||||
u4:add_item("sword", 1)
|
|
||||||
u4:clear_orders()
|
|
||||||
u4:add_order("NACH O O")
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
|
|
||||||
-- print(s.region, u.region, r2)
|
|
||||||
assert_equal(r2, u1.region, "boat with 5 humans did not move")
|
|
||||||
assert_not_equal(r2, u2.region, "boat with too many people has moved")
|
|
||||||
assert_not_equal(r2, u4.region, "boat with too much cargo has moved")
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_levitate()
|
|
||||||
local r = region.create(0,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 2)
|
|
||||||
local s = ship.create(r, "boat")
|
|
||||||
u.ship = s
|
|
||||||
u.age = 20
|
|
||||||
u:set_skill("sailing", 5)
|
|
||||||
u:add_item("money", 100)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("ARBEITE")
|
|
||||||
levitate_ship(u.ship, u, 2, 1)
|
|
||||||
assert_equal(32, u.ship.flags)
|
|
||||||
process_orders()
|
|
||||||
assert_equal(0, u.ship.flags)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_terrains()
|
|
||||||
local terrains = { "hell", "wall1", "corridor1" }
|
|
||||||
for k,v in ipairs(terrains) do
|
|
||||||
local r = region.create(k, k, v)
|
|
||||||
assert_not_equal(nil, r)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_races()
|
|
||||||
local races = { "wolf", "orc", "human", "demon" }
|
|
||||||
for k,v in ipairs(races) do
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
assert_not_equal(nil, f)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_can_give_person()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 10)
|
|
||||||
local u2 = unit.create(f2, r, 10)
|
|
||||||
u1.faction.age = 10
|
|
||||||
u2.faction.age = 10
|
|
||||||
u1:add_item("money", 500)
|
|
||||||
u2:add_item("money", 500)
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("GIB ".. itoa36(u1.id) .. " 1 PERSON")
|
|
||||||
u2:add_order("HELFE ".. itoa36(f1.id) .. " GIB")
|
|
||||||
u1:add_order("HELFE ".. itoa36(f2.id) .. " GIB")
|
|
||||||
u1:add_order("KONTAKTIERE ".. itoa36(u2.id))
|
|
||||||
process_orders()
|
|
||||||
assert_equal(9, u2.number)
|
|
||||||
assert_equal(11, u1.number)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_no_uruk()
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "uruk", "de")
|
|
||||||
assert_equal(f1.race, "orc")
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_snowman()
|
|
||||||
local r = region.create(0, 0, "glacier")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
u:add_item("snowman", 1)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("BENUTZEN 1 Schneemann")
|
|
||||||
process_orders()
|
|
||||||
for u2 in r.units do
|
|
||||||
if u2.id~=u.id then
|
|
||||||
assert_equal(u2.race, "snowman")
|
|
||||||
u = nil
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assert_equal(nil, u)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_block_movement()
|
|
||||||
eressea.settings.set("rules.guard.base_stop_prob", "0.3")
|
|
||||||
eressea.settings.set("rules.guard.amulet_stop_prob", "0.0")
|
|
||||||
eressea.settings.set("rules.guard.skill_stop_prob", "0.1")
|
|
||||||
|
|
||||||
local r0 = region.create(0, 0, "plain")
|
|
||||||
local r1 = region.create(1, 0, "plain")
|
|
||||||
local r2 = region.create(2, 0, "plain")
|
|
||||||
local f1, f2 = two_factions()
|
|
||||||
f1.age=20
|
|
||||||
f2.age=20
|
|
||||||
|
|
||||||
local u11 = one_unit(r1, f1)
|
|
||||||
local u2 = { }
|
|
||||||
for i = 1, 20 do
|
|
||||||
u2[i] = one_unit(r0, f2)
|
|
||||||
end
|
|
||||||
|
|
||||||
u11:add_item("sword", 1)
|
|
||||||
u11:add_item("money", 1)
|
|
||||||
u11:set_skill("melee", 1)
|
|
||||||
u11:set_skill("perception", 7)
|
|
||||||
u11:clear_orders()
|
|
||||||
u11:add_order("BEWACHEN")
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
|
|
||||||
for i, u in ipairs(u2) do
|
|
||||||
u:add_item("horse", 1)
|
|
||||||
u:set_skill("riding", 1)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH o o")
|
|
||||||
end
|
|
||||||
|
|
||||||
u2[1]:set_skill("stealth", 8)
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
|
|
||||||
assert_equal(r2, u2[1].region, "nobody should see me")
|
|
||||||
for i, u in ipairs(u2) do
|
|
||||||
if i > 1 then
|
|
||||||
assert_equal(r1, u.region, "perception +7 should always stop me")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function test_block_movement_aots()
|
|
||||||
eressea.settings.set("rules.guard.base_stop_prob", "0.0")
|
|
||||||
eressea.settings.set("rules.guard.skill_stop_prob", "1.0")
|
|
||||||
eressea.settings.set("rules.guard.amulet_stop_prob", "1.1")
|
|
||||||
|
|
||||||
local r0 = region.create(0, 0, "plain")
|
|
||||||
local r1 = region.create(1, 0, "plain")
|
|
||||||
local r2 = region.create(2, 0, "plain")
|
|
||||||
local f1, f2 = two_factions()
|
|
||||||
f1.age=20
|
|
||||||
f2.age=20
|
|
||||||
|
|
||||||
local u11, u12 = two_units(r1, f1, f1)
|
|
||||||
local u21, u22 = two_units(r0, f2, f2)
|
|
||||||
|
|
||||||
for i, u in ipairs ({ u11, u12 }) do
|
|
||||||
u:add_item("sword", 1)
|
|
||||||
u:add_item("money", 1)
|
|
||||||
u:set_skill("melee", 1)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("BEWACHEN")
|
|
||||||
end
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
|
|
||||||
for i, u in ipairs ({ u21, u22 }) do
|
|
||||||
u:add_item("horse", 1)
|
|
||||||
u:set_skill("riding", 1)
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("NACH o o")
|
|
||||||
end
|
|
||||||
|
|
||||||
u12:add_item("aots", 10)
|
|
||||||
u22:set_skill("stealth", 1)
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
|
|
||||||
assert_equal(r1, u21.region, "unit with amulet should stop me")
|
|
||||||
assert_equal(r2, u22.region, "nobody should see me")
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_stonegolems()
|
|
||||||
local r0 = region.create(0, 0, "plain")
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "stonegolem", "de")
|
|
||||||
local u1 = unit.create(f1, r0, 1)
|
|
||||||
local u2 = unit.create(f1, r0, 2)
|
|
||||||
local c1 = building.create(r0, "castle")
|
|
||||||
|
|
||||||
c1.size = 226
|
|
||||||
|
|
||||||
u1:set_skill("building", 1)
|
|
||||||
u2:set_skill("building", 1)
|
|
||||||
|
|
||||||
-- test that no server crash occur
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("Mache Burg")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(0 ,u1.number, "There shoud be no Stone Golems")
|
|
||||||
-- end test server crash
|
|
||||||
|
|
||||||
-- test that Stone Golems build for four stones
|
|
||||||
u2:clear_orders()
|
|
||||||
u2:add_order("MACHE 4 BURG " .. itoa36(c1.id))
|
|
||||||
process_orders()
|
|
||||||
assert_equal(230, c1.size, "resulting size should be 230")
|
|
||||||
assert_equal(1 ,u2.number, "There shoud be one Stone Golems")
|
|
||||||
-- end test Stone Golems four stones
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_only_building_owner_can_set_not_paid()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f, r, 1)
|
|
||||||
local u2 = unit.create(f, r, 1)
|
|
||||||
local mine = building.create(r, "mine")
|
|
||||||
mine.size = 2
|
|
||||||
u1:add_item("money", 500)
|
|
||||||
u1.building = mine
|
|
||||||
u2.building = mine
|
|
||||||
u1:clear_orders()
|
|
||||||
u2:clear_orders()
|
|
||||||
-- Test that Bezahle nicht is working
|
|
||||||
u1:add_order("Bezahle nicht")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(500, u1:get_item("money"))
|
|
||||||
u1:clear_orders()
|
|
||||||
-- Test that bug fix 0001976 is working
|
|
||||||
-- Bezahle nicht is not working
|
|
||||||
u2:add_order("Bezahle nicht")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(0, u1:get_item("money"))
|
|
||||||
end
|
|
|
@ -1,16 +0,0 @@
|
||||||
-- require 'eressea.tests.spells'
|
|
||||||
require 'eressea.tests.common'
|
|
||||||
require 'eressea.tests.stealth'
|
|
||||||
-- require 'eressea.tests.spells-e3'
|
|
||||||
-- require 'eressea.tests.spells-e2'
|
|
||||||
require 'eressea.tests.settings'
|
|
||||||
-- require 'eressea.tests.morale'
|
|
||||||
-- require 'eressea.tests.orders'
|
|
||||||
-- require 'eressea.tests.eressea'
|
|
||||||
-- require 'eressea.tests.e3a'
|
|
||||||
-- require 'eressea.tests.config'
|
|
||||||
-- require 'eressea.tests.common'
|
|
||||||
require 'eressea.tests.castles'
|
|
||||||
require 'eressea.tests.bindings'
|
|
||||||
-- require 'eressea.tests.bson'
|
|
||||||
-- require 'eressea.tests.attrib'
|
|
|
@ -1,179 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("tests.eressea.morale", package.seeall, lunit.testcase )
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.game.reset()
|
|
||||||
eressea.settings.set('rules.region_owners', '1')
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_when_owner_returns_morale_drops_only_2()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
u1:add_item("money", 10000)
|
|
||||||
local b = building.create(r, "castle")
|
|
||||||
b.size = 50
|
|
||||||
|
|
||||||
set_turn(get_turn()+10)
|
|
||||||
f1.lastturn=get_turn()
|
|
||||||
u1.building = b
|
|
||||||
update_owners()
|
|
||||||
r.morale = 6
|
|
||||||
u1.building = nil
|
|
||||||
process_orders()
|
|
||||||
assert_equal(5, r.morale) -- no owner, fall by 1
|
|
||||||
u1.building = b
|
|
||||||
update_owners()
|
|
||||||
set_key("test", 42)
|
|
||||||
process_orders()
|
|
||||||
assert_equal(3, r.morale) -- new owner, fall by 2
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_morale_alliance()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
u1:add_item("money", 10000)
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u2 = unit.create(f2, r, 1)
|
|
||||||
u2:add_item("money", 10000)
|
|
||||||
local f3 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u3 = unit.create(f3, r, 1)
|
|
||||||
u3:add_item("money", 10000)
|
|
||||||
|
|
||||||
local al = alliance.create(42, "Die Antwoord")
|
|
||||||
f1.alliance = al;
|
|
||||||
f2.alliance = al;
|
|
||||||
|
|
||||||
local b = building.create(r, "castle")
|
|
||||||
b.size = 50
|
|
||||||
u1.building = b
|
|
||||||
u2.building = b
|
|
||||||
u3.building = b
|
|
||||||
update_owners()
|
|
||||||
r.morale = 6
|
|
||||||
|
|
||||||
local function run_a_turn()
|
|
||||||
process_orders()
|
|
||||||
f1.lastturn=get_turn()
|
|
||||||
f2.lastturn=get_turn()
|
|
||||||
f3.lastturn=get_turn()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- just checking everything's okay after setup.
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(6, r.morale)
|
|
||||||
|
|
||||||
-- change owner, new owner is in the same alliance
|
|
||||||
u1.building = nil
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(4, r.morale)
|
|
||||||
|
|
||||||
-- change owner, new owner is not in the same alliance
|
|
||||||
u2.building = nil
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(0, r.morale)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_morale_change()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
u1:add_item("money", 10000)
|
|
||||||
local f2 = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u2 = unit.create(f2, r, 1)
|
|
||||||
u2:add_item("money", 10000)
|
|
||||||
|
|
||||||
local AVG_STEP = 6
|
|
||||||
local b = building.create(r, "castle")
|
|
||||||
b.size = 10
|
|
||||||
u1.building = b
|
|
||||||
|
|
||||||
local function run_a_turn()
|
|
||||||
process_orders()
|
|
||||||
f1.lastturn=get_turn()
|
|
||||||
f2.lastturn=get_turn()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- reinhardt-regel: nach 2*AVG_STEP ist moral mindestens einmal gestiegen.
|
|
||||||
update_owners()
|
|
||||||
assert_not_equal(r.owner, nil)
|
|
||||||
for i=1,AVG_STEP*2 do
|
|
||||||
run_a_turn()
|
|
||||||
assert_not_equal(r.owner, nil)
|
|
||||||
end
|
|
||||||
assert_not_equal(1, r.morale)
|
|
||||||
|
|
||||||
-- regel: moral ist nie hoeher als 2 punkte ueber burgen-max.
|
|
||||||
for i=1,AVG_STEP*4 do
|
|
||||||
run_a_turn()
|
|
||||||
end
|
|
||||||
assert_equal(4, r.morale)
|
|
||||||
|
|
||||||
-- auch mit herrscher faellt moral um 1 pro woche, wenn moral > burgstufe
|
|
||||||
r.morale = 6
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(5, r.morale)
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(4, r.morale)
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(4, r.morale)
|
|
||||||
|
|
||||||
-- regel: ohne herrscher fällt die moral jede woche um 1 punkt, bis sie 1 erreicht
|
|
||||||
u1.building = nil
|
|
||||||
update_owners()
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(3, r.morale)
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(2, r.morale)
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
|
|
||||||
-- ohne herrscher ändert sich auch beschissene Moral nicht:
|
|
||||||
r.morale = 0
|
|
||||||
run_a_turn()
|
|
||||||
assert_equal(0, r.morale)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_morale_old()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
local f1 = faction.create("first@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f1, r, 1)
|
|
||||||
local f2 = faction.create("second@eressea.de", "human", "de")
|
|
||||||
local u2 = unit.create(f2, r, 1)
|
|
||||||
|
|
||||||
local b = building.create(r, "castle")
|
|
||||||
b.size = 10
|
|
||||||
u1.building = b
|
|
||||||
u2.building = b
|
|
||||||
update_owners()
|
|
||||||
assert_equal(1, r.morale)
|
|
||||||
r.morale = 5
|
|
||||||
assert_equal(u1.faction, r.owner)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("GIB " .. itoa36(u2.id) .. " KOMMANDO")
|
|
||||||
process_orders()
|
|
||||||
u1:clear_orders()
|
|
||||||
assert_equal(r.owner, u2.faction)
|
|
||||||
assert_equal(3, r.morale) -- 5-MORALE_TRANSFER
|
|
||||||
for u in r.units do
|
|
||||||
if u.faction.id==u2.faction.id then
|
|
||||||
u.building = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
update_owners()
|
|
||||||
assert_equal(r.owner, u1.faction)
|
|
||||||
assert_equal(0, r.morale)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_no_uruk()
|
|
||||||
local f1 = faction.create("noreply@eressea.de", "uruk", "de")
|
|
||||||
assert_equal(f1.race, "orc")
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("tests.eressea.settings", package.seeall, lunit.testcase )
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.free_game()
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_settings()
|
|
||||||
assert_equal(nil, eressea.settings.get("foo"))
|
|
||||||
eressea.settings.set("foo", "bar")
|
|
||||||
assert_equal("bar", eressea.settings.get("foo"))
|
|
||||||
end
|
|
|
@ -1,47 +0,0 @@
|
||||||
require "lunit"
|
|
||||||
|
|
||||||
module("eressea.tests.spells.e3", package.seeall, lunit.testcase)
|
|
||||||
|
|
||||||
function setup()
|
|
||||||
eressea.free_game()
|
|
||||||
eressea.settings.set("magic.fumble.enable", "0")
|
|
||||||
eressea.settings.set("nmr.removenewbie", "0")
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
|
||||||
eressea.settings.set("rules.peasants.growth", "0")
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_blessedharvest_lasts_n_turn()
|
|
||||||
eressea.free_game()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "halfling", "de")
|
|
||||||
local u = unit.create(f, r)
|
|
||||||
local err = 0
|
|
||||||
r:set_resource("peasant", 100)
|
|
||||||
r:set_resource("money", 0)
|
|
||||||
u:add_item("money", 1000)
|
|
||||||
u.magic = "gwyrrd"
|
|
||||||
u.race = "dwarf"
|
|
||||||
u:set_skill("magic", 20)
|
|
||||||
u.aura = 200
|
|
||||||
err = err + u:add_spell("raindance")
|
|
||||||
err = err + u:add_spell("blessedharvest")
|
|
||||||
assert_equal(0, err)
|
|
||||||
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("ZAUBERE STUFE 3 Regentanz")
|
|
||||||
assert_equal(0, r:get_resource("money"), 0)
|
|
||||||
|
|
||||||
local m = 0
|
|
||||||
local p = 100
|
|
||||||
|
|
||||||
process_orders()
|
|
||||||
assert_equal(200, r:get_resource("money"))
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("ARBEITEN")
|
|
||||||
process_orders()
|
|
||||||
process_orders()
|
|
||||||
process_orders()
|
|
||||||
assert_equal(800, r:get_resource("money"))
|
|
||||||
process_orders()
|
|
||||||
assert_equal(900, r:get_resource("money"))
|
|
||||||
end
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
require 'config'
|
||||||
|
|
||||||
|
function write_fam(file)
|
||||||
|
for f in factions() do for u in f.units do if u.familiar then
|
||||||
|
file:write(u.id .. " " .. u.familiar.id .. "\n")
|
||||||
|
end end end
|
||||||
|
end
|
||||||
|
|
||||||
|
function read_fam(file)
|
||||||
|
m, f = file:read("*n", "*n")
|
||||||
|
while m and f do
|
||||||
|
mag = get_unit(m)
|
||||||
|
fam = get_unit(f)
|
||||||
|
if mag and fam then
|
||||||
|
mag.familiar = fam
|
||||||
|
end
|
||||||
|
m, f = file:read("*n", "*n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
eressea.read_game(get_turn()..".dat")
|
||||||
|
file = io.open("familiars.txt", "r")
|
||||||
|
if file then
|
||||||
|
read_fam(file)
|
||||||
|
eressea.write_game(get_turn()..".fix")
|
||||||
|
else
|
||||||
|
file = io.open("familiars.txt", "w")
|
||||||
|
write_fam(file)
|
||||||
|
end
|
||||||
|
file:close()
|
|
@ -9,59 +9,22 @@ local function read_players()
|
||||||
local str = input:read("*line")
|
local str = input:read("*line")
|
||||||
if str==nil then break end
|
if str==nil then break end
|
||||||
local email, race, lang = str:match("([^ ]*) ([^ ]*) ([^ ]*)")
|
local email, race, lang = str:match("([^ ]*) ([^ ]*) ([^ ]*)")
|
||||||
|
if string.char(string.byte(email, 1))~='#' then
|
||||||
table.insert(players, { race = race, lang = lang, email = email })
|
table.insert(players, { race = race, lang = lang, email = email })
|
||||||
end
|
end
|
||||||
|
end
|
||||||
return players
|
return players
|
||||||
end
|
end
|
||||||
|
|
||||||
local function seed(r, email, race, lang)
|
local function seed(r, email, race, lang)
|
||||||
local f = faction.create(email, race, lang)
|
local f = faction.create(email, race, lang)
|
||||||
local u = unit.create(f, r)
|
local u = unit.create(f, r)
|
||||||
u:set_skill("perception", 30)
|
equip_unit(u, "new_faction")
|
||||||
u:add_item("money", 20000)
|
equip_unit(u, "first_unit")
|
||||||
items = {
|
equip_unit(u, "first_" .. race, 7) -- disable old callbacks
|
||||||
log = 50,
|
|
||||||
stone = 50,
|
|
||||||
iron = 50,
|
|
||||||
laen = 10,
|
|
||||||
mallorn = 10,
|
|
||||||
skillpotion = 5
|
|
||||||
}
|
|
||||||
for it, num in pairs(items) do
|
|
||||||
u:add_item(it, num)
|
|
||||||
end
|
|
||||||
u = nil
|
|
||||||
skills ={
|
|
||||||
"crossbow",
|
|
||||||
"bow",
|
|
||||||
"building",
|
|
||||||
"trade",
|
|
||||||
"forestry",
|
|
||||||
"catapult",
|
|
||||||
"herbalism",
|
|
||||||
"training",
|
|
||||||
"riding",
|
|
||||||
"armorer",
|
|
||||||
"shipcraft",
|
|
||||||
"melee",
|
|
||||||
"sailing",
|
|
||||||
"polearm",
|
|
||||||
"espionage",
|
|
||||||
"roadwork",
|
|
||||||
"tactics",
|
|
||||||
"stealth",
|
|
||||||
"weaponsmithing",
|
|
||||||
"cartmaking",
|
|
||||||
"taxation",
|
|
||||||
"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("mining", 30)
|
||||||
unit.create(f, r, 5):set_skill("quarrying", 30)
|
unit.create(f, r, 5):set_skill("quarrying", 30)
|
||||||
for _, sk in ipairs(skills) do
|
f:set_origin(r)
|
||||||
u = u or unit.create(f, r, 5)
|
|
||||||
if u:set_skill(sk, 15)>0 then u=nil end
|
|
||||||
end
|
|
||||||
return f
|
return f
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -80,12 +43,13 @@ local function dump_selection(sel)
|
||||||
end
|
end
|
||||||
|
|
||||||
players = read_players()
|
players = read_players()
|
||||||
local limit = 30000
|
local peasants = 20000
|
||||||
|
local trees = 1000
|
||||||
local turn = get_turn()
|
local turn = get_turn()
|
||||||
local sel
|
local sel
|
||||||
if #players > 0 then
|
if #players > 0 then
|
||||||
eressea.read_game(("%d.dat"):format(turn))
|
eressea.read_game(("%d.dat"):format(turn))
|
||||||
sel = p.select(regions(), limit)
|
sel = p.select(regions(), peasants, trees)
|
||||||
if #sel > 0 then
|
if #sel > 0 then
|
||||||
local best = dump_selection(sel)
|
local best = dump_selection(sel)
|
||||||
print("finest region, " .. best.score .. " points: " .. tostring(best.r))
|
print("finest region, " .. best.score .. " points: " .. tostring(best.r))
|
||||||
|
@ -94,12 +58,17 @@ end
|
||||||
math.randomseed(os.time())
|
math.randomseed(os.time())
|
||||||
|
|
||||||
local newbs = {}
|
local newbs = {}
|
||||||
|
local per_region = 2
|
||||||
|
local num_seeded = 2
|
||||||
|
local start = nil
|
||||||
for _, p in ipairs(players) do
|
for _, p in ipairs(players) do
|
||||||
local index = math.random(#sel)
|
if num_seeded == per_region then
|
||||||
local start = nil
|
|
||||||
while not start or start.units() do
|
while not start or start.units() do
|
||||||
|
local index = math.random(#sel)
|
||||||
start = sel[index]
|
start = sel[index]
|
||||||
end
|
end
|
||||||
|
num_seeded = 0
|
||||||
|
end
|
||||||
local dupe = false
|
local dupe = false
|
||||||
for f in factions() do
|
for f in factions() do
|
||||||
if f.email==p.email then
|
if f.email==p.email then
|
||||||
|
@ -109,6 +78,7 @@ for _, p in ipairs(players) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not dupe then
|
if not dupe then
|
||||||
|
num_seeded = num_seeded + 1
|
||||||
f = seed(start, p.email, p.race or "human", p.lang or "de")
|
f = seed(start, p.email, p.race or "human", p.lang or "de")
|
||||||
print("new faction ".. tostring(f) .. " starts in ".. tostring(start))
|
print("new faction ".. tostring(f) .. " starts in ".. tostring(start))
|
||||||
table.insert(newbs, f)
|
table.insert(newbs, f)
|
||||||
|
|
|
@ -6,19 +6,18 @@ local function score(r, res)
|
||||||
local x, y, rn
|
local x, y, rn
|
||||||
local peas = r:get_resource(res)
|
local peas = r:get_resource(res)
|
||||||
for _, rn in pairs(r.adj) do
|
for _, rn in pairs(r.adj) do
|
||||||
if rn then
|
if rn and not rn.units() then
|
||||||
peas = peas + rn:get_resource(res)
|
peas = peas + rn:get_resource(res)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return peas
|
return peas
|
||||||
end
|
end
|
||||||
|
|
||||||
local function select(regions, limit)
|
local function select(regions, peasants, trees)
|
||||||
local sel = {}
|
local sel = {}
|
||||||
for r in regions do
|
for r in regions do
|
||||||
if r.terrain~="ocean" and r.units()==nil then
|
if not r.plane and r.terrain~="ocean" and not r.units() then
|
||||||
s = score(r)
|
if score(r, "peasant") >= peasants and score(r, "tree") >= trees then
|
||||||
if s >= limit then
|
|
||||||
table.insert(sel, r)
|
table.insert(sel, r)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,6 +15,7 @@ require 'eressea'
|
||||||
require 'eressea.xmlconf'
|
require 'eressea.xmlconf'
|
||||||
require 'eressea.path'
|
require 'eressea.path'
|
||||||
require 'tests.e2'
|
require 'tests.e2'
|
||||||
|
require 'tests.xmas'
|
||||||
require 'lunit'
|
require 'lunit'
|
||||||
|
|
||||||
rules = require('eressea.' .. config.rules)
|
rules = require('eressea.' .. config.rules)
|
||||||
|
|
|
@ -15,6 +15,7 @@ require 'eressea'
|
||||||
require 'eressea.path'
|
require 'eressea.path'
|
||||||
require 'eressea.xmlconf'
|
require 'eressea.xmlconf'
|
||||||
require 'tests.e3'
|
require 'tests.e3'
|
||||||
|
require 'tests.xmas'
|
||||||
require 'lunit'
|
require 'lunit'
|
||||||
|
|
||||||
eressea.settings.set("rules.alliances", "0")
|
eressea.settings.set("rules.alliances", "0")
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
-- 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
|
||||||
|
|
||||||
|
path = 'scripts'
|
||||||
|
if config.install then
|
||||||
|
path = config.install .. '/' .. path
|
||||||
|
package.path = package.path .. ';' .. config.install .. '/lunit/?.lua'
|
||||||
|
--needed to find lunit if not run form eressea root. Needs right [lua] install setting in eressea.ini (point to eressea root from the start folder)
|
||||||
|
end
|
||||||
|
package.path = package.path .. ';' .. path .. '/?.lua;' .. path .. '/?/init.lua'
|
||||||
|
|
||||||
|
config.rules = 'e4'
|
||||||
|
|
||||||
|
require 'eressea'
|
||||||
|
require 'eressea.path'
|
||||||
|
require 'eressea.xmlconf'
|
||||||
|
require 'tests.e3'
|
||||||
|
require 'lunit'
|
||||||
|
|
||||||
|
eressea.settings.set("rules.alliances", "0")
|
||||||
|
rules = require('eressea.' .. config.rules)
|
||||||
|
result = lunit.main()
|
||||||
|
return result.errors + result.failed
|
|
@ -22,16 +22,16 @@ local function two_factions()
|
||||||
return f1, f2
|
return f1, f2
|
||||||
end
|
end
|
||||||
|
|
||||||
module("tests.eressea.common", package.seeall, lunit.testcase)
|
module("tests.common", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("nmr.removenewbie", "0")
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
eressea.settings.set("NewbieImmunity", "0")
|
eressea.settings.set("NewbieImmunity", "0")
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
eressea.settings.set("rules.encounters", "0")
|
eressea.settings.set("rules.encounters", "0")
|
||||||
eressea.settings.set("rules.peasants.growth", "1")
|
eressea.settings.set("rules.peasants.growth", "1")
|
||||||
|
eressea.settings.set("study.random_progress", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_flags()
|
function test_flags()
|
||||||
|
@ -39,13 +39,13 @@ function test_flags()
|
||||||
local f = faction.create("flags@eressea.de", "halfling", "de")
|
local f = faction.create("flags@eressea.de", "halfling", "de")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local no = itoa36(f.id)
|
local no = itoa36(f.id)
|
||||||
local flags = 587203585
|
local flags = 50332673
|
||||||
f.flags = flags
|
f.flags = flags
|
||||||
|
|
||||||
eressea.write_game("test.dat")
|
eressea.write_game("test.dat")
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.read_game("test.dat")
|
eressea.read_game("test.dat")
|
||||||
os.remove('test.dat')
|
os.remove('data/test.dat')
|
||||||
f = get_faction(no)
|
f = get_faction(no)
|
||||||
assert_equal(flags, f.flags)
|
assert_equal(flags, f.flags)
|
||||||
end
|
end
|
||||||
|
@ -92,7 +92,7 @@ function test_demon_food()
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local p = r:get_resource("peasant")
|
local p = r:get_resource("peasant")
|
||||||
r:set_resource("peasant", 2000)
|
r:set_resource("peasant", 2000)
|
||||||
eressea.settings.set("rules.economy.food", "0")
|
eressea.settings.set("rules.food.flags", "0")
|
||||||
eressea.settings.set("rules.peasants.growth", "0")
|
eressea.settings.set("rules.peasants.growth", "0")
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_not_nil(u)
|
assert_not_nil(u)
|
||||||
|
@ -194,6 +194,7 @@ function test_descriptions()
|
||||||
eressea.write_game(filename)
|
eressea.write_game(filename)
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.read_game(filename)
|
eressea.read_game(filename)
|
||||||
|
os.remove("data/test.dat")
|
||||||
assert_equal(info, get_ship(sno).info)
|
assert_equal(info, get_ship(sno).info)
|
||||||
assert_equal(info, get_unit(uno).info)
|
assert_equal(info, get_unit(uno).info)
|
||||||
assert_equal(info, get_faction(fno).info)
|
assert_equal(info, get_faction(fno).info)
|
||||||
|
@ -459,7 +460,7 @@ function test_work()
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_upkeep()
|
function test_upkeep()
|
||||||
eressea.settings.set("rules.economy.food", "0")
|
eressea.settings.set("rules.food.flags", "0")
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply10@eressea.de", "human", "de")
|
local f = faction.create("noreply10@eressea.de", "human", "de")
|
||||||
local u = unit.create(f, r, 5)
|
local u = unit.create(f, r, 5)
|
||||||
|
@ -601,30 +602,6 @@ function test_control()
|
||||||
assert_equal(u2, b.owner)
|
assert_equal(u2, b.owner)
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_store_unit()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f = faction.create("noreply15@eressea.de", "human", "de")
|
|
||||||
local u = unit.create(f, r, 1)
|
|
||||||
local fid = f.id
|
|
||||||
u:add_item("money", u.number * 100)
|
|
||||||
local filename = config.basepath .. "/data/test.dat"
|
|
||||||
store = storage.create(filename, "wb")
|
|
||||||
assert_not_equal(store, nil)
|
|
||||||
store:write_unit(u)
|
|
||||||
store:close()
|
|
||||||
eressea.free_game()
|
|
||||||
-- recreate world:
|
|
||||||
r = region.create(0, 0, "plain")
|
|
||||||
f = faction.create("noreply16@eressea.de", "human", "de")
|
|
||||||
f.id = fid
|
|
||||||
store = storage.create(filename, "rb")
|
|
||||||
assert_not_nil(store)
|
|
||||||
u = store:read_unit()
|
|
||||||
store:close()
|
|
||||||
assert(u)
|
|
||||||
assert(u:get_item("money") == u.number * 100)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_building_other()
|
function test_building_other()
|
||||||
local r = region.create(0,0, "plain")
|
local r = region.create(0,0, "plain")
|
||||||
local f1 = faction.create("noreply17@eressea.de", "human", "de")
|
local f1 = faction.create("noreply17@eressea.de", "human", "de")
|
||||||
|
@ -645,6 +622,8 @@ function test_building_other()
|
||||||
assert_not_equal(10, b.size)
|
assert_not_equal(10, b.size)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- segfault above
|
||||||
|
|
||||||
function test_config()
|
function test_config()
|
||||||
assert_not_equal(nil, config.basepath)
|
assert_not_equal(nil, config.basepath)
|
||||||
assert_not_equal(nil, config.locales)
|
assert_not_equal(nil, config.locales)
|
||||||
|
@ -790,6 +769,7 @@ function test_expensive_skills_cost_money()
|
||||||
u:add_item("money", 10000)
|
u:add_item("money", 10000)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
u:add_order("LERNEN MAGIE Gwyrrd")
|
u:add_order("LERNEN MAGIE Gwyrrd")
|
||||||
|
assert_equal(0, u:get_skill("magic"))
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_equal(9900, u:get_item("money"))
|
assert_equal(9900, u:get_item("money"))
|
||||||
assert_equal(1, u:get_skill("magic"))
|
assert_equal(1, u:get_skill("magic"))
|
||||||
|
@ -802,7 +782,7 @@ function test_food_is_consumed()
|
||||||
u:add_item("money", 100)
|
u:add_item("money", 100)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
u:add_order("LERNEN Reiten") -- don't work
|
u:add_order("LERNEN Reiten") -- don't work
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_equal(100, u:get_item("money"))
|
assert_equal(100, u:get_item("money"))
|
||||||
end
|
end
|
||||||
|
@ -814,7 +794,7 @@ function test_food_can_override()
|
||||||
u:add_item("money", 100)
|
u:add_item("money", 100)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
u:add_order("LERNEN Reiten") -- don't work
|
u:add_order("LERNEN Reiten") -- don't work
|
||||||
eressea.settings.set("rules.economy.food", "0")
|
eressea.settings.set("rules.food.flags", "0")
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_equal(90, u:get_item("money"))
|
assert_equal(90, u:get_item("money"))
|
||||||
end
|
end
|
||||||
|
@ -941,7 +921,7 @@ module("tests.recruit", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
eressea.settings.set("rules.peasants.growth", "0")
|
eressea.settings.set("rules.peasants.growth", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -981,9 +961,8 @@ module("tests.report", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("nmr.removenewbie", "0")
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
end
|
end
|
||||||
|
|
||||||
local function find_in_report(f, pattern, extension)
|
local function find_in_report(f, pattern, extension)
|
||||||
|
@ -995,7 +974,6 @@ local function find_in_report(f, pattern, extension)
|
||||||
report:close()
|
report:close()
|
||||||
|
|
||||||
local start, _ = string.find(t, pattern)
|
local start, _ = string.find(t, pattern)
|
||||||
-- posix.unlink(filename)
|
|
||||||
return start~=nil
|
return start~=nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1052,6 +1030,7 @@ function test_coordinates_noname_plane()
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_lighthouse()
|
function test_lighthouse()
|
||||||
|
eressea.free_game()
|
||||||
local r = region.create(0, 0, "mountain")
|
local r = region.create(0, 0, "mountain")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
region.create(1, 0, "mountain")
|
region.create(1, 0, "mountain")
|
||||||
|
@ -1083,7 +1062,7 @@ module("tests.parser", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("rules.economy.food", "4") -- FOOD_IS_FREE
|
eressea.settings.set("rules.food.flags", "4") -- FOOD_IS_FREE
|
||||||
eressea.settings.set("rules.encounters", "0")
|
eressea.settings.set("rules.encounters", "0")
|
||||||
eressea.settings.set("rules.move.owner_leave", "0")
|
eressea.settings.set("rules.move.owner_leave", "0")
|
||||||
end
|
end
|
||||||
|
@ -1092,7 +1071,7 @@ function test_parser()
|
||||||
local r = region.create(0, 0, "mountain")
|
local r = region.create(0, 0, "mountain")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local filename = config.basepath .. "/data/orders.txt"
|
local filename = "orders.txt"
|
||||||
|
|
||||||
local file = io.open(filename, "w")
|
local file = io.open(filename, "w")
|
||||||
assert_not_nil(file)
|
assert_not_nil(file)
|
||||||
|
@ -1103,5 +1082,38 @@ function test_parser()
|
||||||
|
|
||||||
eressea.read_orders(filename)
|
eressea.read_orders(filename)
|
||||||
process_orders()
|
process_orders()
|
||||||
|
os.remove(filename)
|
||||||
assert_equal("Goldene Herde", u.name)
|
assert_equal("Goldene Herde", u.name)
|
||||||
end
|
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("noreply@eressea.de", "human", "de")
|
||||||
|
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
|
|
@ -36,4 +36,3 @@ function test_read_ship()
|
||||||
s = ship.create(nil, "boat")
|
s = ship.create(nil, "boat")
|
||||||
assert_not_nil(s)
|
assert_not_nil(s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.e2.destroy", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.free_game()
|
||||||
|
eressea.settings.set("NewbieImmunity", "0")
|
||||||
|
end
|
||||||
|
|
||||||
|
function disabled_test_dont_move_after_destroy()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local r2 = region.create(1, 0, "plain")
|
||||||
|
local f = faction.create("test@example.com", "human", "de")
|
||||||
|
local u = unit.create(f, r1, 1)
|
||||||
|
u.building = building.create(u.region, "castle")
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("NACH O")
|
||||||
|
u:add_order("ZERSTOERE " .. itoa36(u.building.id))
|
||||||
|
process_orders()
|
||||||
|
if not u.region then
|
||||||
|
print("shit happened ", u.number)
|
||||||
|
end
|
||||||
|
assert_equal(r1, u.region)
|
||||||
|
assert_equal(nil, u.building)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_dont_destroy_after_attack()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local u = unit.create(faction.create("one@example.com", "human", "de"), r1, 10)
|
||||||
|
local u2 = unit.create(faction.create("two@example.com", "human", "de"), r1, 1)
|
||||||
|
u.building = building.create(u.region, "castle")
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("ATTACKIERE " .. itoa36(u2.id))
|
||||||
|
u:add_order("ZERSTOERE " .. itoa36(u.building.id))
|
||||||
|
process_orders()
|
||||||
|
assert_not_nil(u.building)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_destroy_is_long()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local u = unit.create(faction.create("one@example.com", "human", "de"), r1, 10)
|
||||||
|
u.building = building.create(u.region, "castle")
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("LERNE Unterhaltung")
|
||||||
|
u:add_order("ZERSTOERE " .. itoa36(u.building.id))
|
||||||
|
process_orders()
|
||||||
|
assert_equal(0, u:get_skill("entertainment"))
|
||||||
|
assert_equal(nil, u.building)
|
||||||
|
end
|
|
@ -22,7 +22,8 @@ end
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
|
eressea.settings.set("rules.ship.storms", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_learn()
|
function test_learn()
|
||||||
|
@ -107,7 +108,7 @@ function test_ship_capacity()
|
||||||
local r = region.create(0,0, "ocean")
|
local r = region.create(0,0, "ocean")
|
||||||
region.create(1,0, "ocean")
|
region.create(1,0, "ocean")
|
||||||
local r2 = region.create(2,0, "ocean")
|
local r2 = region.create(2,0, "ocean")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = faction.create("capacity@eressea.de", "human", "de")
|
||||||
|
|
||||||
-- u1 is at the limit and moves
|
-- u1 is at the limit and moves
|
||||||
local s1 = ship.create(r, "boat")
|
local s1 = ship.create(r, "boat")
|
||||||
|
|
|
@ -4,10 +4,9 @@ module("tests.e2.guard", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("nmr.removenewbie", "0")
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
eressea.settings.set("NewbieImmunity", "0")
|
eressea.settings.set("NewbieImmunity", "0")
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_guard_unarmed()
|
function test_guard_unarmed()
|
||||||
|
|
|
@ -1,4 +1,13 @@
|
||||||
|
require 'tests.e2.undead'
|
||||||
require 'tests.e2.shiplanding'
|
require 'tests.e2.shiplanding'
|
||||||
require 'tests.e2.e2features'
|
require 'tests.e2.e2features'
|
||||||
require 'tests.e2.movement'
|
require 'tests.e2.movement'
|
||||||
|
require 'tests.e2.destroy'
|
||||||
require 'tests.e2.guard'
|
require 'tests.e2.guard'
|
||||||
|
require 'tests.e2.spells'
|
||||||
|
require 'tests.e2.stealth'
|
||||||
|
require 'tests.orders'
|
||||||
|
require 'tests.common'
|
||||||
|
require 'tests.storage'
|
||||||
|
require 'tests.magicbag'
|
||||||
|
require 'tests.process'
|
||||||
|
|
|
@ -4,7 +4,6 @@ module("tests.e2.movement", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("nmr.removenewbie", "0")
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
eressea.settings.set("NewbieImmunity", "0")
|
eressea.settings.set("NewbieImmunity", "0")
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,6 @@ module("tests.e2.shiplanding", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("nmr.removenewbie", "0")
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
eressea.settings.set("NewbieImmunity", "0")
|
eressea.settings.set("NewbieImmunity", "0")
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.e2.ships", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.settings.set("rules.ship.damage.nocrewocean", "0")
|
||||||
|
eressea.settings.set("rules.ship.damage.nocrew", "0")
|
||||||
|
eressea.settings.set("rules.ship.drifting", "0")
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_ship_requires_skill()
|
||||||
|
local r1 = region.create(0, 0, "ocean")
|
||||||
|
local r2 = region.create(1, 0, "ocean")
|
||||||
|
local f = faction.create("fake@eressea.de", "human", "de")
|
||||||
|
local u1 = unit.create(f, r1, 1)
|
||||||
|
u1.name = "fake"
|
||||||
|
u1.ship = ship.create(r1, "longboat")
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_order("NACH O")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(r1, u1.ship.region)
|
||||||
|
assert_equal(r1, u1.region)
|
||||||
|
end
|
||||||
|
|
||||||
|
function no_test_ship_happy_case()
|
||||||
|
local r1 = region.create(0, 0, "ocean")
|
||||||
|
local r2 = region.create(1, 0, "ocean")
|
||||||
|
local f = faction.create("hodor@eressea.de", "human", "de")
|
||||||
|
local u1 = unit.create(f, r1, 1)
|
||||||
|
local u2 = unit.create(f, r1, 1)
|
||||||
|
u1.ship = ship.create(r1, "longboat")
|
||||||
|
u2.ship = u1.ship
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_order("NACH O")
|
||||||
|
u1:set_skill("sailing", 1) -- cptskill = 1
|
||||||
|
u2:set_skill("sailing", 9) -- sumskill = 10
|
||||||
|
process_orders()
|
||||||
|
assert_equal(r2, u1.ship.region)
|
||||||
|
assert_equal(r2, u1.region)
|
||||||
|
assert_equal(r2, u2.region)
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.e2.spells", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.free_game()
|
||||||
|
eressea.settings.set("nmr.removenewbie", "0")
|
||||||
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
|
eressea.settings.set("NewbieImmunity", "0")
|
||||||
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_shapeshift()
|
||||||
|
local r = region.create(42, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "demon", "de")
|
||||||
|
local u1 = unit.create(f, r, 1)
|
||||||
|
local u2 = unit.create(f, r, 1)
|
||||||
|
u1:clear_orders()
|
||||||
|
u1.magic = "gray"
|
||||||
|
u1:set_skill("magic", 2)
|
||||||
|
u1.aura = 1
|
||||||
|
u1:add_spell("shapeshift")
|
||||||
|
u1:add_order("ZAUBERE STUFE 1 Gestaltwandlung " .. itoa36(u2.id) .. " Goblin")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(f.race, u2.race)
|
||||||
|
s = u2:show()
|
||||||
|
assert_equal("1 Goblin", string.sub(s, string.find(s, "1 Goblin")))
|
||||||
|
end
|
|
@ -1,11 +1,11 @@
|
||||||
require "lunit"
|
require "lunit"
|
||||||
|
|
||||||
module('eressea.tests.stealth', package.seeall, lunit.testcase)
|
module('tests.e2.stealth', package.seeall, lunit.testcase)
|
||||||
|
|
||||||
local f
|
local f
|
||||||
local u
|
local u
|
||||||
|
|
||||||
local settings
|
local settings = {}
|
||||||
|
|
||||||
local function set_rule(key, value)
|
local function set_rule(key, value)
|
||||||
if value==nil then
|
if value==nil then
|
||||||
|
@ -18,7 +18,7 @@ end
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.game.reset()
|
eressea.game.reset()
|
||||||
set_rule('rules.economy.food', '4')
|
set_rule('rules.food.flags', '4')
|
||||||
set_rule('rules.magic.playerschools', '')
|
set_rule('rules.magic.playerschools', '')
|
||||||
|
|
||||||
local r = region.create(0,0, "plain")
|
local r = region.create(0,0, "plain")
|
||||||
|
@ -28,7 +28,7 @@ function setup()
|
||||||
end
|
end
|
||||||
|
|
||||||
function teardown()
|
function teardown()
|
||||||
set_rule('rules.economy.food')
|
set_rule('rules.food.flags')
|
||||||
set_rule('rules.magic.playerschools')
|
set_rule('rules.magic.playerschools')
|
||||||
set_rule('rules.stealth.faction')
|
set_rule('rules.stealth.faction')
|
||||||
end
|
end
|
|
@ -0,0 +1,31 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.e2.undead", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.free_game()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_undead_give_item()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create("hodor@eressea.de", "human", "de")
|
||||||
|
local u1 = unit.create(f1, r1, 1)
|
||||||
|
u1.race = "undead"
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_item("log", 1)
|
||||||
|
u1:add_order("GIB 0 1 Holz")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(0, u1:get_item("log"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_undead_dont_give_person()
|
||||||
|
local r1 = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create("hodor@eressea.de", "human", "de")
|
||||||
|
local u1 = unit.create(f1, r1, 2)
|
||||||
|
u1.race = "undead"
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_item("log", 1)
|
||||||
|
u1:add_order("GIB 0 1 Person")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(2, u1.number)
|
||||||
|
end
|
|
@ -25,3 +25,28 @@ function test_small_castles()
|
||||||
assert_equal("site", b:get_typename(9))
|
assert_equal("site", b:get_typename(9))
|
||||||
assert_equal("fortification", b:get_typename(10))
|
assert_equal("fortification", b:get_typename(10))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_build_normal()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_item("stone", 10)
|
||||||
|
u:set_skill("building", 10)
|
||||||
|
u:add_order("MACHE BURG")
|
||||||
|
process_orders()
|
||||||
|
assert_not_nil(u.building)
|
||||||
|
assert_equal(10, u.building.size)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_build_packice()
|
||||||
|
local r = region.create(0, 0, "packice")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_item("stone", 10)
|
||||||
|
u:set_skill("building", 10)
|
||||||
|
u:add_order("MACHE BURG")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(nil, u.building)
|
||||||
|
end
|
||||||
|
|
|
@ -3,3 +3,8 @@ require 'tests.e3.stealth'
|
||||||
require 'tests.e3.spells'
|
require 'tests.e3.spells'
|
||||||
require 'tests.e3.rules'
|
require 'tests.e3.rules'
|
||||||
require 'tests.e3.parser'
|
require 'tests.e3.parser'
|
||||||
|
require 'tests.e3.morale'
|
||||||
|
require 'tests.orders'
|
||||||
|
require 'tests.common'
|
||||||
|
require 'tests.magicbag'
|
||||||
|
require 'tests.process'
|
||||||
|
|
|
@ -3,7 +3,7 @@ require "lunit"
|
||||||
module("tests.e3.morale", package.seeall, lunit.testcase )
|
module("tests.e3.morale", package.seeall, lunit.testcase )
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.free_game()
|
eressea.game.reset()
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_when_owner_returns_morale_drops_only_2()
|
function test_when_owner_returns_morale_drops_only_2()
|
||||||
|
|
|
@ -17,14 +17,14 @@ function setup()
|
||||||
eressea.game.reset()
|
eressea.game.reset()
|
||||||
settings = {}
|
settings = {}
|
||||||
set_rule("rules.move.owner_leave", "1")
|
set_rule("rules.move.owner_leave", "1")
|
||||||
set_rule("rules.economy.food", "4")
|
set_rule("rules.food.flags", "4")
|
||||||
set_rule("rules.ship.drifting", "0")
|
set_rule("rules.ship.drifting", "0")
|
||||||
set_rule("rules.ship.storms", "0")
|
set_rule("rules.ship.storms", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
function teardown()
|
function teardown()
|
||||||
set_rule("rules.move.owner_leave")
|
set_rule("rules.move.owner_leave")
|
||||||
set_rule("rules.economy.food")
|
set_rule("rules.food.flags")
|
||||||
set_rule("rules.ship.drifting")
|
set_rule("rules.ship.drifting")
|
||||||
set_rule("rules.ship.storms")
|
set_rule("rules.ship.storms")
|
||||||
end
|
end
|
||||||
|
@ -76,9 +76,7 @@ function disable_test_market_action()
|
||||||
b.size = 10
|
b.size = 10
|
||||||
u.building = b
|
u.building = b
|
||||||
update_owners()
|
update_owners()
|
||||||
for r in regions() do
|
process.markets()
|
||||||
market_action(r)
|
|
||||||
end
|
|
||||||
assert_equal(35, u:get_item("balm"))
|
assert_equal(35, u:get_item("balm"))
|
||||||
assert_equal(70, u:get_item("h2"))
|
assert_equal(70, u:get_item("h2"))
|
||||||
end
|
end
|
||||||
|
@ -148,24 +146,20 @@ function test_no_stealth()
|
||||||
assert_equal(-1, u:get_skill("stealth"))
|
assert_equal(-1, u:get_skill("stealth"))
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
function test_no_teach()
|
||||||
function test_analyze_magic()
|
local r = region.create(0,0, "plain")
|
||||||
local r1 = region.create(0,0, "plain")
|
|
||||||
local r2 = region.create(1,0, "plain")
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u1 = unit.create(f, r, 1)
|
||||||
|
local u2 = unit.create(f, r, 1)
|
||||||
|
|
||||||
local u = unit.create(f, r2, 1)
|
u1:clear_orders()
|
||||||
|
u2:clear_orders()
|
||||||
u.race = "elf"
|
u1:set_skill("riding", 3)
|
||||||
u:set_skill("magic", 6)
|
u2:add_order("LERNE Reiten")
|
||||||
u.magic = "gwyrrd"
|
u1:add_order("LEHRE " .. itoa36(u2.id))
|
||||||
u.aura = 60
|
|
||||||
u:add_spell("analyze_magic")
|
|
||||||
u:clear_orders()
|
|
||||||
u:add_order("Zaubere stufe 2 'Magie analysieren' REGION 1,0")
|
|
||||||
process_orders()
|
process_orders()
|
||||||
|
-- TODO: assert something (reflecting skills sucks!)
|
||||||
end
|
end
|
||||||
]]--
|
|
||||||
|
|
||||||
function test_seecast()
|
function test_seecast()
|
||||||
local r = region.create(0,0, "plain")
|
local r = region.create(0,0, "plain")
|
||||||
|
@ -205,29 +199,8 @@ function test_seecast()
|
||||||
assert_equal(8, u2.region.x)
|
assert_equal(8, u2.region.x)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function use_tree(terrain)
|
|
||||||
local r = region.create(0,0, terrain)
|
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
|
||||||
local u1 = unit.create(f, r, 5)
|
|
||||||
r:set_resource("tree", 0)
|
|
||||||
u1:add_item("xmastree", 1)
|
|
||||||
u1:clear_orders()
|
|
||||||
u1:add_order("BENUTZEN 1 Weihnachtsbaum")
|
|
||||||
process_orders()
|
|
||||||
return r
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_xmastree()
|
|
||||||
local r
|
|
||||||
r = use_tree("ocean")
|
|
||||||
assert_equal(0, r:get_resource("tree"))
|
|
||||||
eressea.free_game()
|
|
||||||
r = use_tree("plain")
|
|
||||||
assert_equal(10, r:get_resource("tree"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_fishing()
|
function test_fishing()
|
||||||
eressea.settings.set("rules.economy.food", "0")
|
eressea.settings.set("rules.food.flags", "0")
|
||||||
local r = region.create(0,0, "ocean")
|
local r = region.create(0,0, "ocean")
|
||||||
local r2 = region.create(1,0, "plain")
|
local r2 = region.create(1,0, "plain")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
@ -481,7 +454,6 @@ function test_canoe_passes_through_land()
|
||||||
u1:add_order("NACH O O O")
|
u1:add_order("NACH O O O")
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_equal(land, u2.region, "canoe did not stop at coast")
|
assert_equal(land, u2.region, "canoe did not stop at coast")
|
||||||
u1:add_order("NACH O O O")
|
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_equal(dst, sh.region, "canoe could not leave coast")
|
assert_equal(dst, sh.region, "canoe could not leave coast")
|
||||||
assert_equal(dst, u1.region, "canoe could not leave coast")
|
assert_equal(dst, u1.region, "canoe could not leave coast")
|
||||||
|
|
|
@ -8,7 +8,7 @@ function setup()
|
||||||
eressea.free_game()
|
eressea.free_game()
|
||||||
eressea.settings.set("magic.regeneration.enable", "0")
|
eressea.settings.set("magic.regeneration.enable", "0")
|
||||||
eressea.settings.set("magic.fumble.enable", "0")
|
eressea.settings.set("magic.fumble.enable", "0")
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
|
|
||||||
r = region.create(0, 0, "plain")
|
r = region.create(0, 0, "plain")
|
||||||
f = faction.create("spell_payment@eressea.de", "elf", "de")
|
f = faction.create("spell_payment@eressea.de", "elf", "de")
|
||||||
|
|
|
@ -5,7 +5,6 @@ module("tests.e3.spells", package.seeall, lunit.testcase)
|
||||||
function setup()
|
function setup()
|
||||||
eressea.game.reset()
|
eressea.game.reset()
|
||||||
eressea.settings.set("magic.fumble.enable", "0")
|
eressea.settings.set("magic.fumble.enable", "0")
|
||||||
eressea.settings.set("nmr.removenewbie", "0")
|
|
||||||
eressea.settings.set("nmr.timeout", "0")
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
eressea.settings.set("rules.peasants.growth", "0")
|
eressea.settings.set("rules.peasants.growth", "0")
|
||||||
end
|
end
|
||||||
|
@ -59,7 +58,6 @@ function test_magic()
|
||||||
u:add_spell("protective_runes")
|
u:add_spell("protective_runes")
|
||||||
u:add_spell("analyze_magic")
|
u:add_spell("analyze_magic")
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
u:add_order("ZAUBERE \"Runen des Schutzes\" BURG " .. itoa36(b.id));
|
|
||||||
u.building = b
|
u.building = b
|
||||||
u:add_order("ZAUBERE \"Magie analysieren\" BURG " .. itoa36(b.id));
|
u:add_order("ZAUBERE \"Magie analysieren\" BURG " .. itoa36(b.id));
|
||||||
process_orders()
|
process_orders()
|
||||||
|
|
|
@ -7,7 +7,7 @@ local u
|
||||||
|
|
||||||
function setup()
|
function setup()
|
||||||
eressea.game.reset()
|
eressea.game.reset()
|
||||||
eressea.settings.set("rules.economy.food", "4")
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
|
|
||||||
local r = region.create(0,0, "plain")
|
local r = region.create(0,0, "plain")
|
||||||
f = faction.create("stealth1@eressea.de", "human", "de")
|
f = faction.create("stealth1@eressea.de", "human", "de")
|
||||||
|
|
|
@ -7,3 +7,5 @@ require 'tests.pool'
|
||||||
require 'tests.regions'
|
require 'tests.regions'
|
||||||
require 'tests.settings'
|
require 'tests.settings'
|
||||||
require 'tests.study'
|
require 'tests.study'
|
||||||
|
require 'tests.laws'
|
||||||
|
require 'tests.bindings'
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.laws", package.seeall, lunit.testcase)
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.free_game()
|
||||||
|
conf = [[{
|
||||||
|
"races": {
|
||||||
|
"human" : {}
|
||||||
|
},
|
||||||
|
"terrains" : {
|
||||||
|
"plain": { "flags" : [ "land", "walk", "sail" ] }
|
||||||
|
},
|
||||||
|
"keywords" : {
|
||||||
|
"de": {
|
||||||
|
"attack" : "ATTACKIERE",
|
||||||
|
"maketemp" : "MACHETEMP",
|
||||||
|
"end" : "ENDE",
|
||||||
|
"recruit" : "REKRUTIERE"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"buildings" : {
|
||||||
|
"castle" : {}
|
||||||
|
}
|
||||||
|
}]]
|
||||||
|
|
||||||
|
eressea.config.reset()
|
||||||
|
eressea.config.parse(conf)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_force_leave_on()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create("owner@eressea.de")
|
||||||
|
local f2 = faction.create("guest@eressea.de")
|
||||||
|
local u1 = unit.create(f1, r, 1)
|
||||||
|
local u2 = unit.create(f2, r, 1)
|
||||||
|
local b1 = building.create(r, "castle")
|
||||||
|
u1.building = b1
|
||||||
|
u2.building = b1
|
||||||
|
eressea.settings.set("rules.owners.force_leave", "2")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(b1, u1.building)
|
||||||
|
assert_equal(nil, u2.building)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_force_leave_off()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create("owner@eressea.de")
|
||||||
|
local f2 = faction.create("guest@eressea.de")
|
||||||
|
local u1 = unit.create(f1, r, 1)
|
||||||
|
local u2 = unit.create(f2, r, 1)
|
||||||
|
local b1 = building.create(r, "castle")
|
||||||
|
u1.building = b1
|
||||||
|
u2.building = b1
|
||||||
|
eressea.settings.set("rules.owners.force_leave", "0")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(b1, u1.building)
|
||||||
|
assert_equal(b1, u2.building)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_make_temp()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create("owner@eressea.de", "human", "de")
|
||||||
|
local u1 = unit.create(f1, r, 10)
|
||||||
|
local u, u2
|
||||||
|
|
||||||
|
u1.building = building.create(r, "castle")
|
||||||
|
u1.status = 1
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_order("MACHETEMP 1 Hodor")
|
||||||
|
u1:add_order("REKRUTIERE 1")
|
||||||
|
u1:add_order("ENDE")
|
||||||
|
process_orders()
|
||||||
|
for u in r.units do
|
||||||
|
if u~=u1 then
|
||||||
|
u2 = u
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_not_equal(nil, u2)
|
||||||
|
assert_not_equal(nil, u2.building)
|
||||||
|
assert_equal(1, u2.number)
|
||||||
|
assert_equal(1, u2.status)
|
||||||
|
assert_equal("Hodor", u2.name)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_force_leave_postcombat()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create("owner@eressea.de", "human", "de")
|
||||||
|
local f2 = faction.create("guest@eressea.de", "human", "de")
|
||||||
|
local u1 = unit.create(f1, r, 10)
|
||||||
|
local u2 = unit.create(f2, r, 10)
|
||||||
|
local u, u3
|
||||||
|
local b1 = building.create(r, "castle")
|
||||||
|
u1.building = b1
|
||||||
|
u2.building = b1
|
||||||
|
eressea.settings.set("rules.owners.force_leave", "1")
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_order("ATTACKIERE " .. itoa36(u2.id))
|
||||||
|
u2:clear_orders()
|
||||||
|
u2:add_order("MACHETEMP 2 Hodor")
|
||||||
|
u2:add_order("REKRUTIERE 1")
|
||||||
|
u2:add_order("ENDE")
|
||||||
|
process_orders()
|
||||||
|
for u in r.units do
|
||||||
|
if u~=u1 and u~=u2 then
|
||||||
|
u3 = u
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_not_equal(nil, u3)
|
||||||
|
assert_equal(nil, u3.building)
|
||||||
|
assert_equal(1, u3.number)
|
||||||
|
end
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue