Merge branch 'develop'

Conflicts:
	src/util/log.c
This commit is contained in:
Enno Rehling 2016-08-31 18:15:07 +02:00
commit a08ad52809
285 changed files with 3947 additions and 3137 deletions

26
.editorconfig Normal file
View File

@ -0,0 +1,26 @@
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
# 4 space indentation
[*.{c,h,lua}]
indent_style = space
indent_size = 4
[*.{xml,json}]
charset = utf-8
# Tab indentation (no size specified)
[Makefile]
indent_style = tab
# Matches exact files
[.travis.yml]
indent_style = space
indent_size = 2

View File

@ -11,6 +11,7 @@
"settings": {
"game.id": 2,
"game.name": "Eressea",
"orders.default": "work",
"NewbieImmunity": 8,
"modules.wormholes": true,
"entertain.base": 0,

View File

@ -67,9 +67,5 @@
<text locale="de">ERESSEA 2 BEFEHLE</text>
<text locale="en">ERESSEA 2 ORDERS</text>
</string>
<string name="defaultorder">
<text locale="de">ARBEITEN</text>
<text locale="en">WORK</text>
</string>
</strings>
</eressea>

View File

@ -283,14 +283,6 @@
},
"wall1": {
"flags": [ "forbidden", "land" ]
},
"default": {
"size": 0,
"herbs": [],
"seed": 0,
"road": 0,
"flags": [ "land", "walk", "sail", "fly" ],
"production": {}
}
}
}

View File

