Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4139 miembros registrados.
El último usuario registrado es pepus2008.

Nuestros miembros han publicado un total de 84794 mensajes en 12069 argumentos.

[XP] Script insertar código numérico en mensaje

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Script insertar código numérico en mensaje

Mensaje por Wecoc el 2017-01-02, 03:24

Éste script permite insertar código numérico en un mensaje de un modo distinto al habitual, más estilo keyboard típico de un interfono con contraseña.

Os explico rápidamente de donde sale éste script: Hace un tiempo leí un pedido de ésto en una comunidad inglesa, el script de respuesta funcionaba pero no exactamente como yo hubiera querido. Como se comentó algo así en el Topic de aportación de ideas hace tiempo, he decidido cambiarlo y ponerlo aquí. No requiere créditos del autor ni míos, así que es un script libre, aunque hecho entre los dos.

Screen



Sirve básicamente para contraseñas, y quizá sistemas de teléfono combinándolo con un buen engine.

Instrucciones

Para llamarlo usad en Llamar Script ésto: call_keypass, que es lo mismo que poner $game_temp.keypass_calling = true
Justo después podréis acceder al código insertado usando $game_temp.keypass_result
Ejemplo: > Condiciones y Efectos - Script - $game_temp.keypass_result == "1234"

También podéis comprobar si se ha abortado pulsado el botón cancelar, porque luego el resultado vale ERROR, así que se puede comprobar de la misma forma en caso que ocurra algo distinto si cancelas que si insertar el número incorrecto.

Sería así: > Condiciones y Efectos - Script - $game_temp.keypass_result == "ERROR"

Antes de la llamada principal call_keypass se pueden controlar ciertos parámetros, a parte de los que alteran la ventana de mensaje, que también funcionarán con ésta.
Se hace con llamar script, os pongo lo que hace cada uno al activarlo / desactivarlo:

