diff --git a/scripts/tests/e2/e2features.lua b/scripts/tests/e2/e2features.lua index ca3f68ebe..2c9c42e5b 100644 --- a/scripts/tests/e2/e2features.lua +++ b/scripts/tests/e2/e2features.lua @@ -403,3 +403,45 @@ function test_give_to_other_okay() assert_equal(1, u1.number) assert_equal(2, u2.number) end + +local function get_name(x) + return x.name .. " (" .. itoa36(x.id) .. ")" +end + +function test_faction_stealth() + local f = faction.create('human') + local f2 = faction.create('human') + local r = region.create(0, 0, 'plain') + local u = unit.create(f, r) + local u2 = unit.create(f2, r) + assert_equal(get_name(u) .. ", 1 Mensch, aggressiv.", u:show(f)) + assert_equal(get_name(u) .. ", " .. get_name(f) .. ", 1 Mensch.", u:show(f2)) + u:add_order("TARNE PARTEI NUMMER " .. itoa36(f2.id)) + process_orders() + assert_equal(get_name(u) .. ", " .. get_name(f2) .. ", 1 Mensch, aggressiv.", u:show(f)) + assert_equal(get_name(u) .. ", " .. get_name(f2) .. ", 1 Mensch.", u:show(f2)) + u:clear_orders() + u:add_order("TARNE PARTEI NUMMER") + process_orders() + assert_equal(get_name(u) .. ", 1 Mensch, aggressiv.", u:show(f)) + assert_equal(get_name(u) .. ", " .. get_name(f) .. ", 1 Mensch.", u:show(f2)) +end + +function test_faction_anonymous() + local f = faction.create('human') + local f2 = faction.create('human') + local r = region.create(0, 0, 'plain') + local u = unit.create(f, r) + local u2 = unit.create(f2, r) + assert_equal(get_name(u) .. ", 1 Mensch, aggressiv.", u:show(f)) + assert_equal(get_name(u) .. ", " .. get_name(f) .. ", 1 Mensch.", u:show(f2)) + u:add_order("TARNE PARTEI") + process_orders() + assert_equal(get_name(u) .. ", anonym, 1 Mensch, aggressiv.", u:show(f)) + assert_equal(get_name(u) .. ", anonym, 1 Mensch.", u:show(f2)) + u:clear_orders() + u:add_order("TARNE PARTEI NICHT") + process_orders() + assert_equal(get_name(u) .. ", 1 Mensch, aggressiv.", u:show(f)) + assert_equal(get_name(u) .. ", " .. get_name(f) .. ", 1 Mensch.", u:show(f2)) +end diff --git a/src/bind_unit.c b/src/bind_unit.c index cdfeec39d..a681a201d 100644 --- a/src/bind_unit.c +++ b/src/bind_unit.c @@ -49,14 +49,18 @@ #include static int tolua_bufunit(lua_State * L) { - char buf[8192]; - unit *self = (unit *)tolua_tousertype(L, 1, 0); - int mode = (int)tolua_tonumber(L, 2, (int)seen_unit); - if (!self) return 0; - - bufunit(self->faction, self, 0, mode, buf, sizeof(buf)); - tolua_pushstring(L, buf); - return 1; + unit *u = (unit *)tolua_tousertype(L, 1, 0); + if (u) { + faction *f = (faction *)tolua_tousertype(L, 2, u->faction); + if (f) { + char buf[8192]; + int mode = (int)tolua_tonumber(L, 3, (int)seen_unit); + bufunit(f, u, 0, mode, buf, sizeof(buf)); + tolua_pushstring(L, buf); + return 1; + } + } + return 0; }