查看: 4048|回复: 6

[已经解决] 如何实现简易负重系统

[复制链接]

运否天赋

梦石
10
星屑
5246
在线时间
3568 小时
注册时间
2014-5-15
回帖
1441

开拓者

发表于 2014-8-8 19:57:49 | 显示全部楼层 |阅读模式

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

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

×
  如题,希望可以实现购买特定的物品(根据物品id判定)增加一个变量的值(用于计算负重),卖出相应的物品减少变量。
然后变量值达到给定的上限就只能卖出,不能买入。
土猫三国开发完成

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-8-8 20:14:21 | 显示全部楼层
本帖最后由 taroxd 于 2014-8-8 20:15 编辑

未测试的说~

[pre lang="ruby" line="1"]class Game_Party
  def max_item_number(item)
    case item.id
    when 15 then 30     # 15号道具最多持有 30 个
    when 20, 30 then 40 # 20, 30号道具最多持有 40 个
    else 99             # 其他道具最多持有 99 个
    end
  end
end[/pre]

如果要几个物品共有变量的话会比较麻烦一些。有这个需求再说吧

点评

是  发表于 2014-8-8 20:30
第六行是不是可以改所有道具最大持有数  发表于 2014-8-8 20:27

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复

使用道具 举报

运否天赋

梦石
10
星屑
5246
在线时间
3568 小时
注册时间
2014-5-15
回帖
1441

开拓者

 楼主| 发表于 2014-8-8 20:39:01 | 显示全部楼层
本帖最后由 喵kano 于 2014-8-8 20:43 编辑
taroxd 发表于 2014-8-8 20:14
未测试的说~

class Game_Party


| ω・´)按照xd君的办法,似乎用事件加总特定id的物品持有数也行,结贴吧。
土猫三国开发完成
回复

使用道具 举报

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-8-8 21:06:35 | 显示全部楼层
本帖最后由 VIPArcher 于 2014-8-9 00:17 编辑

之前有遇到过这类问题,稍微改一改好像还是可以符合你的要求的。虽然这个脚本写得惨不忍睹。不是很好看。你就自己改一改看看吧     @Money @Money
一直消不掉@ 而且还会自动匹配到大写的,我没辙了 。如果出错,请把  @Money => @money

  1. class RPG::BaseItem
  2.   def load
  3.     return if self.is_a?(RPG::Skill)
  4.     self.note.split(/[\r\n]+/).each { |line|
  5.       if line =~ /\[(?:load|负重|負重) (\w+)\]/
  6.         return $1.nil? ? 0 : $1.to_i
  7.       end}
  8.     return 0
  9.   end
  10. end

  11. class Scene_Item < Scene_ItemBase
  12.   alias load_start start
  13.   alias load_terminate terminate
  14.   alias load_update update
  15.   def start
  16.     load_start
  17.     @load_window = Window_Base.new(392, 0, 152, 56)
  18.     @load_window.viewport = @viewport
  19.   end
  20.   def terminate
  21.     @load_window.dispose
  22.     load_terminate
  23.   end
  24.   def update
  25.     @load_window.update
  26.     if @temp_load != $game_party.current_load
  27.       @load_window.contents.clear
  28.       @load_window.contents.draw_text(0, 0, 120, 24, "负重:#{$game_party.current_load}/#{$game_party.total_load}")
  29.       @temp_load = $game_party.current_load
  30.     end
  31.     if Input.trigger?(Input::X)
  32.       @item = @item_window.item
  33.       $game_party.lose_item(@item, 1)
  34.       @item_window.refresh
  35.     end
  36.     load_update
  37.   end
  38. end

  39. class Scene_Shop < Scene_MenuBase
  40.   alias load_start start
  41.   alias load_terminate terminate
  42.   alias load_update update
  43.   def start
  44.     load_start
  45.     @load_window = Window_Base.new(392, 0, 152, 56)
  46.     @load_window.viewport = @viewport
  47.   end
  48.   def terminate
  49.     @load_window.dispose
  50.     load_terminate
  51.   end
  52.   def update
  53.     @load_window.update
  54.     if @temp_load != $game_party.current_load
  55.       @load_window.contents.clear
  56.       @load_window.contents.draw_text(0, 0, 120, 24, "负重:#{$game_party.current_load}/#{$game_party.total_load}")
  57.       @temp_load = $game_party.current_load
  58.     end
  59.     load_update
  60.   end
  61. end

  62. class Game_Party < Game_Unit
  63.   attr_reader :current_load
  64.   alias load_initialize initialize
  65.   alias load_gain_item gain_item
  66.   def initialize
  67.     load_initialize
  68.     @current_load = 0
  69.   end
  70.   # 获取队伍最大负重
  71.   def total_load
  72.     party_load = 0
  73.     #members.size.times do |i|
  74.     for i in 0...members.size
  75.       actor = members[i]
  76.       party_load += actor.load
  77.     end
  78.     return party_load
  79.    
  80.   end

  81.   def gain_item(item, n, include_equip = false)
  82.     return if item.nil?
  83.       load_gain_item(item, n, include_equip)
  84.       @current_load += item.load * n
  85.   end
  86. end
  87. class Game_Actor < Game_Battler
  88.   # 获取队员负重
  89.   def load
  90.     return (mhp + mmp) * @level / agi
  91.   end
  92. end
  93. class Game_Interpreter
  94.   alias load_command_126 command_126
  95.   alias load_command_127 command_127
  96.   alias load_command_128 command_128
  97.   
  98.   def command_126
  99.     n = operate_value(@params[1], @params[2], @params[3])
  100.     return command_115 if check_load(@params[0], 0, n)
  101.     load_command_126
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 增減武器
  105.   #--------------------------------------------------------------------------
  106.   def command_127
  107.     n = operate_value(@params[1], @params[2], @params[3])
  108.     return command_115 if check_load(@params[0], 1, n)
  109.     load_command_127
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 增減防具
  113.   #--------------------------------------------------------------------------
  114.   def command_128
  115.     n = operate_value(@params[1], @params[2], @params[3])
  116.     return command_115 if check_load(@params[0], 2, n)
  117.     load_command_128
  118.   end
  119.   
  120.   def check_load(item_id, type, n)
  121.     case type
  122.     when 0; item = $data_items[item_id]
  123.     when 1; item = $data_weapons[item_id]
  124.     when 2; item = $data_armors[item_id]
  125.     end
  126.     if (((item.load * n) + $game_party.current_load) > $game_party.total_load)
  127.       $game_message.texts.push("负重已满,无法移动") if $game_message.visible != true
  128.       $game_message.visible = true
  129.     end
  130.     return
  131.   end
  132. end
  133. class Game_Player < Game_Character
  134.   
  135.   alias vipmovable? movable?
  136.   #--------------------------------------------------------------------------
  137.   # ● 判定是否负重已满
  138.   #--------------------------------------------------------------------------
  139.   def mfz_vip?
  140.     $game_party.total_load < $game_party.current_load
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 判定是否可以移动
  144.   #--------------------------------------------------------------------------
  145.   def movable?
  146.     return false if mfz_vip?
  147.     vipmovable?
  148.   end
  149. end

  150. class Window_ShopBuy < Window_Selectable
  151.   
  152.   #--------------------------------------------------------------------------
  153.   # ● 判定是否负重已满
  154.   #--------------------------------------------------------------------------
  155.   def mfz_vip?
  156.     $game_party.total_load <= $game_party.current_load
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 查询商品是否可买
  160.   #--------------------------------------------------------------------------
  161.   def enable?(item)
  162.     item && price(item) <= @money && !$game_party.item_max?(item) && !mfz_vip?
  163.   end
  164. end
  165. class Scene_Shop < Scene_MenuBase
  166.   #--------------------------------------------------------------------------
  167.   # ● 获取可以买入的最大值
  168.   #--------------------------------------------------------------------------
  169.   def max_buy
  170.     vip = ($game_party.total_load - $game_party.current_load) / @item.load
  171.     max = $game_party.max_item_number(@item) - $game_party.item_number(@item)
  172.     buying_price == 0 ? [max,vip].min : [max,vip, money / buying_price].min
  173.   end
  174. end
复制代码

评分

参与人数 1星屑 +233 梦石 +1 收起 理由
taroxd + 233 + 1 认可答案

查看全部评分

回复

使用道具 举报

运否天赋

梦石
10
星屑
5246
在线时间
3568 小时
注册时间
2014-5-15
回帖
1441

开拓者

 楼主| 发表于 2014-8-9 09:22:56 | 显示全部楼层
VIPArcher 发表于 2014-8-8 21:06
之前有遇到过这类问题,稍微改一改好像还是可以符合你的要求的。虽然这个脚本写得惨不忍睹。不是很好看。你 ...

| ω・´)感谢vip,于是把最大负重的判定改成了变量。唯一的遗憾是事件获得物品超过负重会显示“负重已满,无法移动”,但从商店购买物品超过负重时没有这个提示。可以在商店购买后也增加超重的提示吗?

点评

原来是漏了那个买入最大值的部分w已经解决了  发表于 2014-8-9 11:16
我这里试验的结果是买满了负重就不能继续买了,但是只要负重不满就可以购买任意数量,有超重的可能性。  发表于 2014-8-9 11:14
诶?我记得我弄得是商店不能购买超过负重的说?可能是考虑的不够周到。我等会去看看>3<  发表于 2014-8-9 11:10
土猫三国开发完成
回复

使用道具 举报

梦石
0
星屑
124
在线时间
900 小时
注册时间
2012-11-13
回帖
845
发表于 2014-8-9 12:43:27 | 显示全部楼层
  1. #==============================================================================
  2. # F04 - 突破限制 - By芙蕾娅
  3. #------------------------------------------------------------------------------
  4. #  ★ - 新增  ☆ - 修改 ● - 无变更
  5. #==============================================================================
  6. module Freya
  7.   # 敌人最大HP值
  8.   MaxHP = 99999
  9.   # 敌人最大MP值
  10.   MaxMP = 9999
  11.   # 敌人最大属性值
  12.   MaxParam = 999
  13.   # 角色最大HP值
  14.   ActorMaxHP = 9999
  15.   # 角色最大MP值
  16.   ActorMaxMP = 999
  17.   # 角色最大属性值
  18.   ActorMaxParam = 999
  19.   # 金钱最大数量
  20.   MaxGold = 99999
  21.   # 道具最大数量
  22.   MaxItemNumber = 9
  23.   # 判断设定
  24.   # 写在备注栏即可
  25.   # <ItemMax X>
  26.   # <最大数量 X>
  27.   # X为各个道具的最大数量
  28.   ItemMax = /<(?:ItemMax|最大数量)\s*(\d+)>/i
  29. end
  30. class RPG::BaseItem
  31.   def number_limit
  32.     @nl = Freya::MaxItemNumber
  33.     self.note.each_line { |line|
  34.     if line =~ Freya::ItemMax ; @nl = $1.to_i ; end}
  35.     return @nl
  36.   end
  37. end
  38. #==============================================================================
  39. # ■ Game_BattlerBase
  40. #------------------------------------------------------------------------------
  41. #  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
  42. #==============================================================================
  43. class Game_BattlerBase
  44.   #--------------------------------------------------------------------------
  45.   # ☆ 获取普通能力的最大值
  46.   #--------------------------------------------------------------------------
  47.   def param_max(param_id)
  48.     return Freya::MaxHP if param_id == 0  # MHP
  49.     return Freya::MaxMP   if param_id == 1  # MMP
  50.     return Freya::MaxParam
  51.   end
  52. end
  53. #==============================================================================
  54. # ■ Game_Actor
  55. #------------------------------------------------------------------------------
  56. #  管理角色的类。
  57. #   本类在 Game_Actors 类 ($game_actors) 的内部使用。
  58. #   具体使用请查看 Game_Party 类 ($game_party) 。
  59. #==============================================================================
  60. class Game_Actor < Game_Battler
  61.   #--------------------------------------------------------------------------
  62.   # ☆ 获取普通能力的最大值
  63.   #--------------------------------------------------------------------------
  64.   def param_max(param_id)
  65.     return Freya::ActorMaxHP if param_id == 0  # MHP
  66.     return Freya::ActorMaxMP   if param_id == 1  # MMP
  67.     return Freya::ActorMaxParam
  68.   end
  69. end
  70. #==============================================================================
  71. # ■ Game_Party
  72. #------------------------------------------------------------------------------
  73. #  管理队伍的类。保存有金钱及物品的信息。本类的实例请参考 $game_party 。
  74. #==============================================================================
  75. class Game_Party < Game_Unit
  76.   #--------------------------------------------------------------------------
  77.   # ☆ 获取持有金钱的最大值
  78.   #--------------------------------------------------------------------------
  79.   def max_gold
  80.     return Freya::MaxGold
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ☆ 获取物品的最大持有数
  84.   #--------------------------------------------------------------------------
  85.   def max_item_number(item)
  86.     return item.number_limit
  87.   end
  88. end
