Últimos temas
» [Ace]Movimiento Libre
por brrt Ayer a las 3:57 pm

» Virtual Kingom (Old Version)
por NinjaLOL Ayer a las 3:22 am

» Concurso de relatos - Septiembre/Octubre 2018 [Inscripción]
por raffael_0 Ayer a las 3:18 am

» Laminación [VXACE] [PROYECTO EN CURSO]
por Pocari Vie Oct 12, 2018 12:08 pm

» QUITAR VENTANA DEL MENU (VX ACE)
por THESHINYMISTERXD Sáb Oct 06, 2018 7:46 pm

» Condición para saber si el jugador está caminando
por Sonik Sáb Oct 06, 2018 5:03 pm

» ¿Tileset de un futbolín?
por MCarlos15 Jue Oct 04, 2018 9:07 pm

» RPG Maker VX Ace en MAC
por Er1ck_92 Mar Oct 02, 2018 8:42 am

» Distrito 0 [VXACE]
por BREAK93 Mar Oct 02, 2018 6:08 am

» Necesito taileset modernos pero que no tengan estilo anime por favor
por Doble D Mar Oct 02, 2018 12:36 am

» Fantasy World XP (+ de 200 para o grupo)
por DecinBR Sáb Sep 29, 2018 6:28 pm

» Problemas con un archivo
por AetherIssei Dom Sep 23, 2018 4:08 am


(VX Ace script) Sistema de Afinidad

Ir abajo

(VX Ace script) Sistema de Afinidad

Mensaje por fatyguero el Jue Mayo 12, 2016 12:46 am

Ya vengo con otro de mis scripts ^^.

En esta ocacion les traigo el sistema de afinidad que utilizo en mi juego de medieval lives, o por lo menos algo parecido xD, pues el de mi juego esta mucho mas currado, este es universal y pulg and play para que no tengan que agregar ni una sola imagen ^^.

¿Que hace? pues simple, agrega una escena, ya sea llamada desde el menu o via call script, la cual mostrara la afinidad, cariño, respeto, social, o como quieran llamarlo, de nuestros protagonistas con el resto de personajes en el juego.

El script incluye la funcion de "conocer" a esa persona antes de empezar a aumentar tu afinidad. Estas dos cosas se hacen con el simple uso de un par de variables ^^.

Ademas una funcion que hace que salge un mensajito sobre la cabeza del evento o nuestro personaje avisando de que has subido o bajado tu afinidad con el.

Las instrucciones estan dentro del script y ademas adjunto una demo por si se les hace muy dificil la configuracion.

IMAGENES:









SCRIPT + DEMO:


Código:
#==============================================================================#
# Sistema de Afinidad v1.0
#==============================================================================#
# Coded By : Fatyguero
#==============================================================================#
#===========================Info y terminos de uso=============================#
# Este script agrega una escena donde podremos vizualizar un sistema que
# consiste en aumentar la afinidad con las diferentes personas que conozcamos
# durante el juego.
# Con lo que podremos hacer que nuestro personaje aumente o disminuzca esa
# afinidad con el uso de variables.
# Para obtener los resultados tendremos que crear 2 variables por persona:
# variable nº1 = valor de afinidad
# vairable nº2 = variable que permite agregar a la persona a la lista.
# En las opciones de mas abajo podrás configurar estos valores.
#
# Ejemplo de uso de variables:
#
# para el caso de una persona configurada así:
# ;;  id,    nombre,        variable,  valor,  valor max, variable meet, ciudad,  icono
#  ; [1  ,  "Ponto"      ,  1      ,  0      ,  100    ,      2      ,  0    ,  121  ],
#
# En este caso la variable para el valor será la 1, correspondiente al valor "variable"
# y la variable para conocer y agregar a esa persona sera la variable 2, correspondiente
# al valor "variable meet".
# el valor de "variable meet(var 2)" debe de ser igual al valor en "ID" de la persona.
# mientras que el valor de la variable 1 de esta persona tendrás que aumentarla
# durante el juego para que aumente tu afinidad con esta persona.
# Para un mejor entendimiento ver la demo incluida.
#---------------------------------------------------------------------------------------------
# Tambien hay un add-on para que salga un mensajito sobre el evento o personaje
# que te avisa que has subido la afinidad.
# Para que salga solo hay que hacer un "Call Script" desde un evento de la
# siguiente forma:
#
# popup(Numero evento, "Texto")
#
# Donde Numero de evento es el numero del evento en el mapa, si es 0 saldrá
# el mensaje sobre el personaje principal. En "Texto" pon la frase que quieras.
#==============================================================================#
# uso no comercial.           
#==============================================================================#
# Creditos a mi: Fatyguero
#==============================================================================#



