幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2941|回复: 4

[菜单界面] 商店错误 解决

[复制链接]

2

主题

8

帖子

159

积分

③业余

积分
159
发表于 2010-12-4 11:57:34 | 显示全部楼层 |阅读模式
前天开始玩rpgmaker,碰到vx商店执行错误,网上找了好多帖子,都不行。有的说下载正确的脚本就可以了,找了n久找不到……

好容易热情来了,脚本仿照rmxp重新写了,问题解决了,不让我传附件!!!

三四百行的代码让我直接贴么?
回复

使用道具 举报

2

主题

8

帖子

159

积分

③业余

积分
159
 楼主| 发表于 2010-12-4 11:59:42 | 显示全部楼层
贴就贴,看着不烦就行。
这是SCene_Shop的脚本

#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
#  处理商店画面的类。
#==============================================================================

class Scene_Shop
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成帮助窗口
    @help_window = Window_Help.new
    # 生成指令窗口
    @command_window = Window_ShopCommand.new
    # 生成金钱窗口
    @gold_window = Window_Gold.new(400,56)
    #@gold_window.x = 480
    #@gold_window.y = 64
    # 生成时间窗口
    @dummy_window = Window_Base.new(0,112,544,352)
    # 生成购买窗口
    @buy_window = Window_ShopBuy.new(0,112)
    @buy_window.active = false
    @buy_window.visible = false
    @buy_window.help_window = @help_window
    # 生成卖出窗口
    @sell_window = Window_ShopSell.new(0, 112, 544, 304)
    @sell_window.active = false
    @sell_window.visible = false
    @sell_window.help_window = @help_window
    # 生成数量输入窗口
    @number_window = Window_ShopNumber.new(0,112)
    @number_window.active = false
    @number_window.visible = false
    # 生成状态窗口
    @status_window = Window_ShopStatus.new(300,112)
    @status_window.visible = false
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @help_window.dispose
    @command_window.dispose
    @gold_window.dispose
    @dummy_window.dispose
    @buy_window.dispose
    @sell_window.dispose
    @number_window.dispose
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @help_window.update
    @command_window.update
    @gold_window.update
    @dummy_window.update
    @buy_window.update
    @sell_window.update
    @number_window.update
    @status_window.update
    # 指令窗口激活的情况下: 调用 update_command
    if @command_window.active
      update_command
      return
    end
    # 购买窗口激活的情况下: 调用 update_buy
    if @buy_window.active
      update_buy
      return
    end
    # 卖出窗口激活的情况下: 调用 update_sell
    if @sell_window.active
      update_sell
      return
    end
    # 个数输入窗口激活的情况下: 调用 update_number
    if @number_window.active
      update_number
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (指令窗口激活的情况下)
  #--------------------------------------------------------------------------
  def update_command
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      Sound.play_cancel
      # 切换到地图画面
      $scene = Scene_Map.new
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口光标位置分支
      case @command_window.index
      when 0  # 购买
        # 演奏确定 SE
        Sound.play_decision
        # 窗口状态转向购买模式
        @command_window.active = false
        @dummy_window.visible = false
        @buy_window.active = true
        @buy_window.visible = true
        @buy_window.refresh
        @status_window.visible = true
      when 1  # 卖出
        # 演奏确定 SE
        Sound.play_decision
        # 窗口状态转向卖出模式
        @command_window.active = false
        @dummy_window.visible = false
        @sell_window.active = true
        @sell_window.visible = true
        @sell_window.refresh
      when 2  # 取消
        # 演奏确定 SE
        Sound.play_decision
        # 切换到地图画面
        $scene = Scene_Map.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (购买窗口激活的情况下)
  #--------------------------------------------------------------------------
  def update_buy
    # 设置状态窗口的物品
    @status_window.item = @buy_window.item
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      Sound.play_cancel
      # 窗口状态转向初期模式
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      # 删除帮助文本
      @help_window.set_text("")
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取物品
      @item = @buy_window.item
      # 物品无效的情况下、或者价格在所持金以上的情况下
      if @item == nil or @item.price > $game_party.gold
        # 演奏冻结 SE
        Sound.play_buzzer
        return
      end
      # 获取物品所持数
      number = $game_party.item_number(@item)
      # 如果已经拥有了 99 个情况下
      if number == 99
        # 演奏冻结 SE
        Sound.play_buzzer
        return
      end
      # 演奏确定 SE
      Sound.play_decision
      # 计算可以最多购买的数量
      max = @item.price == 0 ? 99 : $game_party.gold / @item.price
      max = [max, 99 - number].min
      # 窗口状态转向数值输入模式
      @buy_window.active = false
      @buy_window.visible = false
      @number_window.set(@item, max, @item.price)
      @number_window.active = true
      @number_window.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 画面更新 (卖出窗口激活的情况下)
  #--------------------------------------------------------------------------
  def update_sell
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      Sound.play_cancel
      # 窗口状态转向初期模式
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      # 删除帮助文本
      @help_window.set_text("")
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取物品
      @item = @sell_window.item
      # 设置状态窗口的物品
      @status_window.item = @item
      # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
      if @item == nil or @item.price == 0
        # 演奏冻结 SE
        Sound.play_buzzer
        return
      end
      # 演奏确定 SE
      Sound.play_decision
      # 获取物品的所持数
      number = $game_party.item_number(@item)
      # 最大卖出个数 = 物品的所持数
      max = number
      # 窗口状态转向个数输入模式
      @sell_window.active = false
      @sell_window.visible = false
      @number_window.set(@item, max, @item.price / 2)
      @number_window.active = true
      @number_window.visible = true
      @status_window.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (个数输入窗口激活的情况下)
  #--------------------------------------------------------------------------
  def update_number
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      Sound.play_cancel
      # 设置个数输入窗口为不活动·非可视状态
      @number_window.active = false
      @number_window.visible = false
      # 命令窗口光标位置分支
      case @command_window.index
      when 0  # 购买
        # 窗口状态转向购买模式
        @buy_window.active = true
        @buy_window.visible = true
      when 1  # 卖出
        # 窗口状态转向卖出模式
        @sell_window.active = true
        @sell_window.visible = true
        @status_window.visible = false
      end
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏商店 SE
      Sound.play_shop
      # 设置个数输入窗口为不活动·非可视状态
      @number_window.active = false
      @number_window.visible = false
      # 命令窗口光标位置分支
      case @command_window.index
      when 0  # 购买
        # 购买处理
        $game_party.lose_gold(@number_window.number * @item.price)
        $game_party.gain_item(@item, @number_window.number)
        # 刷新各窗口
        @gold_window.refresh
        @buy_window.refresh
        @status_window.refresh
        # 窗口状态转向购买模式
        @buy_window.active = true
        @buy_window.visible = true
      when 1  # 卖出
        # 卖出处理
        $game_party.gain_gold(@number_window.number * (@item.price / 2))
        $game_party.lose_item(@item, @number_window.number)
        # 刷新各窗口
        @gold_window.refresh
        @sell_window.refresh
        @status_window.refresh
        # 窗口状态转向卖出模式
        @sell_window.active = true
        @sell_window.visible = true
        @status_window.visible = false
      end
      return
    end
  end
