查看: 9195|回复: 17

[原创发布] 【原创】Scene_Debug加强版(Ver1.2)

[复制链接]
梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-9-5 15:02:39 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 RyanBern 于 2014-12-12 17:32 编辑

不知道有没有人发过类似的。系统自带的Scene_Debug的修改范围十分有限,仅仅是限制在开关/变量的操作上。而这个加强过的Scene_Debug可以实时修改更多的游戏对象,方便测试者对游戏进行测试。原理都是简单的,就是实现比较麻烦。

有什么BUG或者更好的建议希望大家能向我提出。
更新记录:
Ver 1.1(2014.9.6): 添加了修改独立开关的功能。
Ver 1.1(2014.9.7): 修复地图没有事件时出现的BUG
Ver 1.2(2014.9.11):添加了直接执行代码的功能。

几张预览图:
1.png
2.png
3.png
4.png

脚本(URL请自行去掉):
[pre lang="Ruby"]#============================================================================
# 调试画面加强版(Ver 1.2)  BY : RyanBern
#----------------------------------------------------------------------------
# 系统自带的Scene_Debug可以用于实时调试游戏中的各种对象,数据,但是功能方面
# 过于单一,因此对Scene_Debug作了很多扩充。在这里你可以更改物品/武器/防具的
# 持有数,修改金钱的值,以及角色和队伍的调整。
# Ver 1.1更新:增加了独立开关的更改。
# Ver 1.2更新:增加了脚本直接输入的功能。(其实是在不关闭游戏的条件下利用外
#              部txt文档,手懒没做Text Area)
# 以后我要想到什么会陆续往上加。
#----------------------------------------------------------------------------
# 用法和默认调试画面的一样,在游戏测试模式下按F9可以打开调试画面。
# 如果要使用脚本直接输入功能的话,先进入这个选项,然后会自动在游戏根目录下生
# 成一个叫Debug.txt的文档,输入你想执行的脚本即可。这个不同于事件解释器里面
# 的“脚本”命令,例如不可以用@event_id表示当前事件ID等。如果输入了有错误的
# 代码,为了游戏的稳定,不使用rescue来补救,而是报错之后退出,所以请输入正确
# 的代码。
#----------------------------------------------------------------------------
# 脚本冲突方面,可能和独立装备系统,背包系统,人物仓库系统,多货币系统冲突。
# 说得简单点就是这个调试系统对游戏数据的更改是根据默认系统的方式,如果有别的
# 外挂脚本更改了游戏数据结构,那么这个调试系统就会失效。
#============================================================================


#============================================================================
# Game_Temp
#----------------------------------------------------------------------------
# 追加属性
#============================================================================

class Game_Temp
  attr_accessor :debug_command        # 调试画面 保存状态用
  alias rb_initialize initialize
  def initialize
    rb_initialize
    @debug_command = 0
  end
end


#============================================================================
# Window_DebugCommand
#----------------------------------------------------------------------------
# 调试画面的命令窗口(用于选取模式)
#============================================================================

class Window_DebugCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 160, 320)
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # 刷新
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @item_max = 9
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    self.contents.draw_text(4, 0, 120, 32, "开关")
    self.contents.draw_text(4, 32, 120, 32, "变量")
    self.contents.draw_text(4, 64, 120, 32, "物品")
    self.contents.draw_text(4, 96, 120, 32, "武器")
    self.contents.draw_text(4, 128, 120, 32, "防具")
    self.contents.draw_text(4, 160, 120, 32, "金钱")
    self.contents.draw_text(4, 192, 120, 32, "角色")
    self.contents.draw_text(4, 224, 120, 32, "独立开关")
    self.contents.draw_text(4, 256, 120, 32, "输入代码")
  end
end


#==============================================================================
# ■ Window_DebugLeft
#------------------------------------------------------------------------------
#  调试画面、指定开关及变量块的窗口。
#==============================================================================

