fetch_astral braucht astralregions eigentlich nicht.

This commit is contained in:
Enno Rehling 2019-09-24 21:26:34 +02:00
parent 237ec44ea0
commit 24552613c8
3 changed files with 19 additions and 16 deletions

View File

@ -15,16 +15,20 @@ end
function test_fetch_astral() function test_fetch_astral()
local r = region.create(0, 0, "plain") local r = region.create(0, 0, "plain")
local ra = r:get_astral('fog')
local rb = region.create(ra.x + 1, ra.y, 'fog')
local f = faction.create("human") local f = faction.create("human")
local u1 = unit.create(f, r, 1) local u1 = unit.create(f, r, 1)
local u2 = unit.create(f, r, 1) local u2 = unit.create(f, r, 1)
local u3 = unit.create(f, rb, 1)
rb.plane = ra.plane
u1.magic = "gray" u1.magic = "gray"
u1:set_skill("magic", 6) u1:set_skill("magic", 6)
u1.aura = 0 u1.aura = 0
u1:add_spell("fetch_astral") u1:add_spell("fetch_astral")
u1:clear_orders() u1:clear_orders()
u1:add_order("ZAUBERE Ruf~der~Realitaet " .. itoa36(u2.id)) u1:add_order("ZAUBERE Ruf~der~Realitaet " .. itoa36(u2.id) .. " " .. itoa36(u3.id))
process_orders() process_orders()
assert_equal(1, f:count_msg_type('missing_components_list'), 'no components') assert_equal(1, f:count_msg_type('missing_components_list'), 'no components')
@ -33,10 +37,11 @@ function test_fetch_astral()
assert_equal(12, u1.aura) assert_equal(12, u1.aura)
assert_equal(1, f:count_msg_type('spellfail_astralonly'), 'astral space') assert_equal(1, f:count_msg_type('spellfail_astralonly'), 'astral space')
u2.region = u2.region:get_astral('fog') u2.region = ra
process_orders() process_orders()
assert_equal(0, u1.aura) assert_equal(0, u1.aura)
assert_equal(u1.region, u2.region) assert_equal(r, u2.region)
assert_equal(rb, u3.region)
end end
function test_pull_astral() function test_pull_astral()

View File

@ -114,6 +114,14 @@ static int tolua_region_get_plane(lua_State * L)
return 1; return 1;
} }
static int tolua_region_set_plane(lua_State * L)
{
region *r = (region *)tolua_tousertype(L, 1, NULL);
plane *pl = (plane *)tolua_tousertype(L, 2, NULL);
r->_plane = pl;
return 0;
}
static int tolua_region_get_terrain(lua_State * L) static int tolua_region_get_terrain(lua_State * L)
{ {
region *self = (region *)tolua_tousertype(L, 1, NULL); region *self = (region *)tolua_tousertype(L, 1, NULL);
@ -768,7 +776,8 @@ void tolua_region_open(lua_State * L)
tolua_variable(L, TOLUA_CAST "id", tolua_region_get_id, NULL); tolua_variable(L, TOLUA_CAST "id", tolua_region_get_id, NULL);
tolua_variable(L, TOLUA_CAST "x", tolua_region_get_x, NULL); tolua_variable(L, TOLUA_CAST "x", tolua_region_get_x, NULL);
tolua_variable(L, TOLUA_CAST "y", tolua_region_get_y, NULL); tolua_variable(L, TOLUA_CAST "y", tolua_region_get_y, NULL);
tolua_variable(L, TOLUA_CAST "plane", tolua_region_get_plane, NULL); tolua_variable(L, TOLUA_CAST "plane", tolua_region_get_plane,
tolua_region_set_plane);
tolua_variable(L, TOLUA_CAST "name", tolua_region_get_name, tolua_variable(L, TOLUA_CAST "name", tolua_region_get_name,
tolua_region_set_name); tolua_region_set_name);
tolua_variable(L, TOLUA_CAST "morale", tolua_region_get_morale, tolua_variable(L, TOLUA_CAST "morale", tolua_region_get_morale,

View File

@ -5283,7 +5283,6 @@ int sp_fetchastral(castorder * co)
spellparameter *pa = co->par; spellparameter *pa = co->par;
double power = co->force; double power = co->force;
int remaining_cap = (int)((power - 3) * 1500); int remaining_cap = (int)((power - 3) * 1500);
region_list *rtl = NULL;
region *rt = co_get_region(co); /* region to which we are fetching */ region *rt = co_get_region(co); /* region to which we are fetching */
region *ro = NULL; /* region in which the target is */ region *ro = NULL; /* region in which the target is */
@ -5305,21 +5304,13 @@ int sp_fetchastral(castorder * co)
if (u->region != ro) { if (u->region != ro) {
/* this can happen several times if the units are from different astral /* this can happen several times if the units are from different astral
* regions. Only possible on the intersections of schemes */ * regions. Only possible on the intersections of schemes */
region_list *rfind;
if (!is_astral(u->region)) { if (!is_astral(u->region)) {
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order, ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
"spellfail_astralonly", "")); "spellfail_astralonly", ""));
continue; continue;
} }
if (rtl != NULL) if (r_standard_to_astral(mage->region) != u->region) {
free_regionlist(rtl);
rtl = astralregions(u->region, NULL);
for (rfind = rtl; rfind != NULL; rfind = rfind->next) {
if (rfind->data == mage->region)
break;
}
if (rfind == NULL) {
/* the region r is not in the schemes of rt */ /* the region r is not in the schemes of rt */
ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order, ADDMSG(&mage->faction->msgs, msg_feedback(mage, co->order,
"spellfail_distance", "target", u)); "spellfail_distance", "target", u));
@ -5401,8 +5392,6 @@ int sp_fetchastral(castorder * co)
if (m) if (m)
msg_release(m); msg_release(m);
} }
if (rtl != NULL)
free_regionlist(rtl);
return cast_level; return cast_level;
} }