Merge branch 'master' of github.com:eressea/core

This commit is contained in:
Enno Rehling 2013-04-28 03:13:55 +02:00
commit 90578358ca
7 changed files with 105 additions and 28 deletions

View File

@ -309,12 +309,13 @@ function test_guard()
local r = region.create(0, 0, "plain") local r = region.create(0, 0, "plain")
local f1 = faction.create("noreply@eressea.de", "human", "de") local f1 = faction.create("noreply@eressea.de", "human", "de")
f1.age = 20 f1.age = 20
local u1 = unit.create(f1, r, 1) local u1 = unit.create(f1, r, 10)
u1:add_item("sword", 10) u1:add_item("sword", 10)
u1:add_item("money", 10) u1:add_item("money", 10)
u1:set_skill("melee", 10) u1:set_skill("melee", 10)
u1:clear_orders() u1:clear_orders()
u1:add_order("NACH O") u1:add_order("NACH O")
u1.name="Kalle Pimp"
local f2 = faction.create("noreply@eressea.de", "human", "de") local f2 = faction.create("noreply@eressea.de", "human", "de")
f2.age = 20 f2.age = 20
@ -329,7 +330,7 @@ function test_guard()
u2:add_item("money", 100) u2:add_item("money", 100)
u3:add_item("money", 100) u3:add_item("money", 100)
process_orders() process_orders()
assert_equal(r.id, u1.region.id, "unit may not move after combat") assert_equal(r, u1.region, "unit may not move after combat")
end end
function test_recruit() function test_recruit()
@ -569,19 +570,11 @@ function test_config()
end end
local function _test_create_laen() local function _test_create_laen()
eressea.settings.set("rules.terraform.all", "1")
local r = region.create(0,0, "mountain") local r = region.create(0,0, "mountain")
local f1 = faction.create("noreply@eressea.de", "human", "de") local f1 = faction.create("noreply@eressea.de", "human", "de")
local u1 = unit.create(f1, r, 1) local u1 = unit.create(f1, r, 1)
r:set_resource("laen", 50)
-- TODO this is a stupid way to create a laen region
for i = 1, 10000 do
r = region.create(i,0, "mountain")
if r:get_resource("laen") > 2 then
break
end
end
assert(r:get_resource("laen")>2, "could not run test properly, please try again")
return r, u1 return r, u1
end end
@ -604,6 +597,7 @@ function test_laen2()
u1:set_skill("mining", 15) u1:set_skill("mining", 15)
u1:clear_orders() u1:clear_orders()
u1:add_order("MACHEN Laen") u1:add_order("MACHEN Laen")
u1.name = "Laenmeister"
local b = building.create(r, "mine") local b = building.create(r, "mine")
b.size = 10 b.size = 10
@ -611,8 +605,10 @@ function test_laen2()
local laen = r:get_resource("laen") local laen = r:get_resource("laen")
process_orders() process_orders()
assert_equal(2, u1:get_item("laen")) init_reports()
write_report(u1.faction)
assert_equal(laen - 2, r:get_resource("laen")) assert_equal(laen - 2, r:get_resource("laen"))
assert_equal(2, u1:get_item("laen"))
end end
function test_mine() function test_mine()
@ -1334,3 +1330,10 @@ function test_bug_1795_demons()
assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1)) assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1))
assert_equal(peasants+growth, r:get_resource("peasant")) assert_equal(peasants+growth, r:get_resource("peasant"))
end end
function test_faction_flags()
f = faction.create("noreply@eressea.de", "human", "de")
assert_equal(0, f.flags)
f.flags = 42
assert_equal(42, f.flags)
end

View File

