设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2549|回复: 8
打印 上一主题 下一主题

[已经解决] 装备耐久度脚本使用方法

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
跳转到指定楼层
1
发表于 2018-5-23 00:02:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 VIPArcher 于 2018-11-1 01:00 编辑

RUBY 代码复制
  1. #==============================================================================
  2. #   XaiL System - Item Durability
  3. #   Author: Nicke
  4. #   Created: 23/07/2012
  5. #   Edited: 28/08/2012
  6. #   Version: 1.0b
  7. #==============================================================================
  8. # Instructions
  9. # -----------------------------------------------------------------------------
  10. # To install this script, open up your script editor and copy/paste this script
  11. # to an open slot below ? Materials but above ? Main. Remember to save.
  12. #
  13. # This script is pretty extensive which means you need to configure it to
  14. # get it as you want it.
  15. #
  16. # To setup a durability/max durability value for an item do the following in the
  17. # notetag:
  18. # <durability: n>
  19. # <max_durability: n>
  20. # Where n is a floated value (2.3, 2.5 for example).
  21. #
  22. # You can also enable/disable repairing for an item:
  23. # <repairable: bool>
  24. # Where bool is true or false.
  25. # This option will be true as default if you don't specify it.
  26. #
  27. # To check an item's current durability value, do the following in a script call:
  28. # $game_party.durability?(item_id, item_type)
  29. # $game_party.durability?(1, :weapon)
  30. # $game_party.durability?(2, :armor)
  31. # $game_party.durability?(3, :item)
  32. #
  33. # All of those calls above will return the current durability value for each item.
  34. # You can also check the max durability value as well:
  35. # $game_party.max_durability?(item_id, item_type)
  36. # $game_party.max_durability?(3, :item)
  37. #
  38. # Althought the shop is intended for repairing you can force repair an item
  39. # without it costing any gold by the following script call:
  40. # $game_party.change_durability(nil, :repair, 2, :weapon)
  41. # This will repair item_id 2 for weapons without it costing any gold.
  42. #
  43. # Using the same method but with a different option you can damage your item
  44. # by doing the following instead:
  45. # $game_party.change_durability(value, type, item, item_type)
  46. # $game_party.change_durability(0.5, :damage, 2, :weapon)
  47. # This will damage item_id 2 for weapons by a value of 0.5.
  48. #
  49. # You can also restore durability value for an item:
  50. # $game_party.change_durability(2.0, :restore, 2, :weapon)
  51. # This will restore 2.0 durability value to the current value.
  52. #
  53. # You can check if an item can be repaired:
  54. # $game_party.repairable?(1, :item)
  55. #
  56. # You can alter the repair/damage formula in the settings.
  57. # Default for repairing is half the item's price.
  58. # Default for damaging an item is a randomized value by 0.1-0.5 with a
  59. # probability chance at 1/5.
  60. #
  61. # Current durability status for items will be displayed at the end of battle.
  62. # This will only work for the default battle system at the moment.
  63. # A few settings is located below to setup up this.
  64. #
  65. # *** Only for RPG Maker VX Ace. ***
  66. #==============================================================================
  67. ($imported ||= {})["XAIL-ITEM-DURABILITY"] = true
  68.  
  69. module XAIL
  70.   module ITEM_DURABILITY
  71.   #--------------------------------------------------------------------------#
  72.   # * Settings
  73.   #--------------------------------------------------------------------------#
  74.     # FONT = [name, size, color, bold, shadow]
  75.     FONT = [["Anklada™", "Verdana"], 16, Color.new(255,225,255), true, true]
  76.  
  77.     # Show/hide option for the ahop scene.
  78.     # DISPLAY = [show_help_icon, show_name, show_description,
  79.     # show_type, show_amount]
  80.     DISPLAY = [true, true, true, true, true]
  81.  
  82.     # Set the name of repair in the shop scene.
  83.     # REPAIR_COMMAND = string
  84.     REPAIR_COMMAND = "Repair"
  85.  
  86.     # Set the repair cost forumla.
  87.     def self.repair_price(item)
  88.       return item.price / 2
  89.     end
  90.  
  91.     # Set the damage formula.
  92.     def self.durability_damage
  93.       return rand(5) == 0 ? rand(5).to_f/10 + 0.1 : 0
  94.     end
  95.  
  96.     # USE_BROKEN = true/false
  97.     # Should you be able to equip broken items.
  98.     USE_BROKEN = false
  99.  
  100.     # TEXT_BROKEN = string
  101.     # Set the text for a broken item. (Used in battle)
  102.     TEXT_BROKEN = "Broken:"
  103.  
  104.     # DURABILITY_LOG = true/false
  105.     # Display durability status at scene battle. (Default battle system)
  106.     DURABILITY_LOG = true
  107.  
  108.     # LOG_WAIT = number
  109.     # How many times should the durability log wait.
  110.     LOG_WAIT = 3
  111.  
  112.   end
  113. end
  114. # *** Don't edit below unless you know what you are doing. ***
  115. #==============================================================================#
  116. # ** RPG::BaseItem
  117. #==============================================================================#
  118. class RPG::BaseItem
  119.  
  120.   attr_accessor :durability
  121.  
  122.   alias xail_item_durability_baseitem_init initialize
  123.   def initialize(*args, &block)
  124.     # // Method to initialize.
  125.     xail_item_durability_baseitem_init(*args, &block)
  126.     @durability = 0
  127.   end
  128.  
  129.   def durability
  130.     # // Method to check the item durability.
  131.     @note.scan(/<(?:DURABILITY|durability):\s(\d+.\d+)>/i)
  132.     return @durability unless @durability.nil?
  133.     return ($1.to_f > 0.0 ? $1.to_f : 0.0)
  134.   end
  135.  
  136.   def max_durability
  137.     # // Method to check the item max durability.
  138.     @note.scan(/<(?:MAX_DURABILITY|max_durability):\s(\d+.\d+)>/i)
  139.     return ($1.to_f > 0.0 ? $1.to_f : 0.0)
  140.   end
  141.  
  142.   def repairable
  143.     # // Method to check if item is repairable.
  144.     @note.scan(/<(?:REPAIRABLE|repairable):\s+(true|false)>/i)
  145.     return false if durability == max_durability
  146.     return true if $1.nil?
  147.     return eval($1)
  148.   end
  149.  
  150. end
  151. #==============================================================================#
  152. # ** Game_Party
  153. #==============================================================================#
  154. class Game_Party < Game_Unit
  155.  
  156.   def check_type(item_type)
  157.     # // Method to check the item type.
  158.     case item_type
  159.     when :item   ; item_type = $data_items
  160.     when :weapon ; item_type = $data_weapons
  161.     when :armor  ; item_type = $data_armors
  162.     end
  163.     item_type
  164.   end
  165.  
  166.   def durability?(item_id, item_type)
  167.     # // Method to check the current durability of a specified id.
  168.     item_type = check_type(item_type)
  169.     item_type[item_id].durability unless item_type[item_id].nil?
  170.   end
  171.  
  172.   def max_durability?(item_id, item_type)
  173.     # // Method to check the maximum durability of a specified id.
  174.     item_type = check_type(item_type)
  175.     item_type[item_id].max_durability unless item_type[item_id].nil?
  176.   end
  177.  
  178.   def change_durability(value, type, item_id, item_type)
  179.     # // Method to change the durability value for an item.
  180.     item_type = check_type(item_type)
  181.     item = item_type[item_id]
  182.     case type
  183.     when :restore
  184.       item.durability = (item.durability + value).clamp(0, item.max_durability)
  185.     when :damage
  186.       item.durability = (item.durability - value).clamp(0, item.max_durability)
  187.     when :repair
  188.       item.durability = item.max_durability
  189.     end unless item.nil?
  190.   end
  191.  
  192.   def repairable?(item_id, item_type)
  193.     # // Method to check if an item can be repaired.
  194.     item_type = check_type(item_type)
  195.     item_type[item_id].repairable
  196.   end
  197.  
  198. end
  199. #==============================================================================#
  200. # ** Game_Battler
  201. #==============================================================================#
  202. class Game_Battler < Game_BattlerBase
  203.  
  204.   alias xail_item_durability_gm_battler_execute_damage execute_damage
  205.   def execute_damage(user)
  206.     # // Method to execute damage.
  207.     if user.is_a?(Game_Actor)
  208.       r = Random.new
  209.       r = r.rand(0..4)
  210.       item = user.actor.equips[r]
  211.       item_type = :armor ; item_type = :weapon if r == 0
  212.       $game_party.change_durability(XAIL::ITEM_DURABILITY.durability_damage, :damage, item, item_type)
  213.       if $game_party.durability?(item, item_type) == 0
  214.         $game_actors[user.actor.id].change_equip(r, nil)
  215.       end
  216.     end
  217.     xail_item_durability_gm_battler_execute_damage(user)
  218.   end
  219.  
  220. end
  221. #==============================================================================#
  222. # ** Game_Actor
  223. #==============================================================================#
  224. class Game_Actor < Game_Battler
  225.  
  226.   def optimize_equipments
  227.     # // Method override optimize equipments.
  228.     clear_equipments
  229.     equip_slots.size.times do |i|
  230.       next if !equip_change_ok?(i)
  231.       items = $game_party.equip_items.select do |item|
  232.         item.etype_id == equip_slots[i] &&
  233.         equippable?(item) && item.performance >= 0 && item.durability != 0.0
  234.       end
  235.       change_equip(i, items.max_by {|item| item.performance })
  236.     end
  237.   end
  238.  
  239. end
  240. #==============================================================================#
  241. # ** Window_Help
  242. #==============================================================================#
  243. class Window_Help < Window_Base
  244.  
  245.   def set_durability_help(item)
  246.     # // Method to set the item for window help.
  247.     contents.font.name = XAIL::ITEM_DURABILITY::FONT[0]
  248.     contents.font.bold = XAIL::ITEM_DURABILITY::FONT[3]
  249.     contents.font.shadow = XAIL::ITEM_DURABILITY::FONT[4]
  250.     contents.font.out_color = Color.new(0,0,0,255)
  251.     if item
  252.       icon = XAIL::ITEM_DURABILITY::DISPLAY[0] ? '\i[' + item.icon_index.to_s + ']' : ""
  253.       name = XAIL::ITEM_DURABILITY::DISPLAY[1] ? '\c[2] »» ' + item.name + '\c[0]' : ""
  254.       desc = XAIL::ITEM_DURABILITY::DISPLAY[2] ? item.description : ""
  255.       weight = $imported["XAIL-INVENTORY-WEIGHT"] ? weight = " - Weight: #{item.weight}." : ""
  256.       durability = " - Durability: #{item.durability} / #{item.max_durability}."
  257.       if XAIL::ITEM_DURABILITY::DISPLAY[3]
  258.         if item.is_a?(RPG::Weapon) ; item_type = " (" + $data_system.weapon_types[item.wtype_id] + ")" end
  259.         if item.is_a?(RPG::Armor) ; item_type = " (" + $data_system.armor_types[item.etype_id] + ")" end
  260.       else
  261.         item_type = ""
  262.       end
  263.       new_line = "\n"
  264.       item_text = icon + name + item_type.to_s + weight + durability + new_line + desc
  265.     else
  266.       item_text = ""
  267.     end
  268.     set_text(item_text)
  269.   end
  270.  
  271. end
  272. #==============================================================================
  273. # ** Window_ShopCommand
  274. #==============================================================================
  275. class Window_ShopCommand < Window_HorzCommand
  276.  
  277.   def col_max
  278.     # // Method to set col max.
  279.     return 4
  280.   end
  281.  
  282.   alias xail_item_durability_winshop_make_cmd_list make_command_list
  283.   def make_command_list(*args, &block)
  284.     # // Method to make command list.
  285.     xail_item_durability_winshop_make_cmd_list(*args, &block)
  286.     add_command(XAIL::ITEM_DURABILITY::REPAIR_COMMAND, :repair)
  287.   end
  288.  
  289. end
  290. #==============================================================================
  291. # ** Window_ShopRepair
  292. #==============================================================================
  293. class Window_ShopRepair < Window_ItemList
  294.  
  295.   def initialize(x, y, width, height)
  296.     # // Method to initialize.
  297.     super(x, y, width, height)
  298.   end
  299.  
  300.   def enable?(item)
  301.     # // Method to check if a item is valid to be repair.
  302.     item && XAIL::ITEM_DURABILITY.repair_price(item) <= $game_party.gold &&
  303.     !$game_party.item_max?(item) && item.max_durability != item.durability
  304.   end
  305.  
  306.   alias xail_item_durability_shop_update_help update_help
  307.   def update_help(*args, &block)
  308.     # // Method to check if a item is valid to be repair.
  309.     xail_item_durability_shop_update_help(*args, &block)
  310.     @help_window.set_durability_help(item) if @help_window
  311.   end
  312.  
  313. end
  314. #==============================================================================#
  315. # ** Window_BattleLog
  316. #==============================================================================#
  317. class Window_BattleLog < Window_Selectable
  318.  
  319.   def display_durability(battler)
  320.     # // Method to display durability status in battle.
  321.     # i.e if a item has been broken.
  322.     if battler.is_a?(Game_Actor)
  323.       for i in 0..4
  324.         item = battler.actor.equips[i]
  325.         item_type = :armor ; item_type = :weapon if i == 0
  326.         if $game_party.durability?(item, item_type) == 0
  327.           item_type = $game_party.check_type(item_type)
  328.           item = item_type[item]
  329.           item = XAIL::ITEM_DURABILITY::TEXT_BROKEN + " " + item.name
  330.           add_text(sprintf(item))
  331.           XAIL::ITEM_DURABILITY::LOG_WAIT.times do
  332.             wait
  333.           end
  334.         end
  335.       end
  336.     end
  337.   end
  338.  
  339. end
  340. #==============================================================================#
  341. # ** Window_EquipItem
  342. #==============================================================================#
  343. class Window_EquipItem < Window_ItemList
  344.  
  345.   alias xail_item_durability_win_equip_enable? enable?
  346.   def enable?(item)
  347.     # // Method to check if a item is enabled/disabled.
  348.     return false if item.durability == 0 && !XAIL::ITEM_DURABILITY::USE_BROKEN unless item.nil?
  349.     xail_item_durability_win_equip_enable?(item)
  350.   end
  351.  
  352. end
  353. #==============================================================================#
  354. # ** Scene_Shop
  355. #==============================================================================#
  356. class Scene_Shop < Scene_MenuBase
  357.  
  358.   alias xail_item_durability_shop_start start
  359.   def start(*args, &block)
  360.     # // Method to start the scene.
  361.     xail_item_durability_shop_start(*args, &block)
  362.     create_repair_window
  363.   end
  364.  
  365.   alias xail_item_durability_shop_create_cmd_win create_command_window
  366.   def create_command_window(*args, &block)
  367.     # // Method to create command window.
  368.     xail_item_durability_shop_create_cmd_win(*args, &block)
  369.     @command_window.set_handler(:repair, method(:command_repair))
  370.   end
  371.  
  372.   def create_repair_window
  373.     # // Method to create repair window.
  374.     wy = @category_window.y + @category_window.height
  375.     wh = Graphics.height - wy
  376.     @repair_window = Window_ShopRepair.new(0, wy, Graphics.width, wh)
  377.     @repair_window.viewport = @viewport
  378.     @repair_window.help_window = @help_window
  379.     @repair_window.hide
  380.     @repair_window.set_handler(:ok,     method(:on_repair_ok))
  381.     @repair_window.set_handler(:cancel, method(:on_repair_cancel))
  382.     @category_window.item_window = @repair_window
  383.   end
  384.  
  385.   def command_repair
  386.     # // Method for command repair.
  387.     @dummy_window.hide
  388.     @category_window.show.activate
  389.     @repair_window.show
  390.     @repair_window.unselect
  391.     @repair_window.refresh
  392.   end
  393.  
  394.   def activate_repair
  395.     # // Method to active command options.
  396.     @repair_window.select(0)
  397.     @category_window.show
  398.     @repair_window.refresh
  399.     @repair_window.show.activate
  400.     @status_window.hide
  401.   end
  402.  
  403.   alias xail_item_durability_shop_on_cat_ok on_category_ok
  404.   def on_category_ok(*args, &block)
  405.     # // Method for category ok.
  406.     case @command_window.current_symbol
  407.     when :repair
  408.       activate_repair
  409.     when :sell
  410.       xail_item_durability_shop_on_cat_ok(*args, &block)
  411.     end
  412.   end
  413.  
  414.   alias xail_item_durability_shop_on_cat_cancel on_category_cancel
  415.   def on_category_cancel(*args, &block)
  416.     # // Method for category cancel.
  417.     xail_item_durability_shop_on_cat_cancel(*args, &block)
  418.     @repair_window.hide
  419.   end
  420.  
  421.   def on_repair_ok
  422.     # // Method to repair item.
  423.     @item = @repair_window.item
  424.     @status_window.item = @item
  425.     @category_window.hide
  426.     @repair_window.hide
  427.     @number_window.set(@item, max_item, repair_price, currency_unit)
  428.     @number_window.show.activate
  429.     @status_window.show
  430.   end
  431.  
  432.   def on_repair_cancel
  433.     # // Method to cancel repair.
  434.     @repair_window.unselect
  435.     @category_window.activate
  436.     @status_window.item = nil
  437.     @help_window.clear
  438.   end
  439.  
  440.   alias xail_item_durability_shop_on_number_ok on_number_ok
  441.   def on_number_ok(*args, &block)
  442.     # // Method on number ok.
  443.     if @command_window.current_symbol == :repair
  444.       do_repair(@number_window.number)
  445.     end
  446.     xail_item_durability_shop_on_number_ok(*args, &block)
  447.   end
  448.  
  449.   alias xail_item_durability_shop_end_number_input end_number_input
  450.   def end_number_input(*args, &block)
  451.     # // Method to check input number.
  452.     if @command_window.current_symbol == :repair
  453.       activate_repair
  454.     end
  455.     xail_item_durability_shop_end_number_input(*args, &block)
  456.   end
  457.  
  458.   def do_repair(number)
  459.     # // Method to do repair.
  460.     if @item.is_a?(RPG::Item)   ; item_type = :item     end
  461.     if @item.is_a?(RPG::Weapon) ; item_type = :weapon   end
  462.     if @item.is_a?(RPG::Armor)  ; item_type = :armor    end
  463.     $game_party.lose_gold(number * repair_price)
  464.     $game_party.change_durability(nil, :repair, @item.id, item_type)
  465.     @repair_window.refresh
  466.     @gold_window.refresh
  467.     @status_window.refresh
  468.     @help_window.refresh
  469.   end
  470.  
  471.   def max_item
  472.     # // Method to determine max item.
  473.     $game_party.item_number(@item)
  474.   end
  475.  
  476.   def repair_price
  477.     # // Method to set the repair price for the item.
  478.     XAIL::ITEM_DURABILITY.repair_price(@item)
  479.   end
  480.  
  481. end
  482. #==============================================================================#
  483. # ** Scene_Battle
  484. #==============================================================================#
  485. class Scene_Battle < Scene_Base
  486.  
  487.   alias xail_item_durability_scene_battle_process_action_end process_action_end
  488.   def process_action_end(*args, &block)
  489.     # // Method when process end at scene battle.
  490.     if XAIL::ITEM_DURABILITY::DURABILITY_LOG
  491.       @log_window.display_durability(@subject)
  492.       @log_window.wait_and_clear
  493.     end
  494.     xail_item_durability_scene_battle_process_action_end(*args, &block)
  495.   end
  496.  
  497. end # END OF FILE
  498.  
  499. #=*==========================================================================*=#
  500. # ** END OF FILE
  501. #=*==========================================================================*=#

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
2
 楼主| 发表于 2018-5-23 00:03:22 | 只看该作者
