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

Project1

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

[已经解决] 关于整合系统如何制作暴击/闪避/命中的饰品

[复制链接]

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
跳转到指定楼层
1
发表于 2014-6-3 13:32:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 上贺茂润 于 2014-6-3 13:44 编辑

@丁凯乐 @美丽晨露 @铃仙·优昙华院·因幡 @弗雷德 @完全默认 @火烧兔子 @星尘泪 @王硕 @小九九 @正太君
这里是随机属性和详尽帮助的脚本 请正太小九九或者乐乐做一个饰品,增加暴击 命中 和 闪避 三项属性,有500糖相送哦~


RUBY 代码复制
  1. #==============================================================================
  2. # 复杂装备系统之随机属性 by 沉影不器
  3. # protosssonny修改版
  4. #------------------------------------------------------------------------------
  5. # 神宝 只要弄饰品的暴击 闪避 和命中就好了,其他武器 防具 头部 都不用,最好是在饰品的
  6. #备注里写 暴击+N 然后就显示+N
  7. #==============================================================================
  8. # 参数设定
  9. #==============================================================================
  10. module Game_Equip
  11.   ## 最大附加属性数
  12.   GiftMax = 7
  13.   ## 附加属性影响价格基数
  14.   GiftPrice = 10
  15.   ## 极品爆率最低值和最高值(0到100)
  16.   Equip_Chance = [10, 90]  
  17.  
  18.   ## 附加属性各参数:
  19.   ##     name    添加到装备前的修饰词
  20.   ##     max     该属性最大值
  21.   ##     weight  权重(最大值的权重,用于计算价值,用于计算颜色也行)
  22.   ##     percent 是否按百分比计算
  23.   Gift = Struct.new(:name, :max, :weight, :percent)
  24. Gifts = [
  25.      # 攻击
  26.      Gift.new("", 60, 40, false),
  27.      Gift.new("", 10, 40, true),
  28.      # 防御
  29.      Gift.new("", 60, 40, false),
  30.      Gift.new("", 10, 40, true),
  31.      # 精神
  32.      Gift.new("", 60, 40, false),
  33.      Gift.new("", 10, 40, true),
  34.      # 敏捷
  35.      Gift.new("", 60, 40, false),
  36.      Gift.new("", 10, 40, true),
  37.      # hp
  38.      Gift.new("", 800, 40, false),
  39.      Gift.new("", 10, 40, true),
  40.      # mp
  41.      Gift.new("", 120, 40, false),
  42.      Gift.new("", 10, 40, true),
  43.      # 命中
  44.      Gift.new("", 12, 50,false),
  45.      # 闪避
  46.      Gift.new("", 12, 50, false),
  47.      # 暴击
  48.      Gift.new("", 10, 60, false),
  49.      # 所有主要属性,最多+20%
  50.      Gift.new("", 6, 50, true),
  51.      Gift.new("", 25, 50, false),
  52.      # 抗魔性  ###(待定)
  53.      Gift.new("", 30, 40, true)
  54.   ]
  55. end
  56.  
  57.  
  58. #==============================================================================
  59. # ■ Game_Equip 自定义装备模块
  60. #==============================================================================
  61. module Game_Equip
  62.   #--------------------------------------------------------------------------
  63.   # ● 物品(装备)重生
  64.   #    item:  物品
  65.   #    *gift: 附加属性(留空表示无属性,数字表示指定数量随机属性)
  66.   #--------------------------------------------------------------------------
  67.   def self.reini(item, *gift)
  68.     return if item.nil?
  69.     result = item.clone
  70.     gifts = *gift
  71.     gifts.flatten! if gifts.is_a? Array
  72.     case result
  73.     when RPG::Weapon
  74.    #   result.inidur
  75.       result.base_id = result.id
  76.       result.id = $data_weapons.size
  77.     when RPG::Armor
  78.    #   result.inidur
  79.       result.base_id = result.id
  80.       result.id = $data_armors.size
  81.     end
  82.     ## 附加属性为空或指定为(0)时,直接返回母版
  83.     return self.result(result) if gifts.nil? or gifts == 0
  84.     ## 指定附加属性数量时
  85.     if gifts.is_a? Integer
  86.       ## 控制数量
  87.       num = [gifts, GiftMax].min
  88.       gifts = []
  89.       ## 随机生成指定数量的附加属性
  90.       rd = []
  91.       rd_1 = []
  92.       if item.is_a?(RPG::Weapon)
  93.         rd_1 = different_rand(PA::WEAPON_E.size - 1, num)
  94.         for i in 0...num
  95.           rd << PA::WEAPON_E[rd_1[i]]
  96.         end
  97.       end  
  98.       if item.is_a?(RPG::Armor)
  99.         case item.kind
  100.         when 0
  101.           rd_1 = different_rand(PA::SHIELD_E.size - 1, num)
  102.           for i in 0...num
  103.             rd << PA::SHIELD_E[rd_1[i]]
  104.           end
  105.         when 1
  106.           rd_1 = different_rand(PA::HELMET_E.size - 1, num)
  107.           for i in 0...num
  108.             rd << PA::HELMET_E[rd_1[i]]
  109.           end
  110.         when 2
  111.           rd_1 = different_rand(PA::CLOTHE_E.size - 1, num)
  112.           for i in 0...num
  113.             rd << PA::CLOTHE_E[rd_1[i]]
  114.           end
  115.         end  
  116.       end  
  117.       rd.each{|n| gifts.push Game_Gift.new(n)}
  118.     end
  119.     gifts = [gifts].flatten
  120.     return self.result(result) if gifts.empty?
  121.     ## 处理数据
  122.     result.gifts = gifts
  123.     name = ""
  124.     price = 0
  125.     name_num = 0
  126.     name_type = ["良好的","精致的","上乘的","稀有的","卓越的","传颂的","史诗的"] if item.is_a?(RPG::Weapon)
  127.     name_type = ["良好的","精致的","上乘的","稀有的","卓越的","传颂的","史诗的"] if item.is_a?(RPG::Armor)
  128.     for gift in gifts
  129.       name_num += 1
  130.       price += (result.price/2)
  131.     end
  132.     ## 设定名称
  133.     if item.id == PA::CRYSTAL and item.is_a?(RPG::Armor)
  134.       if gifts.size > 0
  135.         result.name = "属性水晶[带属性]"
  136.         result.text_color = 12
  137.       end  
  138.     else
  139.       name = name_type[name_num - 1]
  140.       result.name =  name + "·" + result.name
  141.       ## 设定价格
  142.       result.price += price.round
  143.       ## 设定颜色
  144.       case gifts.size
  145.       when 1
  146.         result.text_color = 12
  147.       when 2
  148.         result.text_color = 29
  149.       when 3
  150.         result.text_color = 17
  151.       when 4
  152.         result.text_color = 30
  153.       when 5
  154.         result.text_color = 26
  155.       when 6
  156.         result.text_color = 20
  157.       when 7
  158.         result.text_color = 10
  159.       end
  160.     end
  161.     return self.result(result)
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 返回结果
  165.   #    item: 物品
  166.   #--------------------------------------------------------------------------
  167.   def self.result(item)
  168.     case item
  169.     when RPG::Item
  170.  
  171.     when RPG::Weapon
  172.       item.id = $data_weapons.size
  173.       $data_weapons << item
  174.     when RPG::Armor
  175.       item.id = $data_armors.size
  176.       $data_armors << item
  177.     end
  178.     return item
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 物品(装备)重生
  182.   #    item_id: 物品id
  183.   #    type:    类型
  184.   #    *gift:   附加属性(留空表示无属性,数字表示指定数量随机属性)
  185.   #--------------------------------------------------------------------------
  186.   def self.reini_id(item_id, type, *gift)
  187.     ## 排除装备id为零的情况
  188.     return 0 if item_id == 0
  189.     case type
  190.     when 0
  191.       item = $base_weapons[item_id]
  192.       item.base_id = item_id
  193.     when 1
  194.       item = $base_armors[item_id]
  195.       item.base_id = item_id
  196.     end
  197.     return self.reini(item, *gift).id
  198.   end
  199. end
  200.  
  201. #==============================================================================
  202. # ■ Game_Gift 装备附加能力
  203. #==============================================================================
  204. class Game_Gift
  205.   include Game_Equip
  206.   #--------------------------------------------------------------------------
  207.   # ● 读取口
  208.   #--------------------------------------------------------------------------
  209.   attr_reader   :type
  210.   attr_reader   :value
  211.   attr_reader   :name
  212.   #--------------------------------------------------------------------------
  213.   # ● 初始化
  214.   #--------------------------------------------------------------------------
  215.   def initialize(type = nil, value = nil)
  216.     get_type(type)
  217.     get_value(value)
  218.     get_name
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 获取属性
  222.   #--------------------------------------------------------------------------
  223.   def get_type(type)
  224.     unless type.nil? or type > Gifts.size or type < 0
  225.       @type = type
  226.     else
  227.       @type = rand(Gifts.size - 1)
  228.     end
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 获取品质值
  232.   #--------------------------------------------------------------------------
  233.   def get_value(value)
  234.     unless value.nil? or value.abs > max
  235.       @value = value
  236.     else
  237.       a = $game_variables[3]+rand(1 + $game_variables[4])
  238.       @value = max * a / 100
  239.       @value = 1 if @value == 0
  240.       @value = max if @value >= max
  241.     end  
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 获取名称
  245.   #--------------------------------------------------------------------------
  246.   def get_name
  247.     names = Gifts[@type].name.split(/,/)
  248.     n = (@value.abs-1)/(max.to_f/names.size)
  249.     @name = names[n.truncate]
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 获取最大值
  253.   #--------------------------------------------------------------------------
  254.   def max
  255.     return Gifts[@type].max
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 获取权重
  259.   #--------------------------------------------------------------------------
  260.   def weight
  261.     return @value > 0 ? @value / max.to_f * Gifts[@type].weight : 0
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 获取是否百分比
  265.   #--------------------------------------------------------------------------
  266.   def percent
  267.     return Gifts[@type].percent
  268.   end
  269.  
  270.   #--------------------------------------------------------------------------
  271.   # ● 攻击力
  272.   #--------------------------------------------------------------------------
  273.   def atk(actor_id)
  274.     # 无角色信息时返回
  275.     return 0 unless actor_id
  276.     # 数据类型不符时返回
  277.     return 0 if @type != 0 and @type != 1
  278.     if percent
  279.       return $game_actors[actor_id].self_atk * @value / 100
  280.     else
  281.       return @value
  282.     end
  283.   end
  284.   #--------------------------------------------------------------------------
  285.   # ● 防御力
  286.   #--------------------------------------------------------------------------
  287.   def def(actor_id)
  288.     # 无角色信息时返回
  289.     return 0 unless actor_id
  290.     # 数据类型不符时返回
  291.     return 0 if @type != 2 and @type != 3
  292.     if percent
  293.       return $game_actors[actor_id].self_def * @value / 100
  294.     else
  295.       return @value
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ● 精神
  300.   #--------------------------------------------------------------------------
  301.   def spi(actor_id)
  302.     # 无角色信息时返回
  303.     return 0 unless actor_id
  304.     # 数据类型不符时返回
  305.     return 0 if @type != 4 and @type != 5
  306.     if percent
  307.       return $game_actors[actor_id].self_spi * @value / 100
  308.     else
  309.       return @value
  310.     end
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ● 敏捷
  314.   #--------------------------------------------------------------------------
  315.   def agi(actor_id)
  316.     # 无角色信息时返回
  317.     return 0 unless actor_id
  318.     # 数据类型不符时返回
  319.     return 0 if @type != 6 and @type != 7
  320.     if percent
  321.       return $game_actors[actor_id].self_agi * @value / 100
  322.     else
  323.       return @value
  324.     end
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● maxhp
  328.   #--------------------------------------------------------------------------
  329.   def maxhp(actor_id)
  330.     # 无角色信息时返回
  331.     return 0 unless actor_id
  332.     # 数据类型不符时返回
  333.     return 0 if @type != 8 and @type != 9
  334.     if percent
  335.       return $game_actors[actor_id].self_maxhp * @value / 100
  336.     else
  337.       return @value
  338.     end
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ● maxmp
  342.   #--------------------------------------------------------------------------
  343.   def maxmp(actor_id)
  344.     # 无角色信息时返回
  345.     return 0 unless actor_id
  346.     # 数据类型不符时返回
  347.     return 0 if @type != 10 and @type != 11
  348.     if percent
  349.       return $game_actors[actor_id].self_maxmp * @value / 100
  350.     else
  351.       return @value
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 命中
  356.   #--------------------------------------------------------------------------
  357.   def hit
  358.     # 数据类型不符时返回
  359.     return 0 if @type != 12
  360.     return @value
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ● 闪避
  364.   #--------------------------------------------------------------------------
  365.   def eva
  366.     # 数据类型不符时返回
  367.     return 0 if @type != 13
  368.     return @value
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ● 暴击
  372.   #--------------------------------------------------------------------------
  373.   def cri
  374.     # 数据类型不符时返回
  375.     return 0 if @type != 14
  376.     return @value
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ● 所有主要属性
  380.   #--------------------------------------------------------------------------
  381.   def all_atribute(actor_id)
  382.     # 无角色信息时返回
  383.     return 0 unless actor_id
  384.     # 数据类型不符时返回
  385.     return 0 if @type != 15 and @type != 16
  386.      if percent
  387.       return $game_actors[actor_id].self_maxmp * @value / 100
  388.     else
  389.       return @value
  390.     end
  391.   end
  392.   #--------------------------------------------------------------------------
  393.   # ● 抗魔性
  394.   #--------------------------------------------------------------------------
  395.   def mdf
  396.     # 数据类型不符时返回
  397.     return 0 if @type != 16
  398.     return @value
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ● 经验(百分比)(舍弃本属性)
  402.   #--------------------------------------------------------------------------
  403.   def exp
  404.     # 数据类型不符时返回
  405.     return 0 #if @type != 15
  406.     #return @value
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● 高级装备暴率(百分比)(舍弃本属性)
  410.   #--------------------------------------------------------------------------
  411.   def equip_chance
  412.     # 数据类型不符时返回
  413.     return 0 #if @type != 16
  414.     #return @value
  415.   end
  416. end
  417. #==============================================================================
  418. # ■ RPG::BaseItem
  419. #==============================================================================
  420. module RPG
  421.   class BaseItem
  422.     ## 颜色
  423.     attr_accessor :text_color
  424.   end
  425. end
  426. #==============================================================================
  427. # ■ RPG::Weapon
  428. #==============================================================================
  429. module RPG
  430.   class Weapon < BaseItem
  431.     #------------------------------------------------------------------------
  432.     # 附加属性
  433.     #------------------------------------------------------------------------
  434.     attr_accessor :base_id
  435.     attr_accessor :actor_id
  436.     attr_accessor :gifts
  437.     #------------------------------------------------------------------------
  438.     # 装备基本属性定义
  439.     #------------------------------------------------------------------------
  440.     def base_atk
  441.       return @atk
  442.     end
  443.     def base_def
  444.       return @def
  445.     end
  446.     def base_spi
  447.       return @spi
  448.     end
  449.     def base_agi
  450.       return @agi
  451.     end
  452.     #------------------------------------------------------------------------
  453.     # 攻击力(合)
  454.     #------------------------------------------------------------------------
  455.     def atk
  456.       n = @atk
  457.       [url=home.php?mod=space&uid=322055]@gifts[/url] = [] if @gifts.nil?
  458.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  459.       if @dur > 0
  460.         for g in @gifts.compact do n += g.atk(actor_id) end
  461.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  462.       end
  463.       return n
  464.     end
  465.     #------------------------------------------------------------------------
  466.     # 防御力(合)
  467.     #------------------------------------------------------------------------
  468.     def def
  469.       n = @def
  470.       [url=home.php?mod=space&uid=322055]@gifts[/url] = [] if @gifts.nil?
  471.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  472.       if @dur > 0
  473.         for g in @gifts.compact do n += g.def(actor_id) end
  474.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  475.       end  
  476.       return n
  477.     end
  478.     #------------------------------------------------------------------------
  479.     # 魔力(合)
  480.     #------------------------------------------------------------------------
  481.     def spi
  482.       n = @spi
  483.       @gifts = [] if @gifts.nil?
  484.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  485.       if @dur > 0
  486.         for g in @gifts.compact do n += g.spi(actor_id) end
  487.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  488.       end   
  489.       return n
  490.     end
  491.     #------------------------------------------------------------------------
  492.     # 敏捷(合)
  493.     #------------------------------------------------------------------------
  494.     def agi
  495.       n = @agi
  496.       @gifts = [] if @gifts.nil?
  497.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  498.       if @dur > 0
  499.         for g in @gifts.compact do n += g.agi(actor_id) end
  500.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  501.       end   
  502.       return n
  503.     end
  504.     #------------------------------------------------------------------------
  505.     # 最大hp(合)
  506.     #------------------------------------------------------------------------
  507.     def maxhp
  508.       n = 0
  509.       @gifts = [] if @gifts.nil?
  510.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  511.       if @dur > 0
  512.         for g in @gifts.compact do n += g.maxhp(actor_id) end
  513.       end  
  514.       return n
  515.     end
  516.     #------------------------------------------------------------------------
  517.     # 最大mp(合)
  518.     #------------------------------------------------------------------------
  519.     def maxmp
  520.       n = 0
  521.       @gifts = [] if @gifts.nil?
  522.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  523.       if @dur > 0
  524.         for g in @gifts.compact do n += g.maxmp(actor_id) end
  525.       end   
  526.       return n
  527.     end
  528.     #------------------------------------------------------------------------
  529.     # 命中率(合)
  530.     #------------------------------------------------------------------------
  531.     def hit
  532.       n = @hit
  533.       @gifts = [] if @gifts.nil?
  534.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  535.       if @dur > 0
  536.         for g in @gifts.compact do n += g.hit end#这只是武器
  537.           #如果二刀流解决不了就改武器的命中,星标 命中率最终 这是一个双重判断 miss和回避的判断
  538.         n = 100 if n > 100
  539.       end  
  540.       return n
  541.     end
  542.     #------------------------------------------------------------------------
  543.     # 闪避率(合)
  544.     #------------------------------------------------------------------------
  545.     def eva
  546.       n = 0
  547.       @gifts = [] if @gifts.nil?
  548.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  549.       if @dur > 0
  550.         for g in @gifts.compact do n += g.eva end
  551.         n = 100 if n > 100
  552.       end
  553.       return n
  554.     end
  555.     #------------------------------------------------------------------------
  556.     # 暴击率(合)
  557.     #------------------------------------------------------------------------
  558.     def cri
  559.       n = 0
  560.       @gifts = [] if @gifts.nil?
  561.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  562.       if @dur > 0
  563.         for g in @gifts.compact do n += g.cri end
  564.         n = 100 if n > 100
  565.       end  
  566.       return n
  567.     end
  568.     #--------------------------------------------------------------------------
  569.     # ● 经验(百分比)(已舍弃不用)
  570.     #--------------------------------------------------------------------------
  571.     def exp
  572.       n = 0
  573.       @gifts = [] if @gifts.nil?
  574.       for g in @gifts.compact do n += g.exp end
  575.       return n
  576.     end
  577.     #--------------------------------------------------------------------------
  578.     # ● 高级装备暴率(百分比)(已舍弃不用)
  579.     #--------------------------------------------------------------------------
  580.     def equip_chance
  581.       n = 0
  582.       @gifts = [] if @gifts.nil?
  583.       for g in @gifts.compact do n += g.equip_chance end
  584.       return n
  585.     end
  586.   end
  587. end
  588. #==============================================================================
  589. # ■ RPG::Armor
  590. #==============================================================================
  591. module RPG
  592.   class Armor < BaseItem
  593.     #------------------------------------------------------------------------
  594.     # 附加属性
  595.     #------------------------------------------------------------------------
  596.     attr_accessor :base_id
  597.     attr_accessor :actor_id
  598.     attr_accessor :gifts
  599.     #------------------------------------------------------------------------
  600.     # 装备基本属性定义
  601.     #------------------------------------------------------------------------
  602.     def base_atk
  603.       return @atk
  604.     end
  605.     def base_def
  606.       return @def
  607.     end
  608.     def base_spi
  609.       return @spi
  610.     end
  611.     def base_agi
  612.       return @agi
  613.     end
  614.     #------------------------------------------------------------------------
  615.     # 攻击力(合)
  616.     #------------------------------------------------------------------------
  617.     def atk
  618.       n = @atk
  619.       @gifts = [] if @gifts.nil?
  620.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  621.       if @dur > 0
  622.         for g in @gifts.compact do n += g.atk(actor_id) end
  623.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  624.       end   
  625.       return n
  626.     end
  627.     #------------------------------------------------------------------------
  628.     # 防御力(合)
  629.     #------------------------------------------------------------------------
  630.     def def
  631.       n = @def
  632.       @gifts = [] if @gifts.nil?
  633.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  634.       if @dur > 0
  635.         for g in @gifts.compact do n += g.def(actor_id) end
  636.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  637.       end
  638.       return n
  639.     end
  640.     #------------------------------------------------------------------------
  641.     # 魔力(合)
  642.     #------------------------------------------------------------------------
  643.     def spi
  644.       n = @spi
  645.       @gifts = [] if @gifts.nil?
  646.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  647.       if @dur > 0
  648.         for g in @gifts.compact do n += g.spi(actor_id) end
  649.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  650.       end
  651.       return n
  652.     end
  653.     #------------------------------------------------------------------------
  654.     # 敏捷(合)
  655.     #------------------------------------------------------------------------
  656.     def agi
  657.       n = @agi
  658.       @gifts = [] if @gifts.nil?
  659.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  660.       if @dur > 0
  661.         for g in @gifts.compact do n += g.agi(actor_id) end
  662.         for g in @gifts.compact do n += g.all_atribute(actor_id) end
  663.       end
  664.       return n
  665.     end
  666.     #------------------------------------------------------------------------
  667.     # 最大hp(合)
  668.     #------------------------------------------------------------------------
  669.     def maxhp
  670.       n = 0
  671.       @gifts = [] if @gifts.nil?
  672.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  673.       if @dur > 0
  674.         for g in @gifts.compact do n += g.maxhp(actor_id) end
  675.       end   
  676.       return n
  677.     end
  678.     #------------------------------------------------------------------------
  679.     # 最大mp(合)
  680.     #------------------------------------------------------------------------
  681.     def maxmp
  682.       n = 0
  683.       @gifts = [] if @gifts.nil?
  684.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  685.       if @dur > 0
  686.         for g in @gifts.compact do n += g.maxmp(actor_id) end
  687.       end   
  688.       return n
  689.     end
  690.     #------------------------------------------------------------------------
  691.     # 命中率(合)
  692.     #------------------------------------------------------------------------
  693.     def hit
  694.       n = 0
  695.       @gifts = [] if @gifts.nil?
  696.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  697.       if @dur > 0
  698.         for g in @gifts.compact do n += g.hit end
  699.       end
  700.       n = 100 if n > 100
  701.       return n
  702.     end
  703.     #------------------------------------------------------------------------
  704.     # 闪避率(合)
  705.     #------------------------------------------------------------------------
  706.     def eva
  707.       n = @eva
  708.       @gifts = [] if @gifts.nil?
  709.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  710.       if @dur > 0
  711.         for g in @gifts.compact do n += g.eva end
  712.       end  
  713.       n = 100 if n > 100
  714.       return n
  715.     end
  716.     #------------------------------------------------------------------------
  717.     # 暴击率(合)
  718.     #------------------------------------------------------------------------
  719.     def cri
  720.       n = 0
  721.       @gifts = [] if @gifts.nil?
  722.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  723.       if @dur > 0
  724.         for g in @gifts.compact do n += g.cri end
  725.       end
  726.       n = 100 if n > 100
  727.       return n
  728.     end
  729.     #------------------------------------------------------------------------
  730.     # 抗魔性(合)
  731.     #------------------------------------------------------------------------
  732.     def mdf
  733.       n = 0
  734.       @gifts = [] if @gifts.nil?
  735.       @dur = self.read_note('耐久度').to_i if @dur.nil?
  736.       if @dur > 0
  737.         for g in @gifts.compact do n += g.mdf end
  738.       end  
  739.       return n
  740.     end
  741.     #--------------------------------------------------------------------------
  742.     # ● 经验(百分比)(已舍弃不用)
  743.     #--------------------------------------------------------------------------
  744.     def exp
  745.       n = 0
  746.       @gifts = [] if @gifts.nil?
  747.       for g in @gifts.compact do n += g.exp end
  748.       return n
  749.     end
  750.     #--------------------------------------------------------------------------
  751.     # ● 高级装备暴率(百分比)(已舍弃不用)
  752.     #--------------------------------------------------------------------------
  753.     def equip_chance
  754.       n = 0
  755.       @gifts = [] if @gifts.nil?
  756.       for g in @gifts.compact do n += g.equip_chance end
  757.       return n
  758.     end
  759.   end
  760. end
  761. #==============================================================================
  762. # ■ Game_Actor
  763. #==============================================================================
  764. class Game_Actor < Game_Battler
  765.   #--------------------------------------------------------------------------
  766.   # ● 基本 MaxHP の取得
  767.   #--------------------------------------------------------------------------
  768.   def base_maxhp
  769.     n = actor.parameters[0, @level]
  770.     for item in equips.compact do n += item.maxhp  end
  771.     return n
  772.   end
  773.   #--------------------------------------------------------------------------
  774.   # ● 获取基本 MaxMP
  775.   #--------------------------------------------------------------------------
  776.   def base_maxmp
  777.     n = actor.parameters[1, @level]
  778.     for item in equips.compact do n += item.maxmp  end  
  779.     return n
  780.   end
  781.   #--------------------------------------------------------------------------
  782.   # ● 获取自身 MaxHP
  783.   #--------------------------------------------------------------------------
  784.   def self_maxhp
  785.     return actor.parameters[0, @level]
  786.   end
  787.   #--------------------------------------------------------------------------
  788.   # ● 获取自身 MaxMP
  789.   #--------------------------------------------------------------------------
  790.   def self_maxmp
  791.     return actor.parameters[1, @level]
  792.   end
  793.   #--------------------------------------------------------------------------
  794.   # ● 获取自身攻击力
  795.   #--------------------------------------------------------------------------
  796.   def self_atk
  797.     return actor.parameters[2, @level]
  798.   end
  799.   #--------------------------------------------------------------------------
  800.   # ● 获取自身防御力
  801.   #--------------------------------------------------------------------------
  802.   def self_def
  803.     return actor.parameters[3, @level]
  804.   end
  805.   #--------------------------------------------------------------------------
  806.   # ● 获取自身精神力
  807.   #--------------------------------------------------------------------------
  808.   def self_spi
  809.     return actor.parameters[4, @level]
  810.   end
  811.   #--------------------------------------------------------------------------
  812.   # ● 获取自身敏捷性
  813.   #--------------------------------------------------------------------------
  814.   def self_agi
  815.     return actor.parameters[5, @level]
  816.   end
  817.   #--------------------------------------------------------------------------
  818.   # ● 获取命中率
  819.   #--------------------------------------------------------------------------
  820.   def hit
  821.     n = 50+(self.agi/15.0).round
  822.     for e in equips.compact do n += e.hit  end #★不摒弃装备命中
  823.     n = 100 if n > 100
  824.     return n
  825.   end
  826.   #--------------------------------------------------------------------------
  827.   # ● 获取回避率
  828.   #--------------------------------------------------------------------------
  829.   def eva
  830.     n = 5+(self.agi/25.0).round
  831.     for e in equips.compact do n += e.eva  end
  832.     n = 100 if n > 100
  833.     return n
  834.   end
  835.   #--------------------------------------------------------------------------
  836.   # ● 获取会心一击概率
  837.   #--------------------------------------------------------------------------
  838.   def cri
  839.     n = 4+(self.agi/25.0).round
  840.     n = 5+((self.agi/25.0)*1.1) if actor.critical_bonus
  841.     for e in equips.compact do n += e.cri   end
  842.     n = 100 if n > 100
  843.     return n
  844.   end
  845.   #--------------------------------------------------------------------------
  846.   # ● 获取抗魔性(等于(魔力+防御)的20分之1)
  847.   #--------------------------------------------------------------------------
  848.   def mdf
  849.     mdf = (self.spi + self.def) / 20
  850.     for e in equips.compact do mdf += equip.mdf  end
  851.     return mdf
  852.   end
  853.   #--------------------------------------------------------------------------
  854.   # ● 获取更多经验值(已舍弃不用)
  855.   #--------------------------------------------------------------------------
  856.   def exp_added
  857.     exp = 100
  858.     for equip in equips.compact
  859.       exp += equip.exp
  860.     end
  861.     return exp
  862.   end
  863.   #--------------------------------------------------------------------------
  864.   # ● 获取高级物品暴率(已舍弃不用)
  865.   #--------------------------------------------------------------------------
  866.   def equip_chance
  867.     equip_chance = 0
  868.     for equip in equips.compact
  869.       equip_chance += equip.equip_chance
  870.     end
  871.     return equip_chance
  872.   end
  873.   #--------------------------------------------------------------------------
  874.   # ● 获得经验值 (考虑到附加经验值)(舍弃不用)
  875.   #     exp  : 经验值增加量
  876.   #     show : 显示升级标志
  877.   #--------------------------------------------------------------------------
  878. #~   def gain_exp(exp, show)
  879. #~     change_exp([url=home.php?mod=space&uid=13302]@exp[/url] + exp * exp_added, show)
  880. #~   end
  881. end
  882. #==============================================================================
  883. # ■ Game_Actor
  884. #==============================================================================
  885. class Game_Actor < Game_Battler
  886.   #--------------------------------------------------------------------------
  887.   # ● 初始化对象
  888.   #     actor_id : 角色 ID
  889.   #--------------------------------------------------------------------------
  890.   def initialize(actor_id)
  891.     super()
  892.     setup(actor_id)
  893.     @last_skill_id = 0
  894.   end
  895.   #--------------------------------------------------------------------------
  896.   # ● 设置
  897.   #     actor_id : 角色 ID
  898.   #--------------------------------------------------------------------------
  899.   def setup(actor_id)
  900.     actor = $data_actors[actor_id]
  901.     @actor_id = actor_id
  902.     @name = actor.name
  903.     @character_name = actor.character_name
  904.     @character_index = actor.character_index
  905.     @face_name = actor.face_name
  906.     @face_index = actor.face_index
  907.     @class_id = actor.class_id
  908.     @weapon_id = actor.weapon_id
  909.     @armor1_id = actor.armor1_id
  910.     @armor2_id = actor.armor2_id
  911.     @armor3_id = actor.armor3_id
  912.     @armor4_id = actor.armor4_id
  913.     [url=home.php?mod=space&uid=22147]@level[/url] = actor.initial_level
  914.     @exp_list = Array.new(101)
  915.     make_exp_list
  916.     [url=home.php?mod=space&uid=13302]@exp[/url] = @exp_list[@level]
  917.     @skills = []
  918.     for i in self.class.learnings
  919.       learn_skill(i.skill_id) if i.level <= @level
  920.     end
  921.     clear_extra_values
  922.     recover_all
  923.     ## 生成新装备id
  924.     reset_equip_id
  925.   end
  926.   #--------------------------------------------------------------------------
  927.   # ● 装备重设
  928.   #--------------------------------------------------------------------------
  929.   def reset_equip_id
  930.     @weapon_id = Game_Equip.reini_id(@weapon_id, 0)
  931.     @armor1_id = Game_Equip.reini_id(@armor1_id, two_hands_legal? ? 0 : 1)
  932.     @armor2_id = Game_Equip.reini_id(@armor2_id, 1)
  933.     @armor3_id = Game_Equip.reini_id(@armor3_id, 1)
  934.     @armor4_id = Game_Equip.reini_id(@armor4_id, 1)
  935.   end
  936.   #--------------------------------------------------------------------------
  937.   # ● 判断是否可以装备
  938.   #     item : 物品
  939.   #     base : 是否读取母版数据
  940.   #--------------------------------------------------------------------------
  941.   def equippable?(item, base = true)
  942.     return false if item.nil?
  943.     return false if self.level < item.read_note('装备等级').to_i
  944.     id = base ? item.base_id : item.id
  945.     if item.is_a?(RPG::Weapon)
  946.       return self.class.weapon_set.include?(id)
  947.     elsif item.is_a?(RPG::Armor)
  948.       return false if two_swords_style and item.kind == 0
  949.       return self.class.armor_set.include?(id)
  950.     end
  951.     return false
  952.   end
  953.   #--------------------------------------------------------------------------
  954.   # ● 更改装备 (指定对象)
  955.   #     equip_type : 装备部位 (0..4)
  956.   #     item       : 武器 or 防具 (nil 为解除装备)
  957.   #     test       : 测试标志 (战斗测试、以及装备画面的临时装备)
  958.   #--------------------------------------------------------------------------
  959.   def change_equip(equip_type, item, test = false)
  960.     last_item = equips[equip_type]
  961.     unless test
  962.       return if $game_party.item_number(item) == 0 if item != nil
  963.       $game_party.gain_item(last_item, 1)
  964.       $game_party.lose_item(item, 1)
  965.       last_item.actor_id = nil unless last_item.nil?
  966.     end
  967.     item_id = item == nil ? 0 : item.id
  968.     case equip_type
  969.     when 0  # 武器
  970.       @weapon_id = item_id
  971.       unless two_hands_legal?             # 违反双手拿取的情况下
  972.         change_equip(1, nil, test)        # 解除反手的装备
  973.       end
  974.     when 1  # 盾
  975.       @armor1_id = item_id
  976.       unless two_hands_legal?             # 违反双手拿取的情况下
  977.         change_equip(0, nil, test)        # 解除反手的装备
  978.       end
  979.     when 2  # 头
  980.       @armor2_id = item_id
  981.     when 3  # 身体
  982.       @armor3_id = item_id
  983.     when 4  # 装饰品
  984.       @armor4_id = item_id
  985.     end
  986.     item.actor_id = self.id unless item.nil?
  987.   end
  988. end
  989. #==============================================================================
  990. # ■ Game_Party
  991. #==============================================================================
  992. class Game_Party < Game_Unit
  993.   #--------------------------------------------------------------------------
  994.   # ● 判断持有的空属性的武器
  995.   #     item          : 物品
  996.   #--------------------------------------------------------------------------
  997.   def has_weapon_no_gifts?(item)
  998.     for i in items
  999.       if i.is_a?(RPG::Weapon)
  1000.         if i.gifts == nil or i.gifts == []
  1001.           return true if i.base_id == item.id
  1002.         end  
  1003.       end
  1004.     end
  1005.     return false
  1006.   end
  1007.   #--------------------------------------------------------------------------
  1008.   # ● 判断持有的空属性的防具
  1009.   #     item          : 物品
  1010.   #--------------------------------------------------------------------------
  1011.   def has_armor_no_gifts?(item)
  1012.     for i in items
  1013.       if i.is_a?(RPG::Armor)
  1014.         if i.gifts == nil or i.gifts == []
  1015.           return true if i.base_id == item.id
  1016.         end
  1017.       end
  1018.     end
  1019.     return false
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● 判断持有的武器,防止武器防具判断混淆
  1023.   #     item          : 物品
  1024.   #     include_equip : 包括装备品
  1025.   #--------------------------------------------------------------------------
  1026.   def has_weapon_by_base_id?(item, include_equip = false)
  1027.     for i in items
  1028.       if i.is_a?(RPG::Weapon)
  1029.         return true if i.base_id == item.id
  1030.       end
  1031.     end
  1032.     if include_equip
  1033.       for actor in members
  1034.         for e in actor.equips
  1035.           if e.is_a?(RPG::Weapon)
  1036.             return true if e.base_id == item.id
  1037.           end  
  1038.         end
  1039.       end
  1040.     end
  1041.     return false
  1042.   end
  1043.   #--------------------------------------------------------------------------
  1044.   # ● 判断持有的防具,防止武器防具判断混淆
  1045.   #     item          : 物品
  1046.   #     include_equip : 包括装备品
  1047.   #--------------------------------------------------------------------------
  1048.   def has_armor_by_base_id?(item, include_equip = false)
  1049.     for i in items
  1050.       if i.is_a?(RPG::Armor)
  1051.         return true if i.base_id == item.id
  1052.       end
  1053.     end
  1054.     if include_equip
  1055.       for actor in members
  1056.         for e in actor.equips
  1057.           if e.is_a?(RPG::Armor)
  1058.             return true if e.base_id == item.id
  1059.           end
  1060.         end  
  1061.       end
  1062.     end
  1063.     return false
  1064.   end
  1065.   #--------------------------------------------------------------------------
  1066.   # ● 判断持有的武器数量,可以用$game_party.weapon_num($base_weapons[301])判断301号防具的数量
  1067.   #     item          : 物品
  1068.   #--------------------------------------------------------------------------
  1069.   def weapon_num(item)
  1070.     num = 0
  1071.     for i in items
  1072.       if i.is_a?(RPG::Weapon)
  1073.         if i.base_id == item.id
  1074.           num +=1
  1075.         end
  1076.       end
  1077.     end
  1078.     return num
  1079.   end
  1080.   #--------------------------------------------------------------------------
  1081.   # ● 判断持有的防具数量
  1082.   #     item          : 物品
  1083.   #--------------------------------------------------------------------------
  1084.   def armor_num(item)
  1085.     num = 0
  1086.     for i in items
  1087.       if i.is_a?(RPG::Armor)
  1088.         if i.base_id == item.id
  1089.           num +=1
  1090.         end
  1091.       end
  1092.     end
  1093.     return num
  1094.   end
  1095.   #--------------------------------------------------------------------------
  1096.   # ● 获得物品
  1097.   #     item          : 物品
  1098.   #     n             : 个数
  1099.   #--------------------------------------------------------------------------
  1100.   def gain_reini(item, n, include_equip = false, *gift)
  1101.     if n < 0
  1102.       lose_item(item, -n, include_equip = false)
  1103.     else
  1104.       case item
  1105.       when RPG::Item
  1106.         number = item_number(item)
  1107.         @items[item.id] = [[number + n, 0].max, 9999].min
  1108.       when RPG::Weapon
  1109.         j = 1
  1110.         for i in 0...n
  1111.           while @item[j] != 0
  1112.             break if @item[j] == nil
  1113.             j += 1
  1114.           end
  1115.           @item[j] = item
  1116.           @weapon[j] = a = Game_Equip.reini(item, *gift)
  1117.           @weapon[j].gifts = [] if @weapon[j].gifts == nil
  1118.           @weapons[a.id] = 1
  1119.         end  
  1120.       when RPG::Armor
  1121.         j = 1
  1122.         for i in 0...n
  1123.           while @item[j] != 0
  1124.             break if @item[j] == nil
  1125.             j += 1
  1126.           end
  1127.           @item[j] = item
  1128.           @armor[j] = a = Game_Equip.reini(item, *gift)
  1129.           @armor[j].gifts = [] if @armor[j].gifts == nil
  1130.           @armors[a.id] = 1
  1131.         end      
  1132.       end   
  1133.     end   
  1134.   end
  1135.   #--------------------------------------------------------------------------
  1136.   # ● 减少物品 (减少),商店卖武器防具调用
  1137.   #     item          : 物品
  1138.   #     n             : 个数
  1139.   #     include_equip : 包括装备品
  1140.   #--------------------------------------------------------------------------
  1141.   def lose_reini(item, n, include_equip = false )
  1142.     number = item_number(item)
  1143.     case item
  1144.     when RPG::Item
  1145.       @items[item.id] = [[number - n, 0].max, 9999].min
  1146.     when RPG::Weapon
  1147.       @weapons[item.id] = [[number - n, 0].max, 9999].min
  1148.     when RPG::Armor
  1149.       @armors[item.id] = [[number - n, 0].max, 9999].min
  1150.     end
  1151.     n -= number
  1152.     if include_equip and n > 0
  1153.       for actor in members
  1154.         while n > 0 and actor.equips.include?(item)
  1155.           actor.discard_equip(item)
  1156.           n -= 1
  1157.         end
  1158.       end
  1159.     end
  1160.   end
  1161.   #--------------------------------------------------------------------------
  1162.   # ● 减少物品 (减少),为了不与商店卖东西冲突
  1163.   #     item          : 物品
  1164.   #     n             : 个数
  1165.   #     include_equip : 包括装备品
  1166.   #     type          : 全部丢失时要添丢失的装备种类,1、2、3分别对应物品、武器和防具
  1167.   #     all_lose      :全部丢失
  1168.   #--------------------------------------------------------------------------
  1169.   def weapon_armor_lose_reini(item, n, include_equip = false, type = nil, all_lose = false )
  1170.     return if n == 0
  1171.     unless all_lose == true
  1172.       number = item_number(item)
  1173.       case item
  1174.       when RPG::Item
  1175.         @items[item.id] = [[number - n, 0].max, 9999].min
  1176.       when RPG::Weapon
  1177.         for i in [email]0...@weapon.size[/email]
  1178.           unless @weapon[i] == nil
  1179.             if @weapon[i].base_id == item.id and @weapons[@weapon[i].id] == 1
  1180.               @weapons[@weapon[i].id] = 0
  1181.               n -= 1
  1182.               break if n == 0
  1183.             end
  1184.           end  
  1185.         end
  1186.       when RPG::Armor
  1187.         for i in [email]0...@armor.size[/email]
  1188.           unless @armor[i] == nil
  1189.             if @armor[i].base_id == item.id and @armors[@armor[i].id] == 1
  1190.               @armors[@armor[i].id] = 0
  1191.               n -= 1
  1192.               break if n == 0
  1193.             end
  1194.           end  
  1195.         end
  1196.       end
  1197.       n -= number
  1198.       if include_equip and n > 0
  1199.         for actor in members
  1200.           while n > 0 and actor.equips.include?(item)
  1201.             actor.discard_equip(item)
  1202.             n -= 1
  1203.           end
  1204.         end
  1205.       end
  1206.     else           #这里all_lose == false
  1207.       case type
  1208.       when  1
  1209.         for i in items
  1210.           if i.is_a?(RPG::Item)
  1211.             $game_party.lose_item(i, 9999)
  1212.           end  
  1213.         end  
  1214.       when  2
  1215.         for i in items
  1216.           if i.is_a?(RPG::Weapon)
  1217.             $game_party.lose_item(i, 99)
  1218.           end  
  1219.         end  
  1220.       when  3
  1221.         for i in items
  1222.           if i.is_a?(RPG::Armor)
  1223.             $game_party.lose_item(i, 99)
  1224.           end  
  1225.         end  
  1226.       end
  1227.     end
  1228.   end
  1229.   #--------------------------------------------------------------------------
  1230.   # ● 空属性物品减少,只减少属性为空的武器防具
  1231.   #     item          : 物品
  1232.   #     type          : 种类  武器=1 ,防具=2
  1233.   #     n             : 个数
  1234.   #--------------------------------------------------------------------------
  1235.   def gifts_nil_lose(item,type ,n)
  1236.     if type == 1
  1237.       weapons_num = 0
  1238.       for i in items
  1239.         if i.is_a?(RPG::Weapon)
  1240.           if i.gifts == nil or i.gifts == []
  1241.             if i.base_id == item.id
  1242.               weapons_num += 1
  1243.               @weapons[i.id] = 0
  1244.               break if n == weapons_num
  1245.             end  
  1246.           end   
  1247.         end
  1248.       end  
  1249.     elsif type == 2
  1250.       armors_num = 0
  1251.       for i in items
  1252.         if i.is_a?(RPG::Armor)
  1253.           if i.gifts == nil or i.gifts == []
  1254.             if i.base_id == item.id
  1255.               armors_num += 1
  1256.               @armors[i.id] = 0
  1257.               break if n == armors_num
  1258.             end  
  1259.           end  
  1260.         end   
  1261.       end
  1262.     end
  1263.   end  
  1264.   #--------------------------------------------------------------------------
  1265.   # ● 获得物品
  1266.   #     item_id       : 物品id
  1267.   #     type          : 类型(0物品, 1武器, 2防具)
  1268.   #     n             : 个数
  1269.   #--------------------------------------------------------------------------
  1270.   def gain_reini_byid(item_id, type, n, include_equip = false, *gift)
  1271.     case type
  1272.     when 0
  1273.       item = $data_items[item_id]
  1274.     when 1
  1275.       item = $base_weapons[item_id]
  1276.     when 2
  1277.       item = $base_armors[item_id]
  1278.     end
  1279.     gain_reini(item, n, include_equip, *gift)
  1280.   end
  1281.   #--------------------------------------------------------------------------
  1282.   # ● 极品爆率
  1283.   #--------------------------------------------------------------------------
  1284.   def equip_chance
  1285.     chance = Game_Equip::Equip_Chance[0]
  1286.     members.each {|actor| chance += actor.equip_chance}
  1287.     return chance
  1288.   end
  1289. end
  1290. #==============================================================================
  1291. # ■ Game_Troop
  1292. #==============================================================================
  1293. class Game_Troop < Game_Unit
  1294.   #--------------------------------------------------------------------------
  1295.   # ● 敌人角色名称后的文字表
  1296.   #--------------------------------------------------------------------------
  1297.   LETTER_TABLE = [ 'A','B','C','D','E','F','G','H','I','J',
  1298.                    'K','L','M','N','O','P','Q','R','S','T',
  1299.                    'U','V','W','X','Y','Z']                 
  1300.   #--------------------------------------------------------------------------
  1301.   # ● 按顺序排列数组
  1302.   #--------------------------------------------------------------------------
  1303.   def convert_integer_array(array)
  1304.     result = []
  1305.     array.each { |i|
  1306.       if i.is_a?(Range)
  1307.         result |= i.to_a
  1308.       elsif i.is_a?(Integer)
  1309.         result |= [i]
  1310.       end
  1311.     }
  1312.     return result
  1313.   end
  1314.   #--------------------------------------------------------------------------
  1315.   # ● 生成掉落装备与敌人队伍的对应列表
  1316.   #--------------------------------------------------------------------------
  1317.   def equip_id_table
  1318.     equip_table = PA::EQUIP_TABLE
  1319.     troop_lv = []
  1320.     troop_weapon = []
  1321.     troop_armor = []
  1322.     for i in 0...equip_table.size
  1323.       equip_table[i] = convert_integer_array(equip_table[i])
  1324.     end  
  1325.     for i in 0...equip_table.size
  1326.       troop_lv << equip_table[i] if i % 3 == 0
  1327.       troop_weapon << equip_table[i] if i % 3 == 1
  1328.       troop_armor << equip_table[i] if i % 3 == 2
  1329.     end
  1330.     for i in 0...troop_lv.size
  1331.       if troop_lv[i].include?(@troop_id)
  1332.         $random_weapon = troop_weapon[i][rand(troop_weapon[i].size)]
  1333.         $random_armor = troop_armor[i][rand(troop_armor[i].size)]
  1334.       end  
  1335.     end
  1336.   end                     
  1337.   #--------------------------------------------------------------------------
  1338.   # ● 生成掉落物品队列
  1339.   #--------------------------------------------------------------------------
  1340.   def make_drop_items
  1341.     drop_items = []
  1342.     # 每个死亡的敌人掉落物品
  1343.     # 除了属性水晶之外,数据库里面设计掉落装备无效化,掉落物品有效。
  1344.     for enemy in dead_members
  1345.       for di in [enemy.drop_item1, enemy.drop_item2]
  1346.         next if di.kind == 0
  1347.         next if rand(di.denominator) != 0
  1348.         if di.kind == 1         # 掉落物品
  1349.           drop_items.push($data_items[di.item_id])
  1350.         elsif di.kind == 2      # 掉落武器(无效)
  1351.  
  1352.         elsif di.kind == 3      # 掉落防具(除了属性水晶之外无效)
  1353.           item = reini_chance($base_armors[PA::CRYSTAL])
  1354.           drop_items.push(item)
  1355.         end  
  1356.       end
  1357.     end
  1358.     # 每个死亡的敌人掉落的装备计算
  1359.     for i in 0...dead_members.size
  1360.       equip_id_table
  1361.       if rand(100) < PA::DROP_PROBABILITY
  1362.         type = rand(4)
  1363.         case type
  1364.         when 0
  1365.           item = reini_chance($base_weapons[$random_weapon],true)
  1366.           drop_items.push(item)
  1367.         when 1,2,3  
  1368.           item = reini_chance($base_armors[$random_armor],true)
  1369.           drop_items.push(item)
  1370.         end
  1371.       end
  1372.     end  
  1373.     # 每胜利一次,默认属性水晶暴率
  1374.     drop_items.push(reini_chance($base_armors[PA::CRYSTAL])) if rand(PA::DROP_CRYSTAL_PRO) == 0
  1375.     return drop_items
  1376.   end
  1377.   #--------------------------------------------------------------------------
  1378.   # ● 处理极品爆率
  1379.   # normal_troop为false时,才可以获得4个属性以上的装备,用于BOSS装备的掉落
  1380.   #--------------------------------------------------------------------------
  1381.   def reini_chance(item, normal_troop = false)
  1382.     @item = item
  1383.     [url=home.php?mod=space&uid=115736]@Chance[/url] = 1 + rand(100)
  1384.     @gifts = []
  1385.     num = 0
  1386.     loop do
  1387.       if rand(80) <= [url=home.php?mod=space&uid=115736]@Chance[/url] and @gifts.size < Game_Equip::GiftMax
  1388.         @chance = @chance * 8 / 10
  1389.         num += 1
  1390.         break if num >= 3 and normal_troop == true #普通敌人最多掉落名器或名装
  1391.         break if num >= 6
  1392.       else
  1393.         break
  1394.       end
  1395.     end
  1396.     gifts = []
  1397.     rd = []
  1398.     rd_1 = []
  1399.     if item.is_a?(RPG::Weapon)
  1400.       rd_1 = different_rand(PA::WEAPON_E.size - 1, num)
  1401.       for i in 0...num
  1402.         rd << PA::WEAPON_E[rd_1[i]]
  1403.       end
  1404.     end  
  1405.     if item.is_a?(RPG::Armor)
  1406.       case item.kind
  1407.       when 0
  1408.         rd_1 = different_rand(PA::SHIELD_E.size - 1, num)
  1409.         for i in 0...num
  1410.           rd << PA::SHIELD_E[rd_1[i]]
  1411.         end
  1412.       when 1
  1413.         rd_1 = different_rand(PA::HELMET_E.size - 1, num)
  1414.         for i in 0...num
  1415.           rd << PA::HELMET_E[rd_1[i]]
  1416.         end
  1417.       when 2
  1418.         rd_1 = different_rand(PA::CLOTHE_E.size - 1, num)
  1419.         for i in 0...num
  1420.           rd << PA::CLOTHE_E[rd_1[i]]
  1421.         end
  1422.       end  
  1423.     end
  1424.     if @item.is_a?(RPG::Armor)
  1425.       if @item.id == PA::CRYSTAL
  1426.         return Game_Equip.reini(@item, [])
  1427.       else  
  1428.         rd.each{|n| gifts.push Game_Gift.new(n)}
  1429.         return Game_Equip.reini(@item, gifts)
  1430.       end
  1431.     else
  1432.       rd.each{|n| gifts.push Game_Gift.new(n)}
  1433.       return Game_Equip.reini(@item, gifts)
  1434.     end  
  1435.   end
  1436. end
  1437. #==============================================================================
  1438. # ■ Game_Interpreter
  1439. #==============================================================================
  1440. class Game_Interpreter
  1441.   #--------------------------------------------------------------------------
  1442.   # ● 计算操作的值
  1443.   #     operation    : 操作 (0:增加 1:减少)
  1444.   #     operand_type : 运算域类型 (0:常量 1:变量)
  1445.   #     operand      : 运算域 (数值为变量 ID)
  1446.   #--------------------------------------------------------------------------
  1447.   def operate_value(operation, operand_type, operand)
  1448.     if operand_type == 0
  1449.       value = operand
  1450.     else
  1451.       value = $game_variables[operand]
  1452.     end
  1453.     if operation == 1
  1454.       value = -value
  1455.     end
  1456.     return value
  1457.   end
  1458.   #--------------------------------------------------------------------------
  1459.   # ● 条件分歧
  1460.   #--------------------------------------------------------------------------
  1461.   def command_111
  1462.     result = false
  1463.     case @params[0]
  1464.     when 0  # 开关
  1465.       result = ($game_switches[@params[1]] == (@params[2] == 0))
  1466.     when 1  # 变量
  1467.       value1 = $game_variables[@params[1]]
  1468.       if @params[2] == 0
  1469.         value2 = @params[3]
  1470.       else
  1471.         value2 = $game_variables[@params[3]]
  1472.       end
  1473.       case @params[4]
  1474.       when 0  # 相等
  1475.         result = (value1 == value2)
  1476.       when 1  # 大于等于
  1477.         result = (value1 >= value2)
  1478.       when 2  # 小于等于
  1479.         result = (value1 <= value2)
  1480.       when 3  # 大于
  1481.         result = (value1 > value2)
  1482.       when 4  # 小于
  1483.         result = (value1 < value2)
  1484.       when 5  # 不等于
  1485.         result = (value1 != value2)
  1486.       end
  1487.     when 2  # 自我开关
  1488.       if @original_event_id > 0
  1489.         key = [@map_id, @original_event_id, @params[1]]
  1490.         if @params[2] == 0
  1491.           result = ($game_self_switches[key] == true)
  1492.         else
  1493.           result = ($game_self_switches[key] != true)
  1494.         end
  1495.       end
  1496.     when 3  # 计时器
  1497.       if $game_system.timer_working
  1498.         sec = $game_system.timer / Graphics.frame_rate
  1499.         if @params[2] == 0
  1500.           result = (sec >= @params[1])
  1501.         else
  1502.           result = (sec <= @params[1])
  1503.         end
  1504.       end
  1505.     when 4  # 角色
  1506.       actor = $game_actors[@params[1]]
  1507.       if actor != nil
  1508.         case @params[2]
  1509.         when 0  # 是同伴
  1510.           result = ($game_party.members.include?(actor))
  1511.         when 1  # 姓名
  1512.           result = (actor.name == @params[3])
  1513.         when 2  # 特技
  1514.           result = (actor.skill_learn?($data_skills[@params[3]]))
  1515.         when 3  # 武器
  1516.           ## 判断是否符合母版id
  1517.           actor.weapons.each do |weapon|
  1518.             if weapon.base_id == @params[3]
  1519.               result = true
  1520.               break
  1521.             end
  1522.           end
  1523.         when 4  # 防具
  1524.           ## 判断是否符合母版id
  1525.           actor.armors.each do |armor|
  1526.             if armor.base_id == @params[3]
  1527.               result = true
  1528.               break
  1529.             end
  1530.           end
  1531.         when 5  # 状态
  1532.           result = (actor.state?(@params[3]))
  1533.         end
  1534.       end
  1535.     when 5  # 敌方角色
  1536.       enemy = $game_troop.members[@params[1]]
  1537.       if enemy != nil
  1538.         case @params[2]
  1539.         when 0  # 出现
  1540.           result = (enemy.exist?)
  1541.         when 1  # 状态
  1542.           result = (enemy.state?(@params[3]))
  1543.         end
  1544.       end
  1545.     when 6  # 角色
  1546.       character = get_character(@params[1])
  1547.       if character != nil
  1548.         result = (character.direction == @params[2])
  1549.       end
  1550.     when 7  # 金钱
  1551.       if @params[2] == 0
  1552.         result = ($game_party.gold >= @params[1])
  1553.       else
  1554.         result = ($game_party.gold <= @params[1])
  1555.       end
  1556.     when 8  # 物品
  1557.       result = $game_party.has_item?($data_items[@params[1]])
  1558.     when 9  # 武器
  1559.       result = $game_party.has_weapon_by_base_id?($base_weapons[@params[1]], @params[2])
  1560.     when 10  # 防具
  1561.       result = $game_party.has_armor_by_base_id?($base_armors[@params[1]], @params[2])
  1562.     when 11  # 按钮
  1563.       result = Input.press?(@params[1])
  1564.     when 12  # 脚本
  1565.       result = eval(@params[1])
  1566.     when 13  # 交通工具
  1567.       result = ($game_player.vehicle_type == @params[1])
  1568.     end
  1569.     @branch[@indent] = result     # 将判断结果放置在缓存中
  1570.     if @branch[@indent] == true
  1571.       @branch.delete(@indent)
  1572.       return true
  1573.     end
  1574.     return command_skip
  1575.   end
  1576.   #--------------------------------------------------------------------------
  1577.   # ● 计算装备操作的值
  1578.   #     operand_type : 运算域类型 (0:常量 1:变量)
  1579.   #     operand      : 运算域 (数值为变量 ID)
  1580.   #--------------------------------------------------------------------------
  1581.   def opera_equip_value(operation, operand_type, operand)
  1582.     if operand_type == 0
  1583.       value = operand
  1584.     else
  1585.       value = $game_variables[operand]
  1586.     end
  1587.     return value
  1588.   end
  1589.   #--------------------------------------------------------------------------
  1590.   # ● 更改装备
  1591.   #--------------------------------------------------------------------------
  1592.   def command_319
  1593.     actor = $game_actors[@params[0]]
  1594.     if actor != nil
  1595.       actor.change_equip_by_id(@params[1], @params[2])
  1596.     end
  1597.     return true
  1598.   end
  1599.   #--------------------------------------------------------------------------
  1600.   # ● 增减武器
  1601.   #--------------------------------------------------------------------------
  1602.   def get_weapon(id, n, *gift)
  1603.     $game_party.gain_reini($base_weapons[id], n, false, *gift)
  1604.   end
  1605.   #--------------------------------------------------------------------------
  1606.   # ● 增减防具
  1607.   #--------------------------------------------------------------------------
  1608.   def get_armor(id, n, *gift)
  1609.     $game_party.gain_reini($base_armors[id], n, false, *gift)
  1610.   end
  1611. end
  1612. #==============================================================================
  1613. # ■ Window_Base
  1614. #==============================================================================
  1615. class Window_Base < Window
  1616.   def draw_item_name(item, x, y, enabled = true)
  1617.     if item != nil
  1618.       draw_icon(item.icon_index, x, y, enabled)
  1619.       self.contents.font.color = text_color(item.text_color.to_i)
  1620.       self.contents.font.color.alpha = enabled ? 255 : 128
  1621.       self.contents.draw_text(x + 24, y, 172, WLH, item.name)
  1622.     end
  1623.   end
  1624. end
  1625. #==============================================================================
  1626. # ■ Window_ShopBuy
  1627. #==============================================================================
  1628. class Window_ShopBuy < Window_Selectable
  1629.   #--------------------------------------------------------------------------
  1630.   # ● 刷新
  1631.   #--------------------------------------------------------------------------
  1632.   def refresh
  1633.     @data = []
  1634.     for goods_item in @shop_goods
  1635.       case goods_item[0]
  1636.       when 0
  1637.         item = $data_items[goods_item[1]]
  1638.       when 1
  1639.         item = $base_weapons[goods_item[1]]
  1640.       when 2
  1641.         item = $base_armors[goods_item[1]]
  1642.       end
  1643.       if item != nil
  1644.         @data.push(item)
  1645.       end
  1646.     end
  1647.     @item_max = @data.size
  1648.     create_contents
  1649.     for i in 0...@item_max
  1650.       draw_item(i)
  1651.     end
  1652.   end
  1653. end
  1654. #==============================================================================
  1655. # ■ Window_ShopStatus
  1656. #==============================================================================
  1657. class Window_ShopStatus < Window_Base
  1658.   #--------------------------------------------------------------------------
  1659.   # ● 描绘角色现在装备的能力值变化
  1660.   #     actor : 角色
  1661.   #     x     : 描画目标 X 坐标
  1662.   #     y     : 描画目标 Y 坐标
  1663.   #--------------------------------------------------------------------------
  1664.   def draw_actor_parameter_change(actor, x, y)
  1665.     return if @item.is_a?(RPG::Item)
  1666.     enabled = actor.equippable?(@item, false)
  1667.     self.contents.font.color = normal_color
  1668.     self.contents.font.color.alpha = enabled ? 255 : 128
  1669.     self.contents.draw_text(x, y, 200, WLH, actor.name)
  1670.     if @item.is_a?(RPG::Weapon)
  1671.       item1 = weaker_weapon(actor)
  1672.     elsif actor.two_swords_style and @item.kind == 0
  1673.       item1 = nil
  1674.     else
  1675.       item1 = actor.equips[1 + @item.kind]
  1676.     end
  1677.     if enabled
  1678.       if @item.is_a?(RPG::Weapon)
  1679.         atk1 = item1 == nil ? 0 : item1.atk
  1680.         atk2 = @item == nil ? 0 : @item.atk
  1681.         change = atk2 - atk1
  1682.       else
  1683.         def1 = item1 == nil ? 0 : item1.def
  1684.         def2 = @item == nil ? 0 : @item.def
  1685.         change = def2 - def1
  1686.       end
  1687.       self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2)
  1688.     end
  1689.     draw_item_name(item1, x, y + WLH, enabled)
  1690.   end
  1691. end
  1692. #==============================================================================
  1693. # ■ Scene_File
  1694. #==============================================================================
  1695. class Scene_File < Scene_Base
  1696.   #--------------------------------------------------------------------------
  1697.   # ● 写入存档数据
  1698.   #     file : 写入文件用对象 (已经打开)
  1699.   #--------------------------------------------------------------------------
  1700.   def write_save_data(file)
  1701.     characters = []
  1702.     for actor in $game_party.members
  1703.       characters.push([actor.character_name, actor.character_index])
  1704.     end
  1705.     $game_system.save_count += 1
  1706.     $game_system.version_id = $data_system.version_id
  1707.     @last_bgm = RPG::BGM::last
  1708.     @last_bgs = RPG::BGS::last
  1709.     Marshal.dump(characters,           file)
  1710.     Marshal.dump(Graphics.frame_count, file)
  1711.     Marshal.dump(@last_bgm,            file)
  1712.     Marshal.dump(@last_bgs,            file)
  1713.     Marshal.dump($game_system,         file)
  1714.     Marshal.dump($game_message,        file)
  1715.     Marshal.dump($game_switches,       file)
  1716.     Marshal.dump($game_variables,      file)
  1717.     Marshal.dump($game_self_switches,  file)
  1718.     Marshal.dump($game_actors,         file)
  1719.     Marshal.dump($game_party,          file)
  1720.     Marshal.dump($game_troop,          file)
  1721.     Marshal.dump($game_map,            file)
  1722.     Marshal.dump($game_player,         file)
  1723.     Marshal.dump($data_weapons,        file)
  1724.     Marshal.dump($data_armors,         file)
  1725.     Marshal.dump($data_skills,         file)
  1726.   end
  1727.   #--------------------------------------------------------------------------
  1728.   # ● 读取存档数据
  1729.   #     file : 读取文件用对象 (已经打开)
  1730.   #--------------------------------------------------------------------------
  1731.   def read_save_data(file)
  1732.     characters           = Marshal.load(file)
  1733.     Graphics.frame_count = Marshal.load(file)
  1734.     @last_bgm            = Marshal.load(file)
  1735.     @last_bgs            = Marshal.load(file)
  1736.     $game_system         = Marshal.load(file)
  1737.     $game_message        = Marshal.load(file)
  1738.     $game_switches       = Marshal.load(file)
  1739.     $game_variables      = Marshal.load(file)
  1740.     $game_self_switches  = Marshal.load(file)
  1741.     $game_actors         = Marshal.load(file)
  1742.     $game_party          = Marshal.load(file)
  1743.     $game_troop          = Marshal.load(file)
  1744.     $game_map            = Marshal.load(file)
  1745.     $game_player         = Marshal.load(file)
  1746.     $data_weapons        = Marshal.load(file)
  1747.     $data_armors         = Marshal.load(file)
  1748.     $data_skills         = Marshal.load(file)
  1749.     if $game_system.version_id != $data_system.version_id
  1750.       $game_map.setup($game_map.map_id)
  1751.       $game_player.center($game_player.x, $game_player.y)
  1752.     end
  1753.   end
  1754. end
  1755. #==============================================================================
  1756. # ■ Scene_Shop
  1757. #==============================================================================
  1758. class Scene_Shop < Scene_Base
  1759.   #--------------------------------------------------------------------------
  1760.   # ● 确定输入个数
  1761.   #--------------------------------------------------------------------------
  1762.   def decide_number_input
  1763.     Sound.play_shop
  1764.     @number_window.active = false
  1765.     @number_window.visible = false
  1766.     case @command_window.index
  1767.     when 0  # 购买
  1768.       $game_party.lose_gold(@number_window.number * @item.price)
  1769.       $game_party.gain_reini(@item, @number_window.number)
  1770.       @gold_window.refresh
  1771.       @buy_window.refresh
  1772.       @status_window.refresh
  1773.       @buy_window.active = true
  1774.       @buy_window.visible = true
  1775.     when 1  # 卖出
  1776.       $game_party.gain_gold(@number_window.number * (@item.price / 2))
  1777.       $game_party.lose_reini(@item, @number_window.number)
  1778.       @gold_window.refresh
  1779.       @sell_window.contents.clear
  1780.       @sell_window.set_item_sell(@itemcommand_window.commands[@command_index])
  1781.       @status_window.refresh
  1782.       @sell_window.active = true
  1783.       @sell_window.visible = true
  1784.       @status_window.visible = false
  1785.       @itemcommand_window.visible = true
  1786.     end
  1787.   end
  1788. end
  1789. #==============================================================================
  1790. # ■ Scene_Title
  1791. #==============================================================================
  1792. class Scene_Title < Scene_Base
  1793.   #--------------------------------------------------------------------------
  1794.   # ● 载入数据库
  1795.   #--------------------------------------------------------------------------
  1796.   def load_database
  1797.     $data_actors        = load_data("Data/Actors.rvdata")
  1798.     $data_classes       = load_data("Data/Classes.rvdata")
  1799.     $data_skills        = load_data("Data/Skills.rvdata")
  1800.     $data_items         = load_data("Data/Items.rvdata")
  1801.     $base_weapons       = load_data("Data/Weapons.rvdata")
  1802.     $base_armors        = load_data("Data/Armors.rvdata")
  1803.     $data_enemies       = load_data("Data/Enemies.rvdata")
  1804.     $data_troops        = load_data("Data/Troops.rvdata")
  1805.     $data_states        = load_data("Data/States.rvdata")
  1806.     $data_animations    = load_data("Data/Animations.rvdata")
  1807.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  1808.     $data_system        = load_data("Data/System.rvdata")
  1809.     $data_areas         = load_data("Data/Areas.rvdata")
  1810.     $data_weapons       = [nil]
  1811.     $data_armors        = [nil]
  1812.   end
  1813.   #--------------------------------------------------------------------------
  1814.   # ● 载入战斗测试用的数据库
  1815.   #--------------------------------------------------------------------------
  1816.   def load_bt_database
  1817.     $data_actors        = load_data("Data/BT_Actors.rvdata")
  1818.     $data_classes       = load_data("Data/BT_Classes.rvdata")
  1819.     $data_skills        = load_data("Data/BT_Skills.rvdata")
  1820.     $data_items         = load_data("Data/BT_Items.rvdata")
  1821.     $data_weapons       = load_data("Data/BT_Weapons.rvdata")
  1822.     $data_armors        = load_data("Data/BT_Armors.rvdata")
  1823.     $data_enemies       = load_data("Data/BT_Enemies.rvdata")
  1824.     $data_troops        = load_data("Data/BT_Troops.rvdata")
  1825.     $data_states        = load_data("Data/BT_States.rvdata")
  1826.     $data_animations    = load_data("Data/BT_Animations.rvdata")
  1827.     $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
  1828.     $data_system        = load_data("Data/BT_System.rvdata")
  1829.     $base_weapons       = $data_weapons
  1830.     $base_armors        = $data_armors
  1831.   end
  1832. end


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. # 原作:xuelong
  5. # 修正:水迭澜
  6. # 移植:禾西
  7. # protosssonny修改版
  8. #==============================================================================
  9. class Window_Help < Window_Base
  10.   #--------------------------------------------------------------------------
  11.   # ● 定義
  12.   #--------------------------------------------------------------------------
  13.   def set
  14.     @phrase,@y= {}, 0
  15.     @scope, @parameter_type = [], []
  16.    #@name_size = 名字文字大小
  17.    #@size = 描述文字大小
  18.    #@word = 每行的描述文字數
  19.     @name_size = 18
  20.     @size = 15
  21.     @word = 10
  22.  
  23.     # 不顯示的 屬性 與 狀態 ID
  24.     @unshow_elements = []
  25.     @unshow_states = []
  26.  
  27.     # 基本文字設定
  28.     @phrase[:price]          = "售价"
  29.     @phrase[:elements]       = "攻击属性"
  30.     @phrase[:states]         = "附加状态"
  31.     @phrase[:guard_elements] = "减半属性"
  32.     @phrase[:guard_states]   = "无效化状态"
  33.     #------------------#
  34.     #   物品效果語句   #
  35.     #------------------#
  36.     @phrase[:recover]      = "恢复"
  37.     @phrase[:hp]           = "HP"
  38.     @phrase[:mp]           = "MP"
  39.     @phrase[:plus_states]  = "状态附加"
  40.     @phrase[:minus_states] = "状态解除"
  41.     @phrase[:speed]        = "速度修正"
  42.     @phrase[:consumable]   = "消耗物品"
  43.     @phrase[:base_damage]  = "基本伤害"
  44.     #------------------#
  45.     #   特殊效果語句   #
  46.     #------------------#
  47.     @phrase[:special]          = "附带属性"
  48.     @phrase[:two_handed]       = "双手武器"
  49.     @phrase[:fast_attack]      = "先发制人"
  50.     @phrase[:dual_attack]      = "连续攻击"
  51.     @phrase[:critical_bonus]   = "频繁暴击"
  52.     @phrase[:prevent_critical] = "免疫暴击"
  53.     @phrase[:half_mp_cost]     = "耗魔减半"
  54.     @phrase[:double_exp_gain]  = "双倍经验"
  55.     @phrase[:auto_hp_recover]  = "自动恢复"
  56.     @phrase[:physical_attack]  = "物理攻击"
  57.     @phrase[:damage_to_mp]     = "魔法伤害"
  58.     @phrase[:absorb_damage]    = "伤害吸收"
  59.     @phrase[:ignore_defense]   = "无视防御"
  60.     #------------------#
  61.     #   技能描述語句   #
  62.     #------------------#
  63.     @phrase[:recovery] = "恢复力"
  64.     @phrase[:mp_cost]  = "消耗MP"
  65.     @phrase[:hit]      = "命中率"
  66.     #------------------#
  67.     #   效果範圍語句   #
  68.     #------------------#
  69.     @phrase[:scope]    = "效果范围"
  70.     @scope[0]  = "无"
  71.     @scope[1]  = "敌人"
  72.     @scope[2]  = "敌全体"
  73.     @scope[3]  = "敌单体 连续"
  74.     @scope[4]  = "一至二人"
  75.     @scope[5]  = "二至四人"
  76.     @scope[6]  = "四至十人"
  77.     @scope[7]  = "我方单体"
  78.     @scope[8]  = "我方全体"
  79.     @scope[9]  = "我方单个死亡者"
  80.     @scope[10] = "我方所有死亡者"
  81.     @scope[11] = "自己"
  82.     #------------------#
  83.     #   效果範圍語句   #
  84.     #------------------#
  85.     @parameter_type[1] = "MaxHP"
  86.     @parameter_type[2] = "MaxMP"
  87.     @parameter_type[3] = $data_system.terms.atk
  88.     @parameter_type[4] = $data_system.terms.def
  89.     @parameter_type[5] = $data_system.terms.spi
  90.     @parameter_type[6] = $data_system.terms.agi
  91.   end
  92.  
  93.   #--------------------------------------------------------------------------
  94.   # ● 初始化對象
  95.   #--------------------------------------------------------------------------
  96.   def initialize
  97.     super(240,0,608,WLH + 32)
  98.     self.opacity = 200
  99.     self.z = 150
  100.     self.visible = false
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 設置文本
  104.   #     data  : 窗口顯示的字符串/物品資料
  105.   #     align : 對齊方式 (0..左對齊、1..中間對齊、2..右對齊)
  106.   #--------------------------------------------------------------------------
  107.   def set_text(data, align=0)
  108.     #------------------------------------------------------------------------
  109.     # ● 當資料爲文字時候
  110.     #------------------------------------------------------------------------
  111.     if data != @text or align != @align
  112.       if data.is_a?(String)
  113.         draw_string(data,align)
  114.       end
  115.     end
  116.     return if data.is_a?(String)
  117.     #------------------------------------------------------------------------
  118.     # ● 當沒有資料時候
  119.     #------------------------------------------------------------------------
  120.     if data.nil?
  121.       self.visible=false
  122.     else
  123.       self.visible=true
  124.     end
  125.     #------------------------------------------------------------------------
  126.     # ● 當資料爲物品/技能時候
  127.     #------------------------------------------------------------------------
  128.     if data != nil && @data != data
  129.       self.width = 210
  130.       self.height = 430
  131.       self.x=0
  132.       self.y=200
  133.       set
  134.       draw_data(data)
  135.     else
  136.       return
  137.     end
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ● 更新帮助窗口
  141.   #--------------------------------------------------------------------------
  142.   def draw_string(data,align)
  143.     self.width = 608        #修正寬度
  144.     self.height = WLH + 32  #修正高度
  145.     self.x = 240            #修正 x 坐標
  146.     self.y = 0              #修正 y 坐標
  147.     @text = data            #記錄文本資料
  148.     @align = align          #記錄對齊方式
  149.     @actor = nil            #清空角色資料
  150.     self.contents = Bitmap.new(width - 32, height - 32) if self.contents.nil?
  151.     self.contents.clear
  152.     self.contents.font.color = normal_color
  153.     self.contents.font.size = 20
  154.     self.contents.draw_text(4 , 0, self.width - 40, 28, data, align)
  155.     self.visible = true
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 更新帮助窗口
  159.   #--------------------------------------------------------------------------
  160.   def draw_data(data=@data)
  161.     self.width = 186        #修正寬度
  162.     self.height = 430       #修正高度
  163.     self.x = 0              #修正 x 坐標
  164.     self.y = 150            #修正 y 坐標
  165.     @data = data            #記錄 data 資料
  166.     case @data
  167.     when RPG::Item
  168.       set_item_text(@data)
  169.     when RPG::Weapon, RPG::Armor
  170.       set_equipment_text(@data)
  171.     when RPG::Skill
  172.       set_skill_text(@data)
  173.     end
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● 修正窗口位置
  177.   #--------------------------------------------------------------------------
  178.   def set_pos(x,y,width,oy,index,column_max)
  179.     cursor_width = width / column_max - 32
  180.     xx = index % column_max * (cursor_width + WLH)
  181.     yy = index / column_max * WLH - oy
  182.     self.x = xx + x + 140
  183.     self.y = yy + y + 35
  184.     if self.x + self.width > 608
  185.       self.x = 608 - self.width
  186.     end
  187.     if self.y + self.height > 480
  188.       self.y = 480 - self.height
  189.     end  
  190.   end
  191.  
  192.   #------------------------------------------------------------------------
  193.   # ● 文字描繪
  194.   #------------------------------------------------------------------------
  195.   def draw_text(text, increase, move=0)
  196.     @y += increase
  197.     self.contents.font.size = @size
  198.     @special_size = 0 if @special_size == nil
  199.     @first_line = 0 if @first_line == nil
  200.     if @special_size > 0 and not @data.is_a?(RPG::Item)
  201.       if @y >= increase * @first_line
  202.         case @special_size
  203.         when 0
  204.           self.contents.font.color = normal_color
  205.         when 1
  206.           self.contents.font.color = text_color(12)
  207.         when 2
  208.           self.contents.font.color = text_color(29)
  209.         when 3
  210.           self.contents.font.color = text_color(17)
  211.         when 4
  212.           self.contents.font.color = text_color(30)
  213.         when 5
  214.           self.contents.font.color = text_color(26)
  215.         when 6
  216.           self.contents.font.color = text_color(20)
  217.         when 7
  218.           self.contents.font.color = text_color(10)
  219.         end
  220.       end
  221.       self.contents.draw_text(0+move, @y*@size+5, text.size*6, @size, text, 0)
  222.     else
  223.       self.contents.font.color = normal_color
  224.       self.contents.draw_text(0+move, @y*@size+5, text.size*6, @size, text, 0)
  225.     end
  226.   end
  227.  
  228. #-------------------------------------#
  229. # 子方法
  230. #-------------------------------------#
  231.   #--------------------------------------------------------------------------
  232.   # ● 裝備幫助窗口
  233.   #--------------------------------------------------------------------------
  234.   def set_equipment_text(equipment)
  235.     #------------------------------------------------------------------------
  236.     # ● 取得基本質料
  237.     #------------------------------------------------------------------------
  238.  
  239.     #----------------------------#
  240.     # 取得屬性、狀態、說明之副本 #
  241.     #----------------------------#
  242.     element_set = equipment.element_set.clone
  243.     state_set   = equipment.state_set.clone
  244.     description = equipment.description.clone
  245.     phrase      = @phrase
  246.     #----------------------------#
  247.     # 過濾不顯示的屬性與狀態描述 #
  248.     #----------------------------#
  249.     element_set -= @unshow_elements
  250.     state_set   -= @unshow_states
  251.     #----------------#
  252.     # 初始化數據設定 #
  253.     #----------------#
  254.     x, h, move = 0, 0, 0
  255.     #------------------#
  256.     # 取得特殊效果數據 #
  257.     #------------------#
  258.     special = []
  259.     gifts = equipment.gifts
  260.     gifts = [] if gifts.nil?
  261.     s = [
  262.     "攻击 + [s]",   "攻击 + [s]%",
  263.     "防御 + [s]",   "防御 + [s]%",
  264.     "魔力 + [s]",   "魔力 + [s]%",
  265.     "速度 + [s]",   "速度 + [s]%",
  266.     "最大HP + [s]", "最大HP + [s]%",
  267.     "最大MP + [s]", "最大MP + [s]%",
  268.     "命中率 + [s]",
  269.     "闪避率 + [s]",
  270.     "暴击率 + [s]",
  271.     "四项属性 + [s]%","四项属性 + [s]",
  272.     "抗魔附加 + [s]"
  273.     ]
  274.     for g in gifts
  275.       special << s[g.type].sub(/\[s\]/) {g.value}
  276.     end
  277.     #------------------------------------------------------------------------
  278.     # ● 確定背景圖片的高度
  279.     #------------------------------------------------------------------------
  280.     h += (description.size/3/@word)
  281.     h += 1 if (description.size/3%@word) >= 0
  282.     now_h = h
  283.  
  284.     h += 1                                               #價格
  285.     h += 1                                               #装备等级
  286.    # h += 1 unless equipment.nodur or PA::USE_DUR == false#耐久度
  287.     h += 1 if equipment.sockets_num > 0                  #孔数
  288.  
  289.     h += 1 unless equipment.atk.zero?                    #攻擊力
  290.     h += 1 unless equipment.def.zero?                    #防禦力
  291.     h += 1 unless equipment.spi.zero?                    #精神力
  292.     h += 1 unless equipment.agi.zero?                    #敏捷力
  293.  
  294.     h += element_set.size + 1 if element_set.size > 0    #屬性
  295.     h += state_set.size   + 1 if state_set.size   > 0    #狀態
  296.     h += special.size     + 2 if special.size     > 0    #特殊效果
  297.     if special.size > 0
  298.     case special.size
  299.     when 1
  300.       @first_line = h-1
  301.     when 2
  302.       @first_line = h-2
  303.     when 3
  304.       @first_line = h-3
  305.     when 4
  306.       @first_line = h-4
  307.     when 5
  308.       @first_line = h-5
  309.     when 6
  310.       @first_line = h-6
  311.     end
  312.     end
  313.     @special_size = special.size
  314.  
  315.     #------------------------------------------------------------------------
  316.     # ● 圖片顯示保證高度
  317.     #------------------------------------------------------------------------
  318.     #h = 6 + now_h if (h - now_h) < 6
  319.     #------------------------------------------------------------------------
  320.     # ● 換算高度
  321.     #------------------------------------------------------------------------
  322.     self.height = h * @size + @name_size + 36
  323.     #------------------------------------------------------------------------
  324.     # ● 生成背景
  325.     #------------------------------------------------------------------------
  326.     self.contents = Bitmap.new(self.width - 32, self.height - 32)
  327.     self.contents.clear
  328.     #------------------------------------------------------------------------
  329.     # ● 名字描繪
  330.     #------------------------------------------------------------------------
  331.     text = equipment.name
  332.     self.contents.font.size = @name_size
  333.     if text.nil?
  334.       self.visible = false
  335.     else
  336.       self.visible = true
  337.       ###self.contents.draw_text(0, 0, text.size*7, @name_size, text, 0)
  338.       #我加的,用case判断颜色
  339.       unless equipment.is_a?(RPG::Item)
  340.         case gifts.size
  341.         when 1
  342.           self.contents.font.color = text_color(12)
  343.         when 2
  344.           self.contents.font.color = text_color(29)
  345.         when 3
  346.           self.contents.font.color = text_color(17)
  347.         when 4
  348.           self.contents.font.color = text_color(31)
  349.         when 5
  350.           self.contents.font.color = text_color(26)
  351.         when 6
  352.           self.contents.font.color = text_color(20)
  353.         when 7
  354.           self.contents.font.color = text_color(10)
  355.         end
  356.       else
  357.         self.contents.font.color = text_color(0)
  358.       end  
  359.       self.contents.draw_text(0, 0, contents.width-4, @name_size, text)
  360.     end
  361.     #------------------------------------------------------------------------
  362.     # ● 說明描繪
  363.     #------------------------------------------------------------------------
  364.     x = 0
  365.     @y += 1
  366.     while ((text = description.slice!(/./m)) != nil)
  367.       self.contents.font.color = normal_color
  368.       self.contents.font.size = @size
  369.       self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  370.       if words_judge(text) == true
  371.         x += 1
  372.       else
  373.         x += 0.5
  374.       end  
  375.       if x == @word or x == @word - 0.5
  376.         x = 0
  377.         @y += 1
  378.       end
  379.     end
  380.     #------------------------------------------------------------------------
  381.     # ● 圖標描繪
  382.     #------------------------------------------------------------------------
  383.     #bitmap = Cache.system("Iconset")
  384.     #rect = Rect.new(equipment.icon_index % 16 * 24, equipment.icon_index / 16 * 24, 24, 24)
  385.     #self.contents.blt(0, y*size + 20, bitmap, rect, 255)
  386.     #------------------------------------------------------------------------
  387.     # ● 價格描繪
  388.     #------------------------------------------------------------------------
  389.     unless equipment.price.zero?
  390.       text = phrase[:price] + ":" + equipment.price.to_s
  391.       draw_text(text, 1, move)
  392.     end
  393.     #------------------------------------------------------------------------
  394.     # ● 装备等级描繪
  395.     #------------------------------------------------------------------------
  396.     unless equipment.read_note('装备等级') == nil
  397.       text = "角色等级要求:" + equipment.read_note('装备等级').to_s
  398.       draw_text(text, 1, move)
  399.     end
  400.     #------------------------------------------------------------------------
  401.     # ● 耐久度
  402.     #------------------------------------------------------------------------
  403.     if PA::USE_DUR == true
  404.       unless equipment.nodur
  405.         unless equipment.indesctructible
  406.           if equipment.maxdur == nil
  407.             text = "耐久度:#{equipment.dur} / #{equipment.read_note('耐久度')}"
  408.           else
  409.             text = "耐久度:#{equipment.dur} / #{equipment.maxdur}"
  410.           end
  411.         else
  412.           text = "耐久度:无法破坏"
  413.         end
  414.         draw_text(text, 1, move)
  415.       end
  416.     end
  417.     #------------------------------------------------------------------------
  418.     # ● 孔数
  419.     #------------------------------------------------------------------------
  420.     if equipment.sockets_num > 0
  421.       text = "剩余孔数:#{equipment.sockets_num}"
  422.       draw_text(text, 1, move)
  423.     end  
  424.     #------------------------------------------------------------------------
  425.     # ● 攻擊力
  426.     #------------------------------------------------------------------------
  427.     unless equipment.atk.zero?
  428.       text = $data_system.terms.atk + ":" + equipment.base_atk.to_s
  429.       draw_text(text, 1, move)
  430.     end
  431.     #------------------------------------------------------------------------
  432.     # ● 防禦力
  433.     #------------------------------------------------------------------------
  434.     unless equipment.def.zero?
  435.       text = $data_system.terms.def + ":" + equipment.base_def.to_s
  436.       draw_text(text, 1, move)
  437.     end
  438.     #------------------------------------------------------------------------
  439.     # ● 精神力
  440.     #------------------------------------------------------------------------
  441.     unless equipment.spi.zero?
  442.       text = $data_system.terms.spi + ":" + equipment.base_spi.to_s
  443.       draw_text(text, 1, move)
  444.     end
  445.     #------------------------------------------------------------------------
  446.     # ● 敏捷力
  447.     #------------------------------------------------------------------------
  448.     unless equipment.agi.zero?
  449.       text = $data_system.terms.agi + ":" + equipment.base_agi.to_s
  450.       draw_text(text, 1, move)
  451.     end
  452.     #------------------------------------------------------------------------
  453.     # ● 屬性
  454.     #------------------------------------------------------------------------
  455.     if element_set.size > 0
  456.       case equipment
  457.       when RPG::Weapon
  458.         text=phrase[:elements]+":"
  459.       when RPG::Armor
  460.         text=phrase[:guard_elements]+":"
  461.       end
  462.       draw_text(text, 1, move)
  463.       element_set.each do |i|
  464.         text = $data_system.elements[i]
  465.         draw_text(text, 1, move + @size)
  466.       end
  467.     end
  468.     #------------------------------------------------------------------------
  469.     # ● 狀態
  470.     #------------------------------------------------------------------------
  471.     if state_set.size > 0
  472.       case equipment
  473.       when RPG::Weapon
  474.         text=phrase[:states]+":"
  475.       when RPG::Armor
  476.         text=phrase[:guard_states]+":"
  477.       end
  478.       draw_text(text, 1, move)
  479.       state_set.each do |i|
  480.         text = $data_states[i].name
  481.         draw_text(text, 1, move + @size)
  482.       end
  483.     end
  484.     #------------------------------------------------------------------------
  485.     # ● 特殊效果
  486.     #------------------------------------------------------------------------
  487.     if special.size > 0
  488.       kind_text = ["","","",""]
  489.       weapon_gifts = [0,1,4,5,12,14,15]
  490.       armor0_gifts = [2,3,4,5,10,11,15,16]
  491.       armor1_gifts = [2,3,8,9,15,16]
  492.       armor2_gifts = [2,3,6,7,13,15,16]
  493.       kind_text[0] = " 武器" if  weapon_gifts.include?(equipment.gifts[0].type)
  494.       kind_text[1] = " 盾牌" if  armor0_gifts.include?(equipment.gifts[0].type)
  495.       kind_text[2] = " 头盔" if  armor1_gifts.include?(equipment.gifts[0].type)
  496.       kind_text[3] = " 身体" if  armor2_gifts.include?(equipment.gifts[0].type)
  497.       if equipment.is_a?(RPG::Armor) and equipment.base_id == PA::CRYSTAL
  498.         text = "可注入" + kind_text[0] + kind_text[1] + kind_text[2] + kind_text[3]
  499.         draw_text(text, 1, move)
  500.         special.each {|text| draw_text(text, 1, move + @size)}
  501.       else
  502.         text = phrase[:special]+":"
  503.         draw_text(text, 1, move)
  504.         special.each {|text| draw_text(text, 1, move + @size)}
  505.       end
  506.     end
  507.   end
  508.  
  509. #////////////////////////////////////////////////////////////////////////////
  510.   #--------------------------------------------------------------------------
  511.   # ● 物品幫助窗口
  512.   #--------------------------------------------------------------------------
  513.   def set_item_text(item)
  514.     #----------------------------#
  515.     # 取得屬性、狀態、說明之副本 #
  516.     #----------------------------#
  517.     description = item.description.clone
  518.     element_set = item.element_set.clone
  519.     plus_state_set = item.plus_state_set.clone
  520.     minus_state_set = item.minus_state_set.clone
  521.     # 過濾不顯示的描述
  522.     element_set -= @unshow_elements
  523.     plus_state_set -= @unshow_states
  524.     minus_state_set -= @unshow_states
  525.     # 初始化數據設定
  526.     x, h, move = 0, 0, 0
  527.     phrase = @phrase
  528.     scope = @scope
  529.     parameter_type = @parameter_type
  530.     occasion = @occasion
  531.     # 基本文字設定
  532.  
  533.  
  534.     #------------------#
  535.     # 取得特殊效果數據 #
  536.     #------------------#
  537.     special = []
  538.     special << phrase[:physical_attack] if item.physical_attack #物理攻撃
  539.     special << phrase[:damage_to_mp]    if item.damage_to_mp    #MPにダメージ
  540.     special << phrase[:absorb_damage]   if item.absorb_damage   #ダメージを吸収
  541.     special << phrase[:ignore_defense]  if item.ignore_defense  #防御力無視
  542.  
  543.     #------------------------------------------------------------------------
  544.     # ● 確定背景圖片的高度
  545.     #------------------------------------------------------------------------
  546.     h += (description.size/3/@word)
  547.     h += 1 if (description.size/3%@word) >= 0
  548.     now_h = h
  549.  
  550.     h += 2 unless scope[item.scope] == "无" #効果範囲
  551.     h += 1 unless item.price == 0           #價格
  552.     h += 1 if item.consumable               #消耗品
  553.     h += 1 unless item.speed.zero?          #速度補正値
  554.  
  555.     h += 1 unless item.hp_recovery_rate==0 and item.hp_recovery==0 #HP 回復
  556.     h += 1 unless item.mp_recovery_rate==0 and item.mp_recovery==0 #MP 回復
  557.  
  558.     h += 1 unless item.parameter_type.zero? #能力値
  559.     h += 1 unless item.base_damage.zero?    #基本ダメージ
  560.  
  561.     h += element_set.size     + 1 if element_set.size     > 0  #屬性
  562.     h += plus_state_set.size  + 1 if plus_state_set.size  > 0  #附加狀態
  563.     h += minus_state_set.size + 2 if minus_state_set.size > 0  #解除狀態
  564.     h += special.size         + 1 if special.size         > 0  #特殊效果
  565.  
  566.     #------------------------------------------------------------------------
  567.     # ● 圖片顯示保證高度
  568.     #------------------------------------------------------------------------
  569.     #h = 6 + now_h if (h - now_h) < 6
  570.     #------------------------------------------------------------------------
  571.     # ● 換算高度
  572.     #------------------------------------------------------------------------
  573.     self.height = h * @size + @name_size + 36
  574.     #------------------------------------------------------------------------
  575.     # ● 生成背景
  576.     #------------------------------------------------------------------------
  577.     self.contents = Bitmap.new(self.width - 32, self.height - 32)
  578.     self.contents.clear
  579.     #------------------------------------------------------------------------
  580.     # ● 名字描繪
  581.     #------------------------------------------------------------------------
  582.     text = item.name
  583.     self.contents.font.color = normal_color#顔色腳本
  584.     self.contents.font.size = @name_size
  585.     if text.nil?
  586.       self.visible = false
  587.     else
  588.       self.visible = true
  589.       self.contents.draw_text(0,0, text.size*7, 20, text, 0)
  590.     end
  591.     #------------------------------------------------------------------------
  592.     # ● 說明描繪
  593.     #------------------------------------------------------------------------
  594.      x = 0
  595.     @y += 1
  596.     while ((text = description.slice!(/./m)) != nil)
  597.       self.contents.font.color = normal_color
  598.       self.contents.font.size = @size
  599.       self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  600.       if words_judge(text) == true
  601.         x+=1
  602.       else
  603.         x+=0.5
  604.       end  
  605.       if x == @word or x == @word - 0.5
  606.         x = 0
  607.         @y += 1
  608.       end
  609.     end
  610.     #------------------------------------------------------------------------
  611.     # ● 圖標描繪
  612.     #------------------------------------------------------------------------
  613.     #bitmap = Cache.system("Iconset")
  614.     #rect = Rect.new(item.icon_index % 16 * 24, equipment.icon_index / 16 * 24, 24, 24)
  615.     #self.contents.blt(0, y*size + 20, bitmap, rect, 255)
  616.     #------------------------------------------------------------------------
  617.     # ● 效果範圍
  618.     #------------------------------------------------------------------------
  619.     unless scope[item.scope] == "无"
  620.       text = phrase[:scope] +":"
  621.       draw_text(text, 1, move)
  622.       text = scope[item.scope]
  623.       draw_text(text, 1, move + @size)
  624.     end
  625.     #------------------------------------------------------------------------
  626.     # ● 價格
  627.     #------------------------------------------------------------------------
  628.     unless item.price == 0
  629.       text = phrase[:price] + ":" + item.price.to_s
  630.       draw_text(text, 1, move)
  631.     end
  632.     #------------------------------------------------------------------------
  633.     # ● 消耗品
  634.     #------------------------------------------------------------------------
  635.     if item.consumable
  636.       text = phrase[:consumable]
  637.       draw_text(text, 1, move)
  638.     end
  639.     #------------------------------------------------------------------------
  640.     # ● 速度補正値
  641.     #------------------------------------------------------------------------
  642.     unless item.speed.zero?
  643.       text = phrase[:speed]
  644.       draw_text(text, 1, move)
  645.     end
  646.     #------------------------------------------------------------------------
  647.     # ● HP回復
  648.     #------------------------------------------------------------------------
  649.     unless item.hp_recovery_rate.zero? and item.hp_recovery.zero?
  650.       if item.hp_recovery_rate > 0 and item.hp_recovery > 0
  651.         text = " + "
  652.       else
  653.         text = ""
  654.       end
  655.  
  656.       unless item.hp_recovery_rate.zero?
  657.         text = item.hp_recovery_rate.to_s + "%" + text
  658.       end
  659.       unless item.hp_recovery.zero?
  660.         text += item.hp_recovery.to_s
  661.       end
  662.       text = phrase[:recover] +":"  + text + phrase[:hp]
  663.       draw_text(text, 1, move)
  664.     end
  665.     #------------------------------------------------------------------------
  666.     # ● SP回復
  667.     #------------------------------------------------------------------------
  668.     unless item.mp_recovery_rate.zero? and item.mp_recovery.zero?
  669.       if item.mp_recovery_rate > 0 and item.mp_recovery > 0
  670.         text = " + "
  671.       else
  672.         text = ""
  673.       end
  674.  
  675.       unless item.mp_recovery_rate.zero?
  676.         text = item.mp_recovery_rate.to_s + "%" + text
  677.       end
  678.       unless item.mp_recovery.zero?
  679.         text += item.mp_recovery.to_s
  680.       end
  681.       text = phrase[:recover] +":" + text + phrase[:mp]
  682.       draw_text(text, 1, move)
  683.     end
  684.     #------------------------------------------------------------------------
  685.     # ● 能力值增加
  686.     #------------------------------------------------------------------------
  687.     unless item.parameter_type.zero?
  688.       text = parameter_type[item.parameter_type]+" +"+item.parameter_points.to_s
  689.       draw_text(text, 1, move)
  690.     end
  691.     #------------------------------------------------------------------------
  692.     # ● 基本ダメージ
  693.     #------------------------------------------------------------------------
  694.     unless item.base_damage.zero?
  695.       #text = phrase[:base_damage] +":" + item.base_damage.to_s
  696.       text = item.base_damage > 0 ? phrase[:base_damage] +":" + item.base_damage.to_s: phrase[:recovery] +":" + (-item.base_damage).to_s
  697.       draw_text(text, 1, move)
  698.     end
  699.     #------------------------------------------------------------------------
  700.     # ● 屬性
  701.     #------------------------------------------------------------------------
  702.     if element_set.size > 0
  703.       text = phrase[:elements]+":"
  704.       draw_text(text, 1, move)
  705.       element_set.each do |i|
  706.         text = $data_system.elements[i]
  707.         draw_text(text, 1, move + @size)
  708.       end
  709.     end
  710.     #------------------------------------------------------------------------
  711.     # ● 添加狀態
  712.     #------------------------------------------------------------------------
  713.     unless plus_state_set.empty?
  714.       text = phrase[:plus_states]+":"
  715.       draw_text(text, 1, move)
  716.       plus_state_set.each do |i|
  717.         text = $data_states[i].name
  718.         draw_text(text, 1, move + @size)
  719.       end
  720.     end
  721.     #------------------------------------------------------------------------
  722.     # ● 解除狀態
  723.     #------------------------------------------------------------------------
  724.     unless minus_state_set.empty?
  725.       text = phrase[:minus_states]+":"
  726.       draw_text(text, 1, move)
  727.       minus_state_set.each do |i|
  728.         text = $data_states[i].name
  729.         draw_text(text, 1, move + @size)
  730.       end
  731.     end
  732.     #------------------------------------------------------------------------
  733.     # ● 特殊效果
  734.     #------------------------------------------------------------------------
  735.     if special.size > 0
  736.       text = phrase[:special]+":"
  737.       draw_text(text, 1, move)
  738.       special.each {|text| draw_text(text, 1, move + @size)}
  739.     end
  740.   end
  741. #////////////////////////////////////////////////////////////////////////////
  742.   #--------------------------------------------------------------------------
  743.   # ● 技能帮助窗口
  744.   #--------------------------------------------------------------------------
  745.   def set_skill_text(skill)
  746.     #----------------------------#
  747.     # 取得屬性、狀態、說明之副本 #
  748.     #----------------------------#
  749.     description = skill.description.clone
  750.     element_set = skill.element_set.clone
  751.     plus_state_set = skill.plus_state_set.clone
  752.     minus_state_set = skill.minus_state_set.clone
  753.     # 過濾不顯示的描述
  754.     element_set -= @unshow_elements
  755.     plus_state_set -= @unshow_states
  756.     minus_state_set -= @unshow_states
  757.     # 初始化設定
  758.     x ,h, move = 0, 0, 0
  759.     phrase = @phrase
  760.     scope = @scope
  761.     #------------------#
  762.     # 取得特殊效果數據 #
  763.     #------------------#
  764.     special = []
  765.     special << phrase[:physical_attack] if skill.physical_attack #物理攻撃
  766.     special << phrase[:damage_to_mp]    if skill.damage_to_mp    #MPにダメージ
  767.     special << phrase[:absorb_damage]   if skill.absorb_damage   #ダメージを吸収
  768.     special << phrase[:ignore_defense]  if skill.ignore_defense  #防御力無視
  769.     #------------------------------------------------------------------------
  770.     # ● 確定背景圖片的高度
  771.     #------------------------------------------------------------------------
  772.     h += (description.size/3/@word)
  773.     h += 1 if (description.size/3%@word) >= 0
  774.     now_h = h
  775.  
  776.     h += 4                                  #効果範囲,消費MP,命中率
  777.     h += 1 unless skill.speed.zero?         #速度補正値
  778.     h += 1 unless skill.base_damage.zero?   #基本ダメージ
  779.  
  780.  
  781.  
  782.     h += element_set.size     + 1 if element_set.size     > 0  #屬性
  783.     h += plus_state_set.size  + 1 if plus_state_set.size  > 0  #附加狀態
  784.     h += minus_state_set.size + 1 if minus_state_set.size > 0  #解除狀態
  785.     h += special.size         + 1 if special.size         > 0  #特殊效果
  786.     @special_size = nil
  787.     @first_line = nil
  788.     #------------------------------------------------------------------------
  789.     # ● 換算高度
  790.     #------------------------------------------------------------------------
  791.     self.height=(h + 1) * @size + @name_size + 36  
  792.     self.contents = Bitmap.new(self.width - 32,self.height - 32)
  793.     self.contents.clear
  794.  
  795.     #------------------------------------------------------------------------
  796.     # ● 名字描述
  797.     #------------------------------------------------------------------------
  798.     text = skill.name
  799.     self.contents.font.color = Color.new(255, 255, 128, 255)
  800.     self.contents.font.size = @name_size
  801.     if text!=nil
  802.       self.visible = true
  803.       self.contents.draw_text(0,0, text.size*7, @name_size, text, 0)
  804.     else
  805.       self.visible = false
  806.     end
  807.  
  808.     #------------------------------------------------------------------------
  809.     # ● 說明描述
  810.     #------------------------------------------------------------------------
  811.     x = 0
  812.     @y += 1
  813.     text = description
  814.     text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  815.     while ((text = description.slice!(/./m)) != nil)
  816.       self.contents.font.color = Color.new(8, 200, 255, 255)#system_color
  817.       self.contents.font.size = @size
  818.       self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  819.       if words_judge(text) == true
  820.         x+=1
  821.       else
  822.         x+=0.5
  823.       end  
  824.       if x == @word or x == @word - 0.5
  825.         x = 0
  826.         @y += 1
  827.       end
  828.     end
  829.     #------------------------------------------------------------------------
  830.     # ● 攻擊範圍
  831.     #------------------------------------------------------------------------
  832.     self.contents.font.color = normal_color
  833.     text = phrase[:scope] +":"
  834.     draw_text(text, 1, move)
  835.     text = scope[skill.scope]
  836.     draw_text(text, 1, move + @size)
  837.     #------------------------------------------------------------------------
  838.     # ● 基本ダメージ
  839.     #------------------------------------------------------------------------
  840.     unless skill.base_damage .zero?
  841.       text = skill.base_damage > 0 ? phrase[:base_damage] : phrase[:recovery]
  842.       text += ":" + skill.base_damage.abs.to_s
  843.       draw_text(text, 1, move)
  844.     end
  845.     #------------------------------------------------------------------------
  846.     # ● 消費SP描述
  847.     #------------------------------------------------------------------------
  848.     text = phrase[:mp_cost] +":"+ skill.mp_cost.to_s
  849.     if skill.mp_cost == 0 and skill.base_damage .zero? #被动技能调用
  850.       text = phrase[:mp_cost] +":"+ "被动技能"
  851.     end
  852.     draw_text(text, 1, move)
  853.     #------------------------------------------------------------------------
  854.     # ● 命中率描述
  855.     #------------------------------------------------------------------------
  856.     text = phrase[:hit] + ":" + skill.hit.to_s + "%"
  857.     draw_text(text, 1, move)
  858.     #------------------------------------------------------------------------
  859.     # ● 屬性
  860.     #------------------------------------------------------------------------
  861.     if element_set.size > 0
  862.       text = phrase[:elements]+":"
  863.       draw_text(text, 1, move)
  864.       element_set.each do |i|
  865.         text = $data_system.elements[i]
  866.         draw_text(text, 1, move + @size)
  867.       end
  868.     end
  869.     #------------------------------------------------------------------------
  870.     # ● 添加狀態
  871.     #------------------------------------------------------------------------
  872.     unless plus_state_set.empty?
  873.       text = phrase[:plus_states]+":"
  874.       draw_text(text, 1, move)
  875.       plus_state_set.each do |i|
  876.         text = $data_states[i].name
  877.         draw_text(text, 1, move + @size)
  878.       end
  879.     end
  880.     #------------------------------------------------------------------------
  881.     # ● 解除狀態
  882.     #------------------------------------------------------------------------
  883.     unless minus_state_set.empty?
  884.       text = phrase[:minus_states]+":"
  885.       draw_text(text, 1, move)
  886.       minus_state_set.each do |i|
  887.         text = $data_states[i].name
  888.         draw_text(text, 1, move + @size)
  889.       end
  890.     end
  891.     #------------------------------------------------------------------------
  892.     # ● 特殊效果
  893.     #------------------------------------------------------------------------
  894.     if special.size > 0
  895.       text = phrase[:special]+":"
  896.       draw_text(text, 1, move)
  897.       special.each {|text| draw_text(text, 1, move + @size)}
  898.     end  
  899.   end
  900.   #------------------------------------------------------------------------
  901.   # ● 文字数字判定
  902.   #------------------------------------------------------------------------
  903.   def words_judge(word)
  904.     case word
  905.     when "0","1","2","3","4","5","6","7","8","9","%",".","A","B","C","D","E",\
  906.       "F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W",\
  907.       "X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",\
  908.       "p","q","r","s","t","u","v","w","x","y","z"
  909.       return false
  910.     end
  911.     return true
  912.   end  
  913. end
  914.  
  915. #==============================================================================
  916. # ■ Window_Item
  917. #------------------------------------------------------------------------------
  918. #  アイテム画面などで、所持アイテムの一覧を表示するウィンドウです。
  919. #==============================================================================
  920.  
  921. class Window_Item < Window_Selectable
  922.   #--------------------------------------------------------------------------
  923.   # ● ヘルプテキスト更新
  924.   #--------------------------------------------------------------------------
  925.   def update_help
  926.     @help_window.set_text(item)
  927.     #修正窗口位置
  928.     @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  929.   end
  930. end
  931. #==============================================================================
  932. # ■ Window_Skill
  933. #------------------------------------------------------------------------------
  934. #  スキル画面などで、使用できるスキルの一覧を表示するウィンドウです。
  935. #==============================================================================
  936.  
  937. class Window_Skill < Window_Selectable
  938.   #--------------------------------------------------------------------------
  939.   # ● ヘルプテキスト更新
  940.   #--------------------------------------------------------------------------
  941.   def update_help   
  942.     @help_window.set_text(skill)
  943.     if skill != nil
  944.       @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  945.     else
  946.       @help_window.x = 1000  #没有物品时,让帮助窗口出界而看不见
  947.     end
  948.   end
  949. end
  950. #==============================================================================
  951. # ■ Window_Equip
  952. #------------------------------------------------------------------------------
  953. #  装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。
  954. #==============================================================================
  955.  
  956. class Window_Equip < Window_Selectable
  957.   #--------------------------------------------------------------------------
  958.   # ● ヘルプテキスト更新
  959.   #--------------------------------------------------------------------------
  960.   def update_help   
  961.     @help_window.set_text(item)
  962.     if item != nil
  963.       @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  964.     else
  965.       @help_window.x = 1000  #没有物品时,让帮助窗口出界而看不见
  966.     end
  967.   end
  968. end
  969. #==============================================================================
  970. # ■ Window_ShopBuy
  971. #------------------------------------------------------------------------------
  972. #  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
  973. #==============================================================================
  974. class Window_ShopBuy < Window_Selectable
  975.   #--------------------------------------------------------------------------
  976.   # ● ヘルプテキスト更新
  977.   #--------------------------------------------------------------------------
  978.   def update_help   
  979.     @help_window.set_text(item)
  980.     if item != nil
  981.       @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  982.     else
  983.       @help_window.x = 1000  #没有物品时,让帮助窗口出界而看不见
  984.     end
  985.   end
  986. end
  

点评

爱莫能助~  发表于 2014-6-3 14:38

评分

参与人数 2星屑 +10 收起 理由
美丽晨露 + 5 打个酱油
完全默认 + 5 我只是个玩家和打酱油的~

查看全部评分

长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890

Lv1.梦旅人

梦石
0
星屑
55
在线时间
108 小时
注册时间
2014-3-29
帖子
125
来自 2楼
发表于 2014-6-6 19:39:50 | 只看该作者
此帖仅作者可见

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
3
 楼主| 发表于 2014-6-6 20:58:42 | 只看该作者
此帖仅作者可见
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 16:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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