¡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

Reputación del mensaje :100% (3 votos)

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!

#2 Re: [XP] OZ "Mission" Selector el Jue Jul 13, 2017 3:11 am

~Night Shade

avatar
Yeaahhh!! Este script quedara perfectisimo para mi proyecto, si que se le pueden dar bastantes usos.

Excelente aporte.

No se como dar Rep, pero si pudiera lo haria xD

#3 Re: [XP] OZ "Mission" Selector el Jue Jul 13, 2017 3:34 am

EnderScroll

avatar
Muy bien script. Es algo sencillo, pero puede ser Bastante util para muchos(Para mi, por ejemplo).

@~Night Shade: ¿Ves la barrita verde que esta en la cima del tema/mensaje? Cuando pasas el mouse, se extiende y aparece "+ Rep", presiona hay para dar reputacion.

#4 Re: [XP] OZ "Mission" Selector el Vie Jul 14, 2017 3:36 am

~Night Shade

avatar
EnderScroll escribió:Muy bien script. Es algo sencillo, pero puede ser Bastante util para muchos(Para mi, por ejemplo).

@~Night Shade: ¿Ves la barrita verde que esta en la cima del tema/mensaje? Cuando pasas el mouse, se extiende y aparece "+ Rep", presiona hay para dar reputacion.
Listo :p gracias ya le pude dar reputación.

#5 Re: [XP] OZ "Mission" Selector el Vie Jul 14, 2017 4:56 pm

Producciones The Golden

avatar
Mmh... si le agregaras la característica de recompensa dentro del script, utilizando una variable que defina el tipo: Item, Arma, etc... y otra que defina la cantidad, quitando el uso obligatorio de Eventos comunes sin duda sería el script más sencillo y completo a la vez de misiones.
Y si agregas dicha característica... un trigger input: C que permita autocompletar las misiones... y a las misiones les ponemos el mismo nombre que la recompensa...
¡BOOM! ¡El script Item Storage más corto y fácil de usar de todos!
Lo primero supongo que podrás hacerlo, lo segundo lo podría hacer yo editando pero te pido que lo hagas tú (para quitarme trabajo) para que puedas aportarlo al foro y para poder usarlo dándote créditos en mi juego "¿Quién es el cazador?" (y para deshacerme del de Game_Guy que es mucho más complicado y conflictivo que dicha edición de este script).

Por cierto, me encanta como se ve el script, es muy predeterminado y eso me fascina, mi +1 Ópalo Gato.
Eso fue todo... hasta pronto! Ópalo Buscapleitos

Contenido patrocinado


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.