求问大神上边装备脚本耐久的使用方法   越具体越好 谢谢
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
3
 楼主| 发表于 2018-5-23 11:08:41 | 只看该作者
这是别人发出来的脚本   由于不懂脚本清大神解析下
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36402
在线时间
10791 小时
注册时间
2009-3-15
帖子
4813
4
发表于 2018-5-23 13:03:22 | 只看该作者
#================================================= =============================
#XaiL System - Item耐久度
#作者:Nicke
#创建日期:23/07/2012
#Edited: 2012年12月28日
#版本:1.0b
#======================================= =======================================
#说明
#-------- -------------------------------------------------- -------------------
#要安装此脚本,请打开您的脚本编辑器并将此脚本
#复制/粘贴到下面的一个开放式插槽中?材料但以上?主要。记得保存。
##
这个脚本非常广泛,这意味着你需要将它配置为
#根据需要获取它。

#要设置项目的耐久性/最大耐久性值,请在
#notetag中执行以下操作:
#<durability:n>
#<max_durability:n>
#其中n是浮动值(例如2.3,2.5 )。
##
您也可以启用/禁用修复项目:
#<repairable:bool>
#其中布尔是true或false。
#如果你没有指定它,这个选项默认为true。
##
为了检查物品当前的持久性值,请在脚本调用中执行以下操作:
#$ game_party.durability?(item_id,item_type)
#$ game_party.durability?(1,:武器)
#$ game_party.durability?(2, :armor)
#$ game_party.durability?(3,:item)

#以上所有这些调用都会返回每个项目的当前耐久性值。
#你也可以检查最大耐久值,以及:
#$ game_party.max_durability(ITEM_ID,ITEM_TYPE)?
#$ game_party.max_durability(3:项目)?

#Althought店旨在修复可以强制修理项目
#没有它通过以下脚本调用花费任何黄金:
#$ game_party.change_durability(nil,:repair,2,:weapon)
#这将修复item_id 2的武器,而不需要花费任何金币。
##
使用相同的方法,但使用不同的选项,您可以
通过执行以下操作来损坏您的物品
##$ game_party.change_durability(value,type,item,item_type)
#$ game_party.change_durability(0.5,:伤害,2,:武器)
#这将使武器的item_id 2受到0.5的伤害。
##
你还可以恢复一个物品的持久性值:
#$ game_party.change_durability(2.0,:restore,2,:weapon)
#这会将2.0耐久性值恢复到当前值。

#你可以检查的项目可以修复:
#$ game_party.repairable(1:项目)? #

你可以改变设置的维修/伤害公式。
#修复的默认值是商品价格的一半。
#损坏项目的默认值是0.1-0.5的随机值,
#概率为1/5。

#当前物品的耐久性状态将在战斗结束时显示。
#此时此功能仅适用于默认的战斗系统。
#几个设置位于下面来设置这个。
##
***只适用于RPG Maker VX Ace。***

