forked from github/server
Expose the "working" flag for buildings to Lua.
Test working vs. unpaid harbour landigns with a ship.
This commit is contained in:
parent
26d6808ea1
commit
8fc137d780
5 changed files with 46 additions and 6 deletions
|
@ -1074,6 +1074,7 @@ function test_lighthouse()
|
|||
local u = unit.create(f, r, 1)
|
||||
local b = building.create(r, "lighthouse")
|
||||
b.size = 100
|
||||
b.working = true
|
||||
u.building = b
|
||||
u:set_skill("perception", 9)
|
||||
u:add_item("money", 1000)
|
||||
|
|
|
@ -283,6 +283,7 @@ function test_market()
|
|||
for i = 0, 5 do
|
||||
local rn = r:next(i)
|
||||
end
|
||||
b.working = true
|
||||
eressea.process.markets()
|
||||
u:add_item("money", -u:get_item("money")) -- now we only have herbs
|
||||
local len = 0
|
||||
|
|
|
@ -56,6 +56,23 @@ static int tolua_building_get_objects(lua_State * L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_building_set_working(lua_State * L)
|
||||
{
|
||||
building *self = (building *) tolua_tousertype(L, 1, 0);
|
||||
bool flag = !!lua_toboolean(L, 2);
|
||||
if (flag) self->flags |= BLD_WORKING;
|
||||
else self->flags &= ~BLD_WORKING;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_building_get_working(lua_State * L)
|
||||
{
|
||||
building *self = (building *) tolua_tousertype(L, 1, 0);
|
||||
bool flag = (self->flags&BLD_WORKING)!=0;
|
||||
lua_pushboolean(L, flag);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int tolua_building_get_region(lua_State * L)
|
||||
{
|
||||
building *self = (building *) tolua_tousertype(L, 1, 0);
|
||||
|
@ -242,7 +259,8 @@ void tolua_building_open(lua_State * L)
|
|||
.property("type", &building_gettype)
|
||||
.def_readwrite("size", &building::size)
|
||||
#endif
|
||||
tolua_variable(L, TOLUA_CAST "objects", tolua_building_get_objects, 0);
|
||||
tolua_variable(L, TOLUA_CAST "objects", tolua_building_get_objects, 0);
|
||||
tolua_variable(L, TOLUA_CAST "working", tolua_building_get_working, tolua_building_set_working);
|
||||
|
||||
}
|
||||
tolua_endmodule(L);
|
||||
|
|
|
@ -3,8 +3,8 @@ require "tests.settings"
|
|||
require "tests.config"
|
||||
require "tests.locale"
|
||||
require "tests.regions"
|
||||
require "tests.ships"
|
||||
require "tests.study"
|
||||
require "tests.movement"
|
||||
require "tests.castles"
|
||||
require "tests.spells"
|
||||
require "tests.movement"
|
||||
require "tests.ships"
|
||||
|
|
|
@ -22,7 +22,7 @@ function setup()
|
|||
}
|
||||
},
|
||||
"buildings" : {
|
||||
"harbour" : {}
|
||||
"harbour" : { "maintenance" : { "type" : "money", "amount" : 250, "flags" : [ "required" ] } }
|
||||
},
|
||||
"terrains" : {
|
||||
"ocean": { "flags" : [ "sea", "sail" ] },
|
||||
|
@ -90,7 +90,27 @@ function test_sail_to_forbidden_shore()
|
|||
assert_equal(ocean, u.region)
|
||||
end
|
||||
|
||||
function test_sail_into_harbour()
|
||||
function test_sail_into_good_harbour()
|
||||
local ocean = region.create(1, 0, "ocean")
|
||||
local shore = region.create(0, 0, "glacier")
|
||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||
local b = building.create(shore, "harbour")
|
||||
local u
|
||||
|
||||
u = unit.create(f, shore, 1)
|
||||
u:add_item("money", 250) -- building maintenance fee
|
||||
u.building = b
|
||||
|
||||
u = unit.create(f, ocean, 1)
|
||||
u.ship = ship.create(ocean, "boat")
|
||||
u:set_skill("sailing", 10)
|
||||
u:add_order("NACH W")
|
||||
process_orders()
|
||||
|
||||
assert_equal(shore, u.region, "working harbour should let the ship land")
|
||||
end
|
||||
|
||||
function test_sail_into_bad_harbour()
|
||||
local ocean = region.create(1, 0, "ocean")
|
||||
local shore = region.create(0, 0, "glacier")
|
||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||
|
@ -103,5 +123,5 @@ function test_sail_into_harbour()
|
|||
assert_not_nil(b)
|
||||
process_orders()
|
||||
|
||||
assert_equal(shore, u.region)
|
||||
assert_equal(ocean, u.region, "harbour without owner should stop ship")
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue