summaryrefslogtreecommitdiff
path: root/src/map/magic-stmt.c
diff options
context:
space:
mode:
authorFate <fate-tmw@googlemail.com>2009-06-17 19:37:01 +0000
committerFate <fate-tmw@googlemail.com>2009-06-17 19:37:01 +0000
commit65e4adfc4f90aa087b7cde089029636257761a36 (patch)
tree79796c7ff6ff92712c8b5c028d4c2347f7407314 /src/map/magic-stmt.c
parent7fcff757d7896c321a3ae5c6c4c4195031265b43 (diff)
downloadtmwa-65e4adfc4f90aa087b7cde089029636257761a36.tar.gz
tmwa-65e4adfc4f90aa087b7cde089029636257761a36.tar.bz2
tmwa-65e4adfc4f90aa087b7cde089029636257761a36.tar.xz
tmwa-65e4adfc4f90aa087b7cde089029636257761a36.zip
Added extra checks to ensure spell invocations aren't incorrectly deleted
Diffstat (limited to 'src/map/magic-stmt.c')
-rw-r--r--src/map/magic-stmt.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/map/magic-stmt.c b/src/map/magic-stmt.c
index a8d42f1..e488c2b 100644
--- a/src/map/magic-stmt.c
+++ b/src/map/magic-stmt.c
@@ -76,8 +76,8 @@ clear_stack(invocation_t *invocation)
invocation->stack_size = 0;
}
-static void
-free_invocation(invocation_t *invocation)
+void
+spell_free_invocation(invocation_t *invocation)
{
if (invocation->status_change_refs) {
free(invocation->status_change_refs);
@@ -100,7 +100,7 @@ free_invocation(invocation_t *invocation)
magic_free_env(invocation->env);
map_delblock(&invocation->bl);
- map_delobject(invocation->bl.id); // also frees the object
+ map_delobject(invocation->bl.id, BL_SPELL); // also frees the object
// free(invocation);
}
@@ -152,12 +152,12 @@ magic_stop_completely(character_t *c)
c->sc_data[i].spell_invocation = 0;
while (c->active_spells)
- free_invocation(c->active_spells);
+ spell_free_invocation(c->active_spells);
if (c->attack_spell_override) {
invocation_t *attack_spell = (invocation_t *)map_id2bl(c->attack_spell_override);
if (attack_spell)
- free_invocation(attack_spell);
+ spell_free_invocation(attack_spell);
c->attack_spell_override = 0;
char_set_weapon_icon(c, 0, 0, 0);
char_set_attack_info(c, 0, 0);
@@ -175,7 +175,7 @@ try_to_finish_invocation(invocation_t *invocation)
invocation->end_effect = NULL;
spell_execute(invocation);
} else
- free_invocation(invocation);
+ spell_free_invocation(invocation);
}
}
@@ -517,7 +517,7 @@ op_override_attack(env_t *env, int args_nr, val_t *args)
if (subject->attack_spell_override) {
invocation_t *old_invocation = (invocation_t *)map_id2bl(subject->attack_spell_override);
if (old_invocation)
- free_invocation(old_invocation);
+ spell_free_invocation(old_invocation);
}
subject->attack_spell_override = trigger_spell(subject->bl.id, VAR(VAR_INVOCATION).v.v_int);
@@ -1452,7 +1452,7 @@ spell_attack(int caster_id, int target_id)
if (invocation
&& caster->attack_spell_override != invocation->bl.id) {
/* Attack spell changed / was refreshed */
- // free_invocation(invocation); // [Fate] This would be a double free.
+ // spell_free_invocation(invocation); // [Fate] This would be a double free.
} else if (!invocation
|| caster->attack_spell_charges <= 0) {
caster->attack_spell_override = 0;
@@ -1463,7 +1463,7 @@ spell_attack(int caster_id, int target_id)
pc_stopattack(caster);
if (invocation)
- free_invocation(invocation);
+ spell_free_invocation(invocation);
}
return 1;