/* Destroy Later */
o_ptr->marked |= OM_AUTODESTROY;
p_ptr->update |= PU_AUTODESTROY;
-
- return;
}
/*
* Auto-destroy marked item
*/
-static void autopick_delayed_alter_aux(floor_type *floor_ptr, INVENTORY_IDX item)
+static void autopick_delayed_alter_aux(player_type *player_ptr, INVENTORY_IDX item)
{
object_type *o_ptr;
-
o_ptr = REF_ITEM(p_ptr, p_ptr->current_floor_ptr, item);
- if (o_ptr->k_idx && (o_ptr->marked & OM_AUTODESTROY))
- {
- GAME_TEXT o_name[MAX_NLEN];
+ if (o_ptr->k_idx == 0 || !(o_ptr->marked & OM_AUTODESTROY)) return;
- /* Describe the object (with {terrible/special}) */
- object_desc(o_name, o_ptr, 0);
+ GAME_TEXT o_name[MAX_NLEN];
- /* Eliminate the item (from the pack) */
- if (item >= 0)
- {
- inven_item_increase(item, -(o_ptr->number));
- inven_item_optimize(item);
- }
+ /* Describe the object (with {terrible/special}) */
+ object_desc(o_name, o_ptr, 0);
- /* Eliminate the item (from the floor) */
- else
- {
- delete_object_idx(floor_ptr, 0 - item);
- }
+ /* Eliminate the item (from the pack) */
+ if (item >= 0)
+ {
+ inven_item_increase(player_ptr, item, -(o_ptr->number));
+ inven_item_optimize(item);
+ }
- msg_format(_("%sを自動破壊します。", "Auto-destroying %s."), o_name);
+ /* Eliminate the item (from the floor) */
+ else
+ {
+ delete_object_idx(player_ptr->current_floor_ptr, 0 - item);
}
+
+ msg_format(_("%sを自動破壊します。", "Auto-destroying %s."), o_name);
}
/*
* Auto-destroy marked items in inventry and on floor
*/
-void autopick_delayed_alter(floor_type *floor_ptr)
+void autopick_delayed_alter(player_type *owner_ptr)
{
INVENTORY_IDX item;
* skipping after inven_item_optimize()
*/
for (item = INVEN_TOTAL - 1; item >= 0 ; item--)
- autopick_delayed_alter_aux(floor_ptr, item);
+ autopick_delayed_alter_aux(owner_ptr, item);
/* Scan the pile of objects */
item = p_ptr->current_floor_ptr->grid_array[p_ptr->y][p_ptr->x].o_idx;
while (item)
{
OBJECT_IDX next = p_ptr->current_floor_ptr->o_list[item].next_o_idx;
- autopick_delayed_alter_aux(floor_ptr, -item);
+ autopick_delayed_alter_aux(owner_ptr, -item);
item = next;
}
}
extern concptr autopick_line_from_entry(autopick_type *entry);
extern int is_autopick(object_type *o_ptr);
extern void autopick_alter_item(INVENTORY_IDX item, bool destroy);
-extern void autopick_delayed_alter(floor_type *floor_ptr);
+extern void autopick_delayed_alter(player_type *player_ptr);
extern void autopick_pickup_items(grid_type *g_ptr);
extern bool autopick_autoregister(object_type *o_ptr);
extern void do_cmd_edit_autopick(player_type *player_ptr);
/* Decrease the item (from the pack) */
if (item >= 0)
{
- inven_item_increase(item, -1);
+ inven_item_increase(creature_ptr, item, -1);
inven_item_optimize(item);
}
}
}
- if (n > 0)
- {
- int bmax;
- int tr_idx = cand[randint0(n)];
- add_flag(to_ptr->art_flags, tr_idx);
- if (is_pval_flag(tr_idx)) to_ptr->pval = MAX(to_ptr->pval, 1);
- bmax = MIN(3, MAX(1, 40 / (to_ptr->dd * to_ptr->ds)));
- if (tr_idx == TR_BLOWS) to_ptr->pval = MIN(to_ptr->pval, bmax);
- if (tr_idx == TR_SPEED) to_ptr->pval = MIN(to_ptr->pval, 4);
- }
-
- return;
+ if (n <= 0) return;
+
+ int tr_idx = cand[randint0(n)];
+ add_flag(to_ptr->art_flags, tr_idx);
+ if (is_pval_flag(tr_idx)) to_ptr->pval = MAX(to_ptr->pval, 1);
+ int bmax = MIN(3, MAX(1, 40 / (to_ptr->dd * to_ptr->ds)));
+ if (tr_idx == TR_BLOWS) to_ptr->pval = MIN(to_ptr->pval, bmax);
+ if (tr_idx == TR_SPEED) to_ptr->pval = MIN(to_ptr->pval, 4);
}
/*!
* @brief アイテム修復処理のメインルーチン / Repair broken weapon
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param bcost 基本修復費用
* @return 実際にかかった費用
*/
-static PRICE repair_broken_weapon_aux(PRICE bcost)
+static PRICE repair_broken_weapon_aux(player_type *player_ptr, PRICE bcost)
{
PRICE cost;
OBJECT_IDX item, mater;
calc_android_exp(p_ptr);
/* Decrease material object */
- inven_item_increase(mater, -1);
+ inven_item_increase(player_ptr, mater, -1);
inven_item_optimize(mater);
/* Copyback */
/*!
* @brief アイテム修復処理の過渡ルーチン / Repair broken weapon
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param bcost 基本鑑定費用
* @return 実際にかかった費用
*/
-static int repair_broken_weapon(PRICE bcost)
+static int repair_broken_weapon(player_type *player_ptr, PRICE bcost)
{
PRICE cost;
screen_save();
- cost = repair_broken_weapon_aux(bcost);
+ cost = repair_broken_weapon_aux(player_ptr, bcost);
screen_load();
return cost;
}
case BACT_BROKEN_WEAPON:
paid = TRUE;
- bcost = repair_broken_weapon(bcost);
+ bcost = repair_broken_weapon(player_ptr, bcost);
break;
}
if (paid) player_ptr->au -= bcost;
}
+
/*!
* @brief 施設入り口にプレイヤーが乗った際の処理 / Do building commands
* @param プレーヤーへの参照ポインタ
if (item >= 0)
{
- inven_item_increase(item, -1);
+ inven_item_increase(creature_ptr, item, -1);
if (!return_when_thrown)
inven_item_describe(creature_ptr, item);
inven_item_optimize(item);
/* Decrease the item (from the pack) */
if (item >= 0)
{
- inven_item_increase(item, -1);
+ inven_item_increase(creature_ptr, item, -1);
inven_item_optimize(item);
}
/* Decrease the item (from the floor) */
if (o_ptr->k_idx)
{
/* Take off existing item */
- (void)inven_takeoff(slot, 255);
+ (void)inven_takeoff(creature_ptr, slot, 255);
}
/* Wear the new stuff */
if (item == INVEN_RARM)
{
- if (has_melee_weapon(owner_ptr, INVEN_LARM))
- {
- o_ptr = &owner_ptr->inventory_list[INVEN_LARM];
- object_desc(o_name, o_ptr, 0);
+ if (!has_melee_weapon(owner_ptr, INVEN_LARM)) return;
- if (!object_is_cursed(o_ptr))
- {
- new_o_ptr = &owner_ptr->inventory_list[INVEN_RARM];
- object_copy(new_o_ptr, o_ptr);
- owner_ptr->total_weight += o_ptr->weight;
- inven_item_increase(INVEN_LARM, -((int)o_ptr->number));
- inven_item_optimize(INVEN_LARM);
- if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING())
- msg_format(_("%sを両手で構えた。", "You are wielding %s with both hands."), o_name);
- else
- msg_format(_("%sを%sで構えた。", "You are wielding %s in your %s hand."), o_name,
- (left_hander ? _("左手", "left") : _("右手", "right")));
- }
- else
- {
- if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING())
- msg_format(_("%sを両手で構えた。", "You are wielding %s with both hands."), o_name);
- }
- }
- }
- else if (item == INVEN_LARM)
- {
- o_ptr = &owner_ptr->inventory_list[INVEN_RARM];
- if (o_ptr->k_idx) object_desc(o_name, o_ptr, 0);
+ o_ptr = &owner_ptr->inventory_list[INVEN_LARM];
+ object_desc(o_name, o_ptr, 0);
- if (has_melee_weapon(owner_ptr, INVEN_RARM))
+ if (object_is_cursed(o_ptr))
{
if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING())
msg_format(_("%sを両手で構えた。", "You are wielding %s with both hands."), o_name);
+ return;
}
- else if (!(empty_hands(owner_ptr, FALSE) & EMPTY_HAND_RARM) && !object_is_cursed(o_ptr))
- {
- new_o_ptr = &owner_ptr->inventory_list[INVEN_LARM];
- object_copy(new_o_ptr, o_ptr);
- owner_ptr->total_weight += o_ptr->weight;
- inven_item_increase(INVEN_RARM, -((int)o_ptr->number));
- inven_item_optimize(INVEN_RARM);
- msg_format(_("%sを持ち替えた。", "You switched hand of %s."), o_name);
- }
+
+ new_o_ptr = &owner_ptr->inventory_list[INVEN_RARM];
+ object_copy(new_o_ptr, o_ptr);
+ owner_ptr->total_weight += o_ptr->weight;
+ inven_item_increase(owner_ptr, INVEN_LARM, -((int)o_ptr->number));
+ inven_item_optimize(INVEN_LARM);
+ if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING())
+ msg_format(_("%sを両手で構えた。", "You are wielding %s with both hands."), o_name);
+ else
+ msg_format(_("%sを%sで構えた。", "You are wielding %s in your %s hand."), o_name,
+ (left_hander ? _("左手", "left") : _("右手", "right")));
+ return;
}
+
+ if (item != INVEN_LARM) return;
+
+ o_ptr = &owner_ptr->inventory_list[INVEN_RARM];
+ if (o_ptr->k_idx) object_desc(o_name, o_ptr, 0);
+
+ if (has_melee_weapon(owner_ptr, INVEN_RARM))
+ {
+ if (object_allow_two_hands_wielding(o_ptr) && CAN_TWO_HANDS_WIELDING())
+ msg_format(_("%sを両手で構えた。", "You are wielding %s with both hands."), o_name);
+ return;
+ }
+
+ if ((empty_hands(owner_ptr, FALSE) & EMPTY_HAND_RARM) || object_is_cursed(o_ptr)) return;
+
+ new_o_ptr = &owner_ptr->inventory_list[INVEN_LARM];
+ object_copy(new_o_ptr, o_ptr);
+ owner_ptr->total_weight += o_ptr->weight;
+ inven_item_increase(owner_ptr, INVEN_RARM, -((int)o_ptr->number));
+ inven_item_optimize(INVEN_RARM);
+ msg_format(_("%sを持ち替えた。", "You switched hand of %s."), o_name);
}
take_turn(creature_ptr, 50);
/* Take off the item */
- (void)inven_takeoff(item, 255);
+ (void)inven_takeoff(creature_ptr, item, 255);
verify_equip_slot(creature_ptr, item);
calc_android_exp(creature_ptr);
creature_ptr->redraw |= (PR_EQUIPPY);
}
/* Steal the items */
- inven_item_increase(i, -1);
+ inven_item_increase(target_ptr, i, -1);
inven_item_optimize(i);
obvious = TRUE;
#endif
/* Steal the items */
- inven_item_increase(i, -1);
+ inven_item_increase(target_ptr, i, -1);
inven_item_optimize(i);
obvious = TRUE;
}
}
-
/* Analyze "visible" monsters only */
if (is_original_ap_and_seen(m_ptr) && !do_silly_attack)
{
extern void vary_item(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER num);
extern void inven_item_charges(player_type *owner_ptr, INVENTORY_IDX item);
extern void inven_item_describe(player_type *owner_ptr, INVENTORY_IDX item);
-extern void inven_item_increase(INVENTORY_IDX item, ITEM_NUMBER num);
+extern void inven_item_increase(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER num);
extern void inven_item_optimize(INVENTORY_IDX item);
extern void floor_item_charges(INVENTORY_IDX item);
extern void floor_item_describe(INVENTORY_IDX item);
extern bool inven_carry_okay(object_type *o_ptr);
extern bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr);
extern s16b inven_carry(player_type *owner_ptr, object_type *o_ptr);
-extern INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt);
+extern INVENTORY_IDX inven_takeoff(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER amt);
extern void drop_from_inventory(player_type *owner_type, INVENTORY_IDX item, ITEM_NUMBER amt);
extern void combine_pack(player_type *owner_ptr);
extern void reorder_pack(void);
{
if (item >= 0)
{
- inven_item_increase(item, num);
+ inven_item_increase(owner_ptr, item, num);
inven_item_describe(owner_ptr, item);
inven_item_optimize(item);
}
* @param num 増やしたい量
* @return なし
*/
-void inven_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
+void inven_item_increase(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER num)
{
- object_type *o_ptr = &p_ptr->inventory_list[item];
+ object_type *o_ptr = &owner_ptr->inventory_list[item];
/* Apply */
num += o_ptr->number;
num -= o_ptr->number;
/* Change the number and weight */
- if (num)
- {
- /* Add the number */
- o_ptr->number += num;
+ if (num != 0) return;
- /* Add the weight */
- p_ptr->total_weight += (num * o_ptr->weight);
- p_ptr->update |= (PU_BONUS);
- p_ptr->update |= (PU_MANA);
- p_ptr->update |= (PU_COMBINE);
- p_ptr->window |= (PW_INVEN | PW_EQUIP);
+ /* Add the number */
+ o_ptr->number += num;
- /* Hack -- Clear temporary elemental brands if player takes off weapons */
- if (!o_ptr->number && p_ptr->ele_attack)
- {
- if ((item == INVEN_RARM) || (item == INVEN_LARM))
- {
- if (!has_melee_weapon(p_ptr, INVEN_RARM + INVEN_LARM - item))
- {
- /* Clear all temporary elemental brands */
- set_ele_attack(p_ptr, 0, 0);
- }
- }
- }
- }
+ /* Add the weight */
+ owner_ptr->total_weight += (num * o_ptr->weight);
+ owner_ptr->update |= (PU_BONUS);
+ owner_ptr->update |= (PU_MANA);
+ owner_ptr->update |= (PU_COMBINE);
+ owner_ptr->window |= (PW_INVEN | PW_EQUIP);
+
+ /* Hack -- Clear temporary elemental brands if player takes off weapons */
+ if (o_ptr->number || !owner_ptr->ele_attack) return;
+ if (!(item == INVEN_RARM) && !(item == INVEN_LARM)) return;
+ if (has_melee_weapon(owner_ptr, INVEN_RARM + INVEN_LARM - item)) return;
+
+ /* Clear all temporary elemental brands */
+ set_ele_attack(owner_ptr, 0, 0);
}
* to fall to the ground.\n
* Return the inventory slot into which the item is placed.\n
*/
-INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt)
+INVENTORY_IDX inven_takeoff(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER amt)
{
INVENTORY_IDX slot;
/* Get the item to take off */
- o_ptr = &p_ptr->inventory_list[item];
+ o_ptr = &owner_ptr->inventory_list[item];
if (amt <= 0) return (-1);
/* Verify */
}
/* Modify, Optimize */
- inven_item_increase(item, -amt);
+ inven_item_increase(owner_ptr, item, -amt);
inven_item_optimize(item);
/* Carry the object */
- slot = inven_carry(p_ptr, q_ptr);
+ slot = inven_carry(owner_ptr, q_ptr);
#ifdef JP
msg_format("%s(%c)%s。", o_name, index_to_label(slot), act);
if (item >= INVEN_RARM)
{
/* Take off first */
- item = inven_takeoff(item, amt);
+ item = inven_takeoff(owner_ptr, item, amt);
/* Access original object */
o_ptr = &owner_ptr->inventory_list[item];
reduce_charges(o_ptr, amt);
/* Destroy "amt" items */
- inven_item_increase(i, -amt);
+ inven_item_increase(player_ptr, i, -amt);
inven_item_optimize(i);
}
}
if (creature_ptr->update & (PU_AUTODESTROY))
{
creature_ptr->update &= ~(PU_AUTODESTROY);
- autopick_delayed_alter(floor_ptr);
+ autopick_delayed_alter(creature_ptr);
}
+
if (creature_ptr->update & (PU_COMBINE))
{
creature_ptr->update &= ~(PU_COMBINE);
object_type forge;
object_copy(&forge, o_ptr);
- inven_item_increase(inv, (0 - o_ptr->number));
+ inven_item_increase(creature_ptr, inv, (0 - o_ptr->number));
inven_item_optimize(inv);
OBJECT_IDX o_idx = drop_near(creature_ptr, &forge, 0, creature_ptr->y, creature_ptr->x);
o_ptr = &creature_ptr->current_floor_ptr->o_list[o_idx];
if (item >= 0)
{
- inven_item_increase(item, 1 - (o_ptr->number));
+ inven_item_increase(caster_ptr, item, 1 - (o_ptr->number));
}
else
{
q_ptr->timeout = 0;
/* Take the item from the player, describe the result */
- inven_item_increase(item, -amt);
+ inven_item_increase(owner_ptr, item, -amt);
inven_item_describe(owner_ptr, item);
/* If items remain, auto-inscribe before optimizing */