diff --git a/src/common/gamecode/give.c b/src/common/gamecode/give.c
index a16661bc1..e82f5e455 100644
--- a/src/common/gamecode/give.c
+++ b/src/common/gamecode/give.c
@@ -85,12 +85,18 @@ add_give(unit * u, unit * u2, int given, int received, const resource_type * rty
}
}
+static boolean
+limited_give(const item_type * type)
+{
+ /* trade only money 2:1, if at all */
+ return (type == i_silver);
+}
+
int give_quota(const unit * src, const unit * dst, const item_type * type, int n)
{
static float divisor = -1;
- /* luxuries and herbs are traded 1:1 */
- if (fval(type, ITF_HERB) || type->rtype->ltype) {
+ if (divisor==0 || !limited_give(type)) {
return n;
}
if (dst && src && src->faction!=dst->faction) {
@@ -100,15 +106,7 @@ int give_quota(const unit * src, const unit * dst, const item_type * type, int n
}
if (divisor>=1) {
/* predictable > correct: */
-#if 0
- double r = n / divisor;
- int x = (int)r;
-
- r = r - x;
- if (chance(r)) ++x;
-#else
int x = (int)(n/divisor);
-#endif
return x;
}
}
diff --git a/src/res/armor/scale.xml b/src/res/armor/scale.xml
index aacb23aa2..809d08bca 100644
--- a/src/res/armor/scale.xml
+++ b/src/res/armor/scale.xml
@@ -1,11 +1,11 @@
- -
+
-
-
+
-
+
diff --git a/src/res/e3a.xml b/src/res/e3a.xml
index 07b829f24..5de89aaaa 100644
--- a/src/res/e3a.xml
+++ b/src/res/e3a.xml
@@ -147,9 +147,9 @@
-
-
-
+
+
+
@@ -161,7 +161,7 @@
-
+
diff --git a/src/res/e3a/armor.xml b/src/res/e3a/armor.xml
index 4a287e577..0bdb3294b 100644
--- a/src/res/e3a/armor.xml
+++ b/src/res/e3a/armor.xml
@@ -7,5 +7,6 @@
+
diff --git a/src/res/e3a/resources.xml b/src/res/e3a/resources.xml
index 390487586..7c06ebc9a 100644
--- a/src/res/e3a/resources.xml
+++ b/src/res/e3a/resources.xml
@@ -2,8 +2,10 @@
-
-
+
+
+
+
diff --git a/src/scripts/tests/common.lua b/src/scripts/tests/common.lua
index a258e8e7c..b9d94d9e1 100644
--- a/src/scripts/tests/common.lua
+++ b/src/scripts/tests/common.lua
@@ -583,3 +583,24 @@ function test_storage()
assert(u)
assert(u:get_item("money") == u.number * 100)
end
+
+function test_building_other()
+ local r = region.create(0,0, "plain")
+ local f1 = faction.create("noreply@eressea.de", "human", "de")
+ local f2 = faction.create("noreply@eressea.de", "human", "de")
+ local b = building.create(r, "castle")
+ b.size = 10
+ local u1 = unit.create(f1, r, 3)
+ u1.building = b
+ u1:add_item("money", 100)
+
+ local u2 = unit.create(f2, r, 3)
+ u2:set_skill("building", 10)
+ u2:add_item("money", 100)
+ u2:add_item("stone", 100)
+ u2:clear_orders()
+ u2:add_order("MACHEN BURG " .. itoa36(b.id))
+ update_owners()
+ process_orders()
+ assert_not_equal(10, b.size)
+end
diff --git a/src/scripts/tests/e3a.lua b/src/scripts/tests/e3a.lua
index 7258366f1..c5c122c8b 100644
--- a/src/scripts/tests/e3a.lua
+++ b/src/scripts/tests/e3a.lua
@@ -412,7 +412,7 @@ function test_canoe_passes_through_land()
assert_equal(u2.region.id, dst.id, "canoe could not leave coast")
end
-function test_give_only_a_third_of_items()
+function test_give_50_percent_of_money()
local u1, u2 = two_units(region.create(0, 0, "plain"), two_factions())
local r = u2.region
u1.faction.age = 10
@@ -420,7 +420,7 @@ function test_give_only_a_third_of_items()
u1:add_item("money", 500)
local m1, m2 = u1:get_item("money"), u2:get_item("money")
u1:clear_orders()
- u1:add_order("GIB " .. itoa36(u2.id) .. " 332 Silber")
+ u1:add_order("GIB " .. itoa36(u2.id) .. " 221 Silber")
u2:clear_orders()
u2:add_order("LERNEN Hiebwaffen")
process_orders()
@@ -429,14 +429,33 @@ function test_give_only_a_third_of_items()
m1, m2 = u1:get_item("money"), u2:get_item("money")
u1:clear_orders()
- u1:add_order("GIB " .. itoa36(u2.id) .. " 332 Silber")
+ u1:add_order("GIB " .. itoa36(u2.id) .. " 221 Silber")
u2:clear_orders()
- u2:add_order("HELFE " .. itoa36(u1.faction.id) .. " GIB")
+ u2:add_order("HELFEN " .. itoa36(u1.faction.id) .. " GIB")
u2:add_item("horse", 100)
u2:add_order("GIB 0 ALLES PFERD")
local h = r:get_resource("horse")
process_orders()
assert(r:get_resource("horse")>=h+100)
- assert_equal(m1-332-10*u1.number, u1:get_item("money"))
+ assert_equal(m1-221-10*u1.number, u1:get_item("money"))
assert_equal(m2+110-10*u2.number, u2:get_item("money"))
end
+
+function test_give_100_percent_of_items()
+ free_game()
+ local u1, u2 = two_units(region.create(0, 0, "plain"), two_factions())
+ local r = u2.region
+ u1.faction.age = 10
+ u2.faction.age = 10
+ u1:add_item("money", 500)
+ u1:add_item("log", 500)
+ local m1, m2 = u1:get_item("log"), u2:get_item("log")
+ u1:clear_orders()
+ u1:add_order("GIB " .. itoa36(u2.id) .. " 332 Holz")
+ u2:clear_orders()
+ u2:add_order("LERNEN Hiebwaffen")
+ u2:add_order("HELFEN " .. itoa36(u1.faction.id) .. " GIB")
+ process_orders()
+ assert_equal(m1-332, u1:get_item("log"))
+ assert_equal(m2+332, u2:get_item("log"))
+end