HUNTERVie Mar 01, 2013 11:02 pm
Super Usuario
Sistema de Misiones
COMENTARIO:
Este es un Sistema de Misiones para el RPG Maker XP
para muchos es el mejor sistema de misiones por
ser facil sencillo y muy personalizable a la hora
de insertar una mision.
IMAGENES DE MUESTRA:
CREDITOS:
Falcao
SCRIPT:
- Código:
#========================================================================#
# #*****************# Misiones interactivas V 1.0 Falcao script #
# #*** By Falcao ***# Permite crear misiones mostrando la lista #
# #*****************# en una scene. Permite crear de 1 hasta #
# RMXP un trillon de misiones segun el caso. #
# makerpalace.onlinegoo.com Date 11/16/2009 #
#========================================================================#
#------------------------------------------------------------------------
# * Instrucciones
#
# Solo basta con copiar y pegar el script encima de main, editar las
# misiones que necesites en el module de abajo
#
# Para llamar el script basta con pulsar tecla 'A' por defecto
# pero puede ser llamado manualmente usando el siguiente codigo
#
# $scene = Scene_Mision.new
#
# Para agregar una mision ya creada al inventario hacerlo asi:
#
# Tareas.mision(id) En vez de 'id' pon el ID de mision a agregar
#
# Para completar una mision usar el siguiente comando
#
# Tareas.completar_mision(id) En vez de 'id' pon el ID de mision a
# Completar. Ejemplo: Tareas.completar_mision(1) Completa id 1
#
#
# Licensia: Puede ser usado en juegos comerciales o no comerciales
#
# Creditos: By Falcao
#
#-------------------------------------------------------------------------
module Tareas
# Nombre de la mision: A = ID de mision, B = Nombre de mision
Nombre = {
1=> 'Rescatar a pulga',
2=> 'Ver al Presidente',
3=> 'La conquista',
4=> 'Hierva Medicinal',
}
# Descripciones: A = ID de mision, B = contenido soporta 3 lineas
Descripcion = {
1=> ['Ir al pueblo del rey falcao, robarle las llaves reales',
'luego ir a rescatar a la princesa pulga barata encerrada',
'en la masmorra oscura del castillo'],
2=> ['Una de las prinsipales metas que tenes que cumplir es',
'darle una buena patada en el culo al presidente de',
'Enterbrain por sacar el maker mierda del vx'],
3=> ['Conquistar el mundo es una de las tareas mas dificiles',
'que solo se le ocurren a los enfermos mentales',
'si quieres intentalo seria bueno ver el fracaso'],
4=> ['La princesa Arisleyda a sido mordida por una de las',
'serpientes mas venenosas del bosque Maker Palace',
'se podra salvar solo con la planta hierva medicinal'],
}
# Tareas de mision: A = ID de mision, B = contenido soporta 2 lineas
Pasos = {
1=> ['Robarle las llaves al rey Falcao',
'Rescatar a la prinsesa pulga barata'],
2=> ['Ir al pueblo donde se encuentra el presidente',
'Darle una buena parada al presindete'],
3=> ['Conquistar el mundo',
'none'],
4=> ['Conseguir 10 Hojas de hierva medicinal',
'Darle el antidoto a la princesa Arisleyda'],
}
# Recompensa en Items: A = ID de mision, B = [Tipo de Item, ID de Item]
Reward_Items = {
1=> ['item', 2],
2=> ['armor', 3],
3=> ['weapon', 1],
4=> ['weapon', 19],
}
# Recompensa en dinero: A = ID de mision, B = Cantidad de dinero
Reward_Gold = {
1=> 5,
2=> 10,
3=> 20,
4=> 10,
}
#-----------------------------------------------------------------------
# * Funsiones extras tu decides si las usas o no
# Items necesarios para completar una mision, esto es para realizar una
# busqueda mas avanzada,
# A = ID de mision, B = [ID de item, Cantidad necesaria]
Items_Needed = {
4=> [11, 10],
}
# Activar interruptor al completar mision, esto puede ser opcional
# A = ID de mision, B = ID de interruptor
Mision_Switch = {
3=> 50,
}
#----------------------------------------------------------------------
# *Configuracion del systema en general
# Tocar sonido ME al completar una mision, si no se quiere sonido dejar
# comillas en blanco ""
Play_Mision_Me = "015-Mystery01"
# Tiempo en segundos para mostrar la ventana cuando una mision se a
# completado
Pop_Mision_Time = 3
# Boton para llamar el script tecla 'A' del teclado
Call_Mision = Input::X
# Impedir llamar el script por medio de la tecla especificada
# Por defecto esto va desactivado false
Disable_Mision_Call = false
#-----------------------------------------------------------------------
# System
$falcao_mision = []
$falcao_completed = []
$mision_data = [id = nil, item = nil, gold = nil, pop_time = 0, show = false]
def self.mision(id)
unless $falcao_mision.include?(id)
$falcao_mision.push(id)
end
end
def self.completar_mision(mision_id)
return unless $falcao_mision.include?(mision_id)
unless $falcao_completed.include?(mision_id)
$mision_data[0] = mision_id
Reward_Items.each do |id, value|
if id == mision_id
case value[0]
when 'item'
item = $data_items[value[1]]
$game_party.gain_item(item.id, 1)
$mision_data[1] = item
when 'weapon'
weapon = $data_weapons[value[1]]
$game_party.gain_weapon(weapon.id, 1)
$mision_data[1] = weapon
when 'armor'
armor = $data_armors[value[1]]
$game_party.gain_armor(armor.id, 1)
$mision_data[1] = armor
end
end
$falcao_completed.push(mision_id)
end
#gold
Reward_Gold.each do |id, value|
if id == mision_id
$game_party.gain_gold(value)
$mision_data[2] = value
end
end
# Switch
Mision_Switch.each do |id, value|
if id == mision_id
$game_switches[value] = true
$game_map.need_refresh = true
end
end
Items_Needed.each do |id, value|
if id == mision_id
if $game_party.item_number(value[0]) < value[1]
$game_party.gain_item(value[0], value[1])
end
end
end
$mision_data[4] = true
$mision_data[3] = 40 * Pop_Mision_Time
Audio.me_play("Audio/Me/" + Play_Mision_Me)
end
end
end
class Font
alias falcaoBest_font initialize
def initialize
falcaoBest_font
if $scene.is_a?(Scene_Mision) or $mision_data[4]
self.name = "Georgia"
self.size = 20
end
end
end
class Misiones < Window_Base
include Tareas
def initialize
super(180, 64, 460, 416)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 255
end
def refresh(mision_id)
self.contents.clear
@mision_id = mision_id
draw_grid(0,336)
draw_grid(225,336)
if $falcao_mision.include?(mision_id)
draw_mision_contents
else
self.contents.draw_text(-20, 100, self.width, 50, "No hay datos",1)
end
end
def draw_mision_contents
Nombre.each do |id, value|
if id == @mision_id
self.contents.font.color = Color.new(255, 120, 0, 255)
self.contents.draw_text(-20, 0, self.width, 50 , value,1)
end
end
Descripcion.each do |id, value|
if id == @mision_id
self.contents.font.color = system_color
self.contents.draw_text(0, 40, self.width, 50 , "Descripcion:")
self.contents.font.color = normal_color
self.contents.draw_text(0, 70, self.width, 50 , value[0])
self.contents.draw_text(0, 94, self.width, 50 , value[1])
self.contents.draw_text(0, 119, self.width, 50 , value[2])
end
end
Pasos.each do |id, value|
if id == @mision_id
self.contents.font.color = system_color
self.contents.draw_text(0, 165, self.width, 50 , "Tareas:")
self.contents.font.color = normal_color
self.contents.draw_text(0, 197, self.width, 50 ,'1- ' + value[0])
self.contents.draw_text(0, 222, self.width, 50 ,'2- ' + value[1])
end
end
Reward_Items.each do |id, value|
if id == @mision_id
case value[0]
when 'item'
item = $data_items[value[1]]
when 'weapon'
item = $data_weapons[value[1]]
when 'armor'
item = $data_armors[value[1]]
end
self.contents.font.color = system_color
self.contents.draw_text(0, 270, self.width, 50 , "Recompensa:")
self.contents.font.color = normal_color
icon = RPG::Cache.icon(item.icon_name) rescue nil
self.contents.blt(20, 344, icon, Rect.new(0, 0, 24, 24),255) rescue nil
self.contents.draw_text(50, 335, self.width, 50 , item.name)
end
end
Reward_Gold.each do |id, value|
if id == @mision_id
icon = RPG::Cache.icon("032-Item01") rescue nil
self.contents.blt(240, 344,icon,Rect.new(0, 0, 24, 24), 255) rescue nil
self.contents.draw_text(275, 335, self.width, 50,
"#{value.to_s} #{$data_system.words.gold}")
end
end
end
def draw_grid(x,y)
width = 200
color = system_color
self.contents.fill_rect(x+2, y-2, width-4, 1, color)
self.contents.fill_rect(x+1, y-1, width-2, 1, color)
self.contents.fill_rect(x, y, width, 1, color)
self.contents.fill_rect(x, y+1, 3, 45, color)
self.contents.fill_rect(x+ 197, y+1, 3, 45, color)
self.contents.fill_rect(x, y+45, width, 1, color)
self.contents.fill_rect(x+1, y+46, width-2, 1, color)
self.contents.fill_rect(x+2, y+47, width-4, 1, color)
end
end
class Mision_Indice < Window_Selectable
def initialize(x=0,y=0)
super(x, y, 180, 390)
@column_max = 1
refresh
self.index = 0
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in Tareas::Nombre.values
@data.push(i)
end
@item_max = @data.size
$all_quests = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
nombre = @data[index]
self.contents.font.color = normal_color
x, y = 4, index * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
if $falcao_mision.include?(index + 1)
self.contents.draw_text(x, y, 212, 32, nombre)
else
self.contents.font.color = disabled_color
self.contents.draw_text(x, y, 212, 32, "Bloqueado")
end
end
end
class Mision_Help < Window_Base
def initialize(x=0,y=0,ancho=640, alto=64)
super(x, y, ancho, alto)
self.contents = Bitmap.new(width - 32, height - 32)
end
def set_progress
self.contents.clear
self.contents.draw_text(0, 0, self.width, 32 , "Misiones")
mision = $falcao_mision.size
texto = "#{"Progreso"} #{mision * 100/$all_quests}%"
self.contents.draw_text(0, 30, self.width, 32 , texto)
end
def set_status(mision_id)
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, self.width, 32 , "Mision Status:")
if $falcao_mision.include?(mision_id)
draw_needed_items(mision_id)
if $falcao_completed.include?(mision_id)
self.contents.font.color = Color.new(128, 255, 128, 255)
self.contents.draw_text(120, 0, self.width, 32 , "Completada!")
else
self.contents.font.color = normal_color
self.contents.draw_text(120, 0, self.width, 32 , "En proceso")
end
else
self.contents.font.color = disabled_color
self.contents.draw_text(120, 0, self.width, 32 , "Bloqueada")
end
end
def draw_needed_items(mision_id)
Tareas::Items_Needed.each do |id, value|
if id == mision_id
draw_grid(280,1)
item = $data_items[value[0]]
icon = RPG::Cache.icon(item.icon_name) rescue nil
self.contents.blt(290, 3, icon, Rect.new(0, 0, 24, 24), 255) rescue nil
c = $game_party.item_number(item.id); n = value[1]; w = self.width
self.contents.draw_text(340, 0, w, 32,"#{c.to_s} / #{n.to_s}")
end
end
end
def draw_grid(x,y)
width = 150
color = system_color
self.contents.fill_rect(x+2, y-2, width-4, 1, color)
self.contents.fill_rect(x+1, y-1, width-2, 1, color)
self.contents.fill_rect(x, y, width, 1, color)
self.contents.fill_rect(x, y+1, 3, 30, color)
self.contents.fill_rect(x+ 147, y+1, 3, 30, color)
self.contents.fill_rect(x, y+30, width, 1, color)
self.contents.fill_rect(x+1, y+31, width-2, 1, color)
self.contents.fill_rect(x+2, y+32, width-4, 1, color)
end
end
class Pop_Mision < Window_Base
def initialize
super(170, 0, 300, 190)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Georgia"
self.contents.font.size = 20
self.opacity = 200
refresh
end
def refresh
self.contents.clear
data = $mision_data
return unless data[4]
self.contents.font.color = normal_color
if data[3] > 0; data[3] -= 1
Tareas::Nombre.each do |id, value|
if id == data[0]
self.contents.draw_text(-20, 0,self.width,32, "#{value} Completada!",1)
end
end
self.contents.font.color = system_color
self.contents.draw_text(0, 45, self.width, 32 , "Recompensas:")
#Items
self.contents.font.color = normal_color
if data[1] != nil
icon = RPG::Cache.icon(data[1].icon_name) rescue nil
self.contents.blt(0, 85, icon, Rect.new(0, 0, 24, 24), 255) rescue nil
self.contents.draw_text(35, 85, self.width, 32 , data[1].name)
end
#Gold
if data[2] != nil
icon = RPG::Cache.icon("032-Item01") rescue nil
if data[1] == nil
x = 35; y = 85
else
x = 40; y = 121
end
self.contents.blt(0, y, icon, Rect.new(0, 0, 24, 24), 255) rescue nil
self.contents.draw_text(x, y, self.width, 32,
"#{data[2].to_s} #{$data_system.words.gold}")
end
$mision_data = [nil, nil, nil, 0, false] if data[3] == 1
end
end
end
class Scene_Mision
def main
@indice_mision = Mision_Indice.new(0,90)
@misiones = Misiones.new
@misiones.refresh(@indice_mision.index + 1)
@title = Mision_Help.new(180,0,462)
@title.set_status(@indice_mision.index + 1)
@progress = Mision_Help.new(0,0,180,90)
@progress.set_progress
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@indice_mision.dispose
@misiones.dispose
@title.dispose
@progress.dispose
end
def update
@indice_mision.update
@mision = @indice_mision.index + 1
update_parametros
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
end
def update_parametros
@misiones.refresh(@mision)
@title.set_status(@mision)
end
end
class Scene_Map
include Tareas
alias falcao_mision_main main
def main
@mision_pop = Pop_Mision.new
$mision_data[4] ? @mision_pop.visible = true : @mision_pop.visible = false
falcao_mision_main
@mision_pop.dispose
end
alias falcao_mision_update update
def update
falcao_mision_update
if $mision_data[4]
@mision_pop.refresh
@mision_pop.visible = true
else
@mision_pop.visible = false
end
if Input.trigger?(Call_Mision) and !Disable_Mision_Call
$scene = Scene_Mision.new
return
end
end
end
class Scene_Save
alias falcao_write_mision write_save_data
def write_save_data(file)
falcao_write_mision(file)
Marshal.dump($falcao_mision, file)
Marshal.dump($falcao_completed, file)
Marshal.dump($mision_data, file)
end
end
class Scene_Load
alias falcao_read_mision read_save_data
def read_save_data(file)
falcao_read_mision(file)
$falcao_mision = Marshal.load(file)
$falcao_completed = Marshal.load(file)
$mision_data = Marshal.load(file)
end
end
Eso es todo nos leemos.