end
回复 支持 反对

使用道具 举报

2

主题

8

帖子

159

积分

③业余

积分
159
 楼主| 发表于 2010-12-4 12:00:31 | 显示全部楼层
这是Window_ShopCommand的脚本

#==============================================================================
# ■ Window_ShopCommand
#------------------------------------------------------------------------------
#  商店画面、选择要做的事的窗口
#==============================================================================

class Window_ShopCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 56, 400, 56)
    self.contents = Bitmap.new(width - 32, height - 24)
    @item_max = 3
    @column_max = 3
    @commands = ["买", "卖", "取消"]
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 描绘项目
  #     index : 项目编号
  #--------------------------------------------------------------------------
  def draw_item(index)
    x = 6 + index * 130
    self.contents.draw_text(x, 0,100 , 24, @commands[index])
  end
end
回复 支持 反对

使用道具 举报

2

主题

8

帖子

159

积分

③业余

积分
159
 楼主| 发表于 2010-12-4 12:02:18 | 显示全部楼层
上面两个脚本搞进去,就可以解决商店问题了。但不美观,因为涉及其他脚本的一些细微参数,
本来都改好了打包了,readme都写了,不让传……
回复 支持 反对

使用道具 举报

2

主题

8

帖子

159

积分

③业余

积分
159
 楼主| 发表于 2010-12-4 12:03:02 | 显示全部楼层
个人原创,转载请注明作者sadleader及出处
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-20 07:13 , Processed in 0.018165 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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