forked from github/server
Merge branch 'master' of github.com:eressea/core
This commit is contained in:
commit
90578358ca
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue