Jump to content
Rpg²S Forum

Abilità equipaggiate


raffy2010
 Share

Recommended Posts

Abilità equipaggiate

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 ristretto (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.

Nota bene: Ho iniziato a fare script da poco, quindi il codice potrebbe essere un po' sporco perché non mi è ancora chiaro come Vx Ace gestisce le diverse classi. Scripter più esperti fatemi sapere cosa potrei fare meglio :bigsmile:

 

Autore

Raffy2010.

 

Istruzioni per l'uso

Copiare lo script sotto Materials e prima del Main.

 

Script

 

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

 

Bugs e Conflitti Noti

N/A

 

EDIT: Codice aggiornato

Edited by raffy2010

 

 

http://wwwdonnemanagernapoli.files.wordpress.com/2013/03/napoli-calcio.jpg

 

Link to comment
Share on other sites

Ad occhio c'è un problema con questo script.

Se metti l'attributo di mostrato o no nella skill, significa che se due personaggi hanno skill uguali non posso scegliere di mostrarla su uno e nasconderla sull'altro.

Dovresti gestire un array di skill nascoste sulla classe Game_Actor, e quindi aggiungere o rimuovere l'ID della skill quando il giocatore vuole nasconderla o mostrarla.

Altra cosa, è inutile che crei gli alias se poi effettivamente sovrascrivi l'intero metodo.

Dovresti gestire il colore del nome della skill se è disabilitato, altrimenti chiami il metodo aliasato senza doverlo riscrivere. Così come hai fatto impasticcerai la compatibilità con altri script.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

Ad occhio c'è un problema con questo script.

Se metti l'attributo di mostrato o no nella skill, significa che se due personaggi hanno skill uguali non posso scegliere di mostrarla su uno e nasconderla sull'altro.

Dovresti gestire un array di skill nascoste sulla classe Game_Actor, e quindi aggiungere o rimuovere l'ID della skill quando il giocatore vuole nasconderla o mostrarla.

Altra cosa, è inutile che crei gli alias se poi effettivamente sovrascrivi l'intero metodo.

Grazie mille per il feedback holy, ho testato e hai perfettamente ragione. Credevo che ogni attore avesse una propria istanza della skill... e invece no °-°

Alla fine ho rubato il tuo consiglio sul vettore e ho aggiornato il codice fixando il bug, rimuovendo gli alias inutili e snellendo un po' il codice.

 

Dovresti gestire il colore del nome della skill se è disabilitato, altrimenti chiami il metodo aliasato senza doverlo riscrivere. Così come hai fatto impasticcerai la compatibilità con altri script.

Perdonami ma non ho capito cosa intendi in questo punto (sono un po' un neofita in ruby perdonami ahahahaha), a prescindere però da questo ho provato a riscrivere quelle funzioni lì cercando di dare un senso all'alias.

 

 

http://wwwdonnemanagernapoli.files.wordpress.com/2013/03/napoli-calcio.jpg

 

Link to comment
Share on other sites

Perdonami ma non ho capito cosa intendi in questo punto (sono un po' un neofita in ruby perdonami ahahahaha), a prescindere però da questo ho provato a riscrivere quelle funzioni lì cercando di dare un senso all'alias.

Nada, ho letto male o hai fixato, comunque ora non vedo problemi.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

http://holyres.altervista.org/UserBoard/BannerOverdrive35.png
http://holyres.altervista.org/UserBoard/Cap3.png

http://www.indiexpo.net/signature/578.png

Miei script per RPG Maker VX Ace:


*NB Tutti i miei script sono protetti da licenza CC - BY http://i.creativecommons.org/l/by/3.0/88x31.png

Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.

 

 



I miei tutorial:


Come distribuire il gioco - e anche come creare un'installazione professionale!
RGSS in pillole - Guida completa e facile all'RGSS2 e RGSS3 per novizi ed esperti
Come mappare con VX (e VX Ace) - guida base all'uso degli strumenti del mapping
Loop delle musiche - come tagliarle in modo da far venire musiche continue senza interruzioni finali
Creare backup dei progetti - per evitare di uccidervi dopo un errore che ha fatto perdere tutto!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...