class Window_DebugLeft < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(160, 0, 192, 352)
    self.active = false
    self.index = -1
    @mode = 0
    @debug_actor_items = ["替换队员", "增减等级", "增减MaxHP", "增减MaxSP",
      "增减力量", "增减灵巧", "增减速度", "增减魔力"]
    refresh
  end
  def adjust_cursor
    if self.index > @item_max - 1
      self.index = @item_max - 1
    end
  end
  def mode=(mode)
    if @mode != mode
      @mode = mode
      refresh
    end
  end
  def real_max
    case @mode
    when 0
      return $data_system.switches.size - 1
    when 1
      return $data_system.variables.size - 1
    when 2
      return $data_items.size - 1
    when 3
      return $data_weapons.size - 1
    when 4
      return $data_armors.size - 1
    when 6
      return @debug_actor_items.size
    when 7
      return @map_info.nil? ? 1 : @map_info.keys.size
    else
      return 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    case @mode
    # Switches
    when 0
      @item_max = ($data_system.switches.size - 1 + 9) / 10
    # Variables
    when 1
      @item_max = ($data_system.variables.size - 1 + 9) / 10
    # Items
    when 2
      @item_max = ($data_items.size - 1 + 9) / 10
    # Weapons
    when 3
      @item_max = ($data_weapons.size - 1 + 9) / 10
    # Armors
    when 4
      @item_max = ($data_armors.size - 1 + 9) / 10
    # Actors
    when 6
      @item_max = @debug_actor_items.size
    # SelfSwitches
    when 7
      if @map_info.nil?
        @map_info = load_data("Data/MapInfos.rxdata")
        @map_id_array = @map_info.keys.sort
      end
      @item_max = @map_info.keys.size
    else
      @item_max = 1
    end
    case @mode
    when 5
      self.contents = Bitmap.new(width - 32, 32)
      self.contents.draw_text(4, 0, width - 36, 32, "点击修改金钱")
    when 6
      self.contents = Bitmap.new(width - 32, @item_max * 32)
      @debug_actor_items.each_with_index do |item, i|
        self.contents.draw_text(4, i*32, width - 36, 32, item)
      end
    when 7
      self.contents = Bitmap.new(width - 32, @item_max * 32)
      @map_id_array.each_with_index do |id, i|
        name = @map_info[id].name
        text = sprintf("%03d:%s", id, name)
        self.contents.draw_text(4, i*32, width - 36, 32, text)
      end
    when 8
      self.contents = Bitmap.new(width - 32, 32)
      self.contents.draw_text(4, 0, width - 36, 32, "点击执行代码")
    else
      self.contents = Bitmap.new(width - 32, @item_max * 32)
      (0...@item_max).each do |i|
        text = sprintf("%s [%04d-%04d]", ["S","V","I","W","A"][@mode], i*10+1, [i*10+10,real_max].min)
        self.contents.draw_text(4, i*32, width - 36, 32, text)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取模式
  #--------------------------------------------------------------------------
  def mode
    @mode
  end
  #--------------------------------------------------------------------------
  # ● 获取开头显示的 ID
  #--------------------------------------------------------------------------
  def top_id
    return self.index * 10 + 1
  end
  #--------------------------------------------------------------------------
  # 获取地图 ID (在模式为7[独立开关]的情况下有效)
  #--------------------------------------------------------------------------
  def map_id
    return @mode == 7 ? @map_id_array[self.index] : 0
  end
end


#==============================================================================
# ■ Window_DebugRight
#------------------------------------------------------------------------------
#  调试画面、个别显示开关及变量的窗口。
#==============================================================================

