Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] "Mission" selector

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] "Mission" selector

Mensaje por orochii el 2017-05-22, 00:28

"Mission" Selector
Autor Orochii Zouveleki, versión 1.0b
RGSS1

Descripción
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.

Screens


Script
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

Demo
https://dl.dropboxusercontent.com/u/13006190/OZMissionSelection.rar

Instrucciones
Pegarlo 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)

FAQ
Ninguna por el momento

Términos de uso
Libre uso comercial o no comercial, sin necesidad de acreditación. Y pueden modificarlo como quieran.

Salut!


Última edición por orochii el 2017-05-22, 04:46, editado 1 vez
avatar
orochii
Reportero

0/3

Créditos 7712

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por BruMaster7Maker el 2017-05-22, 00:47

Hola Orochii!!! Una duda es un Script para agregar misiones al juego estilo GTA?
Si es así puede servirme de mucho.

PD: Me gusta mucho la actitud Tuya y de Wecoc que nunca piden Créditos.
Me parece que esa es la actitud de una persona que verdaderamente quiere ayudar a la Comunidad. Sobretodo Dejandola Libre al uso, Los Créditos a veces si cuesta mucho trabajo hacer lo que hiciste hay veces que merecen tener Créditos.
avatar
BruMaster7Maker
Soñador
Soñador

0/3

Créditos 59

Gracias : 17

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por orochii el 2017-05-22, 00:54

Es un poco como misiones generícas. El script lo que hace es un selector de opciones, que al seleccionarlas te devuelven un valor en una variable, dejan de aparecer en la lista si activas un interruptor, y tienen un nombre y una descripción cualquiera. En GTA es más como que te habla un patas vueltas y ya inició la misión xd, entonces diría que no :V.

Y bueno, cada quien lo que quiera pedir. Yo esto lo pongo sin créditos porque lo hice para mi juego, y me tomó un rato nada más independizarlo xd. Que lo hice because why not :V.

También uso la psicología inversa. Si pido créditos, ni lo usarán. Si no pido créditos lo usan y me los dan. xDDDDDDD
avatar
orochii
Reportero

0/3

Créditos 7712

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por BruMaster7Maker el 2017-05-22, 01:07

@orochii escribió:Es un poco como misiones generícas. El script lo que hace es un selector de opciones, que al seleccionarlas te devuelven un valor en una variable, dejan de aparecer en la lista si activas un interruptor, y tienen un nombre y una descripción cualquiera. En GTA es más como que te habla un patas vueltas y ya inició la misión xd, entonces diría que no :V.

Y bueno, cada quien lo que quiera pedir. Yo esto lo pongo sin créditos porque lo hice para mi juego, y me tomó un rato nada más independizarlo xd. Que lo hice because why not :V.

También uso la psicología inversa. Si pido créditos, ni lo usarán. Si no pido créditos lo usan y me los dan. xDDDDDDD

Ok!!! Yo capaz que busque uno estilo "Patas Vueltas" ajjaja.

Si era un poco obvio lo de la Pscicología Inversa xD. Yo siempre daré créditos a quien le utilice algún Recurso. Me parece que hacer eso es un Símbolo de Respeto al "Recurso" Y sobretodo a su creador.
avatar
BruMaster7Maker
Soñador
Soñador

0/3

Créditos 59

Gracias : 17

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por orochii el 2017-05-22, 01:48

xD. Sí es que digamos, para hacerlo como GTA creo es más sencillo. Pones un personajillo por ahí que te active un interruptor y listo, empieza la misión. 

Este script en buena teoría se puede usar para eso también, nada más que el script serviría la función entonces de llevar "cuenta" de las misiones que has aceptado. No de aceptar/cancelar.

En realidad este script es uno de los más multiusos que he hecho porque es nada más una lista de cosas que te devuelven un valor cualquiera y se remueve de la lista con un switch específico xD. Es muy "úsese según sus necesidades" (?) xd. 

El script lo hice porque tenía un personaje en mi juego que te daba misiones, pero lo estaba haciendo con "Mostrar elecciones...". El evento era ya de por sí largo, con cada diálogo de cada misión, qué trata, si aceptas o no, etc. Y faltaba aún hacer variantes de si habías hecho segunda misión y las otras no, si la tercera, etc. Y pues entonces dije "¡al carajo! ¡script!" xD.

Y entonces con esto se puede meter en un evento cualquiera, y llamar un evento común X apenas se cierra el menú, o hacerlo por aparte. No lo hice automático para dejar la opción, creo que da para hacerse más cosas así xd.

Mis explicaciones son más complicadas que usar el script xD. Salut.
avatar
orochii
Reportero

0/3

Créditos 7712

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por BruMaster7Maker el 2017-05-22, 02:26

@orochii escribió:xD. Sí es que digamos, para hacerlo como GTA creo es más sencillo. Pones un personajillo por ahí que te active un interruptor y listo, empieza la misión. 

Este script en buena teoría se puede usar para eso también, nada más que el script serviría la función entonces de llevar "cuenta" de las misiones que has aceptado. No de aceptar/cancelar.

En realidad este script es uno de los más multiusos que he hecho porque es nada más una lista de cosas que te devuelven un valor cualquiera y se remueve de la lista con un switch específico xD. Es muy "úsese según sus necesidades" (?) xd. 

