Requisiti Equipaggiamenti
DescrizioneQuesto script permette di imporre dei requisiti ad armi ed armature equipaggiabili. A differenza degli altri script, gli equipaggiamenti vengono mostrati nella lista, ma vengono mostrati disattivati e non possono essere equipaggiati.
Funzionalità
Questo script può:
- Impostare requisiti per parametri del personaggio (livello, attacco ecc...);
- far richiedere ad un certo oggetto di avere prima un equipaggiamento necessario;
- rendere disponibile un equipaggiamento solo con un determinato switch;
- richiedere un determinato stato alterato all'eroe per equipaggiare l'oggetto.
Holy87
Creare una nuova voce sopra Main ed inserire lo script.
Nel caso di incompatibilità, provare a spostarla più in alto.
Script
Versione 2.0 (nuova)
requisiti_equip_2 - Pastebin.com
Spoiler
#=============================================================================== # 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 [email protected] def enable?(item) return false if item != nil and [email protected]_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 [email protected] 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 [email protected] 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
Modificato da Holy87, 15 November 2021 - 13:08 PM.