rendered paste bodyIndex: server/spell_effect.c
===================================================================
RCS file: /cvsroot/crossfire/crossfire/server/spell_effect.c,v
retrieving revision 1.144
diff -C5 -r1.144 spell_effect.c
*** server/spell_effect.c 16 Nov 2005 08:16:09 -0000 1.144
--- server/spell_effect.c 22 Nov 2005 03:42:27 -0000
***************
*** 1866,1905 ****
/* This function removes the cursed/damned status on equipped
* items.
*/
int remove_curse(object *op, object *caster, object *spell) {
object *tmp;
! int success = 0, was_one = 0;
! for (tmp = op->inv; tmp; tmp = tmp->below)
! if (QUERY_FLAG(tmp, FLAG_APPLIED) &&
! ((QUERY_FLAG(tmp, FLAG_CURSED) && QUERY_FLAG(spell, FLAG_CURSED)) ||
! (QUERY_FLAG(tmp, FLAG_DAMNED) && QUERY_FLAG(spell, FLAG_DAMNED)))) {
!
! was_one++;
! if (tmp->level <= caster_level(caster, spell)) {
! success++;
if (QUERY_FLAG(spell, FLAG_DAMNED))
CLEAR_FLAG(tmp, FLAG_DAMNED);
-
CLEAR_FLAG(tmp, FLAG_CURSED);
CLEAR_FLAG(tmp, FLAG_KNOWN_CURSED);
- tmp->value = 0; /* Still can't sell it */
if (op->type == PLAYER)
esrv_send_item(op, tmp);
}
}
!
if (op->type==PLAYER) {
if (success) {
new_draw_info(NDI_UNIQUE, 0,op, "You feel like some of your items are looser now.");
! } else {
! if (was_one)
! new_draw_info(NDI_UNIQUE, 0,op, "You failed to remove the curse.");
! else
! new_draw_info(NDI_UNIQUE, 0,op, "You are not using any cursed items.");
! }
}
return success;
}
/* Identifies objects in the players inventory/on the ground */
--- 1866,1920 ----
/* This function removes the cursed/damned status on equipped
* items.
*/
int remove_curse(object *op, object *caster, object *spell) {
object *tmp;
! int success = 0, num_uncurse = 0;
! num_uncurse = spell->stats.dam + SP_level_dam_adjust(caster, spell);
! if (num_uncurse < 1) num_uncurse=1;
!
! for (tmp = op->inv; tmp; tmp = tmp->below) {
! if ((QUERY_FLAG(tmp, FLAG_CURSED) && QUERY_FLAG(spell, FLAG_CURSED)) ||
! (QUERY_FLAG(tmp, FLAG_DAMNED) && QUERY_FLAG(spell, FLAG_DAMNED))) {
! num_uncurse--;
! success=1;
! if (QUERY_FLAG(spell, FLAG_DAMNED))
! CLEAR_FLAG(tmp, FLAG_DAMNED);
! CLEAR_FLAG(tmp, FLAG_CURSED);
! CLEAR_FLAG(tmp, FLAG_KNOWN_CURSED);
! if (op->type == PLAYER)
! esrv_send_item(op, tmp);
! if (!num_uncurse) break;
! }
! }
!
! /* If all the power of the spell has been used up, don't go and uncurse
! * stuff on the floor. Only uncurse stuff on the floor if the spell
! * was not fully used.
! */
! if (num_uncurse) {
! for(tmp = get_map_ob(op->map,op->x,op->y);tmp!=NULL;tmp=tmp->above) {
! if ((QUERY_FLAG(tmp, FLAG_CURSED) && QUERY_FLAG(spell, FLAG_CURSED)) ||
! (QUERY_FLAG(tmp, FLAG_DAMNED) && QUERY_FLAG(spell, FLAG_DAMNED))) {
! num_uncurse--;
! success=1;
if (QUERY_FLAG(spell, FLAG_DAMNED))
CLEAR_FLAG(tmp, FLAG_DAMNED);
CLEAR_FLAG(tmp, FLAG_CURSED);
CLEAR_FLAG(tmp, FLAG_KNOWN_CURSED);
if (op->type == PLAYER)
esrv_send_item(op, tmp);
+ if (!num_uncurse) break;
}
}
! }
if (op->type==PLAYER) {
if (success) {
new_draw_info(NDI_UNIQUE, 0,op, "You feel like some of your items are looser now.");
! } else
! new_draw_info(NDI_UNIQUE, 0,op, "You can't reach any cursed items.");
}
return success;
}
/* Identifies objects in the players inventory/on the ground */