$game_temp.keypass_max_char = (número) --> Número de carácteres a mostrar, por defecto 4. No hay límite pero por defecto en pantalla caben unos 10.
$game_temp.keypass_can_cancel = (true / false) --> Activado permite cancelar si pulsas el botón de cancelar, similar a las elecciones de mensaje. Por defecto vale true.
$game_temp.keypass_can_back = (true / false) --> Al pulsar cancelar y no estar en el primer índice, borra el valor del índice actual y vuelve al anterior. Por defecto vale true.
$game_temp.keypass_hash = (true / false) --> Activa la almohadilla (#) como un carácter válido más. Por defecto vale false.


Una vez terminado el evento conviene limpiar todos los parámetros para que la próxima vez que se quiera acceder al sistema no ocurran cosas raras.
Para ello en llamar script usad: $game_temp.clear_keypass

Lo más inteligente es justo al terminar el proceso hacer igualar una variable a $game_temp.keypass_result, y justo después hacer que ese keypass_result vuelva a valer "", de ese modo aunque se limpien los parámetros justo luego de usarse el sistema se puede acceder al último resultado cuando se quiera.

Puede parecer complicado pero es intuitivo y no deberíais tener problemas.
También podéis editarlo tanto como queráis.

Script

Ponedlo encima de main:

Código:
#==============================================================================
#------------------------------------------------------------------------------
#======================= * ! K E Y P A S S ! * ================================
#============== Authors: Kratos & Wecoc (no credits required) =================
#=========================== Version 1.0 ======================================
#------------------------------------------------------------------------------
#==============================================================================

#==============================================================================
# ** Game_Temp
#==============================================================================

class Game_Temp
  
  attr_accessor :keypass_calling
  attr_accessor :keypass_max_char
  attr_accessor :keypass_can_cancel
  attr_accessor :keypass_can_back
  attr_accessor :keypass_hash
  attr_accessor :keypass_result
  
  alias keypass_ini initialize unless $@
  def initialize
    keypass_ini
    @keypass_calling = false
    clear_keypass
  end
  
  def clear_keypass
    @keypass_max_char = 4
    @keypass_can_cancel = true
    @keypass_can_back = true
    @keypass_hash = false
    @keypass_result = ''
  end
end

#==============================================================================
# ** Interpreter
#==============================================================================

class Interpreter
  def call_keypass
    $game_temp.keypass_calling = true
  end
end

#==============================================================================
# ** Scene_Map
#==============================================================================

class Scene_Map
  def initialize
    @keypass_count = -1
  end
  
  alias keypass_upd update unless $@
  def update
    if @edit_window != nil or @input_window != nil
      update_keypass
      return
    end
    keypass_upd
    if $game_temp.keypass_calling == true
      call_keypass
    end
  end
  
  def call_keypass
    $game_temp.keypass_calling = false
    @edit_window = Window_KeyEdit.new($game_temp.keypass_max_char)
    @input_window = Window_KeyInput.new
  end
  
  def update_keypass
    @edit_window.update
    @input_window.update
    if @keypass_count > 0
      @keypass_count -= 1
      return
    end
    if @keypass_count == 0
      @edit_window.fade_out
      @input_window.fade_out
      if @edit_window.opacity == 0
        @edit_window.dispose
        @input_window.dispose
        @edit_window = nil
        @input_window = nil
        @keypass_count = -1
      end
      return
    end
    if Input.repeat?(Input::B)
      if @edit_window.index > 0
        if $game_temp.keypass_can_back == false
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.cancel_se)
        @edit_window.back
      else
        if $game_temp.keypass_can_cancel == false
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.cancel_se)
        $game_temp.keypass_result = 'ERROR'
        @edit_window.dispose
        @input_window.dispose
        @edit_window = nil
        @input_window = nil
      end
      return
    end
    #if Input.trigger?(Input::C)
    #  if @input_window.character == nil
    #    if @edit_window.name.size != $game_temp.keypass_max_char
    #      $game_system.se_play($data_system.buzzer_se)
    #      return
    #    end
    #    $game_system.se_play($data_system.decision_se)
    #    $game_temp.keypass_result = @edit_window.name
    #    @edit_window.dispose
    #    @input_window.dispose
    #    @edit_window = nil
    #    @input_window = nil
    #    return
    #  end
    #  if @edit_window.index == $game_temp.name_max_char
    #    $game_system.se_play($data_system.buzzer_se)
    #    return
    #  end
    #  $game_system.se_play($data_system.decision_se)
    #  @edit_window.add(@input_window.character)
    #  return
    #end
    if Input.trigger?(Input::C)
      if $game_temp.keypass_hash == false and @input_window.character == '#'
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @edit_window.add(@input_window.character)
      if @edit_window.name.size == $game_temp.keypass_max_char
        $game_temp.keypass_result = @edit_window.name
        @keypass_count = 20
      end
    end
  end
end

#==============================================================================
# ** Window_KeyEdit
#==============================================================================

