LordOfTheTitans Posted March 5, 2013 Share Posted March 5, 2013 (edited) Introduzione:il "Name Input" di base per XP è scadente e non permette di scrivere con la tastiera, dunque, per il mio progetto ho cercato uno script per migliorarlo e, su un forum inglese ho trovato questo script.Caratteristiche:1 finestre trasparenti 2 facilmente modificabile 3 in inglese 4 facilissimo da usareProblemi:Alcuni tasti sono sbagliati ad esempio se premo " ' " esce un altro simboloCompatibilità:non testato con l'SDKCredits: Cyclope(Creazione Dello Script) Nattmath(Creazione Dell'imput keyboard script) Blizzard (Creazione Dei controlli personalizzabili) Istruzioni:creare un nuovo script sopra main ed inserire questo. #============================================================================== # Modyfied Scene_Name # By Cyclope #------------------------------------------------------------------------------ #´ Instructions # Place above main #------------------------------------------------------------------------------ # Credit: # Nattmath (For making Scene_Name Leters Modification) # Blizzard (For making Custom Cotrols) # Cyclope (For modifying Scene_Name Leters Modification and Scene_Name) #============================================================================== #============================================================================== # ** Window_Instructions #------------------------------------------------------------------------------ # This window displays full status specs on the status screen. #============================================================================== class Window_Instruction < Window_Base #-------------------------------------------------------------------------- # * Object Initialization # actor : actor #-------------------------------------------------------------------------- def initialize super( 0, 400, 640, 80) self.contents = Bitmap.new(width - 32, height - 32) refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.name = "Arial" self.contents.font.size = 18 self.contents.font.color = normal_color #Change this text to whatever instructions u want to have! self.contents.draw_text(26, 9, 500, 32, "Enter = OK") self.contents.draw_text(128, 9, 500, 32, "Esc/Backspace = Delete") self.contents.draw_text(336, 9, 500, 32, "abc... = Text") self.contents.draw_text(448, 9, 500, 32, "Shift = Uppercase") end end #============================================================================== # ** Window_TextName #------------------------------------------------------------------------------ # super ( 224, 32, 224, 80) #============================================================================== class Window_TextName < Window_Base def initialize super ( 224, 32, 224, 80) self.contents = Bitmap.new(width - 32, height - 32) @actor = $game_actors[$game_temp.name_actor_id] refresh end def refresh self.contents.clear draw_actor_graphic(@actor, 20, 48) self.contents.font.name = "Arial" self.contents.font.size = 40 self.contents.font.color = normal_color self.contents.draw_text(64, 0, 96, 32, "Name:") end end #============================================================================== # ** Window_NameEdit #------------------------------------------------------------------------------ # This window is used to edit your name on the input name screen. #============================================================================== class Window_NameEdit < Window_Base #-------------------------------------------------------------------------- # * Object Initialization # actor : actor # max_char : maximum number of characters #-------------------------------------------------------------------------- def initialize(actor, max_char) super(16, 128, 608, 96) self.contents = Bitmap.new(width - 32, height - 32) @actor = actor @name = actor.name @max_char = max_char # Fit name within maximum number of characters name_array = @name.split(//)[0...@max_char] @name = "" for i in 0...name_array.size @name += name_array[i] end @default_name = @name @index = name_array.size refresh update_cursor_rect end #-------------------------------------------------------------------------- # * Return to Default Name #-------------------------------------------------------------------------- def restore_default @name = @default_name @index = @name.split(//).size refresh update_cursor_rect end #-------------------------------------------------------------------------- # * Add Character # character : text character to be added #-------------------------------------------------------------------------- def add(character) if @index < @max_char and character != "" @name += character @index += 1 refresh update_cursor_rect end end #-------------------------------------------------------------------------- # * Delete Character #-------------------------------------------------------------------------- def back if @index > 0 # Delete 1 text character name_array = @name.split(//) @name = "" for i in 0...name_array.size-1 @name += name_array[i] end @index -= 1 refresh update_cursor_rect end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear # Draw name self.contents.font.size = 42 name_array = @name.split(//) for i in 0...@max_char c = name_array[i] if c == nil c = "_" end x = 304 - @max_char * 14 + i * 26 self.contents.draw_text(x, 15, 28, 42, c, 1) end end #-------------------------------------------------------------------------- # * Cursor Rectangle Update #-------------------------------------------------------------------------- def update_cursor_rect x = 304 - @max_char * 14 + @index * 26 self.cursor_rect.set(x, 55, 20, 5) end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super update_cursor_rect end end #============================================================================== # ** Window_NameInput #------------------------------------------------------------------------------ # This window is used to select text characters on the input name screen. #============================================================================== class Window_NameInput < Window_Base CHARACTER_TABLE = [ "", "" ] #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 128, 640, 0) self.contents = Bitmap.new(width - 32, height - 32) @index = 0 refresh end #-------------------------------------------------------------------------- # * Text Character Acquisition #-------------------------------------------------------------------------- def character return CHARACTER_TABLE[@index] end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super end end #============================================================================== # ** Scene_Name #------------------------------------------------------------------------------ # This class performs name input screen processing. #============================================================================== class Scene_Name #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Get actor @actor = $game_actors[$game_temp.name_actor_id] # Make windows @edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char) @edit_window.back_opacity = 160 @input_window = Window_NameInput.new @inst_window = Window_Instruction.new @inst_window.back_opacity = 160 @nametext_window = Window_TextName.new @nametext_window.back_opacity = 160 @spriteset = Spriteset_Map.new # Execute transition Graphics.transition # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed if $scene != self break end end # Prepare for transition Graphics.freeze # Dispose of windows @edit_window.dispose @input_window.dispose @inst_window.dispose @nametext_window.dispose @spriteset.dispose end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Update windows @edit_window.update @input_window.update @nametext_window.update @inst_window.update # If C button was pressed if Input.trigger?(Input::C) # If cursor position is at [OK] if @input_window.character == nil # If name is empty if @edit_window.name == "" # If name is empty if @edit_window.name == "" # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Play decision SE $game_system.se_play($data_system.decision_se) return end # Change actor name @actor.name = @edit_window.name # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to map screen $scene = Scene_Map.new return end # If cursor position is at maximum if @edit_window.index == $game_temp.name_max_char # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # If text character is empty if @input_window.character == "" # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Play decision SE $game_system.se_play($data_system.decision_se) # Add text character @edit_window.add(@input_window.character) return end end end #============================================================================== # module Input #============================================================================== module Input #---------------------------------------------------------------------------- # Simple ASCII table #---------------------------------------------------------------------------- Key = {'A' => 65, 'B' => 66, 'C' => 67, 'D' => 68, 'E' => 69, 'F' => 70, 'G' => 71, 'H' => 72, 'I' => 73, 'J' => 74, 'K' => 75, 'L' => 76, 'M' => 77, 'N' => 78, 'O' => 79, 'P' => 80, 'Q' => 81, 'R' => 82, 'S' => 83, 'T' => 84, 'U' => 85, 'V' => 86, 'W' => 87, 'X' => 88, 'Y' => 89, 'Z' => 90, '0' => 48, '1' => 49, '2' => 50, '3' => 51, '4' => 52, '5' => 53, '6' => 54, '7' => 55, '8' => 56, '9' => 57, 'NumberPad 0' => 45, 'NumberPad 1' => 35, 'NumberPad 2' => 40, 'NumberPad 3' => 34, 'NumberPad 4' => 37, 'NumberPad 5' => 12, 'NumberPad 6' => 39, 'NumberPad 7' => 36, 'NumberPad 8' => 38, 'NumberPad 9' => 33, 'F1' => 112, 'F2' => 113, 'F3' => 114, 'F4' => 115, 'F5' => 116, 'F6' => 117, 'F7' => 118, 'F8' => 119, 'F9' => 120, 'F10' => 121, 'F11' => 122, 'F12' => 123, ';' => 186, '=' => 187, ',' => 188, '-' => 189, '.' => 190, '/' => 220, '\\' => 191, '\'' => 222, '[' => 219, ']' => 221, '`' => 192, 'Backspace' => 8, 'Tab' => 9, 'Enter' => 13, 'Shift' => 16, 'Left Shift' => 160, 'Right Shift' => 161, 'Left Ctrl' => 162, 'Right Ctrl' => 163, 'Left Alt' => 164, 'Right Alt' => 165, 'Ctrl' => 17, 'Alt' => 18, 'Esc' => 27, 'Space' => 32, 'Page Up' => 33, 'Page Down' => 34, 'End' => 35, 'Home' => 36, 'Insert' => 45, 'Delete' => 46, 'Arrow Left' => 37, 'Arrow Up' => 38, 'Arrow Right' => 39, 'Arrow Down' => 40, 'Mouse Left' => 1, 'Mouse Right' => 2, 'Mouse Middle' => 4, 'Mouse 4' => 5, 'Mouse 5' => 6} # default button configuration UP = [Key['Arrow Up']] LEFT = [Key['Arrow Left']] DOWN = [Key['Arrow Down']] RIGHT = [Key['Arrow Right']] A = [Key['Shift']] B = [Key['Esc'], Key['NumberPad 0'], Key['X']] C = [Key['Space'], Key['Enter'], Key['C']] X = [Key['A']] Y = [Key['S']] Z = [Key['D']] L = [Key['Q'], Key['Page Down']] R = [Key['W'], Key['Page Up']] F5 = [Key['F5']] F6 = [Key['F6']] F7 = [Key['F7']] F8 = [Key['F8']] F9 = [Key['F9']] SHIFT = [Key['Shift']] CTRL = [Key['Ctrl']] ALT = [Key['Alt']] # All keys ALL_KEYS = (0...256).to_a # Win32 API calls GetKeyboardState = Win32API.new('user32','GetKeyboardState', 'P', 'I') GetKeyboardLayout = Win32API.new('user32', 'GetKeyboardLayout','L', 'L') MapVirtualKeyEx = Win32API.new('user32', 'MapVirtualKeyEx', 'IIL', 'I') ToUnicodeEx = Win32API.new('user32', 'ToUnicodeEx', 'LLPPILL', 'L') # some other constants DOWN_STATE_MASK = 0x80 DEAD_KEY_MASK = 0x80000000 # data @state = "\0" * 256 @triggered = Array.new(256, false) @pressed = Array.new(256, false) @released = Array.new(256, false) @repeated = Array.new(256, 0) #---------------------------------------------------------------------------- # update # Updates input. #---------------------------------------------------------------------------- def self.update # get current language layout @language_layout = GetKeyboardLayout.call(0) # get new keyboard state GetKeyboardState.call(@state) # for each key ALL_KEYS.each {|key| # if pressed state if @state[key] & DOWN_STATE_MASK == DOWN_STATE_MASK # not released anymore @released[key] = false # if not pressed yet if !@pressed[key] # pressed and triggered @pressed[key] = true @triggered[key] = true else # not triggered anymore @triggered[key] = false end # update of repeat counter @repeated[key] < 17 ? @repeated[key] += 1 : @repeated[key] = 15 # not released yet elsif !@released[key] # if still pressed if @pressed[key] # not triggered, pressed or repeated, but released @triggered[key] = false @pressed[key] = false @repeated[key] = 0 @released[key] = true end else # not released anymore @released[key] = false end} end #---------------------------------------------------------------------------- # dir4 # 4 direction check. #---------------------------------------------------------------------------- def Input.dir4 return 2 if Input.press?(DOWN) return 4 if Input.press?(LEFT) return 6 if Input.press?(RIGHT) return 8 if Input.press?(UP) return 0 end #---------------------------------------------------------------------------- # dir8 # 8 direction check. #---------------------------------------------------------------------------- def Input.dir8 down = Input.press?(DOWN) left = Input.press?(LEFT) return 1 if down && left right = Input.press?(RIGHT) return 3 if down && right up = Input.press?(UP) return 7 if up && left return 9 if up && right return 2 if down return 4 if left return 6 if right return 8 if up return 0 end #---------------------------------------------------------------------------- # trigger? # Test if key was triggered once. #---------------------------------------------------------------------------- def Input.trigger?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @triggered[key]} end #---------------------------------------------------------------------------- # press? # Test if key is being pressed. #---------------------------------------------------------------------------- def Input.press?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @pressed[key]} end #---------------------------------------------------------------------------- # repeat? # Test if key is being pressed for repeating. #---------------------------------------------------------------------------- def Input.repeat?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @repeated[key] == 1 || @repeated[key] == 16} end #---------------------------------------------------------------------------- # release? # Test if key was released. #---------------------------------------------------------------------------- def Input.release?(keys) keys = [keys] unless keys.is_a?(Array) return keys.any? {|key| @released[key]} end #---------------------------------------------------------------------------- # get_character # vk - virtual key # Gets the character from keyboard input using the input locale identifier # (formerly called keyboard layout handles). #---------------------------------------------------------------------------- def self.get_character(vk) # get corresponding character from virtual key c = MapVirtualKeyEx.call(vk, 2, @language_layout) # stop if character is non-printable and not a dead key return '' if c < 32 && (c & DEAD_KEY_MASK != DEAD_KEY_MASK) # get scan code vsc = MapVirtualKeyEx.call(vk, 0, @language_layout) # result string is never longer than 2 bytes (Unicode) result = "\0" * 2 # get input string from Win32 API length = ToUnicodeEx.call(vk, vsc, @state, result, 2, 0, @language_layout) return (length == 0 ? '' : result) end #---------------------------------------------------------------------------- # get_input_string # Gets the string that was entered using the keyboard over the input locale # identifier (formerly called keyboard layout handles). #---------------------------------------------------------------------------- def self.get_input_string result = '' # check every key ALL_KEYS.each {|key| # if repeated if self.repeat?(key) # get character from keyboard state c = self.get_character(key) # add character if there is a character result += c if c != '' end} # empty if result is empty return '' if result == '' # convert string from Unicode to UTF-8 return self.unicode_to_utf8(result) end #---------------------------------------------------------------------------- # get_input_string # string - string in Unicode format # Converts a string from Unicode format to UTF-8 format as RGSS does not # support Unicode. #---------------------------------------------------------------------------- def self.unicode_to_utf8(string) result = '' string.unpack('S*').each {|c| # characters under 0x80 are 1 byte characters if c < 0x0080 result += c.chr # other characters under 0x800 are 2 byte characters elsif c < 0x0800 result += (0xC0 | (c >> 6)).chr result += (0x80 | (c & 0x3F)).chr # the rest are 3 byte characters else result += (0xE0 | (c >> 12)).chr result += (0x80 | ((c >> 12) & 0x3F)).chr result += (0x80 | (c & 0x3F)).chr end} return result end end #============================================================================== # ** Scene_Name Leters Modification Made By Nattmath and Improved Cyclope #------------------------------------------------------------------------------ # Makes you imput stuf with the keyboard #============================================================================== class Scene_Name alias name_input_update update def update (65...91).each{|i| if Input.trigger?(i) $game_system.se_play($data_system.decision_se) let = Input::Key.index(i) let = let.downcase unless Input.press?(Input::Key['Shift']) @edit_window.add(let) end} (48...58).each{|i| if Input.trigger?(i) $game_system.se_play($data_system.decision_se) let = Input::Key.index(i) @edit_window.add(let) end} (186...192).each{|i| if Input.trigger?(i) $game_system.se_play($data_system.decision_se) let = Input::Key.index(i) @edit_window.add(let) end} (219...222).each{|i| if Input.trigger?(i) $game_system.se_play($data_system.decision_se) let = Input::Key.index(i) @edit_window.add(let) end} if Input.trigger?(Input::Key['Backspace']) @edit_window.back end if Input.trigger?(Input::Key['Arrow Left']) @edit_window.back end if Input.trigger?(Input::Key['Enter']) # If name is empty if @edit_window.name == "" # Return to default name @edit_window.restore_default # If name is empty if @edit_window.name == "" # Play buzzer SE $game_system.se_play($data_system.buzzer_se) return end # Play decision SE $game_system.se_play($data_system.decision_se) return end # Change actor name @actor.name = @edit_window.name # Play decision SE $game_system.se_play($data_system.decision_se) # Switch to map screen $scene = Scene_Map.new end if Input.trigger?(Input::Key['Space']) @actor.name = @edit_window.name $game_system.se_play($data_system.decision_se) @edit_window.add(" ") end name_input_update end end Edited March 15, 2013 by Apo applicato tag code partecipante a gli eventi: http://www.rpg2s.net/forum/uploads/monthly_12_2013/post-6-0-30804200-1387900946.pngPROGETTI SOSPESI:TROPPI Link to comment Share on other sites More sharing options...
Guardian of Irael Posted March 5, 2013 Share Posted March 5, 2013 Alcuni tasti sono sbagliati ad esempio se premo " ' " esce un altro simboloForse perchè utilizza la tastiera inglese appunto! ^ ^ Bene per il nuovo script con tutti i tasti :D^ ^ (\_/)(^ ^) <----coniglietto rosso, me! (> <) Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^ http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^ http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^ REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^ 🖤http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gifhttp://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3http://i.imgur.com/MpaUphY.jpg by Idriu E:3Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44) http://i.imgur.com/PgUqHPm.pngUfficiale"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.pngGrazie Testament XD Fan n°1 ufficiale di PQ! :DVivail Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che nonavevo programmi di grafica per fare un banner su questo pc XD (ora ho dinuovo il mio PC veramente :D) Rosso Guardiano dellahttp://i.imgur.com/Os5rvhx.pngRpg2s RPG BY FORUM:Nome: Darth Reveal PV totali 2PA totali 16Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.Bozze vesti non definitive qui.Equipaggiamento:Indossa:60$ e 59$ divisi in due tasche interneLevaitanSpada a due mani elsa lungaGuanti del Defender (2PA)Anello del linguaggio animale (diventato del Richiamo)Scrinieri da lanciere (2 PA)Elmo del Leone (5 PA)Corazza del Leone in Ferro Corrazzato (7 PA) ZAINO (20) contenente:Portamonete in pelle di cinghiale contenente: 100$Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)CordaBottiglia di idromeleForma di formaggioTorcia (serve ad illuminare, dura tre settori)Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)Ampolla BiancaSemi di Balissa CAVALLO NORMALE + SELLA (30 +2 armi) contentente:66$Benda di pronto soccorso x3Spada a due maniFagotto per Adara (fazzoletto ricamato) Link to comment Share on other sites More sharing options...
LordOfTheTitans Posted March 5, 2013 Author Share Posted March 5, 2013 l'avevo pensato anche io ^^ comunque penso si possa modificare senza problemi partecipante a gli eventi: http://www.rpg2s.net/forum/uploads/monthly_12_2013/post-6-0-30804200-1387900946.pngPROGETTI SOSPESI:TROPPI 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