复制代码
其中的一个功能即你要的功能
废弃
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2014-8-9 13:15:48 | 显示全部楼层
むー素材用モジュール
[pre lang="ruby" line="1"]#==============================================================================
# ■ むー素材用モジュール Ver 1.0
#------------------------------------------------------------------------------
#    スクリプトに必要なモジュールです。                                 By むー
#------------------------------------------------------------------------------
#    使用スクリプト
#    ・ドロップアイテム演出
#    ・アイテム重量制
#==============================================================================
module MOO_GENERAL_MODULE

  #--------------------------------------------------------------------------
  # 以下、設定箇所です。
  #--------------------------------------------------------------------------

  # ウィンドウのサイズ(1=544x416 / 2=640x480)
  WINDOW_SIZE = 1
  # ここで指定しても、ウィンドウサイズが変わるわけではありません。

  #--------------------------------------------------------------------------
  # ここまで。
  #--------------------------------------------------------------------------

  #**************************************************************************
  # ※ ここ以下は変更しないでください。
  #**************************************************************************

  #--------------------------------------------------------------------------
  # ● 左右どちらかに指定文字を埋める
  #     word: 元々の文字列
  #     len:  全部で何文字にするか
  #     str:  埋める文字
  #     lr:   埋める文字を付ける方向(1=左/2=右)
  #       bury_plus("world", 8, " ", 1) → 結果: "   world"
  #       bury_plus("world", 8, "@", 2) → 結果: "world@@@"
  #--------------------------------------------------------------------------
  def bury_plus(word, len, str, lr = 1)
    return word if word.length >= len
    str.to_s
    pls = ""
    for i in 1..len - word.length
      pls += str
    end
    case lr
      when 1; return pls + word
      when 2; return word + pls
    end
  end
  #--------------------------------------------------------------------------
  # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  #--------------------------------------------------------------------------
  def weight_item_window_x
    return 384 if WINDOW_SIZE == 1
    return 480 if WINDOW_SIZE == 2
  end
  #--------------------------------------------------------------------------
  # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  #--------------------------------------------------------------------------
  def weight_item_window_y
    return 72  if WINDOW_SIZE == 1
    return 72  if WINDOW_SIZE == 2
  end
  #--------------------------------------------------------------------------
  # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  #--------------------------------------------------------------------------
  def weight_item_window_w
    return 160 if WINDOW_SIZE == 1
    return 160 if WINDOW_SIZE == 2
  end
  #--------------------------------------------------------------------------
  # ● 重量制限用:アイテムウィンドウで総重量を示すウィンドウの位置
  #--------------------------------------------------------------------------
  def weight_item_window_h
    return 48  if WINDOW_SIZE == 1
    return 48  if WINDOW_SIZE == 2
  end
  #--------------------------------------------------------------------------
  # ● 重量制限用:ショップの売却画面で総重量を示すウィンドウの幅調整
  #--------------------------------------------------------------------------
  def weight_shop_buy_category_window_adjust_w
    return 32  if WINDOW_SIZE == 1
    return 32  if WINDOW_SIZE == 2
  end