#===============================================================================
# Seccion Editable
#===============================================================================
module Afinidad
#------------------------------------------------------------------------------# 
#  Configuracion General para la ventana de afinidad
#------------------------------------------------------------------------------# 

  module Configuracion
    # = true si quieres poder acceder a la escena desde el menú.
    # En caso contrario hacer un "Call Script" desde un evento así:
    # SceneManager.call(Scene_Afinidad)
    MENU        = true
    # nombre que aparecerá en el comando del menú.
    MENUNOMBRE  = "Afinidad"
    # "nombre del archivo" si quieres cambiar el windowskin de la ventana.
    # el archivo debe estar en la carpeta Graphics/System. Defaul = nil
    SKIN        = nil
    # cambia la opacidad de la ventana de afinidad, si pones 0 será la
    # opacidad por defecto.
    OPACIDAD    = 0
    # = true si quieres que aparezca el icono a la izquierda de cada
    # nombre de persona.
    ICONO      = true
    # palabra que saldrá cuando aun no conozcas a la persona.
    # pon nil si quieres que salga nada.
    CONOCIDO    = "Desconocido"
    # frase que saldra en el encabezado de la ventana.
    DESCRIPCION = "          Afinidad con las personas"
    # palabra para los nombres.
    NOMBRES    = "Nombre"
    #palabra para las barras de afinidad.
    AFINIDAD    = "Afinidad"
    #palabra para las ciudades.
    CIUDADES    = "Ciudad"
    # = true si quieres que se dibuje una linea al terminar la descripción.
    LINEA      = true
   
  end
 
#------------------------------------------------------------------------------# 
#  Configuracion General para las personas de la lista
#------------------------------------------------------------------------------# 
  module Gentes
 
  #------------------------------------------------------------------------
  # Este es el array para agregar personas. Solo copiar las lineas y pegar
  # una debajo de otra, como se muestra abajo. Las opciones de valores que
  # son obligatorias modificar son: ID, Variable valor, Variable meet.
  #------------------------------------------------------------------------
  # ID ==> es el id distintivo de cada persona, preferible de menor a mayor.
  # Nombre ==> nombre de la persona.
  # Variable valor ==> ID de la variable que tomara el valor de la afinidad.
  # Valor ==> dejar en 0
  # Valor Max ==> Valor maximo de la afinidad de la persona.
  # Variable meet ==> ID de la variable que tomará el valor para conocer
  # a la persona en cuestion.
  # Ciudad ==> Numero que corresponde a la ciudad dentro del array CIUDAD.
  # Icono ==> ID del icono que tendrá la persona a su izquierda. Referente
  # al iconset en Graphics/System.
  #------------------------------------------------------------------------
   
  PERSONA = [#no tocar
 
  #ID,    Nombre,    Variable valor,  Valor,    Valor Max, Variable meet , Ciudad, Icono
 
  [1  ,  "Rita"        ,  1      ,  0      ,  100    ,      2      ,  0    ,  122  ],
  [2  ,  "Cacho"      ,  3      ,  0      ,  100    ,      4      ,  0    ,  121  ],
  [3  ,  "Papillón"    ,  5      ,  0      ,  100    ,      6      ,  0    ,  11  ],
  [4  ,  "Rigoberto"  ,  7      ,  0      ,  100    ,      8      ,  0    ,  121  ],
  [5  ,  "María"      ,  9      ,  0      ,  100    ,      10      ,  1    ,  122  ],
  [6  ,  "Vieja loca"  ,  11    ,  0      ,  100    ,      12      ,  1    ,  121  ],

  ]#no tocar
 
  #------------------------------------------------------------------------
  # Aqui se agregan las ciudades del juego. Añadirlas despues de la coma.
  #------------------------------------------------------------------------
  CIUDAD  =  ["Del lago", "Bosque",]
 
  end

#------------------------------------------------------------------------------# 
#  Configuracion General para los mensajes de afinidad en cada persona.
#------------------------------------------------------------------------------# 

  module Fatypop
  # Posición en la que saldrá el mensaje dependiendo del evento o personaje.
  POSICION = -60               
  # Fuente del texto del mensaje flotante.
  FUENTE  = "Arial"               
  # Color del texto del mensaje flotante.
  COLOR    = [255,200,200]   
 
  end
#------------------------------------------------------------------------------# 
#  Fin de las configuraciones. A partir de aquí, modificar bajo su propio
#  riesgo.
#------------------------------------------------------------------------------#

