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

Project1

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

[已经过期] 一个仓库脚本可以再改出另一个功能一样的仓库吗?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
189
在线时间
366 小时
注册时间
2009-9-6
帖子
62
跳转到指定楼层
1
发表于 2013-12-10 06:49:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 arnie510 于 2013-12-12 05:50 编辑

找到了一个仓库脚本

但我希望我的游戏能有2个功能一样但不会互相存到的仓库

请问要改哪里才能实现呢?

例如:
原本打
SceneManager.call(Scene_Item_Keep) 叫出仓库脚本

想再新增一个打上
SceneManager.call(Scene_Item_Keep2) 叫出第2个仓库脚本

再此请教各位大大,感谢!

RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 アイテム預かり所 Ver1.01 by 星潟
  3. #------------------------------------------------------------------------------
  4. # アイテムを預ける事が出来るようになります。
  5. # 莫大な数のアイテムが登場する作品におすすめです。
  6. #
  7. # 最大所持数を越える量のアイテムを引き出せないようにする機能や
  8. # 預けられないアイテムの作成、預けられる数の限界設定の他、
  9. # アイテムの預かり・引き出しに関わるイベントコマンドをいくつか実装します。
  10. #
  11. # アイテム・武器・防具のメモ欄に以下のように書き込む事で
  12. # それぞれ特殊な設定が行われます。
  13. #
  14. # <保存禁止>……このアイテムは預かり所で預ける事が出来ません。
  15. #
  16. # <保存制限:20>……このアイテムは預かり所にも20個までしか預ける事が出来ません。
  17. #
  18. # 以下、イベントコマンドです。(全て、スクリプトを用います)
  19. #
  20. # SceneManager.call(Scene_Item_Keep)
  21. # アイテム預かり所画面を呼び出します。
  22. #
  23. # item_keep_all(data_a)
  24. # data_aが0の時……預けられるアイテムを預けられるだけ預けます。
  25. # data_aが1の時……アイテムを全て引き出せるだけ引き出します。
  26. #
  27. # weapon_keep_all(data_a)
  28. # data_aが0の時……預けられる武器を預けられるだけ預けます。
  29. # data_aが1の時……武器を全て引き出せるだけ引き出します。
  30. #
  31. # armor_keep_all(data_a)
  32. # data_aが0の時……預けられる防具を預けられるだけ預けます。
  33. # data_aが1の時……防具を全て引き出せるだけ引き出します。
  34. #
  35. # item_keep(data_a, data_b)
  36. # data_aが0の時……data_bで指定したIDのアイテムを預けられるだけ預けます。
  37. # data_aが1の時……data_bで指定したIDのアイテムを引き出せるだけ引き出します。
  38. #
  39. # weapon_keep(data_a, data_b)
  40. # data_aが0の時……data_bで指定したIDの武器を預けられるだけ預けます。
  41. # data_aが1の時……data_bで指定したIDの武器を引き出せるだけ引き出します。
  42. #
  43. # armor_keep(data_a, data_b)
  44. # data_aが0の時……data_bで指定したIDの防具を預けられるだけ預けます。
  45. # data_aが1の時……data_bで指定したIDの防具を引き出せるだけ引き出します。
  46. #
  47. # word_keep_all(data_a, data_b)
  48. #
  49. # data_aが0の時……
  50. # data_bで指定した言葉がメモ欄に含まれる
  51. # アイテム・武器・防具を預けられるだけ預けます。
  52. #
  53. # data_aが1の時……
  54. # data_bで指定した言葉がメモ欄に含まれる
  55. # アイテム・武器・防具を引き出せるだけ引き出します。
  56. #
  57. # word_keep_allで、data_bで設定する言葉は、前後を""で囲んでください。
  58. # 【例.word_keep_all(1, "回復")】
  59. # この場合、回復という言葉をメモ欄に含んだアイテム・武器・防具を
  60. # 預かり所から全て引き出します。
  61. #------------------------------------------------------------------------------
  62. # Ver1.01 導入前のセーブデータを使用した場合に正常に機能しなくなる不具合を修正。
  63. #         軽量化スクリプトと統合し、軽量化モード切替機能を追加。
  64. #         説明ウィンドウ機能を追加。
  65. #==============================================================================
  66. module ITEM_KEEPER
  67.  
  68.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  69.   #true 表示しない false 表示する
  70.  
  71.   UNVISIBLE = false
  72.  
  73.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  74.   #true 表示しない false 表示する
  75.  
  76.   WORD1     = "保存禁止"
  77.  
  78.   #保存に個数制限を設ける為の設定用キーワードです。
  79.  
  80.   WORD2     = "保存制限"
  81.  
  82.   #保存制限のないアイテムについていくつまで預けられるかを設定します。
  83.  
  84.   LIMIT     = 999
  85.  
  86.   #説明ウィンドウを表示するかどうかを設定します。
  87.  
  88.   DESCRIPT  = true
  89.  
  90.   #数量ウィンドウと説明ウィンドウの背景透明度を変更します。
  91.  
  92.   B_OPACITY = 255
  93.  
  94.   #軽量化フラグ。
  95.  
  96.   FLAG      = true
  97.  
  98.   #説明ウィンドウに表示する項目を設定します。
  99.   #(基本的にこの部分を変更する必要はありません)
  100.  
  101.   D         = [
  102.   ["下キー",":1個引き出す"],
  103.   ["上キー",":1個預ける"],
  104.   ["左キー",":10個引き出す"],
  105.   ["右キー",":10個預ける"],
  106.   ["CTRLキー",":100個引き出す"],
  107.   ["SHIFTキー",":100個預ける"]
  108.   ]
  109.  
  110. end
  111. class RPG::BaseItem
  112.   #--------------------------------------------------------------------------
  113.   # 最大保管数を取得
  114.   #--------------------------------------------------------------------------
  115.   def max_item_keep_number
  116.  
  117.     #キャッシュが存在する場合はキャッシュを返す。
  118.  
  119.     return @max_item_keep_number if @max_item_keep_number != nil
  120.  
  121.     #メモ欄からデータを取得し、取得できない場合はデフォルト数を返す。
  122.  
  123.     memo = self.note.scan(/<#{ITEM_KEEPER::WORD2}[::](\S+)>/).flatten
  124.     @max_item_keep_number = memo != nil && !memo.empty? ? memo[0].to_i : ITEM_KEEPER::LIMIT
  125.  
  126.     #データを返す。
  127.  
  128.     @max_item_keep_number
  129.   end
  130. end
  131. class Game_Party < Game_Unit
  132.   #--------------------------------------------------------------------------
  133.   # オブジェクト初期化
  134.   #--------------------------------------------------------------------------
  135.   alias initialize_ik initialize
  136.   def initialize
  137.  
  138.     #本来の処理を実行。
  139.  
  140.     initialize_ik
  141.  
  142.     #パーティー外全アイテムリストを初期化。
  143.  
  144.     init_all_items_ik
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # パーティー外全アイテムリストの初期化(強制)
  148.   #--------------------------------------------------------------------------
  149.   def init_all_items_ik
  150.  
  151.     #それぞれ、空のハッシュを生成。
  152.  
  153.     @items_k = {}
  154.     @weapons_k = {}
  155.     @armors_k = {}
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # パーティー外全アイテムリストの初期化(nilの場合)
  159.   #--------------------------------------------------------------------------
  160.   def init_all_items_ik_un_nil
  161.  
  162.     #それぞれ、存在しない場合のみハッシュを生成。
  163.  
  164.     @items_k = {} if @items_k == nil
  165.     @weapons_k = {} if @weapons_k == nil
  166.     @armors_k = {} if @armors_k == nil
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # アイテムの最大保管数取得
  170.   #--------------------------------------------------------------------------
  171.   def max_item_keep_number(item)
  172.  
  173.     #アイテムが存在しない場合はfalseを返す。
  174.  
  175.     return false if item == nil
  176.  
  177.     #アイテムの最大保管数を返す。
  178.  
  179.     item.max_item_keep_number
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # アイテムの保管数取得
  183.   #--------------------------------------------------------------------------
  184.   def item_keep_number(item)
  185.  
  186.     #コンテナを取得。
  187.  
  188.     container = item_keep_container(item.class)
  189.  
  190.     #コンテナにデータが存在しない場合は0を返す。
  191.  
  192.     container ? container[item.id] || 0 : 0
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # アイテムの保管
  196.   #--------------------------------------------------------------------------
  197.   def item_keep(item, number, get = false)
  198.  
  199.     #数量データを取得。
  200.  
  201.     number_data = number
  202.  
  203.     #アイテム保管を実行。
  204.  
  205.     item_keep_execute(item, number_data)
  206.  
  207.     #所持アイテムを減らす。
  208.  
  209.     gain_item(item, -number_data) if get == false
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # 預けているアイテムのクラスに対応するコンテナオブジェクトを取得
  213.   #--------------------------------------------------------------------------
  214.   def item_keep_container(item_class)
  215.  
  216.     #アイテムの種類に応じてコンテナを取得。
  217.  
  218.     return @items_k   if item_class == RPG::Item
  219.     return @weapons_k if item_class == RPG::Weapon
  220.     return @armors_k  if item_class == RPG::Armor
  221.     return nil
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # アイテムの増加(減少)
  225.   #--------------------------------------------------------------------------
  226.   def item_keep_execute(item, amount)
  227.  
  228.     #コンテナを取得。
  229.  
  230.     container = item_keep_container(item.class)
  231.  
  232.     #コンテナが存在しない場合は処理をしない。
  233.  
  234.     return if container == nil
  235.  
  236.     #処理前の保管数を取得。
  237.  
  238.     last_number = item_keep_number(item)
  239.  
  240.     #処理後の保管数を取得。
  241.  
  242.     new_number = last_number + amount
  243.  
  244.     #保管数を変更する。
  245.  
  246.     container[item.id] = new_number
  247.  
  248.     #保管数が0となった場合はハッシュから削除する。
  249.  
  250.     container.delete(item.id) if container[item.id] == 0
  251.  
  252.     #マップのリフレッシュフラグを立てる。
  253.  
  254.     $game_map.need_refresh = true
  255.   end
  256. end
  257. class Scene_Item_Keep < Scene_Item
  258.   #--------------------------------------------------------------------------
  259.   # 開始処理
  260.   #--------------------------------------------------------------------------
  261.   def start
  262.  
  263.     #コンテナが存在しない場合はコンテナを生成する。
  264.  
  265.     $game_party.init_all_items_ik_un_nil
  266.  
  267.     #スーパークラスの処理を実行。
  268.  
  269.     super
  270.  
  271.     #説明ウィンドウの作成
  272.  
  273.     create_description_window
  274.  
  275.     #個数入力ウィンドウの作成
  276.  
  277.     create_number_window
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # カテゴリウィンドウの作成
  281.   #--------------------------------------------------------------------------
  282.   def create_category_window
  283.     @category_window = Window_ItemCategory.new
  284.     @category_window.viewport = @viewport
  285.     @category_window.help_window = @help_window
  286.     @category_window.y = @help_window.height
  287.     @category_window.set_handler(:ok,     method(:on_category_ok))
  288.     @category_window.set_handler(:cancel, method(:return_scene))
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # アイテムウィンドウの作成
  292.   #--------------------------------------------------------------------------
  293.   def create_item_window
  294.     wy = @category_window.y + @category_window.height
  295.     wh = Graphics.height - wy
  296.     @item_window = Window_PTItemList.new(0, wy, Graphics.width, wh)
  297.     @item_window.viewport = @viewport
  298.     @item_window.help_window = @help_window
  299.     @item_window.set_handler(:ok,     method(:on_item_ok))
  300.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  301.     @category_window.item_window = @item_window
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # 説明ウィンドウの作成
  305.   #--------------------------------------------------------------------------
  306.   def create_description_window
  307.  
  308.     #説明ウィンドウを作成しない場合は処理を行わない。
  309.  
  310.     return unless ITEM_KEEPER::DESCRIPT
  311.  
  312.     @description_window = Window_IKDescription.new
  313.     @description_window.z = 100
  314.     @description_window.viewport = @viewport
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # 個数入力ウィンドウの作成
  318.   #--------------------------------------------------------------------------
  319.   def create_number_window
  320.     @number_window = Window_IKInput.new
  321.     @number_window.z = 100
  322.     @number_window.item_window = @item_window
  323.     @number_window.description_window = @description_window if ITEM_KEEPER::DESCRIPT
  324.     @number_window.viewport = @viewport
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # カテゴリ[決定]
  328.   #--------------------------------------------------------------------------
  329.   def on_category_ok
  330.     @item_window.activate
  331.     @item_window.select_last
  332.     @category_window.deactivate
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # アイテム[決定]
  336.   #--------------------------------------------------------------------------
  337.   def on_item_ok
  338.     $game_party.last_item.object = item
  339.     item == nil ? @item_window.activate : determine_item
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # アイテムの決定
  343.   #--------------------------------------------------------------------------
  344.   def determine_item
  345.     @number_window.number = 0
  346.     item = @item_window.item
  347.     @number_window.show
  348.     @number_window.refresh
  349.     @description_window.show if ITEM_KEEPER::DESCRIPT
  350.     @item_window.deactivate
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # アイテム[キャンセル]
  354.   #--------------------------------------------------------------------------
  355.   def on_item_cancel
  356.     @item_window.unselect
  357.     @category_window.activate
  358.   end
  359. end
  360. #==============================================================================
  361. # ■ Window_PTItemList
  362. #------------------------------------------------------------------------------
  363. #  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
  364. #==============================================================================
  365.  
  366. class Window_PTItemList < Window_ItemList
  367.   #--------------------------------------------------------------------------
  368.   # アイテムをリストに含めるかどうか
  369.   #--------------------------------------------------------------------------
  370.   alias include_ik? include?
  371.   def include?(item)
  372.  
  373.     #アイテムが存在しない場合、ウィンドウが不可視の場合
  374.     #保管禁止アイテムを非表示にする場合は表示しない。
  375.  
  376.     return false if item == nil
  377.     return false if self.visible == false
  378.     return false if ITEM_KEEPER::UNVISIBLE == true && item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  379.  
  380.     #本来の処理を実行。
  381.  
  382.     include_ik?(item)
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # アイテムを許可状態で表示するかどうか
  386.   #--------------------------------------------------------------------------
  387.   def enable?(item)
  388.  
  389.     #アイテムが存在しない場合、もしくは保管禁止アイテムの場合はfalseを返す。
  390.  
  391.     return false if item == nil
  392.     return false if item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  393.     return true
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # アイテムリストの作成
  397.   #--------------------------------------------------------------------------
  398.   def make_item_list
  399.  
  400.     #全ての中から、所持アイテムか倉庫アイテムとして存在する物のみ取得する。
  401.  
  402.     item_data = $data_items + $data_weapons + $data_armors
  403.     @data = item_data.select {|item| include?(item) && ($game_party.item_number(item) > 0 or $game_party.item_keep_number(item) > 0)}
  404.     @data.push(nil) if include?(nil)
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # 選択項目の有効状態を取得
  408.   #--------------------------------------------------------------------------
  409.   def current_item_enabled?
  410.     enable?(@data[index])
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # 桁数の取得
  414.   #--------------------------------------------------------------------------
  415.   def col_max
  416.     return 1
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # フレーム更新
  420.   #--------------------------------------------------------------------------
  421.   def update
  422.     super
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # 項目の描画
  426.   #--------------------------------------------------------------------------
  427.   def draw_item(index, flag = false)
  428.  
  429.     #データからアイテムを取得し、各種データを記述する。
  430.  
  431.     item = @data[index]
  432.  
  433.     #アイテムが存在しない場合は処理を行わない。
  434.  
  435.     return unless item
  436.  
  437.     rect = item_rect(index)
  438.     contents.clear_rect(rect) if flag
  439.     rect.width -= 4
  440.     draw_item_name(item, rect.x, rect.y, enable?(item))
  441.     change_color(text_color(5))
  442.     draw_text(180, rect.y, 100, line_height, "所持", 2)
  443.     change_color(text_color(0))
  444.     draw_text(220, rect.y, 100, line_height, $game_party.item_number(item), 2)
  445.     draw_text(240, rect.y, 100, line_height,"/", 2)
  446.     draw_text(270, rect.y, 100, line_height, $game_party.max_item_number(item), 2)
  447.     change_color(text_color(5))
  448.     draw_text(330, rect.y, 100, line_height, "倉庫", 2)
  449.     change_color(text_color(0))
  450.     draw_text(370, rect.y, 100, line_height, $game_party.item_keep_number(item), 2)
  451.     draw_text(390, rect.y, 100, line_height, "/", 2)
  452.     draw_text(420, rect.y, 100, line_height, $game_party.max_item_keep_number(item), 2)
  453.  
  454.   end
  455. end
  456. class Window_IKInput < Window_Selectable
  457.   #--------------------------------------------------------------------------
  458.   # 公開インスタンス変数
  459.   #--------------------------------------------------------------------------
  460.   attr_accessor   :item_window
  461.   attr_accessor   :number
  462.   attr_accessor   :description_window
  463.   #--------------------------------------------------------------------------
  464.   # オブジェクト初期化
  465.   #--------------------------------------------------------------------------
  466.   def initialize
  467.  
  468.     #ウィンドウを生成する。
  469.  
  470.     super(Graphics.width / 2 - 122, Graphics.height / 2 - 50, 244, 100)
  471.  
  472.     #設定に応じて背景透明度を変更する。
  473.  
  474.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  475.  
  476.     #一旦隠す。
  477.  
  478.     hide
  479.  
  480.     #非アクティブにする。
  481.  
  482.     deactivate
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # 数字の変更処理
  486.   #--------------------------------------------------------------------------
  487.   def update
  488.  
  489.     #見えない場合は更新しない。
  490.  
  491.     return unless self.visible
  492.  
  493.     #入力関連の各種処理を実行。
  494.  
  495.     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)
  496.       if Input.press?(Input::SHIFT)   #100個預ける
  497.         keep_exe(@item_window.item, 100)
  498.       elsif Input.press?(Input::CTRL) #100個引き出す
  499.         get_exe(@item_window.item, 100)
  500.       elsif Input.repeat?(:RIGHT)     #10個預ける
  501.         keep_exe(@item_window.item, 10)
  502.       elsif Input.repeat?(:LEFT)      #10個引き出す
  503.         get_exe(@item_window.item, 10)
  504.       elsif Input.repeat?(:UP)        #1個預ける
  505.         keep_exe(@item_window.item, 1)
  506.       elsif Input.repeat?(:DOWN)      #1個引き出す
  507.         get_exe(@item_window.item, 1)
  508.       end
  509.       refresh_number
  510.     end
  511.     if Input.trigger?(:C)
  512.  
  513.       #決定音を鳴らす。
  514.  
  515.       Sound.play_ok
  516.  
  517.       #数に応じてアイテム数を変更。
  518.  
  519.       $game_party.item_keep(@item_window.item, @number)
  520.  
  521.       #ウィンドウを隠す。
  522.  
  523.       self.hide
  524.  
  525.       #ウィンドウを非アクティブにする。
  526.  
  527.       self.deactivate
  528.  
  529.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  530.  
  531.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  532.  
  533.       #条件に応じてアイテムウィンドウを変更する。
  534.  
  535.       ITEM_KEEPER::FLAG ? @item_window.draw_item(@item_window.index, true) : @item_window.refresh
  536.  
  537.       #アイテムウィンドウをアクティブにする。
  538.  
  539.       @item_window.activate
  540.     elsif Input.trigger?(:B)
  541.  
  542.       #決定音を鳴らす。
  543.  
  544.       Sound.play_cancel
  545.  
  546.       #ウィンドウを隠す。
  547.  
  548.       self.hide
  549.  
  550.       #ウィンドウを非アクティブにする。
  551.  
  552.       self.deactivate
  553.  
  554.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  555.  
  556.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  557.  
  558.       #アイテムウィンドウをアクティブにする。
  559.  
  560.       @item_window.activate
  561.  
  562.     end
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # 預けられる限界をチェック
  566.   #--------------------------------------------------------------------------
  567.   def limitcheck1
  568.  
  569.     #所持数が既に0、もしくは預ける限界に達している場合はfalseを返す。
  570.  
  571.     return false if $game_party.item_number(@item_window.item) - [url=home.php?mod=space&uid=27178]@Number[/url] == 0
  572.     return false if $game_party.item_keep_number(@item_window.item) + [url=home.php?mod=space&uid=27178]@Number[/url] == $game_party.max_item_keep_number(@item_window.item)
  573.     return true
  574.   end
  575.   #--------------------------------------------------------------------------
  576.   # 引き出せる限界をチェック
  577.   #--------------------------------------------------------------------------
  578.   def limitcheck2
  579.  
  580.     #所持数が既に限界に達している場合、もしくは預けている数が0の場合はfalseを返す。
  581.  
  582.     return false if $game_party.item_number(@item_window.item) - [url=home.php?mod=space&uid=27178]@Number[/url] == $game_party.max_item_number(@item_window.item)
  583.     return false if $game_party.item_keep_number(@item_window.item) + @number == 0
  584.     return true
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # 預ける
  588.   #--------------------------------------------------------------------------
  589.   def keep_exe(item, amount)
  590.  
  591.     #数量分処理する。
  592.  
  593.     amount.times do
  594.       @number += 1 if limitcheck1
  595.     end
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # 引き出す
  599.   #--------------------------------------------------------------------------
  600.   def get_exe(item, amount)
  601.  
  602.     #数量分処理する。
  603.  
  604.     amount.times do
  605.       @number -= 1 if limitcheck2
  606.     end
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # リフレッシュ
  610.   #--------------------------------------------------------------------------
  611.   def refresh
  612.  
  613.     #不可視状態の場合はリフレッシュしない。
  614.  
  615.     return false unless self.visible
  616.  
  617.     #数量を更新する。
  618.  
  619.     @last_number = @number
  620.  
  621.     #ウィンドウの内容を消去する。
  622.  
  623.     contents.clear
  624.     create_contents
  625.  
  626.     #アイテム名を描写。
  627.  
  628.     draw_item_name(@item_window.item, 0, 0)
  629.     change_color(system_color)
  630.     draw_text(0, line_height * 1, 80, line_height, "所持", 1)
  631.     draw_text(self.contents.width - 80, line_height * 1, 80, line_height, "倉庫", 1)
  632.     draw_text(0, line_height * 1, self.contents.width, line_height, "→", 1)
  633.     draw_text(0, line_height * 2, self.contents.width, line_height, "←", 1)
  634.  
  635.     #所持数データを描写。
  636.  
  637.     $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)
  638.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  639.     $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)
  640.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # 数量のみリフレッシュ
  644.   #--------------------------------------------------------------------------
  645.   def refresh_number
  646.  
  647.     #不可視状態の場合はリフレッシュしない。
  648.  
  649.     return false unless self.visible
  650.  
  651.     #最後の数量と現在の数量が異なる場合は数量を更新する。
  652.  
  653.     if @last_number != @number
  654.       Sound.play_cursor
  655.       @last_number = @number
  656.     end
  657.  
  658.     #ウィンドウの内容を消去する。
  659.  
  660.     contents.clear_rect(0, line_height * 2, 80, line_height)
  661.     contents.clear_rect(self.contents.width - 80, line_height * 2, 80, line_height)
  662.  
  663.     #所持数データを描写。
  664.  
  665.     $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)
  666.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  667.     $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)
  668.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  669.   end
  670. end
  671. class Window_IKDescription < Window_Base
  672.   def initialize
  673.  
  674.     #ウィンドウを生成する。
  675.  
  676.     super(Graphics.width / 2 - 240, Graphics.height / 3 * 2, 480, 96)
  677.  
  678.     #設定に応じて背景透明度を変更する。
  679.  
  680.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  681.  
  682.     #システムカラーで項目部分を描画する。
  683.  
  684.     change_color(system_color)
  685.  
  686.     draw_text(0, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][0], 0)
  687.     draw_text(self.contents.width / 2, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][0], 0)
  688.     draw_text(0, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][0], 0)
  689.     draw_text(self.contents.width / 2, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][0], 0)
  690.     draw_text(0, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][0], 0)
  691.     draw_text(self.contents.width / 2, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][0], 0)
  692.  
  693.     #通常カラーで項目部分を描画する。
  694.  
  695.     change_color(normal_color)
  696.  
  697.     draw_text(90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][1], 0)
  698.     draw_text(self.contents.width / 2 + 90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][1], 0)
  699.     draw_text(90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][1], 0)
  700.     draw_text(self.contents.width / 2 + 90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][1], 0)
  701.     draw_text(90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][1], 0)
  702.     draw_text(self.contents.width / 2 + 90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][1], 0)
  703.  
  704.     hide
  705.   end
  706. end
  707. class Game_Interpreter
  708.   #--------------------------------------------------------------------------
  709.   # アイテムを全て預ける/引き出す
  710.   #--------------------------------------------------------------------------
  711.   def item_keep_all(data)
  712.  
  713.     #種類をアイテムとする。
  714.  
  715.     item_data = $data_items
  716.  
  717.     #共通処理を実行。
  718.  
  719.     common_keep_all(item_data, data)
  720.   end
  721.   #--------------------------------------------------------------------------
  722.   # 武器を全て預ける/引き出す
  723.   #--------------------------------------------------------------------------
  724.   def weapon_keep_all(data)
  725.  
  726.     #種類を武器とする。
  727.  
  728.     item_data = $data_weapons
  729.  
  730.     #共通処理を実行。
  731.  
  732.     common_keep_all(item_data, data)
  733.   end
  734.   #--------------------------------------------------------------------------
  735.   # 防具を全て預ける/引き出す
  736.   #--------------------------------------------------------------------------
  737.   def armor_keep_all(data)
  738.  
  739.     #種類を防具とする。
  740.  
  741.     item_data = $data_armors
  742.  
  743.     #共通処理を実行。
  744.  
  745.     common_keep_all(item_data, data)
  746.   end
  747.   #--------------------------------------------------------------------------
  748.   # 全て預ける/引き出す場合の共通処理を実行
  749.   #--------------------------------------------------------------------------
  750.   def common_keep_all(item_data, data)
  751.  
  752.     #存在するオブジェクトの数分だけ処理。
  753.  
  754.     item_data.each do |i|
  755.  
  756.       #nilの場合は処理しない。
  757.  
  758.       next if i == nil
  759.  
  760.       #預けられないアイテムの場合は処理しない。
  761.  
  762.       next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  763.  
  764.       #各種データを取得。
  765.  
  766.       data1 = $game_party.item_number(i)
  767.       data2 = $game_party.max_item_number(i)
  768.       data3 = $game_party.item_keep_number(i)
  769.       data4 = $game_party.max_item_keep_number(i)
  770.  
  771.       #追加で所持できる数と、追加で預けられる数を計算。
  772.  
  773.       data5 = data4 - data3
  774.       data6 = data2 - data1
  775.  
  776.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  777.  
  778.       amount = data == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  779.       $game_party.item_keep(i, amount)
  780.  
  781.     end
  782.   end
  783.   #--------------------------------------------------------------------------
  784.   # アイテムを一定個数預ける/引き出す
  785.   #--------------------------------------------------------------------------
  786.   def item_keep(data_a, data_b)
  787.  
  788.     #種類をアイテムとする。
  789.  
  790.     item_data = $data_items
  791.  
  792.     #共通処理を実行。
  793.  
  794.     common_keep(item_data, data_a, data_b)
  795.  
  796.   end
  797.   #--------------------------------------------------------------------------
  798.   # 武器を一定個数預ける/引き出す
  799.   #--------------------------------------------------------------------------
  800.   def weapon_keep(data_a, data_b)
  801.  
  802.     #種類を武器とする。
  803.  
  804.     item_data = $data_weapons
  805.  
  806.     #共通処理を実行。
  807.  
  808.     common_keep(item_data, data_a, data_b)
  809.  
  810.   end
  811.   #--------------------------------------------------------------------------
  812.   # 防具を一定個数預ける/引き出す
  813.   #--------------------------------------------------------------------------
  814.   def armor_keep(data_a, data_b)
  815.  
  816.     #種類を防具とする。
  817.  
  818.     item_data = $data_armors
  819.  
  820.     #共通処理を実行。
  821.  
  822.     common_keep(item_data, data_a, data_b)
  823.  
  824.   end
  825.   #--------------------------------------------------------------------------
  826.   # 一定個数預ける/引き出す場合の共通処理を実行します。
  827.   #--------------------------------------------------------------------------
  828.   def common_keep(item_data, data_a, data_b)
  829.  
  830.     #nilの場合は処理しない。
  831.  
  832.     return if item_data[data_b] == nil
  833.  
  834.     #預けられないアイテムの場合は処理しない。
  835.  
  836.     return if item_data[data_b].note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  837.  
  838.     #各種データを取得。
  839.  
  840.     data1 = $game_party.item_number(item_data[data_b])
  841.     data2 = $game_party.max_item_number(item_data[data_b])
  842.     data3 = $game_party.item_keep_number(item_data[data_b])
  843.     data4 = $game_party.max_item_keep_number(item_data[data_b])
  844.  
  845.     #追加で所持できる数と、追加で預けられる数を計算。
  846.  
  847.     data5 = data4 - data3
  848.     data6 = data2 - data1
  849.  
  850.     #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  851.  
  852.     amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  853.     $game_party.item_keep(item_data[data_b], amount)
  854.  
  855.   end
  856.   #--------------------------------------------------------------------------
  857.   # 特定ワードを含む単語を全て預ける/引き出す場合の処理を行う。
  858.   #--------------------------------------------------------------------------
  859.   def word_keep_all(data_a, data_b)
  860.  
  861.     #アイテム・武器・防具全てを含める配列を生成。
  862.  
  863.     item_data = $data_items + $data_weapons + $data_armors
  864.  
  865.     #存在するオブジェクトの数分だけ処理。
  866.  
  867.     item_data.each do |i|
  868.  
  869.       #nilの場合は処理しない。
  870.  
  871.       next if i == nil
  872.  
  873.       #預けられないアイテムの場合は処理しない。
  874.  
  875.       next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
  876.  
  877.       #指定されたワードがメモ欄に含まれていない場合は処理しない。
  878.  
  879.       next unless i.note.include?(data_b)
  880.  
  881.       #各種データを取得。
  882.  
  883.       data1 = $game_party.item_number(i)
  884.       data2 = $game_party.max_item_number(i)
  885.       data3 = $game_party.item_keep_number(i)
  886.       data4 = $game_party.max_item_keep_number(i)
  887.  
  888.       #追加で所持できる数と、追加で預けられる数を計算。
  889.  
  890.       data5 = data4 - data3
  891.       data6 = data2 - data1
  892.  
  893.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  894.  
  895.       amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  896.       $game_party.item_keep(i, amount)
  897.  
  898.     end
  899.   end
  900. end
   

评分

参与人数 1星屑 +6 收起 理由
Vortur + 6 窝也想要...

查看全部评分

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

本版积分规则

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

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

GMT+8, 2024-11-17 02:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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