mikb89 Posted August 24, 2012 Share Posted August 24, 2012 Visible Debug 1.2cDescrizioneCapita che qualcosa vada storto fra switch e variabili. Non sai cosa succede, sai solo che non funziona come previsto. Qui entra in gioco questo script!http://img525.imageshack.us/img525/6813/visibledebugvxace.png FunzionalitàCon questo script puoi tenere sotto controllo una lista di parametri vari i cui cambiamenti saranno mostrati in tempo reale. Questa lista include:switch e variabili, switch locali degli eventi;grafica di eventi, giocatore, eroi, nemici;posizione e stato 'Come fantasma' di eventi e giocatore;id dei tile dove si trova il giocatore;numero di oggetti, armi, armature possedute;hp, mp, tp (se abilitato), atk, def, luk, agi, due stati dei combattenti;nomi & livello degli eroi (i nemici non li hanno);altre informazioni utili aggiunte dalle configurazioni (puoi vedere come sono fatte e aggiungerne di tue). Autoremikb89 AllegatiDemo multilingua v. 1.2 (1.33 MB)http://www.mediafire.com/?x569uhqn5qme7kx Istruzioni per l'usoInserite lo script sotto Materials. Le istruzioni sono fra i commenti. Script # Visible Debug v. 1.2c # VX Ace version # by mikb89 # Dettagli: # Capita che qualcosa vada storto fra switch e variabili. Non sai cosa # succede, sai solo che non funziona come previsto. # Con questo script puoi tenere sotto controllo una lista di parametri # vari i cui cambiamenti saranno mostrati in tempo reale. # Questa lista include: # - switch e variabili, switch locali degli eventi; # - grafica di eventi, giocatore, eroi, nemici; # - posizione e stato 'Come fantasma' di eventi e giocatore; # - id dei tile dove si trova il giocatore; # - numero di oggetti, armi, armature possedute; # - hp, mp, tp (se abilitato), atk, def, luk, agi, due stati dei combattenti; # - nomi & livello degli eroi (i nemici non li hanno); # - altre informazioni utili aggiunte dalle configurazioni (puoi vedere # come sono fatte e aggiungerne di tue). # Configurazioni: module VDEBUG # Lista di termini da personalizzare come si vuole: HELP_TEXT = "Invio: aggiungi/togli; Pag: cambia lista." # Aiutati! # Cosa appare alla pressione di F9: CALL_CLASSIC_DEBUG_TEXT = "Chiama Debug" CALL_VDEBUG_SETTINGS_TEXT = "Dati Visible Debug" # Nomi delle liste: SWITCH_LIST_TEXT = "Switch" VARIABLE_LIST_TEXT = "Variabili" ITEM_LIST_TEXT = "Oggetti" ACTOR_LIST_TEXT = "Eroi" EVENT_LIST_TEXT = "Eventi" DATA_LIST_TEXT = "Info" WEAPON_LIST_TEXT = "Armi" ARMOR_LIST_TEXT = "Armature" ENEMY_LIST_TEXT = "Nemici" SHOW_EVENT_NAME = true # Mostra nomi di eventi. Metti false per compatibilità. MOVE_AROUND_KEY = :ALT # Premendo questo più volte, l'hud del Visible Debug si sposterà nei quattro # angoli dello schermo e si nasconderà. # Dati disponibili: def self.collect_mainlist poss = [] # Puoi cambiare l'ordine, ma non puoi aggiungere voci. 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] # Non serve -1 perché è un 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 # A patto che tu non sappia quel che fai, naturalmente. end def self.useful_data da = [nil] # Il primo valore dev'essere nil. da << [["Party:", $game_party.members.size], # Apri un array, aggiungi. ["G:", $game_party.gold], # Primo valore: stringa mostrata... ["S:", $game_party.steps], # ...secondo valore: variabile col dato. ["T:", self.adjust_time(Graphics.frame_count)], # Ricorda le , ["Sav:", $game_system.save_count]] # Chiudi l'array. # Mostrerà: "Party: 3 G: 333 S: 33 T: 3:33 Sav: 3" con qualcosa # invece di 3. da << ["Timer:", self.adjust_time($game_timer.sec)] # Anche un elemento singolo può essere aggiunto. E la variabile # può anche venir fuori da una funzione def. da << [["Map id:", $game_map.map_id], ["Size:", $game_map.width], ["x", $game_map.height]] # Puoi, come esercizio, aggiungere ad esempio il nome mappa. :) # Aggiungi qui le tue info personalizzate! TU puoi. da # Semplicemente restituisce l'array. end def self.adjust_time(value) # Esempio di funzione. Formatta il tempo. value /= Graphics.frame_rate # Graphics.frame_rate = 1 secondo. sec = value % 60 # Ottiene i secondi. value -= sec # Li sottrae. "#{value/60}:#{sprintf("%02d",sec)}" # Restituisce il tempo come min:sec. end end #Codename: vdebug ($imported ||= {})[:mikb89_vdebug] = true # Licenza: # - Puoi chiedermi di includere il supporto per altri script, a patto che usino # il $imported[script] = true; # - Puoi modificare e anche ripostare i miei script, dopo una mia risposta. Per # ripostarli, comunque, devi aver fatto pesanti modifiche o porting, non puoi # fare un post con lo script così com'è; # - Puoi usare i miei script per fare quel che vuoi, da giochi gratis a liberi # a commerciali. Apprezzerei comunque essere messo al corrente di quello che # stai creando; # - Devi creditarmi, se usi questo script o parte di esso. # * operations to let the Visible Debug configuration be available class Scene_Map #class Scene_Map#def update_call_debug() <- rewritten def update_call_debug SceneManager.call(Scene_ChoiceDebug) if $TEST && Input.press?(:F9) end end class 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) end end class 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? end end # * 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 end end class << 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 end end class 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 end end class 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 : [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[i] == nil || @infos[i].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[i]) # 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[i] # set every new value and redraw if needed draw_row(i) if @last_values[i] != (@last_values[i] = collect(v)) end super end end # * operation to create a Visible Debug options screen class 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 end end class 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 end endVisibile anche su PasteBin Bugs e Conflitti NotiI salvataggi vengono modificati per contenere la lista di dati scelta. È possibile comunque caricare salvataggi precedenti, mentre per continuare ad usare quelli effettuati in presenza dello script, nel caso quest'ultimo venisse rimosso, è presente nella demo un piccolo codicino - per nulla invadente - da lasciare. Altri DettagliGrazie a @Silver Element per avermi ispirato l'idea (:Grazie a @Melosx per avermi supportato con un fastidioso bug ^^ Script!http://pociotosi.altervista.org/_altervista_ht/RM/BarSPOP.png http://pociotosi.altervista.org/_altervista_ht/RM/Bar2P.png http://pociotosi.altervista.org/_altervista_ht/RM/BarAPU_FMOD.png http://pociotosi.altervista.org/_altervista_ht/RM/BarPBS.png http://pociotosi.altervista.org/_altervista_ht/RM/BarRM2K.png http://pociotosi.altervista.org/_altervista_ht/RM/BarAMBISOUND.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceNo.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPPause.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceWIP.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPSoon.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/BarVDEBUG.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png http://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggettihttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.png Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato Roba scritta, guide:Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto Applicazioni:http://img849.imageshack.us/img849/5003/charamake64.pngmikb89's Character Maker ¦ http://img402.imageshack.us/img402/7794/rcp64.pngRM CopyPaste ¦ http://img804.imageshack.us/img804/4681/scripttemplater64.pngScript Templater ¦ http://img171.imageshack.us/img171/8703/icoconv.pngRM Chara Converter NEW Progetti!http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png Link to comment Share on other sites More sharing options...
Macha Posted August 24, 2012 Share Posted August 24, 2012 Giusto per sapere, l'eventuale rimozione di questo script dalla release finale del progetto va a incidere su qualcos'altro oltre ai salvataggi (che, imho, andrebbero cancellati comunque)? Ad ogni errore di grammatica una gazzella in Africa si sveglia e si overbuffa per ucciderti. http://i48.tinypic.com/n41av.pnghttp://img802.imageshack.us/img802/8754/rpg2sofficialchatuser.png http://img846.imageshack.us/img846/9296/fcp1.png http://img21.imageshack.us/img21/1892/fcp2.png http://img846.imageshack.us/img846/9296/fcp1.png http://www.rpg2s.net/cover_contest/icons/cc_special.pnghttp://img9.imageshack.us/img9/2034/jhsupport.png Link to comment Share on other sites More sharing options...
mikb89 Posted August 24, 2012 Author Share Posted August 24, 2012 No, soltanto sui salvataggi, e come hai detto il problema si pone solo se decidi di togliere lo script mentre makeri. Nella release finale non ci sono i salvataggi quindi non c'è problema. Script!http://pociotosi.altervista.org/_altervista_ht/RM/BarSPOP.png http://pociotosi.altervista.org/_altervista_ht/RM/Bar2P.png http://pociotosi.altervista.org/_altervista_ht/RM/BarAPU_FMOD.png http://pociotosi.altervista.org/_altervista_ht/RM/BarPBS.png http://pociotosi.altervista.org/_altervista_ht/RM/BarRM2K.png http://pociotosi.altervista.org/_altervista_ht/RM/BarAMBISOUND.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceNo.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPPause.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceWIP.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPSoon.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/BarVDEBUG.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png http://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggettihttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.png Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato Roba scritta, guide:Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto Applicazioni:http://img849.imageshack.us/img849/5003/charamake64.pngmikb89's Character Maker ¦ http://img402.imageshack.us/img402/7794/rcp64.pngRM CopyPaste ¦ http://img804.imageshack.us/img804/4681/scripttemplater64.pngScript Templater ¦ http://img171.imageshack.us/img171/8703/icoconv.pngRM Chara Converter NEW Progetti!http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png Link to comment Share on other sites More sharing options...
Macha Posted August 24, 2012 Share Posted August 24, 2012 Ottimo, allora molto utile come script e senza problemi di utilizzo! Ad ogni errore di grammatica una gazzella in Africa si sveglia e si overbuffa per ucciderti. http://i48.tinypic.com/n41av.pnghttp://img802.imageshack.us/img802/8754/rpg2sofficialchatuser.png http://img846.imageshack.us/img846/9296/fcp1.png http://img21.imageshack.us/img21/1892/fcp2.png http://img846.imageshack.us/img846/9296/fcp1.png http://www.rpg2s.net/cover_contest/icons/cc_special.pnghttp://img9.imageshack.us/img9/2034/jhsupport.png Link to comment Share on other sites More sharing options...
mikb89 Posted August 29, 2012 Author Share Posted August 29, 2012 Ti ringrazio Macha :3 Script!http://pociotosi.altervista.org/_altervista_ht/RM/BarSPOP.png http://pociotosi.altervista.org/_altervista_ht/RM/Bar2P.png http://pociotosi.altervista.org/_altervista_ht/RM/BarAPU_FMOD.png http://pociotosi.altervista.org/_altervista_ht/RM/BarPBS.png http://pociotosi.altervista.org/_altervista_ht/RM/BarRM2K.png http://pociotosi.altervista.org/_altervista_ht/RM/BarAMBISOUND.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceNo.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPPause.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceWIP.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPSoon.png http://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPNo.png http://pociotosi.altervista.org/_altervista_ht/RM/BarVDEBUG.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RVXOK.pnghttp://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png http://pociotosi.altervista.org/_altervista_ht/RM/RXPOK.png Personaggi animati nei menu ¦ Tecniche combinate stile Chrono Trigger ¦ Equipaggiamento dal menù oggettihttp://pociotosi.altervista.org/_altervista_ht/RM/RVXAceOK.png Mappatura tasti ¦ Leader indipendente dal gruppo ¦ Movimenti limitati giocatore ¦ Memorizzazione permanente switch e variabili ¦ Direzione fissa avanzata ¦ Prezzo vendita oggetti personalizzato Roba scritta, guide:Un mio vecchio corso base di Ruby Link al passo 1 2 3 4 5 6 ¦ Tutorial su seno, coseno e resto Applicazioni:http://img849.imageshack.us/img849/5003/charamake64.pngmikb89's Character Maker ¦ http://img402.imageshack.us/img402/7794/rcp64.pngRM CopyPaste ¦ http://img804.imageshack.us/img804/4681/scripttemplater64.pngScript Templater ¦ http://img171.imageshack.us/img171/8703/icoconv.pngRM Chara Converter NEW Progetti!http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now