Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP/VX] Debug Eval : Nuevo Scene_Debug

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP/VX] Debug Eval : Nuevo Scene_Debug

Mensaje por Wecoc el 2013-09-10, 17:05

¿Estáis cansados del penoso Scene_Debug de siempre y queréis uno un poco más personalizado para poder testear más a fondo vuestro proyecto?

Pues yo hice uno donde puedes escribir un eval y te lo hace :D

Pegadlo encima de main y testead con F9 como siempre.
Además puse tres atajos, uno a variables (var), uno a interruptores (stch) y otro para poder ir al debug tal y como era antes (debug)

Código:
#==============================================================================
# [XP/VX] Debug Eval (Scene_Debug Edit) v1.0
#------------------------------------------------------------------------------
# By: Wecoc
#------------------------------------------------------------------------------
# Please do not judge me for this, I'm really not that crazy.
#==============================================================================


#==============================================================================
# ** Modules configuration
#==============================================================================

# EVAL_HELP ) Shortcuts [ Add as many as you want ]

module EVAL_HELP
  def var
    return $game_variables
  end
 
  def stch
    return $game_switches
  end
 
  def debug
    $scene = Scene_Debug.new
  end
 
  def help
    print EVAL_HELP.instance_methods.join("\n")
  end
end

# EVAL_FEATURES ) VX Compatibility

$debug_eval_vx = defined?(Game_Interpreter)

module EVAL_FEATURES # VX compatibility
  WIDTH =  $debug_eval_vx ? 544 : 640
  HEIGHT = $debug_eval_vx ? 416 : 480
 
  def play_cursor
    if $debug_eval_vx
      Sound.play_cursor
    else
      $game_system.se_play($data_system.cursor_se)
    end
  end
  def play_decision
    if $debug_eval_vx
      Sound.play_decision
    else
      $game_system.se_play($data_system.decision_se)
    end
  end
  def play_cancel
    if $debug_eval_vx
      Sound.play_cancel
    else
      $game_system.se_play($data_system.cancel_se)
    end
  end
  def play_buzzer
    if $debug_eval_vx
      Sound.play_buzzer
    else
      $game_system.se_play($data_system.buzzer_se)
    end
  end
end

# WecocInput ) Keyboard Features

module WecocInput
  Teclas = {
  # index => [ key, mayúsculas, minúsculas, shift, AltGr]
  1 =>  [0x01, "", ""], # Click L
  2 =>  [0x02, "", ""], # Click R
  3 =>  [0x04, "", ""], # Click M
  4 =>  [0x08, "", ""], # Back
  5 =>  [0x09, " ", " "], # Tab
  6 =>  [0x0C, "", ""], # Bloq Numpad 5
  7 =>  [0x0D, "", ""], # Enter
  8 =>  [0x11, "", ""], # Ctrl (0xA2 + 0x11)
  9 =>  [0x12, "", ""], # Alt
  10 =>  [0x13, "", ""], # Pause
  11 =>  [0x14, "", ""], # Cap Lock
  12 =>  [0x1B, "", ""], # Esc
  13 =>  [0x20, " ", " "], # Backspace
  14 =>  [0x21, "", ""], # Next Page
  15 =>  [0x22, "", ""], # Prev Page
  16 =>  [0x23, "", ""], # End
  17 =>  [0x24, "", ""], # Start
  18 =>  [0x25, "", ""], # Left arrow
  19 =>  [0x26, "", ""], # Up arrow
  20 =>  [0x27, "", ""], # Right arrow
  21 =>  [0x28, "", ""], # Down arrow
  22 =>  [0x2C, "", ""], # Print Screen
  23 =>  [0x2D, "", ""], # Insert
  24 =>  [0x2E, "", ""], # Del
  25 =>  [0x30, "0", "0", "=", "="],
  26 =>  [0x31, "1", "1", "!", "|"],
  27 =>  [0x32, "2", "2", '"', "@"],
  28 =>  [0x33, "3", "3", "·", '#'],
  29 =>  [0x34, "4", "4", "$", "~"],
  30 =>  [0x35, "5", "5", "%"],
  31 =>  [0x36, "6", "6", "&", "¬"],
  32 =>  [0x37, "7", "7", "/"],
  33 =>  [0x38, "8", "8", "("],
  34 =>  [0x39, "9", "9", ")"],
  35 =>  [0x41, "A", "a", true],
  36 =>  [0x42, "B", "b", true],
  37 =>  [0x43, "C", "c", true],
  38 =>  [0x44, "D", "d", true],
  39 =>  [0x45, "E", "e", true],
  40 =>  [0x46, "F", "f", true],
  41 =>  [0x47, "G", "g", true],
  42 =>  [0x48, "H", "h", true],
  43 =>  [0x49, "I", "i", true],
  44 =>  [0x4A, "J", "j", true],
  45 =>  [0x4B, "K", "k", true],
  46 =>  [0x4C, "L", "l", true],
  47 =>  [0x4D, "M", "m", true],
  48 =>  [0x4E, "N", "n", true],
  49 =>  [0x4F, "O", "o", true],
  50 =>  [0x50, "P", "p", true],
  51 =>  [0x51, "Q", "q", true],
  52 =>  [0x52, "R", "r", true],
  53 =>  [0x53, "S", "s", true],
  54 =>  [0x54, "T", "t", true],
  55 =>  [0x55, "U", "u", true],
  56 =>  [0x56, "V", "v", true],
  57 =>  [0x57, "W", "w", true],
  58 =>  [0x58, "X", "x", true],
  59 =>  [0x59, "Y", "y", true],
  60 =>  [0x5A, "Z", "z", true],
  61 =>  [0x5B, "", ""], # Windows
  62 =>  [0x5C, "", ""], # R-Windows
  63 =>  [0x5D, "", ""], # Scroll Fix
  64 =>  [0x60, "0", "0"], # Numpad
  65 =>  [0x61, "1", "1"], # Numpad
  66 =>  [0x62, "2", "2"], # Numpad
  67 =>  [0x63, "3", "3"], # Numpad
  68 =>  [0x64, "4", "4"], # Numpad
  69 =>  [0x65, "5", "5"], # Numpad
  70 =>  [0x66, "6", "6"], # Numpad
  71 =>  [0x67, "7", "7"], # Numpad
  72 =>  [0x68, "8", "8"], # Numpad
  73 =>  [0x69, "9", "9"], # Numpad
  74 =>  [0x6A, "*", "*"], # Numpad
  75 =>  [0x6B, "+", "+"], # Numpad
  76 =>  [0x6C, "", ""],  # Numpad
  77 =>  [0x6D, "-", "-"], # Numpad
  78 =>  [0x6E, ".", "."], # Numpad
  79 =>  [0x6F, "/", "/"], # Numpad
  80 =>  [0x70, "", ""], # F1
  81 =>  [0x71, "", ""], # F2
  82 =>  [0x72, "", ""], # F3
  83 =>  [0x73, "", ""], # F4
  84 =>  [0x74, "", ""], # F5
  85 =>  [0x75, "", ""], # F6
  86 =>  [0x76, "", ""], # F7
  87 =>  [0x77, "", ""], # F8
  88 =>  [0x78, "", ""], # F9
  89 =>  [0x79, "", ""], # F10
  90 =>  [0x7A, "", ""], # F11
  91 =>  [0x7B, "", ""], # F12
  92 =>  [0x90, "", ""], # BloqNum
  93 =>  [0x91, "", ""], # BloqDespl
  94 =>  [0xA0, "", ""], # Shift
  95 =>  [0xA1, "", ""], # R-Shift
  96 =>  [0xA2, "", ""], # Ctrl (0xA2 + 0x11)
  97 =>  [0xA3, "", ""], # R-Ctrl
  98 =>  [0xA4, "", ""], # Alt
  99 =>  [0xA5, "", ""], # R-Alt
  100 => [0xBA, "`", "`", "^", "["],
  101 => [0xBB, "+", "+", "*", "]"],
  102 => [0xBC, ",", ",", ";"],
  103 => [0xBD, "-", "-","_"],
  104 => [0xBE, ".", ".", ":"],
# 105 => [0xBF, "Ç", "ç", true, "}"],
  105 => [0xBF, "}", "}", true, "}"],
# 106 => [0xC0, "Ñ", "ñ", true],
  107 => [0xDB, "'", "'", "?"],
# 108 => [0xDC, "º", "º", "ª", 92.chr], # \
  108 => [0xDC, 92.chr, 92.chr, 92.chr, 92.chr], # \
# 109 => [0xDD, "¡", "¡", "¿"],
# 110 => [0xDE, "´", "´", "¨", "{"],
  111 => [0xE2, "<", "<", ">"]
  }
 
  Keyboard_Acces = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
 
 def self.get_key(key)
    Keyboard_Acces.call(key) & 0x01 == 1
  end
