show item and race if possible

This commit is contained in:
Steffen Mecke 2016-06-11 16:50:55 +02:00
parent 61acd40424
commit 00ca412634
2 changed files with 49 additions and 4 deletions

View File

@ -2390,6 +2390,7 @@ static void display_race(unit * u, const race * rc)
static void reshow_other(unit * u, struct order *ord, const char *s) { static void reshow_other(unit * u, struct order *ord, const char *s) {
int err = 21; int err = 21;
bool found = false;
if (s) { if (s) {
const spell *sp = 0; const spell *sp = 0;
@ -2426,7 +2427,7 @@ static void reshow_other(unit * u, struct order *ord, const char *s) {
else { else {
display_item(u, itype); display_item(u, itype);
} }
return; found = true;
} }
if (sp) { if (sp) {
@ -2437,14 +2438,15 @@ static void reshow_other(unit * u, struct order *ord, const char *s) {
if (a != NULL) { if (a != NULL) {
a_remove(&u->faction->attribs, a); a_remove(&u->faction->attribs, a);
} }
return; found = true;
} }
if (rc && u_race(u) == rc) { if (rc && u_race(u) == rc) {
display_race(u, rc); display_race(u, rc);
return; found = true;
} }
} }
if (!found)
cmistake(u, ord, err, MSG_EVENT); cmistake(u, ord, err, MSG_EVENT);
} }

View File

@ -1329,6 +1329,48 @@ static void test_show_race(CuTest *tc) {
test_cleanup(); test_cleanup();
} }
static void test_show_both(CuTest *tc) {
order *ord;
race * rc;
unit *u;
struct locale *loc;
message * msg;
test_cleanup();
mt_register(mt_new_va("msg_event", "string:string", 0));
mt_register(mt_new_va("displayitem", "weight:int", "item:resource", "description:string", 0));
rc = test_create_race("elf");
test_create_itemtype("elvenhorse");
loc = get_or_create_locale("de");
locale_setstring(loc, "elvenhorse", "Elfenpferd");
locale_setstring(loc, "elvenhorse_p", "Elfenpferde");
locale_setstring(loc, "iteminfo::elvenhorse", "Hiyaa!");
locale_setstring(loc, "race::elf_p", "Elfen");
locale_setstring(loc, "race::elf", "Elf");
init_locale(loc);
CuAssertPtrNotNull(tc, finditemtype("elf", loc));
CuAssertPtrNotNull(tc, findrace("elf", loc));
u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, 0));
u->faction->locale = loc;
i_change(&u->items, finditemtype("elfenpferd", loc), 1);
ord = create_order(K_RESHOW, loc, "Elf");
reshow_cmd(u, ord);
CuAssertTrue(tc, test_find_messagetype(u->faction->msgs, "error36") == NULL);
msg = test_find_messagetype(u->faction->msgs, "msg_event");
CuAssertPtrNotNull(tc, msg);
CuAssertTrue(tc, memcmp("Elf:", msg->parameters[0].v, 4) == 0);
msg = test_find_messagetype(u->faction->msgs, "displayitem");
CuAssertPtrNotNull(tc, msg);
CuAssertTrue(tc, memcmp("Hiyaa!", msg->parameters[2].v, 4) == 0);
test_clear_messages(u->faction);
free_order(ord);
test_cleanup();
}
static int low_wage(const region * r, const faction * f, const race * rc, int in_turn) { static int low_wage(const region * r, const faction * f, const race * rc, int in_turn) {
return 1; return 1;
} }
@ -1466,6 +1508,7 @@ CuSuite *get_laws_suite(void)
SUITE_ADD_TEST(suite, test_show_without_item); SUITE_ADD_TEST(suite, test_show_without_item);
SUITE_ADD_TEST(suite, test_show_elf); SUITE_ADD_TEST(suite, test_show_elf);
SUITE_ADD_TEST(suite, test_show_race); SUITE_ADD_TEST(suite, test_show_race);
SUITE_ADD_TEST(suite, test_show_both);
SUITE_ADD_TEST(suite, test_immigration); SUITE_ADD_TEST(suite, test_immigration);
SUITE_ADD_TEST(suite, test_demon_hunger); SUITE_ADD_TEST(suite, test_demon_hunger);