- market tests

- some new bindings
This commit is contained in:
Enno Rehling 2009-12-01 17:15:03 +00:00
parent 2b15c42eca
commit 2a098dcd30
6 changed files with 135 additions and 18 deletions

View File

@ -141,7 +141,7 @@ void do_markets(void)
items = (item *)a->data.v; items = (item *)a->data.v;
i_change(&items, herb, 1); i_change(&items, herb, 1);
a->data.v = items; a->data.v = items;
/* give 1 luxury */ /* give 1 herb */
} }
} }
} }

View File

@ -891,12 +891,14 @@ const item_type *
r_luxury(region * r) r_luxury(region * r)
{ {
struct demand * dmd; struct demand * dmd;
if (!r->land->demands) { if (r->land) {
fix_demand(r); if (!r->land->demands) {
assert(r->land->demands); fix_demand(r);
} assert(r->land->demands);
for (dmd=r->land->demands;dmd;dmd=dmd->next) { }
if (dmd->value==0) return dmd->type->itype; for (dmd=r->land->demands;dmd;dmd=dmd->next) {
if (dmd->value==0) return dmd->type->itype;
}
} }
return NULL; return NULL;
} }

View File

@ -225,6 +225,44 @@ static int tolua_region_get_adj(lua_State* L)
return 1; return 1;
} }
static int tolua_region_get_luxury(lua_State* L)
{
region* r = (region*)tolua_tousertype(L, 1, 0);
if (r->land) {
const item_type * lux = r_luxury(r);
if (lux) {
const char * name = lux->rtype->_name[0];
tolua_pushstring(L, name);
return 1;
}
}
return 0;
}
static int tolua_region_set_herb(lua_State* L)
{
region* r = (region*)tolua_tousertype(L, 1, 0);
if (r->land) {
const char * name = tolua_tostring(L, 2, 0);
const item_type * itype = it_find(name);
if (itype && (itype->flags&ITF_HERB)) {
r->land->herbtype = itype;
}
}
return 0;
}
static int tolua_region_get_herb(lua_State* L)
{
region* r = (region*)tolua_tousertype(L, 1, 0);
if (r->land && r->land->herbtype) {
const char * name = r->land->herbtype->rtype->_name[0];
tolua_pushstring(L, name);
return 1;
}
return 0;
}
static int tolua_region_get_next(lua_State* L) static int tolua_region_get_next(lua_State* L)
{ {
region* self = (region*)tolua_tousertype(L, 1, 0); region* self = (region*)tolua_tousertype(L, 1, 0);
@ -596,13 +634,15 @@ tolua_region_open(lua_State* L)
tolua_function(L, TOLUA_CAST "next", tolua_region_get_next); tolua_function(L, TOLUA_CAST "next", tolua_region_get_next);
tolua_variable(L, TOLUA_CAST "adj", tolua_region_get_adj, NULL); tolua_variable(L, TOLUA_CAST "adj", tolua_region_get_adj, NULL);
tolua_variable(L, TOLUA_CAST "luxury", &tolua_region_get_luxury, NULL);
tolua_variable(L, TOLUA_CAST "herb", &tolua_region_get_herb, &tolua_region_set_herb);
tolua_variable(L, TOLUA_CAST "terrain_name", &tolua_region_get_terrainname, &tolua_region_set_terrainname); tolua_variable(L, TOLUA_CAST "terrain_name", &tolua_region_get_terrainname, &tolua_region_set_terrainname);
tolua_variable(L, TOLUA_CAST "owner", &tolua_region_get_owner, &tolua_region_set_owner); tolua_variable(L, TOLUA_CAST "owner", &tolua_region_get_owner, &tolua_region_set_owner);
tolua_function(L, TOLUA_CAST "get_key", tolua_region_getkey); tolua_function(L, TOLUA_CAST "get_key", tolua_region_getkey);
tolua_function(L, TOLUA_CAST "set_key", tolua_region_setkey); tolua_function(L, TOLUA_CAST "set_key", tolua_region_setkey);
#if 0 #if 0
.property("herbtype", &region_getherbtype, &region_setherbtype)
.def("add_notice", &region_addnotice) .def("add_notice", &region_addnotice)
.def("add_direction", &region_adddirection) .def("add_direction", &region_adddirection)
.def("move", &region_move) .def("move", &region_move)

View File

@ -39,9 +39,11 @@ without prior permission by the authors of Eressea.
#include <kernel/save.h> #include <kernel/save.h>
#include <gamecode/creport.h> #include <gamecode/creport.h>
#include <gamecode/economy.h>
#include <gamecode/summary.h> #include <gamecode/summary.h>
#include <gamecode/laws.h> #include <gamecode/laws.h>
#include <gamecode/monster.h> #include <gamecode/monster.h>
#include <gamecode/market.h>
#include <spells/spells.h> #include <spells/spells.h>
#include <modules/autoseed.h> #include <modules/autoseed.h>
@ -953,6 +955,19 @@ tolua_read_xml(lua_State* L)
return 0; return 0;
} }
int tolua_process_markets(lua_State* L) {
do_markets();
return 0;
}
int tolua_process_produce(lua_State* L) {
region * r;
for (r=regions;r;r=r->next) {
produce(r);
}
return 0;
}
int int
tolua_eressea_open(lua_State* L) tolua_eressea_open(lua_State* L)
{ {
@ -969,6 +984,14 @@ tolua_eressea_open(lua_State* L)
tolua_module(L, NULL, 0); tolua_module(L, NULL, 0);
tolua_beginmodule(L, NULL); tolua_beginmodule(L, NULL);
{ {
tolua_module(L, "process", 0);
tolua_beginmodule(L, "process");
{
tolua_function(L, "markets", &tolua_process_markets);
tolua_function(L, "produce", &tolua_process_produce);
}
tolua_endmodule(L);
tolua_cclass(L, TOLUA_CAST "alliance", TOLUA_CAST "alliance", TOLUA_CAST "", NULL); tolua_cclass(L, TOLUA_CAST "alliance", TOLUA_CAST "alliance", TOLUA_CAST "", NULL);
tolua_beginmodule(L, TOLUA_CAST "alliance"); tolua_beginmodule(L, TOLUA_CAST "alliance");
{ {

View File

@ -71,7 +71,7 @@ function test_rename()
assert_equal(u:get_item("ao_healing"), 1) assert_equal(u:get_item("ao_healing"), 1)
end end
function test_blessed() function test_blessedharvest_lasts_n_turn()
free_game() free_game()
local r = region.create(0, 0, "plain") local r = region.create(0, 0, "plain")
local f = faction.create("noreply@eressea.de", "human", "de") local f = faction.create("noreply@eressea.de", "human", "de")
@ -86,15 +86,28 @@ function test_blessed()
u:add_spell("raindance") u:add_spell("raindance")
u:add_spell("blessedharvest") u:add_spell("blessedharvest")
u:clear_orders() u:clear_orders()
u:add_order("ZAUBERE STUFE 3 Regentanz") local level = 5
u:add_order("ZAUBERE STUFE " .. level .. " Regentanz")
assert_equal(0, r:get_resource("money"), 0) assert_equal(0, r:get_resource("money"), 0)
process_orders() local m = 0
assert_equal(200, r:get_resource("money")) local p = 100
u:clear_orders() for i=1,level+1 do
u:add_order("ARBEITEN") process_orders()
process_orders() local income = p * 12
assert_equal(400, r:get_resource("money")) p = r:get_resource("peasant")
income = income - p * 10
m = m + income
-- print(i, m, p, r:get_resource("money"))
if (i>level) then
assert_not_equal(m, r:get_resource("money"))
else
assert_equal(m, r:get_resource("money"))
end
u:clear_orders()
u:add_order("ARBEITEN")
-- u:add_spell("raindance")
end
end end
function test_pure() function test_pure()

View File

@ -35,7 +35,7 @@ end
function test_taxes() function test_taxes()
free_game() free_game()
local r = region.create(0, 0, "plain") local r = region.create(0, 0, "plain")
r.peasants = 1000 r:set_resource("peasant", 1000)
r:set_resource("money", 5000) r:set_resource("money", 5000)
local f = faction.create("noreply@eressea.de", "human", "de") local f = faction.create("noreply@eressea.de", "human", "de")
local u = unit.create(f, r, 1) local u = unit.create(f, r, 1)
@ -72,11 +72,50 @@ function test_leave()
end end
function test_market() function test_market()
-- if i am the only trader around, i should be getting all the herbs from all 7 regions
local herb_multi = 500 -- from rc_herb_trade()
free_game()
local r, idx
local herbnames = { 'h0', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7', 'h8' }
idx = 1
for x = -1, 1 do for y = -1, 1 do
r = region.create(x, y, "plain")
r:set_resource("peasant", herb_multi * 10) -- 10 herbs per region
r.herb = herbnames[idx]
idx = idx+1
end end
r = get_region(0, 0)
local b = building.create(r, "market")
b.size = 10
local f = faction.create("noreply@eressea.de", "human", "de")
f.id = 42
local u = unit.create(f, r, 1)
u.building = b
u:add_item("money", u.number * 10000)
for i = 0, 5 do
local rn = r:next(i)
end
process.markets()
u:add_item("money", -u:get_item("money")) -- now we only have herbs
local len = 0
for i in u.items do
len = len + 1
end
assert_not_equal(0, len, "trader did not get any herbs")
for idx, name in pairs(herbnames) do
local n = u:get_item(name)
if n>0 then
assert_equal(10, n, 'trader did not get exaxtly 10 herbs')
end
end
end
function jest_market_gives_items()
free_game() free_game()
local r local r
for x = -1, 1 do for y = -1, 1 do for x = -1, 1 do for y = -1, 1 do
r = region.create(x, y, "plain") r = region.create(x, y, "plain")
r.peasants = 5000 r:set_resource("peasant", 5000)
end end end end
r = get_region(0, 0) r = get_region(0, 0)
local b = building.create(r, "market") local b = building.create(r, "market")