Titolo
Costo Poteri Alternativo
Autore
Holy87
Difficoltà
Principiante
Descrizione
In seguito ad una richiesta, ho creato uno script che crei poteri che possono richiedere un costo di HP, Denaro o del valore di una variabile; come novità, ora è possibile che un potere richieda un oggetto specifico. Possono essere creati poteri che richiedono più tipi di costo contemporaneamente e in percentuale. A differenza degli altri script, è comptatibile con il Tankentai.
Istruzioni
Inserite lo script sotto Materials, prima del Main. Basta inserire la tag <costo x:y> dove x è hp, mp, oro o var o oggetto e y è il valore, fisso o percentuale. Il resto delle istruzioni lo trovate all'interno.
Script
Versione 1.2
$imported = {} if $imported == nil $imported["CostoHoly"] = true #=============================================================================== # Costo abilità di Holy87 # Versione 1.2 # Changelog v1.2 # - Possibilità di richiedere un oggetto # - Risolti alcuni bug, migliorato il codice # Changelog v1.1 # - Inserite notetag abilità # - possibilità di inserire costo in % # - visualizzazione contemporanea dei costi # - possibilità di personalizzare il colore #=============================================================================== # Questo script, compatibile al 100% con il tankentai, fa in modo che le abilità # consumino HP, denaro o una variabile scelta, valore fisso o percentuale. # Inserisci nelle note dell'abilità i seguenti codici: # <costo hp: x> o <costo hp: x%> per costo hp # <costo mp: x> o <costo mp: x%> per costo mp # <costo oro: x> o <costo oro: x%> per costo denaro # <costo var: x> o <costo var: x%> per il costo di una variabile (vedere giù) # <costo oggetto: x> per fare in modo che il potere consumi un oggetto (x=id) # è possibile far costare un'abilità un numero di MP superiore a 999 # è possibile inserire più tipi di costi (es. una abilità che consuma HP e MP) # è possibile inserire sia un valore fisso che percentuale. In questo caso i # valori vengono sommati. #=============================================================================== # Istruzioni: inserire lo script sotto Materials, prima del Main. # Inserisci nelle notetag dei poteri la tag desiderata. #=============================================================================== # Compatibilità: Compatibile al 100% con il Tankentai SBS 3.4e + ATB # # Window_Skill -> sostituisce il metodo draw_item # Game_Battler -> alias di skill_can_use? # Game_Battler -> sostituisce il metodo calc_mp_cost # Scene_Battle -> alias di execute_action_skill # Scene_Skill -> alias di use_skill_nontarget #=============================================================================== # Note: # Anche se viene visualizzato il costo di un solo tipo, l'abilità può sfruttare # sia HP, sia MP, Denaro e variabile contemporaneamente. # Anche la visualizzazione del costo MP default è stata cambiata. # Costo MP -> Colore Azzurro # Costo HP -> Colore Giallo-Arancione # Costo Denaro -> Colore Verde # Costo Variabile -> Colore Rosso chiaro # Costo Oggetto -> Mostra l'icona dell'oggetto richiesto. # Gli accessori che dimezzano il costo MP funzionano anche su HP, Oro e Var. #=============================================================================== # CONFIGURAZIONE #=============================================================================== module Skill_Costs #------------------------------------------------------------------------------- # PERSONALIZZAZIONE #------------------------------------------------------------------------------- # Seleziona la variabile da usare come costo Variabile = 281 # Imposta il simbolo da usare per il costo della variabile Simbolo_Variabile = "S" # Gli accessori che dimezzano il costo MP influenzano anche il costo HP? Dimezza_C_HP = true # Gli accessori che dimezzano il costo MP influenzano anche il costo Denaro? Dimezza_C_G = true # Gli accessori che dimezzano il costo MP influenzano anche il costo Variabile? Dimezza_C_V = true # Seleziona il colore dei vari costi ColoreHP = 14 ColoreMP = 23 ColoreG = 3 ColoreV = 2 # Spazio tra un costo e l'altro nel caso di abilità con più costi Spazio = 12 #------------------------------------------------------------------------------- # FINE CONFIGURAZIONE # Modifica gli script in seguito solo se sai ciò che fai! #------------------------------------------------------------------------------- #Stringhe CostoHP = /<(?:COSTO HP|costo hp):[ ]*(\d+)>/i CostoMP = /<(?:COSTO MP|costo mp):[ ]*(\d+)>/i CostoG = /<(?:COSTO ORO|costo oro):[ ]*(\d+)>/i CostoV = /<(?:COSTO VAR|costo var):[ ]*(\d+)>/i CostoI = /<(?:USA OGGETTO|usa oggetto):[ ]*(\d+)>/i CostoHP_Per = /<(?:COSTO HP|costo hp):[ ]*(\d+)([%%])>/i CostoMP_Per = /<(?:COSTO MP|costo mp):[ ]*(\d+)([%%])>/i CostoG_Per = /<(?:COSTO ORO|costo oro):[ ]*(\d+)([%%])>/i CostoV_Per = /<(?:COSTO VAR|costo var):[ ]*(\d+)([%%])>/i # Restituisce il valore della variabile scelta def self.var_act return $game_variables[Variabile] end end # fine del modulo #=============================================================================== # * Classe Game_Battler #=============================================================================== class RPG::Skill #nuovi attributi attr_accessor :costohp attr_accessor :costog attr_accessor :costov attr_accessor :costohp_per attr_accessor :costomp_per attr_accessor :costog_per attr_accessor :costov_per attr_accessor :costoi #----------------------------------------------------------------------------- # Inizializzazione dei nuovi attributi - lettura notetag #----------------------------------------------------------------------------- def carica_cache_personale return if @cache_caricata @cache_caricata = true @costohp = 0 @costog = 0 @costov = 0 @costohp_per = 0 @costomp_per = 0 @costog_per = 0 @costov_per = 0 @costoi = 0 self.note.split(/[\r\n]+/).each { |riga| case riga #--- when Skill_Costs::CostoHP @costohp = $1.to_i when Skill_Costs::CostoMP @mp_cost = $1.to_i when Skill_Costs::CostoG @costog = $1.to_i when Skill_Costs::CostoV @costov = $1.to_i when Skill_Costs::CostoHP_Per @costohp_per = $1.to_i when Skill_Costs::CostoMP_Per @costomp_per = $1.to_i when Skill_Costs::CostoG_Per @costog_per = $1.to_i when Skill_Costs::CostoV_Per @costov_per = $1.to_i when Skill_Costs::CostoI @costoi = $1.to_i end } end def costohp;return @costohp;end def costog;return @costog;end def costov;return @costov;end def costoi;return @costoi;end def costohp_per;return @costohp_per;end def costomp_per;return @costomp_per;end def costog_per;return @costog_per;end def costov_per;return @costov_per;end end #skill #=============================================================================== # * Classe Scene_Title #=============================================================================== class Scene_Title < Scene_Base #----------------------------------------------------------------------------- # *Alias metodo load_bt_database #----------------------------------------------------------------------------- alias carica_db load_bt_database unless $@ def load_bt_database carica_db carica_skills end #----------------------------------------------------------------------------- # *Alias metodo load_database #----------------------------------------------------------------------------- alias carica_db_2 load_database unless $@ def load_database carica_db_2 carica_skills end #----------------------------------------------------------------------------- # Inizializza nel caricamento #----------------------------------------------------------------------------- def carica_skills for skill in $data_skills next if skill == nil skill.carica_cache_personale end end end # scene_title #=============================================================================== # * Classe Game_Battler #=============================================================================== class Game_Battler #----------------------------------------------------------------------------- # *Alias metodo skill_can_use? #----------------------------------------------------------------------------- alias nosenza skill_can_use? unless $@ def skill_can_use?(skill) return false if calc_hp_cost(skill) > hp return false if calc_gold_cost(skill) > $game_party.gold return false if calc_var_cost(skill) > Skill_Costs.var_act return false if no_item_required?(skill) return nosenza(skill) end #----------------------------------------------------------------------------- # RISCRITTURA del metodo per calcolare il costo mp #----------------------------------------------------------------------------- def calc_mp_cost(skill) costo = 0 costo += skill.mp_cost costo += maxmp*skill.costomp_per/100 costo /= 2 if half_mp_cost return costo end #----------------------------------------------------------------------------- # metodo per calcolare costo hp #----------------------------------------------------------------------------- def calc_hp_cost(skill) costo = 0 costo += skill.costohp costo += maxhp*skill.costohp_per/100 costo /= 2 if half_mp_cost and Skill_Costs::Dimezza_C_HP return costo end #----------------------------------------------------------------------------- # metodo per calcolare costo oro #----------------------------------------------------------------------------- def calc_gold_cost(skill) costo = 0 costo += skill.costog costo += $game_party.gold*skill.costog_per/100 costo /= 2 if half_mp_cost and Skill_Costs::Dimezza_C_G return costo end #----------------------------------------------------------------------------- # metodo per calcolare costo variabile #----------------------------------------------------------------------------- def calc_var_cost(skill) costo = 0 costo += skill.costov costo += Skill_Costs.var_act*skill.costov_per/100 costo /= 2 if half_mp_cost and Skill_Costs::Dimezza_C_V return costo end #----------------------------------------------------------------------------- # restituisce true se l'oggetto richiesto dalla skill non è posseduto #----------------------------------------------------------------------------- def no_item_required?(skill) return false if skill.costoi == 0 item = $data_items[skill.costoi] if $game_party.has_item?(item) return false else return true end end #----------------------------------------------------------------------------- # restituisce l'oggetto richiesto. #----------------------------------------------------------------------------- def calc_item_cost(skill) return skill.costoi end end # game_battler #=============================================================================== # * Classe Window_Skill #=============================================================================== class Window_Skill < Window_Selectable #----------------------------------------------------------------------------- # riscrittura del metodo draw_item #----------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) skill = @data[index] if skill != nil rect.width -= 4 enabled = @actor.skill_can_use?(skill) # attivo se può usare la skill draw_item_name(skill, rect.x, rect.y, enabled) posizione = 0 gfont = Skill_Costs::Spazio if skill.costoi != 0 oggetto = $data_items[skill.costoi] draw_icon(oggetto.icon_index,rect.x+rect.width-24,rect.y,enabled) posizione += 24 end if @actor.calc_hp_cost(skill) > 0 self.contents.font.color = colore_hp self.contents.font.color.alpha = enabled ? 255 : 128 costo = @actor.calc_hp_cost(skill) costo = costo.to_s+Vocab.hp_a self.contents.draw_text(rect, costo, 2) posizione += gfont*costo.size end if @actor.calc_mp_cost(skill) > 0 self.contents.font.color = colore_mp self.contents.font.color.alpha = enabled ? 255 : 128 costo = @actor.calc_mp_cost(skill) costo = costo.to_s+Vocab.mp_a self.contents.draw_text(rect.x,rect.y,rect.width-posizione,rect.height, costo, 2) posizione += gfont*costo.size end if @actor.calc_var_cost(skill) > 0 self.contents.font.color = colore_var self.contents.font.color.alpha = enabled ? 255 : 128 costo = @actor.calc_var_cost(skill) costo = costo.to_s+Vocab.var_skill self.contents.draw_text(rect.x,rect.y,rect.width-posizione,rect.height, costo, 2) posizione += gfont*costo.size end if @actor.calc_gold_cost(skill) > 0 self.contents.font.color = colore_gold self.contents.font.color.alpha = enabled ? 255 : 128 costo = @actor.calc_gold_cost(skill) costo = costo.to_s+Vocab.gold self.contents.draw_text(rect.x,rect.y,rect.width-posizione,rect.height, costo, 2) end end end else end # window_skill #=============================================================================== # * Classe Scene_Battle #=============================================================================== class Scene_Battle < Scene_Base #----------------------------------------------------------------------------- # alias del metodo execute_action_skill #----------------------------------------------------------------------------- alias consumahp execute_action_skill unless $@ def execute_action_skill consumahp skill = @active_battler.action.skill return if skill == nil @active_battler.hp -= @active_battler.calc_hp_cost(skill) unless @active_battler.dead? #calcola HP cost $game_party.lose_gold(@active_battler.calc_gold_cost(skill)) unless @active_battler.dead? $game_variables[Skill_Costs::Variabile] -= @active_battler.calc_var_cost(skill) if @skill.costoi != 0 item = $data_items[@skill.costoi] $game_party.lose_item(item,1) end end end #scene_battle #=============================================================================== # * Classe Window_Base #=============================================================================== class Window_Base < Window #----------------------------------------------------------------------------- # aggiunta di nuove colorazioni! #----------------------------------------------------------------------------- def colore_mp;return text_color(Skill_Costs::ColoreMP);end def colore_hp;return text_color(Skill_Costs::ColoreHP);end def colore_gold;return text_color(Skill_Costs::ColoreG);end def colore_var;return text_color(Skill_Costs::ColoreV);end end #window_base #=============================================================================== # * Classe Scene_Skill #=============================================================================== class Scene_Skill < Scene_Base #----------------------------------------------------------------------------- # alias di use_skill_nontarget #----------------------------------------------------------------------------- alias usasknot use_skill_nontarget unless $@ def use_skill_nontarget @actor.hp -= @actor.calc_hp_cost(@skill) $game_party.lose_gold(@actor.calc_gold_cost(@skill)) $game_variables[Skill_Costs::Variabile] -= @actor.calc_var_cost(@skill) $game_party.lose_item($data_items[@skill.costoi],1) if @skill.costoi != 0 usasknot end end #scene_skill #=============================================================================== # * Modulo Vocab #=============================================================================== module Vocab #----------------------------------------------------------------------------- # aggiunta del simbolo della variabile come vocab #----------------------------------------------------------------------------- def self.var_skill return Skill_Costs::Simbolo_Variabile end end #vocab
Screenshot
Compatibilità
Compatibile al 100% con il Tankentai 3.4e. Riscrive il metodo create_item di Window_Skill.
Note
Non rilascerò una versione per Ace, perchè lo script di Yanfly fa la stessa cosa ed anche meglio.
Modificato da Holy87, 23 March 2013 - 15:59 PM.
Aggiornamento