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

Project1

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

[已经解决] 关于仓库脚本的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
26 小时
注册时间
2016-4-14
帖子
7
跳转到指定楼层
1
发表于 2016-6-28 22:20:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 dlsts 于 2016-6-28 22:38 编辑

使用的下面这个脚本 配合负重系统一起使用会导致选项重叠

我在416行添加了 @category_window.width = 874 结果原本四个选项只能选三个 而且还错位了

负重
RUBY 代码复制
  1. #==============================================================================
  2. # +++ VX移植 - VA负重系统改进版 +++
  3. #==============================================================================
  4. # VX版 原作者 By 雪流星
  5. # 蓝本 杂兵天下的VA移植版
  6. # 改进 By:VIPArcher
  7. #  -- 本脚本来自 [url]https://rpg.blue[/url] 使用或转载请保留以上信息。
  8. #
  9. #==============================================================================
  10. # 就是在物品画面的右上角放了一个显示负重的窗口
  11. # 更新了代码,取消的原来的计算每个队员的负重然后累加的模式 2014-12-10
  12. # 增加了商店界面的负重显示     2014-9-3
  13. #==============================================================================
  14. #
  15. # 物品备注<load N> 则该物品占用 N 点负重
  16. # load也可以写成「负重」或「負重」#注:没有“「」”不写的话默认为 Default_Load
  17. # 更改当前负重 current_load(x[,assign])
  18. # 其中 x 为数值可以为负数,assign 为 true 时当前负重直接赋值为x(可省略)
  19. # 例如:current_load(10,true) 当前负重直接赋值为10
  20. # 默认给物品增加一行说明.说明内容是物品的重量.
  21. # 但默认帮助窗口一共只能显示2行内容.
  22. # 因此你在数据库设置武器、护甲说明的时候.
  23. # 如果设置了2行内容.那么这新增加的第3行将无法显示出来.
  24. # 特别地,如果你使用了我的【技能物品说明增强】脚本,请将其置于该脚本以上的位置
  25. #==============================================================================
  26. $VIPArcherScript ||= {};$VIPArcherScript[:load] = 20140919
  27. #==============================================================================
  28. # ★ 设定部分 ★
  29. #==============================================================================
  30. module  VIPArcher end
  31. module  VIPArcher::Load
  32.   Default_Load = 0    #物品的默认负重
  33.   Width = 150         #负重信息窗口宽度
  34.   Load_Name = "负重:" #负重前显示的文字
  35.   Load_Var = 7        #作为队伍负重上限的变量ID,为0禁用变量作为负重上限,变成
  36.                       #累计每个角色的负重能力来计算负重上限
  37.   Load_Eval = "((mhp + mmp) * @level / agi) * [hp_rate,0.5].max"
  38.   # 每个角色的负重计算公式(eval)
  39.   Stop_SW = false       #true 使用 / false 不使用
  40.   # 事件中调用增减道具/武器/防具时,如果会导致超过负重上限,是否执行中断事件处理
  41.   # 推荐不使用,因为新加的功能就有一个是当超过负重时限制角色移动,开启这个
  42.   # 的话这个限制移动就无效了的说·3·
  43.  
  44.   Movable =  true       #true 使用 / false 不使用
  45.   # 满负重时降低移动速度(不使用时禁止移动连事件都无法启动,只能丢弃/使用物品)
  46.  
  47.   Move_Speed = 2 # 满负重时的移动速度
  48.  
  49.   # 负重超过上限时的提示内容
  50.   Message = "\\i[4]负重超过可承受的范围,\n移动将变得\\c[10]十分艰难!\\c[0]
  51. 丢些没用的东西掉吧。"
  52.  
  53.   # 按X键(A键)是否可以丢弃道具
  54.   # 如果你另外使用了丢弃道具的脚本请关闭
  55.   Lose_SW = true       #true 使用 / false 不使用
  56.  
  57.   # 是否在帮助窗口内自动添加负重信息
  58.   Help_SW = true       #true 使用 / false 不使用
  59.  
  60.   # 装备在身上的装备是否算入负重
  61.   Equip_SW = false      #true 计算 / false 不计算
  62.   #         "★★★★★★ 注意 ★★★★★★"
  63.   # 如果你的角色初始装备有占负重并且开启上面的功能,那么你必须
  64.   # 在游戏一开始时为当前负重赋值(自己算到底有多少负重·3·)
  65.   # 当有新队员加入队伍并且也带有负重的装备那么你也需要为当前负重加上对应的重量,
  66.   # 例如:事件脚本运行 current_load(10) 就是加上10的当前负重
  67. end
  68. #==============================================================================
  69. # ☆ 设定结束 ☆
  70. #==============================================================================
  71. class RPG::BaseItem
  72.   include VIPArcher::Load
  73.   #--------------------------------------------------------------------------
  74.   # ● 获取道具的重量
  75.   #--------------------------------------------------------------------------
  76.   def load
  77.     return unless self.is_a?(RPG::Item) || self.is_a?(RPG::EquipItem)
  78.     return $1.to_i if @note =~ /<(?:load|负重|負重)\s*(\d+)>/i
  79.     return Default_Load
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 新增负重帮助内容
  83.   #--------------------------------------------------------------------------
  84.   def description
  85.     if Help_SW && load && load != 0
  86.       return @description + "\n\\}重量:#{load}"
  87.     else
  88.       return @description
  89.     end
  90.   end unless $VIPArcherScript[:help_ex]
  91. end
  92. #==============================================================================
  93. #  显示当前负重信息的窗口
  94. #==============================================================================
  95. class Window_Load < Window_Base
  96.   include VIPArcher::Load
  97.   #--------------------------------------------------------------------------
  98.   # ● 初始化对象
  99.   #--------------------------------------------------------------------------
  100.   def initialize
  101.     super(Graphics.width - window_width, 72, window_width, fitting_height(1))
  102.     refresh
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 获取窗口的宽度
  106.   #--------------------------------------------------------------------------
  107.   def window_width
  108.     Width
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 刷新
  112.   #--------------------------------------------------------------------------
  113.   def refresh
  114.     contents.clear
  115.     contents.font.size - 4
  116.     draw_text(0, 0, window_width - 64, 24,load_name,0)
  117.     draw_text(0, 0, window_width - 24, 24, weight,2)
  118.     @temp_load = $game_party.current_load
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 获取当前负重信息
  122.   #--------------------------------------------------------------------------
  123.   def weight
  124.     "#{$game_party.current_load}/#{$game_party.total_load}"
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 获取负重前显示文字
  128.   #--------------------------------------------------------------------------
  129.   def load_name
  130.     Load_Name
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 更新画面
  134.   #--------------------------------------------------------------------------
  135.   def update
  136.     super
  137.     refresh if @temp_load != $game_party.current_load
  138.   end
  139. end
  140. #-------------------------------------------------------------------------------
  141. class Window_ItemCategory < Window_HorzCommand
  142.   include VIPArcher::Load
  143.   #--------------------------------------------------------------------------
  144.   # ● 获取窗口的宽度
  145.   #--------------------------------------------------------------------------
  146.   def window_width
  147.     scene_item_is? ? Graphics.width - Width : Graphics.width
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 获取列数
  151.   #--------------------------------------------------------------------------
  152.   def col_max
  153.     return scene_item_is? ? 3 : 4
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 判断是否为物品栏场景
  157.   #--------------------------------------------------------------------------
  158.   def scene_item_is?
  159.     return SceneManager.scene_is?(Scene_Item)
  160.   end
  161. end
  162. #==============================================================================
  163. # ■ 物品界面显示负重栏
  164. #==============================================================================
  165. class Scene_Item < Scene_ItemBase
  166.   include VIPArcher::Load
  167.   #--------------------------------------------------------------------------
  168.   # ● 开始处理
  169.   #--------------------------------------------------------------------------
  170.   alias load_start start
  171.   def start
  172.     load_start
  173.     @load_window = Window_Load.new
  174.     @load_window.viewport = @viewport
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 结束处理
  178.   #--------------------------------------------------------------------------
  179.   alias load_terminate terminate
  180.   def terminate
  181.     load_terminate
  182.     @load_window.dispose
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 更新画面
  186.   #--------------------------------------------------------------------------
  187.   alias load_update update
  188.   def update
  189.     #--------------------------------------------------------------------------
  190.     # ★ 按X键(A键)丢弃道具 - 贵重物品无法丢弃 ★修改:VIPArcher
  191.     #--------------------------------------------------------------------------
  192.     if Input.trigger?(Input::X) && Lose_SW
  193.       item = @item_window.item
  194.       if item.is_a?(RPG::Item) && item.key_item?
  195.         Sound.play_buzzer
  196.       else
  197.         Sound.play_cancel
  198.         $game_party.lose_item(item, 1)
  199.         @item_window.refresh
  200.       end unless item == nil
  201.     end
  202.     @load_window.update
  203.     load_update
  204.   end
  205. end
  206. #-------------------------------------------------------------------------------
  207. class Window_ShopNumber < Window_Selectable
  208.   include VIPArcher::Load
  209.   attr_accessor :buy_or_sell                    #买入的标志
  210.   #--------------------------------------------------------------------------
  211.   # ● 刷新
  212.   #--------------------------------------------------------------------------
  213.   alias vip_shopnumber_refresh refresh
  214.   def refresh
  215.     vip_shopnumber_refresh
  216.     draw_current_weight(@item)
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ○ 买卖时重量变化的描绘
  220.   #--------------------------------------------------------------------------
  221.   def draw_current_weight(item)
  222.     current = $game_party.current_load
  223.     weight = current + item.load * @number * (@buy_or_sell ? 1 : -1)
  224.     width = contents_width - 8
  225.     cx = text_size(@currency_unit).width
  226.     change_color(system_color)
  227.     draw_text(4, y + 150, width, line_height, "#{Load_Name}")
  228.     change_color(normal_color)
  229.     wt = "#{weight} / #{$game_party.total_load}"
  230.     draw_text(4, y + 150, width, line_height, wt, 2)
  231.   end
  232. end
  233. #-------------------------------------------------------------------------------
  234. class Window_ShopStatus < Window_Base
  235.   include VIPArcher::Load
  236.   #--------------------------------------------------------------------------
  237.   # ● 刷新
  238.   #--------------------------------------------------------------------------
  239.   alias vip_shopstatus_refresh refresh
  240.   def refresh
  241.     vip_shopstatus_refresh
  242.     draw_weight_occupy(4, 24)
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 绘制持负重信息
  246.   #--------------------------------------------------------------------------
  247.   def draw_weight_occupy(x, y)
  248.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  249.     change_color(system_color)
  250.     draw_text(rect, "#{Load_Name}", 3)
  251.     change_color(normal_color)
  252.     weight = "#{$game_party.current_load}/#{$game_party.total_load}"
  253.     draw_text(rect, weight, 2)
  254.     @temp_load = $game_party.current_load
  255.   end
  256. end
  257. #==============================================================================
  258. # ■ 获取队伍最大负重
  259. #==============================================================================
  260. class Game_Party < Game_Unit
  261.   include VIPArcher::Load
  262.   #--------------------------------------------------------------------------
  263.   # ● 定义实例变量
  264.   #--------------------------------------------------------------------------
  265.   attr_accessor :current_load, :load_trade_item     #负重
  266.   #--------------------------------------------------------------------------
  267.   # ● 初始化对象
  268.   #--------------------------------------------------------------------------
  269.   alias load_initialize initialize
  270.   def initialize
  271.     load_initialize
  272.     total_load
  273.     @current_load = 0
  274.     @total_load = 0
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● 获取队伍最大负重
  278.   #--------------------------------------------------------------------------
  279.   def total_load
  280.     return $game_variables[Load_Var] if Load_Var > 0
  281.     all_members.inject(0) {|total,actor| total + actor.load }
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 判断负重是否已满
  285.   #--------------------------------------------------------------------------
  286.   def load_max?
  287.     return false if @current_load == 0
  288.     @current_load >= total_load
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 增加/减少物品时计算负重
  292.   #--------------------------------------------------------------------------
  293.   alias load_gain_item gain_item
  294.   def gain_item(item, n, include_equip = false)
  295.     return if item.nil?
  296.     load_gain_item(item, n, include_equip)
  297.     @current_load += item.load * n if !@load_trade_item
  298.   end
  299. end
  300. #-------------------------------------------------------------------------------
  301. class Game_Actor < Game_Battler
  302.   include VIPArcher::Load
  303.   #--------------------------------------------------------------------------
  304.   # ● 装备时不计算负重的增减 * 方法覆盖
  305.   #     new_item : 取出的物品
  306.   #     old_item : 放入的物品
  307.   #--------------------------------------------------------------------------
  308.   def trade_item_with_party(new_item, old_item)
  309.     return false if new_item && !$game_party.has_item?(new_item)
  310.     $game_party.load_trade_item = true if Equip_SW == true
  311.     $game_party.gain_item(old_item, 1)
  312.     $game_party.lose_item(new_item, 1)
  313.     $game_party.load_trade_item = false if Equip_SW == true
  314.     return true
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● 获取角色的负重上限
  318.   #--------------------------------------------------------------------------
  319.   def load
  320.     eval(Load_Eval).to_i
  321.   end
  322. end
  323. #==============================================================================
  324. # ■ 增减物品时判断负重
  325. #==============================================================================
  326. class Game_Interpreter
  327.   include VIPArcher::Load
  328.   #--------------------------------------------------------------------------
  329.   # ● 增减道具
  330.   #--------------------------------------------------------------------------
  331.   alias load_command_126 command_126
  332.   def command_126
  333.     n = operate_value(@params[1], @params[2], @params[3])
  334.     return command_115 if check_load(@params[0], 0, n) && Stop_SW
  335.     load_command_126
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 增減武器
  339.   #--------------------------------------------------------------------------
  340.   alias load_command_127 command_127
  341.   def command_127
  342.     n = operate_value(@params[1], @params[2], @params[3])
  343.     return command_115 if check_load(@params[0], 1, n) &&  Stop_SW
  344.     load_command_127
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 增減防具
  348.   #--------------------------------------------------------------------------
  349.   alias load_command_128 command_128
  350.   def command_128
  351.     n = operate_value(@params[1], @params[2], @params[3])
  352.     return command_115 if check_load(@params[0], 2, n) && Stop_SW
  353.     load_command_128
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● 增减物品超重时提示
  357.   #--------------------------------------------------------------------------
  358.   def check_load(item_id, type, n)
  359.     case type
  360.     when 0; item = $data_items[item_id]
  361.     when 1; item = $data_weapons[item_id]
  362.     when 2; item = $data_armors[item_id]
  363.     end
  364.     if (((item.load * n) + $game_party.current_load) > $game_party.total_load)
  365.       $game_message.texts.push("#{Message}") if $game_message.visible != true
  366.       $game_message.visible = true
  367.     end
  368.     return (((item.load * n) + $game_party.current_load) > $game_party.total_load)
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ● 更改负重
  372.   #--------------------------------------------------------------------------
  373.   def current_load(current_load,assign = false)
  374.     if assign
  375.       $game_party.current_load = current_load
  376.     else
  377.       $game_party.current_load += current_load
  378.     end
  379.   end
  380. end
  381. #==============================================================================
  382. # ★ 满负重时限制行动 ★
  383. #==============================================================================
  384. class Game_Player < Game_Character
  385.   include VIPArcher::Load
  386.   #--------------------------------------------------------------------------
  387.   # ● 判定是否可以移动
  388.   #--------------------------------------------------------------------------
  389.   alias load_movable? movable?
  390.   def movable?
  391.     return false if $game_party.load_max? && !Movable
  392.     load_movable?
  393.   end
  394. end
  395. #==============================================================================
  396. # ★ 满负重时降低移动速度 ★
  397. #==============================================================================
  398. class Game_CharacterBase
  399.   include VIPArcher::Load
  400.   #--------------------------------------------------------------------------
  401.   # ● 获取移动速度(判断是否跑步)
  402.   #--------------------------------------------------------------------------
  403.   alias load_real_move_speed real_move_speed
  404.   def real_move_speed
  405.     return Move_Speed if $game_party.load_max? && Movable
  406.     load_real_move_speed
  407.   end
  408. end
  409. #==============================================================================
  410. # ★ 满负重时限制购买 ★
  411. #==============================================================================
  412. class Window_ShopBuy < Window_Selectable
  413.   #--------------------------------------------------------------------------
  414.   # ● 查询商品是否可买
  415.   #--------------------------------------------------------------------------
  416.   alias load_enable? enable?
  417.   def enable?(item)
  418.     load_enable?(item) && !$game_party.load_max?
  419.   end
  420. end
  421. #==============================================================================
  422. # ★ 根据负重设定可购买的物品数量 ★
  423. #==============================================================================
  424. class Scene_Shop < Scene_MenuBase
  425.   #--------------------------------------------------------------------------
  426.   # ● 指令“买入”
  427.   #--------------------------------------------------------------------------
  428.   alias vip_load_command_buy command_buy
  429.   def command_buy
  430.     vip_load_command_buy
  431.     @number_window.buy_or_sell = true
  432.   end
  433.   #--------------------------------------------------------------------------
  434.   # ● 指令“卖出”
  435.   #--------------------------------------------------------------------------
  436.   alias vip_load_command_sell command_sell
  437.   def command_sell
  438.     vip_load_command_sell
  439.     @number_window.buy_or_sell = false
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # ● 获取可以买入的最大值
  443.   #--------------------------------------------------------------------------
  444.   alias load_max_buy max_buy
  445.   def max_buy
  446.     vip = @item.load == 0 ? load_max_buy : ($game_party.total_load -
  447.     $game_party.current_load) / @item.load
  448.     [load_max_buy,vip].min
  449.   end
  450. end

