test and fix shock trigger.

https://bugs.eressea.de/view.php?id=2154
This commit is contained in:
Enno Rehling 2015-11-09 19:43:51 +01:00
parent fed660987a
commit ea8721367a
6 changed files with 21 additions and 7 deletions

View File

@ -210,6 +210,7 @@ set(TESTS_SRC
upkeep.test.c upkeep.test.c
spells/flyingship.test.c spells/flyingship.test.c
spells/magicresistance.test.c spells/magicresistance.test.c
triggers/shock.test.c
${ATTRIBUTES_TESTS} ${ATTRIBUTES_TESTS}
${UTIL_TESTS} ${UTIL_TESTS}
${KERNEL_TESTS} ${KERNEL_TESTS}

View File

@ -123,11 +123,11 @@ static void test_scale_number(CuTest *tc) {
u = test_create_unit(test_create_faction(test_create_race("human")), findregion(0, 0)); u = test_create_unit(test_create_faction(test_create_race("human")), findregion(0, 0));
change_effect(u, ptype, 1); change_effect(u, ptype, 1);
CuAssertIntEquals(tc, 1, u->number); CuAssertIntEquals(tc, 1, u->number);
CuAssertIntEquals(tc, 1, u->hp); CuAssertIntEquals(tc, 20, u->hp);
CuAssertIntEquals(tc, 1, get_effect(u, ptype)); CuAssertIntEquals(tc, 1, get_effect(u, ptype));
scale_number(u, 2); scale_number(u, 2);
CuAssertIntEquals(tc, 2, u->number); CuAssertIntEquals(tc, 2, u->number);
CuAssertIntEquals(tc, 2, u->hp); CuAssertIntEquals(tc, 40, u->hp);
CuAssertIntEquals(tc, 2, get_effect(u, ptype)); CuAssertIntEquals(tc, 2, get_effect(u, ptype));
set_level(u, SK_ALCHEMY, 1); set_level(u, SK_ALCHEMY, 1);
scale_number(u, 0); scale_number(u, 0);

View File

@ -995,6 +995,11 @@ cancast(unit * u, const spell * sp, int level, int range, struct order * ord)
if (reslist != NULL) { if (reslist != NULL) {
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "missing_components_list", ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "missing_components_list",
"list", reslist)); "list", reslist));
while (reslist) {
resource *res = reslist->next;
free(reslist);
reslist = res;
}
return false; return false;
} }
return true; return true;

View File

@ -127,6 +127,7 @@ int RunAllTests(int argc, char *argv[])
ADD_SUITE(wormhole); ADD_SUITE(wormhole);
ADD_SUITE(spy); ADD_SUITE(spy);
ADD_SUITE(study); ADD_SUITE(study);
ADD_SUITE(shock);
if (suites) { if (suites) {
CuSuite *summary = CuSuiteNew(); CuSuite *summary = CuSuiteNew();

View File

@ -35,6 +35,8 @@ struct race *test_create_race(const char *name)
{ {
race *rc = rc_get_or_create(name); race *rc = rc_get_or_create(name);
rc->maintenance = 10; rc->maintenance = 10;
rc->hitpoints = 20;
rc->maxaura = 1.0;
rc->ec_flags |= GETITEM; rc->ec_flags |= GETITEM;
return rc; return rc;
} }
@ -59,7 +61,7 @@ struct region *test_create_region(int x, int y, const terrain_type *terrain)
struct faction *test_create_faction(const struct race *rc) struct faction *test_create_faction(const struct race *rc)
{ {
faction *f = addfaction("nobody@eressea.de", NULL, rc ? rc : rc_get_or_create("human"), default_locale, 0); faction *f = addfaction("nobody@eressea.de", NULL, rc ? rc : test_create_race("human"), default_locale, 0);
return f; return f;
} }

View File

@ -59,13 +59,18 @@ static void do_shock(unit * u, const char *reason)
if (u->number > 0) { if (u->number > 0) {
/* HP - Verlust */ /* HP - Verlust */
u->hp = (unit_max_hp(u) * u->number) / 10; int hp = (unit_max_hp(u) * u->number) / 10;
u->hp = _max(1, u->hp); hp = _min(u->hp, hp);
u->hp = _max(1, hp);
} }
/* Aura - Verlust */ /* Aura - Verlust */
if (is_mage(u)) { if (is_mage(u)) {
set_spellpoints(u, max_spellpoints(u->region, u) / 10); int aura = max_spellpoints(u->region, u) / 10;
int now = get_spellpoints(u);
if (now > aura) {
set_spellpoints(u, aura);
}
} }
/* Evt. Talenttageverlust */ /* Evt. Talenttageverlust */
@ -86,7 +91,7 @@ static void do_shock(unit * u, const char *reason)
} }
if (u->faction != NULL) { if (u->faction != NULL) {
ADDMSG(&u->faction->msgs, msg_message("shock", ADDMSG(&u->faction->msgs, msg_message("shock",
"mage reason", u, _strdup(reason))); "mage reason", u, reason));
} }
} }