I just added this sweet sweet script to my project but noticed a little inconvenience with it which I just can't seem to fix. When I select the "Monster Book" option in the menu, it works fine it works fine and brings up the Monster Book, but when I hit the "cancel" key to return to the main menu, my selector is on the menu option below "Monster Book" (which is for me "ATB Config" or in the demo "Wora's Christmas Gift Box" it was on the "Save" option).
Can anyone show me how to fix this so when I return to the main menu, the selector remains on "Monster Book"?
Here's what I mean. This is when I select the Monster Book, or "Beastiary" as I'm calling it.
And this is how it is when I return to the menu. I'm using BigEd781' Final Fantasy IX Menu, but I don't think that really matters in this situation.
And here's the script if that helps.
Hey, just so you know, we have a
Can anyone show me how to fix this so when I return to the main menu, the selector remains on "Monster Book"?
Here's what I mean. This is when I select the Monster Book, or "Beastiary" as I'm calling it.
And this is how it is when I return to the menu. I'm using BigEd781' Final Fantasy IX Menu, but I don't think that really matters in this situation.
And here's the script if that helps.
Code:
#===============================================================
# ● [VX] ◦ Monster Book ◦ □
#--------------------------------------------------------------
# ◦ by Woratana [woratana@hotmail.com]
# ◦ Thaiware RPG Maker Community
# ◦ Released on: 10/08/2008
# ◦ Version: 1.0
#--------------------------------------------------------------
# ** HOW TO USE
#--------------------------------------------------------------
# * Call Scene Monster Book by call script:
# $scene = Scene_MonsterBook.new
# * Complete all enemies' information by call script:
# $game_system.set_monbook_complete
# * Clear all enemies' information by call script:
# $game_system.reset_monbook
#--------------------------------------------------------------
# * Show enemy's information by call script:
# $game_system.monbook[enemy_id] = true
# * Hide enemy's information by call script:
# $game_system.monbook[enemy_id] = false
# ^ Change enemy_id to ID of enemy you want
# ** e.g. $game_system.monbook[10] = true
#===============================================================
module Wora_Monbook
#===============================================================
# ** [Setup Part] - Config script in this part
#--------------------------------------------------------------
SHOW_IN_MENU = true # Show Monster Book in Menu Command? (true / false)
MENU_COMMAND = 'Beastiary' # Menu command name for Monster Book
MENU_INDEX = 4 # Index of menu command you want to insert monster book
TEXT_TITLE = 'Beastiary'
# Monster Book Title (Show at top left of the screen)
TEXT_FOUND = 'Found: '
# Text before number of how many monster are found
TEXT_COMPLETED = 'Completed: '
# Text before percentage of how many monster are found
TEXT_DOT = '.'
# Text show after enemy's ID (e.g. '.' will make '2.' and ')' will make '2)' )
COMPARE_STATUS = true
# Use Compare Status System? It will compare enemy's status with highest level
# actor in party. Show GREEN number if enemy has lower status.
# Show RED-GRAY number if enemy has higher status. (true / false)
#===============================================================
end
#===============================================================
# ** [Alias] Game_System
#--------------------------------------------------------------
class Game_System
attr_accessor :monbook
alias :wora_monbook_gamsys_ini :initialize
def initialize
wora_monbook_gamsys_ini
create_monbook
end
def create_monbook
@monbook ||= Array.new($data_enemies.size) {false}
end
def set_monbook_complete
@monbook = Array.new($data_enemies.size) {true}
@monbook[0] = false
end
def reset_monbook
@monbook = Array.new($data_enemies.size) {false}
end
end
#===============================================================
# ** [Alias] Game_Troop
#--------------------------------------------------------------
class Game_Troop < Game_Unit
alias :wora_monbook_gamtroop_setup :setup
def setup(*args)
wora_monbook_gamtroop_setup(*args)
$game_system.create_monbook
@enemies.each {|e| $game_system.monbook[e.enemy_id] = true }
end
end
#===============================================================
# ** Window_MonsterBHelp
#--------------------------------------------------------------
class Window_MonsterBHelp < Window_Base
include Wora_Monbook
def initialize
super(0, 0, 544, WLH + 32)
# Write Monster Book Title
contents.font.color = system_color
contents.draw_text(0, 0, contents.width, WLH, TEXT_TITLE)
# Calculate found monster & complete percentage
found_count = 0
$game_system.monbook.each {|e| found_count += 1 if e }
percent_count = (found_count * 100) / ($data_enemies.size - 1)
# Collect & Store Text in variables
found_text = found_count.to_s + '/' + ($data_enemies.size - 1).to_s
percent_text = percent_count.to_s + '%'
mid_text = ' | '
right_text = TEXT_FOUND + found_text + mid_text + TEXT_COMPLETED +
percent_text
# Calculate Text Width
found_t_width = contents.text_size(TEXT_FOUND).width
found_width = contents.text_size(found_text).width
percent_t_width = contents.text_size(TEXT_COMPLETED).width
mid_width = contents.text_size(mid_text).width
right_width = contents.text_size(right_text).width
# Write Monster Found & Complete Percentage
contents.font.color = normal_color
contents.draw_text(contents.width - right_width, 0, contents.width, WLH,
TEXT_FOUND)
contents.draw_text(contents.width - right_width + found_t_width +
found_width, 0, contents.width, WLH, mid_text + TEXT_COMPLETED)
contents.font.color = crisis_color
contents.draw_text(contents.width - right_width + found_t_width, 0,
contents.width, WLH, found_text)
contents.draw_text(contents.width - right_width + found_t_width +
found_width + mid_width + percent_t_width, 0, contents.width, WLH,
percent_text)
end
end
#===============================================================
# ** Window_MonsterBDetail
#--------------------------------------------------------------
class Window_MonsterBDetail < Window_Base
def initialize(window_temp)
super(window_temp.x, window_temp.y, window_temp.width, window_temp.height)
self.opacity = 0
@win_image = Window_Base.new(self.x, self.y, self.width, self.height)
self.z = @win_image.z + 1
@last_enemy = 0
end
def visible=(bool)
super
@win_image.visible = bool
end
def dispose
@win_image.dispose
super
end
def write_detail(enemy_id)
return if @last_enemy == enemy_id
contents.clear
@win_image.contents.clear
@last_enemy = enemy_id
data = $data_enemies[enemy_id]
# Draw Enemy Graphic
bitmap = Cache.battler(data.battler_name, data.battler_hue)
bw = bitmap.width < 160 ? (160 - bitmap.width) / 2 : 0
bh = contents.height - bitmap.height
@win_image.contents.blt(bw, bh, bitmap, bitmap.rect)
bitmap.dispose
# Write Name
contents.font.color = normal_color
contents.draw_text(0, 0, contents.width, WLH,
data.id.to_s + Wora_Monbook::TEXT_DOT + ' ' + data.name)
# Write Enemy Status
hpx = 120
draw_enemy_stat(data, contents.width - (hpx * 2) - 32, 0, hpx, 'hp')
draw_enemy_stat(data, contents.width - hpx, 0, hpx, 'mp')
draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 2, hpx, 'atk')
draw_enemy_stat(data, contents.width - hpx, WLH * 2, hpx, 'def')
draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 3, hpx, 'spi')
draw_enemy_stat(data, contents.width - hpx, WLH * 3, hpx, 'agi')
draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 4, hpx, 'hit')
draw_enemy_stat(data, contents.width - hpx, WLH * 4, hpx, 'eva')
draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 6, hpx, 'exp')
draw_enemy_stat(data, contents.width - hpx, WLH * 6, hpx, 'gold')
rect = Rect.new(contents.width - (hpx * 2) - 8, (WLH * 8) - 8, 216,
(WLH * 4) + 16)
contents.fill_rect(rect, Color.new(0,0,0,140))
lsize = 2 # Line Size
lcolor = Color.new(255,255,255,160) # Line Color
contents.fill_rect(rect.x, rect.y, lsize, rect.height, lcolor)
contents.fill_rect(rect.x, rect.y, rect.width, lsize, lcolor)
contents.fill_rect(rect.x + rect.width - lsize, rect.y, lsize,
rect.height, lcolor)
contents.fill_rect(rect.x, rect.y + rect.height - lsize, rect.width,
lsize, lcolor)
contents.font.color = system_color
contents.draw_text(contents.width - (hpx * 2), WLH * 8, 200, WLH,
'Drop Item 1')
draw_enemy_drop(data, 1, contents.width - (hpx * 2), WLH * 9)
contents.font.color = system_color
contents.draw_text(contents.width - (hpx * 2), WLH * 10, 200, WLH,
'Drop Item 2')
draw_enemy_drop(data, 2, contents.width - (hpx * 2), WLH * 11)
end
def draw_enemy_stat(actor, x, y, width, stat)
color1 = system_color
color2 = normal_color
slash = false
# Find highest level actor
if Wora_Monbook::COMPARE_STATUS
hactor = ($game_party.members.sort {|a,b| a.level <=> b.level })
hactor = hactor[hactor.size - 1]
end
case stat
when 'hp'
vocab = Vocab::hp
number = actor.maxhp
hnumber = hactor.maxhp if Wora_Monbook::COMPARE_STATUS
slash = true
when 'mp'
vocab = Vocab::mp
number = actor.maxmp
hnumber = hactor.maxmp if Wora_Monbook::COMPARE_STATUS
slash = true
when 'atk'
vocab = Vocab::atk
number = actor.atk
hnumber = hactor.atk if Wora_Monbook::COMPARE_STATUS
when 'def'
vocab = Vocab::def
number = actor.def
hnumber = hactor.def if Wora_Monbook::COMPARE_STATUS
when 'spi'
vocab = Vocab::spi
number = actor.spi
hnumber = hactor.spi if Wora_Monbook::COMPARE_STATUS
when 'agi'
vocab = Vocab::agi
number = actor.agi
hnumber = hactor.agi if Wora_Monbook::COMPARE_STATUS
when 'hit'
vocab = 'Hit'
number = actor.hit
hnumber = hactor.hit if Wora_Monbook::COMPARE_STATUS
when 'eva'
vocab = 'Evasion'
number = actor.eva
hnumber = hactor.eva if Wora_Monbook::COMPARE_STATUS
when 'exp'
vocab = 'Exp.'
number = actor.exp
color2 = crisis_color
when 'gold'
vocab = 'Money'
number = actor.gold
color2 = crisis_color
end
if Wora_Monbook::COMPARE_STATUS and !hnumber.nil?
if hnumber > number # Higher
color2 = power_up_color
elsif hnumber < number # Less
color2 = power_down_color
elsif hnumber == number # Equal
color2 = normal_color
end
end
contents.font.color = color1
contents.draw_text(x, y, 50, WLH, vocab)
xr = x + width
contents.font.color = color2
if slash
contents.draw_text(xr - 95, y, 40, WLH, number, 2)
contents.draw_text(xr - 55, y, 11, WLH, '/', 2)
end
w_ava = slash ? 40 : 80
contents.draw_text(xr - w_ava, y, w_ava, WLH, number, 2)
end
def draw_enemy_drop(actor, drop_id, x, y)
drop = eval('actor.drop_item' + drop_id.to_s)
if drop.kind.zero?
contents.font.color = normal_color
contents.draw_text(x, y, 200, WLH, " ---------")
else
case drop.kind
when 1; item = $data_items[drop.item_id]
when 2; item = $data_weapons[drop.weapon_id]
when 3; item = $data_armors[drop.armor_id]
end
draw_item_name(item, x, y)
end
end
end
#===============================================================
# ** Scene_MonsterBook
#--------------------------------------------------------------
class Scene_MonsterBook < Scene_Base
def initialize(from_menu = false)
@from_menu = from_menu
end
def start
super
create_menu_background
$game_system.create_monbook
@window_help = Window_MonsterBHelp.new
# Create Monster List
monlist = []
$game_system.monbook.each_index do |i|
next if i == 0 # The first index in $data_enemies is blank
# If player found the monster
if $game_system.monbook[i]
montext = i.to_s + Wora_Monbook::TEXT_DOT + ' ' + $data_enemies[i].name
else # If player haven't found
montext = i.to_s + Wora_Monbook::TEXT_DOT
end
monlist << montext
end
@window_monlist = Window_Command.new(544, monlist, 2)
@window_monlist.y = @window_help.height
@window_monlist.height = Graphics.height - @window_help.height
@window_monlist.active = true
@window_mondetail = Window_MonsterBDetail.new(@window_monlist)
@window_mondetail.visible = false
end
def update
super
if @window_monlist.active
@window_monlist.update
if Input.trigger?(Input::C)
# View monster's detail if found monster
if $game_system.monbook[@window_monlist.index + 1]
Sound.play_decision
@window_monlist.active = false
@window_monlist.visible = false
@window_mondetail.active = true
@window_mondetail.visible = true
@window_mondetail.write_detail(@window_monlist.index + 1)
else
Sound.play_cancel
end
elsif Input.trigger?(Input::B)
Sound.play_cancel
# Return
$scene = @from_menu ? Scene_Menu.new(Wora_Monbook::MENU_INDEX) :
Scene_Map.new
end
elsif @window_mondetail.active
if Input.trigger?(Input::B)
Sound.play_cancel
@window_monlist.active = true
@window_monlist.visible = true
@window_mondetail.active = false
@window_mondetail.visible = false
end
end
end
def terminate
super
dispose_menu_background
@window_help.dispose
@window_monlist.dispose
@window_mondetail.dispose
end
end
#=============================================================
# * Window_Command Insert Tool
#=============================================================
class Window_Command < Window_Selectable
unless method_defined? :wora_cominstool_wincom_ini
alias wora_cominstool_wincom_ini initialize
alias wora_cominstool_wincom_drawitem draw_item
end
#------------------------------------
# * [Alias] Initialize
#------------------------------------
def initialize(*args)
@disabled_commands = [] # Array to keep track of disabled commands
wora_cominstool_wincom_ini(*args)
end
#------------------------------------
# * [Alias] Draw_Item
#------------------------------------
def draw_item(*args)
wora_cominstool_wincom_drawitem(*args)
# Set array's index to 1 if command is disabled
@disabled_commands[args[0]] = args[1].nil? || args[1] ? nil : true
end
#------------------------------------
# * Insert Command
#------------------------------------
def ins_command(index, text)
@commands.insert(index, text) # Insert new commands
@disabled_commands.insert(index, nil)
# Set new height for window
old_disabled_commands = @disabled_commands.dup
self.height = (@commands.size + @column_max - 1) / @column_max * WLH + 32
@item_max = @commands.size # Update @item_max to make refresh works correctly
create_contents # Create new content because window's size changed
refresh # Redraw window's contents
old_disabled_commands.each_index do |i|
if !old_disabled_commands[i].nil?
draw_item(i, false) # Draw commands that disabled before
end
end
end
#------------------------------------
# * Add Command
#------------------------------------
def add_command(text)
ins_command(@commands.size, text) # Add new command to new index
end
end
#=============================================================
# * Add command linked to Monster Book in Menu
#=============================================================
if Wora_Monbook::SHOW_IN_MENU
class Scene_Menu < Scene_Base
#--------------------------------------------------------------------------
# * Sort New Command(s)
#--------------------------------------------------------------------------
def wsort_newcommand
@wsorted_command ||= [] # Array to collect sorted commands
wnewcommand = @wnewcommand - @wsorted_command # Remove sorted commands
wnewcommand.sort.each {|i| @menu_index += 1 if @menu_index >= i }
@command_window.index = @menu_index # Set window's index to new index
@wsorted_command = @wsorted_command + @wnewcommand # Add sorted commands
end
#--------------------------------------------------------------------------
# * [Alias] Create Command Window
#--------------------------------------------------------------------------
alias wora_menucomorg_scemenu_crecomwin create_command_window
def create_command_window(*args)
wora_menucomorg_scemenu_crecomwin(*args)
# Insert new command
@command_window.ins_command(Wora_Monbook::MENU_INDEX,
Wora_Monbook::MENU_COMMAND)
# Set index to correct one if @menu_index is after/equal to new command
@wnewcommand ||= []
@wnewcommand << Wora_Monbook::MENU_INDEX
wsort_newcommand
end
#--------------------------------------------------------------------------
# * [Alias] Update Command Selection
#--------------------------------------------------------------------------
alias wora_menucomorg_scemenu_updcomsel update_command_selection
def update_command_selection(*args)
@menucomorpg_change = false
# If player choose new command
if Input.trigger?(Input::C) and @command_window.index ==
Wora_Monbook::MENU_INDEX
Sound.play_decision
$scene = Scene_MonsterBook.new(true)
else # If player choose index after new command
if Input.trigger?(Input::C) and @command_window.index >
Wora_Monbook::MENU_INDEX
@command_window.index -= 1 # Decrease index to make old update works
@menucomorpg_change = true
end
wora_menucomorg_scemenu_updcomsel(*args)
end
@command_window.index += 1 if @menucomorpg_change # Increase index back
end
#--------------------------------------------------------------------------
# * [Alias] Update Actor Selection
#--------------------------------------------------------------------------
alias wora_menucomorg_scemenu_updactsel update_actor_selection
def update_actor_selection(*args)
@menucomorpg_change = false
# If player choose index after new command
if Input.trigger?(Input::C) and @command_window.index >
Wora_Monbook::MENU_INDEX
@command_window.index -= 1 # Decrease index to make old update works
@menucomorpg_change = true
end
wora_menucomorg_scemenu_updactsel(*args)
@command_window.index += 1 if @menucomorpg_change # Increase index back
end
end
end
Hey, just so you know, we have a
Code:
tag for scripts. I went ahead and added it to your post! ~Perihelion[/color]