¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [XP] OZ "Mission" Selector el Lun Mayo 22, 2017 2:48 am

orochii

avatar




OZ "MISSION" SELECTOR
RPG Maker XP (RGSS1, probado en RGSS102J.dll)
What is Technology? 
*'·,.,·'*'·,.,·'*'·,.,·'*'·,.,·'*'·,.,·'*'·,.,·'*+ It's magic!
Sobre el Script:
Sé que dice "mission" pero puede usarse para muchas cosas xD. La idea es simplemente una lista de "misiones", a la que puedes añadir o quitar más "misiones". Y que cuando marcas un interruptor como encendido, esa "misión" te deje de salir en la lista.
Imágenes:
Instrucciones:
♦ Pegar sobre Main
♦ Luego mirar las instrucciones.
Para usarlo, primero debes añadir las misiones a la base de datos interna 
(ver más abajo). Luego usar los siguientes comandos en un evento, dentro de un 
"Llamar script".

$game_system.add_mission(id) - Añade una misión a la lista de misiones disponibles.

$scene = Scene_MissionSelection.new - Abre la ventana de selección de "misión".

call_mission_event - Llamará al evento común cuya ID sea el valor 
                               guardado en la variable usada por este script.
                               (Ver VARIABLE_ID más abajo para cambiarla)

Código:

Enlace de Descarga

Código:
=begin
Orochii's "Mission" Selection Scene
Versión 1.0

Llama un pequeño cuadro de selección con una lista de misiones/eventos/etc
que varía de acuerdo a las misiones que agregues, que se irán quitando conforme
las vayas pasando.

Para usarlo, primero debes añadir las misiones a la base de datos interna
(ver más abajo). Luego usar los siguientes comandos en un evento, dentro de un
"Llamar script".

$game_system.add_mission(id) - Añade una misión a la lista de misiones disponibles.

$scene = Scene_MissionSelection.new - Abre la ventana de selección de "misión".

call_mission_event - Llamará al evento común cuya ID sea el valor
                    guardado en la variable usada por este script.
                    (Ver VARIABLE_ID más abajo para cambiarla)
=end

# NO EDITES ESTA PARTE. Es necesario que esté aquí, y tal cual :`D.
# (a menos que sepas lo que haces).
module RPG
  class Mission
    def initialize(id, name="", desc="",swId=0,retV=0)
      @id = id
      @swId = swId
      @retV = retV
      @name = name
      @desc = desc
    end
    attr_accessor :id
    attr_accessor :swId
    attr_accessor :retV
    attr_accessor :name
    attr_accessor :desc
  end
end

#==============================================================================
# ** Configuraciones
#------------------------------------------------------------------------------
#  Edita pasado este punto.
#==============================================================================

# =========================
# Base de datos de misiones
# =========================
# Agrega una línea de estas por cada misión.
# RPG::Mision.new( id, "nombre", "descripción larga", switch, valorVariable),
#
# Si las IDs de misión se repiten, lo que pasará es que se activarán en bola xD.
# Ver el caso de la misión primera y misión 1.5 en este ejemplo.
#  id            número de misión
#  nombre        Nombre que se mostrará en la ventana de selección.
#  descripción  Descripción que acompañará la selección.
#  switch        Al activarse este interruptor, la misión dejará de salir.
#  valorVariable La idea inicial es que sea # de evento común a llamar,
#                pero en realidad puede llegar a ser cualquier cosa xd.
$data_missions = [
  RPG::Mission.new( 0,"Primera misión","Sácate las canas."    , 1, 1),
  RPG::Mission.new( 0,"Misión 1.5    ","Es lo que pasa si hay dos 0", 4, 4),
  RPG::Mission.new( 1,"Segunda misión","Pelea contra 8 limos.", 2, 2),
  RPG::Mission.new( 2,"Tercera misión","Lucha con una cigüeña", 3, 3),
]

# =========================
# Otras opciones
# =========================
module OZVocab
  # Vocabulario interno.
  CANCEL =    "Cancelar"
  CANCELDESC = "Cierra la ventana de misiones."
end
module OZMissionSelection
  # ID de variable para guardar la selección.
  VARIABLE_ID = 1
end

#------------------------------------------------------------------------------
#  -- Fin de área editable. --
#==============================================================================

#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  Añadidos a la clase Game_System.
#==============================================================================
class Game_System
  alias ozmissel_initialize initialize
  def initialize
    ozmissel_initialize
    initialize_mission_data
  end
 
  def get_mission_data
    if(@mission_data==nil)
      initialize_mission_data
    end
    return @mission_data
  end
 
  def initialize_mission_data
    @mission_data = []
  end
 
  def add_mission(id)
    if(@mission_data==nil)
      initialize_mission_data
    end
    $data_missions.each_with_index { |mission, i|
      if(mission.id==id)
        unless @mission_data.include?(i)
          @mission_data.push(i)
          @mission_data.sort!
        end
      end
    }
   
  end
end

