test added: when a spell is not found, we do not have to pay for it

This commit is contained in:
Enno Rehling 2012-05-29 20:44:25 -07:00
parent 5e26d246a2
commit 44e5c60c96
2 changed files with 51 additions and 5 deletions

View File

@ -6,7 +6,49 @@ function setup()
free_game() free_game()
settings.set("magic.fumble.enable", "0") settings.set("magic.fumble.enable", "0")
settings.set("magic.regeneration.enable", "0") settings.set("magic.regeneration.enable", "0")
settings.set("rules.economy.food", "0") settings.set("rules.economy.food", "4")
end
function test_spell_payment()
local r = region.create(0,0, "plain")
local f = faction.create("spell_payment@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 12)
u.magic = "gwyrrd" -- calls create_mage
u:add_spell("create_roi")
local permaura = u:get_pooled("permaura")
u:add_item("money", 3000)
u.aura = 50
u:clear_orders()
u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit' ")
process_orders()
assert_equal(1, u:get_item("roi"))
assert_equal(0, u:get_item("money"))
assert_equal(0, u.aura)
assert_equal(permaura-1, u:get_pooled("permaura"))
end
function test_spell_not_found_no_payment()
local r = region.create(0,0, "plain")
local f = faction.create("spell_fails_no_payment@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("magic", 12)
u.magic = "gwyrrd" -- calls create_mage
local permaura = u:get_pooled("permaura")
u:add_item("money", 3000)
u.aura = 50
u:clear_orders()
u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit' ")
process_orders()
assert_equal(0, u:get_item("roi"))
assert_equal(3000, u:get_item("money"))
assert_equal(50, u.aura)
assert_equal(permaura, u:get_pooled("permaura"))
end end
function test_create_firesword() function test_create_firesword()

View File

@ -889,6 +889,7 @@ void pay_spell(unit * u, const spell * sp, int cast_level, int range)
int k; int k;
int resuse; int resuse;
assert(cast_level>0);
for (k = 0; sp->components[k].type; k++) { for (k = 0; sp->components[k].type; k++) {
if (sp->components[k].type == r_aura) { if (sp->components[k].type == r_aura) {
resuse = spellcost(u, sp) * range; resuse = spellcost(u, sp) * range;
@ -1394,7 +1395,7 @@ static void do_fumble(castorder * co)
case 5: case 5:
case 6: case 6:
/* Spruch gelingt, aber alle Magiepunkte weg */ /* Spruch gelingt, aber alle Magiepunkte weg */
sp->cast(co); co->level = sp->cast(co);
set_spellpoints(u, 0); set_spellpoints(u, 0);
ADDMSG(&u->faction->msgs, msg_message("patzer4", "unit region spell", ADDMSG(&u->faction->msgs, msg_message("patzer4", "unit region spell",
u, r, sp)); u, r, sp));
@ -1405,7 +1406,7 @@ static void do_fumble(castorder * co)
case 9: case 9:
default: default:
/* Spruch gelingt, alle nachfolgenden Sprüche werden 2^4 so teuer */ /* Spruch gelingt, alle nachfolgenden Sprüche werden 2^4 so teuer */
sp->cast(co); co->level = sp->cast(co);
ADDMSG(&u->faction->msgs, msg_message("patzer5", "unit region spell", ADDMSG(&u->faction->msgs, msg_message("patzer5", "unit region spell",
u, r, sp)); u, r, sp));
countspells(u, 3); countspells(u, 3);
@ -2839,10 +2840,13 @@ void magic(void)
} }
} }
} }
pay_spell(u, sp, co->level, co->distance);
/* erst bezahlen, dann Kostenzähler erhöhen */ /* erst bezahlen, dann Kostenzähler erhöhen */
if (fumbled) if (fumbled) {
do_fumble(co); do_fumble(co);
}
if (co->level>0) {
pay_spell(u, sp, co->level, co->distance);
}
countspells(u, 1); countspells(u, 1);
} }
} }