评分

参与人数 1+1 收起 理由
够爱 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
5
 楼主| 发表于 2018-5-23 23:39:45 | 只看该作者
soulsaga 发表于 2018-5-23 13:03
#================================================= =============================
#XaiL System - I ...

谢谢大神   
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
14790
在线时间
2106 小时
注册时间
2017-9-28
帖子
662
6
发表于 2018-5-25 23:21:20 | 只看该作者
你的问题真的很多。

RUBY 代码复制
  1. #==============================================================================
  2. #   XaiL System - 物品耐久度
  3. #   Author: Nicke
  4. #   Created: 23/07/2012
  5. #   Edited: 28/08/2012
  6. #   Version: 1.0b
  7. #==============================================================================
  8. # 安装
  9. # -----------------------------------------------------------------------------
  10. # 安装此脚本的方法为:打开你工程的脚本编辑器,将此脚本复制/拷贝到▼ 插件脚本之下
  11. # ▼ Main之上的位置。记得保存工程使脚本生效。
  12. #
  13. # 此脚本的设定内容相当多,意味着你需要自己去调整设定才能达到你想要的效果。
  14. #
  15. # 设置耐久度/最大耐久度的物品备注:
  16. # <durability: n>
  17. # <max_durability: n>
  18. # n为带小数点的浮点数 (例如 2.3, 2.5 等).
  19. #
  20. # 该物品可以被修复/不可以被修复的物品备注:
  21. # <repairable: true>
  22. # <repairable: false>
  23. # 不使用以上备注的物品,则默认为true.
  24. #
  25. # 使用以下脚本,可以检查物品当前的耐久度:
  26. # $game_party.durability?(物品_id, 物品_类型)
  27. # $game_party.durability?(1, :weapon)
  28. # $game_party.durability?(2, :armor)
  29. # $game_party.durability?(3, :item)
  30. #
  31. # 以上脚本全部会为每个物品返回一个当前耐久度的数值.
  32. #
  33. # 你也可以使用下面的脚本检查物品的最大耐久度:
  34. # $game_party.max_durability?(物品_id, 物品_类型)
  35. # $game_party.max_durability?(3, :item)
  36. #
  37. # 尽管玩家可以在商店中花钱修复,你还可以使用脚本来免费修复:
  38. # $game_party.change_durability(nil, :repair, 2, :weapon)
  39. # 此脚本代表:修复2号武器,且不消耗金钱.
  40. #
  41. # 损耗物品的耐久度:
  42. # $game_party.change_durability(数值, 类型, 物品_id, 物品_类型)
  43. # $game_party.change_durability(0.5, :damage, 2, :weapon)
  44. # 此脚本代表:损耗2号武器0.5的耐久度.
  45. #
  46. # 存储物品耐久度的值:
  47. # $game_party.change_durability(2.0, :restore, 2, :weapon)
  48. # 这会将2.0耐久度的数值存储到当前数值.
  49. #
  50. # 检查某物品是否可以被修复:
  51. # $game_party.repairable?(1, :item)
  52. #
  53. # 你可以在本脚本中的设定部分,设置修改/损坏的公式。
  54. # 修复费用的默认值是商品价格的一半。
  55. # 损坏项目的默认值是0.1-0.5的随机值,概率为1/5。
  56. #
  57. # 当前物品的耐久性状态将在战斗结束时显示。
  58. # 此功能仅适用于默认的战斗系统。
  59. #
  60. # *** 仅用于 RPG Maker VX Ace. ***
  61. #==============================================================================
  62. ($imported ||= {})["XAIL-ITEM-DURABILITY"] = true
  63.  
  64. module XAIL
  65.   module ITEM_DURABILITY
  66.   #--------------------------------------------------------------------------#
  67.   # * Settings
  68.   #--------------------------------------------------------------------------#
  69.     # FONT = [字体名称, 字体大小, 颜色, 是否加粗, 是否有阴影]
  70.     FONT = [["微软雅黑", "宋体"], 16, Color.new(255,225,255), true, true]
  71.  
  72.     # 帮助场景里显示/隐藏某些信息.
  73.     # DISPLAY = [显示帮助图标, 显示名称, 显示介绍,
  74.     # 显示类型, 显示数量]
  75.     DISPLAY = [true, true, true, true, true]
  76.  
  77.     # 设置商店里修复的,名称.
  78.     # REPAIR_COMMAND = 字符串
  79.     REPAIR_COMMAND = "修复"
  80.  
  81.     # 修复费用的公式.
  82.     def self.repair_price(item)
  83.       return item.price / 2
  84.     end
  85.  
  86.     # 设置伤害公式.
  87.     def self.durability_damage
  88.       return rand(5) == 0 ? rand(5).to_f/10 + 0.1 : 0
  89.     end
  90.  
  91.     # USE_BROKEN = true/false
  92.     # 是否可以使用已损坏的物品.
  93.     USE_BROKEN = false
  94.  
  95.     # TEXT_BROKEN = 字符串
  96.     # 已损坏物品显示的文字. (在战斗中显示)
  97.     TEXT_BROKEN = "已损坏:"
  98.  
  99.     # DURABILITY_LOG = true/false
  100.     # 是否在战斗场景中显示耐久度信息. (默认战斗系统)
  101.     DURABILITY_LOG = true
  102.  
  103.     # LOG_WAIT = 数字
  104.     # 耐久度信息显示的时间.
  105.     LOG_WAIT = 3
  106.  
  107.   end
  108. end
  109. # *** Don't edit below unless you know what you are doing. ***
  110. #==============================================================================#
  111. # ** RPG::BaseItem
  112. #==============================================================================#
  113. class RPG::BaseItem
  114.  
  115.   attr_accessor :durability
  116.  
  117.   alias xail_item_durability_baseitem_init initialize
  118.   def initialize(*args, &block)
  119.     # // Method to initialize.
  120.     xail_item_durability_baseitem_init(*args, &block)
  121.     @durability = 0
  122.   end
  123.  
  124.   def durability
  125.     # // Method to check the item durability.
  126.     @note.scan(/<(?:DURABILITY|durability):\s(\d+.\d+)>/i)
  127.     return @durability unless @durability.nil?
  128.     return ($1.to_f > 0.0 ? $1.to_f : 0.0)
  129.   end
  130.  
  131.   def max_durability
  132.     # // Method to check the item max durability.
  133.     @note.scan(/<(?:MAX_DURABILITY|max_durability):\s(\d+.\d+)>/i)
  134.     return ($1.to_f > 0.0 ? $1.to_f : 0.0)
  135.   end
  136.  
  137.   def repairable
  138.     # // Method to check if item is repairable.
  139.     @note.scan(/<(?:REPAIRABLE|repairable):\s+(true|false)>/i)
  140.     return false if durability == max_durability
  141.     return true if $1.nil?
  142.     return eval($1)
  143.   end
  144.  
  145. end
  146. #==============================================================================#
  147. # ** Game_Party
  148. #==============================================================================#
  149. class Game_Party < Game_Unit
  150.  
  151.   def check_type(item_type)
  152.     # // Method to check the item type.
  153.     case item_type
  154.     when :item   ; item_type = $data_items
  155.     when :weapon ; item_type = $data_weapons
  156.     when :armor  ; item_type = $data_armors
  157.     end
  158.     item_type
  159.   end
  160.  
  161.   def durability?(item_id, item_type)
  162.     # // Method to check the current durability of a specified id.
  163.     item_type = check_type(item_type)
  164.     item_type[item_id].durability unless item_type[item_id].nil?
  165.   end
  166.  
  167.   def max_durability?(item_id, item_type)
  168.     # // Method to check the maximum durability of a specified id.
  169.     item_type = check_type(item_type)
  170.     item_type[item_id].max_durability unless item_type[item_id].nil?
  171.   end
  172.  
  173.   def change_durability(value, type, item_id, item_type)
  174.     # // Method to change the durability value for an item.
  175.     item_type = check_type(item_type)
  176.     item = item_type[item_id]
  177.     case type
  178.     when :restore
  179.       item.durability = (item.durability + value).clamp(0, item.max_durability)
  180.     when :damage
  181.       item.durability = (item.durability - value).clamp(0, item.max_durability)
  182.     when :repair
  183.       item.durability = item.max_durability
  184.     end unless item.nil?
  185.   end
  186.  
  187.   def repairable?(item_id, item_type)
  188.     # // Method to check if an item can be repaired.
  189.     item_type = check_type(item_type)
  190.     item_type[item_id].repairable
  191.   end
  192.  
  193. end
  194. #==============================================================================#
  195. # ** Game_Battler
  196. #==============================================================================#
  197. class Game_Battler < Game_BattlerBase
  198.  
  199.   alias xail_item_durability_gm_battler_execute_damage execute_damage
  200.   def execute_damage(user)
  201.     # // Method to execute damage.
  202.     if user.is_a?(Game_Actor)
  203.       r = Random.new
  204.       r = r.rand(0..4)
  205.       item = user.actor.equips[r]
  206.       item_type = :armor ; item_type = :weapon if r == 0
  207.       $game_party.change_durability(XAIL::ITEM_DURABILITY.durability_damage, :damage, item, item_type)
  208.       if $game_party.durability?(item, item_type) == 0
  209.         $game_actors[user.actor.id].change_equip(r, nil)
  210.       end
  211.     end
  212.     xail_item_durability_gm_battler_execute_damage(user)
  213.   end
  214.  
  215. end
  216. #==============================================================================#
  217. # ** Game_Actor
  218. #==============================================================================#
  219. class Game_Actor < Game_Battler
  220.  
  221.   def optimize_equipments
  222.     # // Method override optimize equipments.
  223.     clear_equipments
  224.     equip_slots.size.times do |i|
  225.       next if !equip_change_ok?(i)
  226.       items = $game_party.equip_items.select do |item|
  227.         item.etype_id == equip_slots[i] &&
  228.         equippable?(item) && item.performance >= 0 && item.durability != 0.0
  229.       end
  230.       change_equip(i, items.max_by {|item| item.performance })
  231.     end
  232.   end
  233.  
  234. end
  235. #==============================================================================#
  236. # ** Window_Help
  237. #==============================================================================#
  238. class Window_Help < Window_Base
  239.  
  240.   def set_durability_help(item)
  241.     # // Method to set the item for window help.
  242.     contents.font.name = XAIL::ITEM_DURABILITY::FONT[0]
  243.     contents.font.bold = XAIL::ITEM_DURABILITY::FONT[3]
  244.     contents.font.shadow = XAIL::ITEM_DURABILITY::FONT[4]
  245.     contents.font.out_color = Color.new(0,0,0,255)
  246.     if item
  247.       icon = XAIL::ITEM_DURABILITY::DISPLAY[0] ? '\i[' + item.icon_index.to_s + ']' : ""
  248.       name = XAIL::ITEM_DURABILITY::DISPLAY[1] ? '\c[2] ?? ' + item.name + '\c[0]' : ""
  249.       desc = XAIL::ITEM_DURABILITY::DISPLAY[2] ? item.description : ""
  250.       weight = $imported["XAIL-INVENTORY-WEIGHT"] ? weight = " - Weight: #{item.weight}." : ""
  251.       durability = " - Durability: #{item.durability} / #{item.max_durability}."
  252.       if XAIL::ITEM_DURABILITY::DISPLAY[3]
  253.         if item.is_a?(RPG::Weapon) ; item_type = " (" + $data_system.weapon_types[item.wtype_id] + ")" end
  254.         if item.is_a?(RPG::Armor) ; item_type = " (" + $data_system.armor_types[item.etype_id] + ")" end
  255.       else
  256.         item_type = ""
  257.       end
  258.       new_line = "\n"
  259.       item_text = icon + name + item_type.to_s + weight + durability + new_line + desc
  260.     else
  261.       item_text = ""
  262.     end
  263.     set_text(item_text)
  264.   end
  265.  
  266. end
  267. #==============================================================================
  268. # ** Window_ShopCommand
  269. #==============================================================================
  270. class Window_ShopCommand < Window_HorzCommand
  271.  
  272.   def col_max
  273.     # // Method to set col max.
  274.     return 4
  275.   end
  276.  
  277.   alias xail_item_durability_winshop_make_cmd_list make_command_list
  278.   def make_command_list(*args, &block)
  279.     # // Method to make command list.
  280.     xail_item_durability_winshop_make_cmd_list(*args, &block)
  281.     add_command(XAIL::ITEM_DURABILITY::REPAIR_COMMAND, :repair)
  282.   end
  283.  
  284. end
  285. #==============================================================================
  286. # ** Window_ShopRepair
  287. #==============================================================================
  288. class Window_ShopRepair < Window_ItemList
  289.  
  290.   def initialize(x, y, width, height)
  291.     # // Method to initialize.
  292.     super(x, y, width, height)
  293.   end
  294.  
  295.   def enable?(item)
  296.     # // Method to check if a item is valid to be repair.
  297.     item && XAIL::ITEM_DURABILITY.repair_price(item) <= $game_party.gold &&
  298.     !$game_party.item_max?(item) && item.max_durability != item.durability
  299.   end
  300.  
  301.   alias xail_item_durability_shop_update_help update_help
  302.   def update_help(*args, &block)
  303.     # // Method to check if a item is valid to be repair.
  304.     xail_item_durability_shop_update_help(*args, &block)
  305.     @help_window.set_durability_help(item) if @help_window
  306.   end
  307.  
  308. end
  309. #==============================================================================#
  310. # ** Window_BattleLog
  311. #==============================================================================#
  312. class Window_BattleLog < Window_Selectable
  313.  
  314.   def display_durability(battler)
  315.     # // Method to display durability status in battle.
  316.     # i.e if a item has been broken.
  317.     if battler.is_a?(Game_Actor)
  318.       for i in 0..4
  319.         item = battler.actor.equips[i]
  320.         item_type = :armor ; item_type = :weapon if i == 0
  321.         if $game_party.durability?(item, item_type) == 0
  322.           item_type = $game_party.check_type(item_type)
  323.           item = item_type[item]
  324.           item = XAIL::ITEM_DURABILITY::TEXT_BROKEN + " " + item.name
  325.           add_text(sprintf(item))
  326.           XAIL::ITEM_DURABILITY::LOG_WAIT.times do
  327.             wait
  328.           end
  329.         end
  330.       end
  331.     end
  332.   end
  333.  
  334. end
  335. #==============================================================================#
  336. # ** Window_EquipItem
  337. #==============================================================================#
  338. class Window_EquipItem < Window_ItemList
  339.  
  340.   alias xail_item_durability_win_equip_enable? enable?
  341.   def enable?(item)
  342.     # // Method to check if a item is enabled/disabled.
  343.     return false if item.durability == 0 && !XAIL::ITEM_DURABILITY::USE_BROKEN unless item.nil?
  344.     xail_item_durability_win_equip_enable?(item)
  345.   end
  346.  
  347. end
  348. #==============================================================================#
  349. # ** Scene_Shop
  350. #==============================================================================#
  351. class Scene_Shop < Scene_MenuBase
  352.  
  353.   alias xail_item_durability_shop_start start
  354.   def start(*args, &block)
  355.     # // Method to start the scene.
  356.     xail_item_durability_shop_start(*args, &block)
  357.     create_repair_window
  358.   end
  359.  
  360.   alias xail_item_durability_shop_create_cmd_win create_command_window
  361.   def create_command_window(*args, &block)
  362.     # // Method to create command window.
  363.     xail_item_durability_shop_create_cmd_win(*args, &block)
  364.     @command_window.set_handler(:repair, method(:command_repair))
  365.   end
  366.  
  367.   def create_repair_window
  368.     # // Method to create repair window.
  369.     wy = @category_window.y + @category_window.height
  370.     wh = Graphics.height - wy
  371.     @repair_window = Window_ShopRepair.new(0, wy, Graphics.width, wh)
  372.     @repair_window.viewport = @viewport
  373.     @repair_window.help_window = @help_window
  374.     @repair_window.hide
  375.     @repair_window.set_handler(:ok,     method(:on_repair_ok))
  376.     @repair_window.set_handler(:cancel, method(:on_repair_cancel))
  377.     @category_window.item_window = @repair_window
  378.   end
  379.  
  380.   def command_repair
  381.     # // Method for command repair.
  382.     @dummy_window.hide
  383.     @category_window.show.activate
  384.     @repair_window.show
  385.     @repair_window.unselect
  386.     @repair_window.refresh
  387.   end
  388.  
  389.   def activate_repair
  390.     # // Method to active command options.
  391.     @repair_window.select(0)
  392.     @category_window.show
  393.     @repair_window.refresh
  394.     @repair_window.show.activate
  395.     @status_window.hide
  396.   end
  397.  
  398.   alias xail_item_durability_shop_on_cat_ok on_category_ok
  399.   def on_category_ok(*args, &block)
  400.     # // Method for category ok.
  401.     case @command_window.current_symbol
  402.     when :repair
  403.       activate_repair
  404.     when :sell
  405.       xail_item_durability_shop_on_cat_ok(*args, &block)
  406.     end
  407.   end
  408.  
  409.   alias xail_item_durability_shop_on_cat_cancel on_category_cancel
  410.   def on_category_cancel(*args, &block)
  411.     # // Method for category cancel.
  412.     xail_item_durability_shop_on_cat_cancel(*args, &block)
  413.     @repair_window.hide
  414.   end
  415.  
  416.   def on_repair_ok
  417.     # // Method to repair item.
  418.     @item = @repair_window.item
  419.     @status_window.item = @item
  420.     @category_window.hide
  421.     @repair_window.hide
  422.     @number_window.set(@item, max_item, repair_price, currency_unit)
  423.     @number_window.show.activate
  424.     @status_window.show
  425.   end
  426.  
  427.   def on_repair_cancel
  428.     # // Method to cancel repair.
  429.     @repair_window.unselect
  430.     @category_window.activate
  431.     @status_window.item = nil
  432.     @help_window.clear
  433.   end
  434.  
  435.   alias xail_item_durability_shop_on_number_ok on_number_ok
  436.   def on_number_ok(*args, &block)
  437.     # // Method on number ok.
  438.     if @command_window.current_symbol == :repair
  439.       do_repair(@number_window.number)
  440.     end
  441.     xail_item_durability_shop_on_number_ok(*args, &block)
  442.   end
  443.  
  444.   alias xail_item_durability_shop_end_number_input end_number_input
  445.   def end_number_input(*args, &block)
  446.     # // Method to check input number.
  447.     if @command_window.current_symbol == :repair
  448.       activate_repair
  449.     end
  450.     xail_item_durability_shop_end_number_input(*args, &block)
  451.   end
  452.  
  453.   def do_repair(number)
  454.     # // Method to do repair.
  455.     if @item.is_a?(RPG::Item)   ; item_type = :item     end
  456.     if @item.is_a?(RPG::Weapon) ; item_type = :weapon   end
  457.     if @item.is_a?(RPG::Armor)  ; item_type = :armor    end
  458.     $game_party.lose_gold(number * repair_price)
  459.     $game_party.change_durability(nil, :repair, @item.id, item_type)
  460.     @repair_window.refresh
  461.     @gold_window.refresh
  462.     @status_window.refresh
  463.     @help_window.refresh
  464.   end
  465.  
  466.   def max_item
  467.     # // Method to determine max item.
  468.     $game_party.item_number(@item)
  469.   end
  470.  
  471.   def repair_price
  472.     # // Method to set the repair price for the item.
  473.     XAIL::ITEM_DURABILITY.repair_price(@item)
  474.   end
  475.  
  476. end
  477. #==============================================================================#
  478. # ** Scene_Battle
  479. #==============================================================================#
  480. class Scene_Battle < Scene_Base
  481.  
  482.   alias xail_item_durability_scene_battle_process_action_end process_action_end
  483.   def process_action_end(*args, &block)
  484.     # // Method when process end at scene battle.
  485.     if XAIL::ITEM_DURABILITY::DURABILITY_LOG
  486.       @log_window.display_durability(@subject)
  487.       @log_window.wait_and_clear
  488.     end
  489.     xail_item_durability_scene_battle_process_action_end(*args, &block)
  490.   end
  491.  
  492. end # END OF FILE
  493.  
  494. #=*==========================================================================*=#
  495. # ** END OF FILE
  496. #=*==========================================================================*=#
VA外站脚本汉化群:226308173   |    部分远古文件备份:https://wwzv.lanzoue.com/b02rac5pc  密码:acgm
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
7
 楼主| 发表于 2018-5-27 01:12:04 | 只看该作者
Nil2018 发表于 2018-5-25 23:21
你的问题真的很多。

#==============================================================================

正在着手做大型AX游戏  自己脚本又不懂所以系统等问题比较多需要解决的
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1410
在线时间
148 小时
注册时间
2018-3-24
帖子
145
8
 楼主| 发表于 2018-5-28 11:26:14 | 只看该作者
Nil2018 发表于 2018-5-25 23:21
你的问题真的很多。

#==============================================================================

在第181行出现错误 请问怎么解决

点评

向脚本大佬砸钱。  发表于 2018-5-29 22:04
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 07:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表