¡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 3397 miembros registrados.
El último usuario registrado es LucasGF.

Nuestros miembros han publicado un total de 79808 mensajes en 11257 argumentos.
Navega con Google Chrome
[DESCARGA]

Variables locales para evento

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Variables locales para evento

Mensaje por MaddManu el 2013-02-01, 12:24

Básicamente necesito disponer de variables locales. Simplemente la función de Interruptor local pero con variable. Cada evento tiene su propia variables y poder registrar cambios desde el mismo.
No se si es posible o si existe algo por el estilo?

MaddManu
Soñador
Soñador

0/3

Créditos 373

Gracias : 4

http://silegames.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por youkai el 2013-02-01, 16:32

Si es posible, dame un tiempo para prepararte el script...ahora te edito:

EDIT: Aqui esta
Esto agregalo en una pagina nueva arriba o abajo de Game_SelfSwitches
Código:
#==============================================================================
# ** Game_SelfVariables by youkai
#------------------------------------------------------------------------------
#  This class handles self varaibles. It's a wrapper for the built-in class
#  "Hash." Refer to "$game_self_varaibles" for the instance of this class.
#  PIDO CREDITOS
#==============================================================================

class Game_SelfVariables
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @data = {}
  end
  #--------------------------------------------------------------------------
  # * Get Self Variable
  #    key : key
  #--------------------------------------------------------------------------
  def [](key)
    return @data[key].nil? ? 0 : @data[key]
  end
  #--------------------------------------------------------------------------
  # * Set Self Variable
  #    key  : key
  #    value : value
  #--------------------------------------------------------------------------
  def []=(key, value)
    @data[key] = value
  end
end

Y esto ponlo sobre Main
Código:
## Self Varaibels by youkai ##
## PIDO CREDITOS ##
class Scene_Title
  alias self_variables_main main
  def main
    $game_self_variables    = Game_SelfVariables.new
    self_variables_main
  end
end

class Interpreter
  def set_selfvariable(num, value, map = 0, event = 0)
    map = map <= 0 ? $game_map.map_id : map
    event = event <= 0 ? @event_id : event
    key = [map, event, num]
    $game_self_variables[key] = value
    $game_map.need_refresh = true
  end
 
  def read_selfvariable(num, map = 0, event = 0)
    map = map <= 0 ? $game_map.map_id : map
    event = event <= 0 ? @event_id : event
    key = [map, event, num]
    return $game_self_variables[key]
  end
end

Modo de uso:
set_selfvariable(num, value, map, event)
Le da el valor value a la selfvariable num del evento event que esta en el mapa map, entiendes?
Puede omitir map y event para referirte al evento que esta en ejecucion.

read_selfvariable(num, map = 0, event = 0)
Devuelve el valor de la selfvariable num del evento event que esta en el mapa map
Igual puedes omiti map y event para referirte al evento en ejecucion.

Espero que lo hayas entendido,
Saludos,
¥oukai

youkai
Soñador
Soñador

0/3

Créditos 280

Gracias : 10

http://sharingannf.wordpress.com/

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por Wecoc el 2013-02-01, 17:12

You, eso está de lujo pero te dejaste una cosa; $game_self_variables a parte de iniciarse en el Scene_Title, también debería guardarse y cargarse en Marshal como el resto (Scene_Load, Scene_Save). Aún así está bien que no lo hayas hecho, porque Madd tiene un script de Load/Save personalizado. Madd, editaré tu script de Load/Save para que soporte $game_self_variables.
Lo que ha puesto Youkai te servirá, pero necesitarás también este arreglo.
Ahora edito.

Edito:
Código:
# Save & Load Edit by Wecoc

