设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2372|回复: 2
打印 上一主题 下一主题

[已经解决] 物品仓库 !和银行脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
133 小时
注册时间
2016-4-28
帖子
210
跳转到指定楼层
1
发表于 2016-6-2 21:33:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
物品仓库 !和银行脚本  哪个阁下有吗?

Lv3.寻梦者

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
帖子
813

开拓者

2
发表于 2016-6-4 12:22:39 | 只看该作者
  1. #==============================================================================
  2. # ■ RGSS3 アイテム預かり所 Ver1.04 by 星潟
  3. #------------------------------------------------------------------------------
  4. # アイテムを預ける事が出来るようになります。
  5. # 莫大な数のアイテムが登場する作品におすすめです。
  6. #
  7. # 最大所持数を越える量のアイテムを引き出せないようにする機能や
  8. # 預けられないアイテムの作成、預けられる数の限界設定の他、
  9. # アイテムの預かり・引き出しに関わるイベントコマンドをいくつか実装します。
  10. #==============================================================================
  11. # アイテム・武器・防具のメモ欄に以下のように書き込む事で
  12. # それぞれ特殊な設定が行われます。
  13. #------------------------------------------------------------------------------
  14. # <保存禁止>
  15. #
  16. # このアイテムは預かり所で預ける事が出来ません。
  17. #------------------------------------------------------------------------------
  18. # <保存制限:20>
  19. #
  20. # このアイテムは預かり所にも20個までしか預ける事が出来ません。
  21. #==============================================================================
  22. # 以下、イベントコマンドのスクリプトで使用します。
  23. #------------------------------------------------------------------------------
  24. # SceneManager.call(Scene_Item_Keep)
  25. #
  26. # call_keep
  27. #
  28. # アイテム預かり所画面を呼び出します。
  29. # (どちらでもいいですが、call_keepの方が安定しています)
  30. #------------------------------------------------------------------------------
  31. # item_keep_all(data_a)
  32. #
  33. # data_aが0の時……預けられるアイテムを預けられるだけ預けます。
  34. # data_aが1の時……アイテムを全て引き出せるだけ引き出します。
  35. #------------------------------------------------------------------------------
  36. # weapon_keep_all(data_a)
  37. #
  38. # data_aが0の時……預けられる武器を預けられるだけ預けます。
  39. # data_aが1の時……武器を全て引き出せるだけ引き出します。
  40. #------------------------------------------------------------------------------
  41. # armor_keep_all(data_a)
  42. #
  43. # data_aが0の時……預けられる防具を預けられるだけ預けます。
  44. # data_aが1の時……防具を全て引き出せるだけ引き出します。
  45. #------------------------------------------------------------------------------
  46. # item_keep_get(vid,id)
  47. #
  48. # id番のアイテムを預けている数を変数IDvidに格納します。
  49. #------------------------------------------------------------------------------
  50. # weapon_keep_get(vid,id)
  51. #
  52. # id番の武器を預けている数を変数IDvidに格納します。
  53. #------------------------------------------------------------------------------
  54. # armor_keep_get(vid,id)
  55. #
  56. # id番の防具を預けている数を変数IDvidに格納します。
  57. #------------------------------------------------------------------------------
  58. # item_keep(data_a, data_b)
  59. #
  60. # data_aが0の時……data_bで指定したIDのアイテムを預けられるだけ預けます。
  61. # data_aが1の時……data_bで指定したIDのアイテムを引き出せるだけ引き出します。
  62. #------------------------------------------------------------------------------
  63. # weapon_keep(data_a, data_b)
  64. #
  65. # data_aが0の時……data_bで指定したIDの武器を預けられるだけ預けます。
  66. # data_aが1の時……data_bで指定したIDの武器を引き出せるだけ引き出します。
  67. #------------------------------------------------------------------------------
  68. # armor_keep(data_a, data_b)
  69. #
  70. # data_aが0の時……data_bで指定したIDの防具を預けられるだけ預けます。
  71. # data_aが1の時……data_bで指定したIDの防具を引き出せるだけ引き出します。
  72. #------------------------------------------------------------------------------
  73. # word_keep_all(data_a, data_b)
  74. #
  75. # data_aが0の時
  76. # data_bで指定した言葉がメモ欄に含まれる
  77. # アイテム・武器・防具を預けられるだけ預けます。
  78. #
  79. # data_aが1の時
  80. # data_bで指定した言葉がメモ欄に含まれる
  81. # アイテム・武器・防具を引き出せるだけ引き出します。
  82. #
  83. # word_keep_allで、data_bで設定する言葉は、前後を""で囲んでください。
  84. # 【例.word_keep_all(1, "回復")】
  85. # この場合、回復という言葉をメモ欄に含んだアイテム・武器・防具を
  86. # 預かり所から全て引き出します。
  87. #==============================================================================
  88. # Ver1.01 導入前のセーブデータを使用した場合に正常に機能しなくなる不具合を修正。
  89. #         軽量化スクリプトと統合し、軽量化モード切替機能を追加。
  90. #         説明ウィンドウ機能を追加。
  91. #
  92. # Ver1.02 一部機能を更に軽量化。
  93. #         Scene_Shop及び継承しているシーンクラスにおいて
  94. #         買った物を直接預かり所へ送る機能を追加。
  95. #         所持限界数を超えてアイテムを入手した際に
  96. #         自動的に預かり所に送る機能を追加。
  97. #
  98. # Ver1.03 ロード時に更に一部軽量化。
  99. #
  100. # Ver1.04 呼び出しコマンドを1つ追加。
  101. #         また、指定アイテム/武器/防具の倉庫に預けている数を
  102. #         変数に取得するイベントコマンドのスクリプトを追加。
  103. #==============================================================================
  104. module ITEM_KEEPER
  105.   
  106.   #ショップ画面で預かり所への売買機能を付与するかを設定できます。
  107.   
  108.   SHOP      = true
  109.   
  110.   #ショップ画面で預かり所モードへの切り替えボタンを設定できます。
  111.   
  112.   KEY       = :Z
  113.   
  114.   #預かり所モードから所持品モードに切り替えた際のメッセージを設定します。
  115.   
  116.   TEXT1     = "所持品モードに切り替えます"
  117.   
  118.   #所持品モードから預かり所モードに切り替えた際のメッセージを設定します。
  119.   
  120.   TEXT2     = "預かり所モードに切り替えます"
  121.   
  122.   #モードに切り替え時のSEを設定します。
  123.   #配列内は、名前、音量、ピッチの順に設定して下さい。
  124.   
  125.   SE        = ["Decision3",80,100]
  126.   
  127.   #ショップでの預けている数の項目名を設定します。
  128.   
  129.   SHOP_POS  = "預けている数"
  130.   
  131.   #預かり所モードの際の数字入力幅の増加値を設定します。(3桁以上の入力を考慮)
  132.   
  133.   SHOP_FIG  = 1
  134.   
  135.   #ショップでの預り所への売買機能を無効化する為のスイッチを指定します。
  136.   
  137.   SWITCH1   = 201
  138.   
  139.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  140.   #true 表示しない false 表示する
  141.   
  142.   UNVISIBLE = false
  143.   
  144.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  145.   #true 表示しない false 表示する
  146.   
  147.   WORD1     = "保存禁止"
  148.   
  149.   #保存に個数制限を設ける為の設定用キーワードです。
  150.   
  151.   WORD2     = "保存制限"
  152.   
  153.   #保存制限のないアイテムについていくつまで預けられるかを設定します。
  154.   
  155.   LIMIT     = 999
  156.   
  157.   #所持数を超えて入手したアイテムが自動で預かり所に送られるかどうかを設定します。
  158.   
  159.   AUTOKEEP  = true
  160.   
  161.   #所持数を超えて入手したアイテムが自動で預かり所に送られる機能を
  162.   #一時的に封印するスイッチを指定します。
  163.   
  164.   SWITCH2   = 202
  165.   
  166.   #説明ウィンドウを表示するかどうかを設定します。
  167.   
  168.   DESCRIPT  = true
  169.   
  170.   #数量ウィンドウと説明ウィンドウの背景透明度を変更します。
  171.   
  172.   B_OPACITY = 255
  173.   
  174.   #軽量化フラグ。
  175.   
  176.   FLAG      = true
  177.   
  178.   #説明ウィンドウに表示する項目を設定します。
  179.   #(基本的にこの部分を変更する必要はありません)
  180.   
  181.   D         = [
  182.   ["下キー",":1個引き出す"],
  183.   ["上キー",":1個預ける"],
  184.   ["左キー",":10個引き出す"],
  185.   ["右キー",":10個預ける"],
  186.   ["CTRLキー",":100個引き出す"],
  187.   ["SHIFTキー",":100個預ける"]
  188.   ]
  189.   
  190. end
  191. class RPG::BaseItem
  192.   #--------------------------------------------------------------------------
  193.   # 保存禁止のフラグ
  194.   #--------------------------------------------------------------------------
  195.   def keep_seal_flag
  196.    
  197.     #キャッシュがある場合はキャッシュを返す。
  198.    
  199.     return @keep_seal_flag if @keep_seal_flag != nil
  200.    
  201.     #データを取得。
  202.    
  203.     @keep_seal_flag = self.note.include?("<" + ITEM_KEEPER::WORD1 + ">") ? true : false
  204.    
  205.     #データを返す。
  206.    
  207.     @keep_seal_flag
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # 最大保管数を取得
  211.   #--------------------------------------------------------------------------
  212.   def max_item_keep_number
  213.    
  214.     #キャッシュが存在する場合はキャッシュを返す。
  215.    
  216.     return @max_item_keep_number if @max_item_keep_number != nil
  217.    
  218.     #メモ欄からデータを取得し、取得できない場合はデフォルト数を返す。
  219.    
  220.     memo = self.note.scan(/<#{ITEM_KEEPER::WORD2}[::](\S+)>/).flatten
  221.     @max_item_keep_number = memo != nil && !memo.empty? ? memo[0].to_i : ITEM_KEEPER::LIMIT
  222.    
  223.     #データを返す。
  224.    
  225.     @max_item_keep_number
  226.   end
  227. end
  228. class Game_Party < Game_Unit
  229.   #--------------------------------------------------------------------------
  230.   # オブジェクト初期化
  231.   #--------------------------------------------------------------------------
  232.   alias initialize_ik initialize
  233.   def initialize
  234.    
  235.     #本来の処理を実行。
  236.    
  237.     initialize_ik
  238.    
  239.     #パーティー外全アイテムリストを初期化。
  240.    
  241.     init_all_items_ik
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # パーティー外全アイテムリストの初期化(強制)
  245.   #--------------------------------------------------------------------------
  246.   def init_all_items_ik
  247.    
  248.     #それぞれ、空のハッシュを生成。
  249.    
  250.     @items_k = {}
  251.     @weapons_k = {}
  252.     @armors_k = {}
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # パーティー外全アイテムリストの初期化(nilの場合)
  256.   #--------------------------------------------------------------------------
  257.   def init_all_items_ik_un_nil
  258.    
  259.     #それぞれ、存在しない場合のみハッシュを生成。
  260.    
  261.     @items_k = {} if @items_k == nil
  262.     @weapons_k = {} if @weapons_k == nil
  263.     @armors_k = {} if @armors_k == nil
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # アイテムの最大保管数取得
  267.   #--------------------------------------------------------------------------
  268.   def max_item_keep_number(item)
  269.    
  270.     #アイテムが存在しない場合はfalseを返す。
  271.    
  272.     return false if item == nil
  273.    
  274.     #アイテムの最大保管数を返す。
  275.    
  276.     item.max_item_keep_number
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # アイテムの保管数取得
  280.   #--------------------------------------------------------------------------
  281.   def item_keep_number(item)
  282.    
  283.     #コンテナを取得。
  284.    
  285.     container = item_keep_container(item.class)
  286.    
  287.     #コンテナにデータが存在しない場合は0を返す。
  288.    
  289.     container ? container[item.id] || 0 : 0
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # アイテムの保管
  293.   #--------------------------------------------------------------------------
  294.   def item_keep(item, number, get = false)
  295.    
  296.     #数量データを取得。
  297.    
  298.     number_data = number
  299.    
  300.     #アイテム保管を実行。
  301.    
  302.     item_keep_execute(item, number_data)
  303.    
  304.     #所持アイテムを減らす。
  305.    
  306.     gain_item(item, -number_data) if get == false
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # 預けているアイテムのクラスに対応するコンテナオブジェクトを取得
  310.   #--------------------------------------------------------------------------
  311.   def item_keep_container(item_class)
  312.    
  313.     #アイテムの種類に応じてコンテナを取得。
  314.    
  315.     return @items_k   if item_class == RPG::Item
  316.     return @weapons_k if item_class == RPG::Weapon
  317.     return @armors_k  if item_class == RPG::Armor
  318.     return nil
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # アイテムの増加(減少)
  322.   #--------------------------------------------------------------------------
  323.   def item_keep_execute(item, amount)
  324.    
  325.     #コンテナを取得。
  326.    
  327.     container = item_keep_container(item.class)
  328.    
  329.     #コンテナが存在しない場合は処理をしない。
  330.    
  331.     return if container == nil
  332.    
  333.     #処理前の保管数を取得。
  334.    
  335.     last_number = item_keep_number(item)
  336.    
  337.     #処理後の保管数を取得。
  338.    
  339.     new_number = last_number + amount
  340.    
  341.     #保管数を変更する。
  342.    
  343.     container[item.id] = new_number
  344.    
  345.     #保管数が0となった場合はハッシュから削除する。
  346.    
  347.     container.delete(item.id) if container[item.id] == 0
  348.    
  349.     #マップのリフレッシュフラグを立てる。
  350.    
  351.     $game_map.need_refresh = true
  352.   end
  353.   
  354.   #自動倉庫送りが有効な場合のみ変更
  355.   
  356.   if ITEM_KEEPER::AUTOKEEP
  357.    
  358.   #--------------------------------------------------------------------------
  359.   # アイテムの増加(減少)
  360.   #--------------------------------------------------------------------------
  361.   alias gain_item_ik gain_item
  362.   def gain_item(item, amount, include_equip = false)
  363.       
  364.     #自動倉庫送りスイッチが無効もしくは、スイッチがOFFの時で
  365.     #なおかつアイテムが存在し、それが預かり所禁止出ない場合
  366.    
  367.     if (ITEM_KEEPER::SWITCH2 == 0 or !$game_switches[ITEM_KEEPER::SWITCH2]) && (item != nil && !item.keep_seal_flag)
  368.       
  369.       #アイテムコンテナを取得。
  370.       
  371.       container = item_container(item.class)
  372.       
  373.       #アイテムコンテナが存在しない場合は処理を飛ばす。
  374.       
  375.       return unless container
  376.       
  377.       #所持数と入手数の合計値を取得。
  378.       
  379.       ex_amount = item_number(item) + amount
  380.       
  381.       #合計値が最大所持数を上回る場合
  382.       
  383.       if ex_amount > max_item_number(item)
  384.         
  385.         #合計値から最大所持数を引いた値を取得。
  386.         
  387.         data = ex_amount - max_item_number(item)
  388.         
  389.         #倉庫アイテムコンテナを取得。
  390.         
  391.         ik_container = item_keep_container(item.class)
  392.         
  393.         #倉庫アイテムの数を変更する。
  394.         
  395.         ik_container[item.id] = [item_keep_number(item) + data, max_item_keep_number(item)].min
  396.         
  397.         #入手数を減らす。
  398.         
  399.         amount -= data
  400.       end
  401.     end
  402.    
  403.     #本来の処理を実行。
  404.    
  405.     gain_item_ik(item, amount, include_equip)
  406.   end
  407.   
  408.   end
  409. end
  410. class Scene_Load < Scene_File
  411.   #--------------------------------------------------------------------------
  412.   # ロード成功時の処理
  413.   #--------------------------------------------------------------------------
  414.   alias on_load_success_ik on_load_success
  415.   def on_load_success
  416.     $game_party.init_all_items_ik_un_nil
  417.     on_load_success_ik
  418.   end
  419. end
  420. class Scene_Item_Keep < Scene_Item
  421.   #--------------------------------------------------------------------------
  422.   # 開始処理
  423.   #--------------------------------------------------------------------------
  424.   def start
  425.    
  426.     #スーパークラスの処理を実行。
  427.    
  428.     super
  429.    
  430.     #説明ウィンドウの作成
  431.    
  432.     create_description_window
  433.    
  434.     #個数入力ウィンドウの作成
  435.    
  436.     create_number_window
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # カテゴリウィンドウの作成
  440.   #--------------------------------------------------------------------------
  441.   def create_category_window
  442.     @category_window = Window_ItemCategory.new
  443.     @category_window.viewport = @viewport
  444.     @category_window.help_window = @help_window
  445.     @category_window.y = @help_window.height
  446.     @category_window.set_handler(:ok,     method(:on_category_ok))
  447.     @category_window.set_handler(:cancel, method(:return_scene))
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # アイテムウィンドウの作成
  451.   #--------------------------------------------------------------------------
  452.   def create_item_window
  453.     wy = @category_window.y + @category_window.height
  454.     wh = Graphics.height - wy
  455.     @item_window = Window_PTItemList.new(0, wy, Graphics.width, wh)
  456.     @item_window.viewport = @viewport
  457.     @item_window.help_window = @help_window
  458.     @item_window.set_handler(:ok,     method(:on_item_ok))
  459.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  460.     @category_window.item_window = @item_window
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # 説明ウィンドウの作成
  464.   #--------------------------------------------------------------------------
  465.   def create_description_window
  466.    
  467.     #説明ウィンドウを作成しない場合は処理を行わない。
  468.    
  469.     return unless ITEM_KEEPER::DESCRIPT
  470.    
  471.     @description_window = Window_IKDescription.new
  472.     @description_window.z = 100
  473.     @description_window.viewport = @viewport
  474.   end
  475.   #--------------------------------------------------------------------------
  476.   # 個数入力ウィンドウの作成
  477.   #--------------------------------------------------------------------------
  478.   def create_number_window
  479.     @number_window = Window_IKInput.new
  480.     @number_window.z = 100
  481.     @number_window.item_window = @item_window
  482.     @number_window.description_window = @description_window if ITEM_KEEPER::DESCRIPT
  483.     @number_window.viewport = @viewport
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # カテゴリ[決定]
  487.   #--------------------------------------------------------------------------
  488.   def on_category_ok
  489.     @item_window.activate
  490.     @item_window.select_last
  491.     @category_window.deactivate
  492.   end
  493.   #--------------------------------------------------------------------------
  494.   # アイテム[決定]
  495.   #--------------------------------------------------------------------------
  496.   def on_item_ok
  497.     $game_party.last_item.object = item
  498.     item == nil ? @item_window.activate : determine_item
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # アイテムの決定
  502.   #--------------------------------------------------------------------------
  503.   def determine_item
  504.     @number_window.number = 0
  505.     item = @item_window.item
  506.     @number_window.show
  507.     @number_window.refresh
  508.     @description_window.show if ITEM_KEEPER::DESCRIPT
  509.     @item_window.deactivate
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # アイテム[キャンセル]
  513.   #--------------------------------------------------------------------------
  514.   def on_item_cancel
  515.     @item_window.unselect
  516.     @category_window.activate
  517.   end
  518. end
  519. #==============================================================================
  520. # ■ Window_PTItemList
  521. #------------------------------------------------------------------------------
  522. #  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
  523. #==============================================================================

  524. class Window_PTItemList < Window_ItemList
  525.   #--------------------------------------------------------------------------
  526.   # アイテムをリストに含めるかどうか
  527.   #--------------------------------------------------------------------------
  528.   alias include_ik? include? unless $!
  529.   def include?(item)
  530.    
  531.     #アイテムが存在しない場合、ウィンドウが不可視の場合
  532.     #保管禁止アイテムを非表示にする場合は表示しない。
  533.    
  534.     return false if item == nil
  535.     return false if self.visible == false
  536.     return false if ITEM_KEEPER::UNVISIBLE == true && item.keep_seal_flag
  537.    
  538.     #本来の処理を実行。
  539.    
  540.     include_ik?(item)
  541.   end
  542.   #--------------------------------------------------------------------------
  543.   # アイテムを許可状態で表示するかどうか
  544.   #--------------------------------------------------------------------------
  545.   def enable?(item)
  546.    
  547.     #アイテムが存在しない場合、もしくは保管禁止アイテムの場合はfalseを返す。
  548.    
  549.     return false if item == nil
  550.     return false if item.keep_seal_flag
  551.     return true
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # アイテムリストの作成
  555.   #--------------------------------------------------------------------------
  556.   def make_item_list
  557.    
  558.     #全ての中から、所持アイテムか倉庫アイテムとして存在する物のみ取得する。
  559.    
  560.     item_data = $data_items + $data_weapons + $data_armors
  561.     @data = item_data.select {|item| include?(item) && ($game_party.item_number(item) > 0 or $game_party.item_keep_number(item) > 0)}
  562.     @data.push(nil) if include?(nil)
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # 選択項目の有効状態を取得
  566.   #--------------------------------------------------------------------------
  567.   def current_item_enabled?
  568.     enable?(@data[index])
  569.   end
  570.   #--------------------------------------------------------------------------
  571.   # 桁数の取得
  572.   #--------------------------------------------------------------------------
  573.   def col_max
  574.     return 1
  575.   end
  576.   #--------------------------------------------------------------------------
  577.   # フレーム更新
  578.   #--------------------------------------------------------------------------
  579.   def update
  580.     super
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # 項目の描画
  584.   #--------------------------------------------------------------------------
  585.   def draw_item(index, flag = false)
  586.    
  587.     #データからアイテムを取得し、各種データを記述する。
  588.    
  589.     item = @data[index]
  590.    
  591.     #アイテムが存在しない場合は処理を行わない。
  592.    
  593.     return unless item
  594.    
  595.     rect = item_rect(index)
  596.     contents.clear_rect(rect) if flag
  597.     rect.width -= 4
  598.     draw_item_name(item, rect.x, rect.y, enable?(item))
  599.     change_color(text_color(5))
  600.     draw_text(180, rect.y, 100, line_height, "所持", 2)
  601.     change_color(text_color(0))
  602.     draw_text(220, rect.y, 100, line_height, $game_party.item_number(item), 2)
  603.     draw_text(240, rect.y, 100, line_height,"/", 2)
  604.     draw_text(270, rect.y, 100, line_height, $game_party.max_item_number(item), 2)
  605.     change_color(text_color(5))
  606.     draw_text(330, rect.y, 100, line_height, "倉庫", 2)
  607.     change_color(text_color(0))
  608.     draw_text(370, rect.y, 100, line_height, $game_party.item_keep_number(item), 2)
  609.     draw_text(390, rect.y, 100, line_height, "/", 2)
  610.     draw_text(420, rect.y, 100, line_height, $game_party.max_item_keep_number(item), 2)
  611.    
  612.   end
  613. end
  614. class Window_IKInput < Window_Selectable
  615.   #--------------------------------------------------------------------------
  616.   # 公開インスタンス変数
  617.   #--------------------------------------------------------------------------
  618.   attr_accessor   :item_window
  619.   attr_accessor   :number
  620.   attr_accessor   :description_window
  621.   #--------------------------------------------------------------------------
  622.   # オブジェクト初期化
  623.   #--------------------------------------------------------------------------
  624.   def initialize
  625.    
  626.     #ウィンドウを生成する。
  627.    
  628.     super(Graphics.width / 2 - 122, Graphics.height / 2 - 50, 244, 100)
  629.    
  630.     #設定に応じて背景透明度を変更する。
  631.    
  632.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  633.    
  634.     #一旦隠す。
  635.    
  636.     hide
  637.    
  638.     #非アクティブにする。
  639.    
  640.     deactivate
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # 数字の変更処理
  644.   #--------------------------------------------------------------------------
  645.   def update
  646.    
  647.     #見えない場合は更新しない。
  648.    
  649.     return unless self.visible
  650.    
  651.     #入力関連の各種処理を実行。
  652.    
  653.     if Input.press?(:UP) or Input.press?(:DOWN) or Input.press?(:RIGHT) or Input.press?(:LEFT) or Input.press?(Input::SHIFT) or Input.press?(Input::CTRL)
  654.       if Input.press?(Input::SHIFT)   #100個預ける
  655.         keep_exe(@item_window.item, 100)
  656.       elsif Input.press?(Input::CTRL) #100個引き出す
  657.         get_exe(@item_window.item, 100)
  658.       elsif Input.repeat?(:RIGHT)     #10個預ける
  659.         keep_exe(@item_window.item, 10)
  660.       elsif Input.repeat?(:LEFT)      #10個引き出す
  661.         get_exe(@item_window.item, 10)
  662.       elsif Input.repeat?(:UP)        #1個預ける
  663.         keep_exe(@item_window.item, 1)
  664.       elsif Input.repeat?(:DOWN)      #1個引き出す
  665.         get_exe(@item_window.item, 1)
  666.       end
  667.       refresh_number
  668.     end
  669.     if Input.trigger?(:C)
  670.       
  671.       #決定音を鳴らす。
  672.       
  673.       Sound.play_ok
  674.       
  675.       #数に応じてアイテム数を変更。
  676.       
  677.       $game_party.item_keep(@item_window.item, @number)
  678.       
  679.       #ウィンドウを隠す。
  680.       
  681.       self.hide
  682.       
  683.       #ウィンドウを非アクティブにする。
  684.       
  685.       self.deactivate
  686.       
  687.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  688.       
  689.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  690.       
  691.       #条件に応じてアイテムウィンドウを変更する。
  692.       
  693.       ITEM_KEEPER::FLAG ? @item_window.draw_item(@item_window.index, true) : @item_window.refresh
  694.       
  695.       #アイテムウィンドウをアクティブにする。
  696.       
  697.       @item_window.activate
  698.     elsif Input.trigger?(:B)
  699.       
  700.       #決定音を鳴らす。
  701.       
  702.       Sound.play_cancel
  703.       
  704.       #ウィンドウを隠す。
  705.       
  706.       self.hide
  707.       
  708.       #ウィンドウを非アクティブにする。
  709.       
  710.       self.deactivate
  711.       
  712.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  713.       
  714.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  715.       
  716.       #アイテムウィンドウをアクティブにする。
  717.       
  718.       @item_window.activate
  719.       
  720.     end
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # 預けられる限界をチェック
  724.   #--------------------------------------------------------------------------
  725.   def limitcheck1
  726.    
  727.     #所持数が既に0、もしくは預ける限界に達している場合はfalseを返す。
  728.    
  729.     return false if $game_party.item_number(@item_window.item) - @number == 0
  730.     return false if $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item)
  731.     return true
  732.   end
  733.   #--------------------------------------------------------------------------
  734.   # 引き出せる限界をチェック
  735.   #--------------------------------------------------------------------------
  736.   def limitcheck2
  737.    
  738.     #所持数が既に限界に達している場合、もしくは預けている数が0の場合はfalseを返す。
  739.    
  740.     return false if $game_party.item_number(@item_window.item) - @number == $game_party.max_item_number(@item_window.item)
  741.     return false if $game_party.item_keep_number(@item_window.item) + @number == 0
  742.     return true
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # 預ける
  746.   #--------------------------------------------------------------------------
  747.   def keep_exe(item, amount)
  748.    
  749.     #数量分処理する。
  750.    
  751.     amount.times do
  752.       @number += 1 if limitcheck1
  753.     end
  754.   end
  755.   #--------------------------------------------------------------------------
  756.   # 引き出す
  757.   #--------------------------------------------------------------------------
  758.   def get_exe(item, amount)
  759.    
  760.     #数量分処理する。
  761.    
  762.     amount.times do
  763.       @number -= 1 if limitcheck2
  764.     end
  765.   end
  766.   #--------------------------------------------------------------------------
  767.   # リフレッシュ
  768.   #--------------------------------------------------------------------------
  769.   def refresh
  770.    
  771.     #不可視状態の場合はリフレッシュしない。
  772.    
  773.     return false unless self.visible
  774.    
  775.     #数量を更新する。
  776.    
  777.     @last_number = @number
  778.    
  779.     #ウィンドウの内容を消去する。
  780.    
  781.     contents.clear
  782.     create_contents
  783.         
  784.     #アイテム名を描写。
  785.    
  786.     draw_item_name(@item_window.item, 0, 0)
  787.     change_color(system_color)
  788.     draw_text(0, line_height * 1, 80, line_height, "所持", 1)
  789.     draw_text(self.contents.width - 80, line_height * 1, 80, line_height, "倉庫", 1)
  790.     draw_text(0, line_height * 1, self.contents.width, line_height, "→", 1)
  791.     draw_text(0, line_height * 2, self.contents.width, line_height, "←", 1)
  792.    
  793.     #所持数データを描写。
  794.    
  795.     $game_party.item_number(@item_window.item) + @number == $game_party.max_item_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
  796.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  797.     $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
  798.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  799.   end
  800.   #--------------------------------------------------------------------------
  801.   # 数量のみリフレッシュ
  802.   #--------------------------------------------------------------------------
  803.   def refresh_number
  804.    
  805.     #不可視状態の場合はリフレッシュしない。
  806.    
  807.     return false unless self.visible
  808.    
  809.     #最後の数量と現在の数量が異なる場合は数量を更新する。
  810.    
  811.     if @last_number != @number
  812.       Sound.play_cursor
  813.       @last_number = @number
  814.     end
  815.    
  816.     #ウィンドウの内容を消去する。
  817.    
  818.     contents.clear_rect(0, line_height * 2, 80, line_height)
  819.     contents.clear_rect(self.contents.width - 80, line_height * 2, 80, line_height)
  820.    
  821.     #所持数データを描写。
  822.    
  823.     $game_party.item_number(@item_window.item) + @number == $game_party.max_item_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
  824.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  825.     $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
  826.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  827.   end
  828. end
  829. class Window_IKDescription < Window_Base
  830.   def initialize
  831.    
  832.     #ウィンドウを生成する。
  833.    
  834.     super(Graphics.width / 2 - 240, Graphics.height / 3 * 2, 480, 96)
  835.    
  836.     #設定に応じて背景透明度を変更する。
  837.    
  838.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  839.    
  840.     #システムカラーで項目部分を描画する。
  841.    
  842.     change_color(system_color)
  843.    
  844.     draw_text(0, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][0], 0)
  845.     draw_text(self.contents.width / 2, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][0], 0)
  846.     draw_text(0, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][0], 0)
  847.     draw_text(self.contents.width / 2, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][0], 0)
  848.     draw_text(0, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][0], 0)
  849.     draw_text(self.contents.width / 2, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][0], 0)

  850.     #通常カラーで項目部分を描画する。
  851.    
  852.     change_color(normal_color)
  853.    
  854.     draw_text(90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][1], 0)
  855.     draw_text(self.contents.width / 2 + 90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][1], 0)
  856.     draw_text(90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][1], 0)
  857.     draw_text(self.contents.width / 2 + 90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][1], 0)
  858.     draw_text(90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][1], 0)
  859.     draw_text(self.contents.width / 2 + 90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][1], 0)
  860.    
  861.     hide
  862.   end
  863. end
  864. class Game_Interpreter
  865.   #--------------------------------------------------------------------------
  866.   # 倉庫画面を呼び出し
  867.   #--------------------------------------------------------------------------
  868.   def call_keep
  869.    
  870.     #呼び出しを実行。
  871.    
  872.     SceneManager.call(Scene_Item_Keep)
  873.    
  874.     #一時的に実行を停止。
  875.    
  876.     Fiber.yield
  877.    
  878.   end
  879.   #--------------------------------------------------------------------------
  880.   # アイテムを預けている数を指定変数に取得
  881.   #--------------------------------------------------------------------------
  882.   def item_keep_get(vid,id)
  883.    
  884.     #武器の預けている数を取得。
  885.    
  886.     item = $data_items[id]
  887.    
  888.     #倉庫に格納
  889.    
  890.     $game_variables[vid] = $game_party.item_keep_number(item)
  891.    
  892.   end
  893.   #--------------------------------------------------------------------------
  894.   # 武器を預けている数を指定変数に取得
  895.   #--------------------------------------------------------------------------
  896.   def weapon_keep_get(vid,id)
  897.    
  898.     #武器の預けている数を取得。
  899.    
  900.     item = $data_weapons[id]
  901.    
  902.     #倉庫に格納
  903.    
  904.     $game_variables[vid] = $game_party.item_keep_number(item)
  905.    
  906.   end
  907.   #--------------------------------------------------------------------------
  908.   # 防具を預けている数を指定変数に取得
  909.   #--------------------------------------------------------------------------
  910.   def armor_keep_get(vid,id)
  911.    
  912.     #武器の預けている数を取得。
  913.    
  914.     item = $data_armors[id]
  915.    
  916.     #倉庫に格納
  917.    
  918.     $game_variables[vid] = $game_party.item_keep_number(item)
  919.    
  920.   end
  921.   #--------------------------------------------------------------------------
  922.   # アイテムを全て預ける/引き出す
  923.   #--------------------------------------------------------------------------
  924.   def item_keep_all(data)
  925.    
  926.     #種類をアイテムとする。
  927.    
  928.     item_data = $data_items
  929.    
  930.     #共通処理を実行。
  931.    
  932.     common_keep_all(item_data, data)
  933.   end
  934.   #--------------------------------------------------------------------------
  935.   # 武器を全て預ける/引き出す
  936.   #--------------------------------------------------------------------------
  937.   def weapon_keep_all(data)
  938.    
  939.     #種類を武器とする。
  940.    
  941.     item_data = $data_weapons
  942.    
  943.     #共通処理を実行。
  944.    
  945.     common_keep_all(item_data, data)
  946.   end
  947.   #--------------------------------------------------------------------------
  948.   # 防具を全て預ける/引き出す
  949.   #--------------------------------------------------------------------------
  950.   def armor_keep_all(data)
  951.    
  952.     #種類を防具とする。
  953.    
  954.     item_data = $data_armors
  955.    
  956.     #共通処理を実行。
  957.    
  958.     common_keep_all(item_data, data)
  959.   end
  960.   #--------------------------------------------------------------------------
  961.   # 全て預ける/引き出す場合の共通処理を実行
  962.   #--------------------------------------------------------------------------
  963.   def common_keep_all(item_data, data)
  964.    
  965.     #存在するオブジェクトの数分だけ処理。
  966.    
  967.     item_data.each do |i|
  968.       
  969.       #nilの場合は処理しない。
  970.       
  971.       next if i == nil
  972.       
  973.       #預けられないアイテムの場合は処理しない。
  974.       
  975.       next if i.keep_seal_flag
  976.       
  977.       #各種データを取得。
  978.       
  979.       data1 = $game_party.item_number(i)
  980.       data2 = $game_party.max_item_number(i)
  981.       data3 = $game_party.item_keep_number(i)
  982.       data4 = $game_party.max_item_keep_number(i)
  983.       
  984.       #追加で所持できる数と、追加で預けられる数を計算。
  985.       
  986.       data5 = data4 - data3
  987.       data6 = data2 - data1
  988.       
  989.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  990.       
  991.       amount = data == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  992.       $game_party.item_keep(i, amount)
  993.       
  994.     end
  995.   end
  996.   #--------------------------------------------------------------------------
  997.   # アイテムを一定個数預ける/引き出す
  998.   #--------------------------------------------------------------------------
  999.   def item_keep(data_a, data_b)
  1000.    
  1001.     #種類をアイテムとする。
  1002.    
  1003.     item_data = $data_items
  1004.    
  1005.     #共通処理を実行。
  1006.    
  1007.     common_keep(item_data, data_a, data_b)
  1008.    
  1009.   end
  1010.   #--------------------------------------------------------------------------
  1011.   # 武器を一定個数預ける/引き出す
  1012.   #--------------------------------------------------------------------------
  1013.   def weapon_keep(data_a, data_b)
  1014.    
  1015.     #種類を武器とする。
  1016.    
  1017.     item_data = $data_weapons
  1018.    
  1019.     #共通処理を実行。
  1020.    
  1021.     common_keep(item_data, data_a, data_b)
  1022.    
  1023.   end
  1024.   #--------------------------------------------------------------------------
  1025.   # 防具を一定個数預ける/引き出す
  1026.   #--------------------------------------------------------------------------
  1027.   def armor_keep(data_a, data_b)
  1028.    
  1029.     #種類を防具とする。
  1030.    
  1031.     item_data = $data_armors
  1032.    
  1033.     #共通処理を実行。
  1034.    
  1035.     common_keep(item_data, data_a, data_b)
  1036.    
  1037.   end
  1038.   #--------------------------------------------------------------------------
  1039.   # 一定個数預ける/引き出す場合の共通処理を実行します。
  1040.   #--------------------------------------------------------------------------
  1041.   def common_keep(item_data, data_a, data_b)
  1042.       
  1043.     #nilの場合は処理しない。
  1044.       
  1045.     return if item_data[data_b] == nil
  1046.       
  1047.     #預けられないアイテムの場合は処理しない。
  1048.    
  1049.     return if item_data[data_b].keep_seal_flag
  1050.       
  1051.     #各種データを取得。
  1052.    
  1053.     data1 = $game_party.item_number(item_data[data_b])
  1054.     data2 = $game_party.max_item_number(item_data[data_b])
  1055.     data3 = $game_party.item_keep_number(item_data[data_b])
  1056.     data4 = $game_party.max_item_keep_number(item_data[data_b])
  1057.       
  1058.     #追加で所持できる数と、追加で預けられる数を計算。
  1059.       
  1060.     data5 = data4 - data3
  1061.     data6 = data2 - data1
  1062.    
  1063.     #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  1064.    
  1065.     amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  1066.     $game_party.item_keep(item_data[data_b], amount)
  1067.    
  1068.   end
  1069.   #--------------------------------------------------------------------------
  1070.   # 特定ワードを含む単語を全て預ける/引き出す場合の処理を行う。
  1071.   #--------------------------------------------------------------------------
  1072.   def word_keep_all(data_a, data_b)
  1073.    
  1074.     #アイテム・武器・防具全てを含める配列を生成。
  1075.    
  1076.     item_data = $data_items + $data_weapons + $data_armors
  1077.    
  1078.     #存在するオブジェクトの数分だけ処理。
  1079.    
  1080.     item_data.each do |i|
  1081.       
  1082.       #nilの場合は処理しない。
  1083.       
  1084.       next if i == nil
  1085.       
  1086.       #預けられないアイテムの場合は処理しない。
  1087.       
  1088.       next if i.keep_seal_flag
  1089.       
  1090.       #指定されたワードがメモ欄に含まれていない場合は処理しない。
  1091.       
  1092.       next unless i.note.include?(data_b)
  1093.       
  1094.       #各種データを取得。
  1095.       
  1096.       data1 = $game_party.item_number(i)
  1097.       data2 = $game_party.max_item_number(i)
  1098.       data3 = $game_party.item_keep_number(i)
  1099.       data4 = $game_party.max_item_keep_number(i)
  1100.       
  1101.       #追加で所持できる数と、追加で預けられる数を計算。
  1102.       
  1103.       data5 = data4 - data3
  1104.       data6 = data2 - data1
  1105.       
  1106.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  1107.       
  1108.       amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  1109.       $game_party.item_keep(i, amount)
  1110.       
  1111.     end
  1112.   end
  1113. end
  1114. if ITEM_KEEPER::SHOP
  1115. class Game_Party < Game_Unit
  1116.   attr_accessor :shop_ik
  1117.   #--------------------------------------------------------------------------
  1118.   # 預かり所モードかどうかを確認
  1119.   #--------------------------------------------------------------------------
  1120.   def shop_ik?
  1121.     @shop_ik
  1122.   end
  1123.   #--------------------------------------------------------------------------
  1124.   # 全てのアイテムオブジェクトの配列取得
  1125.   #--------------------------------------------------------------------------
  1126.   alias all_items_ik all_items
  1127.   def all_items
  1128.    
  1129.     #預かり所モードでなければ、本来の処理を行う。
  1130.    
  1131.     return all_items_ik unless $game_party.shop_ik?
  1132.    
  1133.     #アイテム・武器・防具の預かり所データを取得し、まとめる。
  1134.    
  1135.     data1 = @items_k.keys.sort.collect {|id| $data_items[id] }
  1136.     data2 = @weapons_k.keys.sort.collect {|id| $data_weapons[id] }
  1137.     data3 = @armors_k.keys.sort.collect {|id| $data_armors[id] }
  1138.     data1 + data2 + data3
  1139.   end
  1140.   #--------------------------------------------------------------------------
  1141.   # アイテムのクラスに対応するコンテナオブジェクトを取得
  1142.   #--------------------------------------------------------------------------
  1143.   alias item_container_ik item_container
  1144.   def item_container(item_class)
  1145.    
  1146.     #預かり所モードでなければ、本来の処理を行う。
  1147.    
  1148.     return item_container_ik(item_class) unless $game_party.shop_ik?
  1149.    
  1150.     #預かり所モードの場合に限り、預かり所データを返す。
  1151.    
  1152.     return @items_k   if item_class == RPG::Item
  1153.     return @weapons_k if item_class == RPG::Weapon
  1154.     return @armors_k  if item_class == RPG::Armor
  1155.     return nil
  1156.   end
  1157.   #--------------------------------------------------------------------------
  1158.   # アイテムの所持数取得
  1159.   #--------------------------------------------------------------------------
  1160.   alias item_number_ik item_number
  1161.   def item_number(item)
  1162.    
  1163.     #預かり所モードでなければ、本来の処理を行う。
  1164.    
  1165.     return item_number_ik(item) unless $game_party.shop_ik?
  1166.    
  1167.     #預かり所のデータを返す。
  1168.    
  1169.     item_keep_number(item)
  1170.   end
  1171.   #--------------------------------------------------------------------------
  1172.   # アイテムの最大所持数取得
  1173.   #--------------------------------------------------------------------------
  1174.   alias max_item_number_ik max_item_number
  1175.   def max_item_number(item)
  1176.    
  1177.     #預かり所モードでなければ、本来の処理を行う。
  1178.    
  1179.     return max_item_number_ik(item) unless $game_party.shop_ik?
  1180.    
  1181.     #預かり所のデータを返す。
  1182.    
  1183.     max_item_keep_number(item)
  1184.   end
  1185. end
  1186. class Scene_Shop < Scene_MenuBase
  1187.   #--------------------------------------------------------------------------
  1188.   # モードチェンジ
  1189.   #--------------------------------------------------------------------------
  1190.   def item_keep_mode_change
  1191.    
  1192.     #ナンバーウィンドウがアクティブの場合は実行しない。
  1193.    
  1194.     return if @number_window.active
  1195.    
  1196.     #指定スイッチのIDが0より大きく、そのスイッチがONの場合は実行しない。
  1197.    
  1198.     return if ITEM_KEEPER::SWITCH1 > 0 && $game_switches[ITEM_KEEPER::SWITCH1]
  1199.    
  1200.     #預かり所フラグを切り替える。
  1201.    
  1202.     $game_party.shop_ik = $game_party.shop_ik? ? false : true
  1203.    
  1204.     #切り替えを示すウィンドウを表示。
  1205.    
  1206.     w = 400
  1207.     h = 48
  1208.     x = (Graphics.width - w) / 2
  1209.     y = (Graphics.height - h) / 2
  1210.     RPG::SE.new(ITEM_KEEPER::SE[0],ITEM_KEEPER::SE[1],ITEM_KEEPER::SE[2]).play
  1211.     @mode_change_window = Window_Base.new(x, y, w, h)
  1212.     @mode_change_window.back_opacity = 255
  1213.     @mode_change_window.z = 10000
  1214.     text = $game_party.shop_ik ? ITEM_KEEPER::TEXT2 : ITEM_KEEPER::TEXT1
  1215.     @mode_change_window.draw_text(0, 0, w - 32, 24, text, 1)
  1216.     60.times {Graphics.update}
  1217.     @mode_change_window.dispose
  1218.     @mode_change_window = nil
  1219.    
  1220.     #各ウィンドウをリフレッシュする。
  1221.    
  1222.     @status_window.refresh
  1223.     @buy_window.refresh
  1224.     @sell_window.refresh
  1225.     @sell_window.index = 0 if @sell_window.active
  1226.     @number_window.refresh
  1227.   end
  1228.   #--------------------------------------------------------------------------
  1229.   # フレーム更新
  1230.   #--------------------------------------------------------------------------
  1231.   alias update_ik update
  1232.   def update
  1233.    
  1234.     #本来の処理を実行。
  1235.    
  1236.     update_ik
  1237.    
  1238.     #指定したキーが押された場合、モードチェンジ実行。
  1239.    
  1240.     item_keep_mode_change if Input.trigger?(ITEM_KEEPER::KEY)
  1241.   end
  1242. end
  1243. class Window_ShopBuy < Window_Selectable
  1244.   #--------------------------------------------------------------------------
  1245.   # アイテムを許可状態で表示するかどうか
  1246.   #--------------------------------------------------------------------------
  1247.   alias enable_ik? enable?
  1248.   def enable?(item)
  1249.    
  1250.     #本来の処理を実行。
  1251.    
  1252.     flag1 = enable_ik?(item)
  1253.    
  1254.     #預かり所モードの場合、預かり所禁止アイテムは購入不可。
  1255.    
  1256.     flag2 = $game_party.shop_ik? ? !item.keep_seal_flag : true
  1257.    
  1258.     #どちらの条件も満たす場合のみ表示。
  1259.    
  1260.     flag1 && flag2
  1261.   end
  1262. end
  1263. class Window_ShopStatus < Window_Base
  1264.   #--------------------------------------------------------------------------
  1265.   # 所持数の描画
  1266.   #--------------------------------------------------------------------------
  1267.   alias draw_possession_ik draw_possession
  1268.   def draw_possession(x, y)
  1269.    
  1270.     #預かり所モードでなければ、本来の処理を行う。
  1271.    
  1272.     return draw_possession_ik(x, y) unless $game_party.shop_ik?
  1273.    
  1274.     #本来の処理を少し改変した物を実行。
  1275.    
  1276.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  1277.     change_color(system_color)
  1278.     draw_text(rect, ITEM_KEEPER::SHOP_POS)
  1279.     change_color(normal_color)
  1280.     draw_text(rect, $game_party.item_keep_number(@item), 2)
  1281.   end
  1282. end
  1283. class Window_ShopNumber < Window_Selectable
  1284.   #--------------------------------------------------------------------------
  1285.   # 個数表示の最大桁数を取得
  1286.   #--------------------------------------------------------------------------
  1287.   alias figures_ik figures
  1288.   def figures
  1289.    
  1290.     #3桁以上を考慮して預かり所モードの場合は補正をかける。
  1291.    
  1292.     figures_ik + ($game_party.shop_ik? ? ITEM_KEEPER::SHOP_FIG : 0)
  1293.   end
  1294. end
  1295. class Scene_MenuBase < Scene_Base
  1296.   #--------------------------------------------------------------------------
  1297.   # 終了処理
  1298.   #--------------------------------------------------------------------------
  1299.   alias terminate_ik terminate
  1300.   def terminate
  1301.    
  1302.     #預かり所モードフラグを消去。
  1303.    
  1304.     $game_party.shop_ik = nil
  1305.    
  1306.     #本来の処理を実行。
  1307.    
  1308.     terminate_ik
  1309.   end
  1310. end
  1311. end
复制代码
这是仓库
银行的话用变量和事件来做更好。

点评

谢谢阁下贴·出的脚本  发表于 2016-6-6 08:27
顺便问一下论坛里可以展开和最小化的脚本是怎么弄出来的?我用引用脚本的指令放多少行脚本就有多少行,很不方便简约  发表于 2016-6-4 12:35

评分

参与人数 1星屑 +200 收起 理由
taroxd + 200 进高级模式发帖,点 &lt;&gt; 图标.

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
664
在线时间
101 小时
注册时间
2016-7-15
帖子
143
3
发表于 2016-7-26 12:55:09 | 只看该作者
银行你先做个银行卡,然后设置2个变量,1是存款2是现金,添加存款标签,存款时输入变量存款,现金=所持金钱,条件分歧当存款大于现金时,显示对话你的卡里没这么多钱,然后转至存款标签,否则所持金钱-存款,变量现金=0
取款:显示对话你的卡里有\V[存款变量ID]货币单位,你要取多少,添加取款标签,输入变量现金,条件分歧当存款小于现金时,显示对话你卡里没这么多钱,转至标签取款,否则变量存款-变量现金,所持金钱+变量现金
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 15:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表