@ -27,6 +27,7 @@
"settings": {
"game.id": 3,
"game.name": "E3",
"orders.default": "work",
"database.gameid": 7,
"NewbieImmunity": 4,
"modules.astralspace": false,

View File

@ -59,9 +59,5 @@
<text locale="de">ERESSEA 3 BEFEHLE</text>
<text locale="en">ERESSEA 3 ORDERS</text>
</string>
<string name="defaultorder">
<text locale="de">ARBEITEN</text>
<text locale="en">WORK</text>
</string>
</strings>
</eressea>

View File

@ -27,6 +27,7 @@
"settings": {
"game.id": 4,
"game.name": "Deveron",
"orders.default": "work",
"database.gameid": 7,
"NewbieImmunity": 4,
"modules.astralspace": false,
@ -49,7 +50,7 @@
"recruit.allow_merge": true,
"study.expensivemigrants": true,
"study.speedup": 2,
"study.from_use": 0.4,
"study.produceexp": 12,
"world.era": 3,
"rules.reserve.twophase": true,
"rules.owners.force_leave": false,

View File

@ -60,9 +60,5 @@
<text locale="de">ERESSEA 4 BEFEHLE</text>
<text locale="en">ERESSEA 4 ORDERS</text>
</string>
<string name="defaultorder">
<text locale="de">ARBEITEN</text>
<text locale="en">WORK</text>
</string>
</strings>
</eressea>

2
crypto

@ -1 +1 @@
Subproject commit 93dc9200fa4cb6bfa3883b19f6d33fd416ca43da
Subproject commit 913358a8d7d961ffc35b238c744ca6ce823ffdd9

View File

@ -3,7 +3,7 @@
<resource name="adamantium" limited="yes" material="rm_adamantium">
<item weight="200" score="200">
<construction skill="mining" minskill="8" reqsize="1"/>
<construction skill="mining" minskill="8"/>
</item>
<resourcelimit>
<modifier type="require" building="mine"/>
@ -13,7 +13,7 @@
<resource name="adamantiumaxe">
<item weight="100" score="500">
<construction skill="weaponsmithing" minskill="8" reqsize="1">
<construction skill="weaponsmithing" minskill="8">
<requirement type="adamantium" quantity="1"/>
<requirement type="log" quantity="1"/>
</construction>
@ -26,7 +26,7 @@
<resource name="adamantiumplate">
<item weight="100" score="2000">
<construction skill="armorer" minskill="10" reqsize="1">
<construction skill="armorer" minskill="10">
<requirement type="adamantium" quantity="3"/>
</construction>
<armor ac="7" penalty="0.1"/>

View File

@ -3,22 +3,22 @@
<function name="name" value="castle_name_2"/>
<function name="protection" value="building_protection"/>
<function name="taxes" value="lua_building_taxes"/>
<construction skill="building" minskill="1" maxsize="10" reqsize="1" defense_bonus="0">
<construction skill="building" minskill="1" maxsize="10" defense_bonus="0">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="2" maxsize="40" reqsize="1" defense_bonus="1">
<construction skill="building" minskill="2" maxsize="40" defense_bonus="1">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="3" maxsize="200" reqsize="1" defense_bonus="3">
<construction skill="building" minskill="3" maxsize="200" defense_bonus="3">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="4" maxsize="1000" reqsize="1" defense_bonus="5">
<construction skill="building" minskill="4" maxsize="1000" defense_bonus="5">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="5" maxsize="5000" reqsize="1" defense_bonus="8">
<construction skill="building" minskill="5" maxsize="5000" defense_bonus="8">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="6" reqsize="1" defense_bonus="12">
<construction skill="building" minskill="6" defense_bonus="12">
<requirement type="stone" quantity="1"/>
</construction>
</building>

View File

@ -2,25 +2,25 @@
<building name="castle" capacity="1" fort="yes">
<function name="name" value="castle_name"/>
<function name="protection" value="building_protection"/>
<construction skill="building" minskill="1" maxsize="2" reqsize="1" defense_bonus="0">
<construction skill="building" minskill="1" maxsize="2" defense_bonus="0">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="1" maxsize="8" reqsize="1" defense_bonus="0">
<construction skill="building" minskill="1" maxsize="8" defense_bonus="0">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="2" maxsize="40" reqsize="1" defense_bonus="1">
<construction skill="building" minskill="2" maxsize="40" defense_bonus="1">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="3" maxsize="200" reqsize="1" defense_bonus="3">
<construction skill="building" minskill="3" maxsize="200" defense_bonus="3">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="4" maxsize="1000" reqsize="1" defense_bonus="5">
<construction skill="building" minskill="4" maxsize="1000" defense_bonus="5">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="5" maxsize="5000" reqsize="1" defense_bonus="8">
<construction skill="building" minskill="5" maxsize="5000" defense_bonus="8">
<requirement type="stone" quantity="1"/>
</construction>
<construction skill="building" minskill="6" reqsize="1" defense_bonus="12">
<construction skill="building" minskill="6" defense_bonus="12">
<requirement type="stone" quantity="1"/>
</construction>
</building>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="chainmail">
<item weight="200" score="90">
<construction skill="armorer" minskill="3" reqsize="1">
<construction skill="armorer" minskill="3">
<requirement type="iron" quantity="3"/>
</construction>
<armor ac="3" penalty="0.15" magres="0.0"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="laenmail">
<item weight="100" score="1000">
<construction skill="armorer" minskill="9" reqsize="1">
<construction skill="armorer" minskill="9">
<requirement type="laen" quantity="3"/>
</construction>
<armor ac="6" penalty="0.0" magres="0.3" laen="yes" />

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="laenshield">
<item weight="0" score="1000">
<construction skill="armorer" minskill="7" reqsize="1">
<construction skill="armorer" minskill="7">
<requirement type="laen" quantity="1"/>
</construction>
<armor ac="2" penalty="-0.25" magres="0.3" laen="yes" shield="yes" />

View File

@ -2,7 +2,7 @@
<resource name="plate">
<item weight="400" score="150">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="armorer" minskill="4" reqsize="1">
<construction skill="armorer" minskill="4">
<requirement type="iron" quantity="5"/>
</construction>
<armor ac="5" penalty="0.30" magres="0.0"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="rustychainmail">
<item weight="200" score="30">
<construction skill="armorer" minskill="3" reqsize="1">
<construction skill="armorer" minskill="3">
<requirement type="iron" quantity="3"/>
</construction>
<armor ac="2" penalty="0.30" magres="0.0"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="rustyshield">
<item weight="100" score="10">
<construction skill="armorer" minskill="2" reqsize="1">
<construction skill="armorer" minskill="2">
<requirement type="iron" quantity="1"/>
</construction>
<armor ac="1" penalty="0.0" magres="0.0" shield="yes"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="shield">
<item weight="100" score="30">
<construction skill="armorer" minskill="2" reqsize="1">
<construction skill="armorer" minskill="2">
<requirement type="iron" quantity="1"/>
</construction>
<armor ac="1" penalty="-0.15" magres="0.0" shield="yes"/>

View File

@ -66,7 +66,7 @@
</building>
<building name="monument" namechange="no" capacity="1">
<construction skill="building" minskill="4" reqsize="1">
<construction skill="building" minskill="4">
<requirement type="log" quantity="1"/>
<requirement type="stone" quantity="1"/>
<requirement type="iron" quantity="1"/>
@ -76,7 +76,7 @@
<building name="stables" capacity="1">
<maintenance type="money" amount="150" vital="yes"/>
<construction skill="building" minskill="2" reqsize="1">
<construction skill="building" minskill="2">
<requirement type="log" quantity="4"/>
<requirement type="stone" quantity="2"/>
<requirement type="iron" quantity="1"/>
@ -86,7 +86,7 @@
<building name="sawmill" capacity="1">
<maintenance type="money" amount="250" vital="yes"/>
<construction skill="building" minskill="3" reqsize="1">
<construction skill="building" minskill="3">
<requirement type="log" quantity="5"/>
<requirement type="stone" quantity="5"/>
<requirement type="iron" quantity="3"/>
@ -98,7 +98,7 @@
<function name="init" value="init_smithy"/>
<maintenance type="money" amount="300" vital="yes"/>
<maintenance type="log" amount="1"/>
<construction skill="building" minskill="3" reqsize="1">
<construction skill="building" minskill="3">
<requirement type="log" quantity="5"/>
<requirement type="stone" quantity="5"/>
<requirement type="iron" quantity="2"/>
@ -139,7 +139,7 @@
<building name="quarry" capacity="1">
<maintenance type="money" amount="250" vital="yes"/>
<construction skill="building" minskill="2" reqsize="1">
<construction skill="building" minskill="2">
<requirement type="iron" quantity="1"/>
<requirement type="log" quantity="5"/>
<requirement type="stone" quantity="1"/>
@ -149,7 +149,7 @@
<building name="mine" capacity="1">
<maintenance type="money" amount="500" vital="yes"/>
<construction skill="building" minskill="4" reqsize="1">
<construction skill="building" minskill="4">
<requirement type="iron" quantity="1"/>
<requirement type="log" quantity="10"/>
<requirement type="stone" quantity="5"/>
@ -159,7 +159,7 @@
<building name="lighthouse" capacity="1" maxcapacity="4">
<maintenance type="money" amount="100" vital="yes"/>
<construction skill="building" minskill="3" reqsize="1">
<construction skill="building" minskill="3">
<requirement type="iron" quantity="1"/>
<requirement type="log" quantity="1"/>
<requirement type="stone" quantity="2"/>

View File

@ -1,10 +1,10 @@
<?xml version="1.0"?>
<!-- TODO: this does not work yet -->
<production>
<construction resource="laenshield" skill="armorer" minskill="7" reqsize="1">
<construction resource="laenshield" skill="armorer" minskill="7">
<requirement type="laen" quantity="1"/>
</construction>
<construction resource="laenmail" skill="armorer" minskill="9" reqsize="1">
<construction resource="laenmail" skill="armorer" minskill="9">
<requirement type="laen" quantity="3"/>
</construction>
</production>

View File

@ -143,7 +143,7 @@
<resource name="catapultammo">
<item weight="1000">
<construction skill="quarrying" minskill="3" reqsize="1">
<construction skill="quarrying" minskill="3">
<requirement type="stone" quantity="1"/>
</construction>
</item>

View File

@ -7,7 +7,7 @@
<item weight="0" score="30">
<function name="use" value="usepotion"/>
<potion level="1"/>
<construction skill="alchemy" minskill="2" reqsize="1">
<construction skill="alchemy" minskill="2">
<requirement type="h4"/>
<requirement type="h12"/>
</construction>
@ -18,7 +18,7 @@
<item weight="0" score="30">
<function name="use" value="usepotion"/>
<potion level="1"/>
<construction skill="alchemy" minskill="2" reqsize="1">
<construction skill="alchemy" minskill="2">
<requirement type="h6"/>
<requirement type="h13"/>
</construction>
@ -29,7 +29,7 @@
<item weight="0" score="30">
<function name="use" value="usepotion"/>
<potion level="1"/>
<construction skill="alchemy" minskill="2" reqsize="1">
<construction skill="alchemy" minskill="2">
<requirement type="h0"/>
<requirement type="h13"/>
</construction>
@ -40,7 +40,7 @@
<item weight="0" score="30">
<function name="use" value="usepotion"/>
<potion level="1"/>
<construction skill="alchemy" minskill="2" reqsize="1">
<construction skill="alchemy" minskill="2">
<requirement type="h5"/>
<requirement type="h7"/>
</construction>
@ -51,7 +51,7 @@
<item weight="0" score="60">
<function name="use" value="usepotion"/>
<potion level="2"/>
<construction skill="alchemy" minskill="4" reqsize="1">
<construction skill="alchemy" minskill="4">
<requirement type="h14"/>
<requirement type="h16"/>
<requirement type="h1"/>
@ -64,7 +64,7 @@
<item weight="0" score="60">
<function name="use" value="usehealingpotion"/>
<potion level="2"/>
<construction skill="alchemy" minskill="4" reqsize="1">
<construction skill="alchemy" minskill="4">
<requirement type="h19"/>
<requirement type="h4"/>
<requirement type="h1"/>
@ -77,7 +77,7 @@
<item weight="0" score="60">
<function name="use" value="usebloodpotion"/>
<potion level="2"/>
<construction skill="alchemy" minskill="4" reqsize="1">
<construction skill="alchemy" minskill="4">
<requirement type="h17"/>
<requirement type="h13"/>
<requirement type="h4"/>
@ -90,7 +90,7 @@
<item weight="0" score="90">
<function name="use" value="usepotion"/>
<potion level="3"/>
<construction skill="alchemy" minskill="6" reqsize="1">
<construction skill="alchemy" minskill="6">
<requirement type="h9"/>
<requirement type="h15"/>
<requirement type="h12"/>
@ -103,7 +103,7 @@
<item weight="0" score="90">
<function name="useonother" value="usefoolpotion"/>
<potion level="3"/>
<construction skill="alchemy" minskill="6" reqsize="1">
<construction skill="alchemy" minskill="6">
<requirement type="h2"/>
<requirement type="h3"/>
<requirement type="h17"/>
@ -116,7 +116,7 @@
<item weight="0" score="90">
<function name="use" value="usewarmthpotion"/>
<potion level="3"/>
<construction skill="alchemy" minskill="6" reqsize="1">
<construction skill="alchemy" minskill="6">
<requirement type="h18"/>
<requirement type="h3"/>
<requirement type="h16"/>
@ -129,7 +129,7 @@
<item weight="0" score="90">
<function name="use" value="usepotion"/>
<potion level="3"/>
<construction skill="alchemy" minskill="6" reqsize="1">
<construction skill="alchemy" minskill="6">
<requirement type="h4"/>
<requirement type="h11"/>
<requirement type="h10"/>
@ -142,7 +142,7 @@
<item weight="0" score="90">
<function name="use" value="usepotion"/>
<potion level="3"/>
<construction skill="alchemy" minskill="6" reqsize="1">
<construction skill="alchemy" minskill="6">
<requirement type="h19"/>
<requirement type="h14"/>
<requirement type="h0"/>
@ -155,7 +155,7 @@
<item weight="0" score="120">
<function name="use" value="usepotion"/>
<potion level="4"/>
<construction skill="alchemy" minskill="8" reqsize="1">
<construction skill="alchemy" minskill="8">
<requirement type="h14"/>
<requirement type="h20"/>
<requirement type="h15"/>
@ -169,7 +169,7 @@
<item weight="0" score="120">
<function name="use" value="usepotion"/>
<potion level="4"/>
<construction skill="alchemy" minskill="8" reqsize="1">
<construction skill="alchemy" minskill="8">
<requirement type="h5"/>
<requirement type="h9"/>
<requirement type="h12"/>
@ -184,7 +184,7 @@
<item weight="0" score="120">
<function name="use" value="usepotion"/>
<potion level="4"/>
<construction skill="alchemy" minskill="8" reqsize="1">
<construction skill="alchemy" minskill="8">
<requirement type="h6"/>
<requirement type="h12"/>
<requirement type="h18"/>

View File

@ -2906,23 +2906,6 @@
<text locale="en">toad</text>
</string>
<string name="alp">
<text locale="de">Alp</text>
<text locale="en">nightmare</text>
</string>
<string name="alp_p">
<text locale="de">Alps</text>
<text locale="en">nightmaress</text>
</string>
<string name="alp_d">
<text locale="de">Alps</text>
<text locale="en">nightmares</text>
</string>
<string name="alp_x">
<text locale="de">Alp</text>
<text locale="en">nightmare</text>
</string>
<string name="mountainguard">
<text locale="de">Bergwächter</text>
<text locale="en">mountainguard</text>
@ -4357,10 +4340,6 @@
<text locale="de">Traumdeuten</text>
<text locale="en">Mind Probe</text>
</string>
<string name="summon_alp">
<text locale="de">Alp</text>
<text locale="en">Nightmare</text>
</string>
<string name="create_dreameye">
<text locale="de">Erschaffe ein Traumauge</text>
<text locale="en">Create a Visioneye</text>
@ -4485,10 +4464,6 @@
<text locale="de">Heimstein</text>
<text locale="en">Homestone</text>
</string>
<string name="nocostbuilding">
<text locale="de">Mauern der Ewigkeit</text>
<text locale="en">Eternal Walls</text>
</string>
<string name="nodrift">
<text locale="de">Wasserelementar</text>
<text locale="en">Water Elemental</text>
@ -6424,25 +6399,6 @@
target's faction, skills and possessions will no
longer be unknown.</text>
</string>
<string name="summon_alp">
<text locale="de">Der Magier beschwört ein kleines Monster, einen Alp. Dieses bewegt sich
langsam auf sein Opfer zu (das sich an einem beliebigen Ort an der Welt
befinden kann, der Magier oder seine Partei braucht es nicht zu sehen).
Sobald das Opfer erreicht ist, wird es gnadenlos gequält, und nur durch
einen starken Gegenzauber oder den Tod des beschwörenden Magiers kann
das Opfer wieder Frieden finden. Bei der Beschwörung des Alps verliert
der Magier einen kleinen Teil seiner Aura für immer.</text>
<text locale="en">The magician spawns a little monster, a nightmare. The nightmare slowly
approaches its victim (which may be at an arbitrary place in eressea, it
is not needed for the magician or his party to see the victim). As soon
as
the victim is reached the nightmare starts to torment it without mercy,
only a powerfull counter spell or the death of the casting magician can
redeem
the victim. When spawning the nightmare the magician loses a small amount
of
his aura forever.</text>
</string>
<string name="create_dreameye">
<text locale="de">Ein mit diesem Zauber belegtes Drachenauge, welches zum Abendmahle
verzehrt wird, erlaubt es dem Benutzer, in die Träume einer anderen
@ -7354,11 +7310,6 @@
<text locale="en">fire dragon</text>
</string>
<string name="trigger_alp_destroy">
<text locale="de">Ein Alp starb, ohne sein Ziel zu erreichen.</text>
<text locale="en">An alp died before it reached its target.</text>
</string>
<string name="unarmed">
<text locale="de">unbewaffnet</text>
<text locale="en">unarmed</text>
@ -7619,4 +7570,22 @@
</string>
</namespace>
<string name="growl0">
<text locale="de">Groaamm...</text>
</string>
<string name="growl1">
<text locale="de">Tschrrrk...</text>
<text locale="en">Tshrrrk...</text>
</string>
<string name="growl2">
<text locale="de">Schhhhh...</text>
<text locale="en">Shhhhhh...</text>
</string>
<string name="growl3">
<text locale="de">Roaarrr...</text>
</string>
<string name="growl4">
<text locale="de">Chrrr...</text>
</string>
</strings>

View File

@ -65,13 +65,6 @@
<text locale="de">$unit($owner) bittet $unit($unit), $building($building) zu verlassen.</text>
<text locale="en">$unit($owner) asks $unit($unit) to leave $building($building).</text>
</message>
<message name="alp_destroyed" section="events">
<type>
<arg name="region" type="region"/>
</type>
<text locale="de">Ein Alp starb in $region($region), ohne sein Ziel zu erreichen.</text>
<text locale="en">An alp died in $region($region) before reaching its target.</text>
</message>
<message name="nr_claims" section="nr">
<type>
<arg name="items" type="items"/>
@ -1104,13 +1097,6 @@
<text locale="de">"Plötzlich löst sich $building($building) in kleine Traumwolken auf."</text>
<text locale="en">"$building($building) suddenly dissolves into small pink clouds."</text>
</message>
<message name="maintenance_none" section="events">
<type>
<arg name="building" type="building"/>
</type>
<text locale="de">"Für das Gebäude $building($building) konnte die ganze Woche kein Unterhalt bezahlt werden."</text>
<text locale="en">"Upkeep for $building($building) could not be paid all week."</text>
</message>
<message name="buildingcrash" section="events">
<type>
<arg name="region" type="region"/>
@ -1277,11 +1263,6 @@
<text locale="en">"$unit($unit) stumbles upon $localize($location) while exploring the region. Closer inspection reveals a torn old book titled '$localize($book)'. The expansion of knowledge is tremendous."</text>
</message>
<message name="alp_success" section="events">
<text locale="de">"Ein Alp hat sein Opfer gefunden und springt auf den Rücken von $unit($target)!"</text>
<text locale="en">"An evil spirit has found its victim and mounts the back of $unit($target)!"</text>
</message>
<message name="curseinfo::auraboost_0" section="events">
<type>
<arg name="unit" type="unit"/>
@ -1469,16 +1450,6 @@
<text locale="en">"$unit($mage) calls forth a terrible torment over the enemy. The magical rain makes all iron rusty."</text>
</message>
<message name="summon_alp_effect" section="magic">
<type>
<arg name="mage" type="unit"/>
<arg name="alp" type="unit"/>
<arg name="target" type="unit"/>
</type>
<text locale="de">"$unit($mage) beschwört den Alp $unit($alp) für $unit($target)."</text>
<text locale="en">"$unit($mage) summons the alp $unit($alp) for $unit($target)."</text>
</message>
<message name="healing_effect_0" section="magic">
<type>
<arg name="mage" type="unit"/>
@ -7109,13 +7080,6 @@
<text locale="de">"Der Unterhalt von $building($building) konnte nicht gezahlt werden, das Gebäude war diese Woche nicht funktionstüchtig."</text>
<text locale="en">"The upkeep for $building($building) was not paid, the building was not operational this week."</text>
</message>
<message name="maintenance_late" section="errors">
<type>
<arg name="building" type="building"/>
</type>
<text locale="de">"Der Unterhalt von $building($building) konnte nur verspätet gezahlt werden, das Gebäude war diese Woche nicht funktionstüchtig."</text>
<text locale="en">"The upkeep for $building($building) was paid late, the building was not operational this week."</text>
</message>
<message name="income_tradetax" section="economy">
<type>
<arg name="unit" type="unit"/>
@ -7315,8 +7279,8 @@
<type>
<arg name="unit" type="unit"/>
</type>
<text locale="de">"$unit($unit) konnte durch einen Heiltrank überleben."</text>
<text locale="en">"$unit($unit) was saved by a healing potion."</text>
<text locale="de">"Eine Person von $unit($unit) konnte durch einen Heiltrank überleben."</text>
<text locale="en">"A fighter of $unit($unit) was saved by a healing potion."</text>
</message>
<message name="battle::tactics_lost" section="battle">
<type>
@ -8463,4 +8427,15 @@
<text locale="en">"$unit($unit) in $region($region): '$order($command)' - Heroes cannot recruit."</text>
</message>
<message name="dragon_growl" section="mail">
<type>
<arg name="dragon" type="unit"/>
<arg name="number" type="int"/>
<arg name="target" type="region"/>
<arg name="growl" type="string"/>
</type>
<text locale="de">"$unit($dragon): \"$localize($growl) $if($eq($number,1), "Ich rieche", "Wir riechen") etwas in $region($target)\"."</text>
<text locale="en">"$unit($dragon): \"$localize($growl) $if($eq($number,1), "I smell", "We smell") something in $region($target)\"."</text>
</message>
</messages>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="cart">
<item capacity="14000" weight="4000" score="60" vehicle="yes" big="yes">
<construction skill="cartmaking" minskill="1" reqsize="1">
<construction skill="cartmaking" minskill="1">
<requirement type="log" quantity="5"/>
</construction>
</item>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="horse" limited="yes" material="rm_horse">
<item big="yes" weight="5000" score="10" capacity="7000" animal="yes">
<construction skill="training" minskill="1" reqsize="1"/>
<construction skill="training" minskill="1"/>
<function name="give" value="givehorses"/>
</item>
<resourcelimit>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="iron" limited="yes" material="rm_iron">
<item weight="500" score="10">
<construction skill="mining" minskill="1" reqsize="1"/>
<construction skill="mining" minskill="1"/>
</item>
<resourcelimit>
<modifier building="mine" type="skill" value="1"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="laen" limited="yes" material="rm_laen">
<item weight="200" score="100">
<construction skill="mining" minskill="7" reqsize="1"/>
<construction skill="mining" minskill="7"/>
</item>
<resourcelimit>
<modifier type="require" building="mine"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="log" material="rm_tree">
<item weight="500" score="10">
<construction skill="forestry" minskill="1" reqsize="1"/>
<construction skill="forestry" minskill="1"/>
</item>
<resourcelimit>
<modifier building="sawmill" type="skill" value="1"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="mallorn" material="rm_mallorn">
<item weight="500" score="30">
<construction skill="forestry" minskill="2" reqsize="1"/>
<construction skill="forestry" minskill="2"/>
</item>
<resourcelimit>
<modifier building="sawmill" type="skill" value="1"/>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?>
<resource name="mallornseed" limited="yes">
<item weight="10" score="100">
<construction skill="herbalism" minskill="4" reqsize="1"/>
<construction skill="herbalism" minskill="4"/>
</item>
</resource>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?>
<resource name="seed" limited="yes">
<item weight="10" score="50">
<construction skill="herbalism" minskill="3" reqsize="1"/>
<construction skill="herbalism" minskill="3"/>
</item>
</resource>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="stone" limited="yes" material="rm_stone">
<item weight="6000" score="10" big="yes">
<construction skill="quarrying" minskill="1" reqsize="1"/>
<construction skill="quarrying" minskill="1"/>
</item>
<resourcelimit>
<modifier building="quarry" type="skill" value="1"/>

View File

@ -1,39 +1,34 @@
<?xml version="1.0"?>
<ships>
<ship name="trireme" range="7" storm="1.00" damage="1.00" cargo="200000" cptskill="4" minskill="1" sumskill="120" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<construction skill="shipcraft" minskill="4" maxsize="200" reqsize="1">
<construction skill="shipcraft" minskill="4" maxsize="200">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="caravel" range="5" storm="1.00" damage="1.00" cargo="300000" cptskill="3" minskill="1" sumskill="30" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<construction skill="shipcraft" minskill="3" maxsize="250" reqsize="1">
<construction skill="shipcraft" minskill="3" maxsize="250">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="dragonship" range="5" storm="1.00" damage="1.00" cargo="100000" cptskill="2" minskill="1" sumskill="50" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<construction skill="shipcraft" minskill="2" maxsize="100" reqsize="1">
<construction skill="shipcraft" minskill="2" maxsize="100">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="longboat" range="3" storm="1.00" damage="1.00" cargo="50000" cptskill="1" minskill="1" sumskill="10" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<construction skill="shipcraft" minskill="1" maxsize="50" reqsize="1">
<construction skill="shipcraft" minskill="1" maxsize="50">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="balloon" range="2" storm="1.00" damage="1.00" cargo="5000" cptskill="6" minskill="6" sumskill="6" opensea="yes" fly="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="swamp"/>
<coast terrain="desert"/>
@ -44,11 +39,10 @@
<coast terrain="activevolcano"/>
<coast terrain="iceberg_sleep"/>
<coast terrain="iceberg"/>
<construction skill="shipcraft" minskill="100" maxsize="5" reqsize="1"/>
<construction skill="shipcraft" minskill="100" maxsize="5"/>
</ship>
<ship name="boat" range="2" storm="1.00" damage="1.00" cargo="5000" cptskill="1" minskill="1" sumskill="2" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="swamp"/>
<coast terrain="desert"/>
@ -59,13 +53,12 @@
<coast terrain="activevolcano"/>
<coast terrain="iceberg_sleep"/>
<coast terrain="iceberg"/>
<construction skill="shipcraft" minskill="1" maxsize="5" reqsize="1">
<construction skill="shipcraft" minskill="1" maxsize="5">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="flyingcarpet" range="3" storm="1.00" damage="1.00" cargo="50000" cptskill="6" minskill="6" sumskill="10" opensea="yes" fly="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="swamp"/>
<coast terrain="desert"/>
@ -76,7 +69,7 @@
<coast terrain="activevolcano"/>
<coast terrain="iceberg_sleep"/>
<coast terrain="iceberg"/>
<construction skill="shipcraft" minskill="100" maxsize="50" reqsize="1"/>
<construction skill="shipcraft" minskill="100" maxsize="50"/>
</ship>
</ships>

View File

@ -2,7 +2,7 @@
<resource name="axe">
<item weight="200">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="log" quantity="1"/>
<requirement type="iron" quantity="1"/>
</construction>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="bow">
<item weight="100">
<construction skill="weaponsmithing" minskill="2" reqsize="1">
<construction skill="weaponsmithing" minskill="2">
<requirement type="log" quantity="1"/>
</construction>
<weapon pierce="true" missile="true" skill="bow" offmod="0" defmod="0" reload="0">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="catapult">
<item weight="10000" big="yes">
<construction skill="cartmaking" minskill="5" reqsize="1">
<construction skill="cartmaking" minskill="5">
<requirement type="log" quantity="10"/>
</construction>
<weapon siege="true" bash="true" missile="true" skill="catapult" offmod="0" defmod="0" reload="5">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="crossbow">
<item weight="100">
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="log" quantity="1"/>
</construction>
<weapon armorpiercing="true" pierce="true" missile="true" skill="crossbow" offmod="0" defmod="0" reload="2">

View File

@ -2,7 +2,7 @@
<resource name="greatbow">
<item weight="100">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<modifier function="mod_elves_only"/>
<requirement type="mallorn" quantity="2"/>
</construction>

View File

@ -2,7 +2,7 @@
<resource name="greatsword">
<item weight="200" score="30">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="4" reqsize="1">
<construction skill="weaponsmithing" minskill="4">
<requirement type="iron" quantity="2"/>
</construction>
<weapon cut="true" skill="melee" offmod="-1" defmod="-2">

View File

@ -2,7 +2,7 @@
<resource name="halberd">
<item weight="200">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="log" quantity="2"/>
<requirement type="iron" quantity="1"/>
</construction>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="laensword">
<item weight="100" score="400">
<construction skill="weaponsmithing" minskill="8" reqsize="1">
<construction skill="weaponsmithing" minskill="8">
<requirement type="laen" quantity="1"/>
</construction>
<weapon cut="true" skill="melee" offmod="1" defmod="1" magres="0.30">

View File

@ -2,7 +2,7 @@
<resource name="lance">
<item weight="200">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="2" reqsize="1">
<construction skill="weaponsmithing" minskill="2">
<requirement type="log" quantity="2"/>
</construction>
<weapon pierce="true" skill="polearm" offmod="0" defmod="-2">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="mallornbow">
<item weight="100">
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<requirement type="mallorn" quantity="1"/>
</construction>
<weapon pierce="true" missile="true" skill="bow" offmod="0" defmod="0" reload="0" magres="0.15">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="mallorncrossbow">
<item weight="100">
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<requirement type="mallorn" quantity="1"/>
</construction>
<weapon armorpiercing="true" pierce="true" missile="true" skill="crossbow" offmod="0" defmod="0" reload="2" magres="0.15">

View File

@ -2,7 +2,7 @@
<resource name="mallornlance">
<item weight="100">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<requirement type="mallorn" quantity="2"/>
</construction>
<weapon pierce="true" skill="polearm" minskill="5" offmod="0" defmod="0" magres="0.15">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="mallornspear">
<item weight="100">
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<requirement type="mallorn" quantity="1"/>
</construction>
<weapon pierce="true" skill="polearm" minskill="5" offmod="0" defmod="0" magres="0.15">

View File

@ -2,7 +2,7 @@
<resource name="rep_crossbow">
<item weight="100">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<modifier function="mod_dwarves_only"/>
<requirement type="log" quantity="1"/>
<requirement type="iron" quantity="1"/>

View File

@ -2,7 +2,7 @@
<resource name="rustyaxe">
<item weight="200">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="log" quantity="1"/>
<requirement type="iron" quantity="1"/>
</construction>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="rustygreatsword">
<item weight="200" score="20">
<construction skill="weaponsmithing" minskill="4" reqsize="1">
<construction skill="weaponsmithing" minskill="4">
<requirement type="iron" quantity="2"/>
</construction>
<weapon cut="true" skill="melee" offmod="-2" defmod="-3">

View File

@ -2,7 +2,7 @@
<resource name="rustyhalberd">
<item weight="200" score="20">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="iron" quantity="1"/>
<requirement type="log" quantity="1"/>
</construction>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="rustysword">
<item weight="100" score="10">
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="iron" quantity="1"/>
</construction>
<weapon cut="true" skill="melee" offmod="-1" defmod="-1">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="spear">
<item weight="100">
<construction skill="weaponsmithing" minskill="2" reqsize="1">
<construction skill="weaponsmithing" minskill="2">
<requirement type="log" quantity="1"/>
</construction>
<weapon pierce="true" skill="polearm" offmod="0" defmod="0">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="sword">
<item weight="100" score="30">
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="iron" quantity="1"/>
</construction>
<weapon cut="true" skill="melee">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="chainmail">
<item weight="200" score="90">
<construction skill="armorer" minskill="3" reqsize="1">
<construction skill="armorer" minskill="3">
<requirement type="iron" quantity="2"/>
</construction>
<armor ac="2" penalty="0.10" projectile="0.0" magres="0.0"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="laenmail">
<item weight="100" score="1000">
<construction skill="armorer" minskill="9" reqsize="1">
<construction skill="armorer" minskill="9">
<requirement type="laen" quantity="2"/>
</construction>
<armor ac="3" penalty="0.0" projectile="0.10" magres="0.3" laen="yes" />

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="laenshield">
<item weight="0" score="1000">
<construction skill="armorer" minskill="7" reqsize="1">
<construction skill="armorer" minskill="7">
<requirement type="laen" quantity="1"/>
</construction>
<armor ac="1" penalty="-0.10" magres="0.3" laen="yes" shield="yes" />

View File

@ -2,7 +2,7 @@
<resource name="plate">
<item weight="400" score="150">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="armorer" minskill="4" reqsize="1">
<construction skill="armorer" minskill="4">
<requirement type="iron" quantity="4"/>
</construction>
<armor ac="3" penalty="0.15" projectile="0.10" magres="0.0"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="rustychainmail">
<item weight="200" score="30">
<construction skill="armorer" minskill="3" reqsize="1">
<construction skill="armorer" minskill="3">
<requirement type="iron" quantity="3"/>
</construction>
<armor ac="1" penalty="0.20" magres="0.0"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="rustyshield">
<item weight="100" score="10">
<construction skill="armorer" minskill="2" reqsize="1">
<construction skill="armorer" minskill="2">
<requirement type="iron" quantity="1"/>
</construction>
<armor ac="0" penalty="-0.05" magres="0.0" shield="yes"/>

View File

@ -2,7 +2,7 @@
<resource name="scale">
<item weight="300" score="150">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="armorer" minskill="5" reqsize="1">
<construction skill="armorer" minskill="5">
<modifier function="mod_dwarves_only"/>
<requirement type="iron" quantity="2"/>
</construction>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="shield">
<item weight="100" score="30">
<construction skill="armorer" minskill="2" reqsize="1">
<construction skill="armorer" minskill="2">
<requirement type="iron" quantity="1"/>
</construction>
<armor ac="0" penalty="-0.10" magres="0.0" shield="yes"/>

View File

@ -2,7 +2,7 @@
<resource name="towershield">
<item weight="200" score="60">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="armorer" minskill="4" reqsize="1">
<construction skill="armorer" minskill="4">
<modifier function="mod_dwarves_only"/>
<requirement type="iron" quantity="1"/>
</construction>

View File

@ -3,24 +3,24 @@
<xi:include href="config://default/buildings/castle-2.xml" />
<building name="watch" capacity="1" maxsize="10" fort="yes">
<building name="watch" capacity="1" fort="yes">
<function name="name" value="fort_name"/>
<function name="protection" value="building_protection"/>
<function name="taxes" value="lua_building_taxes"/>
<construction skill="building" minskill="1" maxsize="5" reqsize="1" defense_bonus="0">
<construction skill="building" minskill="1" maxsize="5" defense_bonus="0">
<requirement type="log" quantity="1"/>
</construction>
<construction skill="building" minskill="2" maxsize="5" defense_bonus="1">
<requirement type="log" quantity="1"/>
</construction>
<construction skill="building" minskill="2" defense_bonus="2">
<requirement type="log" quantity="1"/>
</construction>
<construction skill="building" minskill="2" maxsize="5" reqsize="1" defense_bonus="1">
<requirement type="log" quantity="1"/>
</construction>
<construction skill="building" minskill="2" reqsize="1" defense_bonus="2">
<requirement type="log" quantity="1"/>
</construction>
</building>
<building name="market" capacity="1" maxsize="10">
<maintenance type="money" amount="200" vital="yes"/>
<construction skill="building" minskill="3" reqsize="1">
<construction skill="building" minskill="3">
<requirement type="log" quantity="1"/>
<requirement type="stone" quantity="1"/>
</construction>

View File

@ -71,7 +71,7 @@
<resource name="charger">
<item big="yes" weight="5000" score="10" capacity="7000" animal="yes">
<construction skill="training" minskill="4" reqsize="1">
<construction skill="training" minskill="4">
<requirement type="money" quantity="200"/>
<requirement type="iron" quantity="1"/>
<requirement type="horse" quantity="1"/>

View File

@ -672,11 +672,6 @@
<skill name="stamina" modifier="-10"/>
<attack type="4" damage="1d2"/>
</race>
<race name="alp" magres="0.950000" maxaura="1.0" regaura="1.0" weight="0" capacity="0" speed="1.500000" hp="20" ac="2" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="2" defensemodifier="20" fly="yes" walk="yes" canlearn="no" canteach="no">
<ai splitsize="1"/>
<function name="name" value="namegeneric"/>
<attack type="1" damage="1d4"/>
</race>
<race name="mountainguard" unarmedguard="yes" magres="0.500000" maxaura="1.0" regaura="0.500000" weight="10000" capacity="2000" speed="0.000000" hp="1000" ac="12" damage="2d40" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="8" cannotmove="yes" canlearn="no" teach="no" noweapons="yes">
<ai splitsize="1"/>
<function name="name" value="namegeneric"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="iron" limited="yes" material="rm_iron">
<item weight="500" score="10">
<construction skill="mining" minskill="1" reqsize="1"/>
<construction skill="mining" minskill="1"/>
</item>
<resourcelimit>
<modifier building="mine" type="skill" value="1"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="stone" limited="yes" material="rm_stone">
<item weight="6000" score="10" big="yes">
<construction skill="quarrying" minskill="1" reqsize="1"/>
<construction skill="quarrying" minskill="1"/>
</item>
<resourcelimit>
<modifier building="quarry" type="skill" value="1"/>

View File

@ -1,7 +1,6 @@
<?xml version="1.0"?>
<ships>
<ship name="canoe" nocoast="true" range="3" fishing="20" storm="1.00" damage="1.00" cabins="2" cargo="2000" cptskill="1" minskill="1" sumskill="2" opensea="no">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<coast terrain="swamp"/>
@ -11,24 +10,22 @@
<coast terrain="glacier"/>
<coast terrain="volcano"/>
<coast terrain="activevolcano"/>
<construction skill="shipcraft" minskill="1" maxsize="3" reqsize="1">
<construction skill="shipcraft" minskill="1" maxsize="3">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="raft" range="1" fishing="20" storm="1.00" damage="1.00" cabins="5" cargo="50000" cptskill="1" minskill="1" sumskill="5" opensea="no">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<coast terrain="swamp"/>
<coast terrain="desert"/>
<construction skill="shipcraft" minskill="1" maxsize="10" reqsize="1">
<construction skill="shipcraft" minskill="1" maxsize="10">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="cutter" range="2" fishing="20" storm="1.00" damage="1.00" cabins="5" cargo="5500" cptskill="2" minskill="1" sumskill="5" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<coast terrain="swamp"/>
@ -38,13 +35,12 @@
<coast terrain="glacier"/>
<coast terrain="volcano"/>
<coast terrain="activevolcano"/>
<construction skill="shipcraft" minskill="2" maxsize="10" reqsize="1">
<construction skill="shipcraft" minskill="2" maxsize="10">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="barge" range="3" fishing="20" storm="1.00" damage="1.00" cabins="11" cargo="5000" cptskill="2" minskill="1" sumskill="5" opensea="no">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<coast terrain="swamp"/>
@ -54,14 +50,13 @@
<coast terrain="glacier"/>
<coast terrain="volcano"/>
<coast terrain="activevolcano"/>
<construction skill="shipcraft" minskill="2" maxsize="10" reqsize="1">
<construction skill="shipcraft" minskill="2" maxsize="10">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="royalbarge" range="5" storm="0.25" damage="1.00" cabins="11" cargo="5000" cptskill="5" minskill="1" sumskill="10" opensea="no">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<coast terrain="swamp"/>
@ -71,17 +66,16 @@
<coast terrain="glacier"/>
<coast terrain="volcano"/>
<coast terrain="activevolcano"/>
<construction skill="shipcraft" minskill="6" maxsize="10" reqsize="1">
<construction skill="shipcraft" minskill="6" maxsize="10">
<requirement type="mallorn" quantity="1"/>
<requirement type="money" quantity="100"/>
</construction>
</ship>
<ship name="catamaran" range="7" storm="0.25" damage="1.00" cabins="22" cargo="10000" cptskill="7" minskill="1" sumskill="20" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<construction skill="shipcraft" minskill="8" maxsize="30" reqsize="1">
<construction skill="shipcraft" minskill="8" maxsize="30">
<requirement type="mallorn" quantity="1"/>
<requirement type="money" quantity="100"/>
</construction>
@ -89,19 +83,17 @@
<ship name="cog" range="4" storm="0.50" damage="1.00" cabins="50" cargo="200000" cptskill="4" minskill="1" sumskill="20" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<construction skill="shipcraft" minskill="4" maxsize="100" reqsize="1">
<construction skill="shipcraft" minskill="4" maxsize="100">
<requirement type="log" quantity="1"/>
</construction>
</ship>
<ship name="caravel" range="4" storm="0.50" damage="1.00" cabins="150" cargo="600000" cptskill="6" minskill="1" sumskill="30" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<construction skill="shipcraft" minskill="6" maxsize="300" reqsize="1">
<construction skill="shipcraft" minskill="6" maxsize="300">
<requirement type="log" quantity="1"/>
</construction>
</ship>
@ -109,10 +101,9 @@
<ship name="frigate" range="4" storm="1.00" damage="1.00" cabins="110" cargo="100000" cptskill="5" minskill="1" sumskill="40" opensea="yes">
<modifier type="defense" value="+2"/>
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<construction skill="shipcraft" minskill="5" maxsize="100" reqsize="1">
<construction skill="shipcraft" minskill="5" maxsize="100">
<requirement type="log" quantity="1"/>
<requirement type="money" quantity="10"/>
</construction>
@ -120,10 +111,9 @@
<ship name="galleon" range="4" storm="1.00" damage="1.00" cabins="310" cargo="300000" cptskill="7" minskill="1" sumskill="60" opensea="yes">
<modifier type="defense" value="+2"/>
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<construction skill="shipcraft" minskill="7" maxsize="300" reqsize="1">
<construction skill="shipcraft" minskill="7" maxsize="300">
<requirement type="log" quantity="1"/>
<requirement type="money" quantity="10"/>
</construction>
@ -133,10 +123,9 @@
<ship name="dragonship" range="6" storm="1.00" damage="1.00" cabins="110" cargo="50000" cptskill="5" minskill="1" sumskill="60" opensea="yes">
<modifier type="attack" value="+1"/>
<modifier type="tactics" factor="2.00"/>
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<construction skill="shipcraft" minskill="5" maxsize="100" reqsize="1">
<construction skill="shipcraft" minskill="5" maxsize="100">
<requirement type="log" quantity="1"/>
<requirement type="money" quantity="10"/>
</construction>
@ -145,10 +134,9 @@
<ship name="trireme" range="6" storm="1.00" damage="1.00" cabins="310" cargo="150000" cptskill="7" minskill="1" sumskill="90" opensea="yes">
<modifier type="attack" value="+1"/>
<modifier type="tactics" factor="2.00"/>
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="packice"/>
<construction skill="shipcraft" minskill="7" maxsize="300" reqsize="1">
<construction skill="shipcraft" minskill="7" maxsize="300">
<requirement type="log" quantity="1"/>
<requirement type="money" quantity="10"/>
</construction>

View File

@ -207,153 +207,69 @@
</namespace>
<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 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">
<text locale="de">Durch dieses uralte Tanzritual ruft der Zauberkundige
die Kräfte des Lebens und der Fruchtbarkeit an. Die darauf folgenden
Regenfälle begünstigen das Wachstum und erhöhen die Ernteerträge
einiger Bauern der Region bis der Regen wieder nachlässt.</text>
<text locale="en">This ancient rite calls upon the
forces of life and fertility. For the next few weeks,
the peasant's harvest will be extraordinary good.
(OBS: this spell has been changed and needs a new translation).</text>
<text locale="de">Durch dieses uralte Tanzritual ruft der Zauberkundige die Kräfte des Lebens und der Fruchtbarkeit an. Die darauf folgenden Regenfälle begünstigen das Wachstum und erhöhen die Ernteerträge einiger Bauern der Region bis der Regen wieder nachlässt.</text>
<text locale="en">This ancient rite calls upon the forces of life and fertility. For the next few weeks, the peasants' harvest will be extraordinary good.</text>
</string>
<string name="blessedharvest">
<text locale="de">Für dieses Ernteritual sendet der Druide seine arkane Energie entlang
der astralen Kraftlinien der gesamten Umgebung, um selbst weit entfernte
Naturgeister zu erreichen. Die Beschwörung dieser Naturgeister ist eine
hohe Kunst, die höchste Konzentration und vor allem viel Erfahrung
erfordert. Die Bauern werden nach und nach von den besseren Ernten
profitieren und ihre Ersparnisse steigern können.</text>
<text locale="en">This ritual increases the output of the local farms.
Peasants in the region produce an extra silverpiece. The stronger the
druid's spell is, the longer the effect will last.
(OBS: this spell has been changed and needs a new translation).</text>
<text locale="de">Für dieses Ernteritual sendet der Druide seine arkane Energie entlang der astralen Kraftlinien der gesamten Umgebung, um selbst weit entfernte Naturgeister zu erreichen. Die Beschwörung dieser Naturgeister ist eine hohe Kunst, die höchste Konzentration und vor allem viel Erfahrung erfordert. Die Bauern werden nach und nach von den besseren Ernten profitieren und ihre Ersparnisse steigern können.</text>
<text locale="en">This ritual not only increases the output of the local farms. Activating the astral ley lines, the druid is capable of activating even the nature spirits far away. Peasants' harvest in the affected regions will be extraordinarily good for a few weeks. </text>
</string>
<string name="earn_silver#draig">
<text locale="de">In den dunkleren Gassen gibt es sie,
die Flüche und Verhexungen auf Bestellung. Aber
auch Gegenzauber hat der Jünger des Draigs
natürlich im Angebot. Ob nun der Sohn des
Nachbarn in einen Liebesbann gezogen werden soll
oder die Nebenbuhlerin Pickel und Warzen
bekommen soll, niemand gibt gerne zu, zu solchen
Mitteln gegriffen zu haben. Für diese
Dienstleistung streicht der Magier 25 Silber pro
Stufe ein.</text>
<text locale="en">In the dark alleys you can find those
who sell curses and hexes on demand - but you
can buy the apropriate counterspells from the
followers of Draig as well. May it be a love
spell for the son of a neighbour or a wart in
the face of a rival. For offering these
services, the sorcerer charges 25 silver pieces.
per level.</text>
<text locale="de">In den dunkleren Gassen gibt es sie, die Flüche und Verhexungen auf Bestellung. Aber auch Gegenzauber hat der Jünger des Draigs natürlich im Angebot. Ob nun der Sohn des Nachbarn in einen Liebesbann gezogen werden soll oder die Nebenbuhlerin Pickel und Warzen bekommen soll: niemand gibt gerne zu, zu solchen Mitteln gegriffen zu haben. Für diese Dienstleistung streicht der Magier 25 Silber pro Stufe ein.</text>
<text locale="en">In the dark alleys you can find those who sell curses and hexes on demand -- but you can buy the apropriate counterspells from the followers of Draig as well. May it be a love spell for the son of a neighbour or a wart in the face of a rival. For offering these services, the sorcerer charges 25 silver pieces per level.</text>
</string>
<string name="earn_silver#illaun">
<text locale="de">Niemand kann so gut die Träume deuten
wie ein Magier des Illaun. Auch die Kunst der
Wahrsagerei, des Kartenlegens und des Handlesens
sind ihm geläufig. Dafür zahlen ihm die Bauern
25 Silber pro Stufe.</text>
<text locale="en">No one can read dreams as well as the
mages of Illaun. Furthermore, they are also
familiar with all other common means of
foretelling the future like crystal balls, tarot
cards or palms. A mentalist can earn 25 silver
pieces per level and week for offering these
services to peasants.</text>
<text locale="de">Niemand kann so gut die Träume deuten wie ein Magier des Illaun. Auch die Kunst der Wahrsagerei, des Kartenlegens und des Handlesens sind ihm geläufig. Dafür zahlen ihm die Bauern 25 Silber pro Stufe.</text>
<text locale="en">No one can read dreams as well as the mages of Illaun. Furthermore, they are also familiar with all other common means of foretelling the future like crystal balls, tarot cards or palms. A mentalist can earn 25 silver pieces per level and week for offering these services to peasants.</text>
</string>
<string name="earn_silver#tybied">
<text locale="de">Wenn einem der Alchemist nicht weiterhelfen kann, geht man zu dem
gelehrten Tybiedmagier. Seine Tränke und Tinkturen helfen gegen
alles, was man sonst nicht bekommen kann. Ob nun die kryptische
Formel unter dem Holzschuh des untreuen Ehemannes wirklich geholfen
hat - nun, der des Lesens nicht mächtige Bauer wird es nie wissen.
Dem Magier hilft es auf jeden Fall... beim Füllen seines
Geldbeutels. 25 Silber pro Stufe lassen sich so in einer Woche
verdienen.</text>
<text locale="en">If the local alchemist could not help you, you should visit a
scholar of Tybied. His potions and tinctures may help when nothing
else does. If the cryptic formula under the wooden shoes of the
unfaithful husband really helped? - well, the peasant, who isn't
capable of reading, will never know. At least it helped the magician...
to fill his purse. In one week he can earn 25 silver per level that
way.</text>
<text locale="de">Wenn einem der Alchemist nicht weiterhelfen kann, geht man zu dem gelehrten Tybiedmagier. Seine Tränke und Tinkturen helfen gegen alles, was man sonst nicht bekommen kann. Ob nun die kryptische Formel unter dem Holzschuh des untreuen Ehemannes wirklich geholfen hat -- nun, der des Lesens nicht mächtige Bauer wird es nie wissen. Dem Magier hilft es auf jeden Fall... beim Füllen seines Geldbeutels. 25 Silber pro Stufe lassen sich so in einer Woche verdienen.</text>
<text locale="en">If the local alchemist could not help you, you should visit a scholar of Tybied. His potions and tinctures may help when nothing else does. If the cryptic formula under the wooden shoes of the unfaithful husband really helped? - Well, the peasant, who isn't capable of reading, will never know. At least it helped the magician... to fill his purse. In one week he can earn 25 silver per level that way.</text>
</string>
<string name="earn_silver#cerddor">
<text locale="de">Cerddormagier sind _die_ Gaukler unter
den Magiern, sie lieben es das Volk zu unterhalten und
im Mittelpunkt zu stehen. Schon Anfänger lernen die
kleinen Kunststücke und magischen Tricks, mit denen man
das Volk locken und verführen kann, den Geldbeutel ganz
weit zu öffnen, und am Ende der Woche wird der Gaukler
25 Silber pro Stufe verdient haben.</text>
<text locale="en">The mages of Cerddor truly are the
bards of the wizards; they love to use their sorcery to
entertain the crowds and to be the center of attention.
Even the apprentices study those little magic tricks,
which attract and fascinate the people and thus ensnare
them into leaving a few coins or more for the artist. By
the end of the week, the bard will have earned 25 silver
per level. </text>
<text locale="de">Cerddormagier sind _die_ Gaukler unter den Magiern; sie lieben es, das Volk zu unterhalten und im Mittelpunkt zu stehen. Schon Anfänger lernen die kleinen Kunststücke und magischen Tricks, mit denen man das Volk locken und verführen kann, den Geldbeutel ganz weit zu öffnen, und am Ende der Woche wird der Gaukler 25 Silber pro Stufe verdient haben.</text>
<text locale="en">The mages of Cerddor truly are the bards of the wizards; they love to use their sorcery to entertain the crowds and to be the center of attention. Even the apprentices study those little magic tricks, which attract and fascinate the people and thus ensnare them into leaving a few coins or more for the artist. By the end of the week, the bard will have earned 25 silver per level. </text>
</string>
<string name="earn_silver#gwyrrd">
<text locale="de">Die Fähigkeiten der Gwyrrd-Magier in
der Viehzucht und Heilung sind bei den Bauern sehr
begehrt. Gerade auf Märkten sind ihre Dienste häufig sehr
gefragt. Manch einer mag auch sein Talent dazu nutzen,
ein Tier für einen besseren Preis zu verkaufen. Pro
Stufe kann der Magier so 25 Silber verdienen.</text>
<text locale="en">The abilities of the mages of Gwyrrd
concerning the breeding and healing of cattle are highly
appreciated among the peasants. Especially at the
markets, their services are demanded frequently. Some of
them also use their talents to sell an animal at a
higher price. A magician can earn 25 silver pieces per level
in this way.</text>
<text locale="de">Die Fähigkeiten der Gwyrrd-Magier in der Viehzucht und Heilung sind bei den Bauern sehr begehrt. Gerade auf Märkten sind ihre Dienste häufig sehr gefragt. Manch einer mag auch sein Talent dazu nutzen, ein Tier für einen besseren Preis zu verkaufen. Pro Stufe kann der Magier so 25 Silber verdienen.</text>
<text locale="en">The abilities of the mages of Gwyrrd concerning the breeding and healing of cattle are highly appreciated among the peasants. Especially at the markets their services are demanded frequently. Some of them also use their talents to sell an animal at a higher price. A magician can earn 25 silver pieces per level in this way.</text>
</string>
<string name="create_potion_p0">
<text locale="en">Time is one of the first mysteries every magician tries to solve. If he succeeds, he can focus all his energies on his magical studies as the ways between dormatory, library and magician tower now pass much faster. To keep his heart in tune the magician uses a special self made tey. Some mages even share it with up to 10 people</text>
<text locale="de">Die Zeit ist eines der ersten Geheimnisse, die jeder Magier zu erkunden versucht. Gelingt ihm dies, kann er alle seine Energie auf das Studium der Magie verwenden, die Wege zwischen Dormitorium, Bibliothek und Magierturm schafft er nun viel schneller. Um sein Herz im Takt zu halten verwendet er einen speziellen selbstgemachten Tee. Manche Magier teilen diesen Tee mit bis zu 10 Personen. </text>
<text locale="en">Time is one of the first mysteries every magician tries to solve. If they succeed, they can focus all their energies on their magical studies as the ways between dormatory, library and magician tower now pass much faster. To keep their heart in tune the magicians use a special self-made tea. Some mages even share it with up to 10 people</text>
<text locale="de">Die Zeit ist eines der ersten Geheimnisse, die jeder Magier zu erkunden versucht. Gelingt ihm dies, kann er alle seine Energie auf das Studium der Magie verwenden; die Wege zwischen Dormitorium, Bibliothek und Magierturm schafft er nun viel schneller. Um sein Herz im Takt zu halten, verwendet er einen speziellen selbstgemachten Tee. Manche Magier teilen diesen Tee mit bis zu 10 Personen. </text>
</string>
<string name="create_potion_p2">
<text locale="en">One of the most strange spells enables the magician to withdraw a little life energy from his surroundings to produce the so called water of life. The juice of some selected herbs is used to conserve the energies of life. As the magician is protected by his magical abilities, he is the only one who can touch the juice without taking damage. This is necessary because the juice must be carried around from place to place to avoid damaging one region by taking too much energy at once.</text>
<text locale="de">In einem der seltsamsten Zauber kann der Magier seiner Umgebung ein klein wenig der Lebensenergie entziehen um das sogenannte Wasser des Lebens herstellen. Als Basis dient ihm hierbei der Saft aus einigen ausgesuchten Kräutern, welcher die Lebensenergie speichern kann. Da der Magier aufgrund seiner magischen Fähigkeiten immun ist, ist er der einzige, der den Saft berühren kann, ohne Schaden zu nehmen. Sodenn muß er diesen eine Woche lang von Ort zu Ort tragen, damit er sich mit Lebensenergie vollsaugt, ohne einem einzelnen Ort soviel zu entfernen, daß er Schaden nimmt. </text>
<text locale="en">One of the most strange spells enables the magician to withdraw a little life energy from their surroundings to produce the so called water of life. The juice of some selected herbs is used to conserve the energies of life. As the magician is protected by his magical abilities, he is the only one who can touch the juice without taking damage. This is necessary because the juice must be carried around from place to place to avoid damaging one region by taking too much energy at once.</text>
<text locale="de">In einem der seltsamsten Zauber kann der Magier seiner Umgebung ein klein wenig der Lebensenergie entziehen um das sogenannte Wasser des Lebens herstellen. Als Basis dient ihm hierbei der Saft aus einigen ausgesuchten Kräutern, welcher die Lebensenergie speichern kann. Da der Magier aufgrund seiner magischen Fähigkeiten immun ist, ist er der einzige, der den Saft berühren kann, ohne Schaden zu nehmen. Sodann muss er diesen eine Woche lang von Ort zu Ort tragen, damit er sich mit Lebensenergie vollsaugt, ohne einem einzelnen Ort soviel zu entfernen, dass er Schaden nimmt. </text>
</string>
<string name="create_potion_p3">
<text locale="en">Busybeer is another application for the knowledge about time a magician accumulates. Even though manual labour is only seldom done by mages, they still show interest in increasing the efficiency of their minions that do this work for them. Mornac the wise was the first to discover how to produce a potion that would enable 10 minions to do the work of 20, thus freeing the other 10 for different experiments.</text>
<text locale="de">Ein weiteres Anwendungsgebiet des Wissens über die Zeit welches ein Magier ansammelt stellt der Schaffenstrunk dar. Auch wenn körperliche Arbeiten eher selten von Magiern ausgeführt werden, so haben diese doch ein Interesse daran, die Effizienz ihrer Untergebenen bei solchen Arbeiten zu steigern. Mornac der Weise war der erste, der entdeckte, daß man einen Trunk herstellen kann, durch den 10 Untergebene die arbeit von 20 erledigen können, wodurch 10 für andere Experimente weiterverwendet werden konnten. </text>
<text locale="en">Busybeer is another application for the knowledge about time a magician accumulates. Even though manual labour is only seldom done by mages, they still show interest in increasing the efficiency of their minions that do this work for them. Mornac the Wise was the first to discover how to produce a potion that would enable 10 minions to do the work of 20, thus freeing the other 10 for different experiments.</text>
<text locale="de">Ein weiteres Anwendungsgebiet des Wissens über die Zeit, welches ein Magier ansammelt, stellt der Schaffenstrunk dar. Auch wenn körperliche Arbeiten eher selten von Magiern ausgeführt werden, so haben diese doch ein Interesse daran, die Effizienz ihrer Untergebenen bei solchen Arbeiten zu steigern. Mornac der Weise war der erste, der entdeckte, dass man einen Trunk herstellen kann, durch den 10 Untergebene die Arbeit von 20 erledigen, wodurch der Rest für andere Experimente eingesetzt werden kann. </text>
</string>
<string name="create_potion_ointment">
<text locale="en">In the aftermath of battle it is vital to heal your own troops. This can be done by a healer as well as by a magician. In contrast to a healer, the magician can fullfill his treatment already before the battle by binding his magical powers into a potent salve. This salve can be stored and only needs to be applied to the wounds after the battle. </text>
<text locale="de">Nach einem harten Kampf sollte man sich heilen lassen. Diese Möglichkeit bietet der Magier ebenso wie der Heiler. Im Gegensatz zum Heiler ist der Magier jedoch in der Lage, seine Behandlung bereits vor dem Kampf durchzuführen, indem er seine Heilkräfte in eine magische Salbe bindet, welche gelagert werden kann und nach dem Kampf nur aufgetragen werden muß.</text>
<text locale="en">In the aftermath of battle it is vital to heal your own troops. This can be done by a healer as well as by a magician. In contrast to a healer, the magician can fullfill this treatment already before the battle by binding magical powers into a potent salve. This salve can be stored and only needs to be applied to the wounds after the battle. </text>
<text locale="de">Nach einem harten Kampf sollte man sich heilen lassen. Diese Möglichkeit bietet der Magier ebenso wie der Heiler. Im Gegensatz zum Heiler ist der Magier jedoch in der Lage, seine Behandlung bereits vor dem Kampf durchzuführen, indem er seine Heilkräfte in eine magische Salbe bindet, welche gelagert werden kann und nach dem Kampf nur aufgetragen werden muss.</text>
</string>
<string name="create_potion_peasantblood">
<text locale="en">One of the most dangerous and best guarded secrets of all mages is the knowledge about the power of death. Even though most of them would not openly admit it, and it is at least partially forbidden in most countries, each of them studies death sooner or later. When they do, they quickly find out that there is another plane of existance, the home of the demons. Only blood can quelch the thirst of those, when they switch from their home to our world. But experienced mages will find out that the demons bloodwine can be deluted when apropiate herbs are included, making it enough for 100 instead of 10 demons. As the demons may not know about that, the magician has to secretly sacrifice one of his freed minions.</text>
<text locale="de">Zu den gefährlichsten und geheimsten Wissen der Magier zählt das Wissen über die Macht des Todes. Auch wenn die meisten es nicht zugeben, so fasziniert dieses Thema jeden Magier. Früher oder später beschäftigen sich alle mit diesem, teilweise verbotenen, Gebiet. Sodann werden sie feststellen, das es noch eine weitere Ebene der Existenz gibt, in der die Dämonen beheimatet sind. Nur Blut allein vermag den Hunger dieser Wesen zu befriedigen, wenn sie ihre Ebene verlassen und unsere betreten. Erfahrene Magier werden jedoch feststellen, dass man den Blutwein, den die Dämonen zu sich nehmen strecken kann, so daß davon 100 anstatt nur 10 Dämonen satt werden. Da die Dämonen davon jedoch nichts wissen dürfen, muß der Magier selbst klammheimlich einen seiner urplötzlich verfügbar gewordenen Untergebenen opfern. </text>
<text locale="en">One of the most dangerous and best guarded secrets of all mages is the knowledge about the power of death. Even though most of them would not openly admit it, and it is at least partially forbidden in most countries, each of them studies death sooner or later. When they do, they quickly find out that there is another plane of existance: the home of the demons. Only blood can quelch the thirst of those, when they switch from their home to our world. But experienced mages will find out that the demons bloodwine can be deluted when appropiate herbs are included, making it enough for 100 instead of 10 demons. As the demons may not know about that, the magician has to secretly sacrifice one of his freed minions.</text>
<text locale="de">Zu dem gefährlichsten und geheimsten Wissen der Magier zählt das Wissen über die Macht des Todes. Auch wenn die meisten es nicht zugeben, so fasziniert dieses Thema jeden Magier. Früher oder später beschäftigen sich alle mit diesem teilweise verbotenen Gebiet. Sodann werden sie feststellen, dass es noch eine weitere Ebene der Existenz gibt, in der die Dämonen beheimatet sind. Nur Blut allein vermag den Hunger dieser Wesen zu befriedigen, wenn sie ihre Ebene verlassen und unsere betreten. Erfahrene Magier werden jedoch feststellen, dass man den Blutwein, den die Dämonen zu sich nehmen, strecken kann, so dass davon 100 anstatt nur 10 Dämonen satt werden. Da die Dämonen davon jedoch nichts wissen dürfen, muss der Magier selbst klammheimlich einen seiner urplötzlich verfügbar gewordenen Untergebenen opfern. </text>
</string>
<string name="create_potion_p9">
<text locale="en">Even though mages live in strict cellibate they know a lot about creating certain longings. Peasants keep asking them for this love potion or that. But the penality for bewitching a peasant is death, so the mages offer their services only to farmers for their breeding stock. In an elaborate ritual, which only serves to hide the simplicity of the procedure, the magician draws the fluids from certains plants. while doing so, he calls upon the spirits of fertility which of course only listen when he talkes to them. Now the farmer knows that any attempt to draw the fluids himself will only result in a useless waste of resorces. Finally, the magician hands the vial with the fluids to the farmer, who pours it into his horses drinking water.</text>
<text locale="de">Obwohl für Magier das Gebiet der Liebe Tabu ist und sie im strengen Zölibat leben, haben sie ein großes Wissen darüber, wie man gewisse Bedürfnisse weckt, weshalb sie immer wieder von Dorfbewohnerinnen und Dorfbewohnern nach entsprechenden Zaubern gefragt werden. Da die Verzauberung eines Bewohners jedoch streng verboten ist, bieten sie ihre Dienste nur für die Züchter an. In einem Aufwendigen Ritual, welches jedoch nur dazu dient zu verschleiern, wie einfach dies eigentlich ist, vermischt der Magier vor den Augen des Züchters einige Pflanzensäfte. Dabei ruft er die Geister an die dem Pferdezüchter das Glück bescheren sollen, um klarzumachen, das diese nur mit ihm sprechen und jeglicher Versuch des Züchters, selbst die Kräuter zu mischen nur eine unbrauchbare Pampe produzieren würde. Anschließend überreicht der Magier dem Züchter eine Phiole, die dieser in die Tränke seiner Pferde entleeren muß.</text>
<text locale="en">Even though mages live in strict celibacy, they know a lot about creating certain longings. Peasants keep asking them for this love potion or that. But the penality for bewitching a peasant is death, so the mages offer their services only to farmers for their breeding stock. In an elaborate ritual, which only serves to hide the simplicity of the procedure, the magician draws the fluids from certains plants. While doing so he calls upon the spirits of fertility, which of course only listen when he talkes to them. Now the farmer knows that any attempt to draw the fluids himself will only result in a useless waste of resources. Finally, the magician hands the vial with the fluids to the farmer, who pours it into his horses' drinking water.</text>
<text locale="de">Obwohl für Magier das Gebiet der Liebe tabu ist und sie im strengen Zölibat leben, haben sie ein großes Wissen darüber, wie man gewisse Bedürfnisse weckt, weshalb sie immer wieder von Dorfbewohnerinnen und Dorfbewohnern nach entsprechenden Zaubern gefragt werden. Da die Verzauberung eines Bewohners jedoch streng verboten ist, bieten sie ihre Dienste nur für die Züchter an. In einem aufwendigen Ritual, welches jedoch nur dazu dient zu verschleiern, wie einfach dies eigentlich ist, vermischt der Magier vor den Augen des Züchters einige Pflanzensäfte. Dabei ruft er die Geister an, die dem Pferdezüchter das Glück bescheren sollen, um klarzumachen, das diese nur mit ihm sprechen und jeglicher Versuch des Züchters, selbst die Kräuter zu mischen, nur eine unbrauchbare Pampe produzieren würde. Anschließend überreicht der Magier dem Züchter eine Phiole, die dieser in die Tränke seiner Pferde entleeren muss.</text>
</string>
<string name="create_potion_p13">
<text locale="en">Just like with the knowledge about death, the peasants feel uncomfortable with the knowledge about monsters. A few warriors though, who have already faced these creatures in combat, foud that the monsters blood had en invigourating effect on them. There is talk about some warriors, who bathed in the blood of the slain monsters to take up their strenght. But this effect ends soon, and only occurs with fresh blood. As no one has time to quickly slay a wyrm before attacking his neighbors, a way had to be found to make the effect last longer. After lots of experiments that cost the life of lots of good warriors who had to constantly bring in fresh dragon blood, Manasouf the black finally found a way. Originally a closely guarded secret, the recipe is now knows in all lands. First, the hardened dragon blood needs to be melted in hot tin. After that, the magician binds the spirit of the dragon to its blood once again. It can not fnd eternal rest until the last bit of blood has been used. </text>
<text locale="de">Ebenso wie das Wissen über den Tod ist das Wissen über gewisse Monster bei der abergläubigen Bevölkerung nicht gerne gesehen. Einige wenige Krieger jedoch, die diesen Kreaturen schon mal im Kampf gegenüberstanden haben entdeckt, daß deren Blut eine belebende Wirkung auf sie hatte. So solle es schon Kriger gegeben haben, die im Blut der erschlagenen Monster badeten, um deren Stärke in sich aufzunehmen. Diese Wirkung verfliegt jedoch rasch, und wirkt nur bei frischen Blut. Da niemand vor dem Kampf gegen seinen Nachbarn die Zeit hat, schnell noch einen Wyrm zu erschlagen musste ein Weg gefunden werden, die Wirkung haltbar zu machen. Manasouf dem schwarzen gelang dies nach zahlreichen Experimenten, die das Leben vieler guter Männer kosteten, welche ständig neues Drachenblut für seine Versuche beschaffen mussten. Ursprünglich ein streng gehütetes Geheimnis, ist das Rezept inzwischen im ganzen Land bekannt. Zunächst muß geronnene Drachenblut muß in einem Tiegel wieder verflüssigt werden. Anschließend wird der Geist des erschlagenen Drachen in der Geisterebene wieder an sein Blut gebunden, und kann solange nicht in frieden ruhen, bis das letzte bisschen seines Blutes verbraucht wurde.</text>
<text locale="en">Just like with the knowledge about death, the peasants feel uncomfortable with the knowledge about monsters. A few warriors though, who have already faced these creatures in combat, found that the monsters blood had an invigourating effect on them. There is talk about some warriors who bathed in the blood of the slain monsters to take up their strength. But this effect ends soon, and only occurs with fresh blood. As no one has time to quickly slay a wyrm before attacking their neighbors, a way had to be found to make the effect last longer. After lots of experiments that cost the life of lots of good warriors who had to constantly bring in fresh dragon blood, Manasouf the black finally found a way. Originally a closely guarded secret, the recipe is now known in all lands. First, the hardened dragon blood needs to be melted in hot tin. After that, the magician binds the spirit of the dragon to its blood once again. It can not find eternal rest until the last bit of blood has been used. </text>
<text locale="de">Ebenso wie das Wissen über den Tod ist das Wissen über gewisse Monster bei der abergläubigen Bevölkerung nicht gerne gesehen. Einige wenige Krieger jedoch, die diesen Kreaturen schon mal im Kampf gegenüberstanden, haben entdeckt, dass deren Blut eine belebende Wirkung auf sie hatte. So soll es schon Krieger gegeben haben, die im Blut der erschlagenen Monster badeten, um deren Stärke in sich aufzunehmen. Diese Wirkung verfliegt jedoch rasch und wirkt nur bei frischen Blut. Da niemand vor dem Kampf gegen seinen Nachbarn die Zeit hat, schnell noch einen Wyrm zu erschlagen, musste ein Weg gefunden werden, die Wirkung haltbar zu machen. Manasouf dem Schwarzen gelang dies nach zahlreichen Experimenten, die das Leben vieler guter Männer kosteten, welche ständig neues Drachenblut für seine Versuche beschaffen mussten. Ursprünglich ein streng gehütetes Geheimnis ist das Rezept inzwischen im ganzen Land bekannt. Zunächst muss geronnenes Drachenblut in heißem Zinn verflüssigt werden. Anschließend wird der Geist des erschlagenen Drachen in der Geisterebene wieder an sein Blut gebunden und kann so lange nicht in Frieden ruhen, bis das letzte bisschen seines Blutes verbraucht wurde.</text>
</string>
<string name="create_potion_p14">
<text locale="en">Some mages research deth's secrets until they can bring the dead back to life. But those who are brought back are often only shadows of ther former self and turn against their erstwhile friends. But those mages that study life and its iteraction with death find a possibility, to bring the deceased back as their original selves. A drawback is that this is only possible in the very first minutes after the death. As even mages can not be everywhere at the same time, a way had to be found to give this ability to helpers. All healers who tried to learn this from the mages failed, though, until one of those healers was backstabbingly killed. In the moment of his death he used the knowledge gained and was able to have his murderer executed the following day. The potion he designed has to be blessed by a magician before usage at any given time. This potion gives 4 people (or 1 person 4 times) a 50% chance to survive an otherwise deadly wound. It is used automatically by the victom.</text>
<text locale="de">Manche Magier erforschen den Tod, bis sie verstorbene wieder ins Leben zurück bringen können. Diese sind jedoch meist bösartig und nur noch Schatten ihres früheren selbst. Diejenigen jedoch, die sich intensiv mit dem Leben und seiner Kombination mit dem Tod beschäftigen finden eine Möglichkeit, verstorbene in ihrer wahren Gestallt zurück zu rufen. Dies ist allerdings nur wenige Minuten nach dem Tod möglich. Da selbst Magier nicht überall gleichzeitig sein können, musste ein Weg gefunden werden, diese Fähigkeit auf andere zu übertragen. Alle Versuche, dies feldschern beizubringen scheiterten jedoch, bis einer dieser Felschner von einem Widersacher hinterrücks ermordet wurde. Im Moment seines Todes wandte er sein erworbenes Wissen an und konnte tags darauf den Übeltäter wegen Mordes hinrichten lassen. Der von ihm entwickelte magische Trank muß jedoch von einem der Magie des Lebens kundigen gesegnet werden, um seine volle Wirkung zu entfalten. Ein solcher Trank gibt vier Männern (oder einem Mann vier mal) im Kampf eine Chance von 50%, sonst tödliche Wunden zu überleben. Der Trank wird von ihnen automatisch bei Verletzung angewandt.</text>
<text locale="en">Some mages research death's secrets until they can bring the dead back to life. But those who are brought back are often only shadows of ther former self and turn against their erstwhile friends. But those mages that study life and its iteraction with death find a possibility to bring the deceased back as their original selves. A drawback is that this is only possible in the very first minutes after death. As even mages can not be everywhere at the same time, a way had to be found to give this ability to helpers. All healers who tried to learn this from the mages failed, though, until one of those healers was backstabbingly killed. In the moment of his death he used the knowledge gained and was able to have his murderer executed the following day. The potion he designed has to be blessed by a magician before usage at any given time. This potion gives four people (or one person four times) a 50% chance to survive an otherwise deadly wound. It is used automatically by the victom.</text>
<text locale="de">Manche Magier erforschen den Tod, bis sie Verstorbene wieder ins Leben zurück bringen können. Diese sind jedoch meist bösartig und nur noch Schatten ihres früheren Selbst. Diejenigen jedoch, die sich intensiv mit dem Leben und seiner Kombination mit dem Tod beschäftigen, finden eine Möglichkeit, Verstorbene in ihrer wahren Gestalt zurück zu rufen. Dies ist allerdings nur wenige Minuten nach dem Tod möglich. Da selbst Magier nicht überall gleichzeitig sein können, musste ein Weg gefunden werden, diese Fähigkeit auf andere zu übertragen. Alle Versuche, dies Feldschern beizubringen, scheiterten jedoch, bis einer dieser Feldscher von einem Widersacher hinterrücks ermordet wurde. Im Moment seines Todes wandte er sein erworbenes Wissen an und konnte tags darauf den Übeltäter wegen Mordes hinrichten lassen. Der von ihm entwickelte magische Trank muss jedoch von einem der Magie des Lebens Kundigen gesegnet werden, um seine volle Wirkung zu entfalten. Ein solcher Trank gibt vier Männern (oder einem Mann viermal) im Kampf eine Chance von 50%, sonst tödliche Wunden zu überleben. Der Trank wird von ihnen automatisch bei Verletzung angewandt.</text>
</string>
</namespace>
@ -365,13 +281,8 @@
</namespace>
<namespace name="spellinfo">
<string name="commonfamiliar">
<text locale="de">Einem erfahrenen Magier wird
irgendwann auf seinen Wanderungen ein
ungewöhnliches Exemplar einer Gattung begegnen,
welches sich dem Magier anschließen wird.</text>
<text locale="en">During their travel, seasoned
magicians will occasionally befriend an extraordinary
creature of an unusual species that will join them.</text>
<text locale="de">Einem erfahrenen Magier wird irgendwann auf seinen Wanderungen ein ungewöhnliches Exemplar einer Gattung begegnen, welches sich dem Magier anschließen wird.</text>
<text locale="en">During their travel, seasoned magicians will occasionally befriend an extraordinary creature of an unusual species that will join them.</text>
</string>
</namespace>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="crossbow">
<item weight="100">
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="log" quantity="1"/>
</construction>
<weapon armorpiercing="true" pierce="true" missile="true" skill="crossbow" offmod="0" defmod="0" reload="2">

View File

@ -6,7 +6,7 @@
<resource name="greatbow">
<item weight="100">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<modifier function="mod_elves_only"/>
<requirement type="mallorn" quantity="2"/>
</construction>

View File

@ -4,7 +4,7 @@
-->
<resource name="greatsword">
<item weight="200" score="30">
<construction skill="weaponsmithing" minskill="4" reqsize="1">
<construction skill="weaponsmithing" minskill="4">
<requirement type="iron" quantity="2"/>
</construction>
<weapon useshield="false" cut="true" skill="melee" offmod="-1" defmod="-2" horse="false">

View File

@ -5,7 +5,7 @@
<resource name="halberd">
<item weight="200">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="log" quantity="2"/>
<requirement type="iron" quantity="1"/>
</construction>

View File

@ -4,7 +4,7 @@
-->
<resource name="laensword">
<item weight="100" score="400">
<construction skill="weaponsmithing" minskill="8" reqsize="1">
<construction skill="weaponsmithing" minskill="8">
<requirement type="laen" quantity="1"/>
</construction>
<weapon cut="true" skill="melee" offmod="1" defmod="1" magres="0.30">

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<resource name="mallorncrossbow">
<item weight="100">
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<requirement type="mallorn" quantity="1"/>
</construction>
<weapon armorpiercing="true" pierce="true" missile="true" skill="crossbow" offmod="0" defmod="0" reload="2" magres="0.15">

View File

@ -2,7 +2,7 @@
<resource name="mallornlance">
<item weight="100">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="5" reqsize="1">
<construction skill="weaponsmithing" minskill="5">
<requirement type="mallorn" quantity="2"/>
</construction>
<weapon pierce="true" skill="polearm" minskill="5" offmod="0" defmod="0" magres="0.15">

View File

@ -4,7 +4,7 @@
-->
<resource name="rustygreatsword">
<item weight="200" score="20">
<construction skill="weaponsmithing" minskill="4" reqsize="1">
<construction skill="weaponsmithing" minskill="4">
<requirement type="iron" quantity="2"/>
</construction>
<weapon useshield="false" cut="true" skill="melee" offmod="-2" defmod="-3" horse="false">

View File

@ -5,7 +5,7 @@
<resource name="rustyhalberd">
<item weight="200" score="20">
<function name="canuse" value="lua_canuse_item"/>
<construction skill="weaponsmithing" minskill="3" reqsize="1">
<construction skill="weaponsmithing" minskill="3">
<requirement type="iron" quantity="1"/>
<requirement type="log" quantity="1"/>
</construction>

View File

@ -671,11 +671,6 @@
<skill name="stamina" modifier="-10"/>
<attack type="4" damage="1d2"/>
</race>
<race name="alp" magres="0.950000" maxaura="1.000000" regaura="1.000000" recruitcost="50000" weight="0" capacity="0" speed="1.500000" hp="20" ac="2" damage="1d4" unarmedattack="0" unarmeddefense="0" attackmodifier="2" defensemodifier="20" fly="yes" walk="yes" canlearn="no" canteach="no">
<ai splitsize="1"/>
<function name="name" value="namegeneric"/>
<attack type="1" damage="1d4"/>
</race>
<race name="mountainguard" unarmedguard="yes" magres="0.500000" maxaura="1.000000" regaura="0.500000" recruitcost="50000" weight="10000" capacity="2000" speed="0.000000" hp="1000" ac="12" damage="2d40" unarmedattack="0" unarmeddefense="0" attackmodifier="6" defensemodifier="8" cannotmove="yes" canlearn="no" teach="no" noweapons="yes">
<ai splitsize="1"/>
<function name="name" value="namegeneric"/>

View File

@ -142,7 +142,6 @@
<entry spell="stonegolem" level="1" />
<entry spell="stormwinds" level="6" />
<entry spell="strongwall" level="8" />
<!-- <entry spell="summon_alp" level="15" /> -->
<entry spell="summondragon" level="11" />
<entry spell="summonent" level="10" />
<entry spell="summon_familiar" level="9" />

View File

@ -8,7 +8,6 @@
<entry spell="transferauratraum" level="3" />
<entry spell="disturbingdreams" level="6" />
<entry spell="sleep" level="7" />
<!-- <entry spell="summon_alp" level="15" /> -->
<entry spell="mindblast" level="11" />
<entry spell="reanimate" level="5" />
<entry spell="shapeshift" level="3" />

View File

@ -188,13 +188,6 @@
<resource name="h12" amount="1" cost="fixed"/>
<resource name="h20" amount="1" cost="fixed"/>
</spell>
<!--
<spell name="summon_alp" rank="5" index="58" parameters="u" target_global="true">
<resource name="aura" amount="350" cost="fixed"/>
<resource name="permaura" amount="5" cost="fixed"/>
<resource name="h8" amount="1" cost="fixed"/>
</spell>
-->
<spell name="windshield" rank="5" index="59" variable="true" combat="1">
<resource name="aura" amount="2" cost="level"/>
</spell>

View File

@ -284,10 +284,6 @@
getting it after the second turn, please make one of your units give the
order OPTION COMPUTER.</text>
</string>
<string name="defaultorder">
<text locale="de">ARBEITEN</text>
<text locale="en">WORK</text>
</string>
<string name="temple">
<text locale="de">Tempel</text>
<text locale="en">temple</text>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" ?>
<ship name="boat" range="2" storm="1.00" damage="1.00" cargo="5000" cptskill="1" minskill="1" sumskill="2" opensea="yes">
<coast terrain="ocean"/>
<coast terrain="plain"/>
<coast terrain="swamp"/>
<coast terrain="desert"/>
@ -11,7 +10,7 @@
<coast terrain="activevolcano"/>
<coast terrain="iceberg_sleep"/>
<coast terrain="iceberg"/>
<construction skill="shipcraft" minskill="1" maxsize="5" reqsize="1">
<construction skill="shipcraft" minskill="1" maxsize="5">
<requirement type="log" quantity="1"/>
</construction>
</ship>

View File

@ -16,6 +16,7 @@ MACHINE=`uname -m`
[ -z "$CC" ] && [ ! -z `which cc` ] && CC="cc"
BIN_DIR="$ROOT/build-$MACHINE-$CC-$BUILD"
mkdir -p $BIN_DIR
rm -f $BUILD
ln -sf $BIN_DIR $BUILD
MACHINE=$(gcc -dumpmachine)

View File

@ -1,8 +1,8 @@
local autoseed = {}
-- minimum required resources in the 7-hex neighborhood:
local peasants = 20000
local trees = 1000
local peasants = 10000
local trees = 800
-- number of starters per region:
local per_region = 2
@ -23,8 +23,12 @@ local function select_regions(regions, peasants, trees)
local sel = {}
for r in regions do
if not r.plane and r.terrain~="ocean" and not r.units() then
if score(r, "peasant") >= peasants and score(r, "tree") >= trees then
table.insert(sel, r)
sp = score(r, "peasant")
st = score(r, "tree")
if sp >= peasants then
if st >= trees then
table.insert(sel, r)
end
end
end
end
@ -47,8 +51,11 @@ local function read_players()
end
local function seed(r, email, race, lang)
assert(r)
local f = faction.create(email, race, lang)
assert(f)
local u = unit.create(f, r)
assert(u)
equip_unit(u, "new_faction")
equip_unit(u, "first_unit")
equip_unit(u, "first_" .. race, 7) -- disable old callbacks
@ -69,31 +76,38 @@ end
function autoseed.init()
-- local newbs = {}
local num_seeded = per_region
local num_seeded = 0
local start = nil
eressea.log.info('autoseed new players')
players = read_players()
if players then
print('autoseed ' .. #players .. ' new players')
end
if players and #players >= per_region then
local sel
eressea.log.info(#players .. ' new players')
sel = select_regions(regions(), peasants, trees)
for _, p in ipairs(players) do
if num_seeded == per_region then
while not start or start.units() do
local index = 1 + (rng_int() % #sel)
start = sel[index]
if #sel == 0 then
eressea.log.error("autoseed could not select regions for new factions")
else
for _, p in ipairs(players) do
if num_seeded == per_region then
local index = rng_int() % #sel
while not start do
start = sel[index + 1]
index = (index + 1) % #sel
end
num_seeded = 0
end
local dupe = get_faction_by_email(p.email)
if dupe then
eressea.log.warning("seed: duplicate email " .. p.email .. " already used by " .. tostring(dupe))
else
print("new faction ".. p.email .. " starts in ".. tostring(start))
local f = seed(start, p.email, p.race or "human", p.lang or "de")
num_seeded = num_seeded + 1
end
num_seeded = 0
end
local dupe = get_faction_by_email(p.email)
if dupe then
eressea.log.warning("seed: duplicate email " .. p.email .. " already used by " .. tostring(dupe))
else
local f = seed(start, p.email, p.race or "human", p.lang or "de")
num_seeded = num_seeded + 1
print("new faction ".. tostring(f) .. " starts in ".. tostring(start))
-- table.insert(newbs, f)
end
end
end

View File

@ -6,7 +6,7 @@ eressea.log.debug("rules for game E3")
return {
require('eressea'),
require('eressea.xmasitems'),
require('eressea.markets'),
-- require('eressea.markets'),
require('eressea.frost'),
require('eressea.ents')
}

View File

@ -5,7 +5,7 @@ eressea.log.debug("rules for game E4")
return {
require('eressea'),
require('eressea.markets'),
-- require('eressea.markets'),
require('eressea.frost'),
require('eressea.ents')
}

View File

@ -15,6 +15,23 @@ local function error_message(msg, u, ord)
return -1
end
local function usepotion_message(u, type)
msg = message.create("usepotion")
msg:set_unit("unit", u)
msg:set_resource("potion", type)
return msg
end
function use_stardust(u, amount)
local p = u.region:get_resource("peasant")
p = math.ceil(1.5 * p)
u.region:set_resource("peasant", p)
local msg = usepotion_message(u, "stardust")
msg:send_region(u.region)
return 1
end
function use_snowglobe(u, amount, token, ord)
local transform = {
ocean = "glacier",
@ -59,9 +76,7 @@ function use_xmastree(u, amount)
local trees = u.region:get_resource("tree")
u.region:set_key("xm06", true)
u.region:set_resource("tree", 10+trees)
local msg = message.create("usepotion")
msg:set_unit("unit", u)
msg:set_resource("potion", "xmastree")
local msg = usepotion_message(u, "xmastree")
msg:send_region(u.region)
return amount
end

28
scripts/kill-planes.lua Normal file
View File

@ -0,0 +1,28 @@
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 from 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 = 'e2'
require 'eressea'
require 'eressea.xmlconf'
require 'eressea.path'
eressea.read_game(get_turn() .. '.dat')
ids = {2081501646, 1967748303, 1137, 2000, 1456894557, 1580742069, 1143084084, 285224813, 604912520, 296884068, 50}
p=plane.create(50, -7280, -4494, 83, 83, "Regatta")
for k,v in ipairs(ids) do
p = plane.get(v)
print(v, p)
p:erase()
end
eressea.write_game(get_turn() .. '.new')
eressea.free_game()
eressea.read_game(get_turn() .. '.new')
write_reports()
eressea.write_game(get_turn() .. '.fix')

View File

@ -1,32 +1,13 @@
dofile("config.lua")
p = require("populate")
local function read_players()
-- return {{ email = "noreply@mailinator.com", race = "dwarf", lang = "de" }}
local players = {}
local input = io.open("newfactions", "r")
while input do
local str = input:read("*line")
if str==nil then break end
local email, race, lang = str:match("([^ ]*) ([^ ]*) ([^ ]*)")
if string.char(string.byte(email, 1))~='#' then
table.insert(players, { race = race, lang = lang, email = email })
end
end
return players
local path = 'scripts'
if config.install then
path = config.install .. '/' .. path
end
package.path = package.path .. ';' .. path .. '/?.lua;' .. path .. '/?/init.lua'
require 'eressea'
require 'eressea.xmlconf' -- read xml data
local function seed(r, email, race, lang)
local f = faction.create(email, race, lang)
local u = unit.create(f, r)
equip_unit(u, "new_faction")
equip_unit(u, "first_unit")
equip_unit(u, "first_" .. race, 7) -- disable old callbacks
unit.create(f, r, 5):set_skill("mining", 30)
unit.create(f, r, 5):set_skill("quarrying", 30)
f:set_origin(r)
return f
end
require 'config'
auto = require 'eressea.autoseed'
local function dump_selection(sel)
local best = { score = 0, r = nil }
@ -42,54 +23,9 @@ local function dump_selection(sel)
return best
end
players = read_players()
local peasants = 20000
local trees = 1000
local turn = get_turn()
local sel
if #players > 0 then
eressea.read_game(("%d.dat"):format(turn))
sel = p.select(regions(), peasants, trees)
if #sel > 0 then
local best = dump_selection(sel)
print("finest region, " .. best.score .. " points: " .. tostring(best.r))
end
end
math.randomseed(os.time())
local newbs = {}
local per_region = 2
local num_seeded = 2
local start = nil
for _, p in ipairs(players) do
if num_seeded == per_region then
while not start or start.units() do
local index = math.random(#sel)
start = sel[index]
end
num_seeded = 0
end
local dupe = false
for f in factions() do
if f.email==p.email then
print("seed: duplicate email " .. p.email .. " already used by " .. tostring(f))
dupe = true
break
end
end
if not dupe then
num_seeded = num_seeded + 1
f = seed(start, p.email, p.race or "human", p.lang or "de")
print("new faction ".. tostring(f) .. " starts in ".. tostring(start))
table.insert(newbs, f)
end
end
if #newbs > 0 then
init_reports()
for _, f in ipairs(newbs) do
write_report(f)
end
eressea.write_game(("%d.dat.new"):format(turn))
end
print("read game")
eressea.read_game(get_turn() .. ".dat")
print("auto-seed")
auto.init()
print("editor")
gmtool.editor()

View File

@ -3,7 +3,6 @@ function nmr_check(maxnmrs)
if nmrs >= maxnmrs then
eressea.log.error("Shit. More than " .. maxnmrs .. " factions with 1 NMR (" .. nmrs .. ")")
write_summary()
eressea.write_game("aborted.dat")
return -1
end
print (nmrs .. " Factions with 1 NMR")

View File

@ -2,6 +2,29 @@ require "lunit"
module("tests.e2.e2features", package.seeall, lunit.testcase )
function test_build_harbour()
-- try to reproduce mantis bug 2221
local r = region.create(0, 0, "plain")
local f = faction.create("harbour@eressea.de", "human", "de")
local u = unit.create(f, r)
size = 30
u.number = 20
u:set_skill("building", 3)
u:add_item("money", size*250)
u:add_item("stone", size*5)
u:add_item("log", size*5)
u:clear_orders()
u:add_order("MACHE HAFEN")
process_orders()
assert_not_nil(u.building)
assert_equal("harbour", u.building.type)
assert_equal(20, u.building.size)
process_orders()
assert_equal(25, u.building.size)
process_orders()
assert_equal(25, u.building.size)
end
local function one_unit(r, f)
local u = unit.create(f, r, 1)
u:add_item("money", u.number * 100)
@ -71,25 +94,6 @@ function test_rename()
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")

View File

@ -8,6 +8,31 @@ function setup()
eressea.settings.set("NewbieImmunity", "0")
end
function test_piracy()
local r = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")
local r3 = region.create(-1, 0, "ocean")
local f = faction.create("pirate@eressea.de", "human", "de")
local f2 = faction.create("elf@eressea.de", "human", "de")
local u1 = unit.create(f, r2, 1)
local u2 = unit.create(f2, r3, 1)
u1.ship = ship.create(r2, "longboat")
u2.ship = ship.create(r3, "longboat")
u1:set_skill("sailing", 10)
u2:set_skill("sailing", 10)
u1:clear_orders()
u1:add_order("PIRATERIE")
u2:clear_orders()
u2:add_order("NACH o")
process_orders()
-- write_reports()
assert_equal(r2, u1.region) -- should pass, but fails!!!
end
function test_dolphin_on_land()
local r1 = region.create(0, 0, "plain")
local r2 = region.create(1, 0, "plain")

View File

@ -4,6 +4,14 @@ module("tests.e3.e3features", package.seeall, lunit.testcase)
local settings
-- use the C implementation in market.c, because the Lua
-- module is wrong (https://bugs.eressea.de/view.php?id=2225)
local function process_markets()
-- markets = require("eressea.markets")
-- markets.update()
eressea.process.markets()
end
local function set_rule(key, value)
if value==nil then
eressea.settings.set(key, settings[key])
@ -403,8 +411,7 @@ function test_market_regions()
-- if i am the only trader around, i should be getting all the herbs from all 7 regions
local r, u, b, herbnames, luxurynames, herbtable, luxurytable = market_fixture()
eressea.process.markets()
process_markets()
test_items(u, herbtable, 10)
test_items(u, luxurytable, 5)
@ -420,9 +427,8 @@ function test_multiple_markets()
b2.working = true
reset_items(u2)
u2.building = b2
eressea.process.markets()
process_markets()
for _, i in pairs(luxurytable) do
assert_equal(5, u1:get_item(i)+u2:get_item(i), "not enough " .. i )
end
@ -432,12 +438,11 @@ function test_multiple_markets()
assert_equal(5, u1:get_item('silk')) -- uncontested
end
function test_market()
local r = region.create(0, 0, "plain")
local f1 = faction.create("market2@eressea.de", "human", "de")
local u1 = unit.create(f1, r, 1)
local b = building.create(r, "market")
eressea.settings.set("rules.peasants.growth", "0")
@ -469,7 +474,7 @@ function test_market()
end
reset_items()
b.size = 1
eressea.process.markets()
process_markets()
assert_equal(0, u1:get_item("h0"))
b.size = 10
@ -477,38 +482,38 @@ function test_market()
reset_items()
r:set_resource("peasant", 2100)
eressea.process.markets()
process_markets()
assert_equal(5, u1:get_item("h0"))
assert_equal(3, u1:get_item("balm"))
reset_items()
r:set_resource("peasant", 1049)
eressea.process.markets()
process_markets()
assert_equal(2, u1:get_item("h0"))
assert_equal(1, u1:get_item("balm"))
reset_items()
r:set_resource("peasant", 550)
eressea.process.markets()
process_markets()
assert_equal(2, u1:get_item("h0"))
assert_equal(1, u1:get_item("balm"))
reset_items()
r:set_resource("peasant", 549)
eressea.process.markets()
process_markets()
assert_equal(1, u1:get_item("h0"))
assert_equal(1, u1:get_item("balm"))
reset_items()
r:set_resource("peasant", 50)
eressea.process.markets()
process_markets()
assert_equal(1, u1:get_item("h0"))
assert_equal(1, u1:get_item("balm"))
reset_items()
r:set_resource("peasant", 49)
eressea.process.markets()
process_markets()
assert_equal(0, u1:get_item("h0"))
r:set_resource("peasant", 1050)

View File

@ -82,3 +82,18 @@ function test_xmastree()
r = use_tree("plain")
assert_equal(10, r:get_resource("tree"))
end
function test_stardust()
-- fix random peasant changes:
eressea.settings.set("rules.economy.repopulate_maximum", 0)
local r = region.create(0, 0, "plain")
r:set_resource("peasant", 10)
local f = faction.create("noreply@eressea.de", "human", "de")
local u = unit.create(f, r, 5)
u:add_item("stardust", 1)
u:clear_orders()
u:add_order("BENUTZEN 1 Sternenstaub")
process_orders()
assert_equal(15, r:get_resource("peasant"))
assert_equal(0, u:get_item('stardust'))
end

View File

@ -83,6 +83,7 @@ set (ERESSEA_SRC
spells.c
battle.c
alchemy.c
academy.c
upkeep.c
vortex.c
names.c

View File

@ -16,25 +16,29 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**/
#ifndef REMOVECURSE_H
#define REMOVECURSE_H
#ifdef __cplusplus
extern "C" {
#endif
#include <platform.h>
#include <kernel/config.h>
#include <kernel/unit.h>
#include <kernel/building.h>
#include <kernel/item.h>
#include <kernel/pool.h>
#include "academy.h"
#include "study.h"
/* all types we use are defined here to reduce dependencies */
struct trigger_type;
struct trigger;
struct unit;
struct curse;
extern struct trigger_type tt_removecurse;
extern struct trigger *trigger_removecurse(struct curse *c,
struct unit *target);
#ifdef __cplusplus
void academy_teaching_bonus(struct unit *u, skill_t sk, int academy) {
if (academy && sk != NOSKILL) {
learn_skill(u, sk, academy / STUDYDAYS);
}
}
bool academy_can_teach(unit *teacher, unit *student, skill_t sk) {
const struct building_type *btype = bt_find("academy");
if (active_building(teacher, btype) && active_building(student, btype)) {
int j = study_cost(student, sk);
j = _max(50, j * 2);
/* kann Einheit das zahlen? */
return get_pooled(student, get_resourcetype(R_SILVER), GET_DEFAULT, j) >= j;
/* sonst nehmen sie nicht am Unterricht teil */
}
return false;
}
#endif
#endif

Some files were not shown because too many files have changed in this diff Show More