end
#------------------------------------------------------------------------------# 
#  Escena de Afinidad
#------------------------------------------------------------------------------#
class Scene_Afinidad < Scene_MenuBase
  include Afinidad
 
  def start
  super()
    @personasarr = Gentes::PERSONA.size
    crear_ventana
  end
 
  def crear_ventana
    @ventana = Window_Afinidad.new()
  end
 
  def update
    super()
    abajo if Input.repeat?(:DOWN)
    arriba if Input.repeat?(:UP)
    SceneManager.return && Sound.play_cancel if Input.trigger?(:B)
  end
 
  def abajo
    Sound.play_cursor if (@ventana.oy + 272) < @ventana.contents.height
    @ventana.oy += 30 if (@ventana.oy + 272) < @ventana.contents.height
  end
   
  def arriba
    Sound.play_cursor if (@ventana.oy + 272) < @ventana.contents.height
    @ventana.oy -= 30 if @ventana.oy > 0
  end 
  def terminate
    super()
    @ventana.dispose
  end
 
end

#------------------------------------------------------------------------------# 
#  Ventana de Afinidad
#------------------------------------------------------------------------------#
 
class Window_Afinidad < Window_Base

  include Afinidad
 
 def initialize(line_number = Gentes::PERSONA.size * 3.6)
  super(0,0,Graphics.width, fitting_height(line_number))
 
  if Configuracion::OPACIDAD > 0
    self.opacity = Configuracion::OPACIDAD
  end
 
  if Configuracion::SKIN != nil
    self.windowskin = Cache.system(Configuracion::SKIN)
  end
  refresh
 end

 def refresh
    contents.clear
    draw_text(30,0, Graphics.width, line_height , Configuracion::DESCRIPCION)
    draw_text(30,line_height, Graphics.width, line_height , Configuracion::NOMBRES)
    draw_text(200,line_height, Graphics.width, line_height , Configuracion::AFINIDAD)
    draw_text(400,line_height, Graphics.width, line_height , Configuracion::CIUDADES)
    change_color(knockout_color)
    if Configuracion::LINEA
    draw_text_ex(0, line_height, "_________________________________________________________")
    end
 
    for element in Gentes::PERSONA
    $game_system.persona_id = element[0]
    $game_system.persona_nombre = element[1]
    $game_system.persona_var = element[2]
    $game_system.persona_val1 = element[3]   
    $game_system.persona_val2 = element[4]
    $game_system.persona_ciudad = element[6]
    $game_system.persona_icono = element[7] 
    x = 0
    y = line_height * 2.5 * $game_system.persona_id
    if $game_variables[element[5]] == $game_system.persona_id
    if $game_variables[element[2]] >= $game_system.persona_val2
      $game_system.persona_val1 = $game_system.persona_val2
    else $game_variables[element[2]] < $game_system.persona_val2 && $game_variables[element[2]] >= 0
      $game_system.persona_val1 = $game_variables[$game_system.persona_var]
    end
    if Configuracion::ICONO
      if element[7] > 0
      draw_icon($game_system.persona_icono, x, y)
      else
      draw_icon(0, x, y)
      end
    end
      rate = $game_system.persona_val1.to_f / $game_system.persona_val2.to_f
      change_color(normal_color)         
      draw_text(x + 30,y, Graphics.width, 32, $game_system.persona_nombre)
      draw_gauge(180, y, 125, rate, hp_gauge_color2, hp_gauge_color1)
      draw_current_and_max_values(180, y, 125, $game_system.persona_val1.to_s, $game_system.persona_val2.to_s, normal_color, crisis_color)
      change_color(normal_color)
      draw_text(x + 400,y, Graphics.width, 32, Gentes::CIUDAD[$game_system.persona_ciudad])
    else
    if  Configuracion::CONOCIDO != nil
      change_color(knockout_color)
      draw_text(x + 200,y, Graphics.width, 32, Configuracion::CONOCIDO)
    end
    end
    end
  end
   
end

#------------------------------------------------------------------------------# 
#  Creando comandos en el menu
#------------------------------------------------------------------------------#

class Window_MenuCommand < Window_Command
  include Afinidad
  alias faty_add_main_commands add_main_commands
  def add_main_commands
    if Configuracion::MENU
    faty_add_main_commands
    add_command(Configuracion::MENUNOMBRE, :afinidad)
    else
    faty_add_main_commands()
    end
  end
end

class Scene_Menu < Scene_MenuBase
  include Afinidad
  alias faty_create_command_window create_command_window
  def create_command_window
    if Configuracion::MENU
    faty_create_command_window
    @command_window.set_handler(:afinidad, method(:command_afinidad))
    else
    faty_create_command_window()
    end
  end
 
  def command_afinidad
    SceneManager.call(Scene_Afinidad)
  end
 