end


#==============================================================================
# ** Window_Eval
#==============================================================================

class Window_Eval < Window_Base
 
  include EVAL_FEATURES
  include EVAL_HELP
 
  attr_accessor :text
  attr_accessor :down
  attr_accessor :cursor
 
  def initialize
    super(0, 0, WIDTH, HEIGHT-64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.color = normal_color
    self.contents.font.name = "Courier New"
    self.contents.font.size = 18
    self.contents.font.bold = true
    $falcao_apply = false
    $testing = true
    @text = ""
    @cursor = [0, 0]
    @lines = 0
    @caps_lock = 2
    @shift = false
    @altgr = false
    @down = -1
    refresh
  end
 
  def refresh
    self.contents.clear
    draw_back
    draw_eval
    draw_cursor
  end
 
  def draw_back
    rect0 = Rect.new(10, 10, WIDTH-32-20, HEIGHT-64-32-20)
    rect1 = Rect.new(10, 10, WIDTH-32-20, 2)
    rect2 = Rect.new(10, HEIGHT-64-32-20+8, WIDTH-32-20, 2)
    rect3 = Rect.new(10, 10, 2, HEIGHT-64-32-20)
    rect4 = Rect.new(WIDTH-32-20+8, 10, 2, HEIGHT-64-32-20)
   
    self.contents.fill_rect(rect0, Color.new(8,8,8,160))
    self.contents.fill_rect(rect1, Color.new(200,200,200,255))
    self.contents.fill_rect(rect2, Color.new(200,200,200,255))
    self.contents.fill_rect(rect3, Color.new(200,200,200,255))
    self.contents.fill_rect(rect4, Color.new(200,200,200,255))
    self.contents.font.color = normal_color
  end
 
  def draw_eval
    for i in WecocInput::Teclas.values
      if WecocInput.get_key(i[0])
        if @down == -1
          if i[0] == 0x14 # Caps
            @caps_lock = @caps_lock == 1 ? 2 : 1
          end
          unless i[1] == ""
            if @shift
              case i[3]
              when nil
                @text.insert get_cursor_pos, i[@caps_lock]
              when true
                @text.insert get_cursor_pos, i[@caps_lock == 1 ? 2 : 1]
              else
                @text.insert get_cursor_pos, i[3]
              end
              @shift = false
              @altgr = false
            else
              if @altgr
                if i[4] != nil
                  @text.insert get_cursor_pos, i[4]
                end
                @shift = false
                @altgr = false
              else
                @text.insert get_cursor_pos, i[@caps_lock]
              end
            end
            @cursor[0] += 1
          end
          if i[0] == 0x78 # F9
            play_cancel
            $scene = Scene_Map.new
          end
          if i[0] == 0xA0 or i[0] == 0xA1 # Shift
            @shift = true
          end
          if i[0] == 0xA4 or i[0] == 0xA2 or i[0] == 0x11 # AltGr
            @altgr = true
          end
          if i[0] == 0x0D # Enter
            @text.insert get_cursor_pos, ";"
            @cursor[1] += 1
            @lines += 1
            @cursor[0] = 0
          end
          if i[0] == 0x09 # Tab
            @text.insert get_cursor_pos, " "
            @cursor[0] += 1
          end
          if i[0] == 0x25 # Left
            if @cursor[0] == 0
              unless @cursor[1] == 0
                @cursor[1] -= 1
                @cursor[0] = get_txt[@cursor[1]].size
              end
            else
              @cursor[0] -= 1
            end
          end
          if i[0] == 0x27 # Right
            if @cursor[1] != @lines
              if @cursor[0] == get_txt[@cursor[1]].size
                @cursor[1] += 1
                @cursor[0] = 0
              else
                @cursor[0] += 1
              end
            else
              @cursor[0] += 1 if @cursor[0] != get_txt[@cursor[1]].size - 1
            end
          end
          if i[0] == 0x26 # Up
            if @cursor[1] != 0
              @cursor[1] -= 1
              @cursor[0] = [@cursor[0], get_txt[@cursor[1]].size].min
            end
          end
          if i[0] == 0x28 # Down
            if @lines == @cursor[1]
              play_cursor
              @down = 0
            else
              @cursor[1] += 1
              @cursor[0] = [@cursor[0], get_txt[@cursor[1]].size - 1].min
            end
          end
          if i[0] == 0x2E # Del
            if @lines == @cursor[1]
              del_txt unless @cursor[0] == (get_txt[@cursor[1]].size - 1)
            else
              @lines -= 1 if @cursor[0] == (get_txt[@cursor[1]].size)
              del_txt
            end
          end
          if i[0] == 0x08 # Backspace
            if @text.size <= 1
              @text = ""
              @cursor[0] = 0
            else
              if @text[get_cursor_pos-1].chr == ";"
                @cursor[1] -= 1
                @cursor[0] = get_txt[@cursor[1]].size - 1
                @lines -= 1
                del_txt
              else
                @cursor[0] -= 1
              end
              del_txt
            end
          end
        end
      end
    end
    write_eval
  end
 
  def get_txt
    txt = ""
    txt.concat(@text)
    txt << " "
    return txt.include?(";") ? txt = txt.split(";") : [txt]
  end
 
  def del_txt
    text = @text.split(//)
    text.delete_at(get_cursor_pos)
    @text = text.join
    @text = "" if @text.nil?
  end
 
  def get_cursor_pos
    pos = 0
    for i in 0...@cursor[1]
      pos += get_txt[i].size+1
    end
    pos += @cursor[0]
    return pos
  end
 
  def write_eval
    if @text != nil and @text != ""
      txt = get_txt
      for i in 0...txt.size
      self.contents.draw_text(20, 20 + i*24, 620, 32, txt[i])
      end
    end
    return
  end
 
  def get_eval_code
    return begin
      eval(@text).to_s
    rescue Exception
      "Exception"
    end
  end
 
  def draw_cursor
    rect = Rect.new(@cursor[0]*10+20, 28 + @cursor[1]*24, 2, 16)
    self.contents.fill_rect(rect, Color.new(128,128,128,255))
  end
end


#==============================================================================
# ** Window_DebugCommand
#==============================================================================

class Window_DebugCommand < Window_Selectable
 
  include EVAL_FEATURES
 
  def initialize
    super(0, HEIGHT-64, WIDTH, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 2
    @column_max = 2
    @commands = ["Confirm", "Cancel"]
    refresh
    self.index = 0
  end

  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end

  def draw_item(index)
    width = (WIDTH-32)/2
    self.contents.draw_text(width * index, 0, width, 32, @commands[index], 1)
  end
 
  def update_cursor
    super
    self.cursor_rect.height = 32
  end
end


#==============================================================================
# ** Scene_DebugEval
#==============================================================================

class Scene_DebugEval
 
  include EVAL_FEATURES
 
  def main
    @eval_window = Window_Eval.new
    @command_window = Window_DebugCommand.new
    @command_window.index = -1
    Graphics.transition
    loop do
      Graphics.update
      update
      if $scene != self
        break
      end
    end
    $game_map.refresh
    Graphics.freeze
    @eval_window.dispose
    @command_window.dispose
  end
 
  def update
    if @eval_window.down == -1
      @command_window.index = -1
    else
      @command_window.index = [@command_window.index, 0].max
    end
    if @command_window.index != -1
      update_command
    end
    @eval_window.refresh
    @command_window.update
  end
 
  def update_command
    for i in WecocInput::Teclas.values
      if WecocInput.get_key(i[0])
        if i[0] == 0x25 # Left
          play_cursor
          @command_window.index = 0
        end
        if i[0] == 0x27 # Right
          play_cursor
          @command_window.index = 1
        end
        if i[0] == 0x26 # Up
          play_cursor
          @eval_window.down = -1
        end
        if i[0] == 0x20 or i[0] == 0x0D or i[0] == 0x78 # Space, Enter or F9
          case @command_window.index
          when 0 # Confirm
            $scene = Scene_Map.new if @eval_window.text != "help"
            eval = @eval_window.get_eval_code
            eval == "Exception" ? play_buzzer : play_decision
          when 1 # Cancel
            play_cancel
            $scene = Scene_Map.new
          end
          $testing = false
        end
        if i[0] == 0x78 # F9
          play_cancel
          $scene = Scene_Map.new
        end
      end
    end
  end
end


#==============================================================================
# ** [Others]
#==============================================================================

if $debug_eval_vx

  class Scene_Map < Scene_Base
    def call_debug
      Sound.play_decision
      $game_temp.next_scene = nil
      $scene = Scene_DebugEval.new
    end
  end

else

  class Scene_Map
    def call_debug
      $game_temp.debug_calling = false
      $game_system.se_play($data_system.decision_se)
      $game_player.straighten
      $scene = Scene_DebugEval.new
    end
  end

end

class SystemStackError < Exception
  alias testing_exception initialize unless $@
  def initialize
    return if $testing
    testing_exception
  end
end
VERSIÓN 0.8:

Código:
#==============================================================================
# [XP/VX] Debug Eval (Scene_Debug Edit) v0.8
#------------------------------------------------------------------------------
# By: Wecoc
# No me juzguéis por esto, en realidad no estoy tan loco.
#==============================================================================

class Window_Eval < Window_Base
  def var
    return $game_variables
  end
  
  def stch
    return $game_switches
  end
  
  def debug
    $scene = Scene_Debug.new
  end
  
  def help
    print <<HELP
    
    var - Atajo $game_variables  
   stch - Atajo $game_switches  
   debug - Scene_Debug.new  
   
HELP
  end
end

$debug_eval_vx = defined?(Game_Interpreter)

module EVAL_FEATURES
  WIDTH =  $debug_eval_vx ? 544 : 640
  HEIGHT = $debug_eval_vx ? 416 : 480
  
  def play_cursor
    if $debug_eval_vx
      Sound.play_cursor
    else
      $game_system.se_play($data_system.cursor_se)
    end
  end
  
  def play_decision
    if $debug_eval_vx
      Sound.play_decision
    else
      $game_system.se_play($data_system.decision_se)
    end
  end
  
  def play_cancel
    if $debug_eval_vx
      Sound.play_cancel
    else
      $game_system.se_play($data_system.cancel_se)
    end
  end
  
  def play_buzzer
    if $debug_eval_vx
      Sound.play_buzzer
    else
      $game_system.se_play($data_system.buzzer_se)
    end
  end
end

module WecocInput
  Teclas = {
  # index => [ key, mayúsculas, minúsculas, shift, AltGr]
  1 =>   [0x01, "", ""], # Click L
  2 =>   [0x02, "", ""], # Click R
  3 =>   [0x04, "", ""], # Click M
  4 =>   [0x08, "", ""], # Back
  5 =>   [0x09, "  ", "  "], # Tab
  6 =>   [0x0C, "", ""], # Bloq Numpad 5
  7 =>   [0x0D, "", ""], # Enter
  8 =>   [0x11, "", ""], # Ctrl (0xA2 + 0x11)
  9 =>   [0x12, "", ""], # Alt
  10 =>  [0x13, "", ""], # Pause
  11 =>  [0x14, "", ""], # Cap Lock
  12 =>  [0x1B, "", ""], # Esc
  13 =>  [0x20, " ", " "], # Backspace
  14 =>  [0x21, "", ""], # RePag
  15 =>  [0x22, "", ""], # AvPag
  16 =>  [0x23, "", ""], # End
  17 =>  [0x24, "", ""], # Start
  18 =>  [0x25, "", ""], # Left
  19 =>  [0x26, "", ""], # Up
  20 =>  [0x27, "", ""], # Right
  21 =>  [0x28, "", ""], # Down
  22 =>  [0x2C, "", ""], # ImpPant
  23 =>  [0x2D, "", ""], # Insert
  24 =>  [0x2E, "", ""], # Delete Supr
  25 =>  [0x30, "0", "0", "=", "="],
 26 =>  [0x31, "1", "1", "!", "|"],
  27 =>  [0x32, "2", "2", '"', "@"],
  28 =>  [0x33, "3", "3", "·", '#'],
  29 =>  [0x34, "4", "4", "$", "~"],
  30 =>  [0x35, "5", "5", "%"],
  31 =>  [0x36, "6", "6", "&", "¬"],
  32 =>  [0x37, "7", "7", "/"],
  33 =>  [0x38, "8", "8", "("],
  34 =>  [0x39, "9", "9", ")"],
  35 =>  [0x41, "A", "a", true],
 36 =>  [0x42, "B", "b", true],
  37 =>  [0x43, "C", "c", true],
  38 =>  [0x44, "D", "d", true],
  39 =>  [0x45, "E", "e", true],
  40 =>  [0x46, "F", "f", true],
  41 =>  [0x47, "G", "g", true],
  42 =>  [0x48, "H", "h", true],
  43 =>  [0x49, "I", "i", true],
  44 =>  [0x4A, "J", "j", true],
  45 =>  [0x4B, "K", "k", true],
  46 =>  [0x4C, "L", "l", true],
  47 =>  [0x4D, "M", "m", true],
  48 =>  [0x4E, "N", "n", true],
  49 =>  [0x4F, "O", "o", true],
  50 =>  [0x50, "P", "p", true],
  51 =>  [0x51, "Q", "q", true],
  52 =>  [0x52, "R", "r", true],
  53 =>  [0x53, "S", "s", true],
  54 =>  [0x54, "T", "t", true],
  55 =>  [0x55, "U", "u", true],
  56 =>  [0x56, "V", "v", true],
  57 =>  [0x57, "W", "w", true],
  58 =>  [0x58, "X", "x", true],
  59 =>  [0x59, "Y", "y", true],
  60 =>  [0x5A, "Z", "z", true],
  61 =>  [0x5B, "", ""], # Windows
  62 =>  [0x5C, "", ""], # R-Windows
  63 =>  [0x5D, "", ""], # Scroll Fix
  64 =>  [0x60, "0", "0"], # Numpad
  65 =>  [0x61, "1", "1"], # Numpad
  66 =>  [0x62, "2", "2"], # Numpad
  67 =>  [0x63, "3", "3"], # Numpad
  68 =>  [0x64, "4", "4"], # Numpad
  69 =>  [0x65, "5", "5"], # Numpad
  70 =>  [0x66, "6", "6"], # Numpad
  71 =>  [0x67, "7", "7"], # Numpad
  72 =>  [0x68, "8", "8"], # Numpad
  73 =>  [0x69, "9", "9"], # Numpad
  74 =>  [0x6A, "*", "*"], # Numpad
  75 =>  [0x6B, "+", "+"], # Numpad
  76 =>  [0x6C, "", ""], # Numpad
  77 =>  [0x6D, "-", "-"], # Numpad
  78 =>  [0x6E, ".", "."], # Numpad
  79 =>  [0x6F, "/", "/"], # Numpad
  80 =>  [0x70, "", ""], # F1
  81 =>  [0x71, "", ""], # F2
  82 =>  [0x72, "", ""], # F3
  83 =>  [0x73, "", ""], # F4
  84 =>  [0x74, "", ""], # F5
  85 =>  [0x75, "", ""], # F6
  86 =>  [0x76, "", ""], # F7
  87 =>  [0x77, "", ""], # F8
  88 =>  [0x78, "", ""], # F9
  89 =>  [0x79, "", ""], # F10
  90 =>  [0x7A, "", ""], # F11
  91 =>  [0x7B, "", ""], # F12
  92 =>  [0x90, "", ""], # BloqNum
  93 =>  [0x91, "", ""], # BloqDespl
  94 =>  [0xA0, "", ""], # Shift
  95 =>  [0xA1, "", ""], # R-Shift
  96 =>  [0xA2, "", ""], # Ctrl (0xA2 + 0x11)
  97 =>  [0xA3, "", ""], # R-Ctrl
  98 =>  [0xA4, "", ""], # Alt
  99 =>  [0xA5, "", ""], # R-Alt
  100 => [0xBA, "`", "`", "^", "["],
  101 => [0xBB, "+", "+", "*", "]"],
  102 => [0xBC, ",", ",", ";"],
  103 => [0xBD, "-", "-","_"],
  104 => [0xBE, ".", ".", ":"],
  105 => [0xBF, "Ç", "ç", true, "}"],
  106 => [0xC0, "Ñ", "ñ", true],
  107 => [0xDB, "'", "'", "?"],
  108 => [0xDC, "º", "º", "ª", 92.chr], # \
  109 => [0xDD, "¡", "¡", "¿"],
  110 => [0xDE, "´", "´", "¨", "{"],
  111 => [0xE2, "<", "<", ">"]
  }
  
  Keyboard_Acces = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
 
 def self.get_key(key)
    Keyboard_Acces.call(key) & 0x01 == 1
  end
end

class Window_Eval < Window_Base
  
  include EVAL_FEATURES
  
  attr_accessor :text
  attr_accessor :down
  
  def initialize
    super(0, 0, WIDTH, HEIGHT-64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.color = normal_color
    self.contents.font.name = "Courier New"
    self.contents.font.size = 18
    self.contents.font.bold = true
    $falcao_apply = false
    $testing = true
    @text = ""
    @text_temp = []
    @caps_lock = 2
    @last_txt = [8, 1]
    @shift = false
    @altgr = false
    @down = -1
    refresh
  end
    
  def refresh
    self.contents.clear
    draw_back
    draw_eval
    draw_cursor
  end
  
  def draw_back
    rect0 = Rect.new(10, 10, WIDTH-32-20, HEIGHT-64-32-20)
    rect1 = Rect.new(10, 10, WIDTH-32-20, 2)
    rect2 = Rect.new(10, HEIGHT-64-32-20+8, WIDTH-32-20, 2)
    rect3 = Rect.new(10, 10, 2, HEIGHT-64-32-20)
    rect4 = Rect.new(WIDTH-32-20+8, 10, 2, HEIGHT-64-32-20)
    
    self.contents.fill_rect(rect0, Color.new(8,8,8,160))
    self.contents.fill_rect(rect1, Color.new(200,200,200,255))
    self.contents.fill_rect(rect2, Color.new(200,200,200,255))
    self.contents.fill_rect(rect3, Color.new(200,200,200,255))
    self.contents.fill_rect(rect4, Color.new(200,200,200,255))
    self.contents.font.color = normal_color
  end
  
  def draw_eval
    for i in WecocInput::Teclas.values
      if WecocInput.get_key(i[0])
        if @down == -1
          if i[0] == 0x14 # Caps
            @caps_lock = @caps_lock == 1 ? 2 : 1
          end
          unless i[1] == ""
            if @shift
              case i[3]
              when nil
               @text += i[@caps_lock]
              when true
               @text += i[@caps_lock == 1 ? 2 : 1]
              else
                @text += i[3]
              end
              @shift = false
              @altgr = false
            else
              if @altgr
                if i[4] != nil
                  @text += i[4]
                end
                @shift = false
                @altgr = false
              else
                @text += i[@caps_lock]
              end
            end
            @text_temp.push(@text)
          end
          if i[0] == 0x78 # F9
            play_cancel
            $scene = Scene_Map.new
          end
          if i[0] == 0xA0 or i[0] == 0xA1 # Shift
            @shift = true
          end
          if i[0] == 0xA4 or i[0] == 0xA2 or i[0] == 0x11 # AltGr
            @altgr = true
          end
          if i[0] == 0x0D # Enter
            @text += ";"
          end
          if i[0] == 0x28 # Down
            play_cursor
            @down = 0
          end
          if i[0] == 0x08 # Backspace
            @text = @text_temp[@text_temp.size - 2]
            @text_temp.delete_at(@text_temp.size - 1)
            @text = "" if @text.nil?
          end
        end
      end
    end
    write_eval
  end
      
  def write_eval
    if @text != nil and @text != ""
      txt = @text.dup
      txt << " "
      if txt.include?(";")
        txt = txt.split(";")
      else
        txt = [txt]
      end
      @last_txt = [self.contents.text_size(txt[-1]).width, txt.size]
      for i in 0...txt.size
        self.contents.draw_text(20, 20 + i*24, 620, 32, txt[i])
      end
    else
      @last_txt = [8, 1]
    end
    return
  end
  
  def get_eval_code
    return begin
      eval(@text).to_s
    rescue Exception
      "Exception"
    end
  end
  
  def draw_cursor
    rect = Rect.new(@last_txt[0]+12, 4 + @last_txt[1]*24, 2, 16)
    self.contents.fill_rect(rect, Color.new(128,128,128,255))
  end
end

class Window_DebugCommand < Window_Selectable
  
  include EVAL_FEATURES
  
  def initialize
    super(0, HEIGHT-64, WIDTH, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 2
    @column_max = 2
    @commands = ["Aceptar", "Cancelar"]
    refresh
    self.index = 0
  end

  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end

  def draw_item(index)
    width = (WIDTH-32)/2
    self.contents.draw_text(width * index, 0, width, 32, @commands[index], 1)
  end
  
  def update_cursor
    super
    self.cursor_rect.height = 32
  end
end


class Scene_DebugEval
  
  include EVAL_FEATURES
  
  def main
    @eval_window = Window_Eval.new
    @command_window = Window_DebugCommand.new
    @command_window.index = -1
    Graphics.transition
    loop do
      Graphics.update
      update
      if $scene != self
        break
      end
    end
    $game_map.refresh
    Graphics.freeze
    @eval_window.dispose
    @command_window.dispose
  end
  
  def update
    if @eval_window.down == -1
      @command_window.index = -1
    else
      @command_window.index = [@command_window.index, 0].max
    end
    if @command_window.index != -1
      update_command
    end
    @eval_window.refresh
    @command_window.update
  end
  
  def update_command
    for i in WecocInput::Teclas.values
      if WecocInput.get_key(i[0])
        if i[0] == 0x25 # Left
          play_cursor
          @command_window.index = 0
        end
        if i[0] == 0x27 # Right
          play_cursor
          @command_window.index = 1
        end
        if i[0] == 0x26 # Up
          play_cursor
          @eval_window.down = -1
        end
        if i[0] == 0x20 or i[0] == 0x0D or i[0] == 0x78 # Space, Enter or F9
          case @command_window.index
          when 0 # Aceptar
            $scene = Scene_Map.new if @eval_window.text != "help"
            eval = @eval_window.get_eval_code
            eval == "Exception" ? play_buzzer : play_decision
          when 1 # Cancelar
            play_cancel
            $scene = Scene_Map.new
          end
          $testing = false
        end
        if i[0] == 0x78 # F9
          play_cancel
          $scene = Scene_Map.new
        end
      end
    end
  end
end

if $debug_eval_vx
  
  class Scene_Map < Scene_Base
    def call_debug
      Sound.play_decision
      $game_temp.next_scene = nil
      $scene = Scene_DebugEval.new
    end
  end
  
else

  class Scene_Map
    def call_debug
      $game_temp.debug_calling = false
      $game_system.se_play($data_system.decision_se)
      $game_player.straighten
      $scene = Scene_DebugEval.new
    end
  end

end

class SystemStackError < Exception
  alias testing_exception initialize unless $@
  def initialize
    return if $testing
    testing_exception
  end
end

VERSIÓN 0.7:

Código:
#==============================================================================
# [XP/VX] Debug Eval (Scene_Debug Edit) v0.7
#------------------------------------------------------------------------------
# By: Wecoc
# No me juzguéis por esto, en realidad no estoy tan loco.
#==============================================================================

$debug_eval_vx = defined?(Game_Interpreter)

module WecocInput
  Teclas = {
  # index => [ key, mayúsculas, minúsculas, shift, AltGr]
  1 =>   [0x01, "", ""], # Click L
  2 =>   [0x02, "", ""], # Click R
  3 =>   [0x04, "", ""], # Click M
  4 =>   [0x08, "", ""], # Back
  5 =>   [0x09, "  ", "  "], # Tab
  6 =>   [0x0C, "", ""], # Bloq Numpad 5
  7 =>   [0x0D, "", ""], # Enter
  8 =>   [0x11, "", ""], # Ctrl (0xA2 + 0x11)
  9 =>   [0x12, "", ""], # Alt
  10 =>  [0x13, "", ""], # Pause
  11 =>  [0x14, "", ""], # Cap Lock
  12 =>  [0x1B, "", ""], # Esc
  13 =>  [0x20, " ", " "], # Backspace
  14 =>  [0x21, "", ""], # RePag
  15 =>  [0x22, "", ""], # AvPag
  16 =>  [0x23, "", ""], # End
  17 =>  [0x24, "", ""], # Start
  18 =>  [0x25, "", ""], # Left
  19 =>  [0x26, "", ""], # Up
  20 =>  [0x27, "", ""], # Right
  21 =>  [0x28, "", ""], # Down
  22 =>  [0x2C, "", ""], # ImpPant
  23 =>  [0x2D, "", ""], # Insert
  24 =>  [0x2E, "", ""], # Delete Supr
  25 =>  [0x30, "0", "0", "=", "="],
 26 =>  [0x31, "1", "1", "!", "|"],
  27 =>  [0x32, "2", "2", '"', "@"],
  28 =>  [0x33, "3", "3", "·", '#'],
  29 =>  [0x34, "4", "4", "$", "~"],
  30 =>  [0x35, "5", "5", "%"],
  31 =>  [0x36, "6", "6", "&", "¬"],
  32 =>  [0x37, "7", "7", "/"],
  33 =>  [0x38, "8", "8", "("],
  34 =>  [0x39, "9", "9", ")"],
  35 =>  [0x41, "A", "a", true],
 36 =>  [0x42, "B", "b", true],
  37 =>  [0x43, "C", "c", true],
  38 =>  [0x44, "D", "d", true],
  39 =>  [0x45, "E", "e", true],
  40 =>  [0x46, "F", "f", true],
  41 =>  [0x47, "G", "g", true],
  42 =>  [0x48, "H", "h", true],
  43 =>  [0x49, "I", "i", true],
  44 =>  [0x4A, "J", "j", true],
  45 =>  [0x4B, "K", "k", true],
  46 =>  [0x4C, "L", "l", true],
  47 =>  [0x4D, "M", "m", true],
  48 =>  [0x4E, "N", "n", true],
  49 =>  [0x4F, "O", "o", true],
  50 =>  [0x50, "P", "p", true],
  51 =>  [0x51, "Q", "q", true],
  52 =>  [0x52, "R", "r", true],
  53 =>  [0x53, "S", "s", true],
  54 =>  [0x54, "T", "t", true],
  55 =>  [0x55, "U", "u", true],
  56 =>  [0x56, "V", "v", true],
  57 =>  [0x57, "W", "w", true],
  58 =>  [0x58, "X", "x", true],
  59 =>  [0x59, "Y", "y", true],
  60 =>  [0x5A, "Z", "z", true],
  61 =>  [0x5B, "", ""], # Windows
  62 =>  [0x5C, "", ""], # R-Windows
  63 =>  [0x5D, "", ""], # Scroll Fix
  64 =>  [0x60, "0", "0"], # Numpad
  65 =>  [0x61, "1", "1"], # Numpad
  66 =>  [0x62, "2", "2"], # Numpad
  67 =>  [0x63, "3", "3"], # Numpad
  68 =>  [0x64, "4", "4"], # Numpad
  69 =>  [0x65, "5", "5"], # Numpad
  70 =>  [0x66, "6", "6"], # Numpad
  71 =>  [0x67, "7", "7"], # Numpad
  72 =>  [0x68, "8", "8"], # Numpad
  73 =>  [0x69, "9", "9"], # Numpad
  74 =>  [0x6A, "*", "*"], # Numpad
  75 =>  [0x6B, "+", "+"], # Numpad
  76 =>  [0x6C, "", ""], # Numpad
  77 =>  [0x6D, "-", "-"], # Numpad
  78 =>  [0x6E, ".", "."], # Numpad
  79 =>  [0x6F, "/", "/"], # Numpad
  80 =>  [0x70, "", ""], # F1
  81 =>  [0x71, "", ""], # F2
  82 =>  [0x72, "", ""], # F3
  83 =>  [0x73, "", ""], # F4
  84 =>  [0x74, "", ""], # F5
  85 =>  [0x75, "", ""], # F6
  86 =>  [0x76, "", ""], # F7
  87 =>  [0x77, "", ""], # F8
  88 =>  [0x78, "", ""], # F9
  89 =>  [0x79, "", ""], # F10
  90 =>  [0x7A, "", ""], # F11
  91 =>  [0x7B, "", ""], # F12
  92 =>  [0x90, "", ""], # BloqNum
  93 =>  [0x91, "", ""], # BloqDespl
  94 =>  [0xA0, "", ""], # Shift
  95 =>  [0xA1, "", ""], # R-Shift
  96 =>  [0xA2, "", ""], # Ctrl (0xA2 + 0x11)
  97 =>  [0xA3, "", ""], # R-Ctrl
  98 =>  [0xA4, "", ""], # Alt
  99 =>  [0xA5, "", ""], # R-Alt
  100 => [0xBA, "`", "`", "^", "["],
  101 => [0xBB, "+", "+", "*", "]"],
  102 => [0xBC, ",", ",", ";"],
  103 => [0xBD, "-", "-","_"],
  104 => [0xBE, ".", ".", ":"],
  105 => [0xBF, "Ç", "ç", true, "}"],
  106 => [0xC0, "Ñ", "ñ", true],
  107 => [0xDB, "'", "'", "?"],
  108 => [0xDC, "º", "º", "ª", 92.chr], # \
  109 => [0xDD, "¡", "¡", "¿"],
  110 => [0xDE, "´", "´", "¨", "{"],
  111 => [0xE2, "<", "<", ">"]
  }
  
  Keyboard_Acces = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
 
 def self.get_key(key)
    Keyboard_Acces.call(key) & 0x01 == 1
  end
end

class Window_Eval < Window_Base
  
  WIDTH =  $debug_eval_vx ? 544 : 640
  HEIGHT = $debug_eval_vx ? 416 : 480
  
  attr_accessor :result
  attr_accessor :down
  def initialize
    super(0, 0, WIDTH, HEIGHT-64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.color = normal_color
    self.contents.font.name = "Courier New"
    self.contents.font.size = 18
    self.contents.font.bold = true
    $falcao_apply = false
    $testing = true
    @text = ""
    @result = ""
    @text_temp = []
    @caps_lock = 2
    @last_txt = [8, 1]
    @shift = false
    @altgr = false
    @down = -1
    refresh
  end
  
  def dispose
    super
    $testing = false
  end
  
  def refresh
    self.contents.clear
    draw_back
    draw_eval
    draw_cursor
  end
  
  def draw_back
    rect0 = Rect.new(10, 10, WIDTH-32-20, HEIGHT-64-32-20)
    rect1 = Rect.new(10, 10, WIDTH-32-20, 2)
    rect2 = Rect.new(10, HEIGHT-64-32-20+8, WIDTH-32-20, 2)
    rect3 = Rect.new(10, 10, 2, HEIGHT-64-32-20)
    rect4 = Rect.new(WIDTH-32-20+8, 10, 2, HEIGHT-64-32-20)
    
    self.contents.fill_rect(rect0, Color.new(8,8,8,160))
    self.contents.fill_rect(rect1, Color.new(200,200,200,255))
    self.contents.fill_rect(rect2, Color.new(200,200,200,255))
    self.contents.fill_rect(rect3, Color.new(200,200,200,255))
    self.contents.fill_rect(rect4, Color.new(200,200,200,255))
    self.contents.font.color = normal_color
  end
  
  def draw_eval
    for i in WecocInput::Teclas.values
      if WecocInput.get_key(i[0])
        if @down == -1
          if i[0] == 0x14 # Caps
            @caps_lock = @caps_lock == 1 ? 2 : 1
          end
          #unless i[0] == 0x08 or i[0] == 0x14 or i[0] == 0xA0 or i[0] == 0xA5
          unless i[1] == ""
            if @shift
              case i[3]
              when nil
               @text += i[@caps_lock]
              when true
               @text += i[@caps_lock == 1 ? 2 : 1]
              else
                @text += i[3]
              end
              @shift = false
              @altgr = false
            else
              if @altgr
                if i[4] != nil
                  @text += i[4]
                end
                @shift = false
                @altgr = false
              else
                @text += i[@caps_lock]
              end
            end
            @text_temp.push(@text)
          end
          if i[0] == 0x78 # F9
            if $debug_eval_vx
              Sound.play_decision
            else
              $game_system.se_play($data_system.decision_se)
            end
            $scene = Scene_Map.new
          end
          if i[0] == 0xA0 or i[0] == 0xA1 # Shift
            @shift = true
          end
          if i[0] == 0xA4 or i[0] == 0xA2 or i[0] == 0x11 # AltGr
            @altgr = true
          end
          if i[0] == 0x0D # Enter
            @text += ";"
          end
          if i[0] == 0x20 or i[0] == 0x0D # Space or Enter
            @result = get_eval_code
          end
          if i[0] == 0x28 # Down
            if $debug_eval_vx
              Sound.play_cursor
            else
              $game_system.se_play($data_system.cursor_se)
            end
            @down = 0
          end
          if i[0] == 0x08 # Backspace
            @text = @text_temp[@text_temp.size - 2]
            @text_temp.delete_at(@text_temp.size - 1)
            @text = "" if @text.nil?
            @result = "" if @text == ""
          end
        else # @down == 0
          if i[0] == 0x26 # Up
            if $debug_eval_vx
              Sound.play_cursor
            else
              $game_system.se_play($data_system.cursor_se)
            end
            @down = -1
          end
          if i[0] == 0x20 or i[0] == 0x0D or i[0] == 0x78 # Space, Enter or F9
            if $debug_eval_vx
              Sound.play_decision
            else
              $game_system.se_play($data_system.decision_se)
            end
            $scene = Scene_Map.new
          end
        end
      end
    end
    write_eval
  end
      
  def write_eval
    if @text != nil and @text != ""
      txt = @text.dup
      txt << " "
      if txt.include?(";")
        txt = txt.split(";")
      else
        txt = [txt]
      end
      @last_txt = [self.contents.text_size(txt[-1]).width, txt.size]
      for i in 0...txt.size
        self.contents.draw_text(20, 20 + i*24, 620, 32, txt[i])
      end
    else
      @last_txt = [8, 1]
    end
    return
  end
  
  def get_eval_code
    return begin
            eval(@text).to_s
          rescue Exception::NameError
            "NameError"
          rescue Exception::SyntaxError
            "SyntaxError"
          rescue Exception::SystemStackError
            "SystemStackError"
          rescue Errno::ENOENT
            "NoFileError"
          end
  end
  
  def draw_cursor
    rect = Rect.new(@last_txt[0]+12, 4 + @last_txt[1]*24, 2, 16)
    self.contents.fill_rect(rect, Color.new(128,128,128,255))
  end
  
  def var
    return $game_variables
  end
  def stch
    return $game_switches
  end
  def debug
    $scene = Scene_Debug.new
  end
  # Añade todos los atajos que quieras aquí
end

class Window_Preview < Window_Base
  
  WIDTH =  $debug_eval_vx ? 544 : 640
  HEIGHT = $debug_eval_vx ? 416 : 480
  
  attr_accessor :text
  def initialize
    super(0, HEIGHT-64, WIDTH-160, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @text = ""
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.draw_text(12, 2, 620, 32, @text[0, 100]) rescue nil
  end
end

class Scene_DebugEval
  
  WIDTH =  $debug_eval_vx ? 544 : 640
  HEIGHT = $debug_eval_vx ? 416 : 480
  
  def main
    @eval_window = Window_Eval.new
    @preview_window = Window_Preview.new
    @command_window = Window_Command.new(160, ["Aceptar"])
    @command_window.x = WIDTH-160
    @command_window.y = HEIGHT-64
    @command_window.height = 64
    @command_window.index = -1
    Graphics.transition
    loop do
      Graphics.update
      update
      if $scene != self
        break
      end
    end
    $game_map.refresh
    Graphics.freeze
    @eval_window.dispose
    @preview_window.dispose
    @command_window.dispose
  end

  def update
    @command_window.index = @eval_window.down
    @preview_window.text = @eval_window.result
    @eval_window.refresh
    @preview_window.refresh
    @command_window.update
  end
end

if $debug_eval_vx
  
  class Scene_Map < Scene_Base
    def call_debug
      Sound.play_decision
      $game_temp.next_scene = nil
      $scene = Scene_DebugEval.new
    end
  end
  
else

  class Scene_Map
    def call_debug
      $game_temp.debug_calling = false
      $game_system.se_play($data_system.decision_se)
      $game_player.straighten
      $scene = Scene_DebugEval.new
    end
  end

end

class Exception
  alias testing_exception initialize unless $@
  def initialize
    return if $testing
    testing_exception
  end
end

Está en versión 0.7 porque tiene un error bastante gordo de momento, y es que evalúa al momento que lo estás escribiendo, mientras que debería hacerlo solo si pulsas Aceptar (así también podrías Cancelar, aunque sea pulsando F9 xD). No sé ninguna manera de solucionar esto y a la vez conservar la ventana donde te muestra el resultado. Si dentro de un mes como mucho aún no se ha encontrado solución a ese problema lo haré sin esa ventana :(

Espero que alguien lo encuentre interesante n__n


Última edición por Wecoc el 2013-09-12, 20:57, editado 9 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

Re: [XP/VX] Debug Eval : Nuevo Scene_Debug

Mensaje por orochii el 2013-09-10, 18:29

Está en versión 0.7 porque tiene un error bastante gordo de momento, y es que evalúa al momento que lo estás escribiendo
¿EH?? ¿Y ESO PORQUÉ xD? ¿Estás corriendo el eval cada keypress o qué?

De hecho ya ví, la línea que dice que space y enter corren el eval.
Código:
if i[0] == 0x20 or i[0] == 0x0D # Space or Enter
            @result = get_eval_code
¿No bastará con quitar eso? Aparte sería interesante que soportase hacer eval multilínea 8333!.
En lugar de correr el eval() con enter, que sea con Ctrl+Enter o algo así.

Em, eso salut,
Orochii Zouveleki
avatar
orochii
Reportero

0/3

Créditos 7724

Gracias : 436

Volver arriba Ir abajo

Re: [XP/VX] Debug Eval : Nuevo Scene_Debug

Mensaje por Wecoc el 2013-09-10, 18:53

Orochii, eso que dices haría que la segunda ventana fuera inútil por el hecho de no mostrar su resultado que es lo que yo iba diciendo. Pero veo a venir que al fin y al cabo lo mejor será quitar esa ventana y dejar la parte de abajo con un Aceptar / Cancelar.

Leí sobre safe_eval, el cual usa eval dentro del un Thread con $SAFE = 4, eso fue lo que más se acercó a lo que quería pero luego devolver el value de ese Thread no fue suficiente, así que no es una via posible.

¿Y por eval multilínea te refieres a lo que ya soporta, no? Faltaría más xD



Lo que no tiene es soporte para mover el cursor arriba y abajo, y hacia los lados cuando pulsas abajo vas directamente a Aceptar, eso hace que si te equivocas tengas que borrarlo todo desde donde fallaste. También pensé en mejorar eso, sería cuestión de mover a Aceptar solo si estás en la última línea y si no bajar una... aunque es más lioso de lo que parece.

Por último si a alguien se le ocurre la idea de poner los nombres azules, rojos, lilas ... como en el editor eso ya sí que no, sería complicarse MUCHÍSIMO la vida xD

Notas sin interés" como hace a veces Orochii xD:
En realidad no es eval multilínea pero yo creo que es suficiente... Es eval a una sola línea puesta así a ; b ; c ; d. Pasa que cuando se tiene que dibujar ; (al pulsar enter) en vez de eso divide la string. Eso implica que usar comentarios de estos # no va bien. ¿Pero quien cojones va a poner comentarios en un script eval que una vez hecho el cambio será destruído? xDDD
Otro detalle era que la ventana de debajo tenía límite de carácteres, porque algunos resultados podían tener tantos carácteres que daba lag (probé poner Kernel.methods y eran más de mil carácteres) así que el eval no era exactamente lo que se muestra en la ventana de debajo...

No quería tener que hacerlo tan pronto pero en fin, he puesto la versión 0.8 en el post. Ya no tiene ese error puesto que ya no tiene la ventana de debajo. Aún así aún no es versión definitiva porque lo que dije del cursor no está hecho (y eso costará xD)

Ideas y críticas serán bienvenidas y os responderé las dudas que tengáis.

Estoy hecho un maestro del RGSS Mago xD

((Solucioné un error con F12 :D))

Edito: Ya está subido el script definitivo. ¡A disfrutarlo! :D
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

Re: [XP/VX] Debug Eval : Nuevo Scene_Debug

Mensaje por Wecoc el 2015-01-14, 19:04

He hecho otro script a parte que añade más shortcuts. Testeado en XP, pero en VX también debería funcionar. Pegadlo debajo de éste (o dentro del mismo, abajo del todo)

Código:
#==============================================================================
# [XP/VX] Debug Eval (Scene_Debug Edit) v1.0 Shortcuts
#------------------------------------------------------------------------------
# By: Wecoc
#==============================================================================

#==============================================================================
# ** New Shortcuts
#==============================================================================

class Game_Character
  attr_accessor :character_name
  attr_accessor :character_hue
end

class Game_Temp
  attr_accessor :swap_player_id
 
  alias swap_player_ini initialize unless $@
  def initialize
    swap_player_ini
    @swap_player_id = 0
  end
end

module EVAL_HELP
  def help(command=nil)
    if command == nil
      print EVAL_HELP.instance_methods.join("\n")
      return
    end
    case command
    when "var"
      print "var[ID] - Shortcut for $game_variables[ID]"
    when "stch"
      print "stch[ID] - Shortcut for $game_switches[ID]"
    when "help"
      print "help - Displays the debug special commands and shortcuts \n",
      "help(command) - Displays a description of a command"
    when "debug"
      print "debug - Shows the default debug window"
    when "control_player"
      print "control_player - Controls the player movement"
    when "control_event"
      print "control_event(event_id) - Controls the event movement"
    when "erase_event"
      print "erase_event(event_id) - Erases the event"
    when "transfer"
      print "transfer(map_id, x, y[, direction]) - Transfers the player"
    when "fullscreen"
      print "fullscreen - Toggles the fullscreen mode"
    else
      print "Not found"
    end
  end
 
  def control_player
    return if $game_temp.swap_player_id == 0
    event_id = $game_temp.swap_player_id
    $game_temp.swap_player_id = 0
    control_event(event_id)
    $game_temp.swap_player_id = 0
  end
 
  def control_event(id)
    event = $game_map.events[id]
    return if event.nil?
    control_player if $game_temp.swap_player_id != 0
    ev_x = event.x
    ev_y = event.y
    ev_dir = event.direction
    ev_name = event.character_name
    ev_hue = event.character_hue
    pl_x = $game_player.x
    pl_y = $game_player.y
    pl_dir = $game_player.direction
    pl_name = $game_player.character_name
    pl_hue = $game_player.character_hue
    $game_player.moveto(ev_x, ev_y)
    case ev_dir
      when 2 then $game_player.turn_down
      when 4 then $game_player.turn_left
      when 6 then $game_player.turn_right
      when 8 then $game_player.turn_up
    end
    b_name = $game_party.actors[0].battler_name
    b_hue = $game_party.actors[0].battler_hue
    $game_party.actors[0].set_graphic(ev_name, ev_hue, b_name, b_hue)
    $game_map.events[id].moveto(pl_x, pl_y)
    case pl_dir
      when 2 then $game_map.events[id].turn_down
      when 4 then $game_map.events[id].turn_left
      when 6 then $game_map.events[id].turn_right
      when 8 then $game_map.events[id].turn_up
    end
    $game_map.events[id].character_name = pl_name
    $game_map.events[id].character_hue = pl_hue
    $game_temp.swap_player_id = id
    $game_player.refresh
    $game_map.refresh
    $scene = Scene_Map.new
  end
 
  def erase_event(id)
    event = $game_map.events[id]
    return if event.nil?
    control_player if $game_temp.swap_player_id == id
    $game_map.events[id].erase
    $scene = Scene_Map.new
  end
 
  def transfer(map_id, x, y, direction=0)
    $game_map.setup(map_id)
    $game_player.moveto(x, y)
    case direction
      when 2 then $game_player.turn_down
      when 4 then $game_player.turn_left
      when 6 then $game_player.turn_right
      when 8 then $game_player.turn_up
    end
    $scene = Scene_Map.new
  end
 
  def fullscreen
    $showm = Win32API.new 'user32', 'keybd_event', %w(l l l l), ''
    $showm.call(18,0,0,0)
    $showm.call(13,0,0,0)
    $showm.call(13,0,2,0)
    $showm.call(18,0,2,0)
  end
end


help - Muestra los comandos disponibles (eso ya estaba)
help("comando") - Muestra información sobre el nuevo comando (si existe xD)
debug - Activa la ventana Debug de siempre (eso ya estaba)
var - Atajo para $game_variables
stch - Atajo para $game_switches
control_event(id) - Pasas a controlar el evento id en vez de al jugador
control_player - Vuelves a controlar el jugador
erase_event(id) - Borra el evento id
transfer(map_id, x, y, direction) - Teletransporta al personaje a otro mapa (direction opcional)
fullscreen - Cambia el modo fullscreen

Otras combinaciones interesantes para testear el juego:

$game_player.move_speed = (speed)
$game_player.moveto(x, y)
$game_map.events[(id)].moveto(x, y)


El script principal usa un módulo de Keyboard propio. En un futuro seguramente haré una versión que use el Keyboard de Glitchfinder, para aumentar la compatibilidad con sistemas de teclado completo.

Saludos ;D
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

Re: [XP/VX] Debug Eval : Nuevo Scene_Debug

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.