El script lo hice porque tenía un personaje en mi juego que te daba misiones, pero lo estaba haciendo con "Mostrar elecciones...". El evento era ya de por sí largo, con cada diálogo de cada misión, qué trata, si aceptas o no, etc. Y faltaba aún hacer variantes de si habías hecho segunda misión y las otras no, si la tercera, etc. Y pues entonces dije "¡al carajo! ¡script!" xD.

Y entonces con esto se puede meter en un evento cualquiera, y llamar un evento común X apenas se cierra el menú, o hacerlo por aparte. No lo hice automático para dejar la opción, creo que da para hacerse más cosas así xd.

Mis explicaciones son más complicadas que usar el script xD. Salut.

Jaja Yo Almenos Entiendo, Me puede servir más adelante (Yo quiero aprender a hacer este tipo de scripts, pero me estaba viendo un curso de "Código Fácilito" En YouTube Pero era más aburrido que no se que.
En lo de las explicaciones casi todos son así a no ser que te expliquen con 90 mil imagenes jaja, Es como "No se como hacer que desaparezca algo despues de que ya hice su evento"
Respuesta: "Pues fácil entras a el Evento creas una nueva página y creas una variable en la base de datos con un nombre simple como "Otorrinolaringólogo" o "Electroencefalografista" o más bien "Esternocleidomastoideo" Y luego la activas a la variable en la pestaña Variables y entras a tu Evento y agregas la variable, y Listo!!"

Obviamente Además de Exagerar No es una respuesta real ni siquiera sé lo qu dije y la pregunta en sí en palabras es RE Fácil de Responder

PD: Por eso mi idea de crear un canal de Mundo Maker, Sigo con esa idea se haría conocida en el Foro (Por la cantidad de usuarios que no son millones pero son lo suyo).
Es más probablemente lo plantearé a algún Admin o algo de eso que yo me puedo encargar del canal y Poner Semanalmente una Encuesta sobre Él Mejor aporte de la semana el cuál sería bueno explicado en Video. Y yo me encargo de lo demás, EJ: Tú Orochii Haces Un Excelente Tema Como los tuyos xD Pero a algunas personas no les queda muy en claro lo que dijiste pero entienden que el "Engine" Por ejemplo les Sirve.
Bueno Pues yo hago el Engine, en video y lo explico detalladamente (Se me dan Bien los Tutos en video xD) O Si no entiendo un Pomo tu lo creas (En el caso de que seas tu el del aporte claro) Y yo lo Edito y mando. Y (Se que vengo repitiendo muchas "Y")
Si tu tienes tus problemas con el Micrófono el cuál yo no tengo pero Mi Laptop Murió, PD: Tengo igual con que grabar el audio, Se podría hacer un buen contenido, entendible y de "Buen Nivel". Sé que me fui al carajo en Tema pero Bueh.

Sí te gusta la ídea dime y se la planteo a algun Admin (No ha Wecoc porque aunque sea con el que siempre limpio mis dudas, lo tengo sobreexplotado en preguntas al pobre. Han sido como 5 o menos, creo que menos, Pero Siempre él xD.
Creo que Ribbu Sí es Activo le puedo decir a él.
Bueno Dime que tal!
avatar
BruMaster7Maker
Soñador
Soñador

0/3

Créditos 59

Gracias : 17

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por orochii el 2017-05-22, 03:11

Pues... tú puedes hacer tu canal y tal, no necesitas preguntarle a nadie xd. Nada más sé constante con el contenido y eso, y pues mantén la temática del canal clara. Y... publicítate y... ya no sé qué más xD.

Pero eso es otro tema xD. Salut.
avatar
orochii
Reportero

0/3

Créditos 7712

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por Wecoc el 2017-05-22, 03:26

No desviéis tanto el tema, por favor.

Me gusta éste script. Parece sencillo a simple vista pero tiene cierta complejidad si lo miras más de cerca, y está bastante completo. ¡Buen aporte!
Como dijiste se puede usar para otras cosas, incluso se me ocurre que puede usarse para que el jugador tenga una espécie de "sistema de mailbox" y reciba cartas, o mensajes o lo que sea (es una idea que salió en el topic de ideas).
avatar
Wecoc
Administrador
Administrador



Créditos 12204

Gracias : 632

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por orochii el 2017-05-22, 04:48

De hecho sí, se puede usar para eso también. Estaba pensando que también podría mantenerse más de una lista de "misiones", para por si quieres hacer por ejemplo lista de correo, lista de tutoriales para revisitar, misiones, etc. Todo con el mismo script xD. Al final es una lista llenable, entonces tiene muchos usos xD, y también la función principal de desencadenar eventos comunes.

Por cierto, he hecho un arreglo por ahí porque el método que usaba para llamar evento común no funcionaba siempre. Pero ahora debería, se supone que imita el llamar evento común del intérprete xd.

Dentro de un rato actualizo la demo también. Salut!

PD.: La principal diferencia es que ahora se llama con call_mission_event y no $game_system.call_mission_event xD, necesitaba que funcionara dentro del intérprete. :'D
avatar
orochii
Reportero

0/3

Créditos 7712

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] "Mission" selector

Mensaje por Contenido patrocinado


Contenido patrocinado


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.