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

Project1

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

[已经过期] 有没有敌人有几率打爆角色装备的脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
18 小时
注册时间
2012-12-8
帖子
25
跳转到指定楼层
1
发表于 2016-5-17 20:53:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
有没有敌人有几率打爆角色装备的脚本

Lv4.逐梦者 (版主)

漾夕☽星化残月☾

梦石
0
星屑
8596
在线时间
3857 小时
注册时间
2015-5-12
帖子
2077

剧作品鉴家

2
发表于 2016-5-17 21:28:43 | 只看该作者
敌人设置→物品掉落

点评

2233嗯,言之有理。话说在下也以为是【怪物的装备】了  发表于 2016-5-18 19:10
说不定还是打着打着 定义角色装备的 脚本 被打爆了呢  发表于 2016-5-18 13:51
【角色装备的脚本】。  发表于 2016-5-18 13:37
仔细看题可好 打爆主角装备? 你的是掉落率  发表于 2016-5-18 07:47
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

3
发表于 2016-5-18 00:43:22 | 只看该作者
其实你可以搜索一下,虽然不知道能不能解决,https://rpg.blue/thread-384204-1-1.html
请自备科学上网姿势。

点评

阁下发的这个的确是 可是我用不了! 谢谢阁下回答  发表于 2016-5-19 08:21
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2724
在线时间
227 小时
注册时间
2016-3-27
帖子
576
4
发表于 2016-5-18 18:34:52 | 只看该作者
打爆??暂时性破甲??
我觉得有几率打爆这种东西不太靠谱。你说玩家本来千辛万苦打来一件装备, 然后凑巧撞上那个概率了,那不就没心情玩了?
lz可以设置成耐久度然后每受到一次攻击减少多少多少,然后有一些技能是可以破甲的直接扣完耐久度。这样可能比较靠谱??

点评

http://blueredzone.com/script/vxace/vxace_equipmentdurability.html  发表于 2016-5-18 19:38
↓你看了楼上给的链接了吗?  发表于 2016-5-18 19:37
请问阁下有没有耐久度脚本!  发表于 2016-5-18 18:44
现在还能改名吗qwq
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2724
在线时间
227 小时
注册时间
2016-3-27
帖子
576
5
发表于 2016-5-20 18:05:18 | 只看该作者
本帖最后由 WantMy蕙 于 2016-5-20 18:07 编辑