module Kernel
  def save
    file = File.open("Save1.rxdata", "wb")
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      characters.push([actor.character_name, actor.character_hue])
    end
    Marshal.dump(characters, file)
    Marshal.dump(Graphics.frame_count, file)
    $game_system.save_count += 1
    $game_system.magic_number = $data_system.magic_number
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_self_variables, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
    file.close
  end
  def load
    $game_temp = Game_Temp.new
    if FileTest.exist?("Save1.rxdata")
      file = File.open("Save1.rxdata", "rb")
      characters = Marshal.load(file)
      Graphics.frame_count = Marshal.load(file)
      $game_system        = Marshal.load(file)
      $game_switches      = Marshal.load(file)
      $game_variables    = Marshal.load(file)
      $game_self_switches = Marshal.load(file)
      $game_self_variables = Marshal.load(file)
      $game_screen        = Marshal.load(file)
      $game_actors        = Marshal.load(file)
      $game_party        = Marshal.load(file)
      $game_troop        = Marshal.load(file)
      $game_map          = Marshal.load(file)
      $game_player        = Marshal.load(file)
      if $game_system.magic_number != $data_system.magic_number
        $game_map.setup($game_map.map_id)
        $game_player.center($game_player.x, $game_player.y)
      end
      $game_party.refresh
      file.close
      $game_system.bgm_play($game_system.playing_bgm)
      $game_system.bgs_play($game_system.playing_bgs)
      $game_map.update
      $scene = Scene_Map.new
    end
  end
end

class Scene_Title
  def command_continue
    unless @continue_enabled
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.decision_se)
    load
  end
end

==========

Al resto de gente que no sean Madd, necesitarán añadir esto al segundo script de Youkai para que la cosa funcione bien:

Código:
class Scene_Load < Scene_File
  alias self_variables_read_save_data read_save_data
  def read_save_data(file)
    $game_self_variables = Marshal.load(file)
    self_variables_read_save_data(file)
  end
end

class Scene_Save < Scene_File
  alias self_variables_write_save_data write_save_data
  def write_save_data(file)
    self_variables_write_save_data(file)
    Marshal.dump($game_self_variables, file)
  end
end

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por youkai el 2013-02-01, 20:50

:P siempre me olvido de Marshal XDDDD
Sorry siempre me pasa lo mismo en todos los scripts que requieren que su contenido pasen a la posteridad, de generacion en generacion (?)

Gracias Wec, vere si para la proxima(eso lo digo siempre XD) soy mas cuidadoso...o mejor dicho, tengo mejor memoria y me acuerdo de que hay que salvar su contenido tambien. ^^

Saludos,
¥oukai

PD: Porque pusiste en el script del pueblo para que se salve el contenido(?) en Scene_Save a marshal debajo del alias y en Scene_Load arriba?? XDDD Me resulta raro XDDD

youkai
Soñador
Soñador

0/3

Créditos 280

Gracias : 10

http://sharingannf.wordpress.com/

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por Kemrhi el 2014-07-04, 16:54

hola, soy nuevo en el foro, asi que perdon por el necropost, bueno, soy realmente malo en scripting y tengo una duda que quiza sea basica, pero... como hago para sumarle valores a la variable? aqui aparece solo como asignarle valores, pero si yo quiero que cada vez que le aprete enter sume 1, por ejemplo, como lo hago?

Kemrhi
Iniciado
Iniciado

0/3

Créditos 7

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por Wecoc el 2014-07-14, 22:22

En tu caso sería
$game_self_variables[map, event, id] += 1

En todas las variables que tienen definida la propiedad "set_variable", es decir, el igual ( variable = (cosa) ) también puedes usar modificadores de éste tipo:

+= -> sumarle algo
-= -> restarle algo
*= -> multiplicarle algo
/= -> dividirle algo
%= -> (muy poco usado) calcular el resto de algo

Para que te hagas una idea es como un atajo; poner ésto:

$game_variables[1] += 1

es lo mismo que poner ésto:

$game_variables[1] = $game_variables[1] + 1

Edito: Ah bueno, va a parte pero también hay los comparadores, para comprobar si se cumple cierta condición, el símil al manejo de variables en Condiciones y Efectos.

== -> ¿es igual que...?
>= -> ¿es mayor o igual que...?
> -> ¿es mayor que...?
< -> ¿es menor que...?
<= -> ¿es menor o igual que...?
!= -> ¿es diferente que...?
<=> -> éste no lo necesitas xD

Edito: Cómo usar el script de Youkai

