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