end
[/pre]
重量制 Ver 1.21
放在むー素材用モジュール之下
[pre lang="ruby" line="1"]#==============================================================================
# ■ 重量制 Ver 1.21                               By むー
#------------------------------------------------------------------------------
# アイテムに重量を付加し、所持可能な重量を指定できます。
# 本スクリプトを利用するには、[むー素材用]スクリプトが別途必要になります。
# 本スクリプトは[むー素材用]よりも下に設置して下さい。
#------------------------------------------------------------------------------
#
# ★簡単な仕様★
#
# ・ゲームに重量を設置します。
# ・設定した総重量以上の物は持てません。
# ・チェックコマンドにて、イベントで入手可能チェックができます。
# ・戦闘後のドロップアイテムは、持てる分だけ出ます。
#   →3個出た場合、最初の2個は持てるけれど残りが持てない場合、
#    2個分だけメッセージが出ます。入手も2個だけです。
# ・重量オーバーの場合、店で購入ができません。
# ・イベントでアイテムの増加をおこなう場合にもチェックが入ります。
#   →特にメッセージは出ません。例えば5個入手で持てるだけ入手したい場合は、
#    5個いぺっんに入手ではなく、1個入手を5回分作って下さい。
#    5個いっぺんに入手する場合、5個持てなかったら1個も入手できません。
#
# ★チェック機能★
#
# イベントでアイテムを入手する時、重量オーバーになると取得できません。
# イベントのスクリプトで、以下のように記述すると動作する機能があります。
#
# can_gain_item?(アイテム種類, ID, 数量, スイッチ番号, [取得フラグ])
#
#  アイテム種類: アイテム="I"、武器="W"、防具="A"
#  ID     : 上記アイテム種類別のID ("W",3...) なら武器ID3
#  数量    : 取得する数量
#  スイッチ番号: 入手できる場合はON、できない場合はOFFが入るスイッチの番号
#  取得フラグ : ついでに取得するか(true/false)
#
# アイテム種類は必ず""で囲って下さい。I、W、A以外のチェックしていません。
# 数量が0の場合のエラーチェックはおこなっていません。
# アイテム種類、ID、数量、スイッチ番号は必須です。
# スイッチを使わない場合は、0にしておいて下さい。
# 取得フラグをtrueにしておくと、取得可能な場合は自動的にアイテムを入手します。
# falseまたは何も記述しなかった場合は取得しません。
# またスイッチに入れなくとも、返り値でtrueかfalseが戻ります。
#
# ★注意点★
#
# ・ゲーム開始時に、基本重量を設定して下さい。
# ・初期装備によって、総重量がオーバーしている場合があります。
#
#==============================================================================
$rgsslab = {} if $rgsslab.nil?  # 併用対策
#==============================================================================
$moo_have_item_weight = true
module MOO_HAVE_ITEM_WEIGHT

  #--------------------------------------------------------------------------
  # 以下、設定箇所です。
  #--------------------------------------------------------------------------

  # 総重量を代入する変数番号
  MAX_WT = 11

  # 重量指定文字
  WORD_WT = "重量"
  # アイテム(および装備品)のメモ欄に書く文字です。
  # "重量"の場合、<重量:5>とすれば、そのアイテムの重量は5になります。
  # 他のスクリプトと重複する場合は変更してください。

  # 重量指定のないアイテムの重量
  DEFAULT_WT = 1
  # 重量の指定をしなかったアイテムの重量です。

  # 所持している総重量計算を個数×重量にするか
  UNIT_WT = true
  # 総重量の計算をどうするか決めます。
  # trueの場合、アイテム個数×個別の重量の総計が、所持している総重量になります。
  # falseの場合、アイテムが1個でも99個でも1個分の重さが総重量に加算されます。

  # アイテム欄の重量表示を個数×重量にするか
  VIEW_WT = true
  # アイテム個数の後ろに表示される重量表示をどうするか決めます。
  # trueの場合、アイテムの重量が5で個数が4の場合、20と表示されます。
  # falseの場合、個数に関係なく、単純にアイテムの重量だけが表示されます。
  # このVIEW_WTをfalse、上記のUNIT_WTがtrueの場合、錯覚しないようご注意ください。
  # その場合、()はあくまでそのアイテムの重量であり、総重量は個数×重量となります。
  # また、UNIT_WTをfalse、VIEW_WTをtrueにすると、混乱の元となります(笑)

  # 重量計算に装備品を含むか
  CONT_WT = false
  # 装備品を総重量に含むかどうかを決めます。
  # 袋(?)はあくまで袋、装備品は関係ない、などのような場合はfalseにして下さい。
  
  # 総重量を表示する上での文字
  SUM_WEIGHT_WORD = "総重量"

  # アイテム欄で重量を囲う文字
  PARENTHESIS_F = "(W:" # 前
  PARENTHESIS_L = ")"   # 後

  # 1つのアイテム重量の最大桁数
  FIGURE_WT = 2
  # 1つのアイテムに設定する重量の桁数です。99までなら2という感じで。
  # 上の「アイテム欄で重量を囲う文字」と合わせて表示しますが、
  # これが"(W:"と")"だった場合、画面上のアイテム欄には
  # [アイテム名   10(W: 5)] のように表示されます。
  # ↑       ↑ ↑
  # アイテム名  個数 重さ(この部分の数字の前の空白に関わってきます)

  # 売買価格のレートを格納する変数 (1 = 1%)/おまけ機能
  USE_RATE  = false # レート変動を使う場合
  BUY_RATE  = 12    # 購入レート(USE_RATE=trueの場合のみ有効)
  SELL_RATE = 13    # 売却レート(USE_RATE=trueの場合のみ有効)
  # 指定しない場合、購入価格と売却価格は同じになります。
  # 小数点以下の価格は切り捨てられます。

  # 販売不可アイテムの文字
  CANT_SELL = "重量制販売不可"
  # アイテムのメモ欄にこの文字があると、価格が0以上でも
  # ショップで販売不可になります(0はデフォルトのまま販売不可です)。
  # 重量制販売不可 とした場合、<重量制販売不可> と <>を一緒に記述して下さい。
  # なお、これはあくまでデフォルト形態のショップだけに有効です。

  #--------------------------------------------------------------------------
  # 以下、他のスクリプトを導入しているかどうかの判断です。
  # これらのスクリプトを使用する場合、本スクリプトより上の位置に置いて下さい。
  #--------------------------------------------------------------------------

  # ドロップアイテム系のスクリプトを導入しているか
  DROP_ITEM = false
  # 導入している場合は true にして下さい。通常は false にして下さい。
  # その際、そのスクリプトに$game_party.gain_item(ナントカ)とあると思います。
  # その前後に、本スクリプトの中身のように改造する必要があります。
  #

  #--------------------------------------------------------------------------
  # ここまで。
  #--------------------------------------------------------------------------

end

#==============================================================================
# ★ ここより下は変更しないで下さい。
#==============================================================================