class Window_DebugRight < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :mode                     # 模式
  attr_reader   :sub_mode                 # 子模式(角色用)
  attr_reader   :top_id                   # 开头显示的 ID
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(160+192, 0, 448-160, 352)
    self.index = -1
    self.active = false
    @item_max = 10
    @mode = 0
    @sub_mode = -1
    @map_id = 0
    @map = nil
    @top_id = 1
    refresh
  end
  #--------------------------------------------------------------------------
  # 获取实际显示最大项目数
  # (这个方法是为了解决越界BUG)
  #--------------------------------------------------------------------------
  def real_max
    case @mode
    when 0
      return $data_system.switches.size - 1
    when 1
      return $data_system.variables.size - 1
    when 2
      return $data_items.size - 1
    when 3
      return $data_weapons.size - 1
    when 4
      return $data_armors.size - 1
    when 6
      return $data_actors.size - 1
    when 7
      return @map.nil? ? 1 : 4 * @map.events.keys.size
    when 8
      return 3
    else
      return 1
    end
  end
  #--------------------------------------------------------------------------
  # 模式为7[独立开关]的条件下,获取当前开关的主键
  #--------------------------------------------------------------------------
  def key
    return [] if @mode != 7 || @item_max == 0
    event_id = @event_id_array[self.index / 4]
    tag = ['A', 'B', 'C', 'D'][self.index % 4]
    return [@map_id, event_id, tag]
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh(need_reload_map = false)
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    if @mode == 7
      if @map.nil? || need_reload_map
        @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
        @event_id_array = @map.events.keys.sort
      end
    end
    @item_max = [6,7,8].include?(@mode) ? real_max : [1 + real_max - @top_id, 10].min
    return if @item_max == 0
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    (0...@item_max).each do |i|
      case @mode
      when 0
        name = $data_system.switches[@top_id+i]
        status = $game_switches[@top_id+i] ? "[ON]" : "[OFF]"
      when 1
        name = $data_system.variables[@top_id+i]
        status = $game_variables[@top_id+i].to_s
      when 2
        name = $data_items[@top_id+i].name
        status = $game_party.item_number(@top_id+i).to_s
      when 3
        name = $data_weapons[@top_id+i].name
        status = $game_party.weapon_number(@top_id+i).to_s
      when 4
        name = $data_armors[@top_id+i].name
        status = $game_party.armor_number(@top_id+i).to_s
      when 5
        name = "金钱"
        status = $game_party.gold.to_s
      when 6
        actor = $game_actors[i+1]
        name = actor.name
        case @sub_mode
        when 0
          status = $game_party.actors.include?(actor) ? "[IN]" : "[OUT]"
        when 1
          status = actor.level.to_s
        when 2
          status = actor.maxhp.to_s
        when 3
          status = actor.maxsp.to_s
        when 4
          status = actor.str.to_s
        when 5
          status = actor.dex.to_s
        when 6
          status = actor.agi.to_s
        when 7
          status = actor.int.to_s
        else
          status = ""
        end
      when 7
        event_id = @event_id_array[i/4]
        event = @map.events[event_id]
        tag = ['A', 'B', 'C', 'D'][i%4]
        name = event.name + " : " + tag
        status = $game_self_switches[[@map_id, event_id, tag]] ? "[ON]" : "[OFF]"
      else
        name = ''
        status = ''
      end
      if name == nil
        name = ''
      end
      if @mode == 5
        self.contents.draw_text(4, 0, width - 36, 32, name)
        self.contents.draw_text(0 ,0, width - 32, 32, status, 2)
        return
      end
      if @mode == 8
        texts = []
        texts[0] = "在游戏根目录下的"
        texts[1] = "Debug.txt文件内键入"
        texts[2] = "代码,点击确认键执行"
        texts.each_with_index do |s, i|
          self.contents.draw_text(4, 32 * i, width - 36, 32, s)
        end
        return
      end
      if @mode == 7
        self.contents.draw_text(4, i * 32, 204, 32, name)
        self.contents.draw_text(208, i * 32, 48, 32, status, 2)
        next
      end
      id_text = sprintf("%04d:", @mode == 6 ? 1+i : @top_id+i)
      self.contents.draw_text(4, i * 32, 60, 32, id_text)
      self.contents.draw_text(60, i * 32, 148, 32, name)
      self.contents.draw_text(208, i * 32, 48, 32, status, 2)
    end
  end
  #--------------------------------------------------------------------------
  # 设置子模式(在主模式为6[角色]的时候有效)
  #   sub_mode : 新的子模式
  #--------------------------------------------------------------------------
  def sub_mode=(sub_mode)
    if @sub_mode != sub_mode
      @sub_mode = sub_mode
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # 设置要显示的地图(在主模式为7[独立开关]的时候有效)
  #   map_id : 新的地图 ID
  #--------------------------------------------------------------------------
  def map_id=(map_id)
    if @map_id != (map_id)
      @map_id = map_id
      refresh(true)
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置模式
  #     mode : 新的模式
  #--------------------------------------------------------------------------
  def mode=(mode)
    if @mode != mode
      @mode = mode
      refresh if @mode != 7
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置开头显示的 ID
  #     id : 新的 ID
  #--------------------------------------------------------------------------
  def top_id=(id)
    if @top_id != id
      @top_id = id
      refresh
    end
  end