@ -160,6 +160,14 @@ static int tolua_faction_get_flags(lua_State * L)
return 1; return 1;
} }
static int tolua_faction_set_flags(lua_State * L)
{
faction *self = (faction *) tolua_tousertype(L, 1, 0);
int flags = (int)tolua_tonumber(L, 2, self->flags);
self->flags = flags;
return 1;
}
static int tolua_faction_get_options(lua_State * L) static int tolua_faction_get_options(lua_State * L)
{ {
faction *self = (faction *) tolua_tousertype(L, 1, 0); faction *self = (faction *) tolua_tousertype(L, 1, 0);
@ -525,7 +533,7 @@ void tolua_faction_open(lua_State * L)
tolua_faction_set_age); tolua_faction_set_age);
tolua_variable(L, TOLUA_CAST "options", tolua_faction_get_options, tolua_variable(L, TOLUA_CAST "options", tolua_faction_get_options,
tolua_faction_set_options); tolua_faction_set_options);
tolua_variable(L, TOLUA_CAST "flags", tolua_faction_get_flags, NULL); tolua_variable(L, TOLUA_CAST "flags", tolua_faction_get_flags, tolua_faction_set_flags);
tolua_variable(L, TOLUA_CAST "lastturn", tolua_faction_get_lastturn, tolua_variable(L, TOLUA_CAST "lastturn", tolua_faction_get_lastturn,
tolua_faction_set_lastturn); tolua_faction_set_lastturn);

View File

@ -73,7 +73,11 @@ static int res_changeaura(unit * u, const resource_type * rtype, int delta)
static int res_changeperson(unit * u, const resource_type * rtype, int delta) static int res_changeperson(unit * u, const resource_type * rtype, int delta)
{ {
assert(rtype != NULL || !"not implemented"); assert(rtype != NULL || !"not implemented");
if (u->number + delta >=0) {
scale_number(u, u->number + delta); scale_number(u, u->number + delta);
} else {
scale_number(u, 0);
}
return u->number; return u->number;
} }
@ -1226,6 +1230,10 @@ void test_clear_resources(void)
void register_resources(void) void register_resources(void)
{ {
static bool registered = false;
if (registered) return;
registered = true;
register_function((pf_generic) mod_elves_only, "mod_elves_only"); register_function((pf_generic) mod_elves_only, "mod_elves_only");
register_function((pf_generic) mod_dwarves_only, "mod_dwarves_only"); register_function((pf_generic) mod_dwarves_only, "mod_dwarves_only");
register_function((pf_generic) res_changeitem, "changeitem"); register_function((pf_generic) res_changeitem, "changeitem");

View File

@ -2,11 +2,52 @@
#include <kernel/types.h> #include <kernel/types.h>
#include <kernel/item.h> #include <kernel/item.h>
#include <kernel/pool.h>
#include <kernel/unit.h>
#include <util/language.h> #include <util/language.h>
#include <util/functions.h>
#include <CuTest.h> #include <CuTest.h>
#include <tests.h> #include <tests.h>
static void test_uchange(CuTest * tc, unit * u, const resource_type * rtype) {
int n;
change_resource(u, rtype, 4);
n = get_resource(u, rtype);
CuAssertPtrNotNull(tc, rtype->uchange);
CuAssertIntEquals(tc, n, rtype->uchange(u, rtype, 0));
CuAssertIntEquals(tc, n-3, rtype->uchange(u, rtype, -3));
CuAssertIntEquals(tc, n-3, get_resource(u, rtype));
CuAssertIntEquals(tc, 0, rtype->uchange(u, rtype, -n));
}
void test_change_item(CuTest * tc)
{
unit * u;
test_cleanup();
register_resources();
init_resources();
test_create_world();
u = test_create_unit(0, 0);
test_uchange(tc, u, olditemtype[I_IRON]->rtype);
}
void test_change_person(CuTest * tc)
{
unit * u;
test_cleanup();
register_resources();
init_resources();
test_create_world();
u = test_create_unit(0, 0);
test_uchange(tc, u, r_unit);
}
void test_resource_type(CuTest * tc) void test_resource_type(CuTest * tc)
{ {
struct item_type *itype; struct item_type *itype;
@ -68,6 +109,8 @@ void test_findresourcetype(CuTest * tc)
CuSuite *get_item_suite(void) CuSuite *get_item_suite(void)
{ {
CuSuite *suite = CuSuiteNew(); CuSuite *suite = CuSuiteNew();
SUITE_ADD_TEST(suite, test_change_item);
SUITE_ADD_TEST(suite, test_change_person);
SUITE_ADD_TEST(suite, test_resource_type); SUITE_ADD_TEST(suite, test_resource_type);
SUITE_ADD_TEST(suite, test_finditemtype); SUITE_ADD_TEST(suite, test_finditemtype);
SUITE_ADD_TEST(suite, test_findresourcetype); SUITE_ADD_TEST(suite, test_findresourcetype);

View File

@ -1016,6 +1016,16 @@ void region_setresource(region * r, const resource_type * rtype, int value)
rsetpeasants(r, value); rsetpeasants(r, value);
else if (rtype == rt_find("horse")) else if (rtype == rt_find("horse"))
rsethorses(r, value); rsethorses(r, value);
else {
int i;
for (i = 0; r->terrain->production[i].type; ++i) {
const terrain_production *production = r->terrain->production + i;
if (production->type==rtype) {
add_resource(r, 1, value, dice_rand(production->divisor), rtype);
break;
}
}
}
} }
} }
@ -1604,7 +1614,7 @@ int owner_change(const region * r)
if (r->land && r->land->ownership) { if (r->land && r->land->ownership) {
return r->land->ownership->since_turn; return r->land->ownership->since_turn;
} }
return -1; return INT_MIN;
} }
bool is_mourning(const region * r, int in_turn) bool is_mourning(const region * r, int in_turn)

