设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 105|回复: 0

[转载发布] Visible Debug 1.2c

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    前天 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    4456

    主题

    864

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    22919
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    28269

    灌水之王

    发表于 4 天前 | 显示全部楼层 |阅读模式
    Visible Debug 1.2c

    mikb89



    Introduction

    Sometimes something goes wrong with events, switches and variables. You don't know what is happening, you just know they don't work.

    With this script you can set in game a list of parameters to take under control and they'll be shown and updated in real time.

    Features

    The parameters list includes:


    • switches and variables, events' self switches;
    • events, player, actors, battlers character's graphic;
    • events and player Through state and position;
    • tile id of current player position;
    • items, weapons, armors possession number;
    • battlers' hp, mp, tp (if enabled), atk, def, luk, agi, two states;
    • actors' name & level (enemies don't have that);
    • others useful datas you can check in configurations and can add your own.

    Screenshots





    How to Use

    Copy the script under Materials to use, then press F9 as usually and a choice window should appear.

    Other infos in the comments.

    Demo

    Multilanguage demo v. 1.2c (1.33 M


    http://www.mediafire.com/?o5dqoberdpn9opa

    Script

    Spoiler                Code:       
    # Visible Debug v. 1.2c# VX Ace version# by mikb89# Details:#  Sometimes something goes wrong with events switches and variables. You don't#   know what is happening, you just know they don't work.#  With this script you can set in game a list of parameters to take under#   control and they'll be shown and updated in real time.#  This list includes:#   - switches and variables, events' self switches;#   - events, player, actors, battlers character's graphic;#   - events and player Through state and position;#   - tile id of current player position;#   - items, weapons, armors possession number;#   - battlers' hp, mp, tp (if enabled), atk, def, luk, agi, two states;#   - actors' name & level (enemies don't have that);#   - others useful datas you can check here in configurations and can add your#     own.# Configurations:module VDEBUG  # Here's a list of terms you can change as you want:  HELP_TEXT = "Enter: add/remove; Pag: change list." # Help yourself!  # These are what appears on F9 press:    CALL_CLASSIC_DEBUG_TEXT = "Debug call"    CALL_VDEBUG_SETTINGS_TEXT = "Visible Debug data"  # These are lists names:    SWITCH_LIST_TEXT = "Switches"    VARIABLE_LIST_TEXT = "Variables"    ITEM_LIST_TEXT = "Items"    ACTOR_LIST_TEXT = "Actors"    EVENT_LIST_TEXT = "Events"    DATA_LIST_TEXT = "Infos"    WEAPON_LIST_TEXT = "Weapons"    ARMOR_LIST_TEXT = "Armors"    ENEMY_LIST_TEXT = "Enemies"  SHOW_EVENT_NAME = true # Show the event name. Set false for compatibility.  MOVE_AROUND_KEY = :ALT   # Pressing this key many times the debug sprite will move in the four angles   #  of the screen and then hide.  # The available data:  def self.collect_mainlist    poss = [] # You can change the order as you want, but can add nothing.    poss << [-1, $data_system.switches.size-1]    poss << [-2, $data_system.variables.size-1]    poss << [-3, $data_items.size-1]    poss << [-4, $data_actors.size-1]    poss << [0, $game_player]    poss << [-5, $game_map.events.size] # No need of -1 because it's a Hash. D:    poss << [-6, self.useful_data.size-1]    poss << [-7, $data_weapons.size-1]    poss << [-8, $data_armors.size-1]    poss << [-9, [$game_troop.members.size, 8].max]    poss # Unless you know what you're doing, of course.  end  def self.useful_data    da = [nil] # First value must be nil.    da << [["Party:", $game_party.members.size], # Open an array, add the item.           ["G:", $game_party.gold], # First value is a string shown...           ["S:", $game_party.steps], # ...second value is the variable to show.           ["T:", self.adjust_time(Graphics.frame_count)], # Remember the ,           ["Sav:", $game_system.save_count]] # Close the data array.           # Will show: "Party: 3 G: 333 S: 33 T: 3:33 Sav: 3" with something           #  instead of 3.    da << ["Timer:", self.adjust_time($game_timer.sec)]           # Even a single item can be added. And variable can also be a def.    da << [["Map id:", $game_map.map_id],           ["Size:", $game_map.width], ["x", $game_map.height]]           # You can, as an exercise, add for example the map name.      # Add here your own! We want YOU for items adding.    da # Here just returns the datas.  end  def self.adjust_time(value) # Example of a function. Returns formatted time.    value /= Graphics.frame_rate # Graphics.frame_rate = 1 second.    sec = value % 60 # Get the seconds.    value -= sec # Subtract them.    "#{value/60}:#{sprintf("%02d",sec)}" # Return min:sec formatted time string.  endend#Codename: vdebug($imported ||= {})[:mikb89_vdebug] = true# License:# - You can ask me to include support for other scripts as long as these scripts#   use the $imported[script] = true;# - You can modify and even repost my scripts, after having received a response#   by me. For reposting it, anyway, you must have done heavy edit or porting,#   you can't do a post with the script as is;# - You can use my scripts for whatever you want, from free to open to#   commercial games. I'd appreciate by the way if you let me know about what#   you're doing;# - You must credit me, if you use this script or part of it.# * operations to let the Visible Debug configuration be availableclass Scene_Map#class Scene_Map#def update_call_debug() <- rewritten  def update_call_debug    SceneManager.call(Scene_ChoiceDebug) if $TEST && Input.press?(:F9)  endendclass Window_GameDebug < Window_GameEnd#class Window_GameDebug#def make_command_list()  def make_command_list    add_command(VDEBUG::CALL_CLASSIC_DEBUG_TEXT, :dbg)    add_command(VDEBUG::CALL_VDEBUG_SETTINGS_TEXT, :vd)    add_command(Vocab::cancel, :cancel)  endendclass Scene_ChoiceDebug < Scene_MenuBase#class Scene_ChoiceDebug#def start()  def start    super; @command_window = Window_GameDebug.new    @command_window.set_handler(:dbg, proc{SceneManager.goto(Scene_Debug)})    @command_window.set_handler(:vd, proc{SceneManager.goto(Scene_VisibleDebug)})    @command_window.set_handler(:cancel, method(:return_scene))  end#class Scene_ChoiceDebug#def pre_terminate()  def pre_terminate    super; @command_window.close; update until @command_window.close?  endend# * operations to let the Visible Debug sprite work#class Game_Event#def name()(class Game_Event; def name; @event.name; end; end) if VDEBUG::SHOW_EVENT_NAME # why isn't the event name readable by default? WHY???class Scene_Base  alias_method(:updateSB_b4_vdebug, :update) unless method_defined?(:updateSB_b4_vdebug)#class Scene_Base#def update() <- aliased  def update    updateSB_b4_vdebug    # update the debug sprite just everywhere!    $game_player.sdebug.update if $game_player  endendclass << SceneManager  alias_method(:run_b4_vdebug, :run) unless method_defined?(:run_b4_vdebug)#class Scene_Manager#def self.run() <- aliased  def run    run_b4_vdebug    $game_player.sdebug.dispose  end  alias_method(:snapshot_for_background_b4_vdebug, :snapshot_for_background) unless method_defined?(:snapshot_for_background_b4_vdebug)#class Scene_Manager#def self.snapshot_for_background() <- aliased  def snapshot_for_background    # we don't want the debug sprite to be captured in the snapshot    $game_player.sdebug.visible = false if $game_player    snapshot_for_background_b4_vdebug    $game_player.sdebug.visible = true if $game_player  endendclass Game_Player  # rely sprite on $game_player due to its reperibility. No, I'm not kidding :E#class Game_Player#def sdebug()  def sdebug    @sdebug ||= Sprite_Debug.new  endendclass Sprite_Debug < Sprite  attr_reader :infos#class Sprite_Debug#def initialize(i, pos)  def initialize(i = nil, pos = 0)    super()    self.infos = (i.is_a?(Array) ? i : ) # must be an array    self.z = 99999999 # a big value    self.opacity = 222 # little transparency    @last_values = []    @pos = pos - 1; move_around # position set  end#class Sprite_Debug#def move_around()  def move_around    @pos += 1; @pos %= 5 # increase position, modulate value    self.x = w*(@pos%2) # right/left    self.y = Graphics.height/2*(@pos/2) # up/down/out  end#class Sprite_Debug#def w()  def w # just to write a little less    Graphics.width/2  end#class Sprite_Debug#def infos=(i)  def infos=(i)    @infos = i    create_bitmap # once data change, we recreate the image  end#class Sprite_Debug#def _dump(*args)  def _dump(*args)    str = @infos[0].nil? ? "n," : ""    @infos.each {|i|      i.each {|d| str += " #{d.is_a?(Numeric) ? d : "p"}"}      str += ","    } if str == ""    str += @pos.to_s # values to save  end#class Sprite_Debug#def _load(data)  def self._load(data)    p data    data = data.split(',')    pos = data.pop.to_i || 0    i = data[0] == "n" ? nil : data.each_index {|d|          data[d] = data[d].split          data[d].each_index {|n| data[d][n] = (data[d][n] == "p" ? $game_player : data[d][n].to_i)}        }    Sprite_Debug.new(i, pos)  end#class Sprite_Debug#def create_bitmap()  def create_bitmap    self.bitmap.dispose if self.bitmap && !self.bitmap.disposed?    h = @infos.size*24    self.bitmap = Bitmap.new(w,[h,1].max) # h is 0, if there's no item    for i in 0...@infos.size      next if @infos == nil || @infos.size < 2      draw_row(i, true)    end  end#class Sprite_Debug#def draw_row(i, new)  def draw_row(i, new = false)    self.bitmap.clear_rect(0,i*24,w,24) unless new # no need to clear if new    im = get_item(@infos) # get the bitmap then blt it. This way I can get    return unless im         #  the same bitmap everywhere ^^    draw_placement(0, i*24)    self.bitmap.blt(0, i*24, im, im.rect)    im.dispose  end#class Sprite_Debug#def draw_placement(x, y)  def draw_placement(x, y)    self.bitmap.fill_rect(x+4,y+6,w-8,24-8,Color.new(0,0,0,128)) # a bLackground  end#class Sprite_Debug#def collect(v)  def collect(v) # gets the relevant value(s) for each item    case v[0]      when 0; collect_player      when 1; $game_switches[v[1]]      when 2; $game_variables[v[1]]      when 3; $game_party.item_number($data_items[v[1]])      when 4; collect_actor($game_actors[v[1]])      when 5; collect_event($game_map.events[v[1]])      when 6; collect_data(VDEBUG::useful_data[v[1]])      when 7; $game_party.item_number($data_weapons[v[1]])      when 8; $game_party.item_number($data_armors[v[1]])      when 9; collect_enemy($game_troop.members[v[1]-1])      else; nil    end  end#class Sprite_Debug#def collect_player()  def collect_player    da = []    da << $game_player.character_name    da << $game_player.character_index    da << $game_player.direction    da << $game_player.x    da << $game_player.y    da << ($game_player.through || $game_player.debug_through?)    for i in [0, 1, 2]      da << $game_map.data[$game_player.x, $game_player.y, i]    end    da  end#class Sprite_Debug#def collect_actor(actor)  def collect_actor(actor)    da = []    da << actor.character_name    da << actor.character_index    da << actor.name    da << actor.level    da << actor.hp    da << actor.mhp    da << actor.mp    da << actor.mmp    da << actor.states    da << actor.atk    da << actor.def    da << actor.luk    da << actor.agi    da  end#class Sprite_Debug#def collect_event(event)  def collect_event(event)    da = []    return da if event.nil?    da << event.character_name    da << event.character_index    da << event.direction    da << event.x    da << event.y    da << (event.through || event.debug_through?)    for ss in ['A', 'B', 'C', 'D']      da << $game_self_switches[[$game_map.map_id, event.id, ss]]    end    da  end#class Sprite_Debug#def collect_data(data)  def collect_data(data)    da = []    return da if data.nil? || !data.is_a?(Array)    data = [data] unless data[0].is_a?(Array)    return da if data.size < 1    for val in data      da << val[1]    end    da  end#class Sprite_Debug#def collect_enemy(enemy)  def collect_enemy(enemy)    da = []    return da if enemy.nil?    da << enemy.battler_name    da << enemy.battler_hue    da << enemy.name    da << enemy.hp    da << enemy.mhp    da << enemy.mp    da << enemy.mmp    da << enemy.states    da << enemy.atk    da << enemy.def    da << enemy.luk    da << enemy.agi    da  end#class Sprite_Debug#def get_item(item, width, enabled)  def get_item(item, width = w, enabled = true) # draw item in a returned bitmap    bit = Bitmap.new(width,24)    bit.font.color.alpha = blta = enabled ? 255 : 128    case item[0]    when -9; draw_container(VDEBUG::ENEMY_LIST_TEXT, item[1], bit)    when -8; draw_container(VDEBUG::ARMOR_LIST_TEXT, item[1], bit)    when -7; draw_container(VDEBUG::WEAPON_LIST_TEXT, item[1], bit)    when -6; draw_container(VDEBUG::DATA_LIST_TEXT, item[1], bit)    when -5; draw_container(VDEBUG::EVENT_LIST_TEXT, item[1], bit)    when -4; draw_container(VDEBUG::ACTOR_LIST_TEXT, item[1], bit)    when -3; draw_container(VDEBUG::ITEM_LIST_TEXT, item[1], bit)    when -2; draw_container(VDEBUG::VARIABLE_LIST_TEXT, item[1], bit)    when -1; draw_container(VDEBUG::SWITCH_LIST_TEXT, item[1], bit)    when 0; draw_player(item[1], bit, blta)    when 1; draw_switch(item[1], bit, blta)    when 2; draw_variable(item[1], bit, blta)    when 3; draw_item(item[1], bit, blta)    when 4; draw_actor(item[1], bit, blta)    when 5; draw_event(item[1], bit, blta)    when 6; draw_data(item[1], bit, blta)    when 7; draw_weapon(item[1], bit, blta)    when 8; draw_armor(item[1], bit, blta)    when 9; draw_enemy(item[1], bit, blta)    else; bit.dispose; bit = nil    end    bit  end#class Sprite_Debug#def draw_container(txt, n, bitmap)  def draw_container(txt, n, bitmap)    bitmap.draw_text(12, 0, bitmap.width-32, 24, txt)    bitmap.draw_text(0, 0, bitmap.width, 24, n > 0 ? "(#{n})" : "", 2)  end#class Sprite_Debug#def draw_player(item, bitmap, blta)  def draw_player(item, bitmap, blta)    if item != nil      bitmap.blt(0, 0, get_character_icon(item, true), Rect.new(0,0,24,24), blta)      bitmap.draw_text(24, 0, bitmap.width, 24, "(#{item.x};#{item.y})")      tile = ""      for i in [0, 1, 2]        tile += $game_map.data[item.x, item.y, i].to_s + (i != 2 ? ", " : "")      end      bitmap.draw_text(0, 0, bitmap.width-3, 24, "Tile: #{tile}", 2)      if (item.through || item.debug_through?)        bitmap.font.color = Color.new(0,0,0)        bitmap.font.out_color = Color.new(99,33,55)        bitmap.draw_text(0, 8, 23, 24, "T", 2)      end    end  end#class Sprite_Debug#def draw_switch(n, bitmap, blta)  def draw_switch(n, bitmap, blta)    if n != nil      name = $data_system.switches[n]      bitmap.blt(0, 0, get_text_icon("S"), Rect.new(0,0,24,24), blta)      bitmap.draw_text(24, 0, bitmap.width-32, 24, "[#{n}] #{name}:")      bitmap.draw_text(0, 0, bitmap.width, 24, "[O#{$game_switches[n] ? "N" : "FF"}]", 2)    end  end#class Sprite_Debug#def draw_variable(n, bitmap, blta)  def draw_variable(n, bitmap, blta)    if n != nil      name = $data_system.variables[n]      bitmap.blt(0, 0, get_text_icon("V"), Rect.new(0,0,24,24), blta)      bitmap.draw_text(24, 0, bitmap.width-32, 24, "[#{n}] #{name}:")      bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_variables[n].to_s, 2)    end  end#class Sprite_Debug#def draw_item(n, bitmap, blta)  def draw_item(n, bitmap, blta)    item = $data_items[n]    if item != nil      bitmap.blt(0, 0, get_icon(item.icon_index), Rect.new(0,0,24,24), blta)      bitmap.draw_text(24, 0, bitmap.width, 24, item.name)      bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_party.item_number(item), 2)    end  end#class Sprite_Debug#def draw_actor(n, bitmap, blta)  def draw_actor(n, bitmap, blta)    item = $game_actors[n]    if item != nil      iw = bitmap.width      bitmap.draw_text(24, 0, bitmap.width, 24, item.name)      wb = Window_Base.new(-(iw+32),-56,iw+32,56) # I get a Window_Base for its      wb.draw_actor_name(item, 24, 0)             #  useful draw_this, draw_that      gs = iw-w      vals = [-8, -2]      if $data_system.opt_display_tp        vals[0] -= 4; vals[1] -= 4; vals << 0        wb.draw_gauge(96, vals[2], 48+gs, item.tp_rate, wb.tp_gauge_color1, wb.tp_gauge_color2)      end      wb.draw_gauge(96, vals[0], 48+gs, item.hp_rate, wb.hp_gauge_color1, wb.hp_gauge_color2)      wb.draw_gauge(96, vals[1], 48+gs, item.mp_rate, wb.mp_gauge_color1, wb.mp_gauge_color2)      wb.draw_actor_icons(item, 154+gs, 0, 48)      wb.contents.font.size /= 2      wb.contents.font.color = Color.new(0,0,0)      wb.contents.font.out_color = wb.system_color      wb.contents.draw_text(5, 8, 12, 24, Vocab::level_a)      wb.contents.draw_text(iw-80+16, -4, 22, 24, Vocab::param(2)[0...3])      wb.contents.draw_text(iw-48+16, -4, 22, 24, Vocab::param(3)[0...3])      wb.contents.draw_text(iw-80+16, 6, 22, 24, Vocab::param(6)[0...3])      wb.contents.draw_text(iw-48+16, 6, 22, 24, Vocab::param(7)[0...3])      wb.contents.font.out_color = wb.normal_color      wb.contents.draw_text(0, 8, 23, 24, item.level, 2)      wb.contents.draw_text(iw-80+26, -4, 18, 24, item.atk, 2)      wb.contents.draw_text(iw-48+26, -4, 18, 24, item.def, 2)      wb.contents.draw_text(iw-80+26, 6, 18, 24, item.luk, 2)      wb.contents.draw_text(iw-48+26, 6, 18, 24, item.agi, 2)      bitmap.blt(0, 0, get_character_icon(item), Rect.new(0,0,24,24), blta)      bitmap.blt(0, 0, wb.contents, wb.contents.rect, blta)      wb.dispose    end  end#class Sprite_Debug#def draw_event(n, bitmap, blta)  def draw_event(n, bitmap, blta)    item = $game_map.events[n]    if item != nil      bitmap.blt(0, 0, get_character_icon(item, true), Rect.new(0,0,24,24), blta)      nm = VDEBUG::SHOW_EVENT_NAME ? item.name : ""      bitmap.draw_text(24, 0, bitmap.width-3, 24, "[#{item.id}](#{item.x};#{item.y})#{nm}")      loc = "ON:"      for ss in ['A', 'B', 'C', 'D']        loc += " " + ss + "," if $game_self_switches[[$game_map.map_id, item.id, ss]]      end      loc[-1] = "" if loc[-1] == ','      bitmap.draw_text(0, 0, bitmap.width, 24, loc, 2)      if (item.through || item.debug_through?)        bitmap.font.color = Color.new(0,0,0)        bitmap.font.out_color = Color.new(99,33,55)        bitmap.draw_text(0, 8, 23, 24, "T", 2)      end    else      bitmap.blt(0, 0, get_text_icon(n.to_s), Rect.new(0,0,24,24), blta)      bitmap.draw_text(0, 0, bitmap.width, 24, "EV#{sprintf("%03d", n)}", 1)    end  end#class Sprite_Debug#def draw_data(n, bitmap, blta)  def draw_data(n, bitmap, blta)    item = VDEBUG::useful_data[n]    if item != nil && item.is_a?(Array)      item = [item] unless item[0].is_a?(Array)      return if item.size < 1      str = ""      for val in item        str += val[0] + " #{val[1]} "      end      str[-1] = "" if str[-1] == " "      bitmap.draw_text(0, 0, bitmap.width, 24, str, 1)    end  end#class Sprite_Debug#def draw_weapon(n, bitmap, blta)  def draw_weapon(n, bitmap, blta)    item = $data_weapons[n]    if item != nil      bitmap.blt(0, 0, get_icon(item.icon_index), Rect.new(0,0,24,24), blta)      bitmap.draw_text(24, 0, bitmap.width, 24, item.name)      bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_party.item_number(item), 2)    end  end#class Sprite_Debug#def draw_armor(n, bitmap, blta)  def draw_armor(n, bitmap, blta)    item = $data_armors[n]    if item != nil      bitmap.blt(0, 0, get_icon(item.icon_index), Rect.new(0,0,24,24), blta)      bitmap.draw_text(24, 0, bitmap.width, 24, item.name)      bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_party.item_number(item), 2)    end  end#class Sprite_Debug#def draw_enemy(n, bitmap, blta)  def draw_enemy(n, bitmap, blta)    item = $game_troop.members[n-1]    iw = bitmap.width    if item != nil      wb = Window_Base.new(-(iw+32),-56,iw+32,56) # I get a Window_Base for its      wb.draw_actor_name(item, 24, 0)             #  useful draw_this, draw_that      gs = iw-w      vals = [-8, -2]      if $data_system.opt_display_tp        vals[0] -= 4; vals[1] -= 4; vals << 0        wb.draw_gauge(96, vals[2], 48+gs, item.tp_rate, wb.tp_gauge_color1, wb.tp_gauge_color2)      end      wb.draw_gauge(96, vals[0], 48+gs, item.hp_rate, wb.hp_gauge_color1, wb.hp_gauge_color2)      wb.draw_gauge(96, vals[1], 48+gs, item.mp_rate, wb.mp_gauge_color1, wb.mp_gauge_color2)      wb.draw_actor_icons(item, 154+gs, 0, 48)      wb.contents.font.size /= 2      wb.contents.font.color = Color.new(0,0,0)      wb.contents.font.out_color = wb.system_color      wb.contents.draw_text(iw-80+16, -4, 22, 24, Vocab::param(2)[0...3])      wb.contents.draw_text(iw-48+16, -4, 22, 24, Vocab::param(3)[0...3])      wb.contents.draw_text(iw-80+16, 6, 22, 24, Vocab::param(6)[0...3])      wb.contents.draw_text(iw-48+16, 6, 22, 24, Vocab::param(7)[0...3])      wb.contents.font.out_color = wb.normal_color      wb.contents.draw_text(0, 8, 23, 24, item.letter, 2)      wb.contents.draw_text(iw-80+26, -4, 18, 24, item.atk, 2)      wb.contents.draw_text(iw-48+26, -4, 18, 24, item.def, 2)      wb.contents.draw_text(iw-80+26, 6, 18, 24, item.luk, 2)      wb.contents.draw_text(iw-48+26, 6, 18, 24, item.agi, 2)      bitmap.blt(0, 0, get_enemy_icon(item), Rect.new(0,0,24,24), blta)      bitmap.blt(0, 0, wb.contents, wb.contents.rect, blta)      wb.dispose    else      bitmap.blt(0, 0, get_text_icon(n.to_s), Rect.new(0,0,24,24), blta)      bitmap.draw_text(0, 0, iw, 24, "...", 1)    end  end#class Sprite_Debug#def get_icon(index)  def get_icon(index) # get an icon with the Window_Base, cache it    @icache ||= {}    return @icache[index] if @icache[index]    wb = Window_Base.new(-56,-56,56,56)    wb.draw_icon(index,0,0)    bit = wb.contents.clone    wb.dispose    @icache[index] = bit    bit  end#class Sprite_Debug#def get_character_icon(chara, dir)  def get_character_icon(chara, dir = false) # get iconized character from...    @icache ||= {}    c_id = chara.character_name + "_" + chara.character_index.to_s + "_" +           (dir ? chara.direction.to_s : "2")    return @icache[c_id] if @icache[c_id]    if dir      cp = chara.clone      cp.transparent = true      sc = Sprite_Character.new(nil, cp) # ...a Sprite_Character or...      bit = Bitmap.new(24, 24)      bit.blt((24-sc.src_rect.width)/2,(24-sc.src_rect.height)/2,sc.bitmap, sc.src_rect)      sc.dispose      cp = nil    else      wb = Window_Base.new(-56,-56,56,56) # ...a Window_Base...      wb.draw_actor_graphic(chara,12,33)      bit = wb.contents.clone      wb.dispose    end    @icache[c_id] = bit # ...and cache it    bit  end#class Sprite_Debug#def get_text_icon(text)  def get_text_icon(text) # get an iconized text, like S, V or numbers    @icache ||= {}    return @icache[text] if @icache[text]    bit = Bitmap.new(24,24)    bit.font.shadow = false    bit.font.italic = true    bit.font.bold = true    bit.font.size -= 1    bit.font.color = Color.new(81,59,59, 128)    for i in -2..2; for j in -1..1 # draw black text many times around      bit.draw_text(i,j+2,24,24,text,1)    end; end    bit.blur # then blur it    bit.font.color = Color.new(255,255,255)    bit.draw_text(0,2,24,24,text,1)    @icache[text] = bit    bit  end#class Sprite_Debug#def get_enemy_icon(enemy)  def get_enemy_icon(enemy) # get an iconized enemy graphic    @icache ||= {}    id = enemy.battler_name + "_" + enemy.battler_hue.to_s    return @icache[id] if @icache[id]    bit = Bitmap.new(24,24)    sb = Sprite_Battler.new(nil, enemy) # get the bitmap from a Sprite_Battler    sb.opacity = 0 # don't wanna see the full battler    sb.update_bitmap # let the graphic be loaded    sb.dispose if sb.bitmap.nil? || sb.bitmap.disposed? # no graphic?    return bit if sb.disposed?    b2 = Bitmap.new(sb.src_rect.width, sb.src_rect.height) # I get a new bitmap    b2.blt(0, 0, sb.bitmap, sb.src_rect)                   #  within src_rect    sb.bitmap = b2 # disposing sb even its bitmap will be disposed    if b2.width <= 24 || b2.height <= 24 # if little bitmap just center it      bit.blt((24-b2.width)/2, (24-b2.height)/2, b2, b2.rect)    else # else resize      fact = (b2.width > b2.height ? b2.height : b2.width)/24.0      nw = b2.width/fact; nh = b2.height/fact      bit.stretch_blt(Rect.new((24-nw)/2, (24-nh)/2, nw, nh), b2, b2.rect)    end    sb.dispose    @icache[id] = bit    bit  end#class Sprite_Debug#def update()  def update    return if SceneManager.scene_is?(Scene_File)    move_around if Input.trigger?(VDEBUG::MOVE_AROUND_KEY)    for i in 0...@infos.compact.size      v = @infos      # set every new value and redraw if needed      draw_row(i) if @last_values != (@last_values = collect(v))    end    super  endend# * operation to create a Visible Debug options screenclass Window_VDList < Window_Selectable  # a silly, simple, window that handle a list  attr_reader :data#class Window_VDList#def initialize(x, y, list, ctd)  def initialize(x, y, list = [], ctd = false)    super(x, y, Graphics.width/2, Graphics.height-y)    @cantdisable = ctd    self.index = 0    set_list(list)  end#class Window_VDList#def item_max()  def item_max    @data ? @data.size : 1  end#class Window_VDList#def set_list(list)  def set_list(list)    @data = list    self.index = item_max - 1 if self.index > 0 && item_max < self.index    refresh  end#class Window_VDList#def enabled?(index)  def enabled?(index)    return true if @cantdisable    !$game_player.sdebug.infos.include?(@data[index])  end#class Window_VDList#def item()  def item    return @data[self.index]  end#class Window_VDList#def add_item(it)  def add_item(it)    @data.push(it)    set_list(@data.compact)  end#class Window_VDList#def remove_item(it)  def remove_item(it)    remove(@data.index(it))  end#class Window_VDList#def remove(index)  def remove(index)    return if index == nil    return if index < 0    return if index >= @data.size    @data.delete_at(index)    set_list(@data)  end#class Window_VDList#def refresh()  def refresh    create_contents    for i in 0...item_max      draw_item(i)    end  end#class Window_VDList#def draw_item(index)  def draw_item(index)    rect = item_rect(index)    self.contents.clear_rect(rect)    return if @data[index].nil?    im = $game_player.sdebug.get_item(@data[index], rect.width-4, enabled?(index))    self.contents.blt(rect.x, rect.y, im, im.rect) if im    im.dispose if im  endendclass Scene_VisibleDebug < Scene_Base  # a silly, simple, scene#class Scene_VisibleDebug#def start()  def start    super    @help_window = Window_Help.new(1)    @help_window.set_text(VDEBUG::HELP_TEXT)    ips = @help_window.height    # third list window parameter is the list, fourth is the cantdisable value    @mainlist_window = Window_VDList.new(0, ips, VDEBUG::collect_mainlist)    @debuglist_window = Window_VDList.new(@mainlist_window.width, ips,                                          $game_player.sdebug.infos, true)    @elementlist_window = Window_VDList.new(0, ips)    @elementlist_window.visible = false    @mainlist_window.activate    @mainlist_window.set_handler(:ok, method(:mainlist_ok))    @mainlist_window.set_handler(:cancel, method(:return_scene))    @mainlist_window.set_handler(:pageup, method(:mainlist_pag))    @mainlist_window.set_handler(:pagedown, method(:mainlist_pag))    @debuglist_window.set_handler(:ok, method(:debuglist_ok))    @debuglist_window.set_handler(:cancel, method(:return_scene))    @debuglist_window.set_handler(:pageup, method(:debuglist_pag))    @debuglist_window.set_handler(:pagedown, method(:debuglist_pag))    @elementlist_window.set_handler(:ok, method(:elementlist_ok))    @elementlist_window.set_handler(:cancel, method(:elementlist_cancel))  end#class Scene_VisibleDebug#def mainlist_ok()  def mainlist_ok    it = @mainlist_window.item    if it[0] >= 0 # if item's a item:      if @mainlist_window.enabled?(@mainlist_window.index) # add/remove        @debuglist_window.add_item(it)      else        @debuglist_window.remove_item(it)      end      $game_player.sdebug.infos = @debuglist_window.data # update      @mainlist_window.draw_item(@mainlist_window.index) # redraw      @mainlist_window.activate    else # if item's a group:      process_elementlist_open(it) # open the sub-list      @elementlist_window.activate    end  end#class Scene_VisibleDebug#def mainlist_pag()  def mainlist_pag    @debuglist_window.activate  end#class Scene_VisibleDebug#def debuglist_ok()  def debuglist_ok    @debuglist_window.remove(@debuglist_window.index) # remove the item    $game_player.sdebug.infos = @debuglist_window.data # update    @mainlist_window.refresh # redraw    @debuglist_window.activate  end#class Scene_VisibleDebug#def debuglist_pag()  def debuglist_pag    @mainlist_window.activate  end#class Scene_VisibleDebug#def elementlist_ok()  def elementlist_ok    it = @elementlist_window.item    if @elementlist_window.enabled?(@elementlist_window.index) # add/remove      @debuglist_window.add_item(it)    else      @debuglist_window.remove_item(it)    end    $game_player.sdebug.infos = @debuglist_window.data # update    @elementlist_window.draw_item(@elementlist_window.index) # redraw    @elementlist_window.activate  end#class Scene_VisibleDebug#def elementlist_cancel()  def elementlist_cancel    @mainlist_window.activate    @elementlist_window.close  end#class Scene_VisibleDebug#def process_elementlist_open(it)  def process_elementlist_open(it) # it contains the type and the size    # collect elements of the group    vals = []    for d in 1..it[1] # starting from 1, because there aren't IDs 0       vals << [it[0]*-1,d] # the type must be positive    end    # and let the window appears    @elementlist_window.set_list(vals)    @elementlist_window.index = 0    @elementlist_window.visible = true    @elementlist_window.open  endend





    Also visible on Pastebin.FAQ

    Saves will contain the actual in-game list. It is possible to load previous saves, but to continue using those done while using this script, if you remove it, you can use a little piece of code you can find in the demo.

    Credit and Thanks

    Thanks Silver Element for having me inspired the idea


    Author's Notes

    N/A


    本贴来自国际rpgmaker官方论坛作者:mikb89处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/visible-debug-1-2c.3458/

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-7-14 15:48 , Processed in 0.123055 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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