end

#------------------------------------------------------------------------------# 
#  Variables de sistema
#------------------------------------------------------------------------------#

class Game_System
  include Afinidad
 
  attr_accessor :persona_id
  attr_accessor :persona_nombre
  attr_accessor :persona_var
  attr_accessor :persona_val1
  attr_accessor :persona_val2
  attr_accessor :persona_ciudad 
  attr_accessor :persona_icono   
  alias faty_initialize  initialize
  def initialize
  for element in Gentes::PERSONA
    @persona_id = 0
    @persona_nombre = ""
    @persona_var = 0
    @persona_val1 = 0
    @persona_val2 = 0
    @persona_ciudad = ""
    @persona_icono = 0
  end
  faty_initialize()
  end
end

#------------------------------------------------------------------------------# 
#  Mensaje de Afinidad
#------------------------------------------------------------------------------#

class Game_Map
  alias faty_initialize initialize
  def initialize
    faty_initialize
  end
 
  alias faty_update update
  def update(main = false)
    update_popup if @popsprite
    faty_update(main)
  end

  def update_popup
    @popsprite.update
  end
 
  def dispose_popup
    @popsprite.dispose if @popsprite
    @popsprite = nil
  end
 

  def popup(target,text)
    @popsprite.dispose if @popsprite
    character = get_ptarget(target)
    item = get_pitem(text)
    @popsprite = Texto_Pop.new(@viewport1,character,text)
  end
 
  def get_ptarget(target)
    if target == 0; return $game_player
    elsif target > 0; return $game_map.events[target]
    end
  end
 
  def get_pitem(text)
    [text.to_s]
  end
 
end


class Scene_Map < Scene_Base
  def dispose_spriteset
    @spriteset.dispose
    $game_map.dispose_popup
  end
end

class Texto_Pop < Sprite
  include Afinidad
  def initialize(viewport,target,text)
    super(viewport)
    @character = target
    @item = text
    @rise = 0
    @rise_speed = 15
    create_bitmap
    update
  end

  def dispose
    self.bitmap.dispose rescue nil
    if @icon_sprite
      @icon_sprite.bitmap.dispose rescue nil
      @icon_sprite.dispose rescue nil
    end
    super
  end

  def create_bitmap
    if @item
      @icon_sprite = Sprite.new
      @icon_sprite.bitmap = nil
    end
    @x_offset = -92
    self.bitmap = Bitmap.new(200, 20)
    self.bitmap.font.size = 20
    self.bitmap.font.name = Fatypop::FUENTE
    self.bitmap.font.shadow = 20
    self.bitmap.font.bold = true
    self.bitmap.font.color.set(
      Fatypop::COLOR[0],Fatypop::COLOR[1],Fatypop::COLOR[2])
    self.z = 2
  end

  def update
    super
    update_position
    update_bitmap
    update_visibility
    update_icon if @icon_sprite
    end_popup
  end

  def end_popup
    return $game_map.dispose_popup if @rise >= 280
  end
 
  def update_bitmap
    @rise += 1
    self.bitmap.clear
    self.bitmap.draw_text(self.bitmap.rect, @item, 1)
  end
 
  def calculate_y
    if @rise_speed > 0
      @rise_speed -= 1
      return -(@rise * @rise_speed * 0.2)
    else
      return 0
    end
  end

  def update_position
    self.x = @character.screen_x + @x_offset
    self.y = @character.screen_y + Fatypop::POSICION - 10 + @rise * 0.2
  end

  def update_icon
    @icon_sprite.x = @character.screen_x * 4 - 20
    @icon_sprite.y = self.y - 2
    @icon_sprite.opacity = self.opacity
  end
 
  def update_visibility
    self.opacity = 500 - @rise * 6
  end
end


class Game_Interpreter
     
  def popup(target,text)
    $game_map.popup(target,text)
  end

end

#------------------------------------------------------------------------------# 
#  Fin del script
#------------------------------------------------------------------------------#

Demo: Descargala aqui ^^ (1,4mb/Mega)


Espero que les guste y les sirva. y cualquier duda o informe sobre posibles bugs ya saben, un privado o me reportan aqui mismo ^^

saludossssssss
avatar
fatyguero
PJ Principal
PJ Principal

Masculino
Argentina
RPG Maker : Ace
Mensajes : 341
Monedas : 377
Reputación : 94
Edad : 34
Localización : en el culo del mundo... digo el centro xD

Volver arriba Ir abajo

Volver arriba

- Temas similares

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