Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Page Support

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP] Page Support

Mensaje por Wecoc el 2014-05-30, 08:28

Éste es el tipo de scripts que más de gusta hacer, sencillitos y funcionales (Otra cosa es que les encontréis utilidad luego xDD)
Hoy os presento un script que lo que hace es dar más libertades con las páginas de los eventos, permitiendo llamarlas manualmente.

Pegadlo encima de main y disfrutad:

Código:
#==============================================================================
# ** [XP] Page Support
#------------------------------------------------------------------------------
#  Autor: Wecoc
#==============================================================================

class Game_Event < Game_Character
  def page
    return @page_id
  end
 
  def pages
    return @event.pages
  end
 
  def get_page(arg)
    case arg.class.to_s
    when "Fixnum"
      return @event.pages[arg]
    when "NilClass"
      return @event.pages[@page_id]
    else
      return arg
    end
  end
 
  def go_to_page(arg) # (page) || (id)
    page = get_page(arg)
    call_page(page)
  end
 
  def valid_page?(arg=nil) # (page) || (id)
    page = get_page(arg)
    c = page.condition
    if c.switch1_valid
      return false if $game_switches[c.switch1_id] == false
    end
    if c.switch2_valid
      return false if $game_switches[c.switch2_id] == false
    end
    if c.variable_valid
      return false if $game_variables[c.variable_id] < c.variable_value
    end
    if c.self_switch_valid
      key = [@map_id, @event.id, c.self_switch_ch]
      return false if $game_self_switches[key] != true
    end
    return true
  end
 
  def valid_pages
    pages = @event.pages.clone
    pages = pages.select{|pag| valid_page?(pag)}
    return pages
  end
 
  def top_valid_page
    return valid_pages[valid_pages.size - 1]
  end
 
  def top_valid_page?(arg=nil) # (page) || (id)
    page = get_page(arg)
    return page == top_valid_page
  end
   
  def refresh
    new_page = nil
    unless @erased
      for page_id in 0...@event.pages.size
        page = @event.pages[@event.pages.size - page_id - 1]
        next if valid_page?(page) == false
        new_page = page
        @page_id = @event.pages.size - page_id - 1
        break
      end
    end
    return if new_page == @page
    call_page(new_page)
  end
 
  def call_page(page)
    @page = page
    clear_starting
    if @page == nil
      @tile_id = 0
      @character_name = ""
      @character_hue = 0
      @move_type = 0
      @through = true
      @trigger = nil
      @list = nil
      @interpreter = nil
      return
    end
    @tile_id = @page.graphic.tile_id
    @character_name = @page.graphic.character_name
    @character_hue = @page.graphic.character_hue
    if @original_direction != @page.graphic.direction
      @direction = @page.graphic.direction
      @original_direction = @direction
      @prelock_direction = 0
    end
    if @original_pattern != @page.graphic.pattern
      @pattern = @page.graphic.pattern
      @original_pattern = @pattern
    end
    @opacity = @page.graphic.opacity
    @blend_type = @page.graphic.blend_type
    @move_type = @page.move_type
    @move_speed = @page.move_speed
    @move_frequency = @page.move_frequency
    @move_route = @page.move_route
    @move_route_index = 0
    @move_route_forcing = false
    @walk_anime = @page.walk_anime
    @step_anime = @page.step_anime
    @direction_fix = @page.direction_fix
    @through = @page.through
    @always_on_top = @page.always_on_top
    @trigger = @page.trigger
    @list = @page.list
    @interpreter = nil
    if @trigger == 4
      @interpreter = Interpreter.new
    end
    check_event_trigger_auto
  end
end


Las llamadas se hacen a partir de un evento, es decir $game_map.events[id].(llamada) cambiando la id por la que le corresponda.
Entonces tenemos las siguientes llamadas (en realidad hay más pero algunas son de uso interno):

page
Devuelve la id de la página actual del evento, siendo 0 la primera.

pages
Devuelve una array con todas las páginas (RPG::Event::Page) del evento, está hecho para usarlo sólo internamente, pero por ejemplo usarlo pages.size devuelve el número de páginas que tiene el evento.

go_to_page(id)
Cambia al evento a la página que le digas manualmente aunque no sea válida o haya páginas válidas con mayor preferencia.

valid_page?(id)
Mira si una página es válida.

valid_page?
Mira si la página actual es válida.

valid_pages
Devuelve una array con las páginas (RPG::Event::Page) válidas. Lo creé para usarlo internamente, similar al pages.

top_valid_page
Devuelve la página válida más alta (de más prioridad).

top_valid_page?(id)
Mira si una página es la página válida más alta.

top_valid_page?
Mira si la página actual es la página válida más alta.

Cualquier duda o propuesta me lo decís :)
avatar
Wecoc
Administrador
Administrador



Créditos 12280

Gracias : 645

Volver arriba Ir abajo

Re: [XP] Page Support

Mensaje por orochii el 2014-05-30, 21:34

De hecho este script se puede usar perfectamente como un overhaul del sistema existente. Porque no dudo que tus métodos sean más flexibles que el behaviour hardcodeado default xD. En serio, el RMXP puede ser todo lo genial que yo quiera 8DD, pero tenían malas mañas y estructuras.

En fin, está interesante el script.
avatar
orochii
Reportero

0/3

Créditos 7791

Gracias : 461

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.