Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #===============================================================================
- # REQUISITI EQUIPAGGIAMENTI
- #===============================================================================
- # Autore: Holy87
- # Versione: 2.0
- # Difficoltà utente: ?
- #
- # Novità della versione 2.0:
- # - Tag più liberi (possibilità di scrivere in inglese o in italiano) esempio:
- # <requires atk: 100> <richiede attacco 100> <requires_atk 100> sono tutti tag
- # corretti per requisito d'attacco
- # - Miglioramento generale del codice e riduzione degli attributi dell'equip
- # - Aggiunta la possibilità di definire una variabile minima
- # - Aggiunta la possibilità di definire parametri dell'eroe non direttamente
- # previsti dallo script (ad esempio per script di terzi)
- #-------------------------------------------------------------------------------
- # Ora potrete inserire dei requisiti per equipaggiare un certo armamento!
- # Un equipaggiamento che può indossare l'eroe, ma che non rispetta i requisiti,
- # verrà mostrato disattivato e non potrà essere equipaggiato. È possibile
- # impostare diversi requisiti scrivendo le tag giuste nelle note dell'equipag-
- # giamento, sia esso un'arma o un'armatura:
- #
- # <richiede PARAMETRO: X> oppure <requires PARAMETRO: X>
- # dove al posto di PARAMETRO puoi inserire attacco, difesa, difesa_m, att_magico,
- # agilità, fortuna, hp_massimi, mp_massimi, livello; e al mosto di X il valore
- # minimo richiesto. Ad esempio, se scrivo <richiede livello 10>, significa che
- # l'arma non può essere equipaggiata dall'eroe se non ha raggiunto almeno il
- # livello 10.
- # Nota: si può inserire anche il nome del paramtro del codice, ad esempio
- # <requires atk: 100>
- # puoi inserire qualsiasi parametro definito della classe actor, anche quelli
- # non direttamnete previsti dallo script. Ad esempio:
- # <requires hit: 100> (solo se l'hit è 100 o superiore)
- #
- # <richiede switch X>
- # l'arma può essere equipaggiata solo se lo switch X è ON (X è l'ID dello switch)
- #
- # <richiede var X, Y>
- # L'arma richiede che la variabile X abbia un valore maggiore o uguale a Y
- #
- # <richiede armatura X> o <richiede arma X>
- # l'oggetto può essere equipaggiato solo se in possesso dell'equipaggiamento
- # richiesto, dove X è l'ID dell'equipaggiamento. Nel caso l'equipaggiamento
- # richiesto venga rimosso, viene dis-eguipaggiato anche quello che lo richiede.
- # Ad esempio, se l'accessorio mirino ottico richiede un fucile e questo viene
- # disequipaggiato, viene rimosso anche il mirino ottico.
- #
- # <richiede tipo arma X> o <richiede tipo armatura X>
- # l'oggetto può essere equipaggiato solo se l'eroe ha con sè un'arma o
- # un'armatura del tipo con ID X (ad esempio una spada qualsiasi, uno scudo
- # qualsiasi, un'armatura pesante qualsiasi ecc...) ricordati che i tipi vengono
- # definiti nel Glossario. Anche qui vale la regola che se l'equipaggiamento
- # richiesto viene rimosso, viene rimosso anche quello che lo richiede.
- #
- # <richiede stato X>
- # l'armatura può essere equipaggiata solo se l'eroe ha lo stato X inflitto.
- #-------------------------------------------------------------------------------
- # Istruzioni:
- # Copiare lo script sotto Materials e prima del Main.
- #-------------------------------------------------------------------------------
- # Compatibilità:
- # DataManager
- # > alias load_normal_database
- # > alias load_battle_test_database
- # Window_EquipItem
- # > alias enable?
- # Scene_Equip
- # > alias on_item_ok
- # Game_Actor
- # > alias change_equip
- #-------------------------------------------------------------------------------
- $imported = {} if $imported == nil
- $imported["H87_EquipRequirements"] = 2.0
- module EquipRequirementSettings
- PARAM_REQ_REGEX = /<(?:requires|richiede)[_ ]+([\w_]+)[:]?[ ]*(\d+)>/i
- VARIABLE_REQ_REGEX = /<(?:requires|richiede)[_ ]var[:]?[ ]*(\d+),[ ]*(\d+)>/i
- end
- #==============================================================================
- # ** DataManager
- #------------------------------------------------------------------------------
- # Aggiunta del caricamento dei nuovi parametri
- #==============================================================================
- module DataManager
- class << self
- alias h87ereq_lnd load_normal_database
- alias h87ereq_lbtd load_battle_test_database
- end
- # load_normal_database
- def self.load_normal_database
- h87ereq_lnd
- setupEquipReq
- end
- # load_battle_test_database
- def self.load_battle_test_database
- h87ereq_lbtd
- setupEquipReq
- end
- # configura i parametri dei requisiti
- def self.setupEquipReq
- $data_armors.compact.each(&:setup_requirements)
- $data_weapons.compact.each(&:setup_requirements)
- end
- end #datamanager
- #==============================================================================
- # ** RPG::EquipItem
- #------------------------------------------------------------------------------
- # Aggiunta di tutti i nuovi attributi per i requisiti
- #==============================================================================
- class RPG::EquipItem
- # @return [Hash{Symbol->Integer,Hash}] tabella dei requisiti
- attr_reader :equip_requirements
- # inizializza i valori dei requisiti
- def setup_requirements
- return if @requirements_loaded
- @requirements_loaded = true
- @equip_requirements = {
- level: 0, atk: 0, def: 0, mdf: 0,
- mat: 0, agi: 0, luk: 0, mhp: 0, mmp: 0,
- switch: 0, variable: {id: 0, value: 0},
- state: 0, weapon: 0, armor: 0, wtype: 0,
- atype: 0
- }
- self.note.split(/[\r\n]+/).each { |riga|
- case riga
- when EquipRequirementSettings::PARAM_REQ_REGEX
- value = $2.to_i
- param = $1.downcase.gsub('à','a').gsub(' ','_').to_sym
- setup_param_requirement(param, value)
- when EquipRequirementSettings::VARIABLE_REQ_REGEX
- var_data = {id: $1.to_i, value: $2.to_i}
- @equip_requirements[:variable] = var_data
- end
- }
- end
- private
- # @param [Symbol] param
- # @param [Integer] value
- def setup_param_requirement(param, value)
- case param
- when :attack, :attacco
- return setup_param_requirement(:atk, value)
- when :defense, :difesa
- return setup_param_requirement(:def, value)
- when :spirit, :magic_attack, :spirito, :attacco_magico, :att_magico
- return setup_param_requirement(:mat, value)
- when :velocita, :agilita, :speed, :agility
- return setup_param_requirement(:agi, value)
- when :magic_defense, :difesa_magica, :mdef
- return setup_param_requirement(:mdf, value)
- when :max_hp, :maxhp, :hp_massimi, :pv, :pv_massimi, :hp
- return setup_param_requirement(:mhp, value)
- when :max_mp, :maxmp, :mp_massimi, :pm, :pm_massimi, :mp
- return setup_param_requirement(:mmp, value)
- when :luck, :fortuna
- return setup_param_requirement(:luk, value)
- when :state_id, :stato
- return setup_param_requirement(:state, value)
- when :weapon_id, :arma
- return setup_param_requirement(:weapon, value)
- when :armor_id, :armatura, :equip
- return setup_param_requirement(:armor, value)
- when :weapon_type, :tipo_arma
- return setup_param_requirement(:wtype, value)
- when :armor_type, :tipo_armatura
- return setup_param_requirement(:atype, value)
- when :livello, :lv
- return setup_param_requirement(:level, value)
- else
- @equip_requirements[param] = value
- end
- end
- end #RPG::EquipItem
- #==============================================================================
- # ** Window_EquipItem
- #------------------------------------------------------------------------------
- # Modifica della classe per disegnare gli oggetti non disponibili
- #==============================================================================
- class Window_EquipItem < Window_ItemList
- # aggiunge il controllo dei requisiti equipaggiamenti
- alias h87req_equip_enable enable? unless $@
- def enable?(item)
- return false if item != nil and !@actor.requirements_met_for_equip?(item)
- h87req_equip_enable(item)
- end
- end #window_equipitem
- #==============================================================================
- # ** Scene_Equip
- #------------------------------------------------------------------------------
- # Aggiunta del controllo che non permette di equipaggiare oggetti i quali non
- # vengono soddisfatti i requisiti.
- #==============================================================================
- class Scene_Equip < Scene_MenuBase
- # alias del metodo di selezione dell'equipaggiamento
- alias h87req_oio on_item_ok unless $@
- def on_item_ok
- if @item_window.enable?(@item_window.item)
- h87req_oio
- else
- Sound.play_buzzer
- end
- end
- end #scene_equip
- #==============================================================================
- # ** Game_Actor
- #------------------------------------------------------------------------------
- # Aggiunta dei metodi per rimuover equipaggiamenti il quale collegamento con
- # altri non viene più soddisfatto.
- #==============================================================================
- class Game_Actor < Game_Battler
- # aggiunta del controllo dei requisiti quando si cambia equip
- alias h87reqEq_ce change_equip unless $@
- def change_equip(slot_id, item)
- h87reqEq_ce(slot_id, item)
- reorganize_requirements
- end
- # @param [RPG::EquipItem] equip
- def requirements_met_for_equip?(equip)
- return true if equip.nil?
- equip.equip_requirements.all?{ |key, val| equip_requirement_met?(key, val)}
- end
- # rimozione dell'equipaggiamento nel caso non si soddisfano più i requisiti
- def reorganize_requirements
- equips.select { |equip| !requirements_met_for_equip?(equip)}.each do |equip|
- discard_equip(equip)
- $game_party.gain_item(equip, 1)
- end
- end
- # definisce se per un determinato parametro ono
- # state rispettate le condizioni di equipaggiamento
- # @param [Symbol] param
- # @param [Object] val
- def equip_requirement_met?(param, val)
- return true if val.is_a?(Integer) and val == 0
- case param
- when :switch
- $game_switches[val]
- when :variable
- val[:id] == 0 or $game_variables[val[:id]] >= val[:value]
- when :wtype
- wtype_equipped?(val)
- when :atype
- armors.compact.select { |armor| armor.atype_id == val }.any?
- when :weapon
- weapons.select { |weapon| weapon.id == val}.any?
- when :armor
- armors.select { |armor| armor.id == val}.any?
- when :state
- states.select { |state| state.id == val}.any?
- else
- param_requirement_met?(param, val)
- end
- end
- # controlla se il valore del paprametro dell'eroe è sufficientemente
- # alto per equipaggiare l'oggetto
- # @param [Symbol] param
- # @param [Number] val
- def param_requirement_met?(param, val)
- begin
- return self.send(param) >= val
- rescue => error
- puts sprintf("ERROR: param %s incorrect for actor when checking equip requirements", param)
- puts error.message
- true
- end
- end
- end #game_actor
Advertisement
Advertisement
Advertisement
RAW Paste Data
Copied
Advertisement