仓库
RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 アイテム預かり所 Ver1.03 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. # Ver1.02 一部機能を更に軽量化。
  67. #         Scene_Shop及び継承しているシーンクラスにおいて
  68. #         買った物を直接預かり所へ送る機能を追加。
  69. #         所持限界数を超えてアイテムを入手した際に
  70. #         自動的に預かり所に送る機能を追加。
  71. #
  72. # Ver1.03 ロード時に更に一部軽量化。
  73. #==============================================================================
  74. module ITEM_KEEPER
  75.  
  76.   #ショップ画面で預かり所への売買機能を付与するかを設定できます。
  77.  
  78.   SHOP      = true
  79.  
  80.   #ショップ画面で預かり所モードへの切り替えボタンを設定できます。
  81.  
  82.   KEY       = :Z
  83.  
  84.   #預かり所モードから所持品モードに切り替えた際のメッセージを設定します。
  85.  
  86.   TEXT1     = "更改为取出模式"
  87.  
  88.   #所持品モードから預かり所モードに切り替えた際のメッセージを設定します。
  89.  
  90.   TEXT2     = "更改为储存模式"
  91.  
  92.   #モードに切り替え時のSEを設定します。
  93.   #配列内は、名前、音量、ピッチの順に設定して下さい。
  94.  
  95.   SE        = ["Decision3",80,100]
  96.  
  97.   #ショップでの預けている数の項目名を設定します。
  98.  
  99.   SHOP_POS  = "储存数量"
  100.  
  101.   #預かり所モードの際の数字入力幅の増加値を設定します。(3桁以上の入力を考慮)
  102.  
  103.   SHOP_FIG  = 1
  104.  
  105.   #ショップでの預り所への売買機能を無効化する為のスイッチを指定します。
  106.  
  107.   SWITCH1   = 201
  108.  
  109.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  110.   #true 表示しない false 表示する
  111.  
  112.   UNVISIBLE = false
  113.  
  114.   #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  115.   #true 表示しない false 表示する
  116.  
  117.   WORD1     = "无法储存"
  118.  
  119.   #保存に個数制限を設ける為の設定用キーワードです。
  120.  
  121.   WORD2     = "储存限制"
  122.  
  123.   #保存制限のないアイテムについていくつまで預けられるかを設定します。
  124.  
  125.   LIMIT     = 999
  126.  
  127.   #所持数を超えて入手したアイテムが自動で預かり所に送られるかどうかを設定します。
  128.  
  129.   AUTOKEEP  = true
  130.  
  131.   #所持数を超えて入手したアイテムが自動で預かり所に送られる機能を
  132.   #一時的に封印するスイッチを指定します。
  133.  
  134.   SWITCH2   = 202
  135.  
  136.   #説明ウィンドウを表示するかどうかを設定します。
  137.  
  138.   DESCRIPT  = true
  139.  
  140.   #数量ウィンドウと説明ウィンドウの背景透明度を変更します。
  141.  
  142.   B_OPACITY = 255
  143.  
  144.   #軽量化フラグ。
  145.  
  146.   FLAG      = true
  147.  
  148.   #説明ウィンドウに表示する項目を設定します。
  149.   #(基本的にこの部分を変更する必要はありません)
  150.  
  151.   D         = [
  152.   ["↓",":取出1个"],
  153.   ["↑",":储存1个"],
  154.   ["←",":取出10个"],
  155.   ["→",":储存10个"],
  156.   ["Ctrl",":取出100个"],
  157.   ["Shift",":储存100个"]
  158.   ]
  159.  
  160. end
  161. class RPG::BaseItem
  162.   #--------------------------------------------------------------------------
  163.   # 保存禁止のフラグ
  164.   #--------------------------------------------------------------------------
  165.   def keep_seal_flag
  166.  
  167.     #キャッシュがある場合はキャッシュを返す。
  168.  
  169.     return @keep_seal_flag if @keep_seal_flag != nil
  170.  
  171.     #データを取得。
  172.  
  173.     @keep_seal_flag = self.note.include?("<" + ITEM_KEEPER::WORD1 + ">") ? true : false
  174.  
  175.     #データを返す。
  176.  
  177.     @keep_seal_flag
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # 最大保管数を取得
  181.   #--------------------------------------------------------------------------
  182.   def max_item_keep_number
  183.  
  184.     #キャッシュが存在する場合はキャッシュを返す。
  185.  
  186.     return @max_item_keep_number if @max_item_keep_number != nil
  187.  
  188.     #メモ欄からデータを取得し、取得できない場合はデフォルト数を返す。
  189.  
  190.     memo = self.note.scan(/<#{ITEM_KEEPER::WORD2}[::](\S+)>/).flatten
  191.     @max_item_keep_number = memo != nil && !memo.empty? ? memo[0].to_i : ITEM_KEEPER::LIMIT
  192.  
  193.     #データを返す。
  194.  
  195.     @max_item_keep_number
  196.   end
  197. end
  198. class Game_Party < Game_Unit
  199.   #--------------------------------------------------------------------------
  200.   # オブジェクト初期化
  201.   #--------------------------------------------------------------------------
  202.   alias initialize_ik initialize
  203.   def initialize
  204.  
  205.     #本来の処理を実行。
  206.  
  207.     initialize_ik
  208.  
  209.     #パーティー外全アイテムリストを初期化。
  210.  
  211.     init_all_items_ik
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # パーティー外全アイテムリストの初期化(強制)
  215.   #--------------------------------------------------------------------------
  216.   def init_all_items_ik
  217.  
  218.     #それぞれ、空のハッシュを生成。
  219.  
  220.     @items_k = {}
  221.     @weapons_k = {}
  222.     @armors_k = {}
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # パーティー外全アイテムリストの初期化(nilの場合)
  226.   #--------------------------------------------------------------------------
  227.   def init_all_items_ik_un_nil
  228.  
  229.     #それぞれ、存在しない場合のみハッシュを生成。
  230.  
  231.     @items_k = {} if @items_k == nil
  232.     @weapons_k = {} if @weapons_k == nil
  233.     @armors_k = {} if @armors_k == nil
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # アイテムの最大保管数取得
  237.   #--------------------------------------------------------------------------
  238.   def max_item_keep_number(item)
  239.  
  240.     #アイテムが存在しない場合はfalseを返す。
  241.  
  242.     return false if item == nil
  243.  
  244.     #アイテムの最大保管数を返す。
  245.  
  246.     item.max_item_keep_number
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # アイテムの保管数取得
  250.   #--------------------------------------------------------------------------
  251.   def item_keep_number(item)
  252.  
  253.     #コンテナを取得。
  254.  
  255.     container = item_keep_container(item.class)
  256.  
  257.     #コンテナにデータが存在しない場合は0を返す。
  258.  
  259.     container ? container[item.id] || 0 : 0
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # アイテムの保管
  263.   #--------------------------------------------------------------------------
  264.   def item_keep(item, number, get = false)
  265.  
  266.     #数量データを取得。
  267.  
  268.     number_data = number
  269.  
  270.     #アイテム保管を実行。
  271.  
  272.     item_keep_execute(item, number_data)
  273.  
  274.     #所持アイテムを減らす。
  275.  
  276.     gain_item(item, -number_data) if get == false
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # 預けているアイテムのクラスに対応するコンテナオブジェクトを取得
  280.   #--------------------------------------------------------------------------
  281.   def item_keep_container(item_class)
  282.  
  283.     #アイテムの種類に応じてコンテナを取得。
  284.  
  285.     return @items_k   if item_class == RPG::Item
  286.     return @weapons_k if item_class == RPG::Weapon
  287.     return @armors_k  if item_class == RPG::Armor
  288.     return nil
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # アイテムの増加(減少)
  292.   #--------------------------------------------------------------------------
  293.   def item_keep_execute(item, amount)
  294.  
  295.     #コンテナを取得。
  296.  
  297.     container = item_keep_container(item.class)
  298.  
  299.     #コンテナが存在しない場合は処理をしない。
  300.  
  301.     return if container == nil
  302.  
  303.     #処理前の保管数を取得。
  304.  
  305.     last_number = item_keep_number(item)
  306.  
  307.     #処理後の保管数を取得。
  308.  
  309.     new_number = last_number + amount
  310.  
  311.     #保管数を変更する。
  312.  
  313.     container[item.id] = new_number
  314.  
  315.     #保管数が0となった場合はハッシュから削除する。
  316.  
  317.     container.delete(item.id) if container[item.id] == 0
  318.  
  319.     #マップのリフレッシュフラグを立てる。
  320.  
  321.     $game_map.need_refresh = true
  322.   end
  323.  
  324.   #自動倉庫送りが有効な場合のみ変更
  325.  
  326.   if ITEM_KEEPER::AUTOKEEP
  327.  
  328.   #--------------------------------------------------------------------------
  329.   # アイテムの増加(減少)
  330.   #--------------------------------------------------------------------------
  331.   alias gain_item_ik gain_item
  332.   def gain_item(item, amount, include_equip = false)
  333.  
  334.     #自動倉庫送りスイッチが無効もしくは、スイッチがOFFの時で
  335.     #なおかつアイテムが存在し、それが預かり所禁止出ない場合
  336.  
  337.     if (ITEM_KEEPER::SWITCH2 == 0 or !$game_switches[ITEM_KEEPER::SWITCH2]) && (item != nil && !item.keep_seal_flag)
  338.  
  339.       #アイテムコンテナを取得。
  340.  
  341.       container = item_container(item.class)
  342.  
  343.       #アイテムコンテナが存在しない場合は処理を飛ばす。
  344.  
  345.       return unless container
  346.  
  347.       #所持数と入手数の合計値を取得。
  348.  
  349.       ex_amount = item_number(item) + amount
  350.  
  351.       #合計値が最大所持数を上回る場合
  352.  
  353.       if ex_amount > max_item_number(item)
  354.  
  355.         #合計値から最大所持数を引いた値を取得。
  356.  
  357.         data = ex_amount - max_item_number(item)
  358.  
  359.         #倉庫アイテムコンテナを取得。
  360.  
  361.         ik_container = item_keep_container(item.class)
  362.  
  363.         #倉庫アイテムの数を変更する。
  364.  
  365.         ik_container[item.id] = [item_keep_number(item) + data, max_item_keep_number(item)].min
  366.  
  367.         #入手数を減らす。
  368.  
  369.         amount -= data
  370.       end
  371.     end
  372.  
  373.     #本来の処理を実行。
  374.  
  375.     gain_item_ik(item, amount, include_equip)
  376.   end
  377.  
  378.   end
  379. end
  380. class Scene_Load < Scene_File
  381.   #--------------------------------------------------------------------------
  382.   # ロード成功時の処理
  383.   #--------------------------------------------------------------------------
  384.   alias on_load_success_ik on_load_success
  385.   def on_load_success
  386.     $game_party.init_all_items_ik_un_nil
  387.     on_load_success_ik
  388.   end
  389. end
  390. class Scene_Item_Keep < Scene_Item
  391.   #--------------------------------------------------------------------------
  392.   # 開始処理
  393.   #--------------------------------------------------------------------------
  394.   def start
  395.  
  396.     #スーパークラスの処理を実行。
  397.  
  398.     super
  399.  
  400.     #説明ウィンドウの作成
  401.  
  402.     create_description_window
  403.  
  404.     #個数入力ウィンドウの作成
  405.  
  406.     create_number_window
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # カテゴリウィンドウの作成
  410.   #--------------------------------------------------------------------------
  411.   def create_category_window
  412.     @category_window = Window_ItemCategory.new
  413.     @category_window.viewport = @viewport
  414.     @category_window.help_window = @help_window
  415.     @category_window.y = @help_window.height
  416.     @category_window.set_handler(:ok,     method(:on_category_ok))
  417.     @category_window.set_handler(:cancel, method(:return_scene))
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # アイテムウィンドウの作成
  421.   #--------------------------------------------------------------------------
  422.   def create_item_window
  423.     wy = @category_window.y + @category_window.height
  424.     wh = Graphics.height - wy
  425.     @item_window = Window_PTItemList.new(0, wy, Graphics.width, wh)
  426.     @item_window.viewport = @viewport
  427.     @item_window.help_window = @help_window
  428.     @item_window.set_handler(:ok,     method(:on_item_ok))
  429.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  430.     @category_window.item_window = @item_window
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # 説明ウィンドウの作成
  434.   #--------------------------------------------------------------------------
  435.   def create_description_window
  436.  
  437.     #説明ウィンドウを作成しない場合は処理を行わない。
  438.  
  439.     return unless ITEM_KEEPER::DESCRIPT
  440.  
  441.     @description_window = Window_IKDescription.new
  442.     @description_window.z = 100
  443.     @description_window.viewport = @viewport
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # 個数入力ウィンドウの作成
  447.   #--------------------------------------------------------------------------
  448.   def create_number_window
  449.     @number_window = Window_IKInput.new
  450.     @number_window.z = 100
  451.     @number_window.item_window = @item_window
  452.     @number_window.description_window = @description_window if ITEM_KEEPER::DESCRIPT
  453.     @number_window.viewport = @viewport
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # カテゴリ[決定]
  457.   #--------------------------------------------------------------------------
  458.   def on_category_ok
  459.     @item_window.activate
  460.     @item_window.select_last
  461.     @category_window.deactivate
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # アイテム[決定]
  465.   #--------------------------------------------------------------------------
  466.   def on_item_ok
  467.     $game_party.last_item.object = item
  468.     item == nil ? @item_window.activate : determine_item
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # アイテムの決定
  472.   #--------------------------------------------------------------------------
  473.   def determine_item
  474.     @number_window.number = 0
  475.     item = @item_window.item
  476.     @number_window.show
  477.     @number_window.refresh
  478.     @description_window.show if ITEM_KEEPER::DESCRIPT
  479.     @item_window.deactivate
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # アイテム[キャンセル]
  483.   #--------------------------------------------------------------------------
  484.   def on_item_cancel
  485.     @item_window.unselect
  486.     @category_window.activate
  487.   end
  488. end
  489. #==============================================================================
  490. # ■ Window_PTItemList
  491. #------------------------------------------------------------------------------
  492. #  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
  493. #==============================================================================
  494.  
  495. class Window_PTItemList < Window_ItemList
  496.   #--------------------------------------------------------------------------
  497.   # アイテムをリストに含めるかどうか
  498.   #--------------------------------------------------------------------------
  499.   alias include_ik? include?
  500.   def include?(item)
  501.  
  502.     #アイテムが存在しない場合、ウィンドウが不可視の場合
  503.     #保管禁止アイテムを非表示にする場合は表示しない。
  504.  
  505.     return false if item == nil
  506.     return false if self.visible == false
  507.     return false if ITEM_KEEPER::UNVISIBLE == true && item.keep_seal_flag
  508.  
  509.     #本来の処理を実行。
  510.  
  511.     include_ik?(item)
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # アイテムを許可状態で表示するかどうか
  515.   #--------------------------------------------------------------------------
  516.   def enable?(item)
  517.  
  518.     #アイテムが存在しない場合、もしくは保管禁止アイテムの場合はfalseを返す。
  519.  
  520.     return false if item == nil
  521.     return false if item.keep_seal_flag
  522.     return true
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # アイテムリストの作成
  526.   #--------------------------------------------------------------------------
  527.   def make_item_list
  528.  
  529.     #全ての中から、所持アイテムか倉庫アイテムとして存在する物のみ取得する。
  530.  
  531.     item_data = $data_items + $data_weapons + $data_armors
  532.     @data = item_data.select {|item| include?(item) && ($game_party.item_number(item) > 0 or $game_party.item_keep_number(item) > 0)}
  533.     @data.push(nil) if include?(nil)
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # 選択項目の有効状態を取得
  537.   #--------------------------------------------------------------------------
  538.   def current_item_enabled?
  539.     enable?(@data[index])
  540.   end
  541.   #--------------------------------------------------------------------------
  542.   # 桁数の取得
  543.   #--------------------------------------------------------------------------
  544.   def col_max
  545.     return 1
  546.   end
  547.   #--------------------------------------------------------------------------
  548.   # フレーム更新
  549.   #--------------------------------------------------------------------------
  550.   def update
  551.     super
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # 項目の描画
  555.   #--------------------------------------------------------------------------
  556.   def draw_item(index, flag = false)
  557.  
  558.     #データからアイテムを取得し、各種データを記述する。
  559.  
  560.     item = @data[index]
  561.  
  562.     #アイテムが存在しない場合は処理を行わない。
  563.  
  564.     return unless item
  565.  
  566.     rect = item_rect(index)
  567.     contents.clear_rect(rect) if flag
  568.     rect.width -= 4
  569.     draw_item_name(item, rect.x, rect.y, enable?(item))
  570.     change_color(text_color(5))
  571.     draw_text(600, rect.y, 100, line_height, "背包", 2)
  572.     change_color(text_color(0))
  573.     draw_text(650, rect.y, 100, line_height, $game_party.item_number(item), 2)
  574.     draw_text(660, rect.y, 100, line_height,"/", 2)
  575.     draw_text(700, rect.y, 100, line_height, $game_party.max_item_number(item), 2)
  576.     change_color(text_color(5))
  577.     draw_text(800, rect.y, 100, line_height, "箱子", 2)
  578.     change_color(text_color(0))
  579.     draw_text(850, rect.y, 100, line_height, $game_party.item_keep_number(item), 2)
  580.     draw_text(860, rect.y, 100, line_height, "/", 2)
  581.     draw_text(900, rect.y, 100, line_height, $game_party.max_item_keep_number(item), 2)
  582.  
  583.   end
  584. end
  585. class Window_IKInput < Window_Selectable
  586.   #--------------------------------------------------------------------------
  587.   # 公開インスタンス変数
  588.   #--------------------------------------------------------------------------
  589.   attr_accessor   :item_window
  590.   attr_accessor   :number
  591.   attr_accessor   :description_window
  592.   #--------------------------------------------------------------------------
  593.   # オブジェクト初期化
  594.   #--------------------------------------------------------------------------
  595.   def initialize
  596.  
  597.     #ウィンドウを生成する。
  598.  
  599.     super(Graphics.width / 2 - 122, Graphics.height / 2 - 50, 244, 100)
  600.  
  601.     #設定に応じて背景透明度を変更する。
  602.  
  603.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  604.  
  605.     #一旦隠す。
  606.  
  607.     hide
  608.  
  609.     #非アクティブにする。
  610.  
  611.     deactivate
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # 数字の変更処理
  615.   #--------------------------------------------------------------------------
  616.   def update
  617.  
  618.     #見えない場合は更新しない。
  619.  
  620.     return unless self.visible
  621.  
  622.     #入力関連の各種処理を実行。
  623.  
  624.     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)
  625.       if Input.press?(Input::SHIFT)   #100個預ける
  626.         keep_exe(@item_window.item, 100)
  627.       elsif Input.press?(Input::CTRL) #100個引き出す
  628.         get_exe(@item_window.item, 100)
  629.       elsif Input.repeat?(:RIGHT)     #10個預ける
  630.         keep_exe(@item_window.item, 10)
  631.       elsif Input.repeat?(:LEFT)      #10個引き出す
  632.         get_exe(@item_window.item, 10)
  633.       elsif Input.repeat?(:UP)        #1個預ける
  634.         keep_exe(@item_window.item, 1)
  635.       elsif Input.repeat?(:DOWN)      #1個引き出す
  636.         get_exe(@item_window.item, 1)
  637.       end
  638.       refresh_number
  639.     end
  640.     if Input.trigger?(:C)
  641.  
  642.       #決定音を鳴らす。
  643.  
  644.       Sound.play_ok
  645.  
  646.       #数に応じてアイテム数を変更。
  647.  
  648.       $game_party.item_keep(@item_window.item, @number)
  649.  
  650.       #ウィンドウを隠す。
  651.  
  652.       self.hide
  653.  
  654.       #ウィンドウを非アクティブにする。
  655.  
  656.       self.deactivate
  657.  
  658.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  659.  
  660.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  661.  
  662.       #条件に応じてアイテムウィンドウを変更する。
  663.  
  664.       ITEM_KEEPER::FLAG ? @item_window.draw_item(@item_window.index, true) : @item_window.refresh
  665.  
  666.       #アイテムウィンドウをアクティブにする。
  667.  
  668.       @item_window.activate
  669.     elsif Input.trigger?(:B)
  670.  
  671.       #決定音を鳴らす。
  672.  
  673.       Sound.play_cancel
  674.  
  675.       #ウィンドウを隠す。
  676.  
  677.       self.hide
  678.  
  679.       #ウィンドウを非アクティブにする。
  680.  
  681.       self.deactivate
  682.  
  683.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  684.  
  685.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  686.  
  687.       #アイテムウィンドウをアクティブにする。
  688.  
  689.       @item_window.activate
  690.  
  691.     end
  692.   end
  693.   #--------------------------------------------------------------------------
  694.   # 預けられる限界をチェック
  695.   #--------------------------------------------------------------------------
  696.   def limitcheck1
  697.  
  698.     #所持数が既に0、もしくは預ける限界に達している場合はfalseを返す。
  699.  
  700.     return false if $game_party.item_number(@item_window.item) - @number == 0
  701.     return false if $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item)
  702.     return true
  703.   end
  704.   #--------------------------------------------------------------------------
  705.   # 引き出せる限界をチェック
  706.   #--------------------------------------------------------------------------
  707.   def limitcheck2
  708.  
  709.     #所持数が既に限界に達している場合、もしくは預けている数が0の場合はfalseを返す。
  710.  
  711.     return false if $game_party.item_number(@item_window.item) - @number == $game_party.max_item_number(@item_window.item)
  712.     return false if $game_party.item_keep_number(@item_window.item) + @number == 0
  713.     return true
  714.   end
  715.   #--------------------------------------------------------------------------
  716.   # 預ける
  717.   #--------------------------------------------------------------------------
  718.   def keep_exe(item, amount)
  719.  
  720.     #数量分処理する。
  721.  
  722.     amount.times do
  723.       @number += 1 if limitcheck1
  724.     end
  725.   end
  726.   #--------------------------------------------------------------------------
  727.   # 引き出す
  728.   #--------------------------------------------------------------------------
  729.   def get_exe(item, amount)
  730.  
  731.     #数量分処理する。
  732.  
  733.     amount.times do
  734.       @number -= 1 if limitcheck2
  735.     end
  736.   end
  737.   #--------------------------------------------------------------------------
  738.   # リフレッシュ
  739.   #--------------------------------------------------------------------------
  740.   def refresh
  741.  
  742.     #不可視状態の場合はリフレッシュしない。
  743.  
  744.     return false unless self.visible
  745.  
  746.     #数量を更新する。
  747.  
  748.     @last_number = @number
  749.  
  750.     #ウィンドウの内容を消去する。
  751.  
  752.     contents.clear
  753.     create_contents
  754.  
  755.     #アイテム名を描写。
  756.  
  757.     draw_item_name(@item_window.item, 0, 0)
  758.     change_color(system_color)
  759.     draw_text(0, line_height * 1, 80, line_height, "背包", 1)
  760.     draw_text(self.contents.width - 80, line_height * 1, 80, line_height, "箱子", 1)
  761.     draw_text(0, line_height * 1, self.contents.width, line_height, "→", 1)
  762.     draw_text(0, line_height * 2, self.contents.width, line_height, "←", 1)
  763.  
  764.     #所持数データを描写。
  765.  
  766.     $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)
  767.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  768.     $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)
  769.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  770.   end
  771.   #--------------------------------------------------------------------------
  772.   # 数量のみリフレッシュ
  773.   #--------------------------------------------------------------------------
  774.   def refresh_number
  775.  
  776.     #不可視状態の場合はリフレッシュしない。
  777.  
  778.     return false unless self.visible
  779.  
  780.     #最後の数量と現在の数量が異なる場合は数量を更新する。
  781.  
  782.     if @last_number != @number
  783.       Sound.play_cursor
  784.       @last_number = @number
  785.     end
  786.  
  787.     #ウィンドウの内容を消去する。
  788.  
  789.     contents.clear_rect(0, line_height * 2, 80, line_height)
  790.     contents.clear_rect(self.contents.width - 80, line_height * 2, 80, line_height)
  791.  
  792.     #所持数データを描写。
  793.  
  794.     $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)
  795.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  796.     $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)
  797.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  798.   end
  799. end
  800. class Window_IKDescription < Window_Base
  801.   def initialize
  802.  
  803.     #ウィンドウを生成する。
  804.  
  805.     super(Graphics.width / 2 - 240, Graphics.height / 3 * 2, 480, 96)
  806.  
  807.     #設定に応じて背景透明度を変更する。
  808.  
  809.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  810.  
  811.     #システムカラーで項目部分を描画する。
  812.  
  813.     change_color(system_color)
  814.  
  815.     draw_text(0, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][0], 0)
  816.     draw_text(self.contents.width / 2, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][0], 0)
  817.     draw_text(0, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][0], 0)
  818.     draw_text(self.contents.width / 2, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][0], 0)
  819.     draw_text(0, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][0], 0)
  820.     draw_text(self.contents.width / 2, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][0], 0)
  821.  
  822.     #通常カラーで項目部分を描画する。
  823.  
  824.     change_color(normal_color)
  825.  
  826.     draw_text(90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][1], 0)
  827.     draw_text(self.contents.width / 2 + 90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][1], 0)
  828.     draw_text(90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][1], 0)
  829.     draw_text(self.contents.width / 2 + 90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][1], 0)
  830.     draw_text(90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][1], 0)
  831.     draw_text(self.contents.width / 2 + 90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][1], 0)
  832.  
  833.     hide
  834.   end
  835. end
  836. class Game_Interpreter
  837.   #--------------------------------------------------------------------------
  838.   # アイテムを全て預ける/引き出す
  839.   #--------------------------------------------------------------------------
  840.   def item_keep_all(data)
  841.  
  842.     #種類をアイテムとする。
  843.  
  844.     item_data = $data_items
  845.  
  846.     #共通処理を実行。
  847.  
  848.     common_keep_all(item_data, data)
  849.   end
  850.   #--------------------------------------------------------------------------
  851.   # 武器を全て預ける/引き出す
  852.   #--------------------------------------------------------------------------
  853.   def weapon_keep_all(data)
  854.  
  855.     #種類を武器とする。
  856.  
  857.     item_data = $data_weapons
  858.  
  859.     #共通処理を実行。
  860.  
  861.     common_keep_all(item_data, data)
  862.   end
  863.   #--------------------------------------------------------------------------
  864.   # 防具を全て預ける/引き出す
  865.   #--------------------------------------------------------------------------
  866.   def armor_keep_all(data)
  867.  
  868.     #種類を防具とする。
  869.  
  870.     item_data = $data_armors
  871.  
  872.     #共通処理を実行。
  873.  
  874.     common_keep_all(item_data, data)
  875.   end
  876.   #--------------------------------------------------------------------------
  877.   # 全て預ける/引き出す場合の共通処理を実行
  878.   #--------------------------------------------------------------------------
  879.   def common_keep_all(item_data, data)
  880.  
  881.     #存在するオブジェクトの数分だけ処理。
  882.  
  883.     item_data.each do |i|
  884.  
  885.       #nilの場合は処理しない。
  886.  
  887.       next if i == nil
  888.  
  889.       #預けられないアイテムの場合は処理しない。
  890.  
  891.       next if i.keep_seal_flag
  892.  
  893.       #各種データを取得。
  894.  
  895.       data1 = $game_party.item_number(i)
  896.       data2 = $game_party.max_item_number(i)
  897.       data3 = $game_party.item_keep_number(i)
  898.       data4 = $game_party.max_item_keep_number(i)
  899.  
  900.       #追加で所持できる数と、追加で預けられる数を計算。
  901.  
  902.       data5 = data4 - data3
  903.       data6 = data2 - data1
  904.  
  905.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  906.  
  907.       amount = data == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  908.       $game_party.item_keep(i, amount)
  909.  
  910.     end
  911.   end
  912.   #--------------------------------------------------------------------------
  913.   # アイテムを一定個数預ける/引き出す
  914.   #--------------------------------------------------------------------------
  915.   def item_keep(data_a, data_b)
  916.  
  917.     #種類をアイテムとする。
  918.  
  919.     item_data = $data_items
  920.  
  921.     #共通処理を実行。
  922.  
  923.     common_keep(item_data, data_a, data_b)
  924.  
  925.   end
  926.   #--------------------------------------------------------------------------
  927.   # 武器を一定個数預ける/引き出す
  928.   #--------------------------------------------------------------------------
  929.   def weapon_keep(data_a, data_b)
  930.  
  931.     #種類を武器とする。
  932.  
  933.     item_data = $data_weapons
  934.  
  935.     #共通処理を実行。
  936.  
  937.     common_keep(item_data, data_a, data_b)
  938.  
  939.   end
  940.   #--------------------------------------------------------------------------
  941.   # 防具を一定個数預ける/引き出す
  942.   #--------------------------------------------------------------------------
  943.   def armor_keep(data_a, data_b)
  944.  
  945.     #種類を防具とする。
  946.  
  947.     item_data = $data_armors
  948.  
  949.     #共通処理を実行。
  950.  
  951.     common_keep(item_data, data_a, data_b)
  952.  
  953.   end
  954.   #--------------------------------------------------------------------------
  955.   # 一定個数預ける/引き出す場合の共通処理を実行します。
  956.   #--------------------------------------------------------------------------
  957.   def common_keep(item_data, data_a, data_b)
  958.  
  959.     #nilの場合は処理しない。
  960.  
  961.     return if item_data[data_b] == nil
  962.  
  963.     #預けられないアイテムの場合は処理しない。
  964.  
  965.     return if item_data[data_b].keep_seal_flag
  966.  
  967.     #各種データを取得。
  968.  
  969.     data1 = $game_party.item_number(item_data[data_b])
  970.     data2 = $game_party.max_item_number(item_data[data_b])
  971.     data3 = $game_party.item_keep_number(item_data[data_b])
  972.     data4 = $game_party.max_item_keep_number(item_data[data_b])
  973.  
  974.     #追加で所持できる数と、追加で預けられる数を計算。
  975.  
  976.     data5 = data4 - data3
  977.     data6 = data2 - data1
  978.  
  979.     #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  980.  
  981.     amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  982.     $game_party.item_keep(item_data[data_b], amount)
  983.  
  984.   end
  985.   #--------------------------------------------------------------------------
  986.   # 特定ワードを含む単語を全て預ける/引き出す場合の処理を行う。
  987.   #--------------------------------------------------------------------------
  988.   def word_keep_all(data_a, data_b)
  989.  
  990.     #アイテム・武器・防具全てを含める配列を生成。
  991.  
  992.     item_data = $data_items + $data_weapons + $data_armors
  993.  
  994.     #存在するオブジェクトの数分だけ処理。
  995.  
  996.     item_data.each do |i|
  997.  
  998.       #nilの場合は処理しない。
  999.  
  1000.       next if i == nil
  1001.  
  1002.       #預けられないアイテムの場合は処理しない。
  1003.  
  1004.       next if i.keep_seal_flag
  1005.  
  1006.       #指定されたワードがメモ欄に含まれていない場合は処理しない。
  1007.  
  1008.       next unless i.note.include?(data_b)
  1009.  
  1010.       #各種データを取得。
  1011.  
  1012.       data1 = $game_party.item_number(i)
  1013.       data2 = $game_party.max_item_number(i)
  1014.       data3 = $game_party.item_keep_number(i)
  1015.       data4 = $game_party.max_item_keep_number(i)
  1016.  
  1017.       #追加で所持できる数と、追加で預けられる数を計算。
  1018.  
  1019.       data5 = data4 - data3
  1020.       data6 = data2 - data1
  1021.  
  1022.       #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。
  1023.  
  1024.       amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
  1025.       $game_party.item_keep(i, amount)
  1026.  
  1027.     end
  1028.   end
  1029. end
  1030. if ITEM_KEEPER::SHOP
  1031. class Game_Party < Game_Unit
  1032.   attr_accessor :shop_ik
  1033.   #--------------------------------------------------------------------------
  1034.   # 預かり所モードかどうかを確認
  1035.   #--------------------------------------------------------------------------
  1036.   def shop_ik?
  1037.     @shop_ik
  1038.   end
  1039.   #--------------------------------------------------------------------------
  1040.   # 全てのアイテムオブジェクトの配列取得
  1041.   #--------------------------------------------------------------------------
  1042.   alias all_items_ik all_items
  1043.   def all_items
  1044.  
  1045.     #預かり所モードでなければ、本来の処理を行う。
  1046.  
  1047.     return all_items_ik unless $game_party.shop_ik?
  1048.  
  1049.     #アイテム・武器・防具の預かり所データを取得し、まとめる。
  1050.  
  1051.     data1 = @items_k.keys.sort.collect {|id| $data_items[id] }
  1052.     data2 = @weapons_k.keys.sort.collect {|id| $data_weapons[id] }
  1053.     data3 = @armors_k.keys.sort.collect {|id| $data_armors[id] }
  1054.     data1 + data2 + data3
  1055.   end
  1056.   #--------------------------------------------------------------------------
  1057.   # アイテムのクラスに対応するコンテナオブジェクトを取得
  1058.   #--------------------------------------------------------------------------
  1059.   alias item_container_ik item_container
  1060.   def item_container(item_class)
  1061.  
  1062.     #預かり所モードでなければ、本来の処理を行う。
  1063.  
  1064.     return item_container_ik(item_class) unless $game_party.shop_ik?
  1065.  
  1066.     #預かり所モードの場合に限り、預かり所データを返す。
  1067.  
  1068.     return @items_k   if item_class == RPG::Item
  1069.     return @weapons_k if item_class == RPG::Weapon
  1070.     return @armors_k  if item_class == RPG::Armor
  1071.     return nil
  1072.   end
  1073.   #--------------------------------------------------------------------------
  1074.   # アイテムの所持数取得
  1075.   #--------------------------------------------------------------------------
  1076.   alias item_number_ik item_number
  1077.   def item_number(item)
  1078.  
  1079.     #預かり所モードでなければ、本来の処理を行う。
  1080.  
  1081.     return item_number_ik(item) unless $game_party.shop_ik?
  1082.  
  1083.     #預かり所のデータを返す。
  1084.  
  1085.     item_keep_number(item)
  1086.   end
  1087.   #--------------------------------------------------------------------------
  1088.   # アイテムの最大所持数取得
  1089.   #--------------------------------------------------------------------------
  1090.   alias max_item_number_ik max_item_number
  1091.   def max_item_number(item)
  1092.  
  1093.     #預かり所モードでなければ、本来の処理を行う。
  1094.  
  1095.     return max_item_number_ik(item) unless $game_party.shop_ik?
  1096.  
  1097.     #預かり所のデータを返す。
  1098.  
  1099.     max_item_keep_number(item)
  1100.   end
  1101. end
  1102. class Scene_Shop < Scene_MenuBase
  1103.   #--------------------------------------------------------------------------
  1104.   # モードチェンジ
  1105.   #--------------------------------------------------------------------------
  1106.   def item_keep_mode_change
  1107.  
  1108.     #ナンバーウィンドウがアクティブの場合は実行しない。
  1109.  
  1110.     return if @number_window.active
  1111.  
  1112.     #指定スイッチのIDが0より大きく、そのスイッチがONの場合は実行しない。
  1113.  
  1114.     return if ITEM_KEEPER::SWITCH1 > 0 && $game_switches[ITEM_KEEPER::SWITCH1]
  1115.  
  1116.     #預かり所フラグを切り替える。
  1117.  
  1118.     $game_party.shop_ik = $game_party.shop_ik? ? false : true
  1119.  
  1120.     #切り替えを示すウィンドウを表示。
  1121.  
  1122.     w = 400
  1123.     h = 48
  1124.     x = (Graphics.width - w) / 2
  1125.     y = (Graphics.height - h) / 2
  1126.     RPG::SE.new(ITEM_KEEPER::SE[0],ITEM_KEEPER::SE[1],ITEM_KEEPER::SE[2]).play
  1127.     @mode_change_window = Window_Base.new(x, y, w, h)
  1128.     @mode_change_window.back_opacity = 255
  1129.     @mode_change_window.z = 10000
  1130.     text = $game_party.shop_ik ? ITEM_KEEPER::TEXT2 : ITEM_KEEPER::TEXT1
  1131.     @mode_change_window.draw_text(0, 0, w - 32, 24, text, 1)
  1132.     60.times {Graphics.update}
  1133.     @mode_change_window.dispose
  1134.     @mode_change_window = nil
  1135.  
  1136.     #各ウィンドウをリフレッシュする。
  1137.  
  1138.     @status_window.refresh
  1139.     @buy_window.refresh
  1140.     @sell_window.refresh
  1141.     @sell_window.index = 0 if @sell_window.active
  1142.     @number_window.refresh
  1143.   end
  1144.   #--------------------------------------------------------------------------
  1145.   # フレーム更新
  1146.   #--------------------------------------------------------------------------
  1147.   alias update_ik update
  1148.   def update
  1149.  
  1150.     #本来の処理を実行。
  1151.  
  1152.     update_ik
  1153.  
  1154.     #指定したキーが押された場合、モードチェンジ実行。
  1155.  
  1156.     item_keep_mode_change if Input.trigger?(ITEM_KEEPER::KEY)
  1157.   end
  1158. end
  1159. class Window_ShopBuy < Window_Selectable
  1160.   #--------------------------------------------------------------------------
  1161.   # アイテムを許可状態で表示するかどうか
  1162.   #--------------------------------------------------------------------------
  1163.   alias enable_ik? enable?
  1164.   def enable?(item)
  1165.  
  1166.     #本来の処理を実行。
  1167.  
  1168.     flag1 = enable_ik?(item)
  1169.  
  1170.     #預かり所モードの場合、預かり所禁止アイテムは購入不可。
  1171.  
  1172.     flag2 = $game_party.shop_ik? ? !item.keep_seal_flag : true
  1173.  
  1174.     #どちらの条件も満たす場合のみ表示。
  1175.  
  1176.     flag1 && flag2
  1177.   end
  1178. end
  1179. class Window_ShopStatus < Window_Base
  1180.   #--------------------------------------------------------------------------
  1181.   # 所持数の描画
  1182.   #--------------------------------------------------------------------------
  1183.   alias draw_possession_ik draw_possession
  1184.   def draw_possession(x, y)
  1185.  
  1186.     #預かり所モードでなければ、本来の処理を行う。
  1187.  
  1188.     return draw_possession_ik(x, y) unless $game_party.shop_ik?
  1189.  
  1190.     #本来の処理を少し改変した物を実行。
  1191.  
  1192.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  1193.     change_color(system_color)
  1194.     draw_text(rect, ITEM_KEEPER::SHOP_POS)
  1195.     change_color(normal_color)
  1196.     draw_text(rect, $game_party.item_keep_number(@item), 2)
  1197.   end
  1198. end
  1199. class Window_ShopNumber < Window_Selectable
  1200.   #--------------------------------------------------------------------------
  1201.   # 個数表示の最大桁数を取得
  1202.   #--------------------------------------------------------------------------
  1203.   alias figures_ik figures
  1204.   def figures
  1205.  
  1206.     #3桁以上を考慮して預かり所モードの場合は補正をかける。
  1207.  
  1208.     figures_ik + ($game_party.shop_ik? ? ITEM_KEEPER::SHOP_FIG : 0)
  1209.   end
  1210. end
  1211. class Scene_MenuBase < Scene_Base
  1212.   #--------------------------------------------------------------------------
  1213.   # 終了処理
  1214.   #--------------------------------------------------------------------------
  1215.   alias terminate_ik terminate
  1216.   def terminate
  1217.  
  1218.     #預かり所モードフラグを消去。
  1219.  
  1220.     $game_party.shop_ik = nil
  1221.  
  1222.     #本来の処理を実行。
  1223.  
  1224.     terminate_ik
  1225.   end
  1226. end
  1227. end

Lv1.梦旅人

梦石
0
星屑
50
在线时间
26 小时
注册时间
2016-4-14
帖子
7
2
 楼主| 发表于 2016-6-28 22:52:24 | 只看该作者
解决了
将负重系统 141行类修改成下面代码即可
RUBY 代码复制
  1. class Window_ItemCategory < Window_HorzCommand
  2.   include VIPArcher::Load
  3.   #--------------------------------------------------------------------------
  4.   # ● 获取窗口的宽度
  5.   #--------------------------------------------------------------------------
  6.   def window_width
  7.     return 874
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # ● 获取列数
  11.   #--------------------------------------------------------------------------
  12.   def col_max
  13.     return 4
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 判断是否为物品栏场景
  17.   #--------------------------------------------------------------------------
  18.   def scene_item_is?
  19.     return SceneManager.scene_is?(Scene_Item)
  20.   end
  21.   def scene_item_is1?
  22.     return SceneManager.scene_is?(Scene_Item_Keep)
  23.   end
  24. end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 16:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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