module Skill_Equip
#===============================================================================
# Abilità equipaggiate versione 1.01
#===============================================================================
# Autore: Raffy2010
# Difficoltà utente: Basta che tu sappia copiare e incollare
#
#-------------------------------------------------------------------------------
# Descrizione:
# Lo script limita il numero di skill mostrate in battaglia per un certo actor,
# può essere utile per:
# - Limitare il giocare a un moveset ristresso (come in pokémon)
# - Evitare situazioni spiacevoli in cui il player nelle parti finali
# del gioco si trovi una schermata piena di skill inutili.
# - Creare un sistema per cui un attore, aumentando di livello, possa
# aumentare il numero di slot per le abilità disponibili (non supportato
# al 100% ma facilmente implementabile)
# Insomma, come in molti casi, il limite è la fantasia!
# Per abilitare o disabilitare una skill, basta andare nell'apposita sezione
# del menù della mappa, posizionare il cursore sull'abilità che si vuole
# attivare/disabilitare e premere shift.
#-------------------------------------------------------------------------------
# Istruzioni:
# Copiare lo script sotto Materials e prima del Main.
#-------------------------------------------------------------------------------
# Compatibilità:
# Window_SkillList
# > alias draw_item_name
# > alias draw_skill_cost
# Window_BattleSkill
# > alias make_item_list
# Window_Selectable
# > alias process_handling
# Scene_Skill
# > alias create_item_window
# Game_Actor
# > alias setup
#-------------------------------------------------------------------------------
# Configurazione:
# Numero di slot disponibili di default:
SLOTS = 4
# Colore da assegnare alle skill disabilitate (R,G,B, TRASPARENZA):
DISABLED_SKILL_COLOR = Color.new(128,0,0,256)
#-------------------------------------------------------------------------------
# Per gli scripter
# Sono state aggiunti due attributi alla classe Game_Actor:
# - attr_accessor :enabled_skills_list -> Vettore delle skill abilitate
# - attr_reader :maximum_number_of_slots -> Numero massimo di slot disponibili
#
# Magari possono esservi utili per fare qualcosa ;)
#-------------------------------------------------------------------------------
# FINE CONFIGURAZIONE
#-------------------------------------------------------------------------------
end
class Window_SkillList < Window_Selectable
include Skill_Equip
#--------------------------------------------------------------------------
# * Draw Item Name
# Riscrivo il metodo per stampare il nome di un certo colore quando la
# skill è disabilitata.
#--------------------------------------------------------------------------
alias :skill_Equip_window_SkillList_draw_item_name :draw_item_name
def draw_item_name(item, x, y, enabled = true, width = 172)
return unless item
if @actor.enabled_skills_list.include?(item)
skill_Equip_window_SkillList_draw_item_name(item, x, y, enabled, width)
else
draw_icon(item.icon_index, x, y, enabled)
change_color(DISABLED_SKILL_COLOR, enabled)
draw_text(x + 24, y, width, line_height, item.name)
end
end
#--------------------------------------------------------------------------
# * Draw Skill Use Cost
# Riscrivo il metodo per stampare il costo.
#--------------------------------------------------------------------------
alias :skill_Equip_window_SkillList_draw_skill_cost :draw_skill_cost
def draw_skill_cost(rect, skill)
if @actor.enabled_skills_list.include?(skill)
skill_Equip_window_SkillList_draw_skill_cost(rect, skill)
else
change_color(DISABLED_SKILL_COLOR, enable?(skill))
if @actor.skill_mp_cost(skill) > 0
draw_text(rect, @actor.skill_mp_cost(skill), 2)
elsif @actor.skill_tp_cost(skill) > 0
draw_text(rect, @actor.skill_tp_cost(skill), 2)
end
end
end
end
#--------------------------------------------------------------------------
# * Riscrivo il make_item_list di BattleSkill per stampare esclusivamente
# le skill abilitate in BATTAGLIA.
#--------------------------------------------------------------------------
class Window_BattleSkill < Window_SkillList
alias :skill_Equip_Window_BattleSkill_make_item_list :make_item_list
def make_item_list
skill_Equip_Window_BattleSkill_make_item_list
@data.delete_if{|skill| not @actor.enabled_skills_list.include?(skill)}
end
end
#--------------------------------------------------------------------------
# * Gestione del tasto shift
#--------------------------------------------------------------------------
class Window_Selectable < Window_Base
#--------------------------------------------------------------------------
# * Aggiungo l'handler per lo shift
#--------------------------------------------------------------------------
alias :skill_Equip_Windows_Selectable_process_handling :process_handling
def process_handling
return unless open? && active
skill_Equip_Windows_Selectable_process_handling
return call_handler(:shift) if handle?(:shift) && Input.trigger?(:A)
end
end
class Scene_Skill < Scene_ItemBase
#--------------------------------------------------------------------------
# * Create Item Window
#--------------------------------------------------------------------------
alias :skill_Equip_Scene_Skill_create_item_window :create_item_window
def create_item_window
skill_Equip_Scene_Skill_create_item_window
@item_window.set_handler(:shift, method(:on_item_shift))
end
#--------------------------------------------------------------------------
# * on_item_shift
#--------------------------------------------------------------------------
def on_item_shift
if @actor.enabled_skills_list.include?(item)
@actor.enabled_skills_list.delete(item)
elsif @actor.enabled_skills_list.size + 1 > @actor.maximum_number_of_slots
Sound.play_buzzer
return
else
@actor.enabled_skills_list.push(item)
end
Sound.play_equip
@item_window.refresh
@status_window.refresh
end
end
#--------------------------------------------------------------------------
# * Aggiungo due attributi per gestire la lista delle skill
#--------------------------------------------------------------------------
class Game_Actor < Game_Battler
include Skill_Equip
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :enabled_skills_list
attr_reader :maximum_number_of_slots
#--------------------------------------------------------------------------
# * Setup
#--------------------------------------------------------------------------
alias :skill_Equip_Game_Actor_setup :setup
def setup(actor_id)
skill_Equip_Game_Actor_setup(actor_id)
@enabled_skills_list = Array.new
@maximum_number_of_slots = SLOTS
end
end