¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

Reputación del mensaje :100% (2 votos)

Calayax

avatar
La verdad es que lo estoy haciendo para el Engine de Mascota y al ir queriendo facilitar la interfaz llegué a la conclusión de que no hay razón alguna para que se limite a mascota. De ahí que me naciera compartirlo aunque informo que
no sé muy bien que cambios habría que realizar en él para aplicarlo a más de un personaje.

Está lleno de notas que fui haciendo en mi proceso de desarrollo así que puede tener muuuuuuuuuucha cosa que a primera vista parezca basura. Por regla general el $mascota define todo (gráficos, stats, nv, nombre, etc) de modo que solo habría que cambiar el ID al comienzo del Script.

La variable 10 es una variable que acumula la cantidad de stats base a repartir (definela en 100 y tendrás 100 puntos para repartir entre los stats de un personaje)

Ataque, Defensa Fisica y Defensa Magica no se pueden aumentar, porque el atk, pdef y mdef no están definidas como funciones, las definí metiendo mano y la verdad es que no fue buena idea. De modo que di un paso al lado, sé que los maestros del scripting y del maker tendrán más conocimiento de como funcionan ese par de cosas pero la verdad es que "me la ganó" (ya que las tres características se mejoran con el equipamento)

El window2 es meramente decorativo, pensaba utilizar una window_help pero de momento no me he puesto a estudiarla para entender como funciona y hacer que cuando el cursor esté en fuerza diga "Da click en aceptar para aumentar en uno la fuerza de tu personaje"

La clasificación es algo que utilizo en el engine de mascota para definir la cantidad de stats a repartir en relacion a cuan bien has criado a tu mascota, pero es totalmente omitible borrandolo (no deberia generar problemas)

EDITO: De todos modos jugueteando he llegado a un edit que hace que si no hay lo puedas usar igual, tras cambiar:

Código:
  clasificacion = $game_actors[13].name
  d = RPG::Cache.picture(clasificacion)  #Clasificación.
  self.contents.blt(92, 156, d, d.rect)
  end



Por

Código:
 clasificacion = $game_actors[13].name
  if clasificacion = !nil
    ""
  else
  d = RPG::Cache.picture(clasificacion)  #Clasificación.
  if d = !nil
    ""
  else
  self.contents.blt(92, 156, d, d.rect)
  end
  end

Básicamente lo que hace la primera parte es que si el nombre del actor no está definido entonces no coloque la imagen, lo segundo hace que si no hay una imagen con el nombre del actor no coloque la imagen, de ese modo no generaría problemas ni bugs por no implementar el sistema de clasificación.

La forma en que lo tengo implementado es la siguiente:



y las imagenes (por si las quieren):
Código:
https://www.mediafire.com/file/9zsma75xnvz3y5y/Pictures.rar




Los update que permiten que se actualice la pantalla inicial y el stats a repartir es un copypaste del update del playtime , de modo que no sé bien como funciona (sólo que está mal hecho)

Adicional a ello si me diera el animo y supiera como hacerlo podría hacerlo como una "nueva" scene al ver el status de tus personajes.






Ejemplo en un proyecto aparte:





Créditos son necesarios, igualmente a Isra, Wecoc y Silvanash

Script con anotaciones de Calayax

Código:
#==============================================================================
# CalFamiliarSystem (CFS) Script
#------------------------------------------------------------------------------
# Esta parte está enfocada en determinar el menú al que tendrás acceso para
# conocer las estadísticas de tu Familiar (Mascota), así como su salud, imagen,
# rando, especie, etc.
#------------------------------------------------------------------------------
#==============================================================================

class Scene_CFS
 
  def initialize
#------------------------------------------------------------------------------
# Al cambiar el valor del $game_actors[ID] podrás hacerlo funcionar con la mascota independiente
# de que actor utilices para la creación y sin tener que editar mayormente el script
#------------------------------------------------------------------------------ 
  $mascota = $game_actors[10]
  end
 
  def main
    @window = Window_Familiar.new
    @window1 = Window_Banner.new
    @window2 = Window_Stats_Total.new
    s1 = "Fuerza"
    s2 = "Destreza"
    s3 = "Agilidad"
    s4 = "Magia"
    @command_window = Window_Command.new(240, [s1, s2, s3, s4])
    @command_window.back_opacity = 255 # Opacidad de la ventana
    @command_window.x = 520 - @command_window.width / 2
    @command_window.y = 64
    @command_window.index = 0
   
   
    Graphics.transition
    loop do
    Graphics.update
    Input.update
    update
    if $scene != self
      break
      end
    end
   
    Graphics.freeze
    @window.dispose
    @window1.dispose
    @window2.dispose
    @command_window.dispose
  end
  def update
    @window.update
    @window1.update
    @window2.update
    @command_window.update
    mascota = $mascota
  if Input.trigger?(Input::B)
    $scene = Scene_Map.new
  end
    if Input.trigger?(Input::C)
      if $game_variables[10] > 0
      case @command_window.index
      when 0 #Fuerza
      mascota.str += 1
        $game_variables[10] -= 1
      when 1 #Destreza
        mascota.dex += 1
        $game_variables[10] -= 1
      when 2 #Agilidad
        mascota.agi += 1
        $game_variables[10] -= 1
      when 3 #Magia
        mascota.int += 1
        $game_variables[10] -= 1
        end
    else
      #Si No es >0
      end
    end
  end
