repair lua spells (bad stack index)

add a whole bunch more spell tests
allow spell tests to disable fumbles
This commit is contained in:
Enno Rehling 2012-05-29 18:08:56 -07:00
parent 347ff0dd77
commit cb0e406733
4 changed files with 116 additions and 22 deletions

View File

@ -5,25 +5,117 @@ module("tests.spells", package.seeall, lunit.testcase)
function setup()
free_game()
settings.set("magic.fumble.enable", "0")
settings.set("magic.regeneration.enable", "0")
settings.set("rules.economy.food", "0")
end
function test_roi()
function test_create_firesword()
local r = region.create(0,0, "plain")
local f = faction.create("noreply@eressea.de", "human", "de")
local f = faction.create("create_firesword@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u.race = "elf"
u:set_skill("magic", 10)
u:add_item("money", 3010)
f.magic = "gwyrrd"
u.magic = "gwyrrd"
u.aura = 200
u.ship = s1
u:set_skill("magic", 12)
u:add_spell("create_firesword")
-- local err = u:add_spell("create_roi")
-- assert_equal(0, err)
u:clear_orders()
u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit' ")
process_orders()
write_reports()
u:cast_spell('create_firesword', 1)
assert_equal(1, u:get_item("firesword"))
end
function test_create_roi()
local r = region.create(0,0, "plain")
local f = faction.create("create_roi@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_roi')
assert_equal(1, u:get_item("roi"))
end
function test_create_roqf()
local r = region.create(0,0, "plain")
local f = faction.create("create_roqf@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_roqf')
assert_equal(1, u:get_item("roqf"))
end
function test_create_aots()
local r = region.create(0,0, "plain")
local f = faction.create("create_aots@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_aots')
assert_equal(1, u:get_item("aots"))
end
function test_create_ror()
local r = region.create(0,0, "plain")
local f = faction.create("create_ror@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_ror')
assert_equal(1, u:get_item("ror"))
end
function test_create_magicherbbag()
local r = region.create(0,0, "plain")
local f = faction.create("create_magicherbbag@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_magicherbbag')
assert_equal(1, u:get_item("magicherbbag"))
end
function test_create_trollbelt()
local r = region.create(0,0, "plain")
local f = faction.create("create_trollbelt@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_trollbelt')
assert_equal(1, u:get_item("trollbelt"))
end
function test_create_dreameye()
local r = region.create(0,0, "plain")
local f = faction.create("create_dreameye@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_dreameye')
assert_equal(1, u:get_item("dreameye"))
end
function test_create_antimagic()
local r = region.create(0,0, "plain")
local f = faction.create("create_antimagic@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_antimagic')
assert_equal(1, u:get_item("antimagic"))
end
function test_create_runesword()
local r = region.create(0,0, "plain")
local f = faction.create("create_runesword@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_runesword')
assert_equal(1, u:get_item("runesword"))
end
function test_create_rop()
local r = region.create(0,0, "plain")
local f = faction.create("create_rop@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 10)
u:cast_spell('create_rop')
assert_equal(1, u:get_item("rop"))
end

View File

@ -1070,7 +1070,7 @@ static int tolua_eventbus_register(lua_State * L)
{
void *sender = tolua_tousertype(L, 1, 0);
const char *event = tolua_tostring(L, 2, 0);
event_args *args = malloc(sizeof(event_args));
event_args *args = (event_args *)malloc(sizeof(event_args));
args->sendertype = sender ? tolua_typename(L, 1) : NULL;
lua_pushvalue(L, 3);
args->hfunction = luaL_ref(L, LUA_REGISTRYINDEX);
@ -1259,10 +1259,8 @@ int tolua_eressea_open(lua_State * L)
tolua_function(L, TOLUA_CAST "itoa36", tolua_itoa36);
tolua_function(L, TOLUA_CAST "dice_roll", tolua_dice_rand);
tolua_function(L, TOLUA_CAST "get_nmrs", tolua_get_nmrs);
tolua_function(L, TOLUA_CAST "remove_empty_units",
tolua_remove_empty_units);
tolua_function(L, TOLUA_CAST "update_subscriptions",
tolua_update_subscriptions);
tolua_function(L, TOLUA_CAST "remove_empty_units", tolua_remove_empty_units);
tolua_function(L, TOLUA_CAST "update_subscriptions", tolua_update_subscriptions);
tolua_function(L, TOLUA_CAST "update_scores", tolua_update_scores);
tolua_function(L, TOLUA_CAST "update_owners", tolua_update_owners);
tolua_function(L, TOLUA_CAST "learn_skill", tolua_learn_skill);

View File

@ -203,7 +203,7 @@ static int lua_callspell(castorder * co)
lua_pushstring(L, fname);
lua_rawget(L, LUA_GLOBALSINDEX);
if (lua_isfunction(L, 1)) {
if (lua_isfunction(L, -1)) {
int nparam = 4;
tolua_pushusertype(L, r, TOLUA_CAST "region");
tolua_pushusertype(L, caster, TOLUA_CAST "unit");
@ -236,7 +236,8 @@ static int lua_callspell(castorder * co)
lua_pop(L, 1);
}
} else {
log_error("spell(%s) calling '%s': not a function.\n", unitname(caster), fname);
int ltype = lua_type(L, -1);
log_error("spell(%s) calling '%s': not a function, has type %d.\n", unitname(caster), fname, ltype);
lua_pop(L, 1);
}

View File

@ -1452,6 +1452,9 @@ void regeneration_magiepunkte(void)
double reg_aura;
int regen;
double mod;
int regen_enabled = get_param_int(global.parameters, "magic.regeneration.enable", 1);
if (!regen_enabled) return;
for (r = regions; r; r = r->next) {
for (u = r->units; u; u = u->next) {