Últimos temas
» [Sugerencia]Limpieza de recursos viejos en el foro.
por Cuyo1786 Hoy a las 9:52 am

» Busco grupo para un inexperta pero con ganas
por BACA Hoy a las 1:41 am

» Buscando pixel artista, trabajo pagado.
por pixeloid Ayer a las 11:33 pm

» [MV]Butterfly Paradox
por DopellSerch Ayer a las 9:44 pm

» LMD - Lunas de Magia Divina
por Zaabos Ayer a las 12:46 am

» LA BRÚJULA DE ZAZA [VXACE]
por Pocari Dom Oct 20, 2019 1:29 pm

» [VXA]Resident Evil Menu
por DorFenn Dom Oct 20, 2019 1:42 am

» (RMMV) Precognition
por JapoZero Jue Oct 17, 2019 11:40 pm

» Ayuda, duda
por BACA Miér Oct 16, 2019 7:38 pm

» Duda con ventana de comandos en Script
por DorFenn Lun Oct 14, 2019 1:46 am

» Índice Scripts RGSS3
por ZororoWhite Dom Oct 13, 2019 12:24 am

» [VX Ace] Script para duplicar tamaño y escala de ventana del juego
por ZororoWhite Dom Oct 13, 2019 12:23 am


(VX Ace script) Sistema de Afinidad

Ir abajo

(VX Ace script) Sistema de Afinidad Empty (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:
(VX Ace script) Sistema de Afinidad Zx45tt

(VX Ace script) Sistema de Afinidad X0obgg

(VX Ace script) Sistema de Afinidad Aem713

(VX Ace script) Sistema de Afinidad 2ykcopc

(VX Ace script) Sistema de Afinidad 2j5igzk

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
fatyguero
fatyguero
PJ Principal
PJ Principal

Masculino
Argentina
RPG Maker : Ace
Mensajes : 357
Monedas : 406
Reputación : 103
Edad : 35
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.