MundoBezier

NameBox

Jan 27th, 2021 (edited)
1,604
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.58 KB | None | 0 0
  1. #===============================================================================
  2. #                              Script : NameBox (ver. 4)
  3. #                               Autor : Bezier
  4. #-------------------------------------------------------------------------------
  5. #  Muestra un cuadro de texto auxiliar encima del cuadro de dialogos.
  6. #  Para usarlo, escribir en un cuadro de script el siguiente código:
  7. #     NameBox.load('Nombre')
  8. #  Desde la versión 4, se recomienda pasar el texto usando comillas simples
  9. #  para poder parsear comandos. Los comandos que están implementados son:
  10. #     NameBox.load('\PN')     # Muestra el nombre del jugador
  11. #     NameBox.load('\v[n]')   # Muestra el contenido de la variable n
  12. #-------------------------------------------------------------------------------
  13. # - UPDATES -
  14. # 23/02/21 -> Versión 2
  15. #   Muestra el nombre del personaje si se le pasa /PN como nombre a mostrar
  16. # 09/03/21 -> Versión 3
  17. #   Usa el mismo WindowSkin que la caja de mensajes para borde del cuadro
  18. #     Créditos por feedback: Pokémon Ultimate (Twitter: @Pkmn_Ultimate)
  19. # 17/06/21 -> Versión 4
  20. #   Parsea comandos versión 1. Debe escribirse con comillas simples
  21. #     Muestra el nombre del personaje con si se pasa '\PN'
  22. #     Muestra el nombre de la variable si se pasa '\v[num]' siendo num el
  23. #       número de la variable que se desea mostrar
  24. #     Créditos por feedback: Ravel
  25. #
  26. #-------------------------------------------------------------------------------
  27. #  Paso 1: ¿Cómo integrarlo?
  28. #
  29. #  Editar la función Kernel.pbMessageDisplay del script Messages:
  30. #
  31. #  Añadir esta línea mas o menos a mitad de la función
  32. #     (busca el comentario con muchas # como referencia)
  33. #  [...]
  34. #  ########## Show text #############################
  35. #  NameBox.show(msgwindow) # <- Añadir esta línea para mostrar el NameBox.
  36. #  msgwindow.text=text
  37. #  [...]
  38. #
  39. #  Y esta otra linea antes de terminar la función
  40. #  [...]
  41. #  end
  42. #    NameBox.hide # <- Añadir esta línea para ocultar el NameBox junto con el cuadro de texto
  43. #    return ret
  44. #  end
  45. #  [...]
  46. #
  47. #-------------------------------------------------------------------------------
  48. #  Paso 2: ¿Cómo se usa?
  49. #
  50. #  Hacer el cambio del Paso 1.
  51. #  Cambiar el nombre de la skin a usar NAMEBOXWINSKIN (más abajo)
  52. #
  53. #  Para usarlo en un evento tan solo hay que llamar al script:
  54. #     NameBox.load("Nombre")
  55. #
  56. #  Esto creará un cuadro con el texto "Nombre" y se mostrará encima del cuadro
  57. #  de dialogo cada vez que se escriba un texto, hasta que se desactive.
  58. #
  59. #  Para desactivarlo, llamar al script:
  60. #     NameBox.dispose
  61. #
  62. #  Si se quiere poner color a un personaje, tan solo hay que añadir una entrada
  63. #  en la lista NPCCOLORS (más abajo) con el nombre del personaje y
  64. #  los colores para la base y la sombra del texto.
  65. #
  66. #-------------------------------------------------------------------------------
  67. #  Paso 3: Compatibilidades (Opcional)
  68. #
  69. #  Si se está usando el script de comandos de JESS, que muestra un cuadro
  70. #  similar a este, hay que editar este script en vez del de Messages para que
  71. #  todos los textos que existan en eventos ya programados sean compatibles.
  72. #  Del mismo modo que en el Paso 1, hay que añadir la llamada al NameBox en la
  73. #  función Kernel.pbMessageDisplay.
  74. #  Si no se encuentra el comentario:
  75. #      ########## Show text #############################
  76. #  habrá que buscar la línea:
  77. #      msgwindow.text=text
  78. #  y hacer la llamada a NameBox antes de asignar el texto:
  79. #
  80. #  [...]
  81. #  atTop=(msgwindow.y==0)
  82. #  NameBox.show(msgwindow) # <- Añadir esta línea para mostrar el NameBox.
  83. #  msgwindow.text=text
  84. #  [...]
  85. #
  86. #  Y esta otra linea antes de terminar la función
  87. #  [...]
  88. #  end
  89. #    NameBox.hide # <- Añadir esta línea para ocultar el NameBox junto con el cuadro de texto
  90. #    return ret
  91. #  end
  92. #  [...]
  93. #===============================================================================
  94.  
  95. module NameBox
  96.  
  97.   # Nombre de la skin para el cuadro en "Graphics/Windowskins"
  98.   # NAMEBOXWINSKIN = "speech hgss 1" [OBSOLETO]
  99.  
  100.   # Posición del NameBox en pantalla
  101.   NAMEBOX_X = 14
  102.   NAMEBOX_Y = 228
  103.  
  104.   # Colores asociados a cada personaje
  105.   NPCCOLORS = {
  106.     # "Nombre" => [ColorBase, Sombra]
  107.     "Prof. Oak" => [Color.new(48,80,200), Color.new(208,208,208)],
  108.     "Candela" => [Color.new(224,8,8), Color.new(208,208,208)]
  109.   }
  110.  
  111.  
  112.   # Carga el NameBox con el nombre indicado pero no lo deja visible
  113.   # Se hará visible cuando se muestre un cuadro de diálogo
  114.   def self.load(name)
  115.     @currentName = name.clone
  116.    
  117.     # Parseo antiguo para mostrar el nombre de personaje
  118.     @currentName.gsub!(/\/[Pp][Nn]/,$Trainer.name) if $Trainer
  119.     # Parseo nuevo para mostrar el nombre de personaje
  120.     @currentName.gsub!(/\\[Pp][Nn]/,$Trainer.name) if $Trainer
  121.     # Parsea la variable con el formato '\v[n]'
  122.     @currentName.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  123.    
  124.     @namebox.dispose if @namebox
  125.     @namebox = Window_AdvancedTextPokemon.new(@currentName)
  126.     @namebox.visible = false
  127.     # @namebox.setSkin("Graphics/Windowskins/#{NAMEBOXWINSKIN}") [OBSOLETO]
  128.    
  129.     # Usa la skin de la caja de mensajes para el cuadro del namebox
  130.     # Cambio realizado por Pokémon Ultimate
  131.     @namebox.setSkin(MessageConfig.pbGetSpeechFrame())
  132.    
  133.     @namebox.resizeToFit(@namebox.text, Graphics.width)
  134.     @namebox.x = NAMEBOX_X
  135.     @namebox.y = NAMEBOX_Y
  136.     setTextColor()
  137.   end
  138.  
  139.   # Muestra el NameBox (Debe estár integrada la llamada del Paso 1)
  140.   def self.show(msgwindow)
  141.     if @namebox && msgwindow
  142.       @namebox.viewport = msgwindow.viewport
  143.       @namebox.z = msgwindow.z
  144.       @namebox.visible = true
  145.     end
  146.   end
  147.  
  148.   # Oculta el NameBox pero no lo destruye, para que se muestre junto al próximo texto
  149.   def self.hide
  150.     @namebox.visible = false if @namebox
  151.   end
  152.  
  153.   # Destruye el NameBox para que no se muestre con el siguiente texto
  154.   def self.dispose
  155.     @namebox.dispose if @namebox
  156.     @namebox = nil
  157.   end
  158.  
  159.   # Devuelve si el NameBox está activo
  160.   def self.isEnabled?
  161.     return @namebox != nil
  162.   end
  163.  
  164.   # Función interna que cambia el color del texto asociado al nombre actual
  165.   def self.setTextColor()
  166.     if @namebox
  167.       if NPCCOLORS[@currentName]
  168.         colors = NPCCOLORS[@currentName]
  169.       else
  170.         colors = getDefaultTextColors(@namebox.windowskin)
  171.       end
  172.      
  173.       @namebox.baseColor = colors[0]
  174.       @namebox.shadowColor = colors[1]
  175.      
  176.       # Es necesario actualizar el texto para que repinte con los colores nuevos
  177.       @namebox.text = @currentName
  178.     end
  179.   end
  180. end
Add Comment
Please, Sign In to add comment