Belxebu Posted January 25, 2008 Share Posted January 25, 2008 Face_Menu V.1.0 By RinnegatamanteDescrizioneQuesto è il mio primo script,di sicuro esisterà gia qualcosa del genere ma io lo posto,in pratica permette di avere un menu con i Faces dei personaggi al posto dei CharaAutoreRinnegatamante (Ovvero io)AllegatiSostituite Window_Base con questo script: #============================================================================== # - Window_Base by Rinnegatamante #------------------------------------------------------------------------------ # FACE MENU V.1.0 #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # - Inizializzazione dell'oggetto # x : Coordinate X della finestra # y : Coordinate Y della finestra # width : Larhezza della finestra # height : Altezza della finestra #-------------------------------------------------------------------------- def initialize(x, y, width, height) super() @windowskin_name = $game_system.windowskin_name self.windowskin = RPG::Cache.windowskin(@windowskin_name) self.x = x self.y = y self.width = width self.height = height self.z = 100 end #-------------------------------------------------------------------------- # - Rilascia #-------------------------------------------------------------------------- def dispose # Verrà rilasciato se il bitmap dei contenuti di una finestra # viene sistemato if self.contents != nil self.contents.dispose end super end #-------------------------------------------------------------------------- # - Acquisizione del colore del carattere # n : Numero del colore del carattere (0~7) #-------------------------------------------------------------------------- def text_color(n) case n when 0 return Color.new(255, 255, 255, 255) when 1 return Color.new(128, 128, 255, 255) when 2 return Color.new(255, 128, 128, 255) when 3 return Color.new(128, 255, 128, 255) when 4 return Color.new(128, 255, 255, 255) when 5 return Color.new(255, 128, 255, 255) when 6 return Color.new(255, 255, 128, 255) when 7 return Color.new(192, 192, 192, 255) else normal_color end end #-------------------------------------------------------------------------- # - Acquisizione del colore del carattere: Generale #-------------------------------------------------------------------------- def normal_color return Color.new(255, 255, 255, 255) end #-------------------------------------------------------------------------- # - Acquisizione del colore del carattere: Invalidità #-------------------------------------------------------------------------- def disabled_color return Color.new(255, 255, 255, 128) end #-------------------------------------------------------------------------- # - Acquisizione del colore del carattere: Sistema #-------------------------------------------------------------------------- def system_color return Color.new(192, 224, 255, 255) end #-------------------------------------------------------------------------- # - Acquisizione del colore del carattere: Criticità #-------------------------------------------------------------------------- def crisis_color return Color.new(255, 255, 64, 255) end #-------------------------------------------------------------------------- # - Acquisizione del colore del carattere: Impossibilità #-------------------------------------------------------------------------- def knockout_color return Color.new(255, 64, 0) end #-------------------------------------------------------------------------- # - Aggiornamento frame #-------------------------------------------------------------------------- def update super # Viene risistemato quando l'interfaccia grafica(skin) di una finestra # viene cambiato if $game_system.windowskin_name != @windowskin_name @windowskin_name = $game_system.windowskin_name self.contents.font.name = "Arial" self.contents.font.size = 24 self.windowskin = RPG::Cache.windowskin(@windowskin_name) end end #-------------------------------------------------------------------------- # - Disegna la grafica # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_actor_graphic(actor, x, y) bitmap = RPG::Cache.character(actor.character_name, actor.character_hue) cw = bitmap.width / 4 ch = bitmap.height / 4 src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end #-------------------------------------------------------------------------- # - Disegna il face # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_actor_face(actor, x, y) face = RPG::Cache.picture(actor.name + "_face") cw = face.width ch = face.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y - ch, face, src_rect) end #-------------------------------------------------------------------------- # - Disegna il nome # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_actor_name(actor, x, y) self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.font.color = normal_color self.contents.draw_text(x, y, 120, 32, actor.name) end #-------------------------------------------------------------------------- # - Disegna la classe # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_actor_class(actor, x, y) self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.font.color = normal_color self.contents.draw_text(x, y, 236, 32, actor.class_name) end #-------------------------------------------------------------------------- # - Disegna il livello # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_actor_level(actor, x, y) self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.font.color = system_color self.contents.draw_text(x, y, 32, 32, "Lv") self.contents.font.color = normal_color self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2) end #-------------------------------------------------------------------------- # - Creazione della sequenza dello stato del personaggio per il disegno # actor : Personaggio # width : Ampiezza del disegno #-------------------------------------------------------------------------- def make_battler_state_text(battler, width, need_normal) # Viene acquisita l'ampiezza di una parentesi brackets_width = self.contents.text_size("[]").width # Viene creata la sequanza del carattere del nome dello stato text = "" for i in battler.states if $data_states[i].rating >= 1 if text == "" text = $data_states[i].name else new_text = text + "/" + $data_states[i].name text_width = self.contents.text_size(new_text).width if text_width > width - brackets_width break end text = new_text end end end # Quando la sequanza del carattere del nome dello stato è vuota, # allora diviene "[Normale]" if text == "" if need_normal text = "Normale" end else # Viene allegata una parentesi text = "[" + text + "]" end # Torna alla sequenza completata dei caratteri return text end #-------------------------------------------------------------------------- # - Disegna lo stato # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y # width : Ampiezza del disegno #-------------------------------------------------------------------------- def draw_actor_state(actor, x, y, width = 120) text = make_battler_state_text(actor, width, true) self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color self.contents.draw_text(x, y, width, 32, text) end #-------------------------------------------------------------------------- # - Disegna i punti EXP # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_actor_exp(actor, x, y) self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.font.color = system_color self.contents.draw_text(x, y, 40, 32, "EXP") self.contents.font.color = normal_color self.contents.draw_text(x + 40, y, 84, 32, actor.exp_s, 2) self.contents.draw_text(x + 124, y, 12, 32, "/", 1) self.contents.draw_text(x + 136, y, 84, 32, actor.next_exp_s) end #-------------------------------------------------------------------------- # - Disegna i punti HP # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y # width : Ampiezza del disegno #-------------------------------------------------------------------------- def draw_actor_hp(actor, x, y, width = 144) # Disegna la sequenza dei caratteri: "HP" self.contents.font.color = system_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(x, y, 32, 32, $data_system.words.hp) # Calcola se c'è qualche spazio che disegna i punti MaxHp if width - 32 >= 108 hp_x = x + width - 108 flag = true elsif width - 32 >= 48 hp_x = x + width - 48 flag = false end # Disegna i punti HP self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2) # Disegna i punti MaxHP if flag self.contents.font.color = normal_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1) self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s) end end #-------------------------------------------------------------------------- # - Disegna i punti MP # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y # width : Ampiezza del disegno #-------------------------------------------------------------------------- def draw_actor_sp(actor, x, y, width = 144) # Disegna la sequenza dei caratteri: "MP" self.contents.font.color = system_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(x, y, 32, 32, $data_system.words.sp) # Calcola se c'è qualche spazio che disegna i punti MaxMp if width - 32 >= 108 sp_x = x + width - 108 flag = true elsif width - 32 >= 48 sp_x = x + width - 48 flag = false end # Disegna i punti MP self.contents.font.color = actor.sp == 0 ? knockout_color : actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2) # Disegna i punti MaxMP if flag self.contents.font.color = normal_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1) self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s) end end #-------------------------------------------------------------------------- # - Disegna un parametro # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y # type : Tipo di parametro (0~6) #-------------------------------------------------------------------------- def draw_actor_parameter(actor, x, y, type) case type when 0 parameter_name = $data_system.words.atk parameter_value = actor.atk when 1 parameter_name = $data_system.words.pdef parameter_value = actor.pdef when 2 parameter_name = $data_system.words.mdef parameter_value = actor.mdef when 3 parameter_name = $data_system.words.str parameter_value = actor.str when 4 parameter_name = $data_system.words.dex parameter_value = actor.dex when 5 parameter_name = $data_system.words.agi parameter_value = actor.agi when 6 parameter_name = $data_system.words.int parameter_value = actor.int end self.contents.font.color = system_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(x, y, 120, 32, parameter_name) self.contents.font.color = normal_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2) end #-------------------------------------------------------------------------- # - Disegna il nome di un oggetto # item : Oggetto # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_item_name(item, x, y) if item == nil return end bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24)) self.contents.font.color = normal_color self.contents.font.name = "Arial" self.contents.font.size = 24 self.contents.draw_text(x + 28, y, 212, 32, item.name) end end Sostituite Window_MenuStatus con questo script: #============================================================================== # Window_MenuStatus by Rinnegatamante #------------------------------------------------------------------------------ # FACE MENU V.1.0 #============================================================================== class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # - Inizializzazione dell'oggetto #-------------------------------------------------------------------------- def initialize super(0, 0, 480, 480) self.contents = Bitmap.new(width - 32, height - 32) refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # - Aggiornamento #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.name = "Arial" self.contents.font.size = 24 @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 64 y = i * 116 actor = $game_party.actors[i] draw_actor_face(actor, x - 60, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) end end #-------------------------------------------------------------------------- # - Aggiornamento del rettangolo del cursore #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 self.cursor_rect.empty else self.cursor_rect.set(0, @index * 116, self.width - 32, 96) end end end Istruzioni per l'usoCopiate i due script qui sopra nei corrispettivi script gia esistenti poi per inserire un face al posto del chara basterà mettere delle immagini formato PNG(consigliatamente)nella cartella Pictures con il nome dell'eroe seguito da "_face" tipo se l'eroe si chiamerà Garland(non il chara o il battlers ma proprio il nome dell'eroe nel database)il file si dovrà chiamare Garland_face.Sono consigliate immagini di grandezza 55x55 perchè se piu grosse potrebbero andare sopra alla scritta delle statistiche dell'eroe(ma se er voi non fa niente va bene qualsiasi misura).Buon divertimento!!!Ecco uno screenshot:http://img242.imageshack.us/img242/45/facecharacy9.jpg Link to comment Share on other sites More sharing options...
Sleeping Leonhart Posted January 25, 2008 Share Posted January 25, 2008 Solo 2 consigli:1) Non ti conviene copiare l'intera classe Window_Base, bastava fare così: class Window_Base < Window #-------------------------------------------------------------------------- # - Disegna il face # actor : Personaggio # x : Posizione del disegno: Coordinate X # y : Posizione del disegno: Coordinate Y #-------------------------------------------------------------------------- def draw_actor_face(actor, x, y) face = RPG::Cache.picture(actor.name) cw = face.width ch = face.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y - ch, face, src_rect) end end Stesso discorso per la classe Window_MenuStatus, bastava fare così: class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # - Aggiornamento #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.name = "Arial" self.contents.font.size = 24 @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 64 y = i * 116 actor = $game_party.actors[i] draw_actor_face(actor, x - 60, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) end end end 2) Secondo me ti conveniva fare che le facce si basassero sul nome del character(il pupazzo di gioco). Questo perchè se uno nel suo gioco vuol far cambiare nome al personaggio non potrà mai sapere come si dovrà chiamare il face.Un altro appunto(lo so che sono rompip***e).Ma sei sicuro che le faccie coprano le scritte?In teoria dovrebbe essere il contrario(ma posso anche sbagliarmi).Bel primo lavoro comunque, continua così.PS:Ti conviene mettere gli script fra due spoiler altrimenti uno sta a sfogliare la pagina per mezz'ora XD http://img296.imageshack.us/img296/8784/csuserbarew2.pngScarica la Demo!Tutti i miei script(o quasi) li trovi Qui! Link to comment Share on other sites More sharing options...
Belxebu Posted January 25, 2008 Author Share Posted January 25, 2008 Si,volevo dire il contrario,il face viene coperto kmq per la comodità di mettere solo un pezzetto di script è vero ma c'è certa gente che dopo sbaglia a mettere e crea errori visto ke io ho anche dei piccoli commenti ad ogni parte e quindi ho piu righe negli script base.Poi quello di fare in base al pupazzo di gioco è un idea... 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