forked from github/server
Merge pull request #501 from ennorehling/stm2-bug_2187
hotfix: bug 2187 (demon hunger)
This commit is contained in:
commit
3e6d4ab908
|
@ -42,9 +42,9 @@
|
||||||
"nmr.removenewbie": 0,
|
"nmr.removenewbie": 0,
|
||||||
"GiveRestriction": 3,
|
"GiveRestriction": 3,
|
||||||
"hunger.long": false,
|
"hunger.long": false,
|
||||||
"hunger.demon.skill": true,
|
|
||||||
"hunger.damage": "1d9+9",
|
"hunger.damage": "1d9+9",
|
||||||
"hunger.demons": true,
|
"hunger.demons.skill": true,
|
||||||
|
"hunger.demons.peasant_tolerance": true,
|
||||||
"init_spells": 0,
|
"init_spells": 0,
|
||||||
"recruit.allow_merge": true,
|
"recruit.allow_merge": true,
|
||||||
"study.expensivemigrants": true,
|
"study.expensivemigrants": true,
|
||||||
|
|
|
@ -42,9 +42,9 @@
|
||||||
"nmr.removenewbie": 0,
|
"nmr.removenewbie": 0,
|
||||||
"GiveRestriction": 3,
|
"GiveRestriction": 3,
|
||||||
"hunger.long": false,
|
"hunger.long": false,
|
||||||
"hunger.demon.skill": true,
|
|
||||||
"hunger.damage": "1d9+9",
|
"hunger.damage": "1d9+9",
|
||||||
"hunger.demons": true,
|
"hunger.demons.skill": true,
|
||||||
|
"hunger.demons.peasant_tolerance": true,
|
||||||
"init_spells": 0,
|
"init_spells": 0,
|
||||||
"recruit.allow_merge": true,
|
"recruit.allow_merge": true,
|
||||||
"study.expensivemigrants": true,
|
"study.expensivemigrants": true,
|
||||||
|
|
|
@ -674,7 +674,7 @@ function test_laen2()
|
||||||
|
|
||||||
process_orders()
|
process_orders()
|
||||||
init_reports()
|
init_reports()
|
||||||
write_report(u1.faction)
|
-- 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"))
|
assert_equal(2, u1:get_item("laen"))
|
||||||
end
|
end
|
||||||
|
@ -985,13 +985,21 @@ local function find_in_report(f, pattern, extension)
|
||||||
return start~=nil
|
return start~=nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function remove_report(faction)
|
||||||
|
local filetrunk = config.reportpath .. "/" .. get_turn() .. "-" .. itoa36(faction.id)
|
||||||
|
os.remove(filetrunk .. ".nr")
|
||||||
|
os.remove(filetrunk .. ".cr")
|
||||||
|
os.remove(filetrunk .. ".txt")
|
||||||
|
end
|
||||||
|
|
||||||
function test_coordinates_no_plane()
|
function test_coordinates_no_plane()
|
||||||
local r = region.create(0, 0, "mountain")
|
local r = region.create(0, 0, "mountain")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = faction.create("noplane@eressea.de", "human", "de")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
init_reports()
|
init_reports()
|
||||||
write_report(f)
|
write_report(f)
|
||||||
assert_true(find_in_report(f, r.name .. " %(0,0%), Berg"))
|
assert_true(find_in_report(f, r.name .. " %(0,0%), Berg"))
|
||||||
|
remove_report(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_show_shadowmaster_attacks()
|
function test_show_shadowmaster_attacks()
|
||||||
|
@ -1005,6 +1013,7 @@ function test_show_shadowmaster_attacks()
|
||||||
init_reports()
|
init_reports()
|
||||||
write_report(f)
|
write_report(f)
|
||||||
assert_false(find_in_report(f, ", ,"))
|
assert_false(find_in_report(f, ", ,"))
|
||||||
|
remove_report(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_coordinates_named_plane()
|
function test_coordinates_named_plane()
|
||||||
|
@ -1015,6 +1024,7 @@ function test_coordinates_named_plane()
|
||||||
init_reports()
|
init_reports()
|
||||||
write_report(f)
|
write_report(f)
|
||||||
assert_true(find_in_report(f, r.name .. " %(0,0,Hell%), Berg"))
|
assert_true(find_in_report(f, r.name .. " %(0,0,Hell%), Berg"))
|
||||||
|
remove_report(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_coordinates_unnamed_plane()
|
function test_coordinates_unnamed_plane()
|
||||||
|
@ -1025,6 +1035,7 @@ function test_coordinates_unnamed_plane()
|
||||||
init_reports()
|
init_reports()
|
||||||
write_report(f)
|
write_report(f)
|
||||||
assert_true(find_in_report(f, r.name .. " %(0,0%), Berg"))
|
assert_true(find_in_report(f, r.name .. " %(0,0%), Berg"))
|
||||||
|
remove_report(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_coordinates_noname_plane()
|
function test_coordinates_noname_plane()
|
||||||
|
@ -1035,6 +1046,7 @@ function test_coordinates_noname_plane()
|
||||||
init_reports()
|
init_reports()
|
||||||
write_report(f)
|
write_report(f)
|
||||||
assert_true(find_in_report(f, r.name .. " %(0,0%), Berg"))
|
assert_true(find_in_report(f, r.name .. " %(0,0%), Berg"))
|
||||||
|
remove_report(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_lighthouse()
|
function test_lighthouse()
|
||||||
|
@ -1064,6 +1076,7 @@ function test_lighthouse()
|
||||||
assert_false(find_in_report(f, " %(0,0%) %(vom Turm erblickt%)"))
|
assert_false(find_in_report(f, " %(0,0%) %(vom Turm erblickt%)"))
|
||||||
assert_false(find_in_report(f, " %(0,1%) %(vom Turm erblickt%)"))
|
assert_false(find_in_report(f, " %(0,1%) %(vom Turm erblickt%)"))
|
||||||
assert_false(find_in_report(f, " %(4,0%) %(vom Turm erblickt%)"))
|
assert_false(find_in_report(f, " %(4,0%) %(vom Turm erblickt%)"))
|
||||||
|
remove_report(f)
|
||||||
end
|
end
|
||||||
|
|
||||||
module("tests.parser", package.seeall, lunit.testcase)
|
module("tests.parser", package.seeall, lunit.testcase)
|
||||||
|
|
|
@ -965,3 +965,24 @@ function test_no_uruk()
|
||||||
local f1 = faction.create("noreply@eressea.de", "uruk", "de")
|
local f1 = faction.create("noreply@eressea.de", "uruk", "de")
|
||||||
assert_equal(f1.race, "orc")
|
assert_equal(f1.race, "orc")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_bug2187()
|
||||||
|
set_rule("rules.food.flags", "0")
|
||||||
|
|
||||||
|
local r = region.create(0,0,"plain")
|
||||||
|
local f = faction.create("2187@eressea.de", "goblin", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u.race = "demon"
|
||||||
|
u.hp = u.hp_max * u.number
|
||||||
|
|
||||||
|
r:set_resource("peasant", 0)
|
||||||
|
u:add_item("money", 500)
|
||||||
|
|
||||||
|
hp = u.hp
|
||||||
|
process_orders()
|
||||||
|
assert_equal(hp, u.hp)
|
||||||
|
-- init_reports()
|
||||||
|
-- write_report(f)
|
||||||
|
|
||||||
|
set_rule("rules.food.flags", "4")
|
||||||
|
end
|
|
@ -1299,6 +1299,46 @@ static void test_immigration(CuTest * tc)
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_demon_hunger(CuTest * tc)
|
||||||
|
{
|
||||||
|
const resource_type *rtype;
|
||||||
|
region *r;
|
||||||
|
race *rc;
|
||||||
|
faction *f;
|
||||||
|
unit *u;
|
||||||
|
message* msg;
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
test_create_world();
|
||||||
|
r = findregion(0, 0);
|
||||||
|
rc = test_create_race("demon");
|
||||||
|
f = test_create_faction(rc);
|
||||||
|
u = test_create_unit(f, r);
|
||||||
|
u->hp = 999;
|
||||||
|
|
||||||
|
config_set("hunger.demons.peasant_tolerance", "1");
|
||||||
|
|
||||||
|
rtype = get_resourcetype(R_SILVER);
|
||||||
|
i_change(&u->items, rtype->itype, 30);
|
||||||
|
scale_number(u, 1);
|
||||||
|
rsetpeasants(r, 0);
|
||||||
|
|
||||||
|
get_food(r);
|
||||||
|
|
||||||
|
CuAssertIntEquals(tc, 20, i_get(u->items, rtype->itype));
|
||||||
|
CuAssertPtrEquals(tc, 0, test_find_messagetype(f->msgs, "malnourish"));
|
||||||
|
|
||||||
|
config_set("hunger.demons.peasant_tolerance", "0");
|
||||||
|
|
||||||
|
get_food(r);
|
||||||
|
|
||||||
|
CuAssertIntEquals(tc, 10, i_get(u->items, rtype->itype));
|
||||||
|
msg = test_get_last_message(u->faction->msgs);
|
||||||
|
CuAssertStrEquals(tc, "malnourish", test_get_messagetype(msg));
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
CuSuite *get_laws_suite(void)
|
CuSuite *get_laws_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
|
@ -1358,6 +1398,7 @@ CuSuite *get_laws_suite(void)
|
||||||
SUITE_ADD_TEST(suite, test_name_ship);
|
SUITE_ADD_TEST(suite, test_name_ship);
|
||||||
SUITE_ADD_TEST(suite, test_show_without_item);
|
SUITE_ADD_TEST(suite, test_show_without_item);
|
||||||
SUITE_ADD_TEST(suite, test_immigration);
|
SUITE_ADD_TEST(suite, test_immigration);
|
||||||
|
SUITE_ADD_TEST(suite, test_demon_hunger);
|
||||||
|
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
|
|
@ -963,7 +963,7 @@ static void demon_skillchanges(void)
|
||||||
|
|
||||||
if (fval(u, UFL_HUNGER)) {
|
if (fval(u, UFL_HUNGER)) {
|
||||||
/* hungry demons only go down, never up in skill */
|
/* hungry demons only go down, never up in skill */
|
||||||
int rule_hunger = config_get_int("hunger.demon.skill", 0) != 0;
|
int rule_hunger = config_get_int("hunger.demons.skill", 0) != 0;
|
||||||
if (rule_hunger) {
|
if (rule_hunger) {
|
||||||
upchance = 0;
|
upchance = 0;
|
||||||
downchance = 15;
|
downchance = 15;
|
||||||
|
|
|
@ -271,7 +271,7 @@ void get_food(region * r)
|
||||||
peasantfood = 0;
|
peasantfood = 0;
|
||||||
}
|
}
|
||||||
if (hungry > 0) {
|
if (hungry > 0) {
|
||||||
bool demon_hunger = config_get_int("hunger.demons", 0) != 0;
|
bool demon_hunger = config_get_int("hunger.demons.peasant_tolerance", 0) == 0;
|
||||||
if (demon_hunger) {
|
if (demon_hunger) {
|
||||||
/* demons who don't feed are hungry */
|
/* demons who don't feed are hungry */
|
||||||
if (hunger(hungry, u))
|
if (hunger(hungry, u))
|
||||||
|
|
Loading…
Reference in New Issue