class Window_KeyEdit < Window_Base
  
  attr_reader   :name
  attr_reader   :index
  
  BLANK = "_"
  CODE_X = 8
  CODE_Y = 0
  
  def initialize(max_char)
    super(80, 304, 480 - 128, 160)
    case $game_system.message_position
    when 0  # up
      self.y = 16
    when 1  # middle
      self.y = 160
    when 2  # down
      self.y = 304
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = 160
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z = 9998
    @name = ""
    @max_char = max_char
    @index = 0
    @fade_out = false
    refresh
  end

  def restore_default
    @name = ""
    @index = 0
    refresh
  end
  
  def add(character)
    if @index < @max_char and character != ""
      @name += character
      @index += 1
      @index = [@index, @max_char - 1].min
      refresh
    end
  end

  def back
    if @index > 0
      name_array = @name.split(//)
      @name = ""
      for i in 0...name_array.size-1
        @name += name_array[i]
      end
      @index -= 1
      refresh
    end
  end

  def refresh
    self.contents.clear
    name_array = @name.split(//)
    for i in 0...@max_char
      c = name_array[i]
      c = BLANK if c == nil
      self.contents.draw_text(CODE_X + i * 28, CODE_Y, 28, 32, c, 1)
    end
  end

  def update_cursor_rect
    self.cursor_rect.set(CODE_X + @index * 28, CODE_Y, 28, 32)
  end

  def fade_out
    @fade_out = true
  end
  
  def update
    super
    if @fade_out == true
      self.contents_opacity = 0
      self.opacity -= 48
      return
    end
    update_cursor_rect
  end
end

#==============================================================================
# ** Window_KeyInput
#==============================================================================

class Window_KeyInput < Window_Base
  CHARACTER_TABLE =
  [ '7','8','9',
    '4','5','6',
    '1','2','3',
    '0','',"#" ]

  def initialize
    super(432, 304, 128, 160)
    case $game_system.message_position
    when 0  # up
      self.y = 16
    when 1  # middle
      self.y = 160
    when 2  # down
      self.y = 304
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = 160
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z = 9998
    @index = 9
    @fade_out = false
    refresh
  end

  def character
    return CHARACTER_TABLE[@index]
  end

  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    for i in 0...(CHARACTER_TABLE.size - 1)
      x = i % 3 * 32
      y = i / 3 * 32
      self.contents.draw_text(x, y, 32, 32, CHARACTER_TABLE[i], 1)
    end
    if $game_temp.keypass_hash == false
      self.contents.font.color = disabled_color
    end
    i = (CHARACTER_TABLE.size - 1)
    x = i % 3 * 32
    y = i / 3 * 32
    self.contents.draw_text(x, y, 32, 32, '#', 1)
  end

  def update_cursor_rect
    if @index == 9
      self.cursor_rect.set(@index % 3 * 32, @index / 3 * 32, 64, 32)
    else
      self.cursor_rect.set(@index % 3 * 32, @index / 3 * 32, 32, 32)      
    end
  end

  def fade_out
    @fade_out = true
  end
  
  def update
    super
    if @fade_out == true
      self.contents_opacity = 0
      self.opacity -= 48
      return
    end
    if @index >= 3
      if Input.repeat?(Input::UP)
        $game_system.se_play($data_system.cursor_se)
        @index -= 3
      end
    end
    if @index < 9
      if Input.repeat?(Input::DOWN)
        $game_system.se_play($data_system.cursor_se)
        @index += 3
      end
    end
    @index = 9 if @index == 10
    if @index % 3 < 2
      if Input.repeat?(Input::RIGHT)
        $game_system.se_play($data_system.cursor_se)
        if @index == 9
          @index = 11
        else
          @index += 1
        end
      end
    end
    if @index % 3 > 0
      if Input.repeat?(Input::LEFT)
        $game_system.se_play($data_system.cursor_se)
        if @index == 11
          @index = 9
        else
          @index -= 1
        end
      end
    end
    update_cursor_rect
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 9218

Gracias : 493

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script insertar código numérico en mensaje

Mensaje por Producciones The Golden el 2017-01-02, 04:27

Que lástima que no me sirva para mi proyecto... sino lo robaría con mucho gusto! okno te daría tus respectivos créditos aunque no los pidas XD, buen aporte!
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 639

Gracias : 60

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script insertar código numérico en mensaje

Mensaje por Ledai el 2017-01-02, 13:09

Lo mismo digo yo, no lo voy a usar, pero tiene toda la pinta de ser uno de esos aportes que con el tiempo recuerdas y quieres añadirlo a tu próximo proyecto!!! así que me lo guardaré en la biblioteca... voy a tener que abrir una sección solo para los aportes de Wecoc!
Gracias!
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 2354

Gracias : 170

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script insertar código numérico en mensaje

Mensaje por Marshmello el 2017-01-02, 19:24

Excelente script, buscaba algo similar desde hace ya un tiempo para simular una caja fuerte para mí proyecto, y este me viene de maravilla :D

Gran aporte Wecocio.

_________________
"I'm so alone... Trying to find my way back home to you..."
PREMIOS:
avatar
Marshmello
Moderador
Moderador



Créditos 1214

Gracias : 81

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Script insertar código numérico en mensaje

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.