if MOO_HAVE_ITEM_WEIGHT::DROP_ITEM == false
#==============================================================================
# ■ BattleManager
#------------------------------------------------------------------------------
#  戦闘の進行を管理するモジュールです。
#==============================================================================
module BattleManager
  def self.gain_drop_items
    $game_troop.make_drop_items.each do |item|
      if $game_party.gain_item_failed?(item)    # ドロップ系スクリプトに追加部分
        $game_party.moo_gain_item(item, 1)
        $game_message.add(sprintf(Vocab::ObtainItem, item.name))
      end   # ドロップ系スクリプトに追加部分
    end
    wait_for_message
  end
end
end

#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
# スのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party < Game_Unit
  include MOO_GENERAL_MODULE
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :gold                     # 所持金
  attr_reader   :steps                    # 歩数
  attr_reader   :last_item                # カーソル記憶用 : アイテム
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super
    @gold = 0
    @steps = 0
    @last_item = Game_BaseItem.new
    @total_weight = 0   # 追加
    @menu_actor_id = 0
    @target_actor_id = 0
    @actors = []
    init_all_items
  end
  #--------------------------------------------------------------------------
  # ◎ アイテムの増加(減少)
  #     include_equip : 装備品も含める
  #--------------------------------------------------------------------------
  alias moo_gain_item gain_item
  def gain_item(item, amount, include_equip = false)
    # gain_item内では、include_equipの関係からか、memberが使えません。
    # ですので重量に装備品を含む場合、メンバーの装備情報が取得できません。
    # 以下の"if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false"があるのはそのためです。
    # 重量に装備品抜きの場合に限り、ここで重量のチェックをしています。
    #
    # 総重量を超える場合は取得不可能
    # 1度に2以上取得しようとして引っかかった場合は、
    # たとえ1個分の許容があったとしても、全て取得できません。
    #
    # 一応ここ以外にも、以下の箇所で入手可能かどうかのチェックをしています。
    #
    # ・イベントでアイテム、武器、防具を入手する時
    # ・ショップでアイテムを購入する時
    # ・戦闘後のドロップアイテム入手時
    # ・装備を変更する時
    #
    # 普通に作成していれば、ここでチェックしなくてもよほど大丈夫だとはいますが、
    # 他のスクリプトを導入する際、アイテム入手がある場合は注意して下さい。
    # アイテム入手前に $game_party.gain_item(アイテム, 数量) を使って
    # trueかfalseで判断するようにして下さい。
    if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false
      return if gain_item_failed?(item, amount) == false
    end
    # moo_gain_item(item, amount, include_equip)
    container = item_container(item.class)
    return unless container
    last_number = item_number(item)
    new_number = last_number + amount
    container[item.id] = [[new_number, 0].max, max_item_number(item)].min
    container.delete(item.id) if container[item.id] == 0
    if include_equip && new_number < 0
      discard_members_equip(item, -new_number)
    end
    $game_map.need_refresh = true
  end
  #--------------------------------------------------------------------------
  # ○ アイテムの個別重量を取得
  #--------------------------------------------------------------------------
  def weight_item(item)
    return 0 if item == nil
    # アイテムのメモ取得
    memo = item.note.scan((/<#{MOO_HAVE_ITEM_WEIGHT::WORD_WT}[::](\S+)>/))
    memo = memo.flatten
    # 重量取得
    if memo != nil and not memo.empty?
      # 重量設定がある場合はそれを採用
      wt = memo[0].to_i
    else
      # 重量設定がない場合は指定した重量とする
      wt = MOO_HAVE_ITEM_WEIGHT::DEFAULT_WT
    end
    return wt
  end
  #--------------------------------------------------------------------------
  # ○ 所持アイテムの総重量を取得
  #--------------------------------------------------------------------------
  def weight_sum
    # 変数初期化
    wt = 0
    # 所持しているアイテムの重量取得
    $data_items.each do |item|
      # アイテムの総重量
      wt += weight_have_item(item) if item and item.name != ""
    end
    $data_weapons.each do |item|
      # 武器の総重量
      wt += weight_have_item(item) if item and item.name != ""
    end
    $data_armors.each do |item|
      # 防具の総重量
      wt += weight_have_item(item) if item and item.name != ""
    end
    return wt
  end
  #--------------------------------------------------------------------------
  # ○ 所持アイテムの個別重量を取得(フラグがあれば装備品を含む)
  #--------------------------------------------------------------------------
  def weight_have_item(item)
    return 0 if item == nil
    # アイテムの個別重量を取得
    wt = weight_item(item)
    # 所持個数の取得
    cn = item_number(item)
    if MOO_HAVE_ITEM_WEIGHT::CONT_WT
      if item.class == RPG::Weapon or item.class == RPG::Armor
          members.each do |actor|
          if item.class == RPG::Weapon
            cn += 1 if $game_actors[actor.id].equips[0] == item
            cn += 1 if $game_actors[actor.id].equips[1] == item
          elsif item.class == RPG::Armor
            cn += 1 if $game_actors[actor.id].equips[item.etype_id] == item
          end
        end
      end
    end
    # 個数×重量の場合の計算
    if cn == 0
      wt = 0
    else
      wt *= cn if MOO_HAVE_ITEM_WEIGHT::UNIT_WT
    end
    return wt
  end
  #--------------------------------------------------------------------------
  # ○ 重量をカッコ書き(アイテム一覧に書くため)
  #--------------------------------------------------------------------------
  def weight_item_draw(item)
    wt = weight_item(item).to_i
    wt *= item_number(item) if MOO_HAVE_ITEM_WEIGHT::VIEW_WT
    wt = wt.to_s
    wt = bury_plus(wt, MOO_HAVE_ITEM_WEIGHT::FIGURE_WT, " ", lr = 1)
    wt = MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_F + wt + MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_L
    return wt
  end
  #--------------------------------------------------------------------------
  # ○ アイテムを取得可能かどうかの判断
  #--------------------------------------------------------------------------
  def gain_item_failed?(item, val = 1)
    val = 1 if MOO_HAVE_ITEM_WEIGHT::UNIT_WT == false
    if weight_sum + weight_item(item) * val > $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT]
      false
    else
      true
    end
  end
  #--------------------------------------------------------------------------
  # ○ 個数の限界によってアイテムを取得可能かどうかの判断
  #--------------------------------------------------------------------------
  def gain_item_max?(item, val = 1)
    return false if item_number(item) + val > max_item_number(item)
    return true
  end
end

#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors)
# の内部で使用され、Game_Party クラス($game_party)からも参照されます。
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ◎ 装備の変更
  #     slot_id : 装備スロット ID
  #     item    : 武器/防具(nil なら装備解除)
  #--------------------------------------------------------------------------
  alias moo_change_equip change_equip
  def change_equip(slot_id, item)
    # equips[slot_id]: 装備中アイテム(nil=装備なし)
    # item: これから装備しようとしているアイテム(nil=装備なし)
    if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false
      wt_old = $game_party.weight_item(equips[slot_id])
      wt_new = $game_party.weight_item(item)
      wt_clc = $game_party.weight_sum + wt_old - wt_new
      # wt_clc: 現在の重さ + 外す装備品の重さ - これから装備する物の重さ
      if wt_clc > $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT]
        Sound.play_buzzer
        return
      end
    end
    moo_change_equip(slot_id, item)
  end
  #--------------------------------------------------------------------------
  # ● パーティとアイテムを交換する
  #     new_item : パーティから取り出すアイテム
  #     old_item : パーティに返すアイテム
  #--------------------------------------------------------------------------
  alias moo_trade_item_with_party trade_item_with_party
  def trade_item_with_party(new_item, old_item)
    return false if new_item && !$game_party.has_item?(new_item)
    # 入手と破棄を逆転
    $game_party.lose_item(new_item, 1)
    $game_party.gain_item(old_item, 1)
    return true
  end
end

#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● アイテムの増減
  #--------------------------------------------------------------------------
  def command_126
    value = operate_value(@params[1], @params[2], @params[3])
    if $game_party.gain_item_failed?($data_items[@params[0]], value)
      $game_party.moo_gain_item($data_items[@params[0]], value)
    end
  end
  #--------------------------------------------------------------------------
  # ● 武器の増減
  #--------------------------------------------------------------------------
  def command_127
    value = operate_value(@params[1], @params[2], @params[3])
    if $game_party.gain_item_failed?($data_weapons[@params[0]], value)
      $game_party.moo_gain_item($data_weapons[@params[0]], value, @params[4])
    end
  end
  #--------------------------------------------------------------------------
  # ● 防具の増減
  #--------------------------------------------------------------------------
  def command_128
    value = operate_value(@params[1], @params[2], @params[3])
    if $game_party.gain_item_failed?($data_armors[@params[0]], value)
      $game_party.moo_gain_item($data_armors[@params[0]], value, @params[4])
    end
  end
  #--------------------------------------------------------------------------
  # ○ 所持品を追加できるかの判断
  #     kind  : アイテム種類(/[IWA]/)
  #     id    : アイテムID
  #     num   : 入手する個数
  #     val   : 入手可能かどうかを代入するスイッチ番号(使わない場合は0を指定)
  #     gain  : 入手処理もついでに行なうか(省略時は行なわない)
  #--------------------------------------------------------------------------
  def can_gain_item?(kind, id, num = 1, val = 0, gain = false)
    # アイテム変数初期値
    item = nil
    # アイテム種類分別
    case kind
      when "I"; item = $data_items[id]
      when "W"; item = $data_weapons[id]
      when "A"; item = $data_armors[id]
    end
    # 重量による取得可能チェック  
    flg1 = $game_party.gain_item_failed?(item, num)
    # 数量による取得可能チェック
    flg2 = $game_party.gain_item_max?(item, num)
    # 重量か数量いずれかで取得不能判定があった場合のフラグ
    flg = true
    flg = false if flg1 == false or flg2 == false
    # 取得可能であり取得フラグが立っていたら取得
    $game_party.moo_gain_item(item, num) if flg and gain
    # スイッチに値を返す
    $game_switches[val] = flg if val > 0 and val != nil
    # 値を返す
    return flg
  end
  #--------------------------------------------------------------------------
  # ○ 所持品の総重量を取得
  #--------------------------------------------------------------------------
  def get_weight_sum
    $game_party.weight_sum
  end
end

#==============================================================================
# ■ Window_ItemCategory
#------------------------------------------------------------------------------
#  アイテム画面またはショップ画面で、通常アイテムや装備品の分類を選択するウィ
# ンドウです。
#==============================================================================
class Window_ItemCategory < Window_HorzCommand
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width - 160
  end
end

#==============================================================================
# ■ Window_ItemList
#------------------------------------------------------------------------------
#  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
#==============================================================================
class Window_ItemList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● アイテムの個数を描画
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
    $game_party.weight_sum
    # カッコ書きの重量文字列を取得
    wt = $game_party.weight_item_draw(item)
    # 数量の後に重量を追加
    draw_text(rect, sprintf(":%2d", $game_party.item_number(item)) + wt, 2)
  end
end

