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

Project1

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

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

[复制链接]

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

跳转到指定楼层
1
发表于 2014-9-5 15:02:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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):添加了直接执行代码的功能。

几张预览图:





脚本(URL请自行去掉):
RUBY 代码复制
  1. #============================================================================
  2. # 调试画面加强版(Ver 1.2)  BY : RyanBern
  3. #----------------------------------------------------------------------------
  4. # 系统自带的Scene_Debug可以用于实时调试游戏中的各种对象,数据,但是功能方面
  5. # 过于单一,因此对Scene_Debug作了很多扩充。在这里你可以更改物品/武器/防具的
  6. # 持有数,修改金钱的值,以及角色和队伍的调整。
  7. # Ver 1.1更新:增加了独立开关的更改。
  8. # Ver 1.2更新:增加了脚本直接输入的功能。(其实是在不关闭游戏的条件下利用外
  9. #              部txt文档,手懒没做Text Area)
  10. # 以后我要想到什么会陆续往上加。
  11. #----------------------------------------------------------------------------
  12. # 用法和默认调试画面的一样,在游戏测试模式下按F9可以打开调试画面。
  13. # 如果要使用脚本直接输入功能的话,先进入这个选项,然后会自动在游戏根目录下生
  14. # 成一个叫Debug.txt的文档,输入你想执行的脚本即可。这个不同于事件解释器里面
  15. # 的“脚本”命令,例如不可以用@event_id表示当前事件ID等。如果输入了有错误的
  16. # 代码,为了游戏的稳定,不使用rescue来补救,而是报错之后退出,所以请输入正确
  17. # 的代码。
  18. #----------------------------------------------------------------------------
  19. # 脚本冲突方面,可能和独立装备系统,背包系统,人物仓库系统,多货币系统冲突。
  20. # 说得简单点就是这个调试系统对游戏数据的更改是根据默认系统的方式,如果有别的
  21. # 外挂脚本更改了游戏数据结构,那么这个调试系统就会失效。
  22. #============================================================================
  23.  
  24.  
  25. #============================================================================
  26. # Game_Temp
  27. #----------------------------------------------------------------------------
  28. # 追加属性
  29. #============================================================================
  30.  
  31. class Game_Temp
  32.   attr_accessor :debug_command        # 调试画面 保存状态用
  33.   alias rb_initialize initialize
  34.   def initialize
  35.     rb_initialize
  36.     @debug_command = 0
  37.   end
  38. end
  39.  
  40.  
  41. #============================================================================
  42. # Window_DebugCommand
  43. #----------------------------------------------------------------------------
  44. # 调试画面的命令窗口(用于选取模式)
  45. #============================================================================
  46.  
  47. class Window_DebugCommand < Window_Selectable
  48.   #--------------------------------------------------------------------------
  49.   # 初始化对象
  50.   #--------------------------------------------------------------------------
  51.   def initialize
  52.     super(0, 0, 160, 320)
  53.     self.index = 0
  54.     refresh
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # 刷新
  58.   #--------------------------------------------------------------------------
  59.   def refresh
  60.     if self.contents != nil
  61.       self.contents.dispose
  62.       self.contents = nil
  63.     end
  64.     @item_max = 9
  65.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  66.     self.contents.draw_text(4, 0, 120, 32, "开关")
  67.     self.contents.draw_text(4, 32, 120, 32, "变量")
  68.     self.contents.draw_text(4, 64, 120, 32, "物品")
  69.     self.contents.draw_text(4, 96, 120, 32, "武器")
  70.     self.contents.draw_text(4, 128, 120, 32, "防具")
  71.     self.contents.draw_text(4, 160, 120, 32, "金钱")
  72.     self.contents.draw_text(4, 192, 120, 32, "角色")
  73.     self.contents.draw_text(4, 224, 120, 32, "独立开关")
  74.     self.contents.draw_text(4, 256, 120, 32, "输入代码")
  75.   end
  76. end
  77.  
  78.  
  79. #==============================================================================
  80. # ■ Window_DebugLeft
  81. #------------------------------------------------------------------------------
  82. #  调试画面、指定开关及变量块的窗口。
  83. #==============================================================================
  84.  
  85. class Window_DebugLeft < Window_Selectable
  86.   #--------------------------------------------------------------------------
  87.   # ● 初始化对像
  88.   #--------------------------------------------------------------------------
  89.   def initialize
  90.     super(160, 0, 192, 352)
  91.     self.active = false
  92.     self.index = -1
  93.     @mode = 0
  94.     @debug_actor_items = ["替换队员", "增减等级", "增减MaxHP", "增减MaxSP",
  95.       "增减力量", "增减灵巧", "增减速度", "增减魔力"]
  96.     refresh
  97.   end
  98.   def adjust_cursor
  99.     if self.index > @item_max - 1
  100.       self.index = @item_max - 1
  101.     end
  102.   end
  103.   def mode=(mode)
  104.     if @mode != mode
  105.       @mode = mode
  106.       refresh
  107.     end
  108.   end
  109.   def real_max
  110.     case @mode
  111.     when 0
  112.       return $data_system.switches.size - 1
  113.     when 1
  114.       return $data_system.variables.size - 1
  115.     when 2
  116.       return $data_items.size - 1
  117.     when 3
  118.       return $data_weapons.size - 1
  119.     when 4
  120.       return $data_armors.size - 1
  121.     when 6
  122.       return @debug_actor_items.size
  123.     when 7
  124.       return @map_info.nil? ? 1 : @map_info.keys.size
  125.     else
  126.       return 1
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 刷新
  131.   #--------------------------------------------------------------------------
  132.   def refresh
  133.     if self.contents != nil
  134.       self.contents.dispose
  135.       self.contents = nil
  136.     end
  137.     case @mode
  138.     # Switches
  139.     when 0
  140.       @item_max = ($data_system.switches.size - 1 + 9) / 10
  141.     # Variables
  142.     when 1
  143.       @item_max = ($data_system.variables.size - 1 + 9) / 10
  144.     # Items
  145.     when 2
  146.       @item_max = ($data_items.size - 1 + 9) / 10
  147.     # Weapons
  148.     when 3
  149.       @item_max = ($data_weapons.size - 1 + 9) / 10
  150.     # Armors
  151.     when 4
  152.       @item_max = ($data_armors.size - 1 + 9) / 10
  153.     # Actors
  154.     when 6
  155.       @item_max = @debug_actor_items.size
  156.     # SelfSwitches
  157.     when 7
  158.       if @map_info.nil?
  159.         @map_info = load_data("Data/MapInfos.rxdata")
  160.         @map_id_array = @map_info.keys.sort
  161.       end
  162.       @item_max = @map_info.keys.size
  163.     else
  164.       @item_max = 1
  165.     end
  166.     case @mode
  167.     when 5
  168.       self.contents = Bitmap.new(width - 32, 32)
  169.       self.contents.draw_text(4, 0, width - 36, 32, "点击修改金钱")
  170.     when 6
  171.       self.contents = Bitmap.new(width - 32, @item_max * 32)
  172.       @debug_actor_items.each_with_index do |item, i|
  173.         self.contents.draw_text(4, i*32, width - 36, 32, item)
  174.       end
  175.     when 7
  176.       self.contents = Bitmap.new(width - 32, @item_max * 32)
  177.       @map_id_array.each_with_index do |id, i|
  178.         name = @map_info[id].name
  179.         text = sprintf("%03d:%s", id, name)
  180.         self.contents.draw_text(4, i*32, width - 36, 32, text)
  181.       end
  182.     when 8
  183.       self.contents = Bitmap.new(width - 32, 32)
  184.       self.contents.draw_text(4, 0, width - 36, 32, "点击执行代码")
  185.     else
  186.       self.contents = Bitmap.new(width - 32, @item_max * 32)
  187.       (0...@item_max).each do |i|
  188.         text = sprintf("%s [%04d-%04d]", ["S","V","I","W","A"][@mode], i*10+1, [i*10+10,real_max].min)
  189.         self.contents.draw_text(4, i*32, width - 36, 32, text)
  190.       end
  191.     end
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 获取模式
  195.   #--------------------------------------------------------------------------
  196.   def mode
  197.     @mode
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 获取开头显示的 ID
  201.   #--------------------------------------------------------------------------
  202.   def top_id
  203.     return self.index * 10 + 1
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # 获取地图 ID (在模式为7[独立开关]的情况下有效)
  207.   #--------------------------------------------------------------------------
  208.   def map_id
  209.     return @mode == 7 ? @map_id_array[self.index] : 0
  210.   end
  211. end
  212.  
  213.  
  214. #==============================================================================
  215. # ■ Window_DebugRight
  216. #------------------------------------------------------------------------------
  217. #  调试画面、个别显示开关及变量的窗口。
  218. #==============================================================================
  219.  
  220. class Window_DebugRight < Window_Selectable
  221.   #--------------------------------------------------------------------------
  222.   # ● 定义实例变量
  223.   #--------------------------------------------------------------------------
  224.   attr_reader   :mode                     # 模式
  225.   attr_reader   :sub_mode                 # 子模式(角色用)
  226.   attr_reader   :top_id                   # 开头显示的 ID
  227.   #--------------------------------------------------------------------------
  228.   # ● 初始化对像
  229.   #--------------------------------------------------------------------------
  230.   def initialize
  231.     super(160+192, 0, 448-160, 352)
  232.     self.index = -1
  233.     self.active = false
  234.     @item_max = 10
  235.     @mode = 0
  236.     @sub_mode = -1
  237.     @map_id = 0
  238.     @map = nil
  239.     @top_id = 1
  240.     refresh
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # 获取实际显示最大项目数
  244.   # (这个方法是为了解决越界BUG)
  245.   #--------------------------------------------------------------------------
  246.   def real_max
  247.     case @mode
  248.     when 0
  249.       return $data_system.switches.size - 1
  250.     when 1
  251.       return $data_system.variables.size - 1
  252.     when 2
  253.       return $data_items.size - 1
  254.     when 3
  255.       return $data_weapons.size - 1
  256.     when 4
  257.       return $data_armors.size - 1
  258.     when 6
  259.       return $data_actors.size - 1
  260.     when 7
  261.       return @map.nil? ? 1 : 4 * @map.events.keys.size
  262.     when 8
  263.       return 3
  264.     else
  265.       return 1
  266.     end
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # 模式为7[独立开关]的条件下,获取当前开关的主键
  270.   #--------------------------------------------------------------------------
  271.   def key
  272.     return [] if @mode != 7 || @item_max == 0
  273.     event_id = @event_id_array[self.index / 4]
  274.     tag = ['A', 'B', 'C', 'D'][self.index % 4]
  275.     return [@map_id, event_id, tag]
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 刷新
  279.   #--------------------------------------------------------------------------
  280.   def refresh(need_reload_map = false)
  281.     if self.contents != nil
  282.       self.contents.dispose
  283.       self.contents = nil
  284.     end
  285.     if @mode == 7
  286.       if @map.nil? || need_reload_map
  287.         @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  288.         @event_id_array = @map.events.keys.sort
  289.       end
  290.     end
  291.     @item_max = [6,7,8].include?(@mode) ? real_max : [1 + real_max - @top_id, 10].min
  292.     return if @item_max == 0
  293.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  294.     (0...@item_max).each do |i|
  295.       case @mode
  296.       when 0
  297.         name = $data_system.switches[@top_id+i]
  298.         status = $game_switches[@top_id+i] ? "[ON]" : "[OFF]"
  299.       when 1
  300.         name = $data_system.variables[@top_id+i]
  301.         status = $game_variables[@top_id+i].to_s
  302.       when 2
  303.         name = $data_items[@top_id+i].name
  304.         status = $game_party.item_number(@top_id+i).to_s
  305.       when 3
  306.         name = $data_weapons[@top_id+i].name
  307.         status = $game_party.weapon_number(@top_id+i).to_s
  308.       when 4
  309.         name = $data_armors[@top_id+i].name
  310.         status = $game_party.armor_number(@top_id+i).to_s
  311.       when 5
  312.         name = "金钱"
  313.         status = $game_party.gold.to_s
  314.       when 6
  315.         actor = $game_actors[i+1]
  316.         name = actor.name
  317.         case @sub_mode
  318.         when 0
  319.           status = $game_party.actors.include?(actor) ? "[IN]" : "[OUT]"
  320.         when 1
  321.           status = actor.level.to_s
  322.         when 2
  323.           status = actor.maxhp.to_s
  324.         when 3
  325.           status = actor.maxsp.to_s
  326.         when 4
  327.           status = actor.str.to_s
  328.         when 5
  329.           status = actor.dex.to_s
  330.         when 6
  331.           status = actor.agi.to_s
  332.         when 7
  333.           status = actor.int.to_s
  334.         else
  335.           status = ""
  336.         end
  337.       when 7
  338.         event_id = @event_id_array[i/4]
  339.         event = @map.events[event_id]
  340.         tag = ['A', 'B', 'C', 'D'][i%4]
  341.         name = event.name + " : " + tag
  342.         status = $game_self_switches[[@map_id, event_id, tag]] ? "[ON]" : "[OFF]"
  343.       else
  344.         name = ''
  345.         status = ''
  346.       end
  347.       if name == nil
  348.         name = ''
  349.       end
  350.       if @mode == 5
  351.         self.contents.draw_text(4, 0, width - 36, 32, name)
  352.         self.contents.draw_text(0 ,0, width - 32, 32, status, 2)
  353.         return
  354.       end
  355.       if @mode == 8
  356.         texts = []
  357.         texts[0] = "在游戏根目录下的"
  358.         texts[1] = "Debug.txt文件内键入"
  359.         texts[2] = "代码,点击确认键执行"
  360.         texts.each_with_index do |s, i|
  361.           self.contents.draw_text(4, 32 * i, width - 36, 32, s)
  362.         end
  363.         return
  364.       end
  365.       if @mode == 7
  366.         self.contents.draw_text(4, i * 32, 204, 32, name)
  367.         self.contents.draw_text(208, i * 32, 48, 32, status, 2)
  368.         next
  369.       end
  370.       id_text = sprintf("%04d:", @mode == 6 ? 1+i : @top_id+i)
  371.       self.contents.draw_text(4, i * 32, 60, 32, id_text)
  372.       self.contents.draw_text(60, i * 32, 148, 32, name)
  373.       self.contents.draw_text(208, i * 32, 48, 32, status, 2)
  374.     end
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # 设置子模式(在主模式为6[角色]的时候有效)
  378.   #   sub_mode : 新的子模式
  379.   #--------------------------------------------------------------------------
  380.   def sub_mode=(sub_mode)
  381.     if @sub_mode != sub_mode
  382.       @sub_mode = sub_mode
  383.       refresh
  384.     end
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # 设置要显示的地图(在主模式为7[独立开关]的时候有效)
  388.   #   map_id : 新的地图 ID
  389.   #--------------------------------------------------------------------------
  390.   def map_id=(map_id)
  391.     if @map_id != (map_id)
  392.       @map_id = map_id
  393.       refresh(true)
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 设置模式
  398.   #     mode : 新的模式
  399.   #--------------------------------------------------------------------------
  400.   def mode=(mode)
  401.     if @mode != mode
  402.       @mode = mode
  403.       refresh if @mode != 7
  404.     end
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● 设置开头显示的 ID
  408.   #     id : 新的 ID
  409.   #--------------------------------------------------------------------------
  410.   def top_id=(id)
  411.     if @top_id != id
  412.       @top_id = id
  413.       refresh
  414.     end
  415.   end
  416. end
  417.  
  418.  
  419. #==============================================================================
  420. # ■ Scene_Debug
  421. #------------------------------------------------------------------------------
  422. #  处理调试画面的类。
  423. #==============================================================================
  424.  
  425. class Scene_Debug
  426.   #--------------------------------------------------------------------------
  427.   # ● 主处理
  428.   #--------------------------------------------------------------------------
  429.   def main
  430.     # 生成窗口
  431.     @command_window = Window_DebugCommand.new
  432.     @left_window = Window_DebugLeft.new
  433.     @right_window = Window_DebugRight.new
  434.     @help_window = Window_Base.new(160, 352, 480, 128)
  435.     @help_window.contents = Bitmap.new(448, 96)
  436.     # 还原为上次选择的项目
  437.     @command_window.index = $game_temp.debug_command
  438.     @left_window.top_row = $game_temp.debug_top_row
  439.     @left_window.index = $game_temp.debug_index
  440.     @right_window.mode = @left_window.mode = @command_window.index
  441.     @right_window.top_id = @left_window.top_id
  442.     # 连按计数
  443.     @press_count = 0
  444.     # 执行过渡
  445.     Graphics.transition
  446.     # 主循环
  447.     loop do
  448.       # 刷新游戏画面
  449.       Graphics.update
  450.       # 刷新输入情报
  451.       Input.update
  452.       # 刷新画面
  453.       update
  454.       # 如果画面被切换的话就中断循环
  455.       if $scene != self
  456.         break
  457.       end
  458.     end
  459.     # 刷新地图
  460.     $game_map.refresh
  461.     # 装备过渡
  462.     Graphics.freeze
  463.     # 释放窗口
  464.     @command_window.dispose
  465.     @left_window.dispose
  466.     @right_window.dispose
  467.     @help_window.dispose
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 刷新画面
  471.   #--------------------------------------------------------------------------
  472.   def update
  473.     # 刷新窗口
  474.     @right_window.mode = @left_window.mode = @command_window.index
  475.     @right_window.sub_mode = @left_window.index if @left_window.mode == 6
  476.     if @left_window.mode == 7
  477.       @right_window.map_id = @left_window.map_id
  478.     else
  479.       @right_window.map_id = 0
  480.     end
  481.     @right_window.top_id = @left_window.top_id
  482.     @command_window.update
  483.     @left_window.update
  484.     @right_window.update
  485.     # 记忆选择中的项目
  486.     $game_temp.debug_command = @command_window.index
  487.     $game_temp.debug_top_row = @left_window.top_row
  488.     $game_temp.debug_index = @left_window.index
  489.     if @command_window.active
  490.       update_command
  491.       return
  492.     end
  493.     # 左侧窗口被激活的情况下: 调用 update_left
  494.     if @left_window.active
  495.       update_left
  496.       return
  497.     end
  498.     # 右侧窗口被激活的情况下: 调用 update_right
  499.     if @right_window.active
  500.       update_right
  501.       return
  502.     end
  503.   end
  504.   def update_command
  505.     @left_window.adjust_cursor
  506.     # 按下 B 键的情况下
  507.     if Input.trigger?(Input::B)
  508.       # 演奏取消 SE
  509.       $game_system.se_play($data_system.cancel_se)
  510.       # 切换到地图画面
  511.       $scene = Scene_Map.new
  512.       return
  513.     end
  514.     if Input.trigger?(Input::C)
  515.       $game_system.se_play($data_system.decision_se)
  516.       @command_window.active = false
  517.       @left_window.active = true
  518.       # 模式为8[执行代码]的情况下,不存在调试文件的,新建之
  519.       if @command_window.index == 8
  520.         text = "C (Enter) : Execute Code"
  521.         @help_window.contents.draw_text(4, 0, 406, 32, text)
  522.         unless FileTest.exist?("Debug.txt")
  523.           file = File.open("Debug.txt", "w")
  524.           file.close
  525.         end
  526.       end
  527.       return
  528.     end
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● 刷新画面 (左侧窗口被激活的情况下)
  532.   #--------------------------------------------------------------------------
  533.   def update_left
  534.     # 按下 B 键的情况下
  535.     if Input.trigger?(Input::B)
  536.       # 演奏取消 SE
  537.       $game_system.se_play($data_system.cancel_se)
  538.       @command_window.active = true
  539.       @left_window.active = false
  540.       @help_window.contents.clear
  541.       return
  542.     end
  543.     # 按下 C 键的情况下
  544.     if Input.trigger?(Input::C)
  545.       # 演奏确定 SE
  546.       $game_system.se_play($data_system.decision_se)
  547.       # 显示帮助
  548.       if @left_window.mode == 0 || @left_window.mode == 7
  549.         text1 = "C (Enter) : ON / OFF"
  550.         @help_window.contents.draw_text(4, 0, 406, 32, text1)
  551.       elsif @left_window.mode == 5
  552.         text1 = "← : -100  → : +100  ↑ : +1000  ↓ : -1000"
  553.         text2 = "L (Pageup) : -10000"
  554.         text3 = "R (Pagedown) : +10000"
  555.         @help_window.contents.draw_text(4, 0, 406, 32, text1)
  556.         @help_window.contents.draw_text(4, 32, 406, 32, text2)
  557.         @help_window.contents.draw_text(4, 64, 406, 32, text3)
  558.       elsif @left_window.mode == 6
  559.         case @right_window.sub_mode
  560.         when 0
  561.           text1 = "C (Enter) : IN / OUT"
  562.         when 1
  563.           text1 = "← : -1   → : +1"
  564.         when 2..3
  565.           text1 = "← : -10   → : +10"
  566.         when 4..7
  567.           text1 = "← : -5   → : +5"
  568.         end
  569.         @help_window.contents.draw_text(4, 0, 406, 32, text1)
  570.       elsif @left_window.mode != 8
  571.         text1 = "← : -1   → : +1"
  572.         text2 = "L (Pageup) : -10"
  573.         text3 = "R (Pagedown) : +10"
  574.         @help_window.contents.draw_text(4, 0, 406, 32, text1)
  575.         @help_window.contents.draw_text(4, 32, 406, 32, text2)
  576.         @help_window.contents.draw_text(4, 64, 406, 32, text3)
  577.       end
  578.       # 模式为8[执行代码]的情况下,直接执行
  579.       if @left_window.mode == 8
  580.         execute_code
  581.         return
  582.       end
  583.       # 激活右侧窗口
  584.       @left_window.active = false
  585.       @right_window.active = true
  586.       @right_window.index = 0
  587.       return
  588.     end
  589.   end
  590.   #--------------------------------------------------------------------------
  591.   # ● 刷新画面 (右侧窗口被激活的情况下)
  592.   #--------------------------------------------------------------------------
  593.   def update_right
  594.     # 按下 B 键的情况下
  595.     if Input.trigger?(Input::B)
  596.       # 演奏取消 SE
  597.       $game_system.se_play($data_system.cancel_se)
  598.       # 激活左侧窗口
  599.       @left_window.active = true
  600.       @right_window.active = false
  601.       @right_window.index = -1
  602.       # 删除帮助
  603.       @help_window.contents.clear
  604.       return
  605.     end
  606.     # 获取被选择的开关 / 变量的 ID
  607.     current_id = @right_window.top_id + @right_window.index
  608.     case @right_window.mode
  609.     # 开关的情况下
  610.     when 0
  611.       # 按下 C 键的情况下
  612.       if Input.trigger?(Input::C)
  613.         # 演奏确定 SE
  614.         $game_system.se_play($data_system.decision_se)
  615.         # 逆转 ON / OFF 状态
  616.         $game_switches[current_id] = (not $game_switches[current_id])
  617.         @right_window.refresh
  618.         return
  619.       end
  620.     # 变量的情况下
  621.     when 1
  622.       # 按下右键的情况下
  623.       if Input.repeat?(Input::RIGHT)
  624.         # 演奏光标 SE
  625.         $game_system.se_play($data_system.cursor_se)
  626.         # 变量加 1
  627.         $game_variables[current_id] += 1
  628.         # 检查上限
  629.         if $game_variables[current_id] > 99999999
  630.           $game_variables[current_id] = 99999999
  631.         end
  632.         @right_window.refresh
  633.         return
  634.       end
  635.       # 按下左键的情况下
  636.       if Input.repeat?(Input::LEFT)
  637.         # 演奏光标 SE
  638.         $game_system.se_play($data_system.cursor_se)
  639.         # 变量减 1
  640.         $game_variables[current_id] -= 1
  641.         # 检查下限
  642.         if $game_variables[current_id] < -99999999
  643.           $game_variables[current_id] = -99999999
  644.         end
  645.         @right_window.refresh
  646.         return
  647.       end
  648.       # 按下 R 键的情况下
  649.       if Input.repeat?(Input::R)
  650.         # 演奏光标 SE
  651.         $game_system.se_play($data_system.cursor_se)
  652.         # 变量加 10
  653.         $game_variables[current_id] += 10
  654.         # 检查上限
  655.         if $game_variables[current_id] > 99999999
  656.           $game_variables[current_id] = 99999999
  657.         end
  658.         @right_window.refresh
  659.         return
  660.       end
  661.       # 按下 L 键的情况下
  662.       if Input.repeat?(Input::L)
  663.         # 演奏光标 SE
  664.         $game_system.se_play($data_system.cursor_se)
  665.         # 变量减 10
  666.         $game_variables[current_id] -= 10
  667.         # 检查下限
  668.         if $game_variables[current_id] < -99999999
  669.           $game_variables[current_id] = -99999999
  670.         end
  671.         @right_window.refresh
  672.         return
  673.       end
  674.     # 物品的情况下
  675.     when 2
  676.       # 按下右键的情况下
  677.       if Input.repeat?(Input::RIGHT)
  678.         # 演奏光标 SE
  679.         $game_system.se_play($data_system.cursor_se)
  680.         # 物品数加 1
  681.         $game_party.gain_item(current_id, 1)
  682.         @right_window.refresh
  683.         return
  684.       end
  685.       # 按下左键的情况下
  686.       if Input.repeat?(Input::LEFT)
  687.         # 演奏光标 SE
  688.         $game_system.se_play($data_system.cursor_se)
  689.         # 物品数减 1
  690.         $game_party.lose_item(current_id, 1)
  691.         @right_window.refresh
  692.         return
  693.       end
  694.       # 按下 R 键的情况下
  695.       if Input.repeat?(Input::R)
  696.         # 演奏光标 SE
  697.         $game_system.se_play($data_system.cursor_se)
  698.         # 物品数加 10
  699.         $game_party.gain_item(current_id, 10)
  700.         @right_window.refresh
  701.         return
  702.       end
  703.       # 按下 L 键的情况下
  704.       if Input.repeat?(Input::L)
  705.         # 演奏光标 SE
  706.         $game_system.se_play($data_system.cursor_se)
  707.         # 物品数减 10
  708.         $game_party.lose_item(current_id, 10)
  709.         @right_window.refresh
  710.         return
  711.       end
  712.     # 武器的情况下
  713.     when 3
  714.       # 按下右键的情况下
  715.       if Input.repeat?(Input::RIGHT)
  716.         # 演奏光标 SE
  717.         $game_system.se_play($data_system.cursor_se)
  718.         # 武器数加 1
  719.         $game_party.gain_weapon(current_id, 1)
  720.         @right_window.refresh
  721.         return
  722.       end
  723.       # 按下左键的情况下
  724.       if Input.repeat?(Input::LEFT)
  725.         # 演奏光标 SE
  726.         $game_system.se_play($data_system.cursor_se)
  727.         # 武器数减 1
  728.         $game_party.lose_weapon(current_id, 1)
  729.         @right_window.refresh
  730.         return
  731.       end
  732.       # 按下 R 键的情况下
  733.       if Input.repeat?(Input::R)
  734.         # 演奏光标 SE
  735.         $game_system.se_play($data_system.cursor_se)
  736.         # 武器数加 10
  737.         $game_party.gain_weapon(current_id, 10)
  738.         @right_window.refresh
  739.         return
  740.       end
  741.       # 按下 L 键的情况下
  742.       if Input.repeat?(Input::L)
  743.         # 演奏光标 SE
  744.         $game_system.se_play($data_system.cursor_se)
  745.         # 武器数减 10
  746.         $game_party.lose_weapon(current_id, 10)
  747.         @right_window.refresh
  748.         return
  749.       end
  750.     # 防具的情况下
  751.     when 4
  752.       # 按下右键的情况下
  753.       if Input.repeat?(Input::RIGHT)
  754.         # 演奏光标 SE
  755.         $game_system.se_play($data_system.cursor_se)
  756.         # 防具数加 1
  757.         $game_party.gain_armor(current_id, 1)
  758.         @right_window.refresh
  759.         return
  760.       end
  761.       # 按下左键的情况下
  762.       if Input.repeat?(Input::LEFT)
  763.         # 演奏光标 SE
  764.         $game_system.se_play($data_system.cursor_se)
  765.         # 防具数减 1
  766.         $game_party.lose_armor(current_id, 1)
  767.         @right_window.refresh
  768.         return
  769.       end
  770.       # 按下 R 键的情况下
  771.       if Input.repeat?(Input::R)
  772.         # 演奏光标 SE
  773.         $game_system.se_play($data_system.cursor_se)
  774.         # 防具数加 10
  775.         $game_party.gain_armor(current_id, 10)
  776.         @right_window.refresh
  777.         return
  778.       end
  779.       # 按下 L 键的情况下
  780.       if Input.repeat?(Input::L)
  781.         # 演奏光标 SE
  782.         $game_system.se_play($data_system.cursor_se)
  783.         # 防具数减 10
  784.         $game_party.lose_armor(current_id, 10)
  785.         @right_window.refresh
  786.         return
  787.       end
  788.     # 金钱的情况下
  789.     when 5
  790.       # 按下右键的情况下
  791.       if Input.repeat?(Input::RIGHT)
  792.         # 演奏光标 SE
  793.         $game_system.se_play($data_system.cursor_se)
  794.         # 金钱数加 100
  795.         $game_party.gain_gold(100)
  796.         @right_window.refresh
  797.         return
  798.       end
  799.       # 按下左键的情况下
  800.       if Input.repeat?(Input::LEFT)
  801.         # 演奏光标 SE
  802.         $game_system.se_play($data_system.cursor_se)
  803.         # 金钱数减 100
  804.         $game_party.lose_gold(100)
  805.         @right_window.refresh
  806.         return
  807.       end
  808.       if Input.repeat?(Input::UP)
  809.         $game_system.se_play($data_system.cursor_se)
  810.         $game_party.gain_gold(1000)
  811.         @right_window.refresh
  812.         return
  813.       end
  814.       if Input.repeat?(Input::DOWN)
  815.         $game_system.se_play($data_system.cursor_se)
  816.         $game_party.lose_gold(1000)
  817.         @right_window.refresh
  818.         return
  819.       end
  820.       # 按下 R 键的情况下
  821.       if Input.repeat?(Input::R)
  822.         # 演奏光标 SE
  823.         $game_system.se_play($data_system.cursor_se)
  824.         # 金钱数加 10000
  825.         $game_party.gain_gold(10000)
  826.         @right_window.refresh
  827.         return
  828.       end
  829.       # 按下 L 键的情况下
  830.       if Input.repeat?(Input::L)
  831.         # 演奏光标 SE
  832.         $game_system.se_play($data_system.cursor_se)
  833.         # 防具数减 10
  834.         $game_party.lose_gold(10000)
  835.         @right_window.refresh
  836.         return
  837.       end
  838.     # 角色的情况下
  839.     when 6
  840.       update_debug_actor
  841.     # 独立开关的情况下
  842.     when 7
  843.       # 按下 C 键的情况下
  844.       if Input.trigger?(Input::C)
  845.         # 获取信息
  846.         key = @right_window.key
  847.         # 无效的情况下
  848.         if key == []
  849.           $game_system.se_play($data_system.buzzer_se)
  850.           return
  851.         end
  852.         # 演奏确定 SE
  853.         $game_system.se_play($data_system.decision_se)
  854.         # 逆转 ON / OFF 状态
  855.         $game_self_switches[key] ^= true
  856.         @right_window.refresh
  857.         return
  858.       end
  859.     end
  860.   end
  861.   def update_debug_actor
  862.     # 连按计数(只对左右键有效,这个是为了处理变化过慢的问题)
  863.     if Input.press?(Input::LEFT) || Input.press?(Input::RIGHT)
  864.       @press_count += 1
  865.     else
  866.       @press_count = 0
  867.     end
  868.     actor = $game_actors[@right_window.index+1]
  869.     if Input.trigger?(Input::C)
  870.       if @right_window.sub_mode == 0
  871.         $game_system.se_play($data_system.decision_se)
  872.         if $game_party.actors.include?(actor)
  873.           $game_party.remove_actor(actor.id)
  874.         else
  875.           $game_party.add_actor(actor.id)
  876.         end
  877.       end
  878.       return
  879.     end
  880.     if Input.repeat?(Input::LEFT) && @right_window.sub_mode > 0
  881.       if @press_count <= 80
  882.         rate = 1
  883.       end
  884.       if @press_count > 80 && @press_count <=200
  885.         rate = 5
  886.       end
  887.       if @press_count > 200
  888.         rate = 10
  889.       end
  890.       $game_system.se_play($data_system.cursor_se)
  891.       case @right_window.sub_mode
  892.       when 1
  893.         actor.level -= 1 * rate
  894.       when 2
  895.         actor.maxhp -= 10 * rate
  896.       when 3
  897.         actor.maxsp -= 10 * rate
  898.       when 4
  899.         actor.str -= 5 * rate
  900.       when 5
  901.         actor.dex -= 5 * rate
  902.       when 6
  903.         actor.agi -= 5 * rate
  904.       when 7
  905.         actor.int -= 5 * rate
  906.       end
  907.       return
  908.     end
  909.     if Input.repeat?(Input::RIGHT) && @right_window.sub_mode > 0
  910.       if @press_count <= 80
  911.         rate = 1
  912.       end
  913.       if @press_count > 80 && @press_count <=200
  914.         rate = 5
  915.       end
  916.       if @press_count > 200
  917.         rate = 10
  918.       end
  919.       $game_system.se_play($data_system.cursor_se)
  920.       case @right_window.sub_mode
  921.       when 1
  922.         actor.level += 1 * rate
  923.       when 2
  924.         actor.maxhp += 10 * rate
  925.       when 3
  926.         actor.maxsp += 10 * rate
  927.       when 4
  928.         actor.str += 5 * rate
  929.       when 5
  930.         actor.dex += 5 * rate
  931.       when 6
  932.         actor.agi += 5 * rate
  933.       when 7
  934.         actor.int += 5 * rate
  935.       end
  936.       return
  937.     end
  938.     @right_window.refresh
  939.   end
  940.   def execute_code
  941.     if FileTest.exist?("Debug.txt")
  942.       file = File.open("Debug.txt", "r")
  943.       str = file.read
  944.       eval(str)
  945.       file.close
  946.       print "代码执行完毕!"
  947.     else
  948.       print '找不到文件"Debug.txt"'
  949.     end
  950.   end
  951. end

评分

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

查看全部评分

Lv1.梦旅人

石油鸡

梦石
0
星屑
179
在线时间
287 小时
注册时间
2014-1-27
帖子
232
2
发表于 2014-9-5 16:43:31 | 只看该作者
好东西 顶一个{:2_285:}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
3
发表于 2014-9-5 17:58:19 | 只看该作者
修改装备参数,按键加速之类的
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2253
在线时间
1374 小时
注册时间
2011-2-10
帖子
602

开拓者

4
发表于 2014-9-5 18:48:20 | 只看该作者
效果不错
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
200 小时
注册时间
2014-7-17
帖子
410
5
发表于 2014-9-5 18:52:44 | 只看该作者
记得XAS附带了一个非常强力的Scene_Debug加强,作者似乎是……

知其然,而不欲知其所以然,耻也!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

开拓者

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

点评

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

评分

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

查看全部评分


  -fk: -azogi:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

点评

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

评分

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

查看全部评分


知其然,而不欲知其所以然,耻也!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

开拓者

8
发表于 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:
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

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

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

使用道具 举报

头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

10
发表于 2014-9-12 10:05:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 18:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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