Prevent pack corruption

This commit is contained in:
jl777
2019-03-06 03:17:32 -11:00
parent 53b12740a3
commit 25e1e4c703
4 changed files with 24 additions and 24 deletions

View File

@@ -308,7 +308,8 @@ attack(struct rogue_state *rs,THING *mp)
mp=NULL; mp=NULL;
leave_pack(rs,steal, FALSE, FALSE); leave_pack(rs,steal, FALSE, FALSE);
msg(rs,"she stole %s!", inv_name(steal, TRUE)); msg(rs,"she stole %s!", inv_name(steal, TRUE));
discard(steal); if ( steal->o_count <= 0 )
discard(steal);
} }
} }
otherwise: otherwise:
@@ -600,8 +601,7 @@ remove_mon(struct rogue_state *rs,coord *mp, THING *tp, bool waskill)
detach(tp->t_pack, obj); detach(tp->t_pack, obj);
if (waskill) if (waskill)
fall(rs,obj, FALSE); fall(rs,obj, FALSE);
else if ( obj->o_count <= 0 ) else discard(obj);
discard(obj);
} }
moat(mp->y, mp->x) = NULL; moat(mp->y, mp->x) = NULL;
mvaddch(mp->y, mp->x, tp->t_oldch); mvaddch(mp->y, mp->x, tp->t_oldch);

View File

@@ -220,7 +220,7 @@ quaff(struct rogue_state *rs)
call_it(rs,&pot_info[obj->o_which]); call_it(rs,&pot_info[obj->o_which]);
if (discardit) if (discardit)
discard(obj); discard(obj);
return; return;
} }

View File

@@ -313,7 +313,7 @@ def:
call_it(rs,&scr_info[obj->o_which]); call_it(rs,&scr_info[obj->o_which]);
if (discardit) if (discardit)
discard(obj); discard(obj);
} }
/* /*

View File

@@ -129,28 +129,28 @@ fall(struct rogue_state *rs,THING *obj, bool pr)
if (fallpos(&obj->o_pos, &fpos)) if (fallpos(&obj->o_pos, &fpos))
{ {
pp = INDEX(fpos.y, fpos.x); pp = INDEX(fpos.y, fpos.x);
pp->p_ch = (char) obj->o_type; pp->p_ch = (char) obj->o_type;
obj->o_pos = fpos; obj->o_pos = fpos;
if (cansee(rs,fpos.y, fpos.x)) if (cansee(rs,fpos.y, fpos.x))
{ {
if (pp->p_monst != NULL) if (pp->p_monst != NULL)
pp->p_monst->t_oldch = (char) obj->o_type; pp->p_monst->t_oldch = (char) obj->o_type;
else else
mvaddch(fpos.y, fpos.x, obj->o_type); mvaddch(fpos.y, fpos.x, obj->o_type);
} }
attach(lvl_obj, obj); attach(lvl_obj, obj);
return; return;
} }
if (pr) if (pr)
{ {
if (has_hit) if (has_hit)
{ {
endmsg(rs); endmsg(rs);
has_hit = FALSE; has_hit = FALSE;
} }
msg(rs,"the %s vanishes as it hits the ground", msg(rs,"the %s vanishes as it hits the ground",
weap_info[obj->o_which].oi_name); weap_info[obj->o_which].oi_name);
} }
discard(obj); discard(obj);
} }