#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
#  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
#==============================================================================
class Window_ShopBuy
#  include MOO_GENERAL_MODULE
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y, height, shop_goods)
    super(x, y, window_width, height)
    @shop_goods = shop_goods
    @Money = 0
  end
  #--------------------------------------------------------------------------
  # ● 商品の値段を取得
  #--------------------------------------------------------------------------
  def price(item)
    if MOO_HAVE_ITEM_WEIGHT::USE_RATE
      return Integer(@price[item] * $game_variables[MOO_HAVE_ITEM_WEIGHT::BUY_RATE] / 100)
    else
      return @price[item]
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムリストの作成
  #--------------------------------------------------------------------------
  def make_item_list
    @data = []
    @price = {}
    @shop_goods.each do |goods|
      case goods[0]
      when 0;  item = $data_items[goods[1]]
      when 1;  item = $data_weapons[goods[1]]
      when 2;  item = $data_armors[goods[1]]
      end
      if item
        @data.push(item)
        @price[item] = goods[2] == 0 ? item.price : goods[3]
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    rect = item_rect(index)
    draw_item_name(item, rect.x, rect.y, enable?(item))
    rect.width -= 4
#    wt = $game_party.weight_item(item)
#    wt = wt.to_s
#    wt = bury_plus(wt, MOO_HAVE_ITEM_WEIGHT::FIGURE_WT, " ", 1)
#    wt = MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_F + wt + MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_L
#    draw_text(rect, price(item).to_s + wt, 2)
    draw_text(rect, price(item), 2)
  end
end

#==============================================================================
# ■ Window_ShopSell
#------------------------------------------------------------------------------
#  ショップ画面で、売却のために所持アイテムの一覧を表示するウィンドウです。
#==============================================================================
class Window_ShopSell
  #--------------------------------------------------------------------------
  # ○ 桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    return 1
  end
  #--------------------------------------------------------------------------
  # ○ 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    rect = item_rect(index)
    draw_item_name(item, rect.x, rect.y, enable?(item))
    rect.width -= 4
    draw_text(rect, price(item), 2)
  end
  #--------------------------------------------------------------------------
  # ◎ アイテムを許可状態で表示するかどうか
  #--------------------------------------------------------------------------
  alias moo_weight_enable? enable?
  def enable?(item)
    flg = $data_items[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">")   if item.class == RPG::Item
    flg = $data_weapons[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">") if item.class == RPG::Weapon
    flg = $data_armors[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">")  if item.class == RPG::Armor
    return false if flg
    moo_weight_enable?(item)
  end
  #--------------------------------------------------------------------------
  # ○ 商品の値段を取得
  #--------------------------------------------------------------------------
  def price(item)
    if MOO_HAVE_ITEM_WEIGHT::USE_RATE
      return Integer(item.price * $game_variables[MOO_HAVE_ITEM_WEIGHT::SELL_RATE] / 100)
    else
      return item.price
    end
  end
end

#==============================================================================
# ■ Window_ShopNumber
#------------------------------------------------------------------------------
#  ショップ画面で、購入または売却するアイテムの個数を入力するウィンドウです。
#==============================================================================
class Window_ShopNumber < Window_Selectable
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_item_name(@item, 0, item_y)
    draw_number
    draw_total_price
    draw_total_weight(@item)
  end
  #--------------------------------------------------------------------------
  # ○ 個数の総重量の描画
  #--------------------------------------------------------------------------
  def draw_total_weight(item)
    width = contents_width - 8
    cx = text_size(@currency_unit).width
    change_color(system_color)
    x_plus = 4
    if MOO_GENERAL_MODULE::WINDOW_SIZE == 1
      y_plus = 36
    elsif MOO_GENERAL_MODULE::WINDOW_SIZE == 2
      y_plus = 72
    end
    wd = MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD
    draw_text(4, y + 24 + y_plus, width, line_height, wd)
    change_color(normal_color)
    cn = 1
    cn = @number if MOO_HAVE_ITEM_WEIGHT::UNIT_WT
    wt = $game_party.weight_item(item) * cn #@number
    draw_text(x - cx - 2 + x_plus, y + 24 + y_plus, width, line_height, wt, 2)
  end
end

#==============================================================================
# ■ Window_ShopStatus
#------------------------------------------------------------------------------
#  ショップ画面で、アイテムの所持数やアクターの装備を表示するウィンドウです。
#==============================================================================
class Window_ShopStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_possession(4, 0)
    draw_weight_possession(4, 24)
    y_plus = 0
    y_plus = 24 if MOO_GENERAL_MODULE::WINDOW_SIZE == 2
    draw_equip_info(4, line_height * 2 + y_plus) if @item.is_a?(RPG::EquipItem)
  end
  #--------------------------------------------------------------------------
  # ○ 総重量の描画
  #--------------------------------------------------------------------------
  def draw_weight_possession(x, y)
    rect = Rect.new(x, y, contents.width - 4 - x, line_height)
    change_color(system_color)
    draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
    change_color(normal_color)
    str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
    draw_text(rect, str, 2)
  end
end

#==============================================================================
# ■ Window_Weight_Sum_Menu
#------------------------------------------------------------------------------
#  メニューウィンドウで総重量を表示するクラスです。
#==============================================================================
class Window_Weight_Sum_Menu < Window_Base
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    rect = Rect.new(0, 0, width - 28, line_height)
    change_color(system_color)
    draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
    change_color(normal_color)
    str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
    draw_text(rect, str, 2)
  end
end

#==============================================================================
# ■ Window_Weight_Sum_item
#------------------------------------------------------------------------------
#  アイテム一覧で総重量を表示するクラスです。
#==============================================================================
class Window_Weight_Sum_item < Window_ItemList
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    rect = Rect.new(0, 0, width - 28, line_height)
    change_color(system_color)
    draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
    change_color(normal_color)
    str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
    draw_text(rect, str, 2)
  end
end

#==============================================================================
# ■ Window_Weight_Sum_Shop
#------------------------------------------------------------------------------
#  ショップの売却画面で総重量を表示するクラスです。
#==============================================================================
class Window_Weight_Sum_Shop < Window_ItemList
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    rect = Rect.new(0, 0, width - 28, line_height)
    change_color(system_color)
    draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
    change_color(normal_color)
    str =  $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
    draw_text(rect, str, 2)
  end