end


#==============================================================================
# ■ Scene_Debug
#------------------------------------------------------------------------------
#  处理调试画面的类。
#==============================================================================

class Scene_Debug
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成窗口
    @command_window = Window_DebugCommand.new
    @left_window = Window_DebugLeft.new
    @right_window = Window_DebugRight.new
    @help_window = Window_Base.new(160, 352, 480, 128)
    @help_window.contents = Bitmap.new(448, 96)
    # 还原为上次选择的项目
    @command_window.index = $game_temp.debug_command
    @left_window.top_row = $game_temp.debug_top_row
    @left_window.index = $game_temp.debug_index
    @right_window.mode = @left_window.mode = @command_window.index
    @right_window.top_id = @left_window.top_id
    # 连按计数
    @press_count = 0
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入情报
      Input.update
      # 刷新画面
      update
      # 如果画面被切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 刷新地图
    $game_map.refresh
    # 装备过渡
    Graphics.freeze
    # 释放窗口
    @command_window.dispose
    @left_window.dispose
    @right_window.dispose
    @help_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @right_window.mode = @left_window.mode = @command_window.index
    @right_window.sub_mode = @left_window.index if @left_window.mode == 6
    if @left_window.mode == 7
      @right_window.map_id = @left_window.map_id
    else
      @right_window.map_id = 0
    end
    @right_window.top_id = @left_window.top_id
    @command_window.update
    @left_window.update
    @right_window.update
    # 记忆选择中的项目
    $game_temp.debug_command = @command_window.index
    $game_temp.debug_top_row = @left_window.top_row
    $game_temp.debug_index = @left_window.index
    if @command_window.active
      update_command
      return
    end
    # 左侧窗口被激活的情况下: 调用 update_left
    if @left_window.active
      update_left
      return
    end
    # 右侧窗口被激活的情况下: 调用 update_right
    if @right_window.active
      update_right
      return
    end
  end
  def update_command
    @left_window.adjust_cursor
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到地图画面
      $scene = Scene_Map.new
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @command_window.active = false
      @left_window.active = true
      # 模式为8[执行代码]的情况下,不存在调试文件的,新建之
      if @command_window.index == 8
        text = "C (Enter) : Execute Code"
        @help_window.contents.draw_text(4, 0, 406, 32, text)
        unless FileTest.exist?("Debug.txt")
          file = File.open("Debug.txt", "w")
          file.close
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (左侧窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_left
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @left_window.active = false
      @help_window.contents.clear
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 显示帮助
      if @left_window.mode == 0 || @left_window.mode == 7
        text1 = "C (Enter) : ON / OFF"
        @help_window.contents.draw_text(4, 0, 406, 32, text1)
      elsif @left_window.mode == 5
        text1 = "← : -100  → : +100  ↑ : +1000  ↓ : -1000"
        text2 = "L (Pageup) : -10000"
        text3 = "R (Pagedown) : +10000"
        @help_window.contents.draw_text(4, 0, 406, 32, text1)
        @help_window.contents.draw_text(4, 32, 406, 32, text2)
        @help_window.contents.draw_text(4, 64, 406, 32, text3)
      elsif @left_window.mode == 6
        case @right_window.sub_mode
        when 0
          text1 = "C (Enter) : IN / OUT"
        when 1
          text1 = "← : -1   → : +1"
        when 2..3
          text1 = "← : -10   → : +10"
        when 4..7
          text1 = "← : -5   → : +5"
        end
        @help_window.contents.draw_text(4, 0, 406, 32, text1)
      elsif @left_window.mode != 8
        text1 = "← : -1   → : +1"
        text2 = "L (Pageup) : -10"
        text3 = "R (Pagedown) : +10"
        @help_window.contents.draw_text(4, 0, 406, 32, text1)
        @help_window.contents.draw_text(4, 32, 406, 32, text2)
        @help_window.contents.draw_text(4, 64, 406, 32, text3)
      end
      # 模式为8[执行代码]的情况下,直接执行
      if @left_window.mode == 8
        execute_code
        return
      end
      # 激活右侧窗口
      @left_window.active = false
      @right_window.active = true
      @right_window.index = 0
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (右侧窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_right
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 激活左侧窗口
      @left_window.active = true
      @right_window.active = false
      @right_window.index = -1
      # 删除帮助
      @help_window.contents.clear
      return
    end
    # 获取被选择的开关 / 变量的 ID
    current_id = @right_window.top_id + @right_window.index
    case @right_window.mode
    # 开关的情况下
    when 0
      # 按下 C 键的情况下
      if Input.trigger?(Input::C)
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 逆转 ON / OFF 状态
        $game_switches[current_id] = (not $game_switches[current_id])
        @right_window.refresh
        return
      end
    # 变量的情况下
    when 1
      # 按下右键的情况下
      if Input.repeat?(Input::RIGHT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 变量加 1
        $game_variables[current_id] += 1
        # 检查上限
        if $game_variables[current_id] > 99999999
          $game_variables[current_id] = 99999999
        end
        @right_window.refresh
        return
      end
      # 按下左键的情况下
      if Input.repeat?(Input::LEFT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 变量减 1
        $game_variables[current_id] -= 1
        # 检查下限
        if $game_variables[current_id] < -99999999
          $game_variables[current_id] = -99999999
        end
        @right_window.refresh
        return
      end
      # 按下 R 键的情况下
      if Input.repeat?(Input::R)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 变量加 10
        $game_variables[current_id] += 10
        # 检查上限
        if $game_variables[current_id] > 99999999
          $game_variables[current_id] = 99999999
        end
        @right_window.refresh
        return
      end
      # 按下 L 键的情况下
      if Input.repeat?(Input::L)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 变量减 10
        $game_variables[current_id] -= 10
        # 检查下限
        if $game_variables[current_id] < -99999999
          $game_variables[current_id] = -99999999
        end
        @right_window.refresh
        return
      end
    # 物品的情况下
    when 2
      # 按下右键的情况下
      if Input.repeat?(Input::RIGHT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 物品数加 1
        $game_party.gain_item(current_id, 1)
        @right_window.refresh
        return
      end
      # 按下左键的情况下
      if Input.repeat?(Input::LEFT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 物品数减 1
        $game_party.lose_item(current_id, 1)
        @right_window.refresh
        return
      end
      # 按下 R 键的情况下
      if Input.repeat?(Input::R)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 物品数加 10
        $game_party.gain_item(current_id, 10)
        @right_window.refresh
        return
      end
      # 按下 L 键的情况下
      if Input.repeat?(Input::L)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 物品数减 10
        $game_party.lose_item(current_id, 10)
        @right_window.refresh
        return
      end
    # 武器的情况下
    when 3
      # 按下右键的情况下
      if Input.repeat?(Input::RIGHT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 武器数加 1
        $game_party.gain_weapon(current_id, 1)
        @right_window.refresh
        return
      end
      # 按下左键的情况下
      if Input.repeat?(Input::LEFT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 武器数减 1
        $game_party.lose_weapon(current_id, 1)
        @right_window.refresh
        return
      end
      # 按下 R 键的情况下
      if Input.repeat?(Input::R)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 武器数加 10
        $game_party.gain_weapon(current_id, 10)
        @right_window.refresh
        return
      end
      # 按下 L 键的情况下
      if Input.repeat?(Input::L)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 武器数减 10
        $game_party.lose_weapon(current_id, 10)
        @right_window.refresh
        return
      end
    # 防具的情况下
    when 4
      # 按下右键的情况下
      if Input.repeat?(Input::RIGHT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 防具数加 1
        $game_party.gain_armor(current_id, 1)
        @right_window.refresh
        return
      end
      # 按下左键的情况下
      if Input.repeat?(Input::LEFT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 防具数减 1
        $game_party.lose_armor(current_id, 1)
        @right_window.refresh
        return
      end
      # 按下 R 键的情况下
      if Input.repeat?(Input::R)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 防具数加 10
        $game_party.gain_armor(current_id, 10)
        @right_window.refresh
        return
      end
      # 按下 L 键的情况下
      if Input.repeat?(Input::L)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 防具数减 10
        $game_party.lose_armor(current_id, 10)
        @right_window.refresh
        return
      end
    # 金钱的情况下
    when 5
      # 按下右键的情况下
      if Input.repeat?(Input::RIGHT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 金钱数加 100
        $game_party.gain_gold(100)
        @right_window.refresh
        return
      end
      # 按下左键的情况下
      if Input.repeat?(Input::LEFT)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 金钱数减 100
        $game_party.lose_gold(100)
        @right_window.refresh
        return
      end
      if Input.repeat?(Input::UP)
        $game_system.se_play($data_system.cursor_se)
        $game_party.gain_gold(1000)
        @right_window.refresh
        return
      end
      if Input.repeat?(Input::DOWN)
        $game_system.se_play($data_system.cursor_se)
        $game_party.lose_gold(1000)
        @right_window.refresh
        return
      end
      # 按下 R 键的情况下
      if Input.repeat?(Input::R)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 金钱数加 10000
        $game_party.gain_gold(10000)
        @right_window.refresh
        return
      end
      # 按下 L 键的情况下
      if Input.repeat?(Input::L)
        # 演奏光标 SE
        $game_system.se_play($data_system.cursor_se)
        # 防具数减 10
        $game_party.lose_gold(10000)
        @right_window.refresh
        return
      end
    # 角色的情况下
    when 6
      update_debug_actor
    # 独立开关的情况下
    when 7
      # 按下 C 键的情况下
      if Input.trigger?(Input::C)
        # 获取信息
        key = @right_window.key
        # 无效的情况下
        if key == []
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 逆转 ON / OFF 状态
        $game_self_switches[key] ^= true
        @right_window.refresh
        return
      end
    end
  end
  def update_debug_actor
    # 连按计数(只对左右键有效,这个是为了处理变化过慢的问题)
    if Input.press?(Input::LEFT) || Input.press?(Input::RIGHT)
      @press_count += 1
    else
      @press_count = 0
    end
    actor = $game_actors[@right_window.index+1]
    if Input.trigger?(Input::C)
      if @right_window.sub_mode == 0
        $game_system.se_play($data_system.decision_se)
        if $game_party.actors.include?(actor)
          $game_party.remove_actor(actor.id)
        else
          $game_party.add_actor(actor.id)
        end
      end
      return
    end
    if Input.repeat?(Input::LEFT) && @right_window.sub_mode > 0
      if @press_count <= 80
        rate = 1
      end
      if @press_count > 80 && @press_count <=200
        rate = 5
      end
      if @press_count > 200
        rate = 10
      end
      $game_system.se_play($data_system.cursor_se)
      case @right_window.sub_mode
      when 1
        actor.level -= 1 * rate
      when 2
        actor.maxhp -= 10 * rate
      when 3
        actor.maxsp -= 10 * rate
      when 4
        actor.str -= 5 * rate
      when 5
        actor.dex -= 5 * rate
      when 6
        actor.agi -= 5 * rate
      when 7
        actor.int -= 5 * rate
      end
      return
    end
    if Input.repeat?(Input::RIGHT) && @right_window.sub_mode > 0
      if @press_count <= 80
        rate = 1
      end
      if @press_count > 80 && @press_count <=200
        rate = 5
      end
      if @press_count > 200
        rate = 10
      end
      $game_system.se_play($data_system.cursor_se)
      case @right_window.sub_mode
      when 1
        actor.level += 1 * rate
      when 2
        actor.maxhp += 10 * rate
      when 3
        actor.maxsp += 10 * rate
      when 4
        actor.str += 5 * rate
      when 5
        actor.dex += 5 * rate
      when 6
        actor.agi += 5 * rate
      when 7
        actor.int += 5 * rate
      end
      return
    end
    @right_window.refresh
  end
  def execute_code
    if FileTest.exist?("Debug.txt")
      file = File.open("Debug.txt", "r")
      str = file.read
      eval(str)
      file.close
      print "代码执行完毕!"
    else
      print '找不到文件"Debug.txt"'
    end
  end
end
[/pre]

评分

参与人数 1星屑 +775 梦石 +1 收起 理由
怪蜀黍 + 775 + 1 发布奖励!debug的神器~

查看全部评分

石油鸡

梦石
0
星屑
179
在线时间
287 小时
注册时间
2014-1-27
回帖
211
发表于 2014-9-5 16:43:31 | 显示全部楼层
好东西 顶一个{:2_285:}
唉
回复

使用道具 举报

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
回帖
1484
发表于 2014-9-5 17:58:19 | 显示全部楼层
修改装备参数,按键加速之类的
回复

使用道具 举报

梦石
0
星屑
2283
在线时间
1376 小时
注册时间
2011-2-10
回帖
565

开拓者

发表于 2014-9-5 18:48:20 | 显示全部楼层
效果不错
回复

使用道具 举报

梦石
0
星屑
49
在线时间
200 小时
注册时间
2014-7-17
回帖
372
发表于 2014-9-5 18:52:44 | 显示全部楼层
记得XAS附带了一个非常强力的Scene_Debug加强,作者似乎是……

知其然,而不欲知其所以然,耻也!
回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2014-9-7 21:04:37 | 显示全部楼层
版主大好腻害!
以及用新建的空白地图测试独立开关时RGSSError了
好想帮忙可是不知道怎么帮

点评

别闹~相关BUG已修复。  发表于 2014-9-7 22:03

评分

参与人数 1星屑 +66 收起 理由
RyanBern + 66 抓虫奖励

查看全部评分


  -fk: -azogi:
回复

使用道具 举报

梦石
0
星屑
49
在线时间
200 小时
注册时间
2014-7-17
回帖
372
发表于 2014-9-7 21:10:10 | 显示全部楼层
能否新增一个功能,使制作者可以直接输入脚本然后执行?

点评

新功能已经增加,原理是利用外部txt文件。  发表于 2014-9-11 21:32
想法很好,如果有了你说的功能,那前面所有的东西都可以不要了,命令啥的都用一句脚本搞定就好,问题是我太菜写不出这样的东西啊(实际是懒  发表于 2014-9-7 22:06

评分

参与人数 1星屑 +66 收起 理由
RyanBern + 66 采纳建议

查看全部评分


知其然,而不欲知其所以然,耻也!
回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2014-9-7 22:19:48 | 显示全部楼层
直接输入脚本运行
  1. open("1.txt", "w") {|f| f.write 'puts "于此键入代码"' }
  2. system("notepad 1.txt")
  3. eval(File.read("1.txt").gsub(/\A\xEF\xBB\xBF/, ""))
复制代码
注: xp中没有后台运行脚本或者Thread.new{loop{sleep 9}}的话10秒后会脚本已备分

点评

嗯 自制一个吧,不过我还是嫌麻烦了,没做  发表于 2014-9-7 22:30
↓ RM的输入框(TypeField)好像只能输入一行的说, 不过我也不太懂不晓得怎么多行输入  发表于 2014-9-7 22:29
我的想法是引入全键盘脚本->新建可输入文字的窗口->用eval来执行字符串代码。总之,有了这个功能前面的东西都可以扔掉。  发表于 2014-9-7 22:25

  -fk: -azogi:
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

 楼主| 发表于 2014-9-11 21:36:29 | 显示全部楼层
kuerlulu 发表于 2014-9-7 22:19
直接输入脚本运行注: xp中没有后台运行脚本或者Thread.new{loop{sleep 9}}的话10秒后会脚本已备分 ...

已经放弃了Text Area的想法,准备利用外部文件帮忙了。
为了游戏的稳定性方面,如果输入错误的代码,那么是会报错的,而不是利用rescue来补救。因为有些错误rescue无法捕捉,而且如果代码的中间有错,那么前面正确的还是会被执行到。
有没有更好的处理方法?
回复

使用道具 举报

头像被屏蔽
梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
回帖
1577

开拓者

发表于 2014-9-12 10:05:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部