void vanish(object *obj, short rm, object *pack) { if (obj->quantity > 1) { obj->quantity--; } else { if (obj->in_use_flags & BEING_WIELDED) { unwield(obj); } else if (obj->in_use_flags & BEING_WORN) { unwear(obj); } else if (obj->in_use_flags & ON_EITHER_HAND) { un_put_on(obj); } take_from_pack(obj, pack); free_object(obj); } if (rm) { reg_move(); } }
void steal_item(object *monster) { object *obj; short i, n, t = 0; /* 未初期化変数の使用の警告のための初期化。 0 を代入 */ char desc[80]; boolean has_something = 0; if (rand_percent(15)) { return; } obj = rogue.pack.next_object; if (!obj) { goto DSPR; } #if !defined( ORIGINAL ) while (obj) { if ((obj->what_is == RING) && (obj->which_kind == ADORNMENT) && (obj->in_use_flags & ON_EITHER_HAND) && (obj->is_cursed == 0)) { un_put_on(obj); goto adornment; } obj = obj->next_object; } obj = rogue.pack.next_object; #endif /* ORIGINAL */ while (obj) { if (!(obj->in_use_flags & BEING_USED)) { has_something = 1; break; } obj = obj->next_object; } if (!has_something) { goto DSPR; } n = get_rand(0, MAX_PACK_COUNT); obj = rogue.pack.next_object; for (i = 0; i <= n; i++) { obj = obj->next_object; while ((!obj) || (obj->in_use_flags & BEING_USED)) { if (!obj) { obj = rogue.pack.next_object; } else { obj = obj->next_object; } } } #if !defined( ORIGINAL ) adornment: #endif /* not ORIGINAL */ #if !defined( JAPAN ) (void) strcpy(desc, mesg[205]); #endif /* JAPAN */ if (obj->what_is != WEAPON) { t = obj->quantity; obj->quantity = 1; } #if defined( JAPAN ) get_desc(obj, desc, 0); (void) strcat(desc, mesg[205]); #else /* not JAPAN */ get_desc(obj, desc + 10, 0); #endif /* not JAPAN */ message(desc, 0); obj->quantity = ((obj->what_is != WEAPON) ? t : 1); vanish(obj, 0, &rogue.pack); DSPR: disappear(monster); }