end


#--------------------------------------------------------------------------
# VENTANA CON LA IMAGEN, STADISTICAS, NIVEL ETC, ETC (TERMINAR)
#--------------------------------------------------------------------------
=begin
Necesita primero que se defina la variable "mascota".
mascota = $game_actors[ID] donde el ID es el número del actor que se ha definido
para la mascota. (Battlers, Nombre, Stats, Etc)

De ese modo al utilizar los sigueintes comandos se permitirá que se dibujen las
estadísticas determinadas.
#------------------------------------------------------------------------------
self.contents.clear
draw_actor_name(mascota, x, y) #Nombre
draw_actor_class(mascota, x, y) #Profesion
draw_actor_level(mascota, x, y) #Nivel
draw_actor_state(mascota, x, y) #Status
draw_actor_hp(mascota, x, y, width) #PV
draw_actor_sp(mascota, x, y, width) #MP
end
end
#------------------------------------------------------------------------------
Ahora un poco de "descubrimientos" a diferencia de lo anterior donde "name,class,
level, state, etc" ayudan a entender de forma intuitiva los parámetros están
construidos de la siguiente forma:
#------------------------------------------------------------------------------
draw_actor_parameter(mascota, x, y, N)
#------------------------------------------------------------------------------
Donde N es un número del 0 al 6 (los que siguen)

0 = Ataque
1 = Defensa Física
2 = Defensa Mágica
3 = Fuerza
4 = Destreza
5 = Agilidad
6 = Magia
#------------------------------------------------------------------------------
=end
#------------------------------------------------------------------------------
 
class Window_Familiar < Window_Base
  def initialize
    super (0, 64, 400, 416) # Determina el tamaño de la ventana.
    self.contents = Bitmap.new (width - 32, height - 32)
    refresh
  end
  def refresh
    self.contents.clear
    mascota = $mascota
    #mascota = $game_actors[10] # Define el actor que será utilizado más abajo (por defecto el que maneja la mascota).
    draw_actor_name(mascota, 4 + 144, 32)
    draw_actor_class(mascota, 4 + 144, 64)
    draw_actor_level(mascota, 4 + 144, 96)
    draw_actor_hp(mascota, 4 + 144, 128, 160)
    draw_actor_sp(mascota, 4 + 144, 160, 160)
    draw_actor_parameter(mascota, 0, 224, 0)
    draw_actor_parameter(mascota, 0, 256, 1)
    draw_actor_parameter(mascota, 0, 288, 2)
    draw_actor_parameter(mascota, 200, 224, 3)
    draw_actor_parameter(mascota, 200, 256, 4)
    draw_actor_parameter(mascota, 200, 288, 5)
    draw_actor_parameter(mascota, 200, 320, 6)
    self.contents.font.color = normal_color
   
    mascota_pic = RPG::Cache.battler(mascota.battler_name, mascota.battler_hue)
    #Esta configuración permite que se centre la imagen, pero se centra a la
    #ventana, de modo que no funciona de momento...
    #dx = mascota_pic.width / 2
    #dy = mascota_pic.height
    #self.contents.blt(dx, dy, mascota_pic, mascota_pic.rect)
    self.contents.blt(0, 0, mascota_pic, mascota_pic.rect)
 
=begin

 case $game_variables[1] #Variable del tipo mascota
  when 1
    cerbero = RPG::Cache.picture("Cerbero") # Muestra el Battler "Conejo".
    self.contents.blt(0, 0, cerbero, cerbero.rect)
  when 2
    cerbero = RPG::Cache.picture("Cerbero") # Muestra el Battler "Perro".
    self.contents.blt(0, 0, cerbero, cerbero.rect)
  when 3
    lobo = RPG::Cache.picture("Lobo") # Muestra el Battler "Lobo".
    self.contents.blt(0, 0, lobo, lobo.rect)
  when 4
    cerbero = RPG::Cache.picture("Cerbero") # Muestra el Battler "Cerbero".
    self.contents.blt(0, 0, cerbero, cerbero.rect)
  end
 
Esta formula me la ha explicado Wecoc, es para facilitar la forma anterior

