Últimos temas
» Pack de Rpg maker XP
por KRiZaLiD Ayer a las 7:17 pm

» (ACE) Succubus Academy
por Kuroneko Gore Ayer a las 4:34 am

» Good Lyca Demo
por nazo493 Vie Sep 22, 2017 6:52 am

» [VX ACE] Black Winter - Terror y Suspenso - Descargalo ya!
por lolachan-desuu Jue Sep 21, 2017 6:30 pm

» Hoseki (Versión de Prueba)
por The Ferydra Jue Sep 21, 2017 4:58 am

» Duda mapeado rpg maker xp
por LordIthacar Jue Sep 21, 2017 4:02 am

» La Historia Infinita (DEMO)
por Chioban Miér Sep 20, 2017 7:35 am

» The Legend of Celestia II: A World of Twilight Shadows Demo
por jlopez_96 Dom Sep 17, 2017 6:27 pm

» Pregunta sobre el RPG Maker Fes ¿está permitido hablar o presentar juegos con este nuevo maker?
por Muzgar Sáb Sep 16, 2017 11:21 am

» Rpg Maker VX Ace: Lampara que se apaguen y enciendan.
por Muzgar Jue Sep 14, 2017 10:39 pm

» Pregunta sobre colaboracion en linea
por Tomate Jue Sep 14, 2017 9:23 pm

» [ACE] Nuevas partes para el generador (solo para faces)
por MargarArts Jue Sep 14, 2017 8:08 pm


Left Behind XP

Ver el tema anterior Ver el tema siguiente Ir abajo

Left Behind XP

Mensaje por kyonides el Vie Jul 14, 2017 12:48 am

LEFT BEHIND XP
v 0.3.0 (Final?)
por Kyonides-Arkanthos
 
Este script les provee la opción de dejar atrás a uno o varios héroes por algún requisito del juego. Esto es algo parecido a lo que sucedía en Breath Of Fire 1 cuando Ryu, el de pelo azul, debía ingresar solo al templo del dragón para aprender la transformación en algún dragón y sus correspondientes habilidades.

Yo sé que pueden hacerlo mediante eventos, de alguna manera que de momento no recuerdo, pero aquí yo ya semiautomaticé todo el proceso desde el punto en el que se decide dejar atrás a uno de los héroes hasta el momento en que Uds. ya pueden reunirse con ese héroe y reincorporarlo a su equipo. Todo lo que suceda antes va por cuenta de Uds.

Chequeen bien el simple ejemplo que les dejé en el demo para prevenir errores.

Llamados a script:



  • remove_actor(ID_héroe, parámetros_opcionales_1_o_3)
  • remove_actor_by_pos(índice_héroe_en_grupo, parámetros_opcionales_1_o_3)
  • remove_actors(ID_héroe_no_excluido, parámetros_opcionales_1_o_3)
  • remove_actors_by_pos(índice_héroe_no_excluido, parámetros_opcionales_1_o_3)


En los llamados a script solo el ID del héroe o la posición del héroe en el grupo son obligatorias, los parámetros opcionales, que pueden ser 1 o 3 serían:


  • ID del mapa correspondiente
  • Coordenada X del evento a crearse
  • Coordenada Y del evento a crearse


Si no definen ambas coordenadas en el llamado a script, pueden hacerlo mediante la modificación de los valores de la Constante ACTORNEWXY.

ACTORNEWXY = {ID_mapa => {ID_futuro_evento => [x, y]}}

Ejemplo:
Héroe viaja al mapa 3, ahí el evento más reciente y con el ID más alto tiene el ID 5, entonces el script tratará de crear un evento con el ID 6. Así se definirían las coordenadas en la Constante.

ACTORNEWXY = {3 => {6 => [8, 20]}}

Espero que la mini trama del demo les sea de su agrado, je, je, je, rero.

Aquí les dejo el demo en español y el script.



Código:
#   Left Behind XP
#   v 0.3.0 - 20120922
#   Scripter : Kyonides aka Kyonides-Arkanthos

#   method calls :
#      remove_actor(actor_ID, several_parameters)
#      remove_actor_by_pos(party_index, several_parameters)
#      remove_actors(actor_ID, several_parameters)
#      remove_actors_by_pos(party_index, several_parameters)

#   (optional) several_parameters : 0 - map_ID, 1 - x coord, 2 - y coord

