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

Project1

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

[已经过期] 谁帮我改改这个脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
214
在线时间
66 小时
注册时间
2014-1-23
帖子
53
跳转到指定楼层
1
发表于 2014-2-25 20:56:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 铃仙·优昙华院·因幡 于 2014-2-26 10:42 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # 装备耐久度 by 沉影不器
  3. # protosssonny修改版
  4. #------------------------------------------------------------------------------
  5. # ① 自定义各个装备耐久度上限
  6. # ② 允许显示"无法破坏"的装备,允许忽略耐久度的装备(如:戒指等装饰类)
  7. # ③ 物理攻击消耗武器耐久度,被打消耗防具耐久度
  8. #    攻击越高,对方防具减耐久度的机率越大,防御越高,对方武器减耐久度的机率越大
  9. # ④ 装备耐久度降为 0 时装备即损坏,该装备能力消失,提供修复耐久度的功能
  10. # ⑤ 修复装备时耐久度上限也会下降,提供同时修复耐久度和上限的功能
  11. # ⑥ 装备卖出价格随耐久度打折
  12. #==============================================================================
  13. module Game_Equip
  14.   ## 耐久度上限(指所有装备耐久度上限不可超过的值)
  15.   MaxDur = 999
  16.   # 忽略耐久度的防具类型(0:盾 1:头盔 2:衣服 3:装饰 4:武器)
  17.   #   非忽略耐久度 且未定义耐久度,则被认为"无法破坏"
  18.   NoDur = [3]
  19.   # 降低耐久度的基本机率最小值和最大值(大于0小于1)
  20.   Dur_BaseDec = [0.25, 0.75]
  21.   # 修复装备时耐久度上限减少量
  22.   MaxDur_Dec = 1
  23.   # 装备耐久度剩余多少比值(0到1)时提示
  24.   Show_If_Lower = 0.5
  25.   # 损坏时装备显示颜色
  26.   BrokenColor = Color.new(255,0,0)
  27.   # 耐久度占总价格比值(0到1)
  28.   Dur_Price = 0.7
  29. end
  30.  
  31. module RPG
  32.   class BaseItem
  33.     #------------------------------------------------------------------------
  34.     # 是否被破坏
  35.     #------------------------------------------------------------------------
  36.     def broken?
  37.       return false
  38.     end
  39.   end
  40. end
  41.  
  42. module RPG
  43.   class Weapon < BaseItem
  44.     include Game_Equip
  45.     #------------------------------------------------------------------------
  46.     # 附加属性
  47.     #------------------------------------------------------------------------
  48.     attr_accessor :base_id
  49.     attr_reader   :maxdur
  50.     attr_reader   :dur
  51.     attr_reader   :indesctructible
  52.     #------------------------------------------------------------------------
  53.     # 是否无耐久度
  54.     #------------------------------------------------------------------------
  55.     def nodur
  56.       return NoDur.include? 4
  57.     end
  58.     #------------------------------------------------------------------------
  59.     # 是否被破坏
  60.     #------------------------------------------------------------------------
  61.     def broken?
  62.       return false if dur.nil?
  63.       return true if dur.zero?
  64.     end
  65.     #------------------------------------------------------------------------
  66.     # 是否需修复
  67.     #------------------------------------------------------------------------
  68.     def need_repair?(hyper)
  69.       return false if dur.nil?
  70.       return false if hyper.nil?
  71.       max = hyper ? read_note('耐久度').to_i : maxdur
  72.       return true if max > dur
  73.       return false
  74.     end
  75.     #------------------------------------------------------------------------
  76.     # 耐久度初始化
  77.     #------------------------------------------------------------------------
  78.     def inidur
  79.       d = read_note('耐久度').to_i
  80.       if d.zero?
  81.         @indesctructible = true
  82.       else
  83.         @indesctructible = false
  84.         @maxdur = @dur = [d, MaxDur].min
  85.       end
  86.     end
  87.     #------------------------------------------------------------------------
  88.     # 耐久度损耗
  89.     #------------------------------------------------------------------------
  90.     def decdur(n = 1)
  91.       return if @dur.nil?
  92.       n = [n, maxdur].min
  93.       @dur -= n unless nodur or indesctructible or dur < n
  94.       @dur -= 1
  95.     end
  96.     #------------------------------------------------------------------------
  97.     # 耐久度修复
  98.     #------------------------------------------------------------------------
  99.     def repair
  100.       return false if dur.nil?
  101.       if dur < maxdur and maxdur > 0
  102.         @maxdur -= MaxDur_Dec if @maxdur - @dur > MaxDur_Dec
  103.         @dur = @maxdur
  104.         return true
  105.       else
  106.         return false
  107.       end
  108.     end
  109.     #------------------------------------------------------------------------
  110.     # 耐久度全修复
  111.     #------------------------------------------------------------------------
  112.     def hyper_repair
  113.       return false if dur.nil?
  114.       max = read_note('耐久度').to_i
  115.       if dur < max and max > 0
  116.         @dur = @maxdur = max
  117.         return true
  118.       else
  119.         return false
  120.       end
  121.     end
  122.     #------------------------------------------------------------------------
  123.     # 攻击力
  124.     #------------------------------------------------------------------------
  125.     def atk
  126.       return [url=home.php?mod=space&uid=101599]@atk[/url] if dur.nil?
  127.       return dur > 0 ? [url=home.php?mod=space&uid=101599]@atk[/url] : 0  
  128.     end
  129.     #------------------------------------------------------------------------
  130.     # 防御力
  131.     #------------------------------------------------------------------------
  132.     def def
  133.       return @def if dur.nil?
  134.       return dur > 0 ? @def : 0  
  135.     end
  136.     #------------------------------------------------------------------------
  137.     # 魔力
  138.     #------------------------------------------------------------------------
  139.     def spi
  140.       return [url=home.php?mod=space&uid=87501]@SPI[/url] if dur.nil?
  141.       return dur > 0 ? [url=home.php?mod=space&uid=87501]@SPI[/url] : 0  
  142.     end
  143.     #------------------------------------------------------------------------
  144.     # 敏捷
  145.     #------------------------------------------------------------------------
  146.     def agi
  147.       return [url=home.php?mod=space&uid=6136]@agi[/url] if dur.nil?
  148.       return dur > 0 ? [url=home.php?mod=space&uid=6136]@agi[/url] : 0  
  149.     end
  150.   end
  151. end
  152.  
  153. module RPG
  154.   class Armor < BaseItem
  155.     include Game_Equip
  156.     #------------------------------------------------------------------------
  157.     # 附加属性
  158.     #------------------------------------------------------------------------
  159.     attr_accessor :base_id
  160.     attr_reader   :maxdur
  161.     attr_reader   :dur
  162.     attr_reader   :indesctructible
  163.     #------------------------------------------------------------------------
  164.     # 是否无耐久度
  165.     #------------------------------------------------------------------------
  166.     def nodur
  167.       return NoDur.include? kind
  168.     end
  169.     #------------------------------------------------------------------------
  170.     # 是否被破坏
  171.     #------------------------------------------------------------------------
  172.     def broken?
  173.       return false if dur.nil?
  174.       return true if dur.zero?
  175.     end
  176.     #------------------------------------------------------------------------
  177.     # 是否需修复
  178.     #------------------------------------------------------------------------
  179.     def need_repair?(hyper)
  180.       return false if dur.nil?
  181.       return false if hyper.nil?
  182.       max = hyper ? read_note('耐久度').to_i : maxdur
  183.       return true if max > dur
  184.       return false
  185.     end
  186.     #------------------------------------------------------------------------
  187.     # 耐久度初始化
  188.     #------------------------------------------------------------------------
  189.     def inidur
  190.       d = read_note('耐久度').to_i
  191.       if d.zero?
  192.         @indesctructible = true
  193.       else
  194.         @indesctructible = false
  195.         @maxdur = @dur = [d, MaxDur].min
  196.       end
  197.     end
  198.     #------------------------------------------------------------------------
  199.     # 耐久度损耗
  200.     #------------------------------------------------------------------------
  201.     def decdur(n = 1)
  202.       return if @dur.nil?
  203.       n = [n, maxdur].min
  204.       n = 0 if PA::USE_DUR == false       #不使用耐久度时,耐久度不减少
  205.       @dur -= n unless nodur or indesctructible or dur < n
  206.     end
  207.     #------------------------------------------------------------------------
  208.     # 耐久度修复
  209.     #------------------------------------------------------------------------
  210.     def repair
  211.       return false if dur.nil?
  212.       if dur < maxdur and maxdur > 0
  213.         @maxdur -= MaxDur_Dec if @maxdur - @dur > MaxDur_Dec
  214.         @dur = @maxdur
  215.         return true
  216.       else
  217.         return false
  218.       end
  219.     end
  220.     #------------------------------------------------------------------------
  221.     # 耐久度全修复
  222.     #------------------------------------------------------------------------
  223.     def hyper_repair
  224.       return false if dur.nil?
  225.       max = read_note('耐久度').to_i
  226.       if dur < max and max > 0
  227.         @dur = @maxdur = max
  228.         return true
  229.       else
  230.         return false
  231.       end
  232.     end
  233.     #------------------------------------------------------------------------
  234.     # 攻击力
  235.     #------------------------------------------------------------------------
  236.     def atk
  237.       return [url=home.php?mod=space&uid=101599]@atk[/url] if dur.nil?
  238.       return dur > 0 ? @atk : 0  
  239.     end
  240.     #------------------------------------------------------------------------
  241.     # 防御力
  242.     #------------------------------------------------------------------------
  243.     def def
  244.       return @def if dur.nil?
  245.       return dur > 0 ? @def : 0  
  246.     end
  247.     #------------------------------------------------------------------------
  248.     # 魔力
  249.     #------------------------------------------------------------------------
  250.     def spi
  251.       return [url=home.php?mod=space&uid=87501]@SPI[/url] if dur.nil?
  252.       return dur > 0 ? @spi : 0  
  253.     end
  254.     #------------------------------------------------------------------------
  255.     # 敏捷
  256.     #------------------------------------------------------------------------
  257.     def agi
  258.       return [url=home.php?mod=space&uid=6136]@agi[/url] if dur.nil?
  259.       return dur > 0 ? @agi : 0  
  260.     end
  261.     #------------------------------------------------------------------------
  262.     # 闪避率
  263.     #------------------------------------------------------------------------
  264.     def eva
  265.       return [url=home.php?mod=space&uid=284635]@eva[/url] if dur.nil?
  266.       return dur > 0 ? [url=home.php?mod=space&uid=284635]@eva[/url] : 0  
  267.     end
  268.   end
  269. end
  270.  
  271. #==============================================================================
  272. # ■ Game_Battler
  273. #==============================================================================
  274. class Game_Battler
  275.   #--------------------------------------------------------------------------
  276.   # ● 判断是否防御
  277.   #--------------------------------------------------------------------------
  278.   def guarding?
  279.     return @action.guard?
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ● 反映伤害
  283.   #     user : 特技以及物品的使用者
  284.   #    调用前先设置 @hp_damage、@mp_damage、@absorbed。
  285.   #--------------------------------------------------------------------------
  286.   def execute_damage(user)
  287.     if @hp_damage > 0           # 伤害为正数
  288.       remove_states_shock       # 受到攻击解除的状态
  289.     end
  290.     self.hp -= @hp_damage
  291.     self.mp -= @mp_damage
  292.     if @absorbed                # 吸收的情况
  293.       user.hp += @hp_damage
  294.       user.mp += @mp_damage
  295.     end
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 应用普通攻击效果
  299.   #     attacker : 攻击者
  300.   #--------------------------------------------------------------------------
  301.   def attack_effect(attacker)
  302.     clear_action_results
  303.     unless attack_effective?(attacker)
  304.       @skipped = true
  305.       return
  306.     end
  307.     if rand(100) >= calc_hit(attacker)            # 判断命中
  308.       @missed = true
  309.       return
  310.     end
  311.     if rand(100) < calc_eva(attacker)             # 判断回避
  312.       @evaded = true
  313.       return
  314.     end
  315.     make_attack_damage_value(attacker)            # 计算伤害
  316.     execute_damage(attacker)                      # 反映伤害
  317.     if @hp_damage == 0                            # 判断物理攻击无效
  318.       return                                    
  319.     end
  320.     ## 处理耐久度
  321.     set_dur(attacker, self)
  322.     apply_state_changes(attacker)                 # 状态变化
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 应用特技效果
  326.   #     user  : 特技使用者
  327.   #     skill : 特技
  328.   #--------------------------------------------------------------------------
  329.   def skill_effect(user, skill)
  330.     clear_action_results
  331.     unless skill_effective?(user, skill)
  332.       @skipped = true
  333.       return
  334.     end
  335.     if rand(100) >= calc_hit(user, skill)         # 判断命中
  336.       @missed = true
  337.       return
  338.     end
  339.     if rand(100) < calc_eva(user, skill)          # 判断回避
  340.       @evaded = true
  341.       return
  342.     end
  343.     make_obj_damage_value(user, skill)            # 计算伤害
  344.     make_obj_absorb_effect(user, skill)           # 计算吸收效果
  345.     execute_damage(user)                          # 反映伤害
  346.     if skill.physical_attack and @hp_damage == 0  # 判断物理攻击无效
  347.       return                                    
  348.     end
  349.     ## 处理耐久度
  350.     set_dur(user, self, skill)
  351.     apply_state_changes(skill)                    # 状态变化
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● 应用物品效果
  355.   #     user : 物品使用者
  356.   #     item : 物品
  357.   #--------------------------------------------------------------------------
  358.   def item_effect(user, item)
  359.     clear_action_results
  360.     unless item_effective?(user, item)
  361.       @skipped = true
  362.       return
  363.     end
  364.     if rand(100) >= calc_hit(user, item)          # 判断命中
  365.       @missed = true
  366.       return
  367.     end
  368.     if rand(100) < calc_eva(user, item)           # 判断回避
  369.       @evaded = true
  370.       return
  371.     end
  372.     hp_recovery = calc_hp_recovery(user, item)    # 计算 HP 回复量
  373.     mp_recovery = calc_mp_recovery(user, item)    # 计算 MP 回复量
  374.     make_obj_damage_value(user, item)             # 计算伤害
  375.     @hp_damage -= hp_recovery                     # 减去 HP 回复量
  376.     @mp_damage -= mp_recovery                     # 减去 MP 回复量
  377.     make_obj_absorb_effect(user, item)            # 计算吸收效果
  378.     execute_damage(user)                          # 反映伤害
  379.     item_growth_effect(user, item)                # 应用成长效果
  380.     if item.physical_attack and @hp_damage == 0   # 判断物理攻击无效
  381.       return                                    
  382.     end
  383.     ## 处理耐久度
  384.     set_dur(user, self, item)
  385.     apply_state_changes(item)                     # 状态变化
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ● 处理耐久度
  389.   #--------------------------------------------------------------------------
  390.   def set_dur(attacker, defender, obj = nil)
  391.     ## 补血时返回
  392.     return if @hp_damage < 0
  393.     atk_f = obj.nil? ? 1.0 : obj.atk_f / 100.0
  394.     w = defender.def / 999.0 * atk_f
  395.     a = attacker.atk / 999.0 * atk_f
  396.     w = [[w, Game_Equip::Dur_BaseDec[0]].max, Game_Equip::Dur_BaseDec[1]].min
  397.     a = [[a, Game_Equip::Dur_BaseDec[0]].max, Game_Equip::Dur_BaseDec[1]].min
  398.     if attacker.actor? and 0.8 > rand
  399.       weapons = attacker.weapons.compact
  400.       return if weapons.empty?
  401.       weapons[rand weapons.size].decdur
  402.     end
  403.     if defender.actor? and 0.8 > rand
  404.       armors = defender.armors.compact
  405.       return if armors.empty?
  406.       armors[rand armors.size].decdur
  407.     end
  408.   end
  409. end
  410.  
  411. #==============================================================================
  412. # ■ Window_ScrRepair
  413. #==============================================================================
  414. class Window_ScrRepair < Window_Item
  415.   #--------------------------------------------------------------------------
  416.   # ● 初始化对象
  417.   #     x      : 窗口的 X 坐标
  418.   #     y      : 窗口的 Y 坐标
  419.   #     width  : 窗口的宽
  420.   #     height : 窗口的高
  421.   #--------------------------------------------------------------------------
  422.   def initialize(x, y, width, height, hyper_repair)
  423.     super(x, y, width, height)
  424.     @column_max = 1
  425.     self.index = 0
  426.     @hyper_repair = hyper_repair
  427.     refresh
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● 列表中包含的物品
  431.   #     item : 物品
  432.   #--------------------------------------------------------------------------
  433.   def include?(item)
  434.     return true if item == nil
  435.     return false if item.is_a? RPG::Armor and item.base_id == PA::CRYSTAL
  436.     return true if item.is_a? RPG::Weapon and item.need_repair?(@hyper_repair)
  437.     return true if item.is_a? RPG::Armor and item.need_repair?(@hyper_repair)
  438.     return false
  439.   end
  440.   #--------------------------------------------------------------------------
  441.   # ● 是否可以使用物品
  442.   #     item : 物品
  443.   #--------------------------------------------------------------------------
  444.   def enable?(item)
  445.     return true
  446.   end
  447. end
  448.  
  449. #==============================================================================
  450. # ■ Window_DestRepair #equip add clear items
  451. #==============================================================================
  452. class Window_DestRepair < Window_Base
  453.   #--------------------------------------------------------------------------
  454.   # ● 定义实例变量
  455.   #--------------------------------------------------------------------------
  456.   attr_reader   :equips
  457.   #--------------------------------------------------------------------------
  458.   # ● 初始化对象
  459.   #     x      : 窗口的 X 坐标
  460.   #     y      : 窗口的 Y 坐标
  461.   #     width  : 窗口的宽
  462.   #     height : 窗口的高
  463.   #--------------------------------------------------------------------------
  464.   def initialize(x, y, width, height)
  465.     super(x, y, width, height)
  466.     clear
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ● 添加物品
  470.   #--------------------------------------------------------------------------
  471.   def add(item)
  472.     return if item.nil?
  473.     $game_party.lose_item(item, 1)
  474.     @equips << item
  475.     [url=home.php?mod=space&uid=370741]@Index[/url] += 1
  476.     draw_item(item)
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● 清除物品
  480.   #--------------------------------------------------------------------------
  481.   def clear
  482.     @equips = []
  483.     [url=home.php?mod=space&uid=370741]@Index[/url] = 0
  484.     self.contents.clear
  485.     self.contents.font.color = system_color
  486.     self.contents.draw_text(0,0,self.contents.width-16,WLH,"请放入需修复的装备:")
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● 归还物品
  490.   #--------------------------------------------------------------------------
  491.   def revert
  492.     $game_party.gain_item(@equip, 1)
  493.     @equips.each{|i| $game_party.gain_item(i, 1)}
  494.     clear
  495.   end
  496.   #--------------------------------------------------------------------------
  497.   # ● 描绘项目
  498.   #--------------------------------------------------------------------------
  499.   def draw_item(item)
  500.     rect = Rect.new(4,WLH*@index,self.contents.width-8, WLH)
  501.     if item != nil
  502.       draw_item_name(item, rect.x, rect.y)
  503.       self.contents.draw_text(rect, sprintf(":%2d", 1), 2)
  504.     end
  505.   end
  506.   #--------------------------------------------------------------------------
  507.   # ● 更新帮助文本
  508.   #--------------------------------------------------------------------------
  509.   def update_help
  510.     @help_window.set_text(item == nil ? "" : item.description)
  511.   end
  512. end
  513.  
  514. #==============================================================================
  515. # ■ Scene_Repair
  516. #==============================================================================
  517. class Scene_Repair < Scene_Base
  518.   include Game_Equip
  519.   #--------------------------------------------------------------------------
  520.   # ● 初始化对象
  521.   #     menu_index : 指令光标初期位置
  522.   #--------------------------------------------------------------------------
  523.   def initialize(hyper_repair = false)
  524.     @hyper_repair = hyper_repair
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 开始处理
  528.   #--------------------------------------------------------------------------
  529.   def start
  530.     super
  531.     create_menu_background
  532.     create_command_window
  533.     @name_window = Window_Base.new(0,0,128,56)
  534.     if @hyper_repair == true
  535.       @name_window.contents.draw_text(4,0,544,24,"特殊修理",0)
  536.     else
  537.       @name_window.contents.draw_text(4,0,544,24,"普通修理",0)
  538.     end  
  539.     @help_window = Window_Process_Help.new
  540.     @help_window.contents.draw_text(0,0,352,24,"请选择需要修复的装备,按W确定。", 0)
  541.     @help_window.visible = true
  542.     @scrhelp_window = Window_Help.new
  543.     @gold_window = Window_Gold.new(384, 0)
  544.     @gold_need_window = Window_Gold_Need.new
  545.     @gold_need_window.set_text(0)
  546.     @scr_window = Window_ScrRepair.new(0,112,272,304,@hyper_repair)
  547.     @scr_window.active = true
  548.     @scr_window.help_window = @scrhelp_window
  549.     @dest_window = Window_DestRepair.new(272,112,272,304-56)
  550.     @result_window = Window_Base.new(80,56,384,80)
  551.     @result_window.active = false
  552.     @result_window.visible = false
  553.   end
  554.   #--------------------------------------------------------------------------
  555.   # ● 结束处理
  556.   #--------------------------------------------------------------------------
  557.   def terminate
  558.     super
  559.     dispose_menu_background
  560.     dispose_command_window
  561.     @name_window.dispose
  562.     @gold_need_window.dispose
  563.     @help_window.dispose
  564.     @scrhelp_window.dispose
  565.     @gold_window.dispose
  566.     @scr_window.dispose
  567.     @dest_window.dispose
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 更新画面
  571.   #--------------------------------------------------------------------------
  572.   def update
  573.     super
  574.     update_menu_background
  575.     if @command_window.active
  576.       @scr_window.contents_opacity = 128
  577.       @command_window.contents_opacity = 255
  578.       update_command_selection
  579.     elsif @scr_window.active
  580.       @scr_window.contents_opacity = 255
  581.       @command_window.contents_opacity = 128
  582.       update_item_selection
  583.     elsif @result_window.active
  584.       update_result_window
  585.     end
  586.     @command_window.update
  587.     @gold_window.update
  588.     @scr_window.update
  589.     @dest_window.update
  590.     @help_window.update
  591.     @scrhelp_window.update
  592.   end
  593.   #--------------------------------------------------------------------------
  594.   # ● 生成指令窗口
  595.   #--------------------------------------------------------------------------
  596.   def create_command_window
  597.     s1 = "修理"
  598.     s2 = "退出"
  599.     @command_window = Window_Command.new(256, [s1, s2], 4, 0, 8)
  600.     @command_window.x = 128
  601.     @command_window.active = false
  602.     @command_window.contents_opacity = 128
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ● 释放指令窗口
  606.   #--------------------------------------------------------------------------
  607.   def dispose_command_window
  608.     @command_window.dispose
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ● 是否满足修复装备条件?
  612.   #--------------------------------------------------------------------------
  613.   def repairable?(equips)
  614.     return false if equips.empty?
  615.     price = 0
  616.     equips.each{|e| price += e.price*Game_Equip::Dur_Price*e.dur/e.maxdur}
  617.     return false if $game_party.gold < evaluate_price
  618.     ## 扣钱
  619.     $game_party.lose_gold(evaluate_price)
  620.     ## 修复
  621.     equips.each{|e| @hyper_repair ? e.hyper_repair : e.repair}
  622.     return true
  623.   end
  624.   #--------------------------------------------------------------------------
  625.   # ● 显示结果(包括处理金钱物品)
  626.   #--------------------------------------------------------------------------
  627.   def show_result
  628.     @result_window.active = true
  629.     @result_window.visible = true
  630.     if @dest_window.equips.empty?
  631.       @result_window.contents.clear
  632.       @result_window.contents.draw_text(0,0,352,24,"请放入装备!", 1)
  633.       return
  634.     end
  635.     if repairable?(@dest_window.equips)
  636.       @result_window.contents.clear
  637.       @result_window.contents.draw_text(0,0,352,24,"指定装备已被修复!", 1)
  638.       @dest_window.revert
  639.       Sound.play_shop
  640.       @gold_window.refresh
  641.       @gold_need_window.set_text(0)
  642.     else
  643.       @result_window.contents.clear
  644.       @result_window.contents.draw_text(0,0,352,24,"金钱不足,无法修复!", 1)
  645.       @dest_window.revert
  646.       Sound.play_actor_collapse
  647.       @gold_window.refresh
  648.       @gold_need_window.set_text(0)
  649.     end
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ● 更新帮助文本
  653.   #--------------------------------------------------------------------------
  654.   def update_help(text)
  655.     @help_window.set_text2(text)
  656.   end  
  657.   #--------------------------------------------------------------------------
  658.   # ● 更新指令窗口
  659.   #--------------------------------------------------------------------------
  660.   def update_command_selection
  661.     case @command_window.index
  662.     when 0
  663.       update_help("确定键开始修复装备")
  664.     when 1
  665.       update_help("退出修复界面")
  666.     end
  667.     if Input.trigger?(Input::B)
  668.       ## 重来
  669.       Sound.play_cancel
  670.       @scr_window.active = true
  671.       @command_window.active = false
  672.     elsif Input.trigger?(Input::C)
  673.       case @command_window.index
  674.       when 0  # 修复
  675.         Sound.play_decision
  676.         @command_window.active = false
  677.         @scr_window.active = false
  678.         ######### 显示修复结果,归还物品
  679.         show_result
  680.       when 1  # 退出
  681.         Sound.play_decision
  682.         @dest_window.revert
  683.         $scene = Scene_Map.new
  684.       end
  685.     end
  686.   end
  687.   #--------------------------------------------------------------------------
  688.   # ● 更新选择物品
  689.   #--------------------------------------------------------------------------
  690.   def update_item_selection
  691.     if Input.trigger?(Input::R)
  692.       Sound.play_decision
  693.       @command_window.active = true
  694.       @scr_window.active = false
  695.       return
  696.     end
  697.     if Input.trigger?(Input::B) or Input.trigger?(Input::L)
  698.       Sound.play_cancel
  699.       if @dest_window.equips == []
  700.         @dest_window.revert
  701.         $scene = Scene_Map.new
  702.         return
  703.       end  
  704.       @dest_window.revert
  705.       @scr_window.refresh
  706.       @scr_window.active = true
  707.       @help_window.contents.clear
  708.       @help_window.contents.draw_text(0,0,352,24,"请选择需要修复的装备,按W确定。", 0)
  709.     end  
  710.     if Input.trigger?(Input::C)
  711.       @item = @scr_window.item
  712.       number = $game_party.item_number(@item)
  713.       if @item == nil or number == 0
  714.         Sound.play_buzzer
  715.       else
  716.         Sound.play_shop
  717.         @dest_window.add(@scr_window.item)
  718.         @scr_window.refresh
  719.         @gold_need_window.set_text(evaluate_price)
  720.       end
  721.     end
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ● 修理估价
  725.   #--------------------------------------------------------------------------
  726.   def evaluate_price
  727.     price = 0
  728.     @dest_window.equips.each{|e| price += e.price*Game_Equip::Dur_Price*e.dur/e.maxdur }
  729.     price = price.round  
  730.     return (@hyper_repair == true ? (5 * price) : (1 * price))
  731.   end  
  732.   #--------------------------------------------------------------------------
  733.   # ● 更新结果窗体
  734.   #--------------------------------------------------------------------------
  735.   def update_result_window
  736.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  737.       Sound.play_decision
  738.       @scr_window.refresh
  739.       @scr_window.active = true
  740.       @result_window.active = false
  741.       @result_window.visible = false
  742.     end
  743.   end
  744. end
这个脚本有两个需要君解决的问题:
01 怎么让耐久度为零后耐久度不再下降( 原来:居然还有负的)
02 耐久度剩得越少怎么让修复的钱越多( 原来:耐久度剩的越少花钱居然越少,(负数)时居然倒贴钱)
谁能帮忙解决以上问题   感激不尽   

评分

参与人数 1星屑 -20 收起 理由
丿梁丶小柒 -20 你用的标题不对啊!!

查看全部评分

Lv1.梦旅人

梦石
0
星屑
214
在线时间
66 小时
注册时间
2014-1-23
帖子
53
2
 楼主| 发表于 2014-2-28 18:37:03 | 只看该作者

脚本高手帮帮忙。

  1. #==============================================================================
  2. # 装备耐久度 by 沉影不器
  3. # protosssonny修改版
  4. #------------------------------------------------------------------------------
  5. # ① 自定义各个装备耐久度上限
  6. # ② 允许显示"无法破坏"的装备,允许忽略耐久度的装备(如:戒指等装饰类)
  7. # ③ 物理攻击消耗武器耐久度,被打消耗防具耐久度
  8. #    攻击越高,对方防具减耐久度的机率越大,防御越高,对方武器减耐久度的机率越大
  9. # ④ 装备耐久度降为 0 时装备即损坏,该装备能力消失,提供修复耐久度的功能
  10. # ⑤ 修复装备时耐久度上限也会下降,提供同时修复耐久度和上限的功能
  11. # ⑥ 装备卖出价格随耐久度打折
  12. #==============================================================================
  13. module Game_Equip
  14.   ## 耐久度上限(指所有装备耐久度上限不可超过的值)
  15.   MaxDur = 999
  16.   # 忽略耐久度的防具类型(0:盾 1:头盔 2:衣服 3:装饰 4:武器)
  17.   #   非忽略耐久度 且未定义耐久度,则被认为"无法破坏"
  18.   NoDur = [3]
  19.   # 降低耐久度的基本机率最小值和最大值(大于0小于1)
  20.   Dur_BaseDec = [0.25, 0.75]
  21.   # 修复装备时耐久度上限减少量
  22.   MaxDur_Dec = 1
  23.   # 装备耐久度剩余多少比值(0到1)时提示
  24.   Show_If_Lower = 0.5
  25.   # 损坏时装备显示颜色
  26.   BrokenColor = Color.new(255,0,0)
  27.   # 耐久度占总价格比值(0到1)
  28.   Dur_Price = 0.7
  29. end

  30. module RPG
  31.   class BaseItem
  32.     #------------------------------------------------------------------------
  33.     # 是否被破坏
  34.     #------------------------------------------------------------------------
  35.     def broken?
  36.       return false
  37.     end
  38.   end
  39. end

  40. module RPG
  41.   class Weapon < BaseItem
  42.     include Game_Equip
  43.     #------------------------------------------------------------------------
  44.     # 附加属性
  45.     #------------------------------------------------------------------------
  46.     attr_accessor :base_id
  47.     attr_reader   :maxdur
  48.     attr_reader   :dur
  49.     attr_reader   :indesctructible
  50.     #------------------------------------------------------------------------
  51.     # 是否无耐久度
  52.     #------------------------------------------------------------------------
  53.     def nodur
  54.       return NoDur.include? 4
  55.     end
  56.     #------------------------------------------------------------------------
  57.     # 是否被破坏
  58.     #------------------------------------------------------------------------
  59.     def broken?
  60.       return false if dur.nil?
  61.       return true if dur.zero?
  62.     end
  63.     #------------------------------------------------------------------------
  64.     # 是否需修复
  65.     #------------------------------------------------------------------------
  66.     def need_repair?(hyper)
  67.       return false if dur.nil?
  68.       return false if hyper.nil?
  69.       max = hyper ? read_note('耐久度').to_i : maxdur
  70.       return true if max > dur
  71.       return false
  72.     end
  73.     #------------------------------------------------------------------------
  74.     # 耐久度初始化
  75.     #------------------------------------------------------------------------
  76.     def inidur
  77.       d = read_note('耐久度').to_i
  78.       if d.zero?
  79.         @indesctructible = true
  80.       else
  81.         @indesctructible = false
  82.         @maxdur = @dur = [d, MaxDur].min
  83.       end
  84.     end
  85.     #------------------------------------------------------------------------
  86.     # 耐久度损耗
  87.     #------------------------------------------------------------------------
  88.     def decdur(n = 1)
  89.       return if @dur.nil?
  90.       n = [n, maxdur].min
  91.       @dur -= n unless nodur or indesctructible or dur < n
  92.       @dur -= 1
  93.     end
  94.     #------------------------------------------------------------------------
  95.     # 耐久度修复
  96.     #------------------------------------------------------------------------
  97.     def repair
  98.       return false if dur.nil?
  99.       if dur < maxdur and maxdur > 0
  100.         @maxdur -= MaxDur_Dec if @maxdur - @dur > MaxDur_Dec
  101.         @dur = @maxdur
  102.         return true
  103.       else
  104.         return false
  105.       end
  106.     end
  107.     #------------------------------------------------------------------------
  108.     # 耐久度全修复
  109.     #------------------------------------------------------------------------
  110.     def hyper_repair
  111.       return false if dur.nil?
  112.       max = read_note('耐久度').to_i
  113.       if dur < max and max > 0
  114.         @dur = @maxdur = max
  115.         return true
  116.       else
  117.         return false
  118.       end
  119.     end
  120.     #------------------------------------------------------------------------
  121.     # 攻击力
  122.     #------------------------------------------------------------------------
  123.     def atk
  124.       return [url=home.php?mod=space&uid=101599]@atk[/url] if dur.nil?
  125.       return dur > 0 ? @atk : 0  
  126.     end
  127.     #------------------------------------------------------------------------
  128.     # 防御力
  129.     #------------------------------------------------------------------------
  130.     def def
  131.       return @def if dur.nil?
  132.       return dur > 0 ? @def : 0  
  133.     end
  134.     #------------------------------------------------------------------------
  135.     # 魔力
  136.     #------------------------------------------------------------------------
  137.     def spi
  138.       return [url=home.php?mod=space&uid=87501]@SPI[/url] if dur.nil?
  139.       return dur > 0 ? @spi : 0  
  140.     end
  141.     #------------------------------------------------------------------------
  142.     # 敏捷
  143.     #------------------------------------------------------------------------
  144.     def agi
  145.       return [url=home.php?mod=space&uid=6136]@agi[/url] if dur.nil?
  146.       return dur > 0 ? @agi : 0  
  147.     end
  148.   end
  149. end

  150. module RPG
  151.   class Armor < BaseItem
  152.     include Game_Equip
  153.     #------------------------------------------------------------------------
  154.     # 附加属性
  155.     #------------------------------------------------------------------------
  156.     attr_accessor :base_id
  157.     attr_reader   :maxdur
  158.     attr_reader   :dur
  159.     attr_reader   :indesctructible
  160.     #------------------------------------------------------------------------
  161.     # 是否无耐久度
  162.     #------------------------------------------------------------------------
  163.     def nodur
  164.       return NoDur.include? kind
  165.     end
  166.     #------------------------------------------------------------------------
  167.     # 是否被破坏
  168.     #------------------------------------------------------------------------
  169.     def broken?
  170.       return false if dur.nil?
  171.       return true if dur.zero?
  172.     end
  173.     #------------------------------------------------------------------------
  174.     # 是否需修复
  175.     #------------------------------------------------------------------------
  176.     def need_repair?(hyper)
  177.       return false if dur.nil?
  178.       return false if hyper.nil?
  179.       max = hyper ? read_note('耐久度').to_i : maxdur
  180.       return true if max > dur
  181.       return false
  182.     end
  183.     #------------------------------------------------------------------------
  184.     # 耐久度初始化
  185.     #------------------------------------------------------------------------
  186.     def inidur
  187.       d = read_note('耐久度').to_i
  188.       if d.zero?
  189.         @indesctructible = true
  190.       else
  191.         @indesctructible = false
  192.         @maxdur = @dur = [d, MaxDur].min
  193.       end
  194.     end
  195.     #------------------------------------------------------------------------
  196.     # 耐久度损耗
  197.     #------------------------------------------------------------------------
  198.     def decdur(n = 1)
  199.       return if @dur.nil?
  200.       n = [n, maxdur].min
  201.       n = 0 if PA::USE_DUR == false       #不使用耐久度时,耐久度不减少
  202.       @dur -= n unless nodur or indesctructible or dur < n
  203.     end
  204.     #------------------------------------------------------------------------
  205.     # 耐久度修复
  206.     #------------------------------------------------------------------------
  207.     def repair
  208.       return false if dur.nil?
  209.       if dur < maxdur and maxdur > 0
  210.         @maxdur -= MaxDur_Dec if @maxdur - @dur > MaxDur_Dec
  211.         @dur = @maxdur
  212.         return true
  213.       else
  214.         return false
  215.       end
  216.     end
  217.     #------------------------------------------------------------------------
  218.     # 耐久度全修复
  219.     #------------------------------------------------------------------------
  220.     def hyper_repair
  221.       return false if dur.nil?
  222.       max = read_note('耐久度').to_i
  223.       if dur < max and max > 0
  224.         @dur = @maxdur = max
  225.         return true
  226.       else
  227.         return false
  228.       end
  229.     end
  230.     #------------------------------------------------------------------------
  231.     # 攻击力
  232.     #------------------------------------------------------------------------
  233.     def atk
  234.       return @atk if dur.nil?
  235.       return dur > 0 ? @atk : 0  
  236.     end
  237.     #------------------------------------------------------------------------
  238.     # 防御力
  239.     #------------------------------------------------------------------------
  240.     def def
  241.       return @def if dur.nil?
  242.       return dur > 0 ? @def : 0  
  243.     end
  244.     #------------------------------------------------------------------------
  245.     # 魔力
  246.     #------------------------------------------------------------------------
  247.     def spi
  248.       return @spi if dur.nil?
  249.       return dur > 0 ? @spi : 0  
  250.     end
  251.     #------------------------------------------------------------------------
  252.     # 敏捷
  253.     #------------------------------------------------------------------------
  254.     def agi
  255.       return @agi if dur.nil?
  256.       return dur > 0 ? @agi : 0  
  257.     end
  258.     #------------------------------------------------------------------------
  259.     # 闪避率
  260.     #------------------------------------------------------------------------
  261.     def eva
  262.       return [url=home.php?mod=space&uid=284635]@eva[/url] if dur.nil?
  263.       return dur > 0 ? @eva : 0  
  264.     end
  265.   end
  266. end

  267. #==============================================================================
  268. # ■ Game_Battler
  269. #==============================================================================
  270. class Game_Battler
  271.   #--------------------------------------------------------------------------
  272.   # ● 判断是否防御
  273.   #--------------------------------------------------------------------------
  274.   def guarding?
  275.     return @action.guard?
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 反映伤害
  279.   #     user : 特技以及物品的使用者
  280.   #    调用前先设置 @hp_damage、@mp_damage、@absorbed。
  281.   #--------------------------------------------------------------------------
  282.   def execute_damage(user)
  283.     if @hp_damage > 0           # 伤害为正数
  284.       remove_states_shock       # 受到攻击解除的状态
  285.     end
  286.     self.hp -= @hp_damage
  287.     self.mp -= @mp_damage
  288.     if @absorbed                # 吸收的情况
  289.       user.hp += @hp_damage
  290.       user.mp += @mp_damage
  291.     end
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 应用普通攻击效果
  295.   #     attacker : 攻击者
  296.   #--------------------------------------------------------------------------
  297.   def attack_effect(attacker)
  298.     clear_action_results
  299.     unless attack_effective?(attacker)
  300.       @skipped = true
  301.       return
  302.     end
  303.     if rand(100) >= calc_hit(attacker)            # 判断命中
  304.       @missed = true
  305.       return
  306.     end
  307.     if rand(100) < calc_eva(attacker)             # 判断回避
  308.       @evaded = true
  309.       return
  310.     end
  311.     make_attack_damage_value(attacker)            # 计算伤害
  312.     execute_damage(attacker)                      # 反映伤害
  313.     if @hp_damage == 0                            # 判断物理攻击无效
  314.       return                                    
  315.     end
  316.     ## 处理耐久度
  317.     set_dur(attacker, self)
  318.     apply_state_changes(attacker)                 # 状态变化
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● 应用特技效果
  322.   #     user  : 特技使用者
  323.   #     skill : 特技
  324.   #--------------------------------------------------------------------------
  325.   def skill_effect(user, skill)
  326.     clear_action_results
  327.     unless skill_effective?(user, skill)
  328.       @skipped = true
  329.       return
  330.     end
  331.     if rand(100) >= calc_hit(user, skill)         # 判断命中
  332.       @missed = true
  333.       return
  334.     end
  335.     if rand(100) < calc_eva(user, skill)          # 判断回避
  336.       @evaded = true
  337.       return
  338.     end
  339.     make_obj_damage_value(user, skill)            # 计算伤害
  340.     make_obj_absorb_effect(user, skill)           # 计算吸收效果
  341.     execute_damage(user)                          # 反映伤害
  342.     if skill.physical_attack and @hp_damage == 0  # 判断物理攻击无效
  343.       return                                    
  344.     end
  345.     ## 处理耐久度
  346.     set_dur(user, self, skill)
  347.     apply_state_changes(skill)                    # 状态变化
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 应用物品效果
  351.   #     user : 物品使用者
  352.   #     item : 物品
  353.   #--------------------------------------------------------------------------
  354.   def item_effect(user, item)
  355.     clear_action_results
  356.     unless item_effective?(user, item)
  357.       @skipped = true
  358.       return
  359.     end
  360.     if rand(100) >= calc_hit(user, item)          # 判断命中
  361.       @missed = true
  362.       return
  363.     end
  364.     if rand(100) < calc_eva(user, item)           # 判断回避
  365.       @evaded = true
  366.       return
  367.     end
  368.     hp_recovery = calc_hp_recovery(user, item)    # 计算 HP 回复量
  369.     mp_recovery = calc_mp_recovery(user, item)    # 计算 MP 回复量
  370.     make_obj_damage_value(user, item)             # 计算伤害
  371.     @hp_damage -= hp_recovery                     # 减去 HP 回复量
  372.     @mp_damage -= mp_recovery                     # 减去 MP 回复量
  373.     make_obj_absorb_effect(user, item)            # 计算吸收效果
  374.     execute_damage(user)                          # 反映伤害
  375.     item_growth_effect(user, item)                # 应用成长效果
  376.     if item.physical_attack and @hp_damage == 0   # 判断物理攻击无效
  377.       return                                    
  378.     end
  379.     ## 处理耐久度
  380.     set_dur(user, self, item)
  381.     apply_state_changes(item)                     # 状态变化
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ● 处理耐久度
  385.   #--------------------------------------------------------------------------
  386.   def set_dur(attacker, defender, obj = nil)
  387.     ## 补血时返回
  388.     return if @hp_damage < 0
  389.     atk_f = obj.nil? ? 1.0 : obj.atk_f / 100.0
  390.     w = defender.def / 999.0 * atk_f
  391.     a = attacker.atk / 999.0 * atk_f
  392.     w = [[w, Game_Equip::Dur_BaseDec[0]].max, Game_Equip::Dur_BaseDec[1]].min
  393.     a = [[a, Game_Equip::Dur_BaseDec[0]].max, Game_Equip::Dur_BaseDec[1]].min
  394.     if attacker.actor? and 0.8 > rand
  395.       weapons = attacker.weapons.compact
  396.       return if weapons.empty?
  397.       weapons[rand weapons.size].decdur
  398.     end
  399.     if defender.actor? and 0.8 > rand
  400.       armors = defender.armors.compact
  401.       return if armors.empty?
  402.       armors[rand armors.size].decdur
  403.     end
  404.   end
  405. end

  406. #==============================================================================
  407. # ■ Window_ScrRepair
  408. #==============================================================================
  409. class Window_ScrRepair < Window_Item
  410.   #--------------------------------------------------------------------------
  411.   # ● 初始化对象
  412.   #     x      : 窗口的 X 坐标
  413.   #     y      : 窗口的 Y 坐标
  414.   #     width  : 窗口的宽
  415.   #     height : 窗口的高
  416.   #--------------------------------------------------------------------------
  417.   def initialize(x, y, width, height, hyper_repair)
  418.     super(x, y, width, height)
  419.     @column_max = 1
  420.     self.index = 0
  421.     @hyper_repair = hyper_repair
  422.     refresh
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ● 列表中包含的物品
  426.   #     item : 物品
  427.   #--------------------------------------------------------------------------
  428.   def include?(item)
  429.     return true if item == nil
  430.     return false if item.is_a? RPG::Armor and item.base_id == PA::CRYSTAL
  431.     return true if item.is_a? RPG::Weapon and item.need_repair?(@hyper_repair)
  432.     return true if item.is_a? RPG::Armor and item.need_repair?(@hyper_repair)
  433.     return false
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● 是否可以使用物品
  437.   #     item : 物品
  438.   #--------------------------------------------------------------------------
  439.   def enable?(item)
  440.     return true
  441.   end
  442. end

  443. #==============================================================================
  444. # ■ Window_DestRepair #equip add clear items
  445. #==============================================================================
  446. class Window_DestRepair < Window_Base
  447.   #--------------------------------------------------------------------------
  448.   # ● 定义实例变量
  449.   #--------------------------------------------------------------------------
  450.   attr_reader   :equips
  451.   #--------------------------------------------------------------------------
  452.   # ● 初始化对象
  453.   #     x      : 窗口的 X 坐标
  454.   #     y      : 窗口的 Y 坐标
  455.   #     width  : 窗口的宽
  456.   #     height : 窗口的高
  457.   #--------------------------------------------------------------------------
  458.   def initialize(x, y, width, height)
  459.     super(x, y, width, height)
  460.     clear
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● 添加物品
  464.   #--------------------------------------------------------------------------
  465.   def add(item)
  466.     return if item.nil?
  467.     $game_party.lose_item(item, 1)
  468.     @equips << item
  469.     [url=home.php?mod=space&uid=370741]@Index[/url] += 1
  470.     draw_item(item)
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● 清除物品
  474.   #--------------------------------------------------------------------------
  475.   def clear
  476.     @equips = []
  477.     @index = 0
  478.     self.contents.clear
  479.     self.contents.font.color = system_color
  480.     self.contents.draw_text(0,0,self.contents.width-16,WLH,"请放入需修复的装备:")
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 归还物品
  484.   #--------------------------------------------------------------------------
  485.   def revert
  486.     $game_party.gain_item(@equip, 1)
  487.     @equips.each{|i| $game_party.gain_item(i, 1)}
  488.     clear
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ● 描绘项目
  492.   #--------------------------------------------------------------------------
  493.   def draw_item(item)
  494.     rect = Rect.new(4,WLH*@index,self.contents.width-8, WLH)
  495.     if item != nil
  496.       draw_item_name(item, rect.x, rect.y)
  497.       self.contents.draw_text(rect, sprintf(":%2d", 1), 2)
  498.     end
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # ● 更新帮助文本
  502.   #--------------------------------------------------------------------------
  503.   def update_help
  504.     @help_window.set_text(item == nil ? "" : item.description)
  505.   end
  506. end

  507. #==============================================================================
  508. # ■ Scene_Repair
  509. #==============================================================================
  510. class Scene_Repair < Scene_Base
  511.   include Game_Equip
  512.   #--------------------------------------------------------------------------
  513.   # ● 初始化对象
  514.   #     menu_index : 指令光标初期位置
  515.   #--------------------------------------------------------------------------
  516.   def initialize(hyper_repair = false)
  517.     @hyper_repair = hyper_repair
  518.   end
  519.   #--------------------------------------------------------------------------
  520.   # ● 开始处理
  521.   #--------------------------------------------------------------------------
  522.   def start
  523.     super
  524.     create_menu_background
  525.     create_command_window
  526.     @name_window = Window_Base.new(0,0,128,56)
  527.     if @hyper_repair == true
  528.       @name_window.contents.draw_text(4,0,544,24,"特殊修理",0)
  529.     else
  530.       @name_window.contents.draw_text(4,0,544,24,"普通修理",0)
  531.     end  
  532.     @help_window = Window_Process_Help.new
  533.     @help_window.contents.draw_text(0,0,352,24,"请选择需要修复的装备,按W确定。", 0)
  534.     @help_window.visible = true
  535.     @scrhelp_window = Window_Help.new
  536.     @gold_window = Window_Gold.new(384, 0)
  537.     @gold_need_window = Window_Gold_Need.new
  538.     @gold_need_window.set_text(0)
  539.     @scr_window = Window_ScrRepair.new(0,112,272,304,@hyper_repair)
  540.     @scr_window.active = true
  541.     @scr_window.help_window = @scrhelp_window
  542.     @dest_window = Window_DestRepair.new(272,112,272,304-56)
  543.     @result_window = Window_Base.new(80,56,384,80)
  544.     @result_window.active = false
  545.     @result_window.visible = false
  546.   end
  547.   #--------------------------------------------------------------------------
  548.   # ● 结束处理
  549.   #--------------------------------------------------------------------------
  550.   def terminate
  551.     super
  552.     dispose_menu_background
  553.     dispose_command_window
  554.     @name_window.dispose
  555.     @gold_need_window.dispose
  556.     @help_window.dispose
  557.     @scrhelp_window.dispose
  558.     @gold_window.dispose
  559.     @scr_window.dispose
  560.     @dest_window.dispose
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ● 更新画面
  564.   #--------------------------------------------------------------------------
  565.   def update
  566.     super
  567.     update_menu_background
  568.     if @command_window.active
  569.       @scr_window.contents_opacity = 128
  570.       @command_window.contents_opacity = 255
  571.       update_command_selection
  572.     elsif @scr_window.active
  573.       @scr_window.contents_opacity = 255
  574.       @command_window.contents_opacity = 128
  575.       update_item_selection
  576.     elsif @result_window.active
  577.       update_result_window
  578.     end
  579.     @command_window.update
  580.     @gold_window.update
  581.     @scr_window.update
  582.     @dest_window.update
  583.     @help_window.update
  584.     @scrhelp_window.update
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● 生成指令窗口
  588.   #--------------------------------------------------------------------------
  589.   def create_command_window
  590.     s1 = "修理"
  591.     s2 = "退出"
  592.     @command_window = Window_Command.new(256, [s1, s2], 4, 0, 8)
  593.     @command_window.x = 128
  594.     @command_window.active = false
  595.     @command_window.contents_opacity = 128
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● 释放指令窗口
  599.   #--------------------------------------------------------------------------
  600.   def dispose_command_window
  601.     @command_window.dispose
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● 是否满足修复装备条件?
  605.   #--------------------------------------------------------------------------
  606.   def repairable?(equips)
  607.     return false if equips.empty?
  608.     price = 0
  609.     equips.each{|e| price += e.price*Game_Equip::Dur_Price*e.dur/e.maxdur}
  610.     return false if $game_party.gold < evaluate_price
  611.     ## 扣钱
  612.     $game_party.lose_gold(evaluate_price)
  613.     ## 修复
  614.     equips.each{|e| @hyper_repair ? e.hyper_repair : e.repair}
  615.     return true
  616.   end
  617.   #--------------------------------------------------------------------------
  618.   # ● 显示结果(包括处理金钱物品)
  619.   #--------------------------------------------------------------------------
  620.   def show_result
  621.     @result_window.active = true
  622.     @result_window.visible = true
  623.     if @dest_window.equips.empty?
  624.       @result_window.contents.clear
  625.       @result_window.contents.draw_text(0,0,352,24,"请放入装备!", 1)
  626.       return
  627.     end
  628.     if repairable?(@dest_window.equips)
  629.       @result_window.contents.clear
  630.       @result_window.contents.draw_text(0,0,352,24,"指定装备已被修复!", 1)
  631.       @dest_window.revert
  632.       Sound.play_shop
  633.       @gold_window.refresh
  634.       @gold_need_window.set_text(0)
  635.     else
  636.       @result_window.contents.clear
  637.       @result_window.contents.draw_text(0,0,352,24,"金钱不足,无法修复!", 1)
  638.       @dest_window.revert
  639.       Sound.play_actor_collapse
  640.       @gold_window.refresh
  641.       @gold_need_window.set_text(0)
  642.     end
  643.   end
  644.   #--------------------------------------------------------------------------
  645.   # ● 更新帮助文本
  646.   #--------------------------------------------------------------------------
  647.   def update_help(text)
  648.     @help_window.set_text2(text)
  649.   end  
  650.   #--------------------------------------------------------------------------
  651.   # ● 更新指令窗口
  652.   #--------------------------------------------------------------------------
  653.   def update_command_selection
  654.     case @command_window.index
  655.     when 0
  656.       update_help("确定键开始修复装备")
  657.     when 1
  658.       update_help("退出修复界面")
  659.     end
  660.     if Input.trigger?(Input::B)
  661.       ## 重来
  662.       Sound.play_cancel
  663.       @scr_window.active = true
  664.       @command_window.active = false
  665.     elsif Input.trigger?(Input::C)
  666.       case @command_window.index
  667.       when 0  # 修复
  668.         Sound.play_decision
  669.         @command_window.active = false
  670.         @scr_window.active = false
  671.         ######### 显示修复结果,归还物品
  672.         show_result
  673.       when 1  # 退出
  674.         Sound.play_decision
  675.         @dest_window.revert
  676.         $scene = Scene_Map.new
  677.       end
  678.     end
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ● 更新选择物品
  682.   #--------------------------------------------------------------------------
  683.   def update_item_selection
  684.     if Input.trigger?(Input::R)
  685.       Sound.play_decision
  686.       @command_window.active = true
  687.       @scr_window.active = false
  688.       return
  689.     end
  690.     if Input.trigger?(Input::B) or Input.trigger?(Input::L)
  691.       Sound.play_cancel
  692.       if @dest_window.equips == []
  693.         @dest_window.revert
  694.         $scene = Scene_Map.new
  695.         return
  696.       end  
  697.       @dest_window.revert
  698.       @scr_window.refresh
  699.       @scr_window.active = true
  700.       @help_window.contents.clear
  701.       @help_window.contents.draw_text(0,0,352,24,"请选择需要修复的装备,按W确定。", 0)
  702.     end  
  703.     if Input.trigger?(Input::C)
  704.       @item = @scr_window.item
  705.       number = $game_party.item_number(@item)
  706.       if @item == nil or number == 0
  707.         Sound.play_buzzer
  708.       else
  709.         Sound.play_shop
  710.         @dest_window.add(@scr_window.item)
  711.         @scr_window.refresh
  712.         @gold_need_window.set_text(evaluate_price)
  713.       end
  714.     end
  715.   end
  716.   #--------------------------------------------------------------------------
  717.   # ● 修理估价
  718.   #--------------------------------------------------------------------------
  719.   def evaluate_price
  720.     price = 0
  721.     @dest_window.equips.each{|e| price += e.price*Game_Equip::Dur_Price*e.dur/e.maxdur }
  722.     price = price.round  
  723.     return (@hyper_repair == true ? (5 * price) : (1 * price))
  724.   end  
  725.   #--------------------------------------------------------------------------
  726.   # ● 更新结果窗体
  727.   #--------------------------------------------------------------------------
  728.   def update_result_window
  729.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  730.       Sound.play_decision
  731.       @scr_window.refresh
  732.       @scr_window.active = true
  733.       @result_window.active = false
  734.       @result_window.visible = false
  735.     end
  736.   end
  737. end
复制代码
这个脚本有两个需要高手解决的问题:
01 怎么让耐久度为零后耐久度不再下降( 原来:居然还有负的)
02 耐久度剩得越少怎么让修复的钱越多( 原来:耐久度剩的越少花钱居然越少,(负数)时居然倒贴钱)
谁能帮忙解决以上问题   感激不尽  

评分

参与人数 1星屑 -30 收起 理由
铃仙·优昙华院·因幡 -30 意义不明的标题

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 12:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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