X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fstore.c;h=78494bcf3b062eda7c11b9ce6c6cc6e0906306a4;hb=f310b7f2422be36c54051e24e238f5b9bec07264;hp=211ecde23a6a3ef16734521162650cbfdc0367a5;hpb=aa2a23ea768c9bd91b80a66f6c72d73d9bf6e82e;p=hengband%2Fhengband.git diff --git a/src/store.c b/src/store.c index 211ecde23..78494bcf3 100644 --- a/src/store.c +++ b/src/store.c @@ -11,25 +11,40 @@ */ #include "angband.h" +#include "core.h" #include "util.h" +#include "term.h" #include "floor.h" +#include "cmd-basic.h" +#include "cmd-dump.h" #include "cmd-item.h" #include "cmd-smith.h" #include "cmd-zapwand.h" #include "cmd-magiceat.h" +#include "spells.h" #include "store.h" #include "avatar.h" #include "cmd-spell.h" #include "rumor.h" #include "player-status.h" +#include "player-class.h" +#include "player-inventory.h" #include "object-flavor.h" #include "object-hook.h" #include "floor-events.h" #include "snipe.h" #include "files.h" #include "player-effects.h" +#include "player-race.h" #include "mind.h" +#include "world.h" +#include "objectkind.h" +#include "autopick.h" +#include "floor-town.h" +#include "japanese.h" +#include "view-mainwindow.h" +#include "wild.h" #define MIN_STOCK 12 @@ -1878,8 +1893,8 @@ static void purchase_analyze(PRICE price, PRICE value, PRICE guess) if ((value <= 0) && (price > value)) { msg_print(comment_7a[randint0(MAX_COMMENT_7A)]); - chg_virtue(V_HONOUR, -1); - chg_virtue(V_JUSTICE, -1); + chg_virtue(p_ptr, V_HONOUR, -1); + chg_virtue(p_ptr, V_JUSTICE, -1); sound(SOUND_STORE1); } @@ -1887,8 +1902,8 @@ static void purchase_analyze(PRICE price, PRICE value, PRICE guess) else if ((value < guess) && (price > value)) { msg_print(comment_7b[randint0(MAX_COMMENT_7B)]); - chg_virtue(V_JUSTICE, -1); - if (one_in_(4)) chg_virtue(V_HONOUR, -1); + chg_virtue(p_ptr, V_JUSTICE, -1); + if (one_in_(4)) chg_virtue(p_ptr, V_HONOUR, -1); sound(SOUND_STORE2); } @@ -1896,8 +1911,8 @@ static void purchase_analyze(PRICE price, PRICE value, PRICE guess) else if ((value > guess) && (value < (4 * guess)) && (price < value)) { msg_print(comment_7c[randint0(MAX_COMMENT_7C)]); - if (one_in_(4)) chg_virtue(V_HONOUR, -1); - else if (one_in_(4)) chg_virtue(V_HONOUR, 1); + if (one_in_(4)) chg_virtue(p_ptr, V_HONOUR, -1); + else if (one_in_(4)) chg_virtue(p_ptr, V_HONOUR, 1); sound(SOUND_STORE3); } @@ -1905,9 +1920,9 @@ static void purchase_analyze(PRICE price, PRICE value, PRICE guess) else if ((value > guess) && (price < value)) { msg_print(comment_7d[randint0(MAX_COMMENT_7D)]); - if (one_in_(2)) chg_virtue(V_HONOUR, -1); - if (one_in_(4)) chg_virtue(V_HONOUR, 1); - if (10 * price < value) chg_virtue(V_SACRIFICE, 1); + if (one_in_(2)) chg_virtue(p_ptr, V_HONOUR, -1); + if (one_in_(4)) chg_virtue(p_ptr, V_HONOUR, 1); + if (10 * price < value) chg_virtue(p_ptr, V_SACRIFICE, 1); sound(SOUND_STORE4); } } @@ -2168,7 +2183,7 @@ static byte rgold_adj[MAX_RACES][MAX_RACES] = * @param o_ptr 店舗に並べるオブジェクト構造体の参照ポインタ * @param greed 店主の強欲度 * @param flip TRUEならば店主にとっての買取価格、FALSEなら売出価格を計算 - * @return なし + * @return アイテムの店舗価格 * @details *
  * This function takes into account the player's charisma, and the