module GameSys
  JOINPARTY = ['¿Me uno al grupo?']
  JOINOPTIONS = ['Sí','No']
  JOINING = ['¡Es una tremenda alegría para mí, amigos!']
  NOTJOINING = ['Es una completa lástima para ustedes...']
  JOINED = ["%s se ha unido a tu grupo.", "%s se han unido a tu grupo."]
  OTHERACTORS = ' y los otros'
  ACTORNEWXY = {2 => {3 => [10, 12],},}
end

class Game_System
  attr_accessor :left_behind, :other_maps
  alias kyon_left_behind_gm_sys_init initialize
  def initialize
    @left_behind, @other_maps = {}, {}
    kyon_left_behind_gm_sys_init
  end
end

class Game_Party
  alias kyon_left_behind_gm_add_actor add_actor
  def add_actor(actor_id)
    size = @actors.size
    kyon_left_behind_gm_add_actor(actor_id)
    return if @actors.size == size
    other = $game_system.other_maps[$game_map.map_id] ||= []
    events, o_event = $game_system.left_behind[$game_map.map_id], nil
    events.each {|id, val| included = events[id][0] == actor_id
      other << id; (events.delete(id) if included) }
  end
end

class Game_Map
  alias kyon_left_behind_gm_map_setup setup
  def setup(map_id)
    kyon_left_behind_gm_map_setup(map_id)
    include_actors_left_behind
  end

  def remove_actor(index, event_id, *param)
    a_id, @event_id, @param = $game_actors[index].id, event_id, param.flatten
    $game_party.actors.delete($game_actors[index])
    actor_leaving_team(a_id)
  end

  def remove_actor_by_pos(ix, event_id, *param)
    a_id, @event_id, @param = $game_party.actors[ix].id, event_id, param.flatten
    $game_party.actors.delete_at(ix)
    actor_leaving_team(a_id)
  end

  def remove_actors(index, event_id, *param)
    actor,@ids,@event_id,@param = $game_actors[index],[],event_id,param.flatten
    exclude_other_actors(actor)
  end

  def remove_actors_by_pos(ix, event_id, *param)
    ac,@ids,@event_id,@param = $game_party.actors[ix],[],event_id,param.flatten
        exclude_other_actors(ac)
    end

    def exclude_other_actors(actor)
    size = $game_party.actors.size
    $game_party.actors.map!{|a| a == actor ? a : (@ids << a.id; nil)}.compact!
    actor_leaving_team(@ids[0]) if size != $game_party.actors.size
  end
  private
  def actor_leaving_team(actor_id)
    @actor_id, @m_id = actor_id, (@param.empty? ? @map_id : @param[0])
    left_behind = $game_system.left_behind
    x, y = @param[1,2] if @param.size > 2
    if @m_id != @map_id
      map = load_data(sprintf("Data/Map%03d.rxdata", @m_id))
      new_id, @page_id = map.events.keys.sort[-1] + 1, 0
      x, y = GameSys::ACTORNEWXY[@m_id][new_id] if !x
      unless left_behind[@map_id] and left_behind[@map_id][@event_id]
        $game_system.other_maps[@map_id] ||= []
        $game_system.other_maps[@map_id] << @event_id
      end
    elsif !x and @m_id == @map_id
      @page_id, event = @events[@event_id].pages.size, @events[@event_id]
      x, y = case $game_player.direction
      when 2; [event.x, event.y - 1]
      when 4; [event.x + 1, event.y]
      when 6; [event.x - 1, event.y]
      when 8; [event.x, event.y + 1] end if !x
      event.moveto(x, y)
    end
    event_id = new_id ? new_id : @event_id
    ids = @ids ? (@ids.size > 1 ? @ids : @ids[0]) : @actor_id
    left_behind[@m_id] ||= {}
    left_behind[@m_id][event_id] = [ids, @page_id, x, y]
    $game_self_switches[[@m_id, event_id, 'A']] = true
    include_actors_left_behind
    @array = @ids = @page_id = @actor_id = @event_id = @m_id = @param = nil
    $game_player.refresh
  end

  def include_actors_left_behind
    if $game_system.other_maps[@map_id]
      $game_system.other_maps[@map_id].each {|i| @events[i].erase if @events[i]}
      @need_refresh = true
    elsif $game_system.left_behind[@map_id]
      $game_system.left_behind[@map_id].each {|id, val| page,act = val[1],val[0]
        actor = act.is_a?(Array)? $game_actors[act[0]] : $game_actors[act]
        @array = act[1..-1] if act.is_a?(Array)
        if page == 0
          event = RPG::Event.new(val[2], val[3])
          event.id, event.name = id, actor.name
          event.pages[page].graphic.character_name = actor.character_name
          @events[id] = Game_Event.new(@map_id, event)
        end
        refresh_event_contents(actor, id, page, true) }
      @need_refresh = true
    end
  end

  def refresh_event_contents(actor, id, page, join=nil)
    npage, xy = page - 1, $game_system.left_behind[@map_id][id][2,2]
    @events[id].moveto(xy[0], xy[1])
    @events[id].name = actor.name
    @events[id].pages[npage].list << RPG::EventCommand.new(123, 0, ['A', 0])
    new_page = RPG::Event::Page.new
    new_page.graphic.character_name = actor.character_name
    new_page.condition.self_switch_valid = true
    route = RPG::MoveRoute.new
    route.repeat = false
    route.list.unshift RPG::MoveCommand.new(25)
    last_command = new_page.list.delete_at(0)
    new_page.list << RPG::EventCommand.new(209, 0, [0, route])
    new_page.list << RPG::EventCommand.new(509, 0, route.list[0])
    actor_join_choices(new_page, id, actor.id) if join
    new_page.list << last_command
    @events[id].pages << new_page
    empty_page(id)
  end

  def actor_join_choices(new_page, event_id, actor_id)
    bottom = @events[event_id].y > ($game_map.height / 2) + 2
    new_page.list << RPG::EventCommand.new(104, 0, [0, 0]) if bottom
    new_page.list << RPG::EventCommand.new(101, 0, GameSys::JOINPARTY)
    options, empty = GameSys::JOINOPTIONS, RPG::EventCommand.new(0, 1)
    new_page.list << RPG::EventCommand.new(102, 0, [options, 2])
    new_page.list << RPG::EventCommand.new(402, 0, [0, options[0]])
    new_page.list << RPG::EventCommand.new(101, 1, GameSys::JOINING)
    add_actor = ["$game_party.add_actor(#{actor_id})"]
    @array.each {|id| add_actor << "$game_party.add_actor(#{id})"} if @array
    add_actor.each {|add| new_page.list << RPG::EventCommand.new(355, 1, [add])}
    joined = @array ? GameSys::JOINED[1] : GameSys::JOINED[0]
    name = $game_actors[actor_id].name + (@array ? GameSys::OTHERACTORS : '')
    new_page.list << RPG::EventCommand.new(101, 1, [sprintf(joined, name)])
    new_page.list << RPG::EventCommand.new(123, 1, ['B',0])
    new_page.list << empty
    new_page.list << RPG::EventCommand.new(402, 0, [1, options[1]])
    new_page.list << RPG::EventCommand.new(101, 1, GameSys::NOTJOINING)
    new_page.list << empty
    new_page.list << RPG::EventCommand.new(404, 0)
    new_page.list << RPG::EventCommand.new(104, 0, [2, 0]) if bottom
  end

  def empty_page(event_id)
    return if !@events[event_id]
    new_page = RPG::Event::Page.new
    new_page.condition.self_switch_ch = 'B'
    new_page.condition.self_switch_valid = true
    @events[event_id].pages << new_page
  end
end

class Game_Event
  attr_accessor :name
  def pages() @event.pages end
end

class Interpreter
  def remove_actor(index, *parameters)
    return if !$game_party.actors.include?($game_actors[index])
    $game_map.remove_actor(index, @event_id, parameters)
  end

  def remove_actor_by_pos(index, *parameters)
    index = rand($game_party.actors.size) if :random == index.to_sym
    $game_map.remove_actor_by_pos(index, @event_id, parameters)
  end

  def remove_actors(index, *parameters)
    return if !$game_party.actors.include?($game_actors[index])
    $game_map.remove_actors(index, @event_id, parameters)
  end

  def remove_actors_by_pos(index, *parameters)
    return if !$game_party.actors.include?($game_actors[index])
    $game_map.remove_actors_by_pos(index, @event_id, parameters)
  end
end

kyonides
PJ de Quest
PJ de Quest

Masculino
Costa Rica
RPG Maker : Xp
Mensajes : 51
Monedas : 161
Reputación : 1

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

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