bitmap = case $game_variables[1]
      when 1 then RPG::Cache.picture("Cerbero") # Conejo
      when 2 then RPG::Cache.picture("Cerbero") # Perro
      when 3 then RPG::Cache.picture("Lobo") # Lobo
      when 4 then RPG::Cache.picture("Cerbero") # Cerbero
    end
    self.contents.blt(0, 0, bitmap, bitmap.rect)
 
#==============================================================================
No tengo ni la más remota idea de como funciona esto, pero al tenerlo actualiza
los valores, motivo de que le tenga aquí de todos modos. (trolololo)
#===============================================================================
=end

  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end

=begin
#==============================================================================
Anteriormente usaba lo que coloco a continuación como comentario, es viable (no lo niego)
lo que hace es que si la variable 17 vale 1, vale 2, vale 3 (etc) vaya mostrando una imagen
la defino con el nombre (sss) digo cual es en la carpeta Picture y luego la ubico en
la ventana.
#==============================================================================

  case $game_variables[17] #Variable de la clasificación.
  when 1
    sss = RPG::Cache.picture("SSS") # Muestra la Clasificación.
    self.contents.blt(92, 156, sss, sss.rect)
  when 2
    ss = RPG::Cache.picture("SS") # Muestra la Clasificación.
    self.contents.blt(92, 156, ss, ss.rect)
  when 3
    s = RPG::Cache.picture("S") # Muestra la Clasificación.
    self.contents.blt(92, 156, s, s.rect)
  when 4
    a = RPG::Cache.picture("A") # Muestra la Clasificación.
    self.contents.blt(92, 156, a, a.rect)
  when 5
    b = RPG::Cache.picture("B") # Muestra la Clasificación.
    self.contents.blt(92, 156, b, b.rect)
  when 6
    c = RPG::Cache.picture("C") # Muestra la Clasificación.
    self.contents.blt(92, 156, c, c.rect)
  when 7
    d = RPG::Cache.picture("D") # Muestra la Clasificación.
    self.contents.blt(92, 156, d, d.rect)   
  end
 
#==============================================================================
Pero todo ello es resumible en lo que continua; Les cuento, en la versión que trabajaba la felicidad
cambia el nombre del actor 13 para que se lea "S, SS, etc" de modo tal que para
hacer válido el trozo de script anterior definí la variable 17 para que tuviera el
valor 1,2,3,4, etc justo bajo la felicidad para que al llamarse de un nombre se
dieran las distintas situaciones. Con la ayuda de Wecoc y Silvanash logré el resultado
#==============================================================================   
=end 

  clasificacion = $game_actors[13].name
  if $game_actors[13].name = !nil
    ""
  else
    d = RPG::Cache.picture(clasificacion)  #Clasificación.
  if d = !nil
    ""
  else
  self.contents.blt(92, 156, d, d.rect)
  end
end


#==============================================================================
#------------------------------------------------------------------------------
# "Banner" (ventana superior)
#==============================================================================

class Window_Banner < Window_Base
def initialize
    super(0, 0, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
end
#==============================================================================
#------------------------------------------------------------------------------
# Pruebas
#==============================================================================
=begin

class Window_Stats_Mascota < Window_Selectable
def initialize
    super (400, 64, 240, 416)
    self.contents = Bitmap.new(width - 32,  commands.size * 32 + 32)
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
      end
  def refresh
    self.contents.clear
    mascota = $game_actors[10]
    draw_actor_parameter(mascota, 0, 128, 0)
    draw_actor_parameter(mascota, 0, 160, 1)
    draw_actor_parameter(mascota, 0, 192, 2)
    draw_actor_parameter(mascota, 0, 224, 3)
    draw_actor_parameter(mascota, 0, 256, 4)
    draw_actor_parameter(mascota, 0, 288, 5)
    draw_actor_parameter(mascota, 0, 320, 6)
  end
end
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
class Window_Stats_Mascota < Window_Selectable
  def initialize
    super (400, 64, 240, 416) # Determina el tamaño de la ventana.
    self.contents = Bitmap.new (width - 32, height - 32)
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    mascota = $game_actors[10]
    draw_actor_parameter(mascota, 250, 128, 0)
    draw_actor_parameter(mascota, 250, 160, 1)
    draw_actor_parameter(mascota, 250, 192, 2)
    draw_actor_parameter(mascota, 250, 224, 3)
    draw_actor_parameter(mascota, 250, 256, 4)
    draw_actor_parameter(mascota, 250, 288, 5)
    draw_actor_parameter(mascota, 250, 320, 6)

  end
end
#==============================================================================
Un CopyPaste de PlayTime con algunas ediciones para que lea la variable 10 del juego
(Que posee los valores sumados para repartir Stats segun la calificación)
#==============================================================================
=end

class Window_Stats_Total < Window_Base
 
  def initialize
    super(400, 224, 240, 60)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, "Stats a Repartir")
    stats = $game_variables[10]
    self.contents.draw_text(80, 0, 120, 32, stats.to_s, 2)
  end