@@ -2184,12 +2199,11 @@ static byte rgold_adj[MAX_RACES][MAX_RACES] =
  * "greed" value is always something (?).
  * 
*/ -static s32b price_item(object_type *o_ptr, int greed, bool flip) +static PRICE price_item(object_type *o_ptr, int greed, bool flip) { - int factor; - int adjust; - s32b price; - + int factor; + int adjust; + PRICE price; /* Get the value of one of the items */ price = object_value(o_ptr); @@ -2197,7 +2211,6 @@ static s32b price_item(object_type *o_ptr, int greed, bool flip) /* Worthless items */ if (price <= 0) return (0L); - /* Compute the racial factor */ factor = rgold_adj[ot_ptr->owner_race][p_ptr->prace]; @@ -3003,7 +3016,7 @@ bool combine_and_reorder_home(int store_num) /*! * @brief 我が家にオブジェクトを加える / - * Add the item "o_ptr" to the inventory of the "Home" + * Add the item "o_ptr" to the p_ptr->inventory_list of the "Home" * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ * @return 収めた先のID * @details @@ -3097,7 +3110,7 @@ static int home_carry(object_type *o_ptr) /* Insert the new item */ st_ptr->stock[slot] = *o_ptr; - chg_virtue(V_SACRIFICE, -1); + chg_virtue(p_ptr, V_SACRIFICE, -1); (void)combine_and_reorder_home(cur_store_num); @@ -3108,7 +3121,7 @@ static int home_carry(object_type *o_ptr) /*! * @brief 店舗にオブジェクトを加える / - * Add the item "o_ptr" to a real stores inventory. + * Add the item "o_ptr" to a real stores p_ptr->inventory_list. * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ * @return 収めた先のID * @details @@ -3213,7 +3226,7 @@ static int store_carry(object_type *o_ptr) /*! * @brief 店舗のオブジェクト数を増やす / - * Add the item "o_ptr" to a real stores inventory. + * Add the item "o_ptr" to a real stores p_ptr->inventory_list. * @param item 増やしたいアイテムのID * @param num 増やしたい数 * @return なし @@ -3379,11 +3392,9 @@ static void store_create(void) object_type forge; object_type *q_ptr; - /* Paranoia -- no room left */ if (st_ptr->stock_num >= st_ptr->stock_size) return; - /* Hack -- consider up to four items */ for (tries = 0; tries < 4; tries++) { @@ -3394,7 +3405,7 @@ static void store_create(void) level = 25 + randint0(25); /* Random item (usually of given level) */ - i = get_obj_num(level); + i = get_obj_num(level, 0x00000000); /* Handle failure */ if (!i) continue; @@ -3674,7 +3685,7 @@ static void display_entry(int pos) /*! * @brief 店の商品リストを表示する / - * Displays a store's inventory -RAK- + * Displays a store's p_ptr->inventory_list -RAK- * @return なし * @details * All prices are listed as "per individual object". -BEN- @@ -3820,7 +3831,7 @@ static void display_store(void) /* Display the current gold */ store_prt_gold(); - /* Draw in the inventory */ + /* Draw in the p_ptr->inventory_list */ display_inventory(); } @@ -4698,9 +4709,9 @@ static void store_purchase(void) say_comment_1(); if (cur_store_num == STORE_BLACK) /* The black market is illegal! */ - chg_virtue(V_JUSTICE, -1); + chg_virtue(p_ptr, V_JUSTICE, -1); if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME)) - chg_virtue(V_NATURE, -1); + chg_virtue(p_ptr, V_NATURE, -1); /* Make a sound */ sound(SOUND_BUY); @@ -4728,10 +4739,10 @@ static void store_purchase(void) strcpy(record_o_name, o_name); record_turn = current_world_ptr->game_turn; - if (record_buy) do_cmd_write_nikki(NIKKI_BUY, 0, o_name); + if (record_buy) exe_write_diary(p_ptr, NIKKI_BUY, 0, o_name); object_desc(o_name, o_ptr, OD_NAME_ONLY); if(record_rand_art && o_ptr->art_name) - do_cmd_write_nikki(NIKKI_ART, 0, o_name); + exe_write_diary(p_ptr, NIKKI_ART, 0, o_name); /* Erase the inscription */ j_ptr->inscription = 0; @@ -4743,7 +4754,7 @@ static void store_purchase(void) item_new = inven_carry(j_ptr); /* Describe the final result */ - object_desc(o_name, &inventory[item_new], 0); + object_desc(o_name, &p_ptr->inventory_list[item_new], 0); msg_format(_("%s(%c)を手に入れた。", "You have %s (%c)."), o_name, index_to_label(item_new)); /* Auto-inscription */ @@ -4790,7 +4801,7 @@ static void store_purchase(void) msg_print(_("店主は新たな在庫を取り出した。", "The shopkeeper brings out some new stock.")); } - /* New inventory */ + /* New p_ptr->inventory_list */ for (i = 0; i < 10; i++) { /* Maintain the store */ @@ -4839,7 +4850,7 @@ static void store_purchase(void) item_new = inven_carry(j_ptr); /* Describe just the result */ - object_desc(o_name, &inventory[item_new], 0); + object_desc(o_name, &p_ptr->inventory_list[item_new], 0); msg_format(_("%s(%c)を取った。", "You have %s (%c)."), o_name, index_to_label(item_new)); handle_stuff(); @@ -4872,7 +4883,7 @@ static void store_purchase(void) else if (store_top >= st_ptr->stock_num) store_top -= store_bottom; display_inventory(); - chg_virtue(V_SACRIFICE, 1); + chg_virtue(p_ptr, V_SACRIFICE, 1); } } @@ -4931,7 +4942,7 @@ static void store_sell(void) s = _("欲しい物がないですねえ。", "You have nothing that I want."); } - o_ptr = choose_object(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT)); + o_ptr = choose_object(p_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), 0); if (!o_ptr) return; /* Hack -- Cannot remove cursed items */ @@ -5017,10 +5028,10 @@ static void store_sell(void) /* Be happy */ if (cur_store_num == STORE_BLACK) /* The black market is illegal! */ - chg_virtue(V_JUSTICE, -1); + chg_virtue(p_ptr, V_JUSTICE, -1); if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME)) - chg_virtue(V_NATURE, 1); + chg_virtue(p_ptr, V_NATURE, 1); decrease_insults(); /* Get some money */ @@ -5062,7 +5073,7 @@ static void store_sell(void) /* Describe the result (in message buffer) */ msg_format(_("%sを $%ldで売却しました。", "You sold %s for %ld gold."), o_name, (long)price); - if (record_sell) do_cmd_write_nikki(NIKKI_SELL, 0, o_name); + if (record_sell) exe_write_diary(p_ptr, NIKKI_SELL, 0, o_name); if (!((o_ptr->tval == TV_FIGURINE) && (value > 0))) { @@ -5127,7 +5138,7 @@ static void store_sell(void) msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item)); choice = 0; - /* Take it from the players inventory */ + /* Take it from the players p_ptr->inventory_list */ inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); @@ -5152,7 +5163,7 @@ static void store_sell(void) choice = 0; - /* Take it from the players inventory */ + /* Take it from the players p_ptr->inventory_list */ inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); @@ -5171,8 +5182,8 @@ static void store_sell(void) if ((choice == 0) && (item >= INVEN_RARM)) { - calc_android_exp(); - kamaenaoshi(item); + calc_android_exp(p_ptr); + verify_equip_slot(p_ptr, item); } } @@ -5311,6 +5322,7 @@ static bool leave_store = FALSE; /*! * @brief 店舗処理コマンド選択のメインルーチン / * Process a command in a store + * @param client_ptr 顧客となるクリーチャーの参照ポインタ * @return なし * @note *
@@ -5320,7 +5332,7 @@ static bool leave_store = FALSE;
  * but not in the stores, to prevent chaos.
  * 
*/ -static void store_process_command(void) +static void store_process_command(player_type *client_ptr) { /* Handle repeating the last command */ repeat_check(); @@ -5345,7 +5357,7 @@ static void store_process_command(void) case '-': { if (st_ptr->stock_num <= store_bottom) { - msg_print(_("これで全部です。", "Entire inventory is shown.")); + msg_print(_("これで全部です。", "Entire client_ptr->inventory_list is shown.")); } else{ store_top -= store_bottom; @@ -5363,7 +5375,7 @@ static void store_process_command(void) { if (st_ptr->stock_num <= store_bottom) { - msg_print(_("これで全部です。", "Entire inventory is shown.")); + msg_print(_("これで全部です。", "Entire client_ptr->inventory_list is shown.")); } else { @@ -5393,7 +5405,7 @@ static void store_process_command(void) case KTRL('R'): { - do_cmd_redraw(); + do_cmd_redraw(client_ptr); display_store(); break; } @@ -5430,35 +5442,35 @@ static void store_process_command(void) /* Wear/wield equipment */ case 'w': { - do_cmd_wield(); + do_cmd_wield(client_ptr); break; } /* Take off equipment */ case 't': { - do_cmd_takeoff(); + do_cmd_takeoff(client_ptr); break; } /* Destroy an item */ case 'k': { - do_cmd_destroy(); + do_cmd_destroy(client_ptr); break; } /* Equipment list */ case 'e': { - do_cmd_equip(); + do_cmd_equip(client_ptr); break; } /* Inventory list */ case 'i': { - do_cmd_inven(); + do_cmd_inven(client_ptr); break; } @@ -5468,14 +5480,13 @@ static void store_process_command(void) /* Identify an object */ case 'I': { - do_cmd_observe(); + do_cmd_observe(client_ptr); break; } - /* Hack -- toggle windows */ case KTRL('I'): { - toggle_inven_equip(); + toggle_inven_equip(client_ptr); break; } @@ -5484,32 +5495,32 @@ static void store_process_command(void) /* Browse a book */ case 'b': { - if ( (p_ptr->pclass == CLASS_MINDCRAFTER) || - (p_ptr->pclass == CLASS_BERSERKER) || - (p_ptr->pclass == CLASS_NINJA) || - (p_ptr->pclass == CLASS_MIRROR_MASTER) + if ( (client_ptr->pclass == CLASS_MINDCRAFTER) || + (client_ptr->pclass == CLASS_BERSERKER) || + (client_ptr->pclass == CLASS_NINJA) || + (client_ptr->pclass == CLASS_MIRROR_MASTER) ) do_cmd_mind_browse(); - else if (p_ptr->pclass == CLASS_SMITH) - do_cmd_kaji(TRUE); - else if (p_ptr->pclass == CLASS_MAGIC_EATER) - do_cmd_magic_eater(TRUE, FALSE); - else if (p_ptr->pclass == CLASS_SNIPER) - do_cmd_snipe_browse(); - else do_cmd_browse(); + else if (client_ptr->pclass == CLASS_SMITH) + do_cmd_kaji(client_ptr, TRUE); + else if (client_ptr->pclass == CLASS_MAGIC_EATER) + do_cmd_magic_eater(client_ptr, TRUE, FALSE); + else if (client_ptr->pclass == CLASS_SNIPER) + do_cmd_snipe_browse(client_ptr); + else do_cmd_browse(client_ptr); break; } /* Inscribe an object */ case '{': { - do_cmd_inscribe(); + do_cmd_inscribe(client_ptr); break; } /* Uninscribe an object */ case '}': { - do_cmd_uninscribe(); + do_cmd_uninscribe(client_ptr); break; } @@ -5534,9 +5545,9 @@ static void store_process_command(void) /* Character description */ case 'C': { - p_ptr->town_num = old_town_num; - do_cmd_change_name(); - p_ptr->town_num = inner_town_num; + client_ptr->town_num = old_town_num; + do_cmd_player_status(client_ptr); + client_ptr->town_num = inner_town_num; display_store(); break; } @@ -5554,36 +5565,36 @@ static void store_process_command(void) /* Single line from a pref file */ case '"': { - p_ptr->town_num = old_town_num; + client_ptr->town_num = old_town_num; do_cmd_pref(); - p_ptr->town_num = inner_town_num; + client_ptr->town_num = inner_town_num; break; } /* Interact with macros */ case '@': { - p_ptr->town_num = old_town_num; - do_cmd_macros(); - p_ptr->town_num = inner_town_num; + client_ptr->town_num = old_town_num; + do_cmd_macros(client_ptr); + client_ptr->town_num = inner_town_num; break; } /* Interact with visuals */ case '%': { - p_ptr->town_num = old_town_num; - do_cmd_visuals(); - p_ptr->town_num = inner_town_num; + client_ptr->town_num = old_town_num; + do_cmd_visuals(client_ptr); + client_ptr->town_num = inner_town_num; break; } /* Interact with colors */ case '&': { - p_ptr->town_num = old_town_num; - do_cmd_colors(); - p_ptr->town_num = inner_town_num; + client_ptr->town_num = old_town_num; + do_cmd_colors(client_ptr); + client_ptr->town_num = inner_town_num; break; } @@ -5592,7 +5603,7 @@ static void store_process_command(void) { do_cmd_options(); (void)combine_and_reorder_home(STORE_HOME); - do_cmd_redraw(); + do_cmd_redraw(client_ptr); display_store(); break; } @@ -5616,7 +5627,7 @@ static void store_process_command(void) /* Repeat level feeling */ case KTRL('F'): { - do_cmd_feeling(); + do_cmd_feeling(client_ptr); break; } @@ -5751,11 +5762,11 @@ void do_cmd_store(void) town_info[p_ptr->town_num].store[which].last_visit = current_world_ptr->game_turn; } - forget_lite(); + forget_lite(current_floor_ptr); forget_view(); /* Hack -- Character is in "icky" mode */ - character_icky = TRUE; + current_world_ptr->character_icky = TRUE; /* command reset */ command_arg = 0; @@ -5790,8 +5801,6 @@ void do_cmd_store(void) { /* Hack -- Clear line 1 */ prt("", 1, 0); - - /* Clear */ clear_from(20 + xtra_stock); /* Basic commands */ @@ -5846,7 +5855,7 @@ void do_cmd_store(void) request_command(TRUE); /* Process the command */ - store_process_command(); + store_process_command(p_ptr); /* * Hack -- To redraw missiles damage and prices in store @@ -5855,16 +5864,16 @@ void do_cmd_store(void) need_redraw_store_inv = (p_ptr->update & PU_BONUS) ? TRUE : FALSE; /* Hack -- Character is still in "icky" mode */ - character_icky = TRUE; + current_world_ptr->character_icky = TRUE; handle_stuff(); /* Pack Overflow */ - if (inventory[INVEN_PACK].k_idx) + if (p_ptr->inventory_list[INVEN_PACK].k_idx) { INVENTORY_IDX item = INVEN_PACK; - object_type *o_ptr = &inventory[item]; + object_type *o_ptr = &p_ptr->inventory_list[item]; /* Hack -- Flee from the store */ if (cur_store_num != STORE_HOME) @@ -5906,7 +5915,7 @@ void do_cmd_store(void) msg_format(_("%sが落ちた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item)); - /* Remove it from the players inventory */ + /* Remove it from the players p_ptr->inventory_list */ inven_item_increase(item, -255); inven_item_describe(item); inven_item_optimize(item); @@ -5932,14 +5941,14 @@ void do_cmd_store(void) if (st_ptr->store_open >= current_world_ptr->game_turn) leave_store = TRUE; } - select_floor_music(); + select_floor_music(p_ptr); p_ptr->town_num = old_town_num; take_turn(p_ptr, 100); /* Hack -- Character is no longer in "icky" mode */ - character_icky = FALSE; + current_world_ptr->character_icky = FALSE; /* Hack -- Cancel automatic command */ command_new = 0; @@ -6036,7 +6045,7 @@ void store_shuffle(int which) /*! * @brief 店の品揃えを変化させる / - * Maintain the inventory at the stores. + * Maintain the p_ptr->inventory_list at the stores. * @param town_num 町のID * @param store_num 店舗種類のID * @return なし