class Interpreter
  #--------------------------------------------------------------------------
  # * Call Common Event
  #--------------------------------------------------------------------------
  def call_mission_event
    return true if $game_variables[OZMissionSelection::VARIABLE_ID] < 1
    # Get common event
    common_event = $data_common_events[$game_variables[OZMissionSelection::VARIABLE_ID]]
    # If common event is valid
    if common_event != nil
      # Make child interpreter
      @child_interpreter = Interpreter.new(@depth + 1)
      @child_interpreter.setup(common_event.list, @event_id)
    end
    # Continue
    return true
  end
end

#==============================================================================
# ** Window_MissionSelection
#------------------------------------------------------------------------------
#  Muestra la lista de misiones disponibles.
#==============================================================================

class Window_MissionSelection < Window_Selectable
  #attr_accessor :index
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    process_data
    super(0, 0, 320, @data.size*32+32)
    #self.opacity = 0
    @column_max = 1
    @row_size = 32
    refresh
    self.index = 0
  end
 
  def process_data
    @data = []
    $game_system.get_mission_data.each { |entry|
      mission = $data_missions[entry]
      unless($game_switches[ mission.swId ])
        @data.push(mission)
      end
    }
    @data.push(nil)
  end
 
  def get_retVal
    # Retrieve pertinent data
    mission = @data[index]
    # -1 for nil, mission.retV for anything else
    if mission==nil
      return -1
    else
      return mission.retV
    end
  end
 
  #--------------------------------------------------------------------------
  # * Get Item
  #--------------------------------------------------------------------------
  #def item
  #  return @data[self.index]
  #end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    # If item count is not 0, make a bit map and draw all items
    @item_max = @data.size
    self.index = 0 if self.index >= @item_max
   
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, @data.size * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
   
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #    index : item number
  #--------------------------------------------------------------------------
  def draw_item(index)
    # Retrieve pertinent data
    mission = @data[index]
    # Clear its rect
    x = 0
    y = index / @column_max * 32
    rect = Rect.new(x, y, self.contents.width, @row_size)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    # And now draw the corresponding text
    if mission==nil
      txt = OZVocab::CANCEL
      self.contents.draw_text(4, y, self.contents.width, @row_size, txt)
    else
      txt = @data[index].name
      self.contents.draw_text(4, y, self.contents.width, @row_size, txt)
    end
  end
  #--------------------------------------------------------------------------
  # * Help Text Update
  #--------------------------------------------------------------------------
  def update_help
    # Retrieve pertinent data
    mission = @data[index]
    if mission==nil
      txt = OZVocab::CANCELDESC
      @help_window.set_text(txt)
    else
      txt = @data[index].desc
      @help_window.set_text(txt)
    end
  end
end

#==============================================================================
# ** Scene_MissionSelection
#------------------------------------------------------------------------------
#  La escena de selección de "misiones", eventos, whatever.
#==============================================================================

class Scene_MissionSelection
  attr_accessor :spriteset
 
  def main
    create
    @dur = 8 if @dur==nil
    @file = "" if @file==nil
    @vague = 40 if @vague==nil
    # Execute transition
    Graphics.transition(@dur,@file,@vague)
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if scene_condition
        break
      end
    end
   
    # Prepare for transition
    Graphics.freeze
   
    #Event destroy
    dispose
  end
 
  def scene_condition
    $scene != self
  end
 
  #--------------------------------------------------------------------------
  # * Scene Creation
  #--------------------------------------------------------------------------
  def create
    # Object creation
    @spriteset = Spriteset_Map.new
    @selection_window = Window_MissionSelection.new
    @help_window = Window_Help.new
   
    # Object adjust
    sw_x = ($game_player.screen_x-(@selection_window.width/2))
    sw_y = ($game_player.screen_y-@selection_window.height)
    @selection_window.x = [[sw_x , 640-@selection_window.width].min , 0].max
    @selection_window.y = [[sw_y , 480-@selection_window.height].min , 0].max
    @help_window.y = 480 - @help_window.height
    @selection_window.help_window = @help_window
    @a_p_back = @selection_window.index #index backup
    @selection_window.update_help
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Object update
    @spriteset.update
    @selection_window.update
    @help_window.update
    if @selection_window.index != @a_p_back
      @selection_window.update_help
      @a_p_back = @selection_window.index
    end
    if Input.trigger?(Input::B)
      $game_variables[OZMissionSelection::VARIABLE_ID] = -1
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end
    if Input.trigger?(Input::C)
      $game_variables[OZMissionSelection::VARIABLE_ID] = @selection_window.get_retVal
      $scene = Scene_Map.new
      $game_system.se_play($data_system.decision_se)
    end
  end
  #--------------------------------------------------------------------------
  # * Object Disposing
  #--------------------------------------------------------------------------
  def dispose
    @spriteset.dispose
    @selection_window.dispose
    @help_window.dispose
  end
end

Términos de uso:
Libre uso comercial o no comercial, sin necesidad de acreditación. Y pueden modificarlo como quieran.
FAQ:
Ninguna por el momento.

Salut!

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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