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

Project1

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

[已经解决] 求一个背包负重+仓库的脚本

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
1705 小时
注册时间
2011-8-17
帖子
818
跳转到指定楼层
1
发表于 2014-9-3 09:49:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
站里搜了半天,不是失效就是不能用的,唉,以前不是蛮多的么....
roguelike求生RPG研发中....

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2014-9-3 09:52:38 | 只看该作者
本帖最后由 VIPArcher 于 2014-9-3 09:58 编辑

我摔个小广告
欢迎检查BUG 以及最好角色不要有初始装备
仓库脚本不是一搜索就一大把吗?你肯定没有好好搜索。我就关键词 "仓库" 就搜索到好多
你可以在VA提问区搜索,搜索条的后面有个|帖子▽|的下拉菜单,选择“本板”即可只在本区搜索相关话题
传送门

点评

去掉链接后面&highlight=XXXX 后再打开即可解决,(不知道传子大大装了什么黑科技  发表于 2014-9-3 10:08
就是这个!我就是搜索的仓库,只有这个看起来能用,但是这个网页点进去3秒浏览器必然卡死!郁闷,家里和公司的电脑都这样,真是蛋疼  发表于 2014-9-3 10:01

评分

参与人数 2星屑 +60 梦石 +1 收起 理由
taroxd + 1 认可答案
黑舞嗜 + 60 好顶赞!

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
1705 小时
注册时间
2011-8-17
帖子
818
3
 楼主| 发表于 2014-9-3 09:56:41 | 只看该作者
VIPArcher 发表于 2014-9-3 09:52
我摔个小广告
欢迎检查BUG 以此最好角色不要有初始装备
仓库脚本不是一搜索就一大把吗?你肯定没有 ...

额...这个我知道...问题是没有可以配合的仓库脚本额。。。

点评

刚刚在编辑Orz  发表于 2014-9-3 09:58
roguelike求生RPG研发中....
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22933
在线时间
8637 小时
注册时间
2011-12-31
帖子
3367
4
发表于 2014-9-3 15:09:30 | 只看该作者
本帖最后由 tseyik 于 2014-9-3 16:08 编辑

重量制

RUBY 代码复制
  1. #==============================================================================
  2.     # ■ むー素材用モジュール Ver 1.0
  3.     #------------------------------------------------------------------------------
  4.     #    スクリプトに必要なモジュールです。                                 By むー
  5.     #------------------------------------------------------------------------------
  6.     #    使用スクリプト
  7.     #    ・ドロップアイテム演出
  8.     #    ・アイテム重量制
  9.     #==============================================================================
  10.     module MOO_GENERAL_MODULE
  11.  
  12.       #--------------------------------------------------------------------------
  13.       # 以下、設定箇所です。
  14.       #--------------------------------------------------------------------------
  15.  
  16.       # ウィンドウのサイズ(1=544x416 / 2=640x480)
  17.       WINDOW_SIZE = 1
  18.       # ここで指定しても、ウィンドウサイズが変わるわけではありません。
  19.  
  20.       #--------------------------------------------------------------------------
  21.       # ここまで。
  22.       #--------------------------------------------------------------------------
  23.  
  24.       #**************************************************************************
  25.       # ※ ここ以下は変更しないでください。
  26.       #**************************************************************************
  27.  
  28.       #--------------------------------------------------------------------------
  29.       # ● 左右どちらかに指定文字を埋める
  30.       #     word: 元々の文字列
  31.       #     len:  全部で何文字にするか
  32.       #     str:  埋める文字
  33.       #     lr:   埋める文字を付ける方向(1=左/2=右)
  34.       #       bury_plus("world", 8, " ", 1) → 結果: "   world"
  35.       #       bury_plus("world", 8, "@", 2) → 結果: "world@@@"
  36.       #--------------------------------------------------------------------------
  37.       def bury_plus(word, len, str, lr = 1)
  38.         return word if word.length >= len
  39.         str.to_s
  40.         pls = ""
  41.         for i in 1..len - word.length
  42.           pls += str
  43.         end
  44.         case lr
  45.           when 1; return pls + word
  46.           when 2; return word + pls
  47.         end
  48.       end
  49.       #--------------------------------------------------------------------------
  50.       # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  51.       #--------------------------------------------------------------------------
  52.       def weight_item_window_x
  53.         return 384 if WINDOW_SIZE == 1
  54.         return 480 if WINDOW_SIZE == 2
  55.       end
  56.       #--------------------------------------------------------------------------
  57.       # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  58.       #--------------------------------------------------------------------------
  59.       def weight_item_window_y
  60.         return 72  if WINDOW_SIZE == 1
  61.         return 72  if WINDOW_SIZE == 2
  62.       end
  63.       #--------------------------------------------------------------------------
  64.       # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  65.       #--------------------------------------------------------------------------
  66.       def weight_item_window_w
  67.         return 160 if WINDOW_SIZE == 1
  68.         return 160 if WINDOW_SIZE == 2
  69.       end
  70.       #--------------------------------------------------------------------------
  71.       # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  72.       #--------------------------------------------------------------------------
  73.       def weight_item_window_h
  74.         return 48  if WINDOW_SIZE == 1
  75.         return 48  if WINDOW_SIZE == 2
  76.       end
  77.       #--------------------------------------------------------------------------
  78.       # ● 重量制限用:ショップの売却画面で総重量を示すウィンドウの幅調整
  79.       #--------------------------------------------------------------------------
  80.       def weight_shop_buy_category_window_adjust_w
  81.         return 32  if WINDOW_SIZE == 1
  82.         return 32  if WINDOW_SIZE == 2
  83.       end
  84.     end
  1. #==============================================================================
  2.     # ■ 重量制 Ver 1.21                               By むー
  3.     #------------------------------------------------------------------------------
  4.     # アイテムに重量を付加し、所持可能な重量を指定できます。
  5.     # 本スクリプトを利用するには、[むー素材用]スクリプトが別途必要になります。
  6.     # 本スクリプトは[むー素材用]よりも下に設置して下さい。
  7.     #------------------------------------------------------------------------------
  8.     #
  9.     # ★簡単な仕様★
  10.     #
  11.     # ・ゲームに重量を設置します。
  12.     # ・設定した総重量以上の物は持てません。
  13.     # ・チェックコマンドにて、イベントで入手可能チェックができます。
  14.     # ・戦闘後のドロップアイテムは、持てる分だけ出ます。
  15.     #   →3個出た場合、最初の2個は持てるけれど残りが持てない場合、
  16.     #    2個分だけメッセージが出ます。入手も2個だけです。
  17.     # ・重量オーバーの場合、店で購入ができません。
  18.     # ・イベントでアイテムの増加をおこなう場合にもチェックが入ります。
  19.     #   →特にメッセージは出ません。例えば5個入手で持てるだけ入手したい場合は、
  20.     #    5個いぺっんに入手ではなく、1個入手を5回分作って下さい。
  21.     #    5個いっぺんに入手する場合、5個持てなかったら1個も入手できません。
  22.     #
  23.     # ★チェック機能★
  24.     #
  25.     # イベントでアイテムを入手する時、重量オーバーになると取得できません。
  26.     # イベントのスクリプトで、以下のように記述すると動作する機能があります。
  27.     #
  28.     # can_gain_item?(アイテム種類, ID, 数量, スイッチ番号, [取得フラグ])
  29.     #
  30.     #  アイテム種類: アイテム="I"、武器="W"、防具="A"
  31.     #  ID     : 上記アイテム種類別のID ("W",3...) なら武器ID3
  32.     #  数量    : 取得する数量
  33.     #  スイッチ番号: 入手できる場合はON、できない場合はOFFが入るスイッチの番号
  34.     #  取得フラグ : ついでに取得するか(true/false)
  35.     #
  36.     # アイテム種類は必ず""で囲って下さい。I、W、A以外のチェックしていません。
  37.     # 数量が0の場合のエラーチェックはおこなっていません。
  38.     # アイテム種類、ID、数量、スイッチ番号は必須です。
  39.     # スイッチを使わない場合は、0にしておいて下さい。
  40.     # 取得フラグをtrueにしておくと、取得可能な場合は自動的にアイテムを入手します。
  41.     # falseまたは何も記述しなかった場合は取得しません。
  42.     # またスイッチに入れなくとも、返り値でtrueかfalseが戻ります。
  43.     #
  44.     # ★注意点★
  45.     #
  46.     # ・ゲーム開始時に、基本重量を設定して下さい。
  47.     # ・初期装備によって、総重量がオーバーしている場合があります。
  48.     #
  49.     #==============================================================================
  50.     $rgsslab = {} if $rgsslab.nil?  # 併用対策
  51.     #==============================================================================
  52.     $moo_have_item_weight = true
  53.     module MOO_HAVE_ITEM_WEIGHT
  54.      
  55.       #--------------------------------------------------------------------------
  56.       # 以下、設定箇所です。
  57.       #--------------------------------------------------------------------------
  58.      
  59.       # 総重量を代入する変数番号
  60.       MAX_WT = 11
  61.      
  62.       # 重量指定文字
  63.       WORD_WT = "重量"
  64.       # アイテム(および装備品)のメモ欄に書く文字です。
  65.       # "重量"の場合、<重量:5>とすれば、そのアイテムの重量は5になります。
  66.       # 他のスクリプトと重複する場合は変更してください。
  67.      
  68.       # 重量指定のないアイテムの重量
  69.       DEFAULT_WT = 1
  70.       # 重量の指定をしなかったアイテムの重量です。
  71.      
  72.       # 所持している総重量計算を個数×重量にするか
  73.       UNIT_WT = true
  74.       # 総重量の計算をどうするか決めます。
  75.       # trueの場合、アイテム個数×個別の重量の総計が、所持している総重量になります。
  76.       # falseの場合、アイテムが1個でも99個でも1個分の重さが総重量に加算されます。
  77.      
  78.       # アイテム欄の重量表示を個数×重量にするか
  79.       VIEW_WT = true
  80.       # アイテム個数の後ろに表示される重量表示をどうするか決めます。
  81.       # trueの場合、アイテムの重量が5で個数が4の場合、20と表示されます。
  82.       # falseの場合、個数に関係なく、単純にアイテムの重量だけが表示されます。
  83.       # このVIEW_WTをfalse、上記のUNIT_WTがtrueの場合、錯覚しないようご注意ください。
  84.       # その場合、()はあくまでそのアイテムの重量であり、総重量は個数×重量となります。
  85.       # また、UNIT_WTをfalse、VIEW_WTをtrueにすると、混乱の元となります(笑)
  86.      
  87.       # 重量計算に装備品を含むか
  88.       CONT_WT = false
  89.       # 装備品を総重量に含むかどうかを決めます。
  90.       # 袋(?)はあくまで袋、装備品は関係ない、などのような場合はfalseにして下さい。
  91.      
  92.       # 総重量を表示する上での文字
  93.       SUM_WEIGHT_WORD = "総重量"
  94.      
  95.       # アイテム欄で重量を囲う文字
  96.       PARENTHESIS_F = "(W:" # 前
  97.       PARENTHESIS_L = ")"   # 後
  98.      
  99.       # 1つのアイテム重量の最大桁数
  100.       FIGURE_WT = 2
  101.       # 1つのアイテムに設定する重量の桁数です。99までなら2という感じで。
  102.       # 上の「アイテム欄で重量を囲う文字」と合わせて表示しますが、
  103.       # これが"(W:"と")"だった場合、画面上のアイテム欄には
  104.       # [アイテム名   10(W: 5)] のように表示されます。
  105.       # ↑       ↑ ↑
  106.       # アイテム名  個数 重さ(この部分の数字の前の空白に関わってきます)
  107.      
  108.       # 売買価格のレートを格納する変数 (1 = 1%)/おまけ機能
  109.       USE_RATE  = false # レート変動を使う場合
  110.       BUY_RATE  = 12    # 購入レート(USE_RATE=trueの場合のみ有効)
  111.       SELL_RATE = 13    # 売却レート(USE_RATE=trueの場合のみ有効)
  112.       # 指定しない場合、購入価格と売却価格は同じになります。
  113.       # 小数点以下の価格は切り捨てられます。
  114.      
  115.       # 販売不可アイテムの文字
  116.       CANT_SELL = "重量制販売不可"
  117.       # アイテムのメモ欄にこの文字があると、価格が0以上でも
  118.       # ショップで販売不可になります(0はデフォルトのまま販売不可です)。
  119.       # 重量制販売不可 とした場合、<重量制販売不可> と <>を一緒に記述して下さい。
  120.       # なお、これはあくまでデフォルト形態のショップだけに有効です。
  121.      
  122.       #--------------------------------------------------------------------------
  123.       # 以下、他のスクリプトを導入しているかどうかの判断です。
  124.       # これらのスクリプトを使用する場合、本スクリプトより上の位置に置いて下さい。
  125.       #--------------------------------------------------------------------------
  126.      
  127.       # ドロップアイテム系のスクリプトを導入しているか
  128.       DROP_ITEM = false
  129.       # 導入している場合は true にして下さい。通常は false にして下さい。
  130.       # その際、そのスクリプトに$game_party.gain_item(ナントカ)とあると思います。
  131.       # その前後に、本スクリプトの中身のように改造する必要があります。
  132.       #
  133.      
  134.       #--------------------------------------------------------------------------
  135.       # ここまで。
  136.       #--------------------------------------------------------------------------
  137.      
  138.     end
  139.      
  140.     #==============================================================================
  141.     # ★ ここより下は変更しないで下さい。
  142.     #==============================================================================
  143.      
  144.     if MOO_HAVE_ITEM_WEIGHT::DROP_ITEM == false
  145.     #==============================================================================
  146.     # ■ BattleManager
  147.     #------------------------------------------------------------------------------
  148.     #  戦闘の進行を管理するモジュールです。
  149.     #==============================================================================
  150.     module BattleManager
  151.       def self.gain_drop_items
  152.         $game_troop.make_drop_items.each do |item|
  153.           if $game_party.gain_item_failed?(item)    # ドロップ系スクリプトに追加部分
  154.             $game_party.moo_gain_item(item, 1)
  155.             $game_message.add(sprintf(Vocab::ObtainItem, item.name))
  156.           end   # ドロップ系スクリプトに追加部分
  157.         end
  158.         wait_for_message
  159.       end
  160.     end
  161.     end
  162.      
  163.     #==============================================================================
  164.     # ■ Game_Party
  165.     #------------------------------------------------------------------------------
  166.     #  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
  167.     # スのインスタンスは $game_party で参照されます。
  168.     #==============================================================================
  169.     class Game_Party < Game_Unit
  170.       include MOO_GENERAL_MODULE
  171.       #--------------------------------------------------------------------------
  172.       # ● 公開インスタンス変数
  173.       #--------------------------------------------------------------------------
  174.       attr_reader   :gold                     # 所持金
  175.       attr_reader   :steps                    # 歩数
  176.       attr_reader   :last_item                # カーソル記憶用 : アイテム
  177.       #--------------------------------------------------------------------------
  178.       # ● オブジェクト初期化
  179.       #--------------------------------------------------------------------------
  180.       def initialize
  181.         super
  182.         @gold = 0
  183.         @steps = 0
  184.         @last_item = Game_BaseItem.new
  185.         @total_weight = 0   # 追加
  186.         @menu_actor_id = 0
  187.         @target_actor_id = 0
  188.         @actors = []
  189.         init_all_items
  190.       end
  191.       #--------------------------------------------------------------------------
  192.       # ◎ アイテムの増加(減少)
  193.       #     include_equip : 装備品も含める
  194.       #--------------------------------------------------------------------------
  195.       alias moo_gain_item gain_item
  196.       def gain_item(item, amount, include_equip = false)
  197.         # gain_item内では、include_equipの関係からか、memberが使えません。
  198.         # ですので重量に装備品を含む場合、メンバーの装備情報が取得できません。
  199.         # 以下の"if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false"があるのはそのためです。
  200.         # 重量に装備品抜きの場合に限り、ここで重量のチェックをしています。
  201.         #
  202.         # 総重量を超える場合は取得不可能
  203.         # 1度に2以上取得しようとして引っかかった場合は、
  204.         # たとえ1個分の許容があったとしても、全て取得できません。
  205.         #
  206.         # 一応ここ以外にも、以下の箇所で入手可能かどうかのチェックをしています。
  207.         #
  208.         # ・イベントでアイテム、武器、防具を入手する時
  209.         # ・ショップでアイテムを購入する時
  210.         # ・戦闘後のドロップアイテム入手時
  211.         # ・装備を変更する時
  212.         #
  213.         # 普通に作成していれば、ここでチェックしなくてもよほど大丈夫だとはいますが、
  214.         # 他のスクリプトを導入する際、アイテム入手がある場合は注意して下さい。
  215.         # アイテム入手前に $game_party.gain_item(アイテム, 数量) を使って
  216.         # trueかfalseで判断するようにして下さい。
  217.         if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false
  218.           return if gain_item_failed?(item, amount) == false
  219.         end
  220.         # moo_gain_item(item, amount, include_equip)
  221.         container = item_container(item.class)
  222.         return unless container
  223.         last_number = item_number(item)
  224.         new_number = last_number + amount
  225.         container[item.id] = [[new_number, 0].max, max_item_number(item)].min
  226.         container.delete(item.id) if container[item.id] == 0
  227.         if include_equip && new_number < 0
  228.           discard_members_equip(item, -new_number)
  229.         end
  230.         $game_map.need_refresh = true
  231.       end
  232.       #--------------------------------------------------------------------------
  233.       # ○ アイテムの個別重量を取得
  234.       #--------------------------------------------------------------------------
  235.       def weight_item(item)
  236.         return 0 if item == nil
  237.         # アイテムのメモ取得
  238.         memo = item.note.scan((/<#{MOO_HAVE_ITEM_WEIGHT::WORD_WT}[::](\S+)>/))
  239.         memo = memo.flatten
  240.         # 重量取得
  241.         if memo != nil and not memo.empty?
  242.           # 重量設定がある場合はそれを採用
  243.           wt = memo[0].to_i
  244.         else
  245.           # 重量設定がない場合は指定した重量とする
  246.           wt = MOO_HAVE_ITEM_WEIGHT::DEFAULT_WT
  247.         end
  248.         return wt
  249.       end
  250.       #--------------------------------------------------------------------------
  251.       # ○ 所持アイテムの総重量を取得
  252.       #--------------------------------------------------------------------------
  253.       def weight_sum
  254.         # 変数初期化
  255.         wt = 0
  256.         # 所持しているアイテムの重量取得
  257.         $data_items.each do |item|
  258.           # アイテムの総重量
  259.           wt += weight_have_item(item) if item and item.name != ""
  260.         end
  261.         $data_weapons.each do |item|
  262.           # 武器の総重量
  263.           wt += weight_have_item(item) if item and item.name != ""
  264.         end
  265.         $data_armors.each do |item|
  266.           # 防具の総重量
  267.           wt += weight_have_item(item) if item and item.name != ""
  268.         end
  269.         return wt
  270.       end
  271.       #--------------------------------------------------------------------------
  272.       # ○ 所持アイテムの個別重量を取得(フラグがあれば装備品を含む)
  273.       #--------------------------------------------------------------------------
  274.       def weight_have_item(item)
  275.         return 0 if item == nil
  276.         # アイテムの個別重量を取得
  277.         wt = weight_item(item)
  278.         # 所持個数の取得
  279.         cn = item_number(item)
  280.         if MOO_HAVE_ITEM_WEIGHT::CONT_WT
  281.           if item.class == RPG::Weapon or item.class == RPG::Armor
  282.               members.each do |actor|
  283.               if item.class == RPG::Weapon
  284.                 cn += 1 if $game_actors[actor.id].equips[0] == item
  285.                 cn += 1 if $game_actors[actor.id].equips[1] == item
  286.               elsif item.class == RPG::Armor
  287.                 cn += 1 if $game_actors[actor.id].equips[item.etype_id] == item
  288.               end
  289.             end
  290.           end
  291.         end
  292.         # 個数×重量の場合の計算
  293.         if cn == 0
  294.           wt = 0
  295.         else
  296.           wt *= cn if MOO_HAVE_ITEM_WEIGHT::UNIT_WT
  297.         end
  298.         return wt
  299.       end
  300.       #--------------------------------------------------------------------------
  301.       # ○ 重量をカッコ書き(アイテム一覧に書くため)
  302.       #--------------------------------------------------------------------------
  303.       def weight_item_draw(item)
  304.         wt = weight_item(item).to_i
  305.         wt *= item_number(item) if MOO_HAVE_ITEM_WEIGHT::VIEW_WT
  306.         wt = wt.to_s
  307.         wt = bury_plus(wt, MOO_HAVE_ITEM_WEIGHT::FIGURE_WT, " ", lr = 1)
  308.         wt = MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_F + wt + MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_L
  309.         return wt
  310.       end
  311.       #--------------------------------------------------------------------------
  312.       # ○ アイテムを取得可能かどうかの判断
  313.       #--------------------------------------------------------------------------
  314.       def gain_item_failed?(item, val = 1)
  315.         val = 1 if MOO_HAVE_ITEM_WEIGHT::UNIT_WT == false
  316.         if weight_sum + weight_item(item) * val > $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT]
  317.           false
  318.         else
  319.           true
  320.         end
  321.       end
  322.       #--------------------------------------------------------------------------
  323.       # ○ 個数の限界によってアイテムを取得可能かどうかの判断
  324.       #--------------------------------------------------------------------------
  325.       def gain_item_max?(item, val = 1)
  326.         return false if item_number(item) + val > max_item_number(item)
  327.         return true
  328.       end
  329.     end
  330.      
  331.     #==============================================================================
  332.     # ■ Game_Actor
  333.     #------------------------------------------------------------------------------
  334.     #  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors)
  335.     # の内部で使用され、Game_Party クラス($game_party)からも参照されます。
  336.     #==============================================================================
  337.     class Game_Actor < Game_Battler
  338.       #--------------------------------------------------------------------------
  339.       # ◎ 装備の変更
  340.       #     slot_id : 装備スロット ID
  341.       #     item    : 武器/防具(nil なら装備解除)
  342.       #--------------------------------------------------------------------------
  343.       alias moo_change_equip change_equip
  344.       def change_equip(slot_id, item)
  345.         # equips[slot_id]: 装備中アイテム(nil=装備なし)
  346.         # item: これから装備しようとしているアイテム(nil=装備なし)
  347.         if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false
  348.           wt_old = $game_party.weight_item(equips[slot_id])
  349.           wt_new = $game_party.weight_item(item)
  350.           wt_clc = $game_party.weight_sum + wt_old - wt_new
  351.           # wt_clc: 現在の重さ + 外す装備品の重さ - これから装備する物の重さ
  352.           if wt_clc > $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT]
  353.             Sound.play_buzzer
  354.             return
  355.           end
  356.         end
  357.         moo_change_equip(slot_id, item)
  358.       end
  359.       #--------------------------------------------------------------------------
  360.       # ● パーティとアイテムを交換する
  361.       #     new_item : パーティから取り出すアイテム
  362.       #     old_item : パーティに返すアイテム
  363.       #--------------------------------------------------------------------------
  364.       alias moo_trade_item_with_party trade_item_with_party
  365.       def trade_item_with_party(new_item, old_item)
  366.         return false if new_item && !$game_party.has_item?(new_item)
  367.         # 入手と破棄を逆転
  368.         $game_party.lose_item(new_item, 1)
  369.         $game_party.gain_item(old_item, 1)
  370.         return true
  371.       end
  372.     end
  373.      
  374.     #==============================================================================
  375.     # ■ Game_Interpreter
  376.     #------------------------------------------------------------------------------
  377.     #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  378.     # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  379.     #==============================================================================
  380.     class Game_Interpreter
  381.       #--------------------------------------------------------------------------
  382.       # ● アイテムの増減
  383.       #--------------------------------------------------------------------------
  384.       def command_126
  385.         value = operate_value(@params[1], @params[2], @params[3])
  386.         if $game_party.gain_item_failed?($data_items[@params[0]], value)
  387.           $game_party.moo_gain_item($data_items[@params[0]], value)
  388.         end
  389.       end
  390.       #--------------------------------------------------------------------------
  391.       # ● 武器の増減
  392.       #--------------------------------------------------------------------------
  393.       def command_127
  394.         value = operate_value(@params[1], @params[2], @params[3])
  395.         if $game_party.gain_item_failed?($data_weapons[@params[0]], value)
  396.           $game_party.moo_gain_item($data_weapons[@params[0]], value, @params[4])
  397.         end
  398.       end
  399.       #--------------------------------------------------------------------------
  400.       # ● 防具の増減
  401.       #--------------------------------------------------------------------------
  402.       def command_128
  403.         value = operate_value(@params[1], @params[2], @params[3])
  404.         if $game_party.gain_item_failed?($data_armors[@params[0]], value)
  405.           $game_party.moo_gain_item($data_armors[@params[0]], value, @params[4])
  406.         end
  407.       end
  408.       #--------------------------------------------------------------------------
  409.       # ○ 所持品を追加できるかの判断
  410.       #     kind  : アイテム種類(/[IWA]/)
  411.       #     id    : アイテムID
  412.       #     num   : 入手する個数
  413.       #     val   : 入手可能かどうかを代入するスイッチ番号(使わない場合は0を指定)
  414.       #     gain  : 入手処理もついでに行なうか(省略時は行なわない)
  415.       #--------------------------------------------------------------------------
  416.       def can_gain_item?(kind, id, num = 1, val = 0, gain = false)
  417.         # アイテム変数初期値
  418.         item = nil
  419.         # アイテム種類分別
  420.         case kind
  421.           when "I"; item = $data_items[id]
  422.           when "W"; item = $data_weapons[id]
  423.           when "A"; item = $data_armors[id]
  424.         end
  425.         # 重量による取得可能チェック  
  426.         flg1 = $game_party.gain_item_failed?(item, num)
  427.         # 数量による取得可能チェック
  428.         flg2 = $game_party.gain_item_max?(item, num)
  429.         # 重量か数量いずれかで取得不能判定があった場合のフラグ
  430.         flg = true
  431.         flg = false if flg1 == false or flg2 == false
  432.         # 取得可能であり取得フラグが立っていたら取得
  433.         $game_party.moo_gain_item(item, num) if flg and gain
  434.         # スイッチに値を返す
  435.         $game_switches[val] = flg if val > 0 and val != nil
  436.         # 値を返す
  437.         return flg
  438.       end
  439.       #--------------------------------------------------------------------------
  440.       # ○ 所持品の総重量を取得
  441.       #--------------------------------------------------------------------------
  442.       def get_weight_sum
  443.         $game_party.weight_sum
  444.       end
  445.     end
  446.      
  447.     #==============================================================================
  448.     # ■ Window_ItemCategory
  449.     #------------------------------------------------------------------------------
  450.     #  アイテム画面またはショップ画面で、通常アイテムや装備品の分類を選択するウィ
  451.     # ンドウです。
  452.     #==============================================================================
  453.     class Window_ItemCategory < Window_HorzCommand
  454.       #--------------------------------------------------------------------------
  455.       # ● ウィンドウ幅の取得
  456.       #--------------------------------------------------------------------------
  457.       def window_width
  458.         Graphics.width - 160
  459.       end
  460.     end
  461.      
  462.     #==============================================================================
  463.     # ■ Window_ItemList
  464.     #------------------------------------------------------------------------------
  465.     #  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
  466.     #==============================================================================
  467.     class Window_ItemList < Window_Selectable
  468.       #--------------------------------------------------------------------------
  469.       # ● アイテムの個数を描画
  470.       #--------------------------------------------------------------------------
  471.       def draw_item_number(rect, item)
  472.         $game_party.weight_sum
  473.         # カッコ書きの重量文字列を取得
  474.         wt = $game_party.weight_item_draw(item)
  475.         # 数量の後に重量を追加
  476.         draw_text(rect, sprintf(":%2d", $game_party.item_number(item)) + wt, 2)
  477.       end
  478.     end
  479.      
  480.     #==============================================================================
  481.     # ■ Window_ShopBuy
  482.     #------------------------------------------------------------------------------
  483.     #  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
  484.     #==============================================================================
  485.     class Window_ShopBuy
  486.     #  include MOO_GENERAL_MODULE
  487.       #--------------------------------------------------------------------------
  488.       # ● オブジェクト初期化
  489.       #--------------------------------------------------------------------------
  490.       def initialize(x, y, height, shop_goods)
  491.         super(x, y, window_width, height)
  492.         @shop_goods = shop_goods
  493.         [url=home.php?mod=space&uid=26101]@Money[/url] = 0
  494.       end
  495.       #--------------------------------------------------------------------------
  496.       # ● 商品の値段を取得
  497.       #--------------------------------------------------------------------------
  498.       def price(item)
  499.         if MOO_HAVE_ITEM_WEIGHT::USE_RATE
  500.           return Integer(@price[item] * $game_variables[MOO_HAVE_ITEM_WEIGHT::BUY_RATE] / 100)
  501.         else
  502.           return @price[item]
  503.         end
  504.       end
  505.       #--------------------------------------------------------------------------
  506.       # ● アイテムリストの作成
  507.       #--------------------------------------------------------------------------
  508.       def make_item_list
  509.         @data = []
  510.         @price = {}
  511.         @shop_goods.each do |goods|
  512.           case goods[0]
  513.           when 0;  item = $data_items[goods[1]]
  514.           when 1;  item = $data_weapons[goods[1]]
  515.           when 2;  item = $data_armors[goods[1]]
  516.           end
  517.           if item
  518.             @data.push(item)
  519.             @price[item] = goods[2] == 0 ? item.price : goods[3]
  520.           end
  521.         end
  522.       end
  523.       #--------------------------------------------------------------------------
  524.       # ● 項目の描画
  525.       #--------------------------------------------------------------------------
  526.       def draw_item(index)
  527.         item = @data[index]
  528.         rect = item_rect(index)
  529.         draw_item_name(item, rect.x, rect.y, enable?(item))
  530.         rect.width -= 4
  531.     #    wt = $game_party.weight_item(item)
  532.     #    wt = wt.to_s
  533.     #    wt = bury_plus(wt, MOO_HAVE_ITEM_WEIGHT::FIGURE_WT, " ", 1)
  534.     #    wt = MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_F + wt + MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_L
  535.     #    draw_text(rect, price(item).to_s + wt, 2)
  536.         draw_text(rect, price(item), 2)
  537.       end
  538.     end
  539.      
  540.     #==============================================================================
  541.     # ■ Window_ShopSell
  542.     #------------------------------------------------------------------------------
  543.     #  ショップ画面で、売却のために所持アイテムの一覧を表示するウィンドウです。
  544.     #==============================================================================
  545.     class Window_ShopSell
  546.       #--------------------------------------------------------------------------
  547.       # ○ 桁数の取得
  548.       #--------------------------------------------------------------------------
  549.       def col_max
  550.         return 1
  551.       end
  552.       #--------------------------------------------------------------------------
  553.       # ○ 項目の描画
  554.       #--------------------------------------------------------------------------
  555.       def draw_item(index)
  556.         item = @data[index]
  557.         rect = item_rect(index)
  558.         draw_item_name(item, rect.x, rect.y, enable?(item))
  559.         rect.width -= 4
  560.         draw_text(rect, price(item), 2)
  561.       end
  562.       #--------------------------------------------------------------------------
  563.       # ◎ アイテムを許可状態で表示するかどうか
  564.       #--------------------------------------------------------------------------
  565.       alias moo_weight_enable? enable?
  566.       def enable?(item)
  567.         flg = $data_items[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">")   if item.class == RPG::Item
  568.         flg = $data_weapons[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">") if item.class == RPG::Weapon
  569.         flg = $data_armors[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">")  if item.class == RPG::Armor
  570.         return false if flg
  571.         moo_weight_enable?(item)
  572.       end
  573.       #--------------------------------------------------------------------------
  574.       # ○ 商品の値段を取得
  575.       #--------------------------------------------------------------------------
  576.       def price(item)
  577.         if MOO_HAVE_ITEM_WEIGHT::USE_RATE
  578.           return Integer(item.price * $game_variables[MOO_HAVE_ITEM_WEIGHT::SELL_RATE] / 100)
  579.         else
  580.           return item.price
  581.         end
  582.       end
  583.     end
  584.      
  585.     #==============================================================================
  586.     # ■ Window_ShopNumber
  587.     #------------------------------------------------------------------------------
  588.     #  ショップ画面で、購入または売却するアイテムの個数を入力するウィンドウです。
  589.     #==============================================================================
  590.     class Window_ShopNumber < Window_Selectable
  591.       #--------------------------------------------------------------------------
  592.       # ● リフレッシュ
  593.       #--------------------------------------------------------------------------
  594.       def refresh
  595.         contents.clear
  596.         draw_item_name(@item, 0, item_y)
  597.         draw_number
  598.         draw_total_price
  599.         draw_total_weight(@item)
  600.       end
  601.       #--------------------------------------------------------------------------
  602.       # ○ 個数の総重量の描画
  603.       #--------------------------------------------------------------------------
  604.       def draw_total_weight(item)
  605.         width = contents_width - 8
  606.         cx = text_size(@currency_unit).width
  607.         change_color(system_color)
  608.         x_plus = 4
  609.         if MOO_GENERAL_MODULE::WINDOW_SIZE == 1
  610.           y_plus = 36
  611.         elsif MOO_GENERAL_MODULE::WINDOW_SIZE == 2
  612.           y_plus = 72
  613.         end
  614.         wd = MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD
  615.         draw_text(4, y + 24 + y_plus, width, line_height, wd)
  616.         change_color(normal_color)
  617.         cn = 1
  618.         cn = @number if MOO_HAVE_ITEM_WEIGHT::UNIT_WT
  619.         wt = $game_party.weight_item(item) * cn #@number
  620.         draw_text(x - cx - 2 + x_plus, y + 24 + y_plus, width, line_height, wt, 2)
  621.       end
  622.     end
  623.      
  624.     #==============================================================================
  625.     # ■ Window_ShopStatus
  626.     #------------------------------------------------------------------------------
  627.     #  ショップ画面で、アイテムの所持数やアクターの装備を表示するウィンドウです。
  628.     #==============================================================================
  629.     class Window_ShopStatus < Window_Base
  630.       #--------------------------------------------------------------------------
  631.       # ● リフレッシュ
  632.       #--------------------------------------------------------------------------
  633.       def refresh
  634.         contents.clear
  635.         draw_possession(4, 0)
  636.         draw_weight_possession(4, 24)
  637.         y_plus = 0
  638.         y_plus = 24 if MOO_GENERAL_MODULE::WINDOW_SIZE == 2
  639.         draw_equip_info(4, line_height * 2 + y_plus) if @item.is_a?(RPG::EquipItem)
  640.       end
  641.       #--------------------------------------------------------------------------
  642.       # ○ 総重量の描画
  643.       #--------------------------------------------------------------------------
  644.       def draw_weight_possession(x, y)
  645.         rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  646.         change_color(system_color)
  647.         draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
  648.         change_color(normal_color)
  649.         str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
  650.         draw_text(rect, str, 2)
  651.       end
  652.     end
  653.      
  654.     #==============================================================================
  655.     # ■ Window_Weight_Sum_Menu
  656.     #------------------------------------------------------------------------------
  657.     #  メニューウィンドウで総重量を表示するクラスです。
  658.     #==============================================================================
  659.     class Window_Weight_Sum_Menu < Window_Base
  660.       #--------------------------------------------------------------------------
  661.       # ○ オブジェクト初期化
  662.       #--------------------------------------------------------------------------
  663.       def initialize(x, y, width, height)
  664.         super(x, y, width, height)
  665.         refresh
  666.       end
  667.       #--------------------------------------------------------------------------
  668.       # ○ リフレッシュ
  669.       #--------------------------------------------------------------------------
  670.       def refresh
  671.         contents.clear
  672.         rect = Rect.new(0, 0, width - 28, line_height)
  673.         change_color(system_color)
  674.         draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
  675.         change_color(normal_color)
  676.         str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
  677.         draw_text(rect, str, 2)
  678.       end
  679.     end
  680.      
  681.     #==============================================================================
  682.     # ■ Window_Weight_Sum_item
  683.     #------------------------------------------------------------------------------
  684.     #  アイテム一覧で総重量を表示するクラスです。
  685.     #==============================================================================
  686.     class Window_Weight_Sum_item < Window_ItemList
  687.       #--------------------------------------------------------------------------
  688.       # ○ オブジェクト初期化
  689.       #--------------------------------------------------------------------------
  690.       def initialize(x, y, width, height)
  691.         super(x, y, width, height)
  692.         refresh
  693.       end
  694.       #--------------------------------------------------------------------------
  695.       # ○ リフレッシュ
  696.       #--------------------------------------------------------------------------
  697.       def refresh
  698.         contents.clear
  699.         rect = Rect.new(0, 0, width - 28, line_height)
  700.         change_color(system_color)
  701.         draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
  702.         change_color(normal_color)
  703.         str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
  704.         draw_text(rect, str, 2)
  705.       end
  706.     end
  707.      
  708.     #==============================================================================
  709.     # ■ Window_Weight_Sum_Shop
  710.     #------------------------------------------------------------------------------
  711.     #  ショップの売却画面で総重量を表示するクラスです。
  712.     #==============================================================================
  713.     class Window_Weight_Sum_Shop < Window_ItemList
  714.       #--------------------------------------------------------------------------
  715.       # ○ オブジェクト初期化
  716.       #--------------------------------------------------------------------------
  717.       def initialize(x, y, width, height)
  718.         super(x, y, width, height)
  719.         refresh
  720.       end
  721.       #--------------------------------------------------------------------------
  722.       # ○ リフレッシュ
  723.       #--------------------------------------------------------------------------
  724.       def refresh
  725.         contents.clear
  726.         rect = Rect.new(0, 0, width - 28, line_height)
  727.         change_color(system_color)
  728.         draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
  729.         change_color(normal_color)
  730.         str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
  731.         draw_text(rect, str, 2)
  732.       end
  733.     end
  734.      
  735.     #==============================================================================
  736.     # ■ Scene_Menu
  737.     #------------------------------------------------------------------------------
  738.     #  メニュー画面の処理を行うクラスです。
  739.     #==============================================================================
  740.     class Scene_Menu < Scene_MenuBase
  741.       include MOO_GENERAL_MODULE
  742.       #--------------------------------------------------------------------------
  743.       # ● 開始処理
  744.       #--------------------------------------------------------------------------
  745.       def start
  746.         super
  747.         create_command_window
  748.         create_gold_window
  749.         create_status_window
  750.         @wt_x = 0
  751.         @wt_y = Graphics.height - @gold_window.height - weight_item_window_h
  752.         @wt_w = weight_item_window_w
  753.         @wt_h = @gold_window.height
  754.         create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
  755.       end
  756.       #--------------------------------------------------------------------------
  757.       # ○ 総重量ウィンドウの作成
  758.       #--------------------------------------------------------------------------
  759.       def create_weight_sum_window(x, y, width, height)
  760.         @weight_sum_window = Window_Weight_Sum_Menu.new(x, y, width, height)
  761.         @weight_sum_window.viewport = @viewport
  762.       end
  763.     end
  764.      
  765.     #==============================================================================
  766.     # ■ Scene_Item
  767.     #------------------------------------------------------------------------------
  768.     #  アイテム画面の処理を行うクラスです。
  769.     #==============================================================================
  770.     class Scene_Item < Scene_ItemBase
  771.       include MOO_GENERAL_MODULE
  772.       #--------------------------------------------------------------------------
  773.       # ● 開始処理
  774.       #--------------------------------------------------------------------------
  775.       def start
  776.         super
  777.         create_help_window
  778.         create_category_window
  779.         create_item_window
  780.         @wt_x = weight_item_window_x
  781.         @wt_y = weight_item_window_y
  782.         @wt_w = weight_item_window_w
  783.         @wt_h = weight_item_window_h
  784.         create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
  785.       end
  786.       #--------------------------------------------------------------------------
  787.       # ○ 総重量ウィンドウの作成
  788.       #--------------------------------------------------------------------------
  789.       def create_weight_sum_window(x, y, width, height)
  790.         @weight_sum_window = Window_Weight_Sum_item.new(x, y, width, height)
  791.         @weight_sum_window.viewport = @viewport
  792.         @weight_sum_window.y = @help_window.height
  793.       end
  794.       #--------------------------------------------------------------------------
  795.       # ● アイテムの使用
  796.       #--------------------------------------------------------------------------
  797.       def use_item
  798.         super
  799.         @item_window.redraw_current_item
  800.         @weight_sum_window.refresh
  801.       end
  802.     end
  803.      
  804.     #==============================================================================
  805.     # ■ Scene_Shop
  806.     #------------------------------------------------------------------------------
  807.     #  ショップ画面の処理を行うクラスです。
  808.     #==============================================================================
  809.     class Scene_Shop < Scene_MenuBase
  810.       include MOO_GENERAL_MODULE
  811.       #--------------------------------------------------------------------------
  812.       # ● 開始処理
  813.       #--------------------------------------------------------------------------
  814.       def start
  815.         super
  816.         create_help_window
  817.         create_gold_window
  818.         create_command_window
  819.         create_dummy_window
  820.         create_category_window
  821.         create_number_window
  822.         create_status_window
  823.         create_buy_window
  824.         @wt_x = weight_item_window_x
  825.         @wt_y = weight_item_window_y + 48
  826.         @wt_w = weight_item_window_w
  827.         @wt_h = weight_item_window_h
  828.         create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
  829.         create_sell_window
  830.       end
  831.       #--------------------------------------------------------------------------
  832.       # ○ 総重量ウィンドウの作成
  833.       #--------------------------------------------------------------------------
  834.       def create_weight_sum_window(x, y, width, height)
  835.         @weight_sum_window = Window_Weight_Sum_Shop.new(x, y, width, height)
  836.         @weight_sum_window.viewport = @viewport
  837.         @weight_sum_window.y = @help_window.height
  838.         @weight_sum_window.y = @dummy_window.y
  839.         @weight_sum_window.hide.deactivate
  840.       end
  841.       #--------------------------------------------------------------------------
  842.       # ● 個数入力[決定]
  843.       #--------------------------------------------------------------------------
  844.       def on_number_ok
  845.         case @command_window.current_symbol
  846.         when :buy
  847.           do_buy(@number_window.number)
  848.           @weight_sum_window.refresh
  849.           @weight_sum_window.hide
  850.         when :sell
  851.           do_sell(@number_window.number)
  852.           @weight_sum_window.refresh
  853.         end
  854.         end_number_input
  855.         @gold_window.refresh
  856.         @status_window.refresh
  857.       end
  858.       #--------------------------------------------------------------------------
  859.       # ● 購入の実行
  860.       #--------------------------------------------------------------------------
  861.       def do_buy(number)
  862.         if $game_party.gain_item_failed?(@item, number) == false
  863.           Sound.play_buzzer
  864.           return
  865.         end
  866.         Sound.play_shop
  867.         $game_party.lose_gold(number * buying_price)
  868.         $game_party.moo_gain_item(@item, number)
  869.       end
  870.       #--------------------------------------------------------------------------
  871.       # ● 売却ウィンドウのアクティブ化
  872.       #--------------------------------------------------------------------------
  873.       def activate_sell_window
  874.         @category_window.show
  875.         @weight_sum_window.show
  876.         @sell_window.refresh
  877.         @sell_window.show.activate
  878.         @status_window.hide
  879.       end
  880.       #--------------------------------------------------------------------------
  881.       # ● 購入ウィンドウのアクティブ化
  882.       #--------------------------------------------------------------------------
  883.       def activate_buy_window
  884.         @buy_window.money = money
  885.         @buy_window.show.activate
  886.         @status_window.show
  887.       end
  888.       #--------------------------------------------------------------------------
  889.       # ● コマンド[購入する]
  890.       #--------------------------------------------------------------------------
  891.       def command_buy
  892.         @dummy_window.hide
  893.         activate_buy_window
  894.         @buy_window.select(0)
  895.         @buy_window.refresh
  896.       end
  897.       #--------------------------------------------------------------------------
  898.       # ● コマンド[売却する]
  899.       #--------------------------------------------------------------------------
  900.       def command_sell
  901.         @dummy_window.hide
  902.         @category_window.show.activate
  903.         @weight_sum_window.show
  904.         @sell_window.show
  905.         @sell_window.unselect
  906.         @sell_window.refresh
  907.         @weight_sum_window.show
  908.       end
  909.       #--------------------------------------------------------------------------
  910.       # ● カテゴリ[キャンセル]
  911.       #--------------------------------------------------------------------------
  912.       def on_category_cancel
  913.         @command_window.activate
  914.         @dummy_window.show
  915.         @category_window.hide
  916.         @weight_sum_window.hide
  917.         @sell_window.hide
  918.       end
  919.       #--------------------------------------------------------------------------
  920.       # ● 売却[決定]
  921.       #--------------------------------------------------------------------------
  922.       def on_sell_ok
  923.         @item = @sell_window.item
  924.         @status_window.item = @item
  925.         @category_window.hide
  926.         @weight_sum_window.hide
  927.         @sell_window.hide
  928.         @number_window.set(@item, max_sell, selling_price, currency_unit)
  929.         @number_window.show.activate
  930.         @status_window.show
  931.       end
  932.       #--------------------------------------------------------------------------
  933.       # ● 売却[キャンセル]
  934.       #--------------------------------------------------------------------------
  935.       def on_sell_cancel
  936.         @sell_window.unselect
  937.         @category_window.activate
  938.         @weight_sum_window.activate
  939.         @status_window.item = nil
  940.         @help_window.clear
  941.       end
  942.       #--------------------------------------------------------------------------
  943.       # ● 売却の実行
  944.       #--------------------------------------------------------------------------
  945.       def do_sell(number)
  946.         Sound.play_shop
  947.         $game_party.gain_gold(number * selling_price)
  948.         $game_party.lose_item(@item, number)
  949.       end
  950.       #--------------------------------------------------------------------------
  951.       # ● 売値の取得
  952.       #--------------------------------------------------------------------------
  953.       def selling_price
  954.         @sell_window.price(@item)
  955.       end
  956.     end
复制代码
アイテム預かり所
  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     = 888
  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. class Window_PTItemList < Window_ItemList
  495.   #--------------------------------------------------------------------------
  496.   # アイテムをリストに含めるかどうか
  497.   #--------------------------------------------------------------------------
  498.   alias include_ik? include?
  499.   def include?(item)
  500.    
  501.     #アイテムが存在しない場合、ウィンドウが不可視の場合
  502.     #保管禁止アイテムを非表示にする場合は表示しない。
  503.    
  504.     return false if item == nil
  505.     return false if self.visible == false
  506.     return false if ITEM_KEEPER::UNVISIBLE == true && item.keep_seal_flag
  507.    
  508.     #本来の処理を実行。
  509.    
  510.     include_ik?(item)
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # アイテムを許可状態で表示するかどうか
  514.   #--------------------------------------------------------------------------
  515.   def enable?(item)
  516.    
  517.     #アイテムが存在しない場合、もしくは保管禁止アイテムの場合はfalseを返す。
  518.    
  519.     return false if item == nil
  520.     return false if item.keep_seal_flag
  521.     return true
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # アイテムリストの作成
  525.   #--------------------------------------------------------------------------
  526.   def make_item_list
  527.    
  528.     #全ての中から、所持アイテムか倉庫アイテムとして存在する物のみ取得する。
  529.    
  530.     item_data = $data_items + $data_weapons + $data_armors
  531.     @data = item_data.select {|item| include?(item) && ($game_party.item_number(item) > 0 or $game_party.item_keep_number(item) > 0)}
  532.     @data.push(nil) if include?(nil)
  533.   end
  534.   #--------------------------------------------------------------------------
  535.   # 選択項目の有効状態を取得
  536.   #--------------------------------------------------------------------------
  537.   def current_item_enabled?
  538.     enable?(@data[index])
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # 桁数の取得
  542.   #--------------------------------------------------------------------------
  543.   def col_max
  544.     return 1
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # フレーム更新
  548.   #--------------------------------------------------------------------------
  549.   def update
  550.     super
  551.   end
  552.   #--------------------------------------------------------------------------
  553.   # 項目の描画
  554.   #--------------------------------------------------------------------------
  555.   def draw_item(index, flag = false)
  556.    
  557.     #データからアイテムを取得し、各種データを記述する。
  558.    
  559.     item = @data[index]
  560.    
  561.     #アイテムが存在しない場合は処理を行わない。
  562.    
  563.     return unless item
  564.    
  565.     rect = item_rect(index)
  566.     contents.clear_rect(rect) if flag
  567.     rect.width -= 4
  568.     draw_item_name(item, rect.x, rect.y, enable?(item))
  569.     change_color(text_color(5))
  570.     draw_text(180, rect.y, 100, line_height, "所持", 2)
  571.     change_color(text_color(0))
  572.     draw_text(220, rect.y, 100, line_height, $game_party.item_number(item), 2)
  573.     draw_text(240, rect.y, 100, line_height,"/", 2)
  574.     draw_text(270, rect.y, 100, line_height, $game_party.max_item_number(item), 2)
  575.     change_color(text_color(5))
  576.     draw_text(330, rect.y, 100, line_height, "倉庫", 2)
  577.     change_color(text_color(0))
  578.     draw_text(370, rect.y, 100, line_height, $game_party.item_keep_number(item), 2)
  579.     draw_text(390, rect.y, 100, line_height, "/", 2)
  580.     draw_text(420, rect.y, 100, line_height, $game_party.max_item_keep_number(item), 2)
  581.    
  582.   end
  583. end
  584. class Window_IKInput < Window_Selectable
  585.   #--------------------------------------------------------------------------
  586.   # 公開インスタンス変数
  587.   #--------------------------------------------------------------------------
  588.   attr_accessor   :item_window
  589.   attr_accessor   :number
  590.   attr_accessor   :description_window
  591.   #--------------------------------------------------------------------------
  592.   # オブジェクト初期化
  593.   #--------------------------------------------------------------------------
  594.   def initialize
  595.    
  596.     #ウィンドウを生成する。
  597.    
  598.     super(Graphics.width / 2 - 122, Graphics.height / 2 - 50, 244, 100)
  599.    
  600.     #設定に応じて背景透明度を変更する。
  601.    
  602.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  603.    
  604.     #一旦隠す。
  605.    
  606.     hide
  607.    
  608.     #非アクティブにする。
  609.    
  610.     deactivate
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # 数字の変更処理
  614.   #--------------------------------------------------------------------------
  615.   def update
  616.    
  617.     #見えない場合は更新しない。
  618.    
  619.     return unless self.visible
  620.    
  621.     #入力関連の各種処理を実行。
  622.    
  623.     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)
  624.       if Input.press?(Input::SHIFT)   #100個預ける
  625.         keep_exe(@item_window.item, 100)
  626.       elsif Input.press?(Input::CTRL) #100個引き出す
  627.         get_exe(@item_window.item, 100)
  628.       elsif Input.repeat?(:RIGHT)     #10個預ける
  629.         keep_exe(@item_window.item, 10)
  630.       elsif Input.repeat?(:LEFT)      #10個引き出す
  631.         get_exe(@item_window.item, 10)
  632.       elsif Input.repeat?(:UP)        #1個預ける
  633.         keep_exe(@item_window.item, 1)
  634.       elsif Input.repeat?(:DOWN)      #1個引き出す
  635.         get_exe(@item_window.item, 1)
  636.       end
  637.       refresh_number
  638.     end
  639.     if Input.trigger?(:C)
  640.       
  641.       #決定音を鳴らす。
  642.       
  643.       Sound.play_ok
  644.       
  645.       #数に応じてアイテム数を変更。
  646.       
  647.       $game_party.item_keep(@item_window.item, @number)
  648.       
  649.       #ウィンドウを隠す。
  650.       
  651.       self.hide
  652.       
  653.       #ウィンドウを非アクティブにする。
  654.       
  655.       self.deactivate
  656.       
  657.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  658.       
  659.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  660.       
  661.       #条件に応じてアイテムウィンドウを変更する。
  662.       
  663.       ITEM_KEEPER::FLAG ? @item_window.draw_item(@item_window.index, true) : @item_window.refresh
  664.       
  665.       #アイテムウィンドウをアクティブにする。
  666.       
  667.       @item_window.activate
  668.     elsif Input.trigger?(:B)
  669.       
  670.       #決定音を鳴らす。
  671.       
  672.       Sound.play_cancel
  673.       
  674.       #ウィンドウを隠す。
  675.       
  676.       self.hide
  677.       
  678.       #ウィンドウを非アクティブにする。
  679.       
  680.       self.deactivate
  681.       
  682.       #説明ウィンドウが存在する場合、説明ウィンドウを隠す。
  683.       
  684.       @description_window.hide if ITEM_KEEPER::DESCRIPT
  685.       
  686.       #アイテムウィンドウをアクティブにする。
  687.       
  688.       @item_window.activate
  689.       
  690.     end
  691.   end
  692.   #--------------------------------------------------------------------------
  693.   # 預けられる限界をチェック
  694.   #--------------------------------------------------------------------------
  695.   def limitcheck1
  696.    
  697.     #所持数が既に0、もしくは預ける限界に達している場合はfalseを返す。
  698.    
  699.     return false if $game_party.item_number(@item_window.item) - @number == 0
  700.     return false if $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item)
  701.     return true
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # 引き出せる限界をチェック
  705.   #--------------------------------------------------------------------------
  706.   def limitcheck2
  707.    
  708.     #所持数が既に限界に達している場合、もしくは預けている数が0の場合はfalseを返す。
  709.    
  710.     return false if $game_party.item_number(@item_window.item) - @number == $game_party.max_item_number(@item_window.item)
  711.     return false if $game_party.item_keep_number(@item_window.item) + @number == 0
  712.     return true
  713.   end
  714.   #--------------------------------------------------------------------------
  715.   # 預ける
  716.   #--------------------------------------------------------------------------
  717.   def keep_exe(item, amount)
  718.    
  719.     #数量分処理する。
  720.    
  721.     amount.times do
  722.       @number += 1 if limitcheck1
  723.     end
  724.   end
  725.   #--------------------------------------------------------------------------
  726.   # 引き出す
  727.   #--------------------------------------------------------------------------
  728.   def get_exe(item, amount)
  729.    
  730.     #数量分処理する。
  731.    
  732.     amount.times do
  733.       @number -= 1 if limitcheck2
  734.     end
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # リフレッシュ
  738.   #--------------------------------------------------------------------------
  739.   def refresh
  740.    
  741.     #不可視状態の場合はリフレッシュしない。
  742.    
  743.     return false unless self.visible
  744.    
  745.     #数量を更新する。
  746.    
  747.     @last_number = @number
  748.    
  749.     #ウィンドウの内容を消去する。
  750.    
  751.     contents.clear
  752.     create_contents
  753.         
  754.     #アイテム名を描写。
  755.    
  756.     draw_item_name(@item_window.item, 0, 0)
  757.     change_color(system_color)
  758.     draw_text(0, line_height * 1, 80, line_height, "所持", 1)
  759.     draw_text(self.contents.width - 80, line_height * 1, 80, line_height, "倉庫", 1)
  760.     draw_text(0, line_height * 1, self.contents.width, line_height, "→", 1)
  761.     draw_text(0, line_height * 2, self.contents.width, line_height, "←", 1)
  762.    
  763.     #所持数データを描写。
  764.    
  765.     $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)
  766.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  767.     $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)
  768.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  769.   end
  770.   #--------------------------------------------------------------------------
  771.   # 数量のみリフレッシュ
  772.   #--------------------------------------------------------------------------
  773.   def refresh_number
  774.    
  775.     #不可視状態の場合はリフレッシュしない。
  776.    
  777.     return false unless self.visible
  778.    
  779.     #最後の数量と現在の数量が異なる場合は数量を更新する。
  780.    
  781.     if @last_number != @number
  782.       Sound.play_cursor
  783.       @last_number = @number
  784.     end
  785.    
  786.     #ウィンドウの内容を消去する。
  787.    
  788.     contents.clear_rect(0, line_height * 2, 80, line_height)
  789.     contents.clear_rect(self.contents.width - 80, line_height * 2, 80, line_height)
  790.    
  791.     #所持数データを描写。
  792.    
  793.     $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)
  794.     draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
  795.     $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)
  796.     draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  797.   end
  798. end
  799. class Window_IKDescription < Window_Base
  800.   def initialize
  801.    
  802.     #ウィンドウを生成する。
  803.    
  804.     super(Graphics.width / 2 - 240, Graphics.height / 3 * 2, 480, 96)
  805.    
  806.     #設定に応じて背景透明度を変更する。
  807.    
  808.     self.back_opacity = ITEM_KEEPER::B_OPACITY
  809.    
  810.     #システムカラーで項目部分を描画する。
  811.    
  812.     change_color(system_color)
  813.    
  814.     draw_text(0, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][0], 0)
  815.     draw_text(self.contents.width / 2, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][0], 0)
  816.     draw_text(0, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][0], 0)
  817.     draw_text(self.contents.width / 2, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][0], 0)
  818.     draw_text(0, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][0], 0)
  819.     draw_text(self.contents.width / 2, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][0], 0)

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

评分

参与人数 1星屑 +60 收起 理由
黑舞嗜 + 60 额...楼上已经帮我解决了,不过还是谢谢.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 00:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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