Ejemplo n.º 1
0
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();
	}
}
Ejemplo n.º 2
0
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);
}