end

#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu < Scene_MenuBase
  include MOO_GENERAL_MODULE
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_command_window
    create_gold_window
    create_status_window
    @wt_x = 0
    @wt_y = Graphics.height - @gold_window.height - weight_item_window_h
    @wt_w = weight_item_window_w
    @wt_h = @gold_window.height
    create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
  end
  #--------------------------------------------------------------------------
  # ○ 総重量ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_weight_sum_window(x, y, width, height)
    @weight_sum_window = Window_Weight_Sum_Menu.new(x, y, width, height)
    @weight_sum_window.viewport = @viewport
  end
end

#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
#  アイテム画面の処理を行うクラスです。
#==============================================================================
class Scene_Item < Scene_ItemBase
  include MOO_GENERAL_MODULE
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_help_window
    create_category_window
    create_item_window
    @wt_x = weight_item_window_x
    @wt_y = weight_item_window_y
    @wt_w = weight_item_window_w
    @wt_h = weight_item_window_h
    create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
  end
  #--------------------------------------------------------------------------
  # ○ 総重量ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_weight_sum_window(x, y, width, height)
    @weight_sum_window = Window_Weight_Sum_item.new(x, y, width, height)
    @weight_sum_window.viewport = @viewport
    @weight_sum_window.y = @help_window.height
  end
  #--------------------------------------------------------------------------
  # ● アイテムの使用
  #--------------------------------------------------------------------------
  def use_item
    super
    @item_window.redraw_current_item
    @weight_sum_window.refresh
  end
end

#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
#  ショップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Shop < Scene_MenuBase
  include MOO_GENERAL_MODULE
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_help_window
    create_gold_window
    create_command_window
    create_dummy_window
    create_category_window
    create_number_window
    create_status_window
    create_buy_window
    @wt_x = weight_item_window_x
    @wt_y = weight_item_window_y + 48
    @wt_w = weight_item_window_w
    @wt_h = weight_item_window_h
    create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
    create_sell_window
  end
  #--------------------------------------------------------------------------
  # ○ 総重量ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_weight_sum_window(x, y, width, height)
    @weight_sum_window = Window_Weight_Sum_Shop.new(x, y, width, height)
    @weight_sum_window.viewport = @viewport
    @weight_sum_window.y = @help_window.height
    @weight_sum_window.y = @dummy_window.y
    @weight_sum_window.hide.deactivate
  end
  #--------------------------------------------------------------------------
  # ● 個数入力[決定]
  #--------------------------------------------------------------------------
  def on_number_ok
    case @command_window.current_symbol
    when :buy
      do_buy(@number_window.number)
      @weight_sum_window.refresh
      @weight_sum_window.hide
    when :sell
      do_sell(@number_window.number)
      @weight_sum_window.refresh
    end
    end_number_input
    @gold_window.refresh
    @status_window.refresh
  end
  #--------------------------------------------------------------------------
  # ● 購入の実行
  #--------------------------------------------------------------------------
  def do_buy(number)
    if $game_party.gain_item_failed?(@item, number) == false
      Sound.play_buzzer
      return
    end
    Sound.play_shop
    $game_party.lose_gold(number * buying_price)
    $game_party.moo_gain_item(@item, number)
  end
  #--------------------------------------------------------------------------
  # ● 売却ウィンドウのアクティブ化
  #--------------------------------------------------------------------------
  def activate_sell_window
    @category_window.show
    @weight_sum_window.show
    @sell_window.refresh
    @sell_window.show.activate
    @status_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 購入ウィンドウのアクティブ化
  #--------------------------------------------------------------------------
  def activate_buy_window
    @buy_window.money = money
    @buy_window.show.activate
    @status_window.show
  end
  #--------------------------------------------------------------------------
  # ● コマンド[購入する]
  #--------------------------------------------------------------------------
  def command_buy
    @dummy_window.hide
    activate_buy_window
    @buy_window.select(0)
    @buy_window.refresh
  end
  #--------------------------------------------------------------------------
  # ● コマンド[売却する]
  #--------------------------------------------------------------------------
  def command_sell
    @dummy_window.hide
    @category_window.show.activate
    @weight_sum_window.show
    @sell_window.show
    @sell_window.unselect
    @sell_window.refresh
    @weight_sum_window.show
  end
  #--------------------------------------------------------------------------
  # ● カテゴリ[キャンセル]
  #--------------------------------------------------------------------------
  def on_category_cancel
    @command_window.activate
    @dummy_window.show
    @category_window.hide
    @weight_sum_window.hide
    @sell_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 売却[決定]
  #--------------------------------------------------------------------------
  def on_sell_ok
    @item = @sell_window.item
    @status_window.item = @item
    @category_window.hide
    @weight_sum_window.hide
    @sell_window.hide
    @number_window.set(@item, max_sell, selling_price, currency_unit)
    @number_window.show.activate
    @status_window.show
  end
  #--------------------------------------------------------------------------
  # ● 売却[キャンセル]
  #--------------------------------------------------------------------------
  def on_sell_cancel
    @sell_window.unselect
    @category_window.activate
    @weight_sum_window.activate
    @status_window.item = nil
    @help_window.clear
  end
  #--------------------------------------------------------------------------
  # ● 売却の実行
  #--------------------------------------------------------------------------
  def do_sell(number)
    Sound.play_shop
    $game_party.gain_gold(number * selling_price)
    $game_party.lose_item(@item, number)
  end
  #--------------------------------------------------------------------------
  # ● 売値の取得
  #--------------------------------------------------------------------------
  def selling_price
    @sell_window.price(@item)
  end
end
[/pre]
範本
moo_rgss3_weight_main.zip (1.36 MB, 下载次数: 90)
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部