#===============================================================================
# Titolo: B94 - Bestiario
# Versione: 1.0
# Autore: Bisba94
#-------------------------------------------------------------------------------
# Riepilogo versioni:
# - 1.0 (23/07/13) Realase iniziale
#-------------------------------------------------------------------------------
# Condizioni d'uso:
# - Siete liberi di utilizzare questo script in qualunque progetto commerciale o
# non commerciale, chiedo solo di essere citato fra i Crediti.
# - Siete liberi di pubblicare questo script su qualunque community a patto che
# vengano citati l'autore e la provenienza
# - Lo Script può essere modificato per utilizzo personale e pubblicato nella
# nuova versione a patto che vengano citati l'autore del lavoro originale e la provenienza
#-------------------------------------------------------------------------------
# Istruzioni:
# - Incollare sotto Materials prima di Main
# - Apparirà una nuova voce nel menù per accedere al Bestiario (è possibile rimuoverla)
# - Modificate le impostazioni fin dove è segnato, non modificate nulla dello
# script se non sapete cosa state facendo.
#-------------------------------------------------------------------------------
# Contatti:
# - Per qualunque informazione, segnalazione, richiesta o altro scrivete a:
#
[email protected]#===============================================================================
$imported = {} if $imported.nil? # Non modificare queste linee
$imported["B94-Bestiario"] = true # Non modificare queste linee
module Bestiario
# PARTE MODIFICABILE
MENU_COMMAND = "Bestiario" # Nome del Comando che apparirà nel menù
SWITCH_MENU_ATTIVATO = 0 # Switch per attivare il comando nel menù
# (se si imposta 0 è sempre attivo)
ESCLUSI = [1] # Lista dei mostri esclusi dal Bestiario
# Liste dei mostri appartenenti a categorie speciali
MOSTRI_SPECIALI = {:rari => [10,20,24,27],
:boss => [19,23,25,29],
:speciali => [30]
} # NON CANCELLARE
# Numero di cifre della lista di mostri divisi per categorie
CIFRE_MAX = { :comuni => 2,
:rari => 2,
:boss => 1,
:speciali => 1
} # NON CANCELLARE
# Nomi delle categorie
NOME_CATEGORIA = { :comuni => "Comuni",
:rari => "Rari",
:boss => "Boss",
:speciali => "Speciali"
} # NON CANCELLARE
SCONOSCIUTO = "?????????" # Nome visualizzato per i mostri non ancora sconfitti
# Icone degli elementi da visualizzare nel bestiario
ICONE_ELEMENTI = {3 => 96,
4 => 97,
5 => 98,
6 => 99,
7 => 100,
8 => 101,
9 => 102,
10 => 103
} # NON CANCELLARE
CONFRONTO_STAT = true # true: mostra una barra che si riempie al crescere delle statistiche
#Colore barre delle statistiche.
# 'Statistica' => id colore
# 0: PV 1: PM 2: ATT 3: DIF 4: ATTM 5: DIFM 6: AGI 7: FORT
COLORE_STATISTICHE = { 0=>0, 1=> 1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7}
COLORE_RESISTENZA = 10 # Colore attribuito alle resistenze del mostro
COLORE_DEBOLEZZA = 11 # Colore attribuito alle debolezze del mostro
COLORE_NULLO = 7 # Colore attribuito agli elementi che provocano danni nulli
COLORE_CAP = 11 # Colore numero mostri sconfitti massimo
COLORE_BARRA1 = 4 # Colore iniziale barra di completamento
COLORE_BARRA2 = 12 # Colore finale barra di completamento
SWITCH_COMPLETAMENTO = 1 # Switch che quando è ON attiva la visualizzazione delle
# statistiche di completamento del Bestiario (Lista di tutti
# i mostri e percentuale di completamento). Se impostata su 0
# la visualizzazione sarà sempre attiva.
NOME_SPRITE = "" # Testo aggiuntivo per inidicare gli sprite dei nemici che
# appariranno nel bestiario.
# ES: inserendo "_B" il programma cercherà nella cartella battlers
# il file "Mostro_B" invece di "Mostro" usato dal database
MOSTRA_INCONTRI = true # true: mostra il numero di nemici sconfitti
# Limite dei nemici sconfitti visualizzati
# se è 0 il numero sarà illimitato
CAP_SCONFITTI = { :comuni => 5,
:rari => 3,
:boss => 1,
:speciali => 1
} # NON CANCELLARE
SCONFITTI = "Sconfitti" # Testo per i nemici sconfitti
EXP_NAME = "Esperienza" # Testo per il nome dei punti esperienza
TOT_INCONTRATI = "Mostri Incontrati"
TOT_SCONFITTI = "Mostri Sconfitti"
TOT_DANNI = "Danni Inflitti"
# Lista dei titolo ottenibili
# no. % col titolo
TITOLI = { 1 => [ 0, 1, "Principiante"],
2 => [ 20, 2, "Intermedio"],
3 => [ 50, 3, "Esperto"],
4 => [ 80, 4, "Maestro"],
5 => [100, 5, "IL Cacciatore"]
} # NON CANCELLARE
# FINE PARTE MODIFICABILE!!
def self.create_enemies_array
mostri = []
for i in 1...$data_enemies.length
if ESCLUSI.include?(i)
mostri[i] = nil
else
mostri.push($data_enemies[i].id)
end
end
return mostri
end
end
#===============================================================================
# Window_Bestairy_Category (Nuova Classe)
#===============================================================================
class Window_Bestiary_Category < Window_HorzCommand
def initialize
super(0,0)
end #initialize
def window_width
Graphics.width
end #window_width
def update
super
@list_window.category = current_symbol if @list_window
end #update
def make_command_list
add_command(Bestiario::NOME_CATEGORIA[:comuni], :comuni)
add_command(Bestiario::NOME_CATEGORIA[:rari], :rari)
add_command(Bestiario::NOME_CATEGORIA[:boss], :boss)
add_command(Bestiario::NOME_CATEGORIA[:speciali], :speciali)
end #make_command_list
def list_window=(list_window)
@list_window = list_window
update
end #list_window=
end #Window_Bestiary_Category
#===============================================================================
# Window_Bestiary_List (Nuova Classe)
#===============================================================================
class Window_Bestiary_List < Window_Command
include Bestiario
def initialize(symbol)
@symbol = symbol
super(0,48)
end #initialize
def window_width
return Graphics.width / 2
end #window_width
def window_height
return Graphics.height - 48
end #window_height
def category=(symbol)
return if @symbol == symbol
@symbol = symbol
refresh
self.index = 0
end #category=
def enemy_name(index)
enemy = $data_enemies[index]
return enemy.name
end #enemy_name
def id_for_list(index)
return @enemies[index]
end #id_for_list
def select_symbol
if @symbol == :comuni
no_common = MOSTRI_SPECIALI[:rari] + MOSTRI_SPECIALI[:boss] + MOSTRI_SPECIALI[:speciali]
remove_enemies(no_common)
else
mantain_enemies
end #if
end #select_symbol
def remove_enemies(no_common)
@enemies.each_index do |i|
@enemies[i] = nil if no_common.include?(i)
end #do
end #remove_enemies
def mantain_enemies
@enemies.each_index do |i|
@enemies[i] = nil if !(MOSTRI_SPECIALI[@symbol].include?(i))
end #do
end #mantain_enemies
def make_command_list
@enemies = Bestiario.create_enemies_array
select_symbol
@enemies.compact!
n = 0
@enemies.each_index do |i|
@enemies[i] = nil if !$game_party.incontrato?(@enemies[i]) and !$game_switches[SWITCH_COMPLETAMENTO] and SWITCH_COMPLETAMENTO != 0
next if @enemies[i] == nil
n += 1
num = zeri(n)
enabled = $game_party.sconfitto?(@enemies[i])
$game_party.incontrato?(@enemies[i]) ? name = enemy_name(@enemies[i]) : name = SCONOSCIUTO
add_command(num + ": " + name, :mostro, enabled)
end #do
@enemies.compact!
end #make_command_list
def zeri(i)
istr = i.to_s
until istr.size >= CIFRE_MAX[@symbol]
istr = "0" + istr
end #until
return istr
end #zeri
end #Window_Bestiary_List
#===============================================================================
# Window_Bestiary_Progress (Nuova Classe)
#===============================================================================
class Window_Bestiary_Progress < Window_Base
include Bestiario
def initialize
@sconfitti = 0
@tot_sconfitti = 0
@percentuale = 0
# @danni = 0
@incontrati = 0
@tot_incontrati = 0
super(window_width, 48, window_width, window_height)
totale_mostri_sconfitti
draw_completamento
draw_horz_line(0,line_height*3, window_width - 24)
draw_info_inutili(0, line_height*4)
draw_horz_line(0,line_height*9, window_width - 24)
draw_titolo(0,line_height*10)
end #initialize
def draw_completamento
change_color(system_color)
draw_text(0,0,window_width - 24, line_height, "Completamento")
change_color(normal_color)
contents.fill_rect(0,(line_height*2) + 2, window_width - 24, line_height - 4, Color.new(0,0,0,200))
contents.fill_rect(2,(line_height*2) + 4, window_width - 28, line_height - 8, Color.new(0,0,0,80))
if $game_switches[SWITCH_COMPLETAMENTO] or SWITCH_COMPLETAMENTO == 0
draw_text(0,0,window_width - 24, line_height, sprintf("%.2f%", @percentuale), 2)
bar_w = ((@percentuale / 100) * (window_width - 28)).to_i
contents.gradient_fill_rect(2, (line_height*2) + 4, bar_w, line_height - 8, text_color(COLORE_BARRA1), text_color(COLORE_BARRA2))
draw_text(0,line_height*1,window_width - 24, line_height, @sconfitti.to_s + "/" + @max.to_s, 2)
else
draw_text(0,0,window_width - 24, line_height, "??? %", 2)
draw_text(0,line_height*1,window_width - 24, line_height, @sconfitti.to_s + "/" + @incontrati.to_s, 2)
end #if
end #draw_completamento
def draw_info_inutili(x, y)
change_color(system_color)
draw_text(x,y,window_width - 24, line_height, TOT_INCONTRATI)
draw_text(x,y + (line_height)*2,window_width - 24, line_height, TOT_SCONFITTI)
# draw_text(x,y + (line_height)*4,window_width - 24, line_height, TOT_DANNI)
change_color(normal_color)
draw_text(x,y + line_height,window_width - 24, line_height, @tot_incontrati,2)
draw_text(x,y + (line_height)*3,window_width - 24, line_height, @tot_sconfitti,2)
# draw_text(x,y + (line_height)*5,window_width - 24, line_height, @danni,2)
end #draw_info_inutili
def draw_titolo(x,y)
change_color(system_color)
draw_text(x,y,window_width - 24, line_height, "Titolo:")
TITOLI.each_key do |i|
next if @percentuale < TITOLI[i][0]
change_color(text_color(TITOLI[i][1]))
@tit = TITOLI[i][2]
end
draw_text(x,y + (line_height*1.5),window_width - 24, line_height, @tit, 1)
end #draw_titolo
def totale_mostri_sconfitti
mostri = Bestiario.create_enemies_array
mostri.compact!
@max = mostri.size
mostri.each do |i|
@sconfitti += 1 if $game_party.sconfitto?(i)
@incontrati += 1 if $game_party.incontrato?(i)
@tot_sconfitti += $game_party.conta_sconfitti(i) if $game_party.sconfitto?(i)
@tot_incontrati += $game_party.conta_incontrati(i) if $game_party.incontrato?(i)
end #do
@percentuale = (@sconfitti.to_f * 100) / @max
end #totale_mostri_sconfitti
def draw_horz_line(x, y, length)
line_y = y + line_height / 2 - 1
contents.fill_rect(x, line_y, length, 2, line_color)
end #draw_horz_line
def line_color
color = text_color(0)
color.alpha = 80
return color
end #line_color
def window_width
Graphics.width / 2
end #window_width
def window_height
Graphics.height - 48
end #window_height
end #Window_Bestiary_Progress
#===============================================================================
# Window_Monster_Page (Nuova Classe)
#===============================================================================
class Window_Monster_Page < Window_Selectable
include Bestiario
def initialize(id, symbol)
super(window_x,window_y, window_width, window_height)
create_enemy_array
@id = id
@symbol = symbol
draw_block1(0,0)
draw_horz_line(0, line_height, line_width)
draw_horz_line(0, line_height * 9.5, window_width - 24)
draw_block2(0, line_height)
end #initialize
def create_enemy_array
@enemies = []
for i in 0...$data_enemies.length
@enemies.push($data_enemies[i])
end #for
end #create_enemy_array
def draw_block1(x, y)
draw_name(x, y)
draw_stat(x, y + (line_height*1.5))
draw_sprite(x + line_width + 12, y)
end #draw_block1
def draw_block2(x, y)
draw_elements(x, y*10)
draw_loot(x, y*11)
end #draw_block2
def draw_name(x, y)
contents.fill_rect(x, y, line_width, line_height, Color.new(0,0,0,60))
change_color(normal_color)
draw_text(x, y, line_width, line_height, @enemies[@id].name)
end #draw_name
def draw_stat(x,y)
for i in 0..7
draw_param(x, y + (line_height*i), i)
end #for
end #draw_stat
def draw_param(x, y, param_id)
contents.fill_rect(x, y, line_width, line_height - 4, Color.new(0,0,0,60))
if CONFRONTO_STAT
contents.fill_rect(x, y + line_height - 6, line_width, 2, Color.new(0,0,0,180)) if param_id > 1
media = calcola_media
percentage = (@enemies[@id].params[param_id] * (line_width*0.67)) / media
percentage = line_width if percentage > line_width
contents.fill_rect(x, y + line_height - 6, percentage, 2, text_color(param_id + 2)) if param_id > 1
contents.fill_rect(x, y + line_height - 6, line_width, 2, text_color(param_id + 2)) if param_id <= 1
end #if
change_color(system_color)
draw_text(x, y, line_width, line_height, Vocab::param(param_id))
change_color(normal_color)
draw_text(x, y, line_width, line_height, @enemies[@id].params[param_id], 2)
end #draw_param
def calcola_media
media = 0
for i in 2..7
media += @enemies[@id].params[i]
end #for
media = media / 6
return media
end #calcola_media
def draw_sprite(x,y)
contents.fill_rect(x, y, line_width, line_height * 9.5, Color.new(0,0,0,60))
view_x = x + window_x + 12
view_y = y + window_y + 12
viewport = Viewport.new(view_x,view_y,line_width, line_height * 9.5)
viewport.z = 150
@battler = Sprite.new(viewport)
@battler.bitmap = Cache.battler(@enemies[@id].battler_name + NOME_SPRITE, @enemies[@id].battler_hue)
@battler.ox = @battler.width/ 2
@battler.x = line_width / 2
@battler.oy = @battler.height / 2
@battler.y = (line_height * 9.5) / 2
(@battler.zoom_x -= 0.05 and @battler.zoom_y -= 0.05) until (@battler.width*@battler.zoom_x) <= line_width and (@battler.height*@battler.zoom_y) <= line_height * 9.5
draw_incontri(x) if MOSTRA_INCONTRI
end #draw_sprite
def close
@battler.dispose
super
end #close
def draw_incontri(x)
change_color(system_color)
draw_text(window_width - 24 - line_width, line_height*8.5, line_width, line_height, SCONFITTI)
if calcola_sconfitti >= CAP_SCONFITTI[@symbol] and CAP_SCONFITTI[@symbol] != 0
change_color(text_color(COLORE_CAP))
draw_text(window_width - 24 - line_width, line_height*8.5, line_width, line_height, CAP_SCONFITTI[@symbol], 2)
else
change_color(normal_color)
draw_text(window_width - 24 - line_width, line_height*8.5, line_width, line_height, calcola_sconfitti.to_s + "/" + calcola_incontrati.to_s, 2)
end #if
end #draw_incontri
def calcola_sconfitti
return $game_party.conta_sconfitti(@id)
end #calcola_sconfitti
def calcola_incontrati
return $game_party.conta_incontrati(@id)
end #calcola_incontrati
def draw_elements(x,y)
width = (window_width - 24) / ICONE_ELEMENTI.length
ICONE_ELEMENTI.each_key do |i|
current_x = 1 + x + (width * (i-3))
contents.fill_rect(current_x, y, width - 2, line_height - 2, Color.new(0,0,0,60))
draw_icon(ICONE_ELEMENTI[i], current_x, y)
value = element_rate(i)
change_color(normal_color)
change_color(text_color(COLORE_RESISTENZA)) if value < 1.0
change_color(text_color(COLORE_NULLO)) if value == 0.0
change_color(text_color(COLORE_DEBOLEZZA)) if value > 1.0
draw_text(current_x, y, width, line_height, sprintf("%d%", value*100), 2)
end #do
end #draw_elements
def draw_loot(x,y)
width = (window_width - 24) / max_loot
contents.fill_rect(x + 1, y, width - 2, line_height - 2, Color.new(0,0,0,60))
change_color(system_color)
draw_text(x + 1, y, width - 2, line_height - 2, EXP_NAME + ":")
change_color(normal_color)
draw_text(x + 1, y, width - 2, line_height - 2, @enemies[@id].exp, 2)
contents.fill_rect(x + 1 + width, y, width - 2, line_height - 2, Color.new(0,0,0,60))
change_color(system_color)
draw_text(x + 1 + width, y, width - 2, line_height - 2, Vocab.currency_unit + ":")
change_color(normal_color)
draw_text(x + 1 + width, y, width - 2, line_height - 2, @enemies[@id].gold, 2)
end #draw_loot
def max_loot
return 2
end #max_loot
def element_rate(i)
element = 1.0
@enemies[@id].features.each do |f|
if f.code == 11
element = f.value if f.data_id == i
end #if
end #do
return element
end #element_rate
def draw_horz_line(x, y, length)
line_y = y + line_height / 4 - 1
contents.fill_rect(x, line_y, length, 2, line_color)
end #draw_horz_line
def line_color
color = text_color(0)
color.alpha = 80
return color
end #line_color
def line_width
(window_width - 36) / 2
end #line_width
def window_width
Graphics.width - 32
end #window_width
def window_height
return 24 + (line_height * 12)
end #window_height
def window_y
(Graphics.height - window_height) / 2
end #window_y
def window_x
(Graphics.width - window_width) / 2
end #window_x
end #Window_Monster_Page
#===============================================================================
# Scene_Bestiary (Nuova Classe)
#===============================================================================
class Scene_Bestiary < Scene_Base
def initialize
super
@category = :comuni
@id = 0
create_bestiary_list
create_bestiary_progress
create_bestiary_category
end #initialize
def create_bestiary_list
@list_window = Window_Bestiary_List.new(@category)
@list_window.activate
@list_window.set_handler(:mostro, method(:disegna_mostro))
@list_window.set_handler(:cancel, method(:return_scene))
end #create_bestiary_list
def create_bestiary_category
@category_window = Window_Bestiary_Category.new
@category_window.activate
@category_window.list_window = @list_window
end #create_bestiary_category
def disegna_mostro
@category = @category_window.current_symbol
@id = @list_window.index
@category_window.deactivate
@list_window.deactivate
index = @list_window.id_for_list(@id)
crea_pagina_mostro(index)
end #disegna_mostro
def crea_pagina_mostro(index)
@monster_window = Window_Monster_Page.new(index, @category)
@monster_window.back_opacity = 255
@monster_window.activate
@monster_window.set_handler(:ok, method(:return_list))
@monster_window.set_handler(:cancel, method(:return_list))
end #crea_pagina_mostro
def return_list
@monster_window.close
@category_window.activate
@list_window.activate
end #return_list
def create_bestiary_progress
@progress_window = Window_Bestiary_Progress.new
end #create_bestiary_progress
end #Scene_Bestiary
#===============================================================================
# Game_Party
#-------------------------------------------------------------------------------
# alias: initialize
# new method: sconfitto?
# new method: conta_sconfitti
# new method: mostro_sconfitto
#===============================================================================
class Game_Party < Game_Unit
alias initialize_bestiario initialize
def initialize
@sconfitto = []
@contatore_kill = []
@incontrato = []
@contatore_incontri = []
@kill_totali = 0
@incontri_totali = 0
initialize_bestiario
end #initialize
def sconfitto?(i)
return true if @sconfitto[i] == true
return false
end #sconfitto?
def incontrato?(i)
return true if @incontrato[i] == true
return false
end #incontrato?
def conta_sconfitti(i)
contatore = @contatore_kill[i]
contatore = 0 if contatore.nil?
return contatore
end #conta_sconfitti
def conta_incontrati(i)
contatore = @contatore_incontri[i]
contatore = 0 if contatore.nil?
return contatore
end #conta_incontrati
def mostro_sconfitto(i)
@contatore_kill[i] = 0 if @contatore_kill[i].nil?
@contatore_kill[i] += 1
@kill_totali += 1
@sconfitto[i] = true
end #mostro_sconfitto
def mostro_incontrato(i)
@contatore_incontri[i] = 0 if @contatore_incontri[i].nil?
@contatore_incontri[i] += 1
@incontri_totali += 1
@incontrato[i] = true
end #mostro_incontrato
end #Game_Party
#===============================================================================
# BattleManager
#-------------------------------------------------------------------------------
# alias: battle_end
#===============================================================================
class << BattleManager
alias setup_bestiario setup
def setup(troop_id, can_escape = true, can_lose = false)
setup_bestiario(troop_id, can_escape, can_lose)
$game_troop.members.each {|i| $game_party.mostro_incontrato(i.enemy_id)}
end #setup
alias battle_end_bestiario battle_end
def battle_end(result)
$game_troop.dead_members.each {|i| $game_party.mostro_sconfitto(i.enemy_id)}
battle_end_bestiario(result)
end #battle_end
end #BattleManager
class Game_ActionResult
alias initialize_bestiario initialize
def initialize(battler)
initialize_bestiario(battler)
@total_damage = 0
end
alias make_damage_bestiario make_damage
def make_damage(value, item)
make_damage_bestiario(value, item)
@total_damage += @hp_damage
end
def total_damage
return @total_damage
end
end
#===============================================================================
# Window_MenuCommand
#-------------------------------------------------------------------------------
# alias: add_original_commands
#===============================================================================
class Window_MenuCommand < Window_Command
alias add_original_commands_bestiario add_original_commands
def add_original_commands
add_original_commands_bestiario
add_command(Bestiario::MENU_COMMAND, :bestiary) if $game_switches[Bestiario::SWITCH_MENU_ATTIVATO] or Bestiario::SWITCH_MENU_ATTIVATO == 0
end #add_original_commands
end #Window_MenuCommand
#===============================================================================
# Scene_Menu
#-------------------------------------------------------------------------------
# alias: create_command_window
# new method: command_bestiary
#===============================================================================
class Scene_Menu < Scene_MenuBase
alias create_command_window_bestiary create_command_window
def create_command_window
create_command_window_bestiary
@command_window.set_handler(:bestiary, method(:command_bestiary))
end #create_command_window
def command_bestiary
SceneManager.call(Scene_Bestiary)
end #command_bestiary
end #Scene_Menu