#--------------------------------------------------------------------------
# * Frame Update (No entiendo como funciona, pero si lo borro me da problemas)
#--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end




Script sin Anotaciones

Código:
#==============================================================================
# Pantalla de Stats (?) (de Calayax) Script
#------------------------------------------------------------------------------
# Créditos son necesarios, igualmente a Isra, Wecoc y Silvanash
#------------------------------------------------------------------------------
#==============================================================================

class Scene_CFS
 
  def initialize
  $mascota = $game_actors[10]
  end
 
  def main
    @window = Window_Familiar.new
    @window1 = Window_Banner.new
    @window2 = Window_Stats_Total.new
    s1 = "Fuerza"
    s2 = "Destreza"
    s3 = "Agilidad"
    s4 = "Magia"
    @command_window = Window_Command.new(240, [s1, s2, s3, s4])
    @command_window.back_opacity = 255 # Opacidad de la ventana
    @command_window.x = 520 - @command_window.width / 2
    @command_window.y = 64
    @command_window.index = 0
   
   
    Graphics.transition
    loop do
    Graphics.update
    Input.update
    update
    if $scene != self
      break
      end
    end
   
    Graphics.freeze
    @window.dispose
    @window1.dispose
    @window2.dispose
    @command_window.dispose
  end
  def update
    @window.update
    @window1.update
    @window2.update
    @command_window.update
    mascota = $mascota
  if Input.trigger?(Input::B)
    $scene = Scene_Map.new
  end
    if Input.trigger?(Input::C)
      if $game_variables[10] > 0
      case @command_window.index
      when 0 #Fuerza
      mascota.str += 1
        $game_variables[10] -= 1
      when 1 #Destreza
        mascota.dex += 1
        $game_variables[10] -= 1
      when 2 #Agilidad
        mascota.agi += 1
        $game_variables[10] -= 1
      when 3 #Magia
        mascota.int += 1
        $game_variables[10] -= 1
        end
    else
      #Si No es >0
      end
    end
  end
end

class Window_Familiar < Window_Base
  def initialize
    super (0, 64, 400, 416) # Determina el tamaño de la ventana.
    self.contents = Bitmap.new (width - 32, height - 32)
    refresh
  end
  def refresh
    self.contents.clear
    mascota = $mascota
    draw_actor_name(mascota, 4 + 144, 32)
    draw_actor_class(mascota, 4 + 144, 64)
    draw_actor_level(mascota, 4 + 144, 96)
    draw_actor_hp(mascota, 4 + 144, 128, 160)
    draw_actor_sp(mascota, 4 + 144, 160, 160)
    draw_actor_parameter(mascota, 0, 224, 0)
    draw_actor_parameter(mascota, 0, 256, 1)
    draw_actor_parameter(mascota, 0, 288, 2)
    draw_actor_parameter(mascota, 200, 224, 3)
    draw_actor_parameter(mascota, 200, 256, 4)
    draw_actor_parameter(mascota, 200, 288, 5)
    draw_actor_parameter(mascota, 200, 320, 6)
    self.contents.font.color = normal_color
   
    mascota_pic = RPG::Cache.battler(mascota.battler_name, mascota.battler_hue)
    self.contents.blt(0, 0, mascota_pic, mascota_pic.rect)

  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end

  clasificacion = $game_actors[13].name
  if $game_actors[13].name = !nil
    ""
  else
  d = RPG::Cache.picture(clasificacion)  #Clasificación.
  if d = !nil
    ""
  else
  self.contents.blt(92, 156, d, d.rect)
  end
  end
end


class Window_Banner < Window_Base
def initialize
    super(0, 0, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
end

class Window_Stats_Total < Window_Base
 
  def initialize
    super(400, 224, 240, 60)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, "Stats a Repartir")
    stats = $game_variables[10]
    self.contents.draw_text(80, 0, 120, 32, stats.to_s, 2)
  end

  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end

xXIsrael0499Xx

avatar
Ópalo Carcajada Estaba esperando esto xD
Pues bueno a pesar de estar incompleto y tener saltos de script Truquitos cutres scripteros pues la idea en si es muy buena, con un poco mas de esfuerzo conocimientos se puede hacer algo bastante bello para un juego, ya que la idea es genial se puede mejorar para cada gusto de cada persona y necesidades varias.
Luego lo pruebo para ver que tal y si consigo resolver uno que otro problema pues bienvenido sea.

Dejo por aquí mis Ópalo Reputación Espero ver otra actualización y ver como acaba esto Ópalo Gato

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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