Según entiendo en el código youkai hizo un sistema de 3 componentes, pero no sé si tiene que usarse doble paréntesis [[tal que así]] o solo uno como te pondré en el ejemplo, si te saltara error ponlo doble y ya está.

$game_self_variables[map, event, id] = value

1) Quieres que en el mapa 1, evento 4, la variable local 2 valga 54.

$game_self_variables[1, 4, 2] = 54

2) Quieres que en el mapa acual, evento actual, la variable local 4 valga la vida del personaje.

$game_self_variables[$game_map.map_id, get_character(0).id, 4] = $game_party.actors[0].hp

Ese sería el método técnico, y por lo tanto el que más libertades te da (+=, -= y todo eso) pero como en éste último caso como ves es un poco caótico youkai hizo un atajo para redefinir y otro para leer esas variables.

Para definirlas, hizo éste

set_selfvariable(id, valor, map, event)

1) Quieres que en el mapa 1, evento 4, la variable local 2 valga 54.

set_selfvariable(2, 54, 1, 4)

2) Quieres que en el mapa acual, evento actual, la variable local 4 valga la vida del personaje.

set_selfvariable(4, $game_party.actors[0].hp, 0, 0)

Aunque esos dos 0 puedes obviarlos.

Finalmente hizo un atajo para leer la variable

read_selfvariable(num, map, event)

En el mismo ejemplo 2 sería

read_selfvariable(4, 0, 0)

Aunque esos 0 nuevamente se pueden quitar.

Espero que se haya entendido.

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por Ledai el 2014-07-15, 11:36

Creo que lo entendí, ya que para lo que yo quiero, debo usar el método técnico, para hacer comparativas y sumar y restar etc

Lo único que no entiendo, aunque no me es muy necesario en vista de que el camino largo me sirve, es lo del read_selfvariable
¿Como se usa eso? ¿para qué sirve?

Ledai
Aventurero
Aventurero

0/3

Créditos 1368

Gracias : 126

http://ahurallg.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por Wecoc el 2014-07-15, 16:19

Es que normalmente no se dice read sino get, pero Youkai pone nombres raros para putear al personal...

Cuando asignas un nuevo valor a algo le aplicas un método interno de ruby que se llama set_variable, (de ahí Youkai hizo su "símil" particular set_selfvariable)

Cuando lo único que haces es obtener ese valor sin cambiarlo, por ejemplo cuando pones en el script los comparadores esos que dije (==, >=, <= ....) o como lo hace el propio Condiciones y Efectos, estas haciendo un get_variable (o en éste caso ya he dicho que tiene un mal nombre y lo llamó read_selfvariable).

Y no hablo de las variables del juego si no las de cualquier clase o módulo del script (las locales, que empiezan por @).

Para que nos entendamos todos.

Algunas variables locales de las clases de los scripts no pueden reescribirse (set) ni obtenerse (get) desde fuera de esa clase.
Luego hay algunas que solo pueden obtenerse. Entonces en esa clase o bien aparece un método de éste tipo:

Código:
def variable
  (algo)
end


o bien lo más típico es que salga como un atajo interno al principio del script así:
Código:
attr_reader :variable


Luego es muy raro, en todo el maker default no hay ni uno, pero hay algunas que solo pueden reescribirse.

Entonces o sale un método de éste tipo:

Código:
def variable=(valor)
  (algo)
end


o bien el atajo que en ese caso sería
Código:
attr_writter :variable


Y finalmente estan las más típicas, en que se puede hacer tanto una cosa como la otra. O bien tienen definidos ambos métodos anteriores a la vez, o lo hacen con su propio atajo:
Código:
attr_accessor :variable


Eso es RGSS básico-medio y lo podéis entender mejor consultando tutoriales por ahí, yo solo doy un repaso general xD

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por Kemrhi el 2014-07-18, 01:45

Genial Wecoc, me has ayudado mucho

Kemrhi
Iniciado
Iniciado

0/3

Créditos 7

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: Variables locales para evento

Mensaje por Contenido patrocinado Hoy a las 12:43


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

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