View File

@ -82,6 +82,10 @@ void terraform_resources(region * r)
{ {
int i; int i;
const terrain_type *terrain = r->terrain; const terrain_type *terrain = r->terrain;
static int terraform_all = -1;
if (terraform_all<0) {
terraform_all = get_param_int(global.parameters, "rules.terraform.all", 0);
}
if (terrain->production == NULL) if (terrain->production == NULL)
return; return;
@ -94,10 +98,11 @@ void terraform_resources(region * r)
if (rm->type->rtype == rtype) if (rm->type->rtype == rtype)
break; break;
} }
if (rm) if (rm) {
continue; continue;
}
if (chance(production->chance)) { if (terraform_all || chance(production->chance)) {
add_resource(r, dice_rand(production->startlevel), add_resource(r, dice_rand(production->startlevel),
dice_rand(production->base), dice_rand(production->divisor), dice_rand(production->base), dice_rand(production->divisor),
production->type); production->type);

View File

@ -180,15 +180,15 @@ void test_create_world(void)
terrain_type *t_plain, *t_ocean; terrain_type *t_plain, *t_ocean;
region *island[2]; region *island[2];
int i; int i;
item_type * itype; const char * names[] = { "horse", "horse_p", "boat", "boat_p", "iron", "iron_p", "stone", "stone_p" };
const char * names[] = { "horse", "horse_p", "boat", "boat_p" };
make_locale("de"); make_locale("de");
init_resources(); init_resources();
assert(!olditemtype[I_HORSE]); assert(!olditemtype[I_HORSE]);
itype = test_create_itemtype(names); olditemtype[I_HORSE] = test_create_itemtype(names+0);
olditemtype[I_HORSE] = itype; olditemtype[I_IRON] = test_create_itemtype(names+4);
olditemtype[I_STONE] = test_create_itemtype(names+6);
t_plain = test_create_terrain("plain", LAND_REGION | FOREST_REGION | WALK_INTO | CAVALRY_REGION); t_plain = test_create_terrain("plain", LAND_REGION | FOREST_REGION | WALK_INTO | CAVALRY_REGION);
t_plain->size = 1000; t_plain->size = 1000;