如果可以在脚本上囫囵,就可以使用.
用装备修理画面,可以进行装备的修理.
把装备修理画面用地图画面从活动的脚本实行以下的公式.
call _ repair _ equipment ED .
在默认的情况下,在修理中消耗金钱,但是通过参数的一整数,可以通过对其ID的变量值进行修理.
以变量为消费修理装备
ED . call _ repair _ equipment(1)
同时,耐久度变化的武器,防具的得到的从各自的活动的脚本开始实行以下的公式.
ED . gain _ durability _ weapon(id,durability,amount)
ED . gain _ durability _ armor(id,durability,amount)
上述方法的引数是装备的ID,设定耐久度,得到的件数为引数.
详细设定可以进行装备耐久度的设定.
ENABLE _ DURABILITY
装备的耐久度是否有效的默认的设定
以下的设定设定为寻求耐久度的条款的性能的式.
eval评价为造型通常式可以画。
这个时候,可以参照对象的装备的参数.
各种评价式中使用的特殊的变量
变量说明
dur道具的现在的耐久度
mdur道具的最大耐久度
price原创的物品的价格
atk原创的道具的攻击力上升值
_ def原创的道具的防御力上升价值
mat原创的道具的魔法力增加值
mdf原创的条款的魔法防御力增加值
agi原创的道具的敏捷性增加值
luk原创的道具的运上升值
mhp原创的道具的最大HP的上升价值
mmp原创的道具的最大MP增加值
etype _ id道具装备型ID
一个是一个
REPAIR _ PRICE
装备修理费用(钱的时候)。
REPAIR _ POINT
装备修理费用的费用的(变数的时候)。
PRICE
装备的价格的公式
SUC
加强成功率
攻击
攻击力上升值的公式
防御
防御力上升值的公式
MAT
魔法力上升值的公式
中密度
魔法防御力上升值的公式
AGI
敏捷性上升值的公式
LUK
上升值的公式
MHP
最大HP上升公式
MMP
最大MP的公式
_ DURABILITY DEFAULT
耐久度的初期值
MAX _ DURABILITY
最大耐久度
REPAIR _ DURABILITY
修理后的耐久度
DESTROY
true的时候耐久度为0,装备被废弃
PENALTY
在修理中设置失败时的惩罚.
惩罚是由以下种类选择的.
: none
点球
: break
装备的破坏
自然,自然
耐久度(自然数)。
DISPLAY _ SUCCESS
在装备强化画面强化成功率
DISPLAY _ PENALTY
用装备强化画面来表示惩罚
POINT _ UNIT
在消费变数的时候的货币单位?是的.
键: default模板单位的指定。
以自然数为键设定单位,利用那个ID的变量的时候那个单位被表示.
BROKEN _ MESSAGE
true的时候战斗中装备坏了的意思
MESSAGE _ FMT
装备破坏时显示的信息.
演员的名字,装备名被置换。
DEGRADE _ EXPS
在以后的伤害活动利用耐久度变动的场合使用耐久度减少式.
任意的键将式设定为文字列,指定装备耐久度活动内设定的键.
这个时候,对象的装备的参数及各种伤害活动可以参照可能的信息.
耐久度在减少式中使用的特殊的变量
变量说明
dur道具的现在的耐久度
mdur道具的最大耐久度
price原创的物品的价格
atk原创的道具的攻击力上升值
_ def原创的道具的防御力上升价值
mat原创的道具的魔法力增加值
mdf原创的条款的魔法防御力增加值
agi原创的道具的敏捷性增加值
luk原创的道具的运上升值
mhp原创的道具的最大HP的上升价值
mmp原创的道具的最大MP增加值
etype _ id道具装备型ID
一个是一个
伤害事件的各种变量subject,target等类型的
DRAW _ GAUGE
true的时候装备图标描画耐久度规
GAUGE _ MAX _ DURABILITY
这是最大耐久度的耐久度.
装备的最大耐久度小,耐久度120%的装备
会表现什么. .
GAUGE _ EDGECOLOR
槽的缘分的颜色(不)在nil绘图
GAUGE _ BACKCOLOR
规的背景色(不)在nil绘图
GAUGE _ COLOR
规的颜色
GAUGE _ MAXCOLOR
最大时的颜色
GAUGE _ OVERCOLOR
规界限突破时的颜色
BROKENCOLOR
耐久度0时的装备名称的文字颜色(nil变更不)
以下的设定设定为装备修理画面发出的效果音.
REPAIR _ SOUND
修理执行时效果音的文件名
REPAIR _ VOLUME
修理运行时效果音的卷
REPAIR _ PITCH
修理运行时效果音
SUCCESS _ SOUND
修理成功时效果音的文件名
SUCCESS _ VOLUME
修理成功时效果音
SUCCESS _ PITCH
修理成功时效果音
MISS _ SOUND
修理失败时效果音的文件名
MISS _ VOLUME
修理失败时效果音
MISS _ PITCH
修理失败时效果在声音的螺距
另外,在条款的笔记栏中可以进行一个项目进行耐久度的设定.
= = = = : xxx EnableDurability装备耐久度
指定为xxx,指定一个联保,是否有耐久度的一个项目。
= = = = : xxx RepairPrice装备耐久度
设置了金钱的修理费用.
= = = = : xxx RepairPoint装备耐久度
设置变量的修理费用.
= = = = : xxx Price装备耐久度
设定价格的公式.
= = = = : xxx Success装备耐久度
设置修理成功率.
= = = = : xxx Atk装备耐久度
设置攻击力的式.
= = = = : xxx Def装备耐久度
设定防御力的公式.
= = = = : xxx Mat装备耐久度
设定魔法力的式.
= = = = : xxx Mdf装备耐久度
设定魔法防御力的式.
= = = = : xxx Agi装备耐久度
设定敏捷性的式.
= =装备耐久度而体力: xxx = =
设定运气的公式.
= = = = : xxx MaxHP装备耐久度
设定最大HP的公式.
= = = = : xxx MaxMP装备耐久度
设置最大MP式的式.
= = = = : xxx DefaultDurability装备耐久度
初期耐久度设定.
= = = = : xxx MaxDurability装备耐久度
设定最大耐久度.
= = = = : xxx RepairDurability装备耐久度
设置修理成功时的耐久度.
= = = = : xxx GaugeMax装备耐久度
设定规的最大耐久度.
= = = = : xxx Destroy装备耐久度
指定为xxx,指定为联保,耐久度为0的时候,装备会被废弃.
装备强化Penalty xxx = = = = :
设定惩罚.
xxx是break,none ,(自然数)的任意指定。
伤害活动利用耐久度的减少
基本上和伤害活动的共同活动的方法一样,以下的点不一样.
一行注释
= =装备耐久度活动:% types %:% timing %==
条件注释的最后追加耐久度变动注释
耐久度变动#% args %
% args %是以下的格式转换成。
: actor,xxx,: exp,xxx,%选项%,xxx,...
: actor
耐久度受影响的演员,或是演员排列的指定。
: exp
DEGRADE _ EXPS键的指定。
这式的评价结果的部分耐久度下降.
没有期权的人也没有关系,但是设定的话会有影响的装备更加细致的设定.
在期权的选择%以下的项目.
: slot _ id
用装备的插槽ID或者是插槽ID的排列指定.
在这里指定的插槽ID的装备只耐久度变动.
省略和所有的插槽ID的装备耐久度减少.
: equip _ type
装备类型的ID或者装备类型的ID的排列指定.
在这里指定的装备型ID的装备只耐久度变动.
省略和所有装备型ID的装备耐久度下降.
: id
用装备的道具ID或者条款ID的排列指定.
在这里设定的道具ID的装备的耐久度变动.
省略和所有的条款ID的装备耐久度变动.
耐久度变动注释% args %的中途换行进入也没关系。
这些的差异以外的活动和同样的举动,伤害活动的条件注释和耐久度变动注释,使装备的耐久度下降.
同时,装备耐久度活动的活动内容本身也被实行.
例子・ID 001的技能被使用了的演员的防具(装备类型1,2,3,4)对,耐久度减少式: armor适用
注释:==装备耐久度活动: HP :表示前= =
注释:action id = = 1 .
注释:耐久度变动#: actor,target,: exp : armor,密度
: equip _ type,[ 1,2,3,4 ]
RUBY 代码复制
  1. #==============================================================================
  2. # ■ BMSP 装備耐久度[EQUIPMENTDURABILITY] Ver1.11 2013/11/25
  3. #------------------------------------------------------------------------------
  4. #  装備に耐久度性を導入します.
  5. #==============================================================================
  6. #------------------------------------------------------------------------------
  7. # ■内容
  8. # 装備に耐久度性を導入します.
  9. # 装備の様々な条件で耐久度を変更させたり,
  10. # 耐久度によって装備の性能を変動させることができます.
  11. #
  12. # 位置:「BMSP ダメージイベント」より下
  13. #       「BMSP アイテムセグメント」より下
  14. #       「BMSP 装備強化システム」より下
  15. #       「BMSP ショップアイテム試着」より上
  16. #
  17. # ■必須
  18. # 「BMSP アイテムセグメントver1.12以上」が必須です.
  19. #
  20. # ■併用
  21. # 「BMSP ダメージイベントver1.02以上」と併用することで戦闘時に装備の耐久度を
  22. #  様々な条件で自動的に変動させることができます.
  23. #
  24. # ■使用方法
  25. # スクリプトに丸ごと貼り付けていただければ使用できます。
  26. #
  27. # 装備修理画面を呼び出すことで,装備の修理を行うことができます.
  28. # 装備修理画面を呼び出すにはマップ画面でイベントのスクリプトから
  29. #   ED.call_repair_equipment
  30. # を実行します.
  31. # デフォルトでは修理にお金を消費しますが,引数に整数を渡すことでそのIDに対応する
  32. # 変数の値を消費して修理することができます.
  33. # 例・変数001を消費して装備を修理する
  34. #   ED.call_repair_equipment(1)
  35. # また,耐久度を変化させた武器,防具の入手についてはイベントのスクリプトから
  36. #   ED.gain_durability_eapon(id, durability, amount)
  37. #   ED.gain_durability_armor(id, durability, amount)
  38. # を実行します.装備のID,設定耐久度,入手個数を引数に指定します.
  39. #
  40. # 詳細設定にて装備耐久度の設定を行うことができます.
  41. # ○ENABLE_DURABILITY : 装備の耐久度が有効かどうかのデフォルトの設定です.
  42. #
  43. # 以下の設定では耐久度によるアイテムの性能を求めるための式を設定します.
  44. # evalで評価されるためRubyの通常の式を描くことができます・
  45. # このとき,対象の装備のパラメータを参照することができます.
  46. # ・dur     :アイテムの現在の耐久度
  47. # ・mdur    :アイテムの最大耐久度
  48. # ・price   :オリジナルのアイテムの価格
  49. # ・atk     :オリジナルのアイテムの攻撃力の上昇値
  50. # ・_def    :オリジナルのアイテムの防御力の上昇値
  51. # ・mat     :オリジナルのアイテムの魔法力の上昇値
  52. # ・mdf     :オリジナルのアイテムの魔法防御力の上昇値
  53. # ・agi     :オリジナルのアイテムの敏捷性の上昇値
  54. # ・luk     :オリジナルのアイテムの運の上昇値
  55. # ・mhp     :オリジナルのアイテムの最大HPの上昇値
  56. # ・mmp     :オリジナルのアイテムの最大MPの上昇値
  57. # ・etype_id:アイテムの装備タイプID
  58. # ・id      :アイテムのid
  59. # ○REPAIR_PRICE : 装備修理にかかる費用の式(お金の時)
  60. # ○REPAIR_POINT : 装備修理にかかる費用の式(変数の時)
  61. # ○PRICE:装備の価格の式
  62. # ○SUC:修理成功率の式
  63. # ○ATK:攻撃力上昇値の式
  64. # ○DEF:防御力上昇値の式
  65. # ○MAT:魔法力上昇値の式
  66. # ○MDF:魔法防御力上昇値の式
  67. # ○AGI:敏捷性上昇値の式
  68. # ○LUK:運上昇値の式
  69. # ○MHP:最大HP上昇値の式
  70. # ○MMP:最大MP上昇値の式
  71. #
  72. # ○DEFAULT_DURABILITY:耐久度の初期値
  73. # ○MAX_DURABILITY:最大耐久度
  74. # ○REPAIR_DURABILITY:修理後の耐久度
  75. # ○DESTROY:trueのとき耐久度が0になると装備が破棄されます
  76. #
  77. # ○PENALTY:修理に失敗したときのペナルティを設定します.
  78. # ペナルティには以下の種類から選択します.
  79. #   :none    :ペナルティなし
  80. #  :break   :装備の破壊
  81. #   (自然数) :耐久度が(自然数)になる
  82. #
  83. # ○DISPLAY_SUCCESS:装備修理画面で強化成功率を表示するか
  84. # ○DISPLAY_PENALTY:装備修理画面でペナルティを表示するか
  85. # ○POINT_UNIT:変数を消費して修理する時の通貨単位?です
  86. #  キー:defaultにはデフォルトの単位を指定します.
  87. #   自然数をキーにして単位を設定すると,そのIDの変数を利用する時その単位が表示されます.
  88. # ○BROKEN_MESSAGE:trueのとき戦闘中装備が壊れた旨を表示します
  89. # ○MESSAGE_FMT:装備破壊時に表示されるメッセージです.
  90. #                アクターの名前,装備名が置換される
  91. #
  92. # ○DEGRADE_EXPS:ダメージイベントを利用して耐久度を変動させる場合に使用する耐久度減少式です.
  93. #  任意のキーに対して式を文字列で設定し,装備耐久度イベント内で設定したキーを指定します.
  94. #   このとき,対象の装備のパラメータおよび各種ダメージイベントで参照可能な
  95. #   情報を参照することができます.
  96. # ・dur     :アイテムの現在の耐久度
  97. # ・mdur    :アイテムの最大耐久度
  98. # ・price   :オリジナルのアイテムの価格
  99. # ・atk     :オリジナルのアイテムの攻撃力の上昇値
  100. # ・_def    :オリジナルのアイテムの防御力の上昇値
  101. # ・mat     :オリジナルのアイテムの魔法力の上昇値
  102. # ・mdf     :オリジナルのアイテムの魔法防御力の上昇値
  103. # ・agi     :オリジナルのアイテムの敏捷性の上昇値
  104. # ・luk     :オリジナルのアイテムの運の上昇値
  105. # ・mhp     :オリジナルのアイテムの最大HPの上昇値
  106. # ・mmp     :オリジナルのアイテムの最大MPの上昇値
  107. # ・etype_id:アイテムの装備タイプID
  108. # ・id      :アイテムのid
  109. # ・ダメージイベントの変数(subject, targetなど)
  110. #
  111. # ○DRAW_GAUGE:装備アイコンに耐久度ゲージを描画するか
  112. # ○GAUGE_MAX_DURABILITY:ゲージが最大になる耐久度
  113. #                         装備の最大耐久度より小さくすることで
  114. #                         例えば耐久度120%の装備などを表現することができます.
  115. # ○GAUGE_EDGECOLOR:ゲージの縁の色(nilで描画しない)
  116. # ○GAUGE_BACKCOLOR:ゲージの背景色(nilで描画しない)
  117. # ○GAUGE_COLOR:ゲージの色
  118. # ○GAUGE_MAXCOLOR:ゲージ最大時の色
  119. # ○GAUGE_OVERCOLOR:ゲージ限界突破時の色
  120. # ○BROKENCOLOR:耐久度が0のときの装備名の文字色(nilで変更しない)   
  121. #
  122. # 以下の設定では装備修理画面で鳴らす効果音を指定できます.
  123. # ○REPAIR_SOUND:修理実行時効果音のファイル名
  124. # ○REPAIR_VOLUME:修理実行時効果音のボリューム
  125. # ○REPAIR_PITCH:修理実行時効果音のピッチ
  126. # ○SUCCESS_SOUND:修理成功時効果音のファイル名
  127. # ○SUCCESS_VOLUME:修理成功時効果音のボリューム
  128. # ○SUCCESS_PITCH:修理成功時効果音のピッチ
  129. # ○MISS_SOUND:修理失敗時効果音のファイル名
  130. # ○MISS_VOLUME:修理失敗時効果音のボリューム
  131. # ○MISS_PITCH:修理失敗時効果音のピッチ
  132. #
  133. # また,アイテムのメモ欄にてアイテムごとに耐久度の設定を行うことができます.
  134. #  ==装備耐久度EnableDurability:xxx==
  135. # xxxにtrueかfalseを指定して,耐久度のあるアイテムかどうか設定します.
  136. #   ==装備耐久度RepairPrice:xxx==
  137. # お金による修理費用の式を設定します.
  138. #   ==装備耐久度RepairPoint:xxx==
  139. # 変数による修理費用の式を設定します.
  140. #   ==装備耐久度Price:xxx==
  141. # 価格の式を設定します.
  142. #   ==装備耐久度Success:xxx==
  143. # 修理成功率の式を設定します.
  144. #   ==装備耐久度Atk:xxx==
  145. # 攻撃力の式を設定します.
  146. #   ==装備耐久度Def:xxx==
  147. # 防御力の式を設定します.
  148. #   ==装備耐久度Mat:xxx==
  149. # 魔法力の式を設定します.
  150. #   ==装備耐久度Mdf:xxx==
  151. # 魔法防御の式を設定します.
  152. #   ==装備耐久度Agi:xxx==
  153. # 敏捷性の式を設定します.
  154. #   ==装備耐久度Luk:xxx==
  155. # 運の式を設定します.
  156. #   ==装備耐久度MaxHP:xxx==
  157. # 最大HPの式を設定します.
  158. #   ==装備耐久度MaxMP:xxx==
  159. # 最大MPの式を設定します.
  160. #   ==装備耐久度DefaultDurability:xxx==
  161. # 初期耐久度を設定します.
  162. #   ==装備耐久度MaxDurability:xxx==
  163. # 最大耐久度を設定します.
  164. #   ==装備耐久度RepairDurability:xxx==
  165. # 修理成功時の耐久度を設定します.
  166. #   ==装備耐久度GaugeMax:xxx==
  167. # ゲージの最大耐久度を設定します.
  168. #   ==装備耐久度Destroy:xxx==
  169. # xxxにtrueかfalseを指定して耐久度が0になったとき装備が破棄されるか設定します.
  170. #   ==装備耐久度Penalty:xxx==
  171. # ペナルティを設定します.xxxにはbreak,none,(自然数)のいずれかを指定します.
  172. #
  173. # ● ダメージイベントを利用した耐久度の減少
  174. # 基本的にはダメージイベントのコモンイベントの作り方と同様ですが,
  175. # 以下の点が異なります.
  176. # ・一行目の注釈
  177. #  ==装備耐久度イベント:%types%:%timing%==
  178. # ・条件注釈の最後に耐久度変動注釈を追加
  179. #   耐久度変動#%args%
  180. # %args%は以下のフォーマットで置き換えます.
  181. #   :actor => xxx, :exp => xxx, %オプション% => xxx, ...
  182. # :actorは耐久度の影響を受けるアクター,もしくはアクターの配列を指定します.
  183. # :expはDEGRADE_EXPSのキーを指定します.この式の評価結果の分だけ耐久度が減少します.
  184. # %オプション%は無くても構いませんが,設定するとより影響を受ける装備についてより細かい設定を行うことができます.
  185. # %オプション%には以下の項目があります.
  186. # :slot_idは装備のスロットIDもしくはスロットIDの配列で指定します.
  187. # ここで指定したスロットIDの装備のみ耐久度が変動します.
  188. # 省略すると全てのスロットIDの装備耐久度が減少します.
  189. # :equip_typeは装備タイプIDもしくは装備タイプIDの配列で指定します.
  190. # ここで指定した装備タイプIDの装備のみ耐久度が変動します.
  191. # 省略すると全ての装備タイプIDの装備耐久度が減少します.
  192. # :idは装備のアイテムIDもしくはアイテムIDの配列で指定します.
  193. # ここで設定したアイテムIDの装備の耐久度が変動します.
  194. # 省略すると全てのアイテムIDの装備耐久度が変動します.
  195. #
  196. # 耐久度変動注釈は%args%の途中に改行が入っても構いません.
  197. #
  198. # これらの違い以外はダメージイベントと同じ挙動をするので,
  199. # ダメージイベントの条件注釈および耐久度変動注釈でうまく条件を設定し,
  200. # 装備の耐久度を減少させます.
  201. # 装備耐久度イベントのイベント内容自体も実行されます.
  202. #
  203. # ■注意
  204. # このスクリプトでは
  205. # 「RPG::BaseItem」「RPG::EquipItem」「Game_Actor」「Game_Party」
  206. # 「Scene_Battle」「Window_BattleLog」「Window_Base」「Window_ShopBuy」
  207. # のメソッドを改変しています。
  208. # ■情報
  209. # このスクリプトはgentlawkによって作られたものです。
  210. # 利用規約は[url]http://blueredzone.com[/url]をご覧ください。
  211. #------------------------------------------------------------------------------
  212. module BMSP
  213.   @@includes ||= {}
  214.   @@includes[:EquipmentDurability] = 1.11
  215.   module EquipmentDurability
  216.     #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
  217.     #詳細設定
  218.     ENABLE_DURABILITY = true # trueのときデフォルトで耐久度がON
  219.     REPAIR_PRICE = "price / 2" # 修理費用式
  220.     REPAIR_POINT = "price / 4" # 変数消費による修理費用式
  221.     PRICE = "price" # 耐久度による価格変動式
  222.     SUC = "100" # 修理成功率式
  223.     ATK = "dur == 0 ? 0 : atk" # 攻撃力変動式
  224.     DEF = "dur == 0 ? 0 : _def" # 防御力変動式
  225.     MAT = "dur == 0 ? 0 : mat" # 魔法力変動式
  226.     MDF = "dur == 0 ? 0 : mdf" # 魔法防御変動式
  227.     AGI = "dur == 0 ? 0 : agi" # 敏捷性変動式
  228.     LUK = "dur == 0 ? 0 : luk" # 運変動式
  229.     MHP = "dur == 0 ? 0 : mhp" # 最大HP変動式
  230.     MMP = "dur == 0 ? 0 : mmp" # 差大MP変動式
  231.     DEFAULT_DURABILITY = 100 # 耐久度の初期値
  232.     MAX_DURABILITY = 100 # 最大耐久度
  233.     REPAIR_DURABILITY = 100 # 修理後の耐久度
  234.     DESTROY = false # trueのとき耐久度が0になると装備が破棄
  235.     PENALTY = 0 # 修理失敗時のペナルティ
  236.                      # :break で装備が破棄
  237.                      # :none でペナルティなし
  238.                      # (自然数) で 指定の耐久度になる
  239.     DISPLAY_SUCCESS = false # 修理成功率を表示するか
  240.     DISPLAY_PENALTY = false # ペナルティを表示するか
  241.  
  242.     POINT_UNIT = {} # 変数による修理の時表示される単位
  243.     POINT_UNIT[:default] = "P" # デフォルトの単位
  244.     POINT_UNIT[1] = "RP" # 変数ID001による修理画面のとき,"RP"と表示
  245.  
  246.     BROKEN_MESSAGE = true # trueのとき戦闘中装備が壊れた旨を表示
  247.     MESSAGE_FMT = "%s の %s が壊れた!" # 装備破壊時に表示されるメッセージ
  248.                                         # アクターの名前,装備名が置換される
  249.  
  250.     DEGRADE_EXPS = {}
  251.     DEGRADE_EXPS[:weapon] = # 武器の耐久度減少式1
  252.       "1"
  253.     DEGRADE_EXPS[:weapon2] = # 武器の耐久度減少式2(ダメージイベント:HPを想定)
  254.       "target.result.hp_damage < 100 ? 0 : 1" # 与えたダメージが100未満なら耐久度は減らない
  255.     DEGRADE_EXPS[:armor] = # 防具の耐久度減少式1
  256.       "1"
  257.     DEGRADE_EXPS[:armor2] = # 防具の耐久度減少式2(ダメージイベントHPを想定)
  258.       "equip.atype_id == 4 ? 1 : 2" # 防具タイプ4(重装防具)なら耐久度は減りにくい
  259.  
  260.     DRAW_GAUGE = true # 耐久度ゲージを描画するか
  261.     GAUGE_MAX_DURABILITY = 100 # ゲージが最大になる耐久度
  262.     GAUGE_EDGECOLOR = 7 # ゲージの縁の色(nilで描画しない)
  263.     GAUGE_BACKCOLOR = 19 # ゲージの背景色(nilで描画しない)
  264.     GAUGE_COLOR = 3 # ゲージの色
  265.     GAUGE_MAXCOLOR = 1 # ゲージ最大時の色
  266.     GAUGE_OVERCOLOR = 2 # ゲージ限界突破時の色
  267.     BROKENCOLOR = 18 # 耐久度が0のときの装備名の文字色(nilで変更しない)   
  268.  
  269.     # 修理実行時の効果音
  270.     REPAIR_SOUND = "Hammer" # ファイル名
  271.     REPAIR_VOLUME = 80      # ボリューム
  272.     REPAIR_PITCH = 100      # ピッチ
  273.     # 修理成功時の効果音
  274.     SUCCESS_SOUND = "Chime2" # ファイル名
  275.     SUCCESS_VOLUME = 80      # ボリューム
  276.     SUCCESS_PITCH = 100      # ピッチ
  277.     # 強化失敗時の効果音
  278.     MISS_SOUND = "Buzzer2" # ファイル名
  279.     MISS_VOLUME = 80       # ボリューム
  280.     MISS_PITCH = 100       # ピッチ
  281.     #▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
  282.     # メモ欄から設定を抽出する正規表現
  283.     MATCH = /==装備耐久度(.+):(.*)==/o
  284.     NAME_LIST = [
  285.       :EnableDurability, :RepairPrice, :RepairPoint,
  286.       :Price, :Success, :Atk, :Def, :Mat, :Mdf, :Agi, :Luk,
  287.       :MaxHP, :MaxMP, :DefaultDurability, :MaxDurability,
  288.       :RepairDurability,:GaugeMax,
  289.       :Destroy, :Penalty
  290.     ]
  291.     #--------------------------------------------------------------------------
  292.     # ● 正規表現とのマッチ
  293.     #--------------------------------------------------------------------------
  294.     def self.match(str)
  295.       data = Hash.new
  296.       NAME_LIST.each{|name| data[name] = nil }
  297.       str.scan(MATCH).each do |name, value|
  298.         symname = name.to_sym
  299.         next unless data.key?(symname)
  300.         case symname
  301.         when :Penalty
  302.           if /\d+/ =~ value
  303.             data[symname] = value.to_u
  304.           elsif /break|none/ =~ value
  305.             data[symname] = value.to_sym
  306.           end
  307.         when :EnableDurability, :Destroy
  308.           data[symname] = Kernel.eval(value) ? true : false
  309.         when :DefaultDurability, :MaxDurability, :RepairDurability, :GaugeMax
  310.           data[symname] = value.to_i
  311.         else
  312.           data[symname] = value
  313.         end
  314.       end
  315.       return data
  316.     end
  317.     #--------------------------------------------------------------------------
  318.     # ● 式の評価の本体
  319.     #--------------------------------------------------------------------------
  320.     def self.eval(exp,dur,mdur,mhp,mmp,atk,_def,mat,mdf,agi,luk,price,etype_id,id)
  321.       Kernel.eval(exp)
  322.     end
  323.     #--------------------------------------------------------------------------
  324.     # ● 装備耐久度の変動
  325.     #--------------------------------------------------------------------------
  326.     def self.degrade_durability(bind, params)
  327.       unless params[:actor] && params[:exp]
  328.         raise ArgumentError, "耐久度変動の必須パラメータがありません."
  329.       end
  330.       actors = params[:actor].is_a?(Array) ? params[:actor] : [params[:actor]]
  331.       if params[:slot_id]
  332.         slot_id = params[:slot_id].is_a?(Array) ? params[:slot_id] : [params[:slot_id]]
  333.       else
  334.         slot_id = false
  335.       end
  336.       if params[:equip_type]
  337.         equip_type = params[:equip_type].is_a?(Array) ? params[:equip_type] : [params[:equip_type]]
  338.       else
  339.         equip_type = false
  340.       end
  341.       if params[:id]
  342.         id = params[:id].is_a?(Array) ? params[:id] : [params[:id]]
  343.       else
  344.         id = false
  345.       end
  346.       actors.each do |actor|
  347.         next unless actor.actor?
  348.         actor.degrade_durability(DEGRADE_EXPS[params[:exp]], bind, slot_id, equip_type, id)
  349.       end
  350.     end
  351.     #--------------------------------------------------------------------------
  352.     # ● 装備破壊メッセージバッファの初期化
  353.     #--------------------------------------------------------------------------
  354.     def self.init_message_buffer
  355.       @message_buffer = []
  356.     end
  357.     #--------------------------------------------------------------------------
  358.     # ● 装備破壊メッセージの取得
  359.     #--------------------------------------------------------------------------
  360.     def self.get_message
  361.       return nil unless @message_buffer
  362.       @message_buffer.shift
  363.     end
  364.     #--------------------------------------------------------------------------
  365.     # ● 装備破壊メッセージの追加
  366.     #--------------------------------------------------------------------------
  367.     def self.push_message(message)
  368.       @message_buffer ||= []
  369.       @message_buffer.push message
  370.     end
  371.     #--------------------------------------------------------------------------
  372.     # ● 導入スクリプトの例外クラス
  373.     #--------------------------------------------------------------------------
  374.     class REQUIRE < StandardError
  375.     end
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● 必須スクリプトのチェック
  379.   #--------------------------------------------------------------------------
  380.   class << self
  381.     if method_defined?(:check_require)
  382.       alias equipmentdurability_check_require check_require
  383.     end
  384.   end
  385.   def self.check_require(require, version)
  386.     if methods.include?(:equipmentdurability_check_require)
  387.       equipmentdurability_check_require(require, version)
  388.     end
  389.     if !@@includes[require]
  390.       message =
  391.         sprintf("BMSPスクリプト%sが導入されていません.\n%s Ver%1.2f以上を導入してください.",
  392.           require,require,version)
  393.       raise EquipmentDurability::REQUIRE, message
  394.     elsif @@includes[require] < version
  395.       message =
  396.         sprintf("BMSPスクリプト%s Ver%1.2fは古いバージョンです.\n%s Ver%1.2f以上を導入してください.",
  397.           require,@@includes[require],require,version)
  398.       raise EquipmentDurability::REQUIRE, message
  399.     end
  400.     return true
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 導入スクリプトのチェック
  404.   #--------------------------------------------------------------------------
  405.   def self.check_include(include, version)
  406.     return false unless @@includes[include]
  407.     @@includes[include] >= version
  408.   end
  409.   module Interface
  410.     ::ED = self
  411.     #--------------------------------------------------------------------------
  412.     # ● 耐久度指定武器の追加
  413.     #--------------------------------------------------------------------------
  414.     def self.gain_durability_weapon(id, durability, amount)
  415.       $game_party.gain_durability_weapon(id, durability, amount)
  416.     end
  417.     #--------------------------------------------------------------------------
  418.     # ● 耐久度指定防具の追加
  419.     #--------------------------------------------------------------------------
  420.     def self.gain_durability_armor(id, durability, amount)
  421.       $game_party.gain_durability_armor(id, durability, amount)
  422.     end
  423.     #--------------------------------------------------------------------------
  424.     # ● 装備修理画面の呼び出し
  425.     #--------------------------------------------------------------------------
  426.     def self.call_repair_equipment(point = false)
  427.       return if $game_party.in_battle
  428.       BMSP::Scene_RepairEquipment.point = point
  429.       SceneManager.call(BMSP::Scene_RepairEquipment)
  430.       Fiber.yield
  431.     end
  432.   end
  433. end
  434. BMSP.check_require(:ItemSegment, 1.12)
  435. #==============================================================================
  436. # ■ Sound
  437. #==============================================================================
  438. module Sound
  439.   # 装備強化実行
  440.   def self.play_repair_equipment
  441.     Audio.se_play("Audio/SE/" + BMSP::EquipmentDurability::REPAIR_SOUND,
  442.       BMSP::EquipmentDurability::REPAIR_VOLUME,
  443.       BMSP::EquipmentDurability::REPAIR_PITCH)
  444.     end
  445.   # 装備強化成功
  446.   def self.play_repair_equipment_success
  447.     Audio.se_play("Audio/SE/" + BMSP::EquipmentDurability::SUCCESS_SOUND,
  448.       BMSP::EquipmentDurability::SUCCESS_VOLUME,
  449.       BMSP::EquipmentDurability::SUCCESS_PITCH)
  450.   end
  451.   # 装備強化失敗
  452.   def self.play_repair_equipment_miss
  453.     Audio.se_play("Audio/SE/" + BMSP::EquipmentDurability::MISS_SOUND,
  454.       BMSP::EquipmentDurability::MISS_VOLUME,
  455.       BMSP::EquipmentDurability::MISS_PITCH)
  456.   end
  457. end
  458. #==============================================================================
  459. # ■ BMSP::DamageEvent
  460. #==============================================================================
  461. if BMSP.check_include(:DamageEvent, 1.02)
  462. module BMSP
  463.   module DamageEvent
  464.     #--------------------------------------------------------------------------
  465.     # ● 条件にマッチするコモンイベントを取得
  466.     #--------------------------------------------------------------------------
  467.     instance_eval{ alias bmsp_equipmentdurability_commons commons }
  468.     def self.commons(type, timing, binding)
  469.       commons = bmsp_equipmentdurability_commons(type, timing, binding)
  470.       init_equipmentdurability_commons if @equipmentdurability_commons.nil?
  471.       return commons + @equipmentdurability_commons[type][timing].select{ |common,cond|
  472.         check_condition(cond, binding)
  473.       }.map{|cc| cc.first }
  474.     end
  475.     #--------------------------------------------------------------------------
  476.     # ● 装備耐久度:対象コモンイベントの初期化
  477.     #--------------------------------------------------------------------------
  478.     def self.init_equipmentdurability_commons
  479.       # オリジナルの対象コモンイベントの退避
  480.       original_commons = @commons
  481.       # 初期化
  482.       types = [:counter, :reflection, :substitute, :failure, :critical, :miss, :evasion,
  483.               :hp_damage, :mp_damage, :tp_damage, :added_st, :removed_st]
  484.       @commons = {}
  485.       types.each do |type|
  486.         @commons[type] = {:before=>[], :after=>[]}
  487.       end
  488.       # 一時的に装備耐久度用のチェッカーをバインド
  489.       class << self
  490.         alias original_check_damageevent check_damageevent
  491.         define_method(:check_damageevent, instance_method(:check_equipmentdurability_damageevent))
  492.       end
  493.       # 装備耐久度のダメージイベントを取得
  494.       init_commons
  495.       # チェッカーのバインドを戻す
  496.       class << self
  497.         define_method(:check_damageevent, instance_method(:original_check_damageevent))
  498.         remove_method(:original_check_damageevent)
  499.       end
  500.       # 対象コモンイベントの再配置
  501.       @equipmentdurability_commons = @commons
  502.       @commons = original_commons
  503.     end
  504.     #--------------------------------------------------------------------------
  505.     # ● 装備耐久度:ダメージイベントかチェックして情報を取得
  506.     #--------------------------------------------------------------------------
  507.     def self.check_equipmentdurability_damageevent(common_event)
  508.       list = common_event.list
  509.       index = 0
  510.       return nil if list[index].code != 108 # 注釈じゃない
  511.       define_comment = list[index].parameters[0]
  512.       index += 1
  513.       while list[index].code == 408
  514.         index += 1
  515.       end
  516.       return nil unless define_comment =~ /==装備耐久度イベント:(.+):(表示前|表示後)==/o
  517.       types = $1.split('|')
  518.       timing = $2 == "表示前" ? :before : :after
  519.       # 対象タイプを変換
  520.       types.map!{|type| self.translate_type(type)}.compact!
  521.       return nil if types.empty?
  522.       # 条件文を抽出
  523.       cond = []
  524.       size = -1
  525.       while list[index].code == 108
  526.         size += 1
  527.         line = list[index].parameters[0]
  528.         if line =~ /耐久度変動#(.+)/ # 耐久度変動
  529.           params = $1
  530.           index += 1
  531.           while list[index].code == 408
  532.             params += list[index].parameters[0]
  533.             index += 1
  534.           end
  535.           condition = "BMSP::EquipmentDurability.degrade_durability(binding, #{params})"
  536.           cond[size] = [condition]
  537.         else # 条件文
  538.           cond[size] = [line]
  539.           index += 1
  540.           while list[index].code == 408
  541.             cond[size].push(list[index].parameters[0])
  542.             index += 1
  543.           end
  544.         end
  545.       end
  546.       return types,timing,cond
  547.     end
  548.   end
  549. end
  550. end
  551. #==============================================================================
  552. # ■ BMSP::DurabilityData
  553. #------------------------------------------------------------------------------
  554. #  装備耐久度情報のクラスです.
  555. #==============================================================================
  556. class BMSP::DurabilityData
  557.   #--------------------------------------------------------------------------
  558.   # ● 公開インスタンス変数
  559.   #--------------------------------------------------------------------------
  560.   attr_reader   :durability # 耐久度
  561.   attr_reader   :max_durability # 最大耐久度
  562.   #--------------------------------------------------------------------------
  563.   # ● オブジェクト初期化
  564.   #--------------------------------------------------------------------------
  565.   def initialize(data)
  566.     @durability = 0
  567.     ed = BMSP::EquipmentDurability
  568.     @repair_price_exp = data[:RepairPrice] ? data[:RepairPrice] : ed::REPAIR_PRICE
  569.     @repair_point_exp = data[:RepairPoint] ? data[:RepairPoint] : ed::REPAIR_POINT
  570.     @price_exp = data[:Price] ? data[:Price] : ed::PRICE
  571.     @suc_exp = data[:Success] ? data[:Success] : ed::SUC
  572.     @atk_exp = data[:Atk] ? data[:Atk] : ed::ATK
  573.     @def_exp = data[:Def] ? data[:Def] : ed::DEF
  574.     @mat_exp = data[:Mat] ? data[:Mat] : ed::MAT
  575.     @mdf_exp = data[:Mdf] ? data[:Mdf] : ed::MDF
  576.     @agi_exp = data[:Agi] ? data[:Agi] : ed::AGI
  577.     @luk_exp = data[:Luk] ? data[:Luk] : ed::LUK
  578.     @mhp_exp = data[:MaxHP] ? data[:MaxHP] : ed::MHP
  579.     @mmp_exp = data[:MaxMP] ? data[:MaxMP] : ed::MMP
  580.     @default_durability = data[:DefaultDurability] ? data[:DefaultDurability] : ed::DEFAULT_DURABILITY
  581.     @max_durability = data[:MaxDurability] ? data[:MaxDurability] : ed::MAX_DURABILITY
  582.     @repair_durability = data[:RepairDurability] ? data[:RepairDurability] : ed::REPAIR_DURABILITY
  583.     @gauge_max_durability = data[:GaugeMax] ? data[:GaugeMax] : ed::GAUGE_MAX_DURABILITY
  584.     @destroy = data[:Destroy] ? data[:Destroy] : ed::DESTROY
  585.     @penalty = data[:Penalty] ? data[:Penalty] : ed::PENALTY
  586.     @penalty = :break if @destroy && @penalty == 0
  587.     if @destroy && @default_durability == 0 # 最初から壊れているような装備は許可しない
  588.       @max_durability = 1 if @max_durability == 0
  589.       @default_durability = 1
  590.     end
  591.     self.durability = @default_durability
  592.     @params_cache = []
  593.     @price_cache = []
  594.     @repair_price_cache = []
  595.     @repair_point_cache = []
  596.     @success_cache = []
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 耐久度の設定
  600.   #--------------------------------------------------------------------------
  601.   def durability=(dur)
  602.     # min = @destroy ? 1 : 0
  603.     min = 0
  604.     @durability = [[dur, min].max, @max_durability].min
  605.   end
  606.   #--------------------------------------------------------------------------
  607.   # ● パラメータ式の取得
  608.   #--------------------------------------------------------------------------
  609.   def params_exp
  610.     [
  611.       @mhp_exp, @mmp_exp, @atk_exp, @def_exp,
  612.       @mat_exp, @mdf_exp, @agi_exp, @luk_exp
  613.     ]
  614.   end
  615.   #--------------------------------------------------------------------------
  616.   # ● パラメータの取得
  617.   #--------------------------------------------------------------------------
  618.   def params(item)
  619.     return @params_cache[@durability] if @params_cache[@durability]
  620.     @params_cache[@durability] = params_exp.map{|exp|
  621.       exp_eval(item, exp)
  622.     }
  623.   end
  624.   #--------------------------------------------------------------------------
  625.   # ● 価格の取得
  626.   #--------------------------------------------------------------------------
  627.   def price(item)
  628.     return 0 if item.bmsp_equipmentdurability_price == 0
  629.     return @price_cache[@durability] if @price_cache[@durability]
  630.     @price_cache[@durability] = [exp_eval(item, @price_exp), 1].max
  631.   end
  632.   #--------------------------------------------------------------------------
  633.   # ● 修理価格の取得
  634.   #--------------------------------------------------------------------------
  635.   def repair_price(item)
  636.     return @repair_price_cache[@durability] if @repair_price_cache[@durability]
  637.     @repair_price_cache[@durability] = [exp_eval(item, @repair_price_exp), 0].max
  638.   end
  639.   #--------------------------------------------------------------------------
  640.   # ● 変数修理価格の取得
  641.   #--------------------------------------------------------------------------
  642.   def repair_point(item)
  643.     return @repair_point_cache[@durability] if @repair_point_cache[@durability]
  644.     @repair_point_cache[@durability] = [exp_eval(item, @repair_point_exp), 0].max
  645.   end
  646.   #--------------------------------------------------------------------------
  647.   # ● 成功率の取得
  648.   #--------------------------------------------------------------------------
  649.   def success(item)
  650.     return @success_cache[@durability] if @success_cache[@durability]
  651.     @success_cache[@durability] = [[exp_eval(item, @suc_exp), 0].max, 100].min
  652.   end
  653.   #--------------------------------------------------------------------------
  654.   # ● 各種式の評価
  655.   #--------------------------------------------------------------------------
  656.   def exp_eval(item, exp)
  657.     base_params = item.bmsp_equipmentdurability_params.dup
  658.     price = item.bmsp_equipmentdurability_price
  659.     BMSP::EquipmentDurability.eval(exp,@durability,@max_durability,*base_params,price,item.etype_id,item.id)
  660.   end
  661.   #--------------------------------------------------------------------------
  662.   # ● ゲージ最大値の取得
  663.   #--------------------------------------------------------------------------
  664.   def gauge_max_durability
  665.     @gauge_max_durability
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ● ペナルティの取得
  669.   #--------------------------------------------------------------------------
  670.   def penalty
  671.     @penalty
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ● 耐久度0で壊れるかどうか
  675.   #--------------------------------------------------------------------------
  676.   def destroy?
  677.     @destroy
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # ● 修理可能かどうか
  681.   #--------------------------------------------------------------------------
  682.   def repairable?
  683.     @durability < @repair_durability
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● 修理
  687.   #--------------------------------------------------------------------------
  688.   def repair
  689.     self.durability = @repair_durability
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● 修理の実行
  693.   #--------------------------------------------------------------------------
  694.   def execute_repair(item)
  695.     old_dur = self.durability
  696.     if rand(100) < success(item) # 成功
  697.       self.durability = @repair_durability
  698.       return old_dur
  699.     end
  700.     # 失敗
  701.     case @penalty
  702.     when :break # 消失
  703.       # 消失処理は呼び出し元で行う
  704.     when :none # なし
  705.     else # 耐久度指定
  706.       self.durability = @penalty
  707.     end
  708.     return [old_dur, @penalty]
  709.   end
  710. end
  711. #==============================================================================
  712. # ■ BMSP::ItemExtend
  713. #==============================================================================
  714. class BMSP::ItemExtend
  715.   #--------------------------------------------------------------------------
  716.   # ● 公開インスタンス変数
  717.   #--------------------------------------------------------------------------
  718.   attr_reader   :durability_data # 装備耐久度
  719.   #--------------------------------------------------------------------------
  720.   # ● オブジェクト初期化
  721.   #--------------------------------------------------------------------------
  722.   alias equipdurability_initialize initialize
  723.   def initialize(item)
  724.     equipdurability_initialize(item)
  725.     init_durability
  726.   end
  727.   #--------------------------------------------------------------------------
  728.   # ● 装備耐久度の初期化
  729.   #--------------------------------------------------------------------------
  730.   def init_durability
  731.     if is_weapon? || is_armor?
  732.       data = BMSP::EquipmentDurability.match(original.note)
  733.       if data[:EnableDurability].nil?
  734.         durability = BMSP::EquipmentDurability::ENABLE_DURABILITY
  735.       else
  736.         durability = data[:EnableDurability]
  737.       end
  738.       @durability_data = durability ? BMSP::DurabilityData.new(data) : nil
  739.     else
  740.       @durability_data = nil
  741.     end
  742.   end
  743.   #--------------------------------------------------------------------------
  744.   # ● 耐久度があるかどうか
  745.   #--------------------------------------------------------------------------
  746.   def has_durability?
  747.     extend? && !@durability_data.nil?
  748.   end
  749. end
  750. #==============================================================================
  751. # ■ RPG::BaseItem
  752. #==============================================================================
  753. class RPG::BaseItem
  754.   #--------------------------------------------------------------------------
  755.   # ● 装備耐久度情報の取得
  756.   #--------------------------------------------------------------------------
  757.   def durability_data
  758.     return nil unless has_durability?
  759.     self.extend.durability_data
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # ● 装備強化可能かどうか
  763.   #--------------------------------------------------------------------------
  764.   def has_durability?
  765.     extend? && self.extend.has_durability?
  766.   end
  767. end
  768. #==============================================================================
  769. # ■ RPG::EquipItem
  770. #==============================================================================
  771. class RPG::EquipItem
  772.   #--------------------------------------------------------------------------
  773.   # ● パラメータの取得
  774.   #--------------------------------------------------------------------------
  775.   alias bmsp_equipmentdurability_params params
  776.   def params
  777.     return bmsp_equipmentdurability_params unless has_durability?
  778.     durability_data.params(self)
  779.   end
  780.   #--------------------------------------------------------------------------
  781.   # ● 価格の取得
  782.   #--------------------------------------------------------------------------
  783.   alias bmsp_equipmentdurability_price price
  784.   def price
  785.     return bmsp_equipmentdurability_price unless has_durability?
  786.     durability_data.price(self)
  787.   end
  788. end
  789. #==============================================================================
  790. # ■ Game_Actor
  791. #==============================================================================
  792. class Game_Actor < Game_Battler
  793.   #--------------------------------------------------------------------------
  794.   # ● 装備耐久度の変動
  795.   #--------------------------------------------------------------------------
  796.   def degrade_durability(exp, bind = binding, slot_id = false, equip_type = false, id = false)
  797.     equips = @equips.dup
  798.     # 装備していないスロットの削除
  799.     equips.map!{|equip| equip.object.nil? ? nil : equip}
  800.     # 装備スロットの限定
  801.     if slot_id
  802.       slot_id.each do |i|
  803.         equips[i] = nil
  804.       end
  805.     end
  806.     # 装備タイプの限定
  807.     if equip_type
  808.       equips.map!{|equip|
  809.         next nil if equip.nil?
  810.         equip_type.include?(equip.object.etype_id) ? equip : nil
  811.       }
  812.     end
  813.     # 装備IDの限定
  814.     if id
  815.       equips.select!{|equip|
  816.         next nil if equip.nil?
  817.         id.include?(equip.object.id) ? equip : nil
  818.       }
  819.     end
  820.     equips.each.with_index do |equipbase, slot|
  821.       next if equipbase.nil?
  822.       equip = equipbase.object
  823.       next unless equip.has_durability?
  824.       # 追加のローカル変数バインド
  825.       $bmsp_equipmentdurability_localvars = {
  826.         :actor => self,
  827.         :equip => equip,
  828.         :dur => equip.durability_data.durability,
  829.         :mdur => equip.durability_data.max_durability,
  830.         :mhp => equip.params[0],
  831.         :mmp => equip.params[1],
  832.         :atk => equip.params[2],
  833.         :_def => equip.params[3],
  834.         :mat => equip.params[4],
  835.         :mdf => equip.params[5],
  836.         :agi => equip.params[6],
  837.         :luk => equip.params[7],
  838.         :price => equip.price,
  839.         :etype_id => equip.etype_id,
  840.         :id => equip.id
  841.       }
  842.       exps = []
  843.       $bmsp_equipmentdurability_localvars.keys.each do |var|
  844.         exps.push("#{var} = $bmsp_equipmentdurability_localvars[:#{var}]")
  845.       end
  846.       exps.push(exp)
  847.       # 評価
  848.       value = bind.eval(exps.join(";"))
  849.       # 変動
  850.       equip.durability_data.durability -= value
  851.       # 破壊の処理
  852.       if equip.durability_data.destroy? && equip.durability_data.durability == 0
  853.         force_change_equip(slot, nil) # 装備の強制解除
  854.         if $game_party.in_battle && BMSP::EquipmentDurability::BROKEN_MESSAGE
  855.           mes = sprintf(BMSP::EquipmentDurability::MESSAGE_FMT, actor.name, equip.name)
  856.           BMSP::EquipmentDurability.push_message(mes)
  857.         end
  858.       end
  859.     end
  860.   end
  861. end
  862. #==============================================================================
  863. # ■ Game_Party
  864. #==============================================================================
  865. class Game_Party < Game_Unit
  866.   #--------------------------------------------------------------------------
  867.   # ● 耐久度指定武器の追加
  868.   #--------------------------------------------------------------------------
  869.   def gain_durability_weapon(id, durability, amount)
  870.     item = $data_weapons[id]
  871.     gain_durability_equip(@weapons, item, durability, amount)
  872.   end
  873.   #--------------------------------------------------------------------------
  874.   # ● 耐久度指定防具の追加
  875.   #--------------------------------------------------------------------------
  876.   def gain_durability_armor(id, durability, amount)
  877.     item = $data_armors[id]
  878.     gain_durability_equip(@armors, item, durability, amount)
  879.   end
  880.   #--------------------------------------------------------------------------
  881.   # ● 耐久度指定装備の追加
  882.   #--------------------------------------------------------------------------
  883.   def gain_durability_equip(container, item, durability, amount)
  884.     extenditems = []
  885.     amount.times do
  886.       extend = BMSP::ItemExtend.new(item)
  887.       if extend.has_durability?
  888.         # 最初から壊れていたらそもそも追加しない
  889.         return if extend.durability_data.destroy? && durability == 0
  890.         extend.durability_data.durability = durability
  891.       end
  892.       extenditems.push extend if BMSP::ItemSegmentSystem::NEW_SEGMENT
  893.       gain_extend(container, extend.item, extend) unless BMSP::ItemSegmentSystem::NEW_SEGMENT
  894.     end
  895.     return unless BMSP::ItemSegmentSystem::NEW_SEGMENT
  896.     segments = []
  897.     extenditems.each do |extend|
  898.       if segments.empty?
  899.         segments.push(BMSP::ItemSegment.new(extend))
  900.       elsif !segments.last.push(extend)
  901.         segments.push(BMSP::ItemSegment.new(extend))
  902.       end
  903.     end
  904.     segments.each do |segment|
  905.       gain_segment(container, item, segment)
  906.     end
  907.   end
  908. end
  909. #==============================================================================
  910. # ■ Scene_Battle
  911. #==============================================================================
  912. class Scene_Battle < Scene_Base
  913.   #--------------------------------------------------------------------------
  914.   # ● 戦闘行動の実行
  915.   #--------------------------------------------------------------------------
  916.   alias bmsp_equipmentdurability_execute_action execute_action
  917.   def execute_action
  918.     # 装備破壊メッセージの初期化
  919.     BMSP::EquipmentDurability.init_message_buffer
  920.     bmsp_equipmentdurability_execute_action
  921.     # 装備破壊メッセージの表示
  922.     @log_window.display_equipment_broken
  923.   end
  924. end
  925. #==============================================================================
  926. # ■ Window_BattleLog
  927. #==============================================================================
  928. class Window_BattleLog < Window_Selectable
  929.   #--------------------------------------------------------------------------
  930.   # ● 装備破壊の表示
  931.   #--------------------------------------------------------------------------
  932.   def display_equipment_broken
  933.     while message = BMSP::EquipmentDurability::get_message
  934.       add_text(message)
  935.       wait
  936.     end
  937.   end
  938. end
  939. #==============================================================================
  940. # ■ BMSP::Window_RepairGold
  941. #------------------------------------------------------------------------------
  942. #  装備修理画面で所持金を表示するウィンドウです。
  943. #==============================================================================
  944. class BMSP::Window_RepairGold < Window_Gold
  945.   #--------------------------------------------------------------------------
  946.   # ● ウィンドウ幅の取得
  947.   #--------------------------------------------------------------------------
  948.   def window_width
  949.     return 272
  950.   end
  951.   #--------------------------------------------------------------------------
  952.   # ● 所持金の取得
  953.   #--------------------------------------------------------------------------
  954.   def value
  955.     if BMSP::Scene_RepairEquipment.point # ポイント
  956.       $game_variables[BMSP::Scene_RepairEquipment.point]
  957.     else # お金
  958.       $game_party.gold
  959.     end
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ● 通貨単位の取得
  963.   #--------------------------------------------------------------------------
  964.   def currency_unit
  965.     if BMSP::Scene_RepairEquipment.point # ポイント
  966.       unit = BMSP::EquipmentDurability::POINT_UNIT[BMSP::Scene_RepairEquipment.point]
  967.       unit ? unit : BMSP::EquipmentDurability::POINT_UNIT[:default]
  968.     else # お金
  969.       Vocab::currency_unit
  970.     end
  971.   end
  972. end
  973. #==============================================================================
  974. # ■ BMSP::Window_RepairStatus
  975. #------------------------------------------------------------------------------
  976. #  装備強化画面で、アイテムの能力値変化を表示するウィンドウです。
  977. #==============================================================================
  978. class BMSP::Window_RepairStatus < Window_Base
  979.   #--------------------------------------------------------------------------
  980.   # ● オブジェクト初期化
  981.   #--------------------------------------------------------------------------
  982.   def initialize(x, y, height)
  983.     super(x, y, window_width, height)
  984.     @item = nil
  985.   end
  986.   #--------------------------------------------------------------------------
  987.   # ● ウィンドウ幅の取得
  988.   #--------------------------------------------------------------------------
  989.   def window_width
  990.     return 272
  991.   end
  992.   #--------------------------------------------------------------------------
  993.   # ● アイテムの設定
  994.   #--------------------------------------------------------------------------
  995.   def item=(item)
  996.     return if @item == item
  997.     @item = item
  998.     refresh
  999.   end
  1000.   #--------------------------------------------------------------------------
  1001.   # ● リフレッシュ
  1002.   #--------------------------------------------------------------------------
  1003.   def refresh
  1004.     contents.clear
  1005.     return if @item.is_a?(Game_Actor)
  1006.     return if @item.is_a?(String)
  1007.     return if @item.nil? || !@item.extend?
  1008.     draws = [:durability, :mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk]
  1009.     draws.push :success if BMSP::EquipmentDurability::DISPLAY_SUCCESS
  1010.     draws.push :penalty if BMSP::EquipmentDurability::DISPLAY_PENALTY
  1011.     draws.each_with_index do |param, i|
  1012.       draw_item(0, i * line_height, param)
  1013.     end
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # ● 項目の描画
  1017.   #--------------------------------------------------------------------------
  1018.   def draw_item(x, y, param)
  1019.     draw_param_name(x + 4, y, param)
  1020.     draw_current_param(x + 114, y, param)
  1021.     return if param == :success || param == :penalty
  1022.     draw_right_arrow(x + 168, y)
  1023.     draw_new_param(x + 192, y, param) if @item.durability_data.repairable?
  1024.   end
  1025.   #--------------------------------------------------------------------------
  1026.   # ● 能力値の名前を描画
  1027.   #--------------------------------------------------------------------------
  1028.   def draw_param_name(x, y, param)
  1029.     change_color(system_color)
  1030.     label =
  1031.     case param
  1032.     when :durability then "耐久度"
  1033.     when :mhp then Vocab::param(0)
  1034.     when :mmp then Vocab::param(1)
  1035.     when :atk then Vocab::param(2)
  1036.     when :def then Vocab::param(3)
  1037.     when :mat then Vocab::param(4)
  1038.     when :mdf then Vocab::param(5)
  1039.     when :agi then Vocab::param(6)
  1040.     when :luk then Vocab::param(7)
  1041.     when :success then "成功率"
  1042.     when :penalty then "ペナルティ"
  1043.     end
  1044.     draw_text(x, y, 100, line_height, label)
  1045.   end
  1046.   #--------------------------------------------------------------------------
  1047.   # ● 現在の能力値を描画
  1048.   #--------------------------------------------------------------------------
  1049.   def draw_current_param(x, y, param)
  1050.     durability_data = @item.durability_data
  1051.     change_color(normal_color)
  1052.     durability = durability_data.durability
  1053.     case param
  1054.     when :durability then draw_text(x, y, 48, line_height, durability.to_s, 2)
  1055.     when :mhp then draw_text(x, y, 48, line_height, durability_data.params(@item)[0], 2)
  1056.     when :mmp then draw_text(x, y, 48, line_height, durability_data.params(@item)[1], 2)
  1057.     when :atk then draw_text(x, y, 48, line_height, durability_data.params(@item)[2], 2)
  1058.     when :def then draw_text(x, y, 48, line_height, durability_data.params(@item)[3], 2)
  1059.     when :mat then draw_text(x, y, 48, line_height, durability_data.params(@item)[4], 2)
  1060.     when :mdf then draw_text(x, y, 48, line_height, durability_data.params(@item)[5], 2)
  1061.     when :agi then draw_text(x, y, 48, line_height, durability_data.params(@item)[6], 2)
  1062.     when :luk then draw_text(x, y, 48, line_height, durability_data.params(@item)[7], 2)
  1063.     when :success then
  1064.       success = durability_data.success(@item)
  1065.       draw_text(x, y, 126, line_height, success, 2)
  1066.     when :penalty then
  1067.       case pena = durability_data.penalty
  1068.       when :break
  1069.         penalty = "破壊"
  1070.       when :none
  1071.         penalty = "なし"
  1072.       else
  1073.         penalty = "耐久度が#{pena}に"
  1074.       end
  1075.       # penalty = "" if forgedata.maxlevel?
  1076.       draw_text(x, y, 126, line_height, penalty, 2)
  1077.     end
  1078.   end
  1079.   #--------------------------------------------------------------------------
  1080.   # ● 右向き矢印を描画
  1081.   #--------------------------------------------------------------------------
  1082.   def draw_right_arrow(x, y)
  1083.     change_color(system_color)
  1084.     draw_text(x, y, 22, line_height, "→", 1)
  1085.   end
  1086.   #--------------------------------------------------------------------------
  1087.   # ● 装備修理後の能力値を描画
  1088.   #--------------------------------------------------------------------------
  1089.   def draw_new_param(x, y, param)
  1090.     durability_data = @item.durability_data
  1091.     repair_data = durability_data.dup
  1092.     repair_data.repair
  1093.     new_value, old_value =
  1094.     case param
  1095.     when :durability
  1096.       [repair_data.durability,durability_data.durability]
  1097.     when :mhp
  1098.       [repair_data.params(@item)[0], durability_data.params(@item)[0]]
  1099.     when :mmp
  1100.       [repair_data.params(@item)[1], durability_data.params(@item)[1]]
  1101.     when :atk
  1102.       [repair_data.params(@item)[2], durability_data.params(@item)[2]]
  1103.     when :def
  1104.       [repair_data.params(@item)[3], durability_data.params(@item)[3]]
  1105.     when :mat
  1106.       [repair_data.params(@item)[4], durability_data.params(@item)[4]]
  1107.     when :mdf
  1108.       [repair_data.params(@item)[5], durability_data.params(@item)[5]]
  1109.     when :agi
  1110.       [repair_data.params(@item)[6], durability_data.params(@item)[6]]
  1111.     when :luk
  1112.       [repair_data.params(@item)[7], durability_data.params(@item)[7]]
  1113.     else
  1114.       return
  1115.     end
  1116.     change_color(param_change_color(new_value - old_value))
  1117.     draw_text(x, y, 48, line_height, new_value, 2)
  1118.   end
  1119. end
  1120. #==============================================================================
  1121. # ■ BMSP::Window_RepairCommand
  1122. #==============================================================================
  1123. class BMSP::Window_RepairCommand < Window_HorzCommand
  1124.   #--------------------------------------------------------------------------
  1125.   # ● オブジェクト初期化
  1126.   #--------------------------------------------------------------------------
  1127.   def initialize(x, y, width)
  1128.     @window_width = width
  1129.     super(x, y)
  1130.   end
  1131.   #--------------------------------------------------------------------------
  1132.   # ● ウィンドウ幅の取得
  1133.   #--------------------------------------------------------------------------
  1134.   def window_width
  1135.     @window_width
  1136.   end
  1137.   #--------------------------------------------------------------------------
  1138.   # ● 桁数の取得
  1139.   #--------------------------------------------------------------------------
  1140.   def col_max
  1141.     return 2
  1142.   end
  1143.   #--------------------------------------------------------------------------
  1144.   # ● コマンドリストの作成
  1145.   #--------------------------------------------------------------------------
  1146.   def make_command_list
  1147.     enable = @item_window ? !@item_window.repairable_equips.empty? : false
  1148.     add_command("個別修理", :select)
  1149.     add_command("一括修理", :all, enable)
  1150.   end
  1151.   #--------------------------------------------------------------------------
  1152.   # ● アイテムウインドウの設定
  1153.   #--------------------------------------------------------------------------
  1154.   def item_window=(item_window)
  1155.     @item_window = item_window
  1156.   end
  1157. end
  1158. #==============================================================================
  1159. # ■ BMSP::Window_RepairList
  1160. #------------------------------------------------------------------------------
  1161. #  装備修理画面で、装備アイテムの一覧を表示するウィンドウです。
  1162. #==============================================================================
  1163. class BMSP::Window_RepairList < Window_ItemList
  1164.   #--------------------------------------------------------------------------
  1165.   # ● ステータスウインドウの設定
  1166.   #--------------------------------------------------------------------------
  1167.   def status_window=(window)
  1168.     @status_window = window
  1169.   end
  1170.   #--------------------------------------------------------------------------
  1171.   # ● 桁数の取得
  1172.   #--------------------------------------------------------------------------
  1173.   def col_max
  1174.     return 1
  1175.   end
  1176.   #--------------------------------------------------------------------------
  1177.   # ● アイテムリストの作成
  1178.   #--------------------------------------------------------------------------
  1179.   def make_item_list
  1180.     @data = []
  1181.     @equip_data = {}
  1182.     $game_party.members.each do |actor|
  1183.       item_actor = actor.dup
  1184.       def item_actor.description
  1185.         "#{self.name}の装備品です。"
  1186.       end
  1187.       @data.push item_actor
  1188.       equips = actor.equips
  1189.       equips.each.with_index do |equip, slot_id|
  1190.         @equip_data[equip] = [actor, slot_id]
  1191.       end
  1192.       @data.concat equips.compact
  1193.     end
  1194.     label = "所持装備アイテム"
  1195.     def label.description
  1196.       "所持している装備品です。"
  1197.     end
  1198.     @data.push label
  1199.     @data.concat $game_party.equip_items
  1200.   end
  1201.   #--------------------------------------------------------------------------
  1202.   # ● アイテムを許可状態で表示するかどうか
  1203.   #--------------------------------------------------------------------------
  1204.   def enable?(item)
  1205.     return false if item.nil?
  1206.     return false if item.is_a?(Game_Actor)
  1207.     return false if item.is_a?(String)
  1208.     return true if item.segment?
  1209.     return false unless item.extend?
  1210.     return false unless item.has_durability?
  1211.     item.durability_data.repairable?
  1212.   end
  1213.   #--------------------------------------------------------------------------
  1214.   # ● 項目の描画
  1215.   #--------------------------------------------------------------------------
  1216.   def draw_item(index)
  1217.     item = @data[index]
  1218.     case item
  1219.     when Game_Actor
  1220.       draw_item_actor_name(index, item)
  1221.     when String
  1222.       draw_item_label(index, item)
  1223.     else
  1224.       super
  1225.     end
  1226.   end
  1227.   #--------------------------------------------------------------------------
  1228.   # ● アクター名の描画
  1229.   #--------------------------------------------------------------------------
  1230.   def draw_item_actor_name(index, actor)
  1231.     rect = item_rect(index)
  1232.     change_color(system_color)
  1233.     draw_text(rect, actor.name, 1)
  1234.   end
  1235.   #--------------------------------------------------------------------------
  1236.   # ● ラベルの描画
  1237.   #--------------------------------------------------------------------------
  1238.   def draw_item_label(index, label)
  1239.     rect = item_rect(index)
  1240.     change_color(system_color)
  1241.     draw_text(rect, label, 1)
  1242.   end
  1243.   #--------------------------------------------------------------------------
  1244.   # ● アイテムの個数を描画
  1245.   #--------------------------------------------------------------------------
  1246.   def draw_item_number(rect, item)
  1247.     if item.segment?
  1248.       number = @data[@data.index(item)].extend.size
  1249.       draw_text(rect, sprintf(":%2d", number), 2)
  1250.     end
  1251.   end
  1252.   #--------------------------------------------------------------------------
  1253.   # ● フレーム更新
  1254.   #--------------------------------------------------------------------------
  1255.   def update
  1256.     super
  1257.     @status_window.item = item if self.active && @status_window
  1258.   end
  1259.   #--------------------------------------------------------------------------
  1260.   # ● アイテムの消失
  1261.   #--------------------------------------------------------------------------
  1262.   def lose_item(item)
  1263.     return unless item
  1264.     return if item.is_a?(Game_Actor)
  1265.     return if item.is_a?(String)
  1266.     actor, slot_id = @equip_data[item]
  1267.     if actor # 装備の強制解除(消失)
  1268.       actor.force_change_equip(slot_id, nil)
  1269.     else # アイテムの消失
  1270.       $game_party.lose_item(item, 1)
  1271.     end
  1272.   end
  1273.   #--------------------------------------------------------------------------
  1274.   # ● 修理可能な装備一覧の取得
  1275.   #--------------------------------------------------------------------------
  1276.   def repairable_equips
  1277.     @data.select { |item|
  1278.       enable?(item)
  1279.     }.map{ |item|
  1280.       next item unless item.segment?
  1281.       item.extend.select { |item|
  1282.         enable?(item)
  1283.       }
  1284.     }.flatten
  1285.   end
  1286. end
  1287. #==============================================================================
  1288. # ■ BMSP::Window_RepairExtendItem
  1289. #------------------------------------------------------------------------------
  1290. #  装備修理画面で,セグメントの中身を表示するウインドウです.
  1291. #==============================================================================
  1292. class BMSP::Window_RepairExtendItem < BMSP::Window_ExtendItem
  1293.   #--------------------------------------------------------------------------
  1294.   # ● ステータスウインドウの設定
  1295.   #--------------------------------------------------------------------------
  1296.   def status_window=(window)
  1297.     @status_window = window
  1298.   end
  1299.   #--------------------------------------------------------------------------
  1300.   # ● アイテムを許可状態で表示するかどうか
  1301.   #--------------------------------------------------------------------------
  1302.   def enable?(item)
  1303.     return false if item.nil?
  1304.     return false if item.is_a?(Game_Actor)
  1305.     return false if item.is_a?(String)
  1306.     return false unless item.extend?
  1307.     return false unless item.has_durability?
  1308.     item.durability_data.repairable?
  1309.   end
  1310.   #--------------------------------------------------------------------------
  1311.   # ● アイテムをリストに含めるかどうか
  1312.   #--------------------------------------------------------------------------
  1313.   def include?(item)
  1314.     return false if item.nil?
  1315.     true
  1316.   end
  1317.   #--------------------------------------------------------------------------
  1318.   # ● フレーム更新
  1319.   #--------------------------------------------------------------------------
  1320.   def update
  1321.     super
  1322.     @status_window.item = item if self.active && @status_window
  1323.   end
  1324. end
  1325. #==============================================================================
  1326. # ■ BMSP::Window_RepairDecide
  1327. #------------------------------------------------------------------------------
  1328. #  装備修理画面で,修理の実行の最終確認のウインドウです.
  1329. #==============================================================================
  1330. class BMSP::Window_RepairDecide < Window_Command
  1331.   #--------------------------------------------------------------------------
  1332.   # ● 公開インスタンス変数
  1333.   #--------------------------------------------------------------------------
  1334.   attr_accessor :just_mode # お金が足りなくても修理を選択可能
  1335.   #--------------------------------------------------------------------------
  1336.   # ● オブジェクト初期化
  1337.   #--------------------------------------------------------------------------
  1338.   def initialize
  1339.     super(0,0)
  1340.     self.openness = 0
  1341.     self.deactivate
  1342.     @just_mode = false
  1343.   end
  1344.   #--------------------------------------------------------------------------
  1345.   # ● 標準パディングサイズの取得
  1346.   #--------------------------------------------------------------------------
  1347.   def standard_padding
  1348.     return 18
  1349.   end
  1350.   #--------------------------------------------------------------------------
  1351.   # ● コマンドリストの作成
  1352.   #--------------------------------------------------------------------------
  1353.   def make_command_list
  1354.     # 金額が足りるか
  1355.     price_list = self.repair_price_list
  1356.     price = price_list.inject(0, :+)
  1357.     if BMSP::Scene_RepairEquipment.point # ポイント
  1358.       enable = $game_variables[BMSP::Scene_RepairEquipment.point] >= price
  1359.     else # お金
  1360.       enable = $game_party.gold >= price
  1361.     end
  1362.     if !enable && @just_mode
  1363.       # ひとつでも修理できるものがあれば修理を許可
  1364.       if BMSP::Scene_RepairEquipment.point # ポイント
  1365.         enable = price_list.any? {|price|
  1366.           $game_variables[BMSP::Scene_RepairEquipment.point] >= price
  1367.         }
  1368.       else # お金
  1369.         enable = price_list.any? {|price|
  1370.           $game_party.gold >= price
  1371.         }
  1372.       end
  1373.     end
  1374.     add_command("修理する", :repair, enable)
  1375.     add_command("やめる", :back)
  1376.   end
  1377.   #--------------------------------------------------------------------------
  1378.   # ● 通貨単位の取得
  1379.   #--------------------------------------------------------------------------
  1380.   def currency_unit
  1381.     if BMSP::Scene_RepairEquipment.point # ポイント
  1382.       unit = BMSP::EquipmentDurability::POINT_UNIT[BMSP::Scene_RepairEquipment.point]
  1383.       unit ? unit : BMSP::EquipmentDurability::POINT_UNIT[:default]
  1384.     else # お金
  1385.       Vocab::currency_unit
  1386.     end
  1387.   end
  1388.   #--------------------------------------------------------------------------
  1389.   # ● 項目の描画
  1390.   #--------------------------------------------------------------------------
  1391.   def draw_item(index)
  1392.     change_color(normal_color, command_enabled?(index))
  1393.     draw_text(item_rect_for_text(index), command_name(index), 0)
  1394.     if index == 0 && @item # 金額の表示
  1395.       price_list = self.repair_price_list
  1396.       price = price_list.inject(0, :+)
  1397.       return if price == 0
  1398.       width = contents.width - 4
  1399.       cx = text_size(currency_unit).width
  1400.       draw_text(0, 0, width - cx - 2, line_height, price, 2)
  1401.       change_color(system_color)
  1402.       draw_text(0, 0, width, line_height, currency_unit, 2)
  1403.     end
  1404.   end
  1405.   #--------------------------------------------------------------------------
  1406.   # ● アイテム一覧の設定
  1407.   #--------------------------------------------------------------------------
  1408.   def item=(item)
  1409.     return if @item == item
  1410.     @item = item.is_a?(Array) ? item : [item]
  1411.     set if @item
  1412.   end
  1413.   #--------------------------------------------------------------------------
  1414.   # ● アイテム一覧の取得
  1415.   #--------------------------------------------------------------------------
  1416.   def item
  1417.     return @item
  1418.   end
  1419.   #--------------------------------------------------------------------------
  1420.   # ● 修理金額一覧の取得
  1421.   #--------------------------------------------------------------------------
  1422.   def repair_price_list
  1423.     if @item
  1424.       if BMSP::Scene_RepairEquipment.point # ポイント
  1425.         @item.map { |item|
  1426.           item.durability_data.repair_point(item)
  1427.         }
  1428.       else # お金
  1429.         @item.map { |item|
  1430.           item.durability_data.repair_price(item)
  1431.         }
  1432.       end
  1433.     else
  1434.       []
  1435.     end
  1436.   end
  1437.   #--------------------------------------------------------------------------
  1438.   # ● 呼び出し元の設定
  1439.   #--------------------------------------------------------------------------
  1440.   def last_window=(window)
  1441.     return if @last_window == window
  1442.     @last_window = window
  1443.   end
  1444.   #--------------------------------------------------------------------------
  1445.   # ● 呼び出し元の取得
  1446.   #--------------------------------------------------------------------------
  1447.   def last_window
  1448.     return @last_window
  1449.   end
  1450.   #--------------------------------------------------------------------------
  1451.   # ● ウインドウのセット
  1452.   #--------------------------------------------------------------------------
  1453.   def set
  1454.     # ウインドウの幅を描画文字幅から算出
  1455.     # コマンドの文字幅
  1456.     command_width = @list.size.times.map{|i|
  1457.       text_size(command_name(i)).width
  1458.     }
  1459.     command_width[0] += 24 # パディング
  1460.     unit_width = contents.text_size(currency_unit).width
  1461.     price_list = self.repair_price_list
  1462.     price = price_list.inject(0, :+)
  1463.     if price > 0
  1464.       price_width = contents.text_size(price).width
  1465.       command_width[0] += price_width + 2 + unit_width # 金額
  1466.       command_width[0] += 4 # 右余白
  1467.     end
  1468.     self.width = command_width.max + standard_padding * 2
  1469.     self.height = fitting_height(@list.size)
  1470.     self.x = (Graphics.width - self.width) / 2
  1471.     self.y = (Graphics.height - self.height) / 2
  1472.     # リフレッシュ
  1473.     refresh
  1474.     self.select(command_enabled?(0) ? 0 : 1)
  1475.   end
  1476. end
  1477. #==============================================================================
  1478. # ■ BMSP::Window_RepairResult
  1479. #------------------------------------------------------------------------------
  1480. #  装備修理画面で、修理結果を表示するウインドウです.
  1481. #==============================================================================
  1482. class BMSP::Window_RepairResult < Window_Base
  1483.   #--------------------------------------------------------------------------
  1484.   # ● オブジェクト初期化
  1485.   #--------------------------------------------------------------------------
  1486.   def initialize
  1487.     y = (Graphics.height - window_height) / 2
  1488.     super(0, y, 48, window_height)
  1489.     self.openness = 0
  1490.     self.deactivate
  1491.   end
  1492.   #--------------------------------------------------------------------------
  1493.   # ● ウインドウの高さ
  1494.   #--------------------------------------------------------------------------
  1495.   def window_height
  1496.     self.fitting_height(3)
  1497.   end
  1498.   #--------------------------------------------------------------------------
  1499.   # ● リフレッシュ
  1500.   #--------------------------------------------------------------------------
  1501.   def refresh(data)
  1502.     contents.clear
  1503.     change_color(system_color)
  1504.     width = contents.width
  1505.     y = 0
  1506.     draw_text(0,y,width,line_height,data[:label],1)
  1507.     y += line_height
  1508.     x = (contents.width - (text_size(data[:item].name).width + 24)) / 2
  1509.     draw_item_name(data[:item], x, y, !data[:lost], width-24)
  1510.     change_color(data[:penalty] ? power_down_color : power_up_color)
  1511.     y += line_height
  1512.     draw_text(0,y,width,line_height,data[:message],1)
  1513.   end
  1514.   #--------------------------------------------------------------------------
  1515.   # ● ウインドウのセット
  1516.   #--------------------------------------------------------------------------
  1517.   def set(item, old_dur, penalty = nil)
  1518.     data = {}
  1519.     # 描画内容の設定
  1520.     data[:label] = "修理結果"
  1521.     data[:item] = item
  1522.     data[:penalty] = penalty
  1523.     data[:lost] = true if penalty == :break
  1524.     if penalty.nil?
  1525.       data[:message] = "耐久度が#{item.durability_data.durability}になった!"
  1526.     elsif penalty == :none
  1527.       data[:message] = "修理に失敗した"
  1528.     elsif penalty == :break
  1529.       data[:message] = "壊れてしまった"
  1530.     else
  1531.       data[:message] = "耐久度が#{item.durability_data.durability}になってしまった!"
  1532.     end
  1533.     # ウインドウ幅の設定
  1534.     line_widths = []
  1535.     line_widths.push(text_size(data[:label]).width + 24)
  1536.     line_widths.push(24 + text_size(item.name).width + 24)
  1537.     line_widths.push(text_size(data[:message]).width + 24)
  1538.     self.width = line_widths.max + standard_padding * 2
  1539.     self.create_contents
  1540.     # 位置の設定
  1541.     self.x = (Graphics.width - self.width) / 2
  1542.     # 内容の描画
  1543.     refresh(data)
  1544.   end
  1545. end
  1546. #==============================================================================
  1547. # ■ BMSP::Scene_RepairEquipment
  1548. #------------------------------------------------------------------------------
  1549. #  装備の修理を行う画面です.
  1550. #==============================================================================
  1551. class BMSP::Scene_RepairEquipment < Scene_MenuBase
  1552.   #--------------------------------------------------------------------------
  1553.   # ● 費用の設定
  1554.   #--------------------------------------------------------------------------
  1555.   def self.point; @@point; end
  1556.   def self.point=(point); @@point = point; end
  1557.   #--------------------------------------------------------------------------
  1558.   # ● 開始処理
  1559.   #--------------------------------------------------------------------------
  1560.   def start
  1561.     super
  1562.     create_help_window
  1563.     create_gold_window
  1564.     create_status_window
  1565.     create_command_windo
  1566.     create_item_window
  1567.     create_extend_window
  1568.     create_repair_window
  1569.     create_result_window
  1570.     @command_window.item_window = @item_window
  1571.     @command_window.refresh
  1572.     @command_window.activate
  1573.     @buffer = []
  1574.   end
  1575.   #--------------------------------------------------------------------------
  1576.   # ● ゴールドウィンドウの作成
  1577.   #--------------------------------------------------------------------------
  1578.   def create_gold_window
  1579.     @gold_window = BMSP::Window_RepairGold.new
  1580.     @gold_window.x = 272
  1581.     @gold_window.y = Graphics.height - @gold_window.height
  1582.   end
  1583.   #--------------------------------------------------------------------------
  1584.   # ● ステータスウィンドウの作成
  1585.   #--------------------------------------------------------------------------
  1586.   def create_status_window
  1587.     wx = Graphics.width - 272
  1588.     wy = @help_window.height
  1589.     wh = Graphics.height - @help_window.height - @gold_window.height
  1590.     @status_window = BMSP::Window_RepairStatus.new(wx, wy, wh)
  1591.     @status_window.viewport = @viewport
  1592.   end
  1593.   #--------------------------------------------------------------------------
  1594.   # ● コマンドウィンドウの作成
  1595.   #--------------------------------------------------------------------------
  1596.   def create_command_windo
  1597.     wy = @help_window.height
  1598.     ww = Graphics.width - @status_window.width
  1599.     @command_window = BMSP::Window_RepairCommand.new(0, wy, ww)
  1600.     @command_window.help_window = @help_window
  1601.     @command_window.set_handler(:select,    method(:on_command_select))
  1602.     @command_window.set_handler(:all, method(:on_command_all))
  1603.     @command_window.set_handler(:cancel, method(:on_command_cancel))
  1604.   end
  1605.   #--------------------------------------------------------------------------
  1606.   # ● 拡張アイテムウィンドウの作成
  1607.   #--------------------------------------------------------------------------
  1608.   def create_extend_window
  1609.     @extend_window = BMSP::Window_RepairExtendItem.new
  1610.     @extend_window.viewport = @viewport
  1611.     @extend_window.status_window = @status_window
  1612.     @extend_window.item_window = @item_window
  1613.     @extend_window.help_window = @help_window
  1614.     @extend_window.set_handler(:ok,     method(:on_extend_ok))
  1615.     @extend_window.set_handler(:cancel, method(:on_extend_cancel))
  1616.     @extend_window.init
  1617.   end
  1618.   #--------------------------------------------------------------------------
  1619.   # ● アイテムウィンドウの作成
  1620.   #--------------------------------------------------------------------------
  1621.   def create_item_window
  1622.     wy = @help_window.height + @command_window.height
  1623.     ww = Graphics.width - @status_window.width
  1624.     wh = Graphics.height - @help_window.height - @command_window.height
  1625.     @item_window = BMSP::Window_RepairList.new(0, wy, ww, wh)
  1626.     @item_window.viewport = @viewport
  1627.     @item_window.status_window = @status_window
  1628.     @item_window.help_window = @help_window
  1629.     @item_window.set_handler(:ok,     method(:on_item_ok))
  1630.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  1631.     @item_window.refresh
  1632.   end
  1633.   #--------------------------------------------------------------------------
  1634.   # ● 確認ウィンドウの作成
  1635.   #--------------------------------------------------------------------------
  1636.   def create_repair_window
  1637.     @repair_window = BMSP::Window_RepairDecide.new
  1638.     @repair_window.z = @viewport.z
  1639.     @repair_window.set_handler(:repair,    method(:on_repair))
  1640.     @repair_window.set_handler(:cancel,   method(:on_repair_cancel))
  1641.     @repair_window.set_handler(:back,     method(:on_repair_back))
  1642.   end
  1643.   #--------------------------------------------------------------------------
  1644.   # ● 結果ウィンドウの作成
  1645.   #--------------------------------------------------------------------------
  1646.   def create_result_window
  1647.     @result_window = BMSP::Window_RepairResult.new
  1648.     @result_window.z = @viewport.z
  1649.   end
  1650.   #--------------------------------------------------------------------------
  1651.   # ● 選択の開始
  1652.   #--------------------------------------------------------------------------
  1653.   def start_select
  1654.     activate_item_window(@item_window.index == -1 ? true : false)
  1655.     @status_window.item = @item_window.item
  1656.   end
  1657.   #--------------------------------------------------------------------------
  1658.   # ● 修理待ち状態か?
  1659.   #--------------------------------------------------------------------------
  1660.   def wait_for_repairing?
  1661.     !@command_window.active and
  1662.     !@item_window.active    and
  1663.     !@extend_window.active  and
  1664.     !@repair_window.active  and @repair_window.openness == 0
  1665.     !@result_window.active  and @result_window.openness == 0
  1666.   end
  1667.   #--------------------------------------------------------------------------
  1668.   # ● フレーム更新
  1669.   #--------------------------------------------------------------------------
  1670.   def update
  1671.     super
  1672.     # 結果ウインドウを閉じる動作
  1673.     if @result_window.active && Input.repeat?(:C)
  1674.       @result_window.close.deactivate
  1675.       repair_end if @buffer.empty?
  1676.     end
  1677.     if !@buffer.empty? && wait_for_repairing?
  1678.       # バッファにアイテムがあれば修理を実行する
  1679.       if !execute_repair(@buffer.shift) && @buffer.empty?
  1680.         # アイテムを修理せず終わった(お金が足りない)
  1681.         repair_end
  1682.       end
  1683.     end
  1684.   end
  1685.   #--------------------------------------------------------------------------
  1686.   # ● 修理フェイズの終了
  1687.   #--------------------------------------------------------------------------
  1688.   def repair_end
  1689.     case @repair_window.last_window
  1690.     when @item_window
  1691.       activate_item_window
  1692.     when @extend_window
  1693.       activate_extend_window
  1694.       if @extend_window.item_max == 0
  1695.         # 拡張ウインドウが空ならウインドウを閉じる
  1696.         @extend_window.close.deactivate
  1697.         activate_item_window
  1698.       else
  1699.         @item_window.refresh
  1700.       end
  1701.     when @command_window
  1702.       refresh_item_window
  1703.       @command_window.activate
  1704.     end
  1705.     @command_window.refresh # コマンドウインドウのリフレッシュ
  1706.   end
  1707.   #--------------------------------------------------------------------------
  1708.   # ● コマンド[個別修理]
  1709.   #--------------------------------------------------------------------------
  1710.   def on_command_select
  1711.     @command_window.deactivate
  1712.     start_select
  1713.   end
  1714.   #--------------------------------------------------------------------------
  1715.   # ● コマンド[一括修理]
  1716.   #--------------------------------------------------------------------------
  1717.   def on_command_all
  1718.     @repair_window.just_mode = true
  1719.     @repair_window.item = @item_window.repairable_equips
  1720.     @repair_window.last_window = @command_window
  1721.     @repair_window.open.activate
  1722.     @command_window.deactivate
  1723.   end
  1724.   #--------------------------------------------------------------------------
  1725.   # ● コマンド[キャンセル]
  1726.   #--------------------------------------------------------------------------
  1727.   def on_command_cancel
  1728.     return_scene
  1729.   end
  1730.   #--------------------------------------------------------------------------
  1731.   # ● アイテム[決定]
  1732.   #--------------------------------------------------------------------------
  1733.   def on_item_ok
  1734.     if @item_window.item.extend? # 拡張アイテム
  1735.       @repair_window.just_mode = false
  1736.       @repair_window.item = @item_window.item
  1737.       @repair_window.last_window = @item_window
  1738.       @repair_window.open.activate
  1739.     else # セグメント
  1740.       activate_extend_window(true)
  1741.     end
  1742.   end
  1743.   #--------------------------------------------------------------------------
  1744.   # ● アイテム[キャンセル]
  1745.   #--------------------------------------------------------------------------
  1746.   def on_item_cancel
  1747.     @item_window.deactivate
  1748.     @command_window.activate
  1749.   end
  1750.   #--------------------------------------------------------------------------
  1751.   # ● 拡張アイテム[決定]
  1752.   #--------------------------------------------------------------------------
  1753.   def on_extend_ok
  1754.     @repair_window.just_mode = false
  1755.     @repair_window.item = @extend_window.item
  1756.     @repair_window.last_window = @extend_window
  1757.     @repair_window.open.activate
  1758.   end
  1759.   #--------------------------------------------------------------------------
  1760.   # ● 拡張アイテム[キャンセル]
  1761.   #--------------------------------------------------------------------------
  1762.   def on_extend_cancel
  1763.     @extend_window.close.deactivate
  1764.     activate_item_window
  1765.   end
  1766.   #--------------------------------------------------------------------------
  1767.   # ● 確認[修理]
  1768.   #--------------------------------------------------------------------------
  1769.   def on_repair
  1770.     @buffer.concat @repair_window.item
  1771.     @repair_window.openness = 0
  1772.     @repair_window.close.deactivate
  1773.   end
  1774.   #--------------------------------------------------------------------------
  1775.   # ● 確認[やめる]
  1776.   #--------------------------------------------------------------------------
  1777.   def on_repair_back
  1778.     on_repair_cancel
  1779.   end
  1780.   #--------------------------------------------------------------------------
  1781.   # ● 確認[キャンセル]
  1782.   #--------------------------------------------------------------------------
  1783.   def on_repair_cancel
  1784.     @repair_window.close.deactivate
  1785.     case @repair_window.last_window
  1786.     when @item_window
  1787.       activate_item_window
  1788.     when @extend_window
  1789.       activate_extend_window
  1790.     when @command_window
  1791.       @command_window.activate
  1792.     end
  1793.   end
  1794.   #--------------------------------------------------------------------------
  1795.   # ● 修理の実行
  1796.   #--------------------------------------------------------------------------
  1797.   def execute_repair(item)
  1798.     # 所持金の減少
  1799.     if @@point # ポイント
  1800.       return false if $game_variables[@@point] < item.durability_data.repair_point(item)
  1801.       $game_variables[@@point] -= item.durability_data.repair_point(item)
  1802.       $game_variables[@@point] = 0 if $game_variables[@@point] < 0
  1803.     else # お金
  1804.       return false if $game_party.gold < item.durability_data.repair_point(item)
  1805.       $game_party.lose_gold(item.durability_data.repair_price(item))
  1806.     end
  1807.     Sound.play_repair_equipment
  1808.     @gold_window.refresh
  1809.     # 強化実行
  1810.     old_dur,penalty = item.durability_data.execute_repair(item)
  1811.     penalty ? Sound.play_forge_equipment_miss : Sound.play_forge_equipment_success
  1812.     if penalty == :break # 消失
  1813.       @item_window.lose_item(item)
  1814.     end
  1815.     # 結果の表示
  1816.     @result_window.set(item,old_dur,penalty)
  1817.     @result_window.openness = 255
  1818.     @result_window.open.activate
  1819.     true
  1820.   end
  1821.   #--------------------------------------------------------------------------
  1822.   # ● アイテムウインドウのアクティブ化
  1823.   #--------------------------------------------------------------------------
  1824.   def activate_item_window(init_index = false)
  1825.     refresh_item_window(init_index)
  1826.     @item_window.activate
  1827.   end
  1828.   #--------------------------------------------------------------------------
  1829.   # ● アイテムウインドウのリフレッシュ
  1830.   #--------------------------------------------------------------------------
  1831.   def refresh_item_window(init_index = false)
  1832.     @item_window.refresh
  1833.     # インデックスの修正
  1834.     if @item_window.index >= @item_window.item_max
  1835.       if @item_window.item_max > 0
  1836.         @item_window.select(@item_window.item_max - 1)
  1837.       else
  1838.         @item_window.select(0)
  1839.       end
  1840.     end
  1841.     @item_window.index = 0 if init_index
  1842.   end
  1843.   #--------------------------------------------------------------------------
  1844.   # ● 拡張アイテムウインドウのアクティブ化
  1845.   #--------------------------------------------------------------------------
  1846.   def activate_extend_window(init_index = false)
  1847.     # セグメントの設定
  1848.     @extend_window.segment = @item_window.item.extend
  1849.     # 表示位置と高さの変更
  1850.     @extend_window.set
  1851.  
  1852.     @extend_window.refresh
  1853.     @extend_window.open.activate
  1854.     @extend_window.index = 0 if init_index
  1855.   end
  1856. end
  1857. #==============================================================================
  1858. # ■ Window_Base
  1859. #==============================================================================
  1860. class Window_Base < Window
  1861.   if BMSP::EquipmentDurability::BROKENCOLOR
  1862.   #--------------------------------------------------------------------------
  1863.   # ● アイテム名の描画(再定義)
  1864.   #     enabled : 有効フラグ。false のとき半透明で描画
  1865.   #--------------------------------------------------------------------------
  1866.   def draw_item_name(item, x, y, enabled = true, width = 172)
  1867.     return unless item
  1868.     draw_icon(item.icon_index, x, y, enabled)
  1869.     if item.has_durability? && item.durability_data.durability == 0
  1870.       change_color(knockout_color, enabled)
  1871.     else
  1872.       change_color(normal_color, enabled)
  1873.     end
  1874.     draw_text(x + 24, y, width, line_height, item.name)
  1875.   end
  1876.   end
  1877.   #--------------------------------------------------------------------------
  1878.   # ● アイテム名の描画
  1879.   #     enabled : 有効フラグ。false のとき半透明で描画
  1880.   #--------------------------------------------------------------------------
  1881.   alias bmsp_equipmentdurability_draw_item_name draw_item_name
  1882.   def draw_item_name(item, x, y, enabled = true, width = 172)
  1883.     bmsp_equipmentdurability_draw_item_name(item, x, y, enabled, width)
  1884.     return unless item
  1885.     return unless item.has_durability?
  1886.     return unless BMSP::EquipmentDurability::DRAW_GAUGE
  1887.     # 装備耐久度ゲージの描画
  1888.     max = item.extend.durability_data.gauge_max_durability
  1889.     dur = item.extend.durability_data.durability
  1890.     if dur > max
  1891.       rate = 1.0
  1892.       color = text_color(BMSP::EquipmentDurability::GAUGE_OVERCOLOR)
  1893.     elsif dur == max
  1894.       rate = 1.0
  1895.       color = text_color(BMSP::EquipmentDurability::GAUGE_MAXCOLOR)
  1896.     else
  1897.       rate = dur.to_f / max
  1898.       color = text_color(BMSP::EquipmentDurability::GAUGE_COLOR)
  1899.     end
  1900.     edgecolor = BMSP::EquipmentDurability::GAUGE_EDGECOLOR
  1901.     edgecolor = edgecolor.nil? ? nil : text_color(edgecolor)
  1902.     bgcolor = BMSP::EquipmentDurability::GAUGE_BACKCOLOR
  1903.     bgcolor = bgcolor.nil? ? nil : text_color(bgcolor)
  1904.     unless enabled
  1905.       color.alpha = translucent_alpha
  1906.       bgcolor.alpha = translucent_alpha unless bgcolor.nil?
  1907.     end
  1908.     bmsp_equipmentdurability_draw_durability_gauge(x, y, rate, color, edgecolor, bgcolor)
  1909.   end
  1910.   #--------------------------------------------------------------------------
  1911.   # ● 装備耐久度ゲージの描画
  1912.   #--------------------------------------------------------------------------
  1913.   def bmsp_equipmentdurability_draw_durability_gauge(x, y, rate, color, edgecolor, bgcolor)
  1914.     gauge_width = edgecolor ? 18 : 20
  1915.     gauge_x = x + 2
  1916.     gauge_y = y + (edgecolor ? 19 : 20)
  1917.     width = rate * gauge_width
  1918.     width = 1 if rate > 0 && width == 0
  1919.     contents.fill_rect(gauge_x-1, gauge_y-1, gauge_width + 2, 4, edgecolor) if edgecolor
  1920.     contents.fill_rect(gauge_x, gauge_y, gauge_width, 2, bgcolor) if bgcolor
  1921.     contents.fill_rect(gauge_x, gauge_y, width, 2, color)
  1922.   end
  1923. end
  1924. #==============================================================================
  1925. # ■ Window_ShopBuy
  1926. #==============================================================================
  1927. class Window_ShopBuy < Window_Selectable
  1928.   #--------------------------------------------------------------------------
  1929.   # ● アイテムの取得
  1930.   #--------------------------------------------------------------------------
  1931.   alias bmsp_equipmentdurability_item item
  1932.   def item
  1933.     item = bmsp_equipmentdurability_item
  1934.     return item unless item.extended?
  1935.     item.extend.original
  1936.   end
  1937.   #--------------------------------------------------------------------------
  1938.   # ● アイテムリストの作成
  1939.   #--------------------------------------------------------------------------
  1940.   alias bmsp_equipmentdurability_make_item_list make_item_list
  1941.   def make_item_list
  1942.     bmsp_equipmentdurability_make_item_list
  1943.     map_proc = proc { |item, type|
  1944.       extend = BMSP::ItemExtend.new(item)
  1945.       extended_item = extend.item
  1946.       goods = @shop_goods.find{ |goods|
  1947.         goods[0] == type && goods[1] == item.id
  1948.       }
  1949.       @price[extend] = goods[2] == 0 ? extend.item.price : goods[3]
  1950.       extend.item
  1951.     }
  1952.     @data.map! do |item|
  1953.       case item
  1954.       when RPG::Weapon
  1955.         map_proc.call(item, 1)
  1956.       when RPG::Armor
  1957.         map_proc.call(item, 2)
  1958.       else
  1959.         item
  1960.       end
  1961.     end
  1962.   end
  1963.   #--------------------------------------------------------------------------
  1964.   # ● 商品の値段を取得
  1965.   #--------------------------------------------------------------------------
  1966.   alias bmsp_equipmentdurability_price price
  1967.   def price(item)
  1968.     price = bmsp_equipmentdurability_price(item)
  1969.     return price if price
  1970.     @price[item.extend]
  1971.   end
  1972.   #--------------------------------------------------------------------------
  1973.   # ● 項目の描画
  1974.   #--------------------------------------------------------------------------
  1975.   def draw_item(index)
  1976.     item = @data[index]
  1977.     rect = item_rect(index)
  1978.     draw_item_name(item, rect.x, rect.y, enable?(item))
  1979.     rect.width -= 4
  1980.     draw_text(rect, price(item), 2)
  1981.   end
  1982. end

点评

截图  发表于 2016-5-22 09:25
阁下 393行错误 请阁下看看  发表于 2016-5-20 22:14
现在还能改名吗qwq
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 13:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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