Advertisement
Holy87

requisiti_equip_2

Nov 15th, 2021
977
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #===============================================================================
  2. # REQUISITI EQUIPAGGIAMENTI
  3. #===============================================================================
  4. # Autore: Holy87
  5. # Versione: 2.0
  6. # Difficoltà utente: ?
  7. #
  8. # Novità della versione 2.0:
  9. # - Tag più liberi (possibilità di scrivere in inglese o in italiano) esempio:
  10. #   <requires atk: 100> <richiede attacco 100> <requires_atk 100> sono tutti tag
  11. #   corretti per requisito d'attacco
  12. # - Miglioramento generale del codice e riduzione degli attributi dell'equip
  13. # - Aggiunta la possibilità di definire una variabile minima
  14. # - Aggiunta la possibilità di definire parametri dell'eroe non direttamente
  15. #   previsti dallo script (ad esempio per script di terzi)
  16. #-------------------------------------------------------------------------------
  17. # Ora potrete inserire dei requisiti per equipaggiare un certo armamento!
  18. # Un equipaggiamento che può indossare l'eroe, ma che non rispetta i requisiti,
  19. # verrà mostrato disattivato e non potrà essere equipaggiato. È possibile
  20. # impostare diversi requisiti scrivendo le tag giuste nelle note dell'equipag-
  21. # giamento, sia esso un'arma o un'armatura:
  22. #
  23. # <richiede PARAMETRO: X> oppure <requires PARAMETRO: X>
  24. # dove al posto di PARAMETRO puoi inserire attacco, difesa, difesa_m, att_magico,
  25. # agilità, fortuna, hp_massimi, mp_massimi, livello; e al mosto di X il valore
  26. # minimo richiesto. Ad esempio, se scrivo <richiede livello 10>, significa che
  27. # l'arma non può essere equipaggiata dall'eroe se non ha raggiunto almeno il
  28. # livello 10.
  29. # Nota: si può inserire anche il nome del paramtro del codice, ad esempio
  30. # <requires atk: 100>
  31. # puoi inserire qualsiasi parametro definito della classe actor, anche quelli
  32. # non direttamnete previsti dallo script. Ad esempio:
  33. # <requires hit: 100> (solo se l'hit è 100 o superiore)
  34. #
  35. # <richiede switch X>
  36. # l'arma può essere equipaggiata solo se lo switch X è ON (X è l'ID dello switch)
  37. #
  38. # <richiede var X, Y>
  39. # L'arma richiede che la variabile X abbia un valore maggiore o uguale a Y
  40. #
  41. # <richiede armatura X> o <richiede arma X>
  42. # l'oggetto può essere equipaggiato solo se in possesso dell'equipaggiamento
  43. # richiesto, dove X è l'ID dell'equipaggiamento. Nel caso l'equipaggiamento
  44. # richiesto venga rimosso, viene dis-eguipaggiato anche quello che lo richiede.
  45. # Ad esempio, se l'accessorio mirino ottico richiede un fucile e questo viene
  46. # disequipaggiato, viene rimosso anche il mirino ottico.
  47. #
  48. # <richiede tipo arma X> o <richiede tipo armatura X>
  49. # l'oggetto può essere equipaggiato solo se l'eroe ha con sè un'arma o
  50. # un'armatura del tipo con ID X (ad esempio una spada qualsiasi, uno scudo
  51. # qualsiasi, un'armatura pesante qualsiasi ecc...) ricordati che i tipi vengono
  52. # definiti nel Glossario. Anche qui vale la regola che se l'equipaggiamento
  53. # richiesto viene rimosso, viene rimosso anche quello che lo richiede.
  54. #
  55. # <richiede stato X>
  56. # l'armatura può essere equipaggiata solo se l'eroe ha lo stato X inflitto.
  57. #-------------------------------------------------------------------------------
  58. # Istruzioni:
  59. # Copiare lo script sotto Materials e prima del Main.
  60. #-------------------------------------------------------------------------------
  61. # Compatibilità:
  62. # DataManager
  63. #   > alias load_normal_database
  64. #   > alias load_battle_test_database
  65. # Window_EquipItem
  66. #   > alias enable?
  67. # Scene_Equip
  68. #   > alias on_item_ok
  69. # Game_Actor
  70. #   > alias change_equip
  71. #-------------------------------------------------------------------------------
  72.  
  73.  
  74. $imported = {} if $imported == nil
  75. $imported["H87_EquipRequirements"] = 2.0
  76.  
  77. module EquipRequirementSettings
  78.   PARAM_REQ_REGEX = /<(?:requires|richiede)[_ ]+([\w_]+)[:]?[ ]*(\d+)>/i
  79.   VARIABLE_REQ_REGEX = /<(?:requires|richiede)[_ ]var[:]?[ ]*(\d+),[ ]*(\d+)>/i
  80. end
  81. #==============================================================================
  82. # ** DataManager
  83. #------------------------------------------------------------------------------
  84. #  Aggiunta del caricamento dei nuovi parametri
  85. #==============================================================================
  86. module DataManager
  87.  
  88.   class << self
  89.     alias h87ereq_lnd load_normal_database
  90.     alias h87ereq_lbtd load_battle_test_database
  91.   end
  92.  
  93.   # load_normal_database
  94.   def self.load_normal_database
  95.     h87ereq_lnd
  96.     setupEquipReq
  97.   end
  98.  
  99.   # load_battle_test_database
  100.   def self.load_battle_test_database
  101.     h87ereq_lbtd
  102.     setupEquipReq
  103.   end
  104.  
  105.   # configura i parametri dei requisiti
  106.   def self.setupEquipReq
  107.     $data_armors.compact.each(&:setup_requirements)
  108.     $data_weapons.compact.each(&:setup_requirements)
  109.   end
  110.  
  111. end #datamanager
  112.  
  113. #==============================================================================
  114. # ** RPG::EquipItem
  115. #------------------------------------------------------------------------------
  116. #  Aggiunta di tutti i nuovi attributi per i requisiti
  117. #==============================================================================
  118. class RPG::EquipItem
  119.   # @return [Hash{Symbol->Integer,Hash}] tabella dei requisiti
  120.   attr_reader :equip_requirements
  121.  
  122.   # inizializza i valori dei requisiti
  123.   def setup_requirements
  124.     return if @requirements_loaded
  125.     @requirements_loaded = true
  126.     @equip_requirements = {
  127.       level: 0, atk: 0, def: 0, mdf: 0,
  128.       mat: 0, agi: 0, luk: 0, mhp: 0, mmp: 0,
  129.       switch: 0, variable: {id: 0, value: 0},
  130.       state: 0, weapon: 0, armor: 0, wtype: 0,
  131.       atype: 0
  132.     }
  133.     self.note.split(/[\r\n]+/).each { |riga|
  134.       case riga
  135.       when EquipRequirementSettings::PARAM_REQ_REGEX
  136.         value = $2.to_i
  137.         param = $1.downcase.gsub('à','a').gsub(' ','_').to_sym
  138.         setup_param_requirement(param, value)
  139.       when EquipRequirementSettings::VARIABLE_REQ_REGEX
  140.         var_data = {id: $1.to_i, value: $2.to_i}
  141.         @equip_requirements[:variable] = var_data
  142.       end
  143.     }
  144.   end
  145.  
  146.   private
  147.  
  148.   # @param [Symbol] param
  149.   # @param [Integer] value
  150.   def setup_param_requirement(param, value)
  151.     case param
  152.     when :attack, :attacco
  153.       return setup_param_requirement(:atk, value)
  154.     when :defense, :difesa
  155.       return setup_param_requirement(:def, value)
  156.     when :spirit, :magic_attack, :spirito, :attacco_magico, :att_magico
  157.       return setup_param_requirement(:mat, value)
  158.     when :velocita, :agilita, :speed, :agility
  159.       return setup_param_requirement(:agi, value)
  160.     when :magic_defense, :difesa_magica, :mdef
  161.       return setup_param_requirement(:mdf, value)
  162.     when :max_hp, :maxhp, :hp_massimi, :pv, :pv_massimi, :hp
  163.       return setup_param_requirement(:mhp, value)
  164.     when :max_mp, :maxmp, :mp_massimi, :pm, :pm_massimi, :mp
  165.       return setup_param_requirement(:mmp, value)
  166.     when :luck, :fortuna
  167.       return setup_param_requirement(:luk, value)
  168.     when :state_id, :stato
  169.       return setup_param_requirement(:state, value)
  170.     when :weapon_id, :arma
  171.       return setup_param_requirement(:weapon, value)
  172.     when :armor_id, :armatura, :equip
  173.       return setup_param_requirement(:armor, value)
  174.     when :weapon_type, :tipo_arma
  175.       return setup_param_requirement(:wtype, value)
  176.     when :armor_type, :tipo_armatura
  177.       return setup_param_requirement(:atype, value)
  178.     when :livello, :lv
  179.       return setup_param_requirement(:level, value)
  180.     else
  181.       @equip_requirements[param] = value
  182.     end
  183.   end
  184. end #RPG::EquipItem
  185.  
  186. #==============================================================================
  187. # ** Window_EquipItem
  188. #------------------------------------------------------------------------------
  189. #  Modifica della classe per disegnare gli oggetti non disponibili
  190. #==============================================================================
  191. class Window_EquipItem < Window_ItemList
  192.  
  193.   # aggiunge il controllo dei requisiti equipaggiamenti
  194.   alias h87req_equip_enable enable? unless $@
  195.   def enable?(item)
  196.     return false if item != nil and !@actor.requirements_met_for_equip?(item)
  197.     h87req_equip_enable(item)
  198.   end
  199. end #window_equipitem
  200.  
  201. #==============================================================================
  202. # ** Scene_Equip
  203. #------------------------------------------------------------------------------
  204. #  Aggiunta del controllo che non permette di equipaggiare oggetti i quali non
  205. #  vengono soddisfatti i requisiti.
  206. #==============================================================================
  207. class Scene_Equip < Scene_MenuBase
  208.  
  209.   # alias del metodo di selezione dell'equipaggiamento
  210.   alias h87req_oio on_item_ok unless $@
  211.   def on_item_ok
  212.     if @item_window.enable?(@item_window.item)
  213.       h87req_oio
  214.     else
  215.       Sound.play_buzzer
  216.     end
  217.   end
  218. end #scene_equip
  219.  
  220. #==============================================================================
  221. # ** Game_Actor
  222. #------------------------------------------------------------------------------
  223. #  Aggiunta dei metodi per rimuover equipaggiamenti il quale collegamento con
  224. #  altri non viene più soddisfatto.
  225. #==============================================================================
  226. class Game_Actor < Game_Battler
  227.  
  228.   # aggiunta del controllo dei requisiti quando si cambia equip
  229.   alias h87reqEq_ce change_equip unless $@
  230.   def change_equip(slot_id, item)
  231.     h87reqEq_ce(slot_id, item)
  232.     reorganize_requirements
  233.   end
  234.  
  235.   # @param [RPG::EquipItem] equip
  236.   def requirements_met_for_equip?(equip)
  237.     return true if equip.nil?
  238.     equip.equip_requirements.all?{ |key, val| equip_requirement_met?(key, val)}
  239.   end
  240.  
  241.   # rimozione dell'equipaggiamento nel caso non si soddisfano più i requisiti
  242.   def reorganize_requirements
  243.     equips.select { |equip| !requirements_met_for_equip?(equip)}.each do |equip|
  244.       discard_equip(equip)
  245.       $game_party.gain_item(equip, 1)
  246.     end
  247.   end
  248.  
  249.   # definisce se per un determinato parametro ono
  250.   # state rispettate le condizioni di equipaggiamento
  251.   # @param [Symbol] param
  252.   # @param [Object] val
  253.   def equip_requirement_met?(param, val)
  254.     return true if val.is_a?(Integer) and val == 0
  255.     case param
  256.     when :switch
  257.       $game_switches[val]
  258.     when :variable
  259.       val[:id] == 0 or $game_variables[val[:id]] >= val[:value]
  260.     when :wtype
  261.       wtype_equipped?(val)
  262.     when :atype
  263.       armors.compact.select { |armor| armor.atype_id == val }.any?
  264.     when :weapon
  265.       weapons.select { |weapon| weapon.id == val}.any?
  266.     when :armor
  267.       armors.select { |armor| armor.id == val}.any?
  268.     when :state
  269.       states.select { |state| state.id == val}.any?
  270.     else
  271.       param_requirement_met?(param, val)
  272.     end
  273.   end
  274.  
  275.   # controlla se il valore del paprametro dell'eroe è sufficientemente
  276.   # alto per equipaggiare l'oggetto
  277.   # @param [Symbol] param
  278.   # @param [Number] val
  279.   def param_requirement_met?(param, val)
  280.     begin
  281.       return self.send(param) >= val
  282.     rescue => error
  283.       puts sprintf("ERROR: param %s incorrect for actor when checking equip requirements", param)
  284.       puts error.message
  285.       true
  286.     end
